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 por
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
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 .
O problema de otimização OLS-Lasso é então dado por
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.alpha=1
Agora eu tenho os coeficientes beta para os regressores que representam a solução ideal do problema de minimização
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.
Meu entendimento e o código estão corretos?
$\alpha$
torna-se . Faça isso, pois isso facilitará as pessoas a entender sua pergunta e, portanto, responder.