Dans R, «glmnet» correspond-il à une interception?

10

J'ajuste un modèle linéaire dans R en utilisant glmnet. Le modèle original (non régularisé) a été ajusté en utilisant lmet n'avait pas de terme constant (c'est-à-dire qu'il était sous la forme lm(y~0+x1+x2,data)).

glmnetprend une matrice de prédicteurs et un vecteur de réponses. J'ai lu la glmnetdocumentation et je ne trouve aucune mention du terme constant.

Alors, existe-t-il un moyen de demander glmnetde forcer l'ajustement linéaire à travers l'origine?

NPE
la source

Réponses:

12

Oui, une interception est incluse dans un modèle glmnet , mais elle n'est pas régularisée (cf. Chemins de régularisation pour les modèles linéaires généralisés via la descente de coordonnées , p. 13). Plus de détails sur l'implémentation pourraient certainement être obtenus en regardant attentivement le code (pour une famille gaussienne, c'est la elnet()fonction qui est appelée par glmnet()), mais c'est dans Fortran.

Vous pouvez essayer le package pénalisé , qui permet de supprimer l'interception en passant unpenalized = ~0à 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))

Pour obtenir la régularisation Lasso, vous pouvez essayer quelque chose comme

> fit1b <- penalized(y, penalized=x, unpenalized=~0, 
                     standardize=TRUE, lambda1=1, steps=20)
> show(fit1b)
> plotpath(fit1b)

Comme on peut le voir sur la figure suivante, il y a peu de différences entre les paramètres de régression calculés avec les deux méthodes (à gauche), et vous pouvez tracer très facilement la solution du chemin de Lasso (à droite).

texte alternatif

chl
la source