Passt „glmnet“ in R zu einem Achsenabschnitt?


10

Ich passe ein lineares Modell in R an glmnet. Das ursprüngliche (nicht regulierte) Modell wurde unter Verwendung von angepasst lmund hatte keinen konstanten Term (dh es war in der Form lm(y~0+x1+x2,data)).

glmnetnimmt eine Matrix von Prädiktoren und einen Vektor von Antworten. Ich habe die glmnetDokumentation gelesen und kann den konstanten Begriff nicht erwähnen.

Gibt es also eine Möglichkeit zu fragen, ob glmnetdie lineare Anpassung durch den Ursprung erzwungen werden soll?

Antworten:


12

Ja, ein Achsenabschnitt ist in einem glmnet- Modell enthalten, aber nicht reguliert (vgl. Regularisierungspfade für verallgemeinerte lineare Modelle über Koordinatenabstieg , S. 13). Weitere Details zur Implementierung könnten sicherlich durch sorgfältiges Betrachten des Codes erhalten werden (für eine Gaußsche Familie ist es die elnet()Funktion, die von aufgerufen wird glmnet()), aber sie befindet sich in Fortran.

Sie können das bestrafte Paket ausprobieren , mit dem Sie den Abschnitt entfernen können, indem Sie unpenalized = ~0an übergeben 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))

Um die Lasso-Regularisierung zu erhalten, können Sie etwas wie versuchen

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

Wie in der nächsten Abbildung zu sehen ist, gibt es kaum Unterschiede zwischen den mit beiden Methoden berechneten Regressionsparametern (links), und Sie können die Lasso-Pfadlösung sehr einfach darstellen (rechts).

Alt-Text

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.