17 votos

¿Cuando selecciona LASSO predictores correlacionados?

Estoy usando el paquete 'de lars' en R con el siguiente código:

> library(lars)
> set.seed(3)
> n <- 1000
> x1 <- rnorm(n)
> x2 <- x1+rnorm(n)*0.5
> x3 <- rnorm(n)
> x4 <- rnorm(n)
> x5 <- rexp(n)
> y <- 5*x1 + 4*x2 + 2*x3 + 7*x4 + rnorm(n)
> x <- cbind(x1,x2,x3,x4,x5)
> cor(cbind(y,x))
            y          x1           x2           x3          x4          x5
y  1.00000000  0.74678534  0.743536093  0.210757777  0.59218321  0.03943133
x1 0.74678534  1.00000000  0.892113559  0.015302566 -0.03040464  0.04952222
x2 0.74353609  0.89211356  1.000000000 -0.003146131 -0.02172854  0.05703270
x3 0.21075778  0.01530257 -0.003146131  1.000000000  0.05437726  0.01449142
x4 0.59218321 -0.03040464 -0.021728535  0.054377256  1.00000000 -0.02166716
x5 0.03943133  0.04952222  0.057032700  0.014491422 -0.02166716  1.00000000
> m <- lars(x,y,"step",trace=T)
Forward Stepwise sequence
Computing X'X .....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 4     added
LARS Step 3 :    Variable 3     added
LARS Step 4 :    Variable 2     added
LARS Step 5 :    Variable 5     added
Computing residuals, RSS etc .....

Tengo un conjunto de datos con 5 variables continuas y estoy tratando de ajustar un modelo a una sola (dependiente) y variable. Dos de mis predictores están altamente correlacionados entre sí (x1, x2).

Como se puede ver en el ejemplo de arriba el de lars con la función de 'paso a paso' primera opción elige la variable que está más correlacionada con y. La siguiente variable a entrar en el modelo es el que está más correlacionada con los residuos. De hecho, es x4:

> round((cor(cbind(resid(lm(y~x1)),x))[1,3:6]),4)
    x2     x3     x4     x5 
0.1163 0.2997 0.9246 0.0037  

Ahora, si tengo que hacer el 'lazo' opción:

> m <- lars(x,y,"lasso",trace=T)
LASSO sequence
Computing X'X ....
LARS Step 1 :    Variable 1     added
LARS Step 2 :    Variable 2     added
LARS Step 3 :    Variable 4     added
LARS Step 4 :    Variable 3     added
LARS Step 5 :    Variable 5     added

Agrega tanto de la correlación de las variables del modelo en los dos primeros pasos. Esto es lo contrario de lo que he leído en varios artículos. La mayoría de ellos dicen que si hay un grupo de variables entre las que las correlaciones son muy altos, entonces el 'lazo' tiende a seleccionar sólo una variable del grupo al azar.

Alguien puede dar un ejemplo de este comportamiento? O explicar, por qué a mi las variables x1, x2 son agregados al modelo uno después de otro (juntos) ?

19voto

Ben Ogorek Puntos 1040

El problema de la colinealidad es sobrevalorado!

Thomas, articula un punto de vista común, que si predictores están correlacionadas, incluso la mejor selección de variables de la técnica solo escoge uno al azar de racimo. Afortunadamente, esta es la manera de la subvaloración de regresión de la capacidad de descubrir la verdad! Si tienes el tipo correcto de variables explicativas (exógenos), regresión múltiple promesas para encontrar el efecto de cada variable, manteniendo las demás constantes. Ahora si las variables están perfectamente correlacionadas, esto es, literalmente, imposible. Si las variables están correlacionadas, puede ser más difícil, pero con el tamaño de la típica conjunto de datos de hoy en día, es mucho más difícil.

La colinealidad es un bajo-problema de la información. Eche un vistazo a esta parodia de colinealidad por el Art Goldberger en Dave Giles del blog. La manera de hablar de colinealidad podría sonar tonto si se aplica a un medio en lugar de un coeficiente de regresión parcial.

Todavía no está convencido? Es tiempo para un poco de código.

set.seed(34234)

N <- 1000
x1 <- rnorm(N)
x2 <- 2*x1 + .7 * rnorm(N)
cor(x1, x2) # correlation is .94
plot(x2 ~ x1)

He creado una alta correlación de las variables x1 y x2, pero se puede ver en el gráfico siguiente que cuando x1 está cerca de -1, aún podemos observar la variabilidad en x2. enter image description here

Ahora es el momento de añadir la "verdad":

y <- .5 * x1 - .7 * x2 + rnorm(N) # Data Generating Process

Puede ordinario de regresión tener éxito en medio de la poderosa colinealidad problema?

summary(lm(y ~ x1 + x2))

Oh, sí, se puede:

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -0.0005334  0.0312637  -0.017    0.986    
x1           0.6376689  0.0927472   6.875 1.09e-11 ***
x2          -0.7530805  0.0444443 -16.944  < 2e-16 ***

Ahora no he hablado de LAZO, que su pregunta se centró en. Pero déjame preguntarte esto. Si la vieja escuela de regresión w/ eliminación hacia atrás no te dejes engañar por la colinealidad, ¿por qué piensas que el estado-of-the-art LAZO?

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