In R, "glmnet" si adatta a un'intercettazione?


10

Sto adattando un modello lineare in R usando glmnet. Il modello originale (non regolarizzato) è stato montato usando lme non aveva un termine costante (cioè era nella forma lm(y~0+x1+x2,data)).

glmnetprende una matrice di predittori e un vettore di risposte. Ho letto la glmnetdocumentazione e non trovo alcuna menzione del termine costante.

Quindi, c'è un modo per chiedere glmnetdi forzare l'adattamento lineare attraverso l'origine?

Risposte:


12

Sì, un'intercettazione è inclusa in un modello glmnet , ma non è regolarizzata (cfr. Percorsi di regolarizzazione per modelli lineari generalizzati tramite Discesa coordinata , p. 13). Maggiori dettagli sull'implementazione potrebbero certamente essere ottenuti esaminando attentamente il codice (per una famiglia gaussiana, è la elnet()funzione che viene chiamata da glmnet()), ma è in Fortran.

È possibile provare il pacchetto penalizzato , che consente di rimuovere l'intercettazione passando unpenalized = ~0a 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))

Per ottenere la regolarizzazione del Lazo, potresti provare qualcosa del genere

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

Come si può vedere nella figura successiva, ci sono piccole differenze tra i parametri di regressione calcolati con entrambi i metodi (a sinistra) e puoi tracciare la soluzione del percorso Lazo molto facilmente (a destra).

testo alternativo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.