10 votos

En R, "glmnet" ajuste de una intersección?

Yo soy el ajuste de un modelo lineal en R usando glmnet. El original (no regularizada) el modelo fue ajustado mediante lm y no tiene un término constante (es decir, fue en el formulario lm(y~0+x1+x2,data)).

glmnet toma una matriz de predictores y un vector de respuestas. He estado leyendo glmnet documentación, y puede encontrar ninguna mención del término constante.

Así, hay una manera de pedir glmnet para forzar el ajuste lineal a través del origen?

12voto

DavLink Puntos 101

Sí, una intercepción se incluye en un glmnet modelo, pero no regularizados (cf. La regularización de las Rutas de acceso para los Modelos Lineales Generalizados a través de Coordenadas Descenso, p. 13). Más detalles acerca de la aplicación sin duda podría obtenerse observando detenidamente el código (por una gaussiana de la familia, es la elnet() función que es llamada por glmnet()), pero es en Fortran.

Usted podría tratar de la penalizado paquete, que permite la eliminación de la intersección por la que pasaba unpenalized = ~0 a 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 obtener Lazo de regularización, podría intentar algo como

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

Como se puede observar en la siguiente figura, hay pocas diferencias entre los parámetros de regresión calculadas con ambos métodos (a la izquierda), y se puede trazar el Lazo de la ruta solución muy sencilla (a la derecha).

alt text

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X