R - Regressão do laço - Lambda diferente por regressor


11

Eu quero fazer o seguinte:

1) regressão OLS (sem termo de penalização) para obter coeficientes beta ; j representa as variáveis ​​usadas para regredir. Eu faço isso porbjj

lm.model = lm(y~ 0 + x)
betas    = coefficients(lm.model)

2) Na regressão do laço com um termo de penalização, os critérios de seleção serão os Critérios de Informação Bayesiana (BIC), dados por

λj=log(T)T|bj|

onde representa o número da variável / regressor, T o número de observações e b j para os betas iniciais obtidos na etapa 1). Quero ter resultados de regressão para este específico λ j valor, que é diferente para cada regressor usado. Portanto, se houver três variáveis, haverá três valores diferentes λ j .jTbjλjλj

O problema de otimização OLS-Lasso é então dado por

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

Como posso fazer isso no R com o pacote lars ou glmnet? Não consigo encontrar uma maneira de especificar lambda e não tenho 100% de certeza se obtenho os resultados corretos se executar

lars.model <- lars(x,y,type = "lasso", intercept = FALSE)
predict.lars(lars.model, type="coefficients", mode="lambda")

Agradeço qualquer ajuda aqui.


Atualizar:

Eu usei o seguinte código agora:

fits.cv = cv.glmnet(x,y,type="mse",penalty.factor = pnlty)
lmin    = as.numeric(fits.cv[9]) #lambda.min
fits    = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty)
coef    = coef(fits, s = lmin)

Na linha 1, uso validação cruzada com meu fator de penalidade especificado ( ), que é diferente para cada regressor. A linha 2 seleciona o "lambda.min" de fits.cv, que é o lambda que fornece um erro médio de validação cruzada mínimo. A linha 3 executa um ajuste de laço () nos dados. Novamente, usei o fator de penalidadeλ. A linha 4 extrai os coeficientes dos ajustes que pertencem ao "ideal"λescolhido na linha 2.λj=log(T)T|bj|alpha=1λλ

Agora eu tenho os coeficientes beta para os regressores que representam a solução ideal do problema de minimização

minbϵRn={t=1T(ytbXt)2+Tj=1m(λt|bj|)}

com um fator de penalidade . O conjunto ótimo de coeficientes é provavelmente um subconjunto dos regressores que eu inicialmente usei; isso é uma consequência do método Lasso, que reduz o número de regressores usados.λj=log(T)T|bj|

Meu entendimento e o código estão corretos?


2
Você pode usar a marcação LATEX em sua postagem, entre cifrões. $\alpha$torna-se . Faça isso, pois isso facilitará as pessoas a entender sua pergunta e, portanto, responder. α
Sycorax diz Restabelecer Monica

Respostas:


15

A partir da glmnetdocumentação ( ?glmnet), vemos que é possível realizar o encolhimento diferencial. Isso nos leva a pelo menos meio caminho para responder à pergunta do OP.

penalty.factor: Fatores de penalidade separados podem ser aplicados a cada coeficiente. Este é um número que se multiplica lambdapara permitir o encolhimento diferencial. Pode ser 0 para algumas variáveis, o que não implica retração, e essa variável é sempre incluída no modelo. O padrão é 1 para todas as variáveis ​​(e implicitamente infinito para as variáveis ​​listadas em exclude). Nota: os fatores de penalidade são redimensionados internamente para somar nvarse a lambdasequência refletirá essa alteração.

Para responder completamente à pergunta, acho que existem duas abordagens disponíveis, dependendo do que você deseja realizar.

  1. glmnetλpenalty.factorλbjϕj=logTT|bj|ϕjbjpenalty.factorCϕj=ϕjm=Cj=1mlogTT|bj|ϕjϕjCϕjglmnetλ=1coef(model, s=1, exact=T)

  2. glmnetkλλ=0bλλ

glmnetλλcoef(fits,s=something)λsomethingλ

λcv.glmnetglmnetpenalty.factor

Este procedimento otimiza

minbRmt=1T(ytbXt)2+λj=1m(ϕj|bj|)

ϕjjthpenalty.factorλϕjλϕλϕλbλ

Essa é basicamente a motivação glmnetque eu entendo: usar a regressão penalizada para estimar um modelo de regressão que não seja excessivamente otimista sobre o desempenho fora da amostra. Se esse é seu objetivo, talvez este seja o método certo para você, afinal.


+1 Isso está correto. Acrescentarei também que a regularização da regressão pode ser vista como um bayesiano anterior, ou seja, o máximo a posteriori (PAM) é uma probabilidade máxima regularizada (ML). Trabalhar nessa estrutura dá a si mesmo mais flexibilidade na regularização, se necessário.
TLJ 02/02

Se eu executar, pnlty = log(24)/(24*betas); fits = glmnet(x,y, alpha=1, intercept=FALSE, penalty.factor = pnlty) como extraio os betas regressores que correspondem ao lambda que eu especifiquei, pois o lambda é diferente para cada fator de risco?
Dom

1
@ Dom Parece-me um pouco tarde que existe uma maneira óbvia de obter exatamente o que você deseja usar glmnet. Veja minha resposta revisada.
Sycorax diz Restabelecer Monica

2
Cuidado ao personalizar a penalidade separadamente para cada preditor. Isso equivaleria a nada mais que a seleção variável de etapas em alguns casos. A regressão penalizada diminui o erro quadrático médio ao assumir um número muito limitado de parâmetros de penalidade e emprestar informações entre os preditores.
Frank Harrell

2
@FrankHarrell Obrigado pelo comentário! Parece que o uso de penalidades diferentes para cada preditor equivale a um modelo bayesiano que assume um diferente antes para cada parâmetro. Isso não me parece representar um risco único sobre a inferência bayesiana em geral. Além disso, você poderia elaborar como a regressão penalizada empresta informações entre os preditores? Não tenho certeza de entender como é esse o caso em um cenário como esse.
Sycorax diz Restabelecer Monica
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.