Como corrigir um coeficiente e ajustar outros usando regressão


11

Gostaria de corrigir manualmente um certo coeficiente, digamos , e depois ajustar os coeficientes a todos os outros preditores, mantendo β 1 = 1,0 no modelo.β1=1.0β1=1.0

Como posso conseguir isso usando R? Eu particularmente gostaria de trabalhar com o LASSO ( glmnet), se possível.

Como alternativa, como posso restringir esse coeficiente para um intervalo específico, digamos ?0.5β11.0


Para especificar restrições de caixa nos coeficientes ajustados, existem os argumentos lower.limits e upper.limits no glmnet, certo?
Tom Wenseleers

Respostas:


4

Você precisa usar o offsetargumento assim:

library(glmnet)
x=matrix(rnorm(100*20),100,20)
x1=matrix(rnorm(100),100,1)
y=rnorm(100)
fit1=glmnet(x,y,offset=x1)
fit1$offset
print(fit1)

Sobre a faixa ... Acho que isso não foi implementado glmnet. Se eles usam algum método numérico, convém cavar o código R e tentar restringi-lo por lá, mas você precisará de um bom e sólido histórico de programação.


2
O que está offsetrealmente fazendo? Como é 1.1*x1determinado o valor da pergunta?
whuber

Eu li a documentação para 'offset' no glmnet e ainda não tenho certeza do que ele faz. Não encontrei grandes exemplos, mas a maioria faz referência a processos de Poisson. Por que 1.1 * x1 é usado?
raco 16/01

Eu pensei que ele estava fixando os coeficientes em . Acabei de editar a resposta. A compensação é o termo em que seu coeficiente não é estimado pelo modelo, mas é assumido como tendo o valor 1. #β1=1.1
Stat

Estou feliz o suficiente com esta resposta. Eu posso iterar sobre diferentes "coeficientes" de deslocamento e comparar modelos. Obrigado!
raco 22/01

1
Com relação à offsetdo glmnetpacote, a resposta fornecida pelo Stat não faz sentido me. Quando executo fit1 beta)], não vejo β 1 = 1,0 . Você poderia esclarecer como o deslocamento está funcionando no seu exemplo? Para o intervalo dos betas, você pode usar os argumentos e . beta[,ncol(fit1β1=1.0lower.limitsupper limits
Mario Nuñez 14/01

9

Bem, vamos pensar. Você tem:

Y=b0+b1x1+b2x2+e

(para simplificar) Você quer forçar , então você querb1=1

Y=b0+x1+b2x2+e

então você pode subtrair de cada lado deixando:x1

Ynew=Yx1=b0+b2x2+e

que pode então estimar .b2


2
Essa é a parte mais fácil (e foi abordada em outros tópicos, pelo que me lembro). Que tal restringir o coeficiente a um intervalo? A parte mais difícil desse problema é obter bons limites de confiança quando a estimativa está no limite da região de restrição.
whuber

2
Isso é definitivamente mais difícil. Perdi o final do post. Mas acho que devo deixar minha resposta, pois ela responde a parte da pergunta
Peter Flom - Restabelecer Monica

β11β1=0.75Ynew=Y.75x1=β0+(β10.75)x1+β2x2+ϵβ1

1
Sim, se estiver fixado em 0,75, o que você diz funcionará. Mas, como @whuber aponta, essa é a parte mais fácil deste problema
Peter Flom - Reintegrar Monica

2
@whuber, em uma estrutura bayesiana, você pode dar um passo no Metropolis para eliminar quaisquer coeficientes fora do seu alcance ou, alternativamente, pode experimentar uma distribuição normal multivariada truncada.
John

3

Com relação à restrição de coeficientes para estar dentro de um intervalo, uma abordagem bayesiana de estimativa é um meio de conseguir isso.

Em particular, confiar-se-ia em uma cadeia de Markov Monte Carlo. Primeiro, considere um algoritmo de amostragem de Gibbs, que é como você ajustaria o MCMC em uma estrutura bayesiana sem a restrição. Na amostragem de Gibbs, em cada etapa do algoritmo, você coleta amostras da distribuição posterior de cada parâmetro (ou grupo de parâmetros), condicionada aos dados e a todos os outros parâmetros. A Wikipedia fornece um bom resumo da abordagem.

Uma maneira de restringir o alcance é aplicar uma etapa Metropolis-Hastings. A idéia básica é simplesmente jogar fora qualquer variável simulada que esteja fora de seus limites. Você pode continuar amostrando novamente até que esteja dentro de seus limites antes de passar para a próxima iteração. A desvantagem disso é que você pode ficar parado simulando várias vezes, o que torna o MCMC mais lento. Uma abordagem alternativa, originalmente desenvolvida por John Geweke em alguns artigos e estendida em um artigo de Rodriguez-Yam, Davis, Sharpe, é simular a partir de uma distribuição normal multivariada restrita. Essa abordagem pode lidar com restrições de desigualdade linear e não linear em parâmetros e eu tive algum sucesso com ela.


Para especificar restrições de caixa nos coeficientes ajustados, existem os argumentos lower.limits e upper.limits no glmnet, certo?
Tom Wenseleers

@ TomWenseleers Eu estava respondendo de maneira mais geral. Olhe para algumas das outras respostas com relação a glmnet.
John

2

Não estou familiarizado com o LASSO ou glmnet, mas lavaan(abreviação de "análise de variáveis ​​latentes") facilita vários modelos de regressão com restrições de igualdade e restrições de desigualdade de limite único (consulte a tabela na página 7 deste PDF ", lavaan: An R package para modelagem de equações estruturais " ). Não sei se você poderia ter limites superior e inferior no coeficiente, mas talvez você possa adicionar cada limite com linhas separadas, por exemplo:

Coefficient>.49999999
Coefficient<1.0000001

Obviamente, se você padronizar tudo antes de ajustar o modelo, não precisará se preocupar em impor um limite superior de 1 aos coeficientes de regressão. Eu diria que é melhor você omitir neste caso, caso algo dê errado! ( ainda lavaan está na versão beta, afinal ... eu já vi alguns resultados duvidosos em meu uso limitado até agora.)


Para especificar restrições de caixa nos coeficientes ajustados, existem os argumentos lower.limits e upper.limits no glmnet, certo?
Tom Wenseleers
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.