Czy w R „glmnet” pasuje do przechwytywania?

10

Mam sylwetkę modelu liniowego w R użyciem glmnet. Oryginalny (nieregulowany) model został dopasowany przy użyciu lmi nie miał stałego terminu (tj. Był w formie lm(y~0+x1+x2,data)).

glmnetbierze macierz predyktorów i wektor odpowiedzi. Czytam glmnetdokumentację i nie mogę znaleźć wzmianki o tym stałym terminie.

Czy istnieje sposób, aby poprosić glmneto wymuszenie dopasowania liniowego przez początek?

NPE
źródło

Odpowiedzi:

12

Tak, punkt przecięcia jest zawarty w modelu glmnet , ale nie jest on regularyzowany (por. Ścieżki normalizacji dla uogólnionych modeli liniowych poprzez zejście współrzędnych , s. 13). Więcej szczegółów na temat implementacji można z pewnością uzyskać, uważnie przyglądając się kodowi (dla rodziny gaussowskiej jest to elnet()funkcja wywoływana przez glmnet()), ale jest to w Fortranie.

Możesz spróbować ukaranego pakietu, który pozwala usunąć przechwycenie, przekazując unpenalized = ~0do 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))

Aby uzyskać regularyzację Lasso, możesz spróbować czegoś takiego

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

Jak widać na następnym rysunku, między parametrami regresji obliczonymi obiema metodami (po lewej) są niewielkie różnice i bardzo łatwo można wykreślić rozwiązanie ścieżki Lasso (po prawej).

alternatywny tekst

chl
źródło