Sim, uma interceptação é incluída em um modelo glmnet , mas não é regularizada ( consulte Caminhos de regularização para modelos lineares generalizados via descida de coordenadas , p. 13). Certamente mais detalhes sobre a implementação poderiam ser obtidos com uma análise cuidadosa do código (para uma família gaussiana, é a elnet()
função que é chamada por glmnet()
), mas está no Fortran.
Você pode tentar o pacote penalizado , que permite remover a interceptação passandounpenalized = ~0
para penalized()
.
> x <- matrix(rnorm(100*20),100,20)
> y <- rnorm(100)
> fit1 <- penalized(y, penalized=x, unpenalized=~0,
standardize=TRUE)
> fit2 <- lm(y ~ 0+x)
> plot((coef(fit1) + coef(fit2))/2, coef(fit2)-coef(fit1))
Para obter a regularização do Lasso, tente algo como
> fit1b <- penalized(y, penalized=x, unpenalized=~0,
standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)
Como pode ser visto na figura a seguir, existem poucas diferenças entre os parâmetros de regressão calculados com os dois métodos (esquerda), e você pode plotar a solução do caminho de Lasso com muita facilidade (direita).