¿Cuándo selecciona LASSO los predictores correlacionados?

13

Estoy usando el paquete '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 variable (dependiente) y. Dos de mis predictores están altamente correlacionados entre sí (x1, x2).

Como puede ver en el ejemplo anterior, la función lars con la opción 'paso a paso' primero elige la variable que está más correlacionada con y. La siguiente variable para ingresar al modelo es la 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 hago la opción 'lazo':

> 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 las dos variables correlacionadas al modelo en los primeros dos pasos. Esto es lo contrario de lo que leí en varios periódicos. La mayoría dice que si hay un grupo de variables entre las cuales las correlaciones son muy altas, entonces el 'lazo' tiende a seleccionar al azar solo una variable del grupo.

¿Alguien puede dar un ejemplo de este comportamiento? O explique, ¿por qué mis variables x1, x2 se agregan al modelo una tras otra (juntas)?

ThomasH_MB
fuente
Esta es la regresión de ángulo mínimo que da una explicación de los pasos del lazo.
Michael R. Chernick
@MichaelChernick: si observa la Rllamada que realiza el OP y la salida asociada que proporciona, verá que, de hecho, está utilizando el lazo. Como estoy seguro de que sabe, un pequeño ajuste del algoritmo lars produce la ruta de regularización del lazo.
cardenal
Mi "conjetura" es que, dado que x2 incluye 4 unidades de x1, x1 y x2 combinadas en realidad tienen la mayor variación (9 unidades). Si baja el coeficiente de x2 a 2, debería ver que x4 se selecciona antes de x1 y x2.
¿Puede proporcionar algunas referencias para la prueba de esa "aleatoriedad"? Gracias.
ziyuang
Creo que puede encontrar su respuesta en este documento: arxiv.org/pdf/1204.1605.pdf
TPArrow

Respuestas:

15

¡El problema de la colinealidad está sobrevalorado!

Thomas, articulaste un punto de vista común, que si los predictores están correlacionados, incluso la mejor técnica de selección de variables simplemente elige una al azar del grupo. Afortunadamente, ¡esa es la forma de subestimar la capacidad de la regresión para descubrir la verdad! Si tiene el tipo correcto de variables explicativas (exógenas), la regresión múltiple promete encontrar el efecto de cada variable manteniendo constante a las demás. 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 del conjunto de datos típico de hoy, no es mucho más difícil.

La colinealidad es un problema de poca información. Echa un vistazo a esta parodia de colinealidad de Art Goldberger en el blog de Dave Giles . La forma en que hablamos de colinealidad parecería tonta si se aplica a una media en lugar de un coeficiente de regresión parcial.

¿Todavía no está convencido? Es hora de un 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 variables altamente correlacionadas x1 y x2, pero puede ver en el gráfico a continuación que cuando x1 está cerca de -1, todavía vemos variabilidad en x2. ingrese la descripción de la imagen aquí

Ahora es el momento de agregar la "verdad":

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

¿Puede la regresión ordinaria tener éxito en medio del poderoso problema de colinealidad?

summary(lm(y ~ x1 + x2))

Oh si 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 hablé de LASSO, en el que se centró su pregunta. Pero dejame preguntarte esto. Si la regresión de la vieja escuela con eliminación hacia atrás no se deja engañar por la colinealidad, ¿por qué crees que lo haría el LASSO de última generación?

Ben Ogorek
fuente
L1
La idea era que se podrían usar conceptos más simples para explicar el fenómeno descrito por OP, y que estos conceptos no se alteran fundamentalmente mediante la adición de un término de regularización basado en datos.
Ben Ogorek
7

La respuesta de Ben me inspiró a ir un paso más allá en el camino que proporcionó, lo que sucederá si la "verdad", y, está en otras situaciones.

En el ejemplo original, y depende de las dos variables altamente correlacionadas x1 y x2. Suponiendo que hay otra variable, x3, digamos

x3 = c (1: N) / 250 # N se define antes, N = 1000, x3 está en la escala similar a x1, y la escala de x3 tiene efectos en los resultados de regresión lineal a continuación.

La "verdad" y ahora se define como sigue

y = .5 * x1 - .7 * x3 + rnorm (N) # Proceso de generación de datos

¿Qué pasaría con la regresión?

resumen (lm (y ~ x1 + x2))

Existe un fuerte efecto de colinealidad. El error estándar de x2 es demasiado grande. Sin embargo, la regresión lineal identifica x2 como una variable no significativa.

     Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -1.39164    0.04172 -33.354  < 2e-16 ***
x1           0.65329    0.12550   5.205 2.35e-07 ***
x2          -0.07878    0.05848  -1.347    0.178 

vif (lm (y ~ x1 + x2))

x1       x2 
9.167429 9.167429 

¿Qué pasa con otro caso de regresión?

resumen (lm (y ~ x1 + x2 + x3))

Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept)  0.02100    0.06573   0.319    0.749    
x1           0.55398    0.09880   5.607 2.67e-08 ***
x2          -0.02966    0.04604  -0.644    0.520    
x3          -0.70562    0.02845 -24.805  < 2e-16 ***

La variable x2 no es significativa y se recomienda eliminarla mediante la regresión lineal.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.067865 9.067884 1.000105 

De los resultados anteriores, la colinealidad no es un problema en la regresión lineal, y verificar VIF no es muy útil.

Veamos otra situación. x3 = c (1: N) # N se define antes, N = 1000, x3 no está en la misma escala que x1.

La "verdad" y se define igual que arriba

y = .5 * x1 - .7 * x3 + rnorm (N) # Proceso de generación de datos

¿Qué pasaría con la regresión?

resumen (lm (y ~ x1 + x2))

Existe un fuerte efecto de colinealidad. Los errores estándar de x1, x2 son demasiado grandes. La regresión lineal no puede identificar la variable importante x1.

   Coefficients:
        Estimate Std. Error t value Pr(>|t|)    
(Intercept) -350.347      6.395 -54.783   <2e-16 ***
x1            25.207     19.237   1.310    0.190    
x2           -12.212      8.963  -1.362    0.173  

vif (lm (y ~ x1 + x2))

    x1       x2 
9.167429 9.167429 

¿Qué pasa con otro caso de regresión?

resumen (lm (y ~ x1 + x2 + x3))

Coefficients:
          Estimate Std. Error   t value Pr(>|t|)    
(Intercept)  0.0360104  0.0610405     0.590    0.555    
x1           0.5742955  0.0917555     6.259 5.75e-10 ***
x2          -0.0277623  0.0427585    -0.649    0.516    
x3          -0.7000676  0.0001057 -6625.170  < 2e-16 ***

La variable x2 no es significativa y se recomienda eliminarla mediante la regresión lineal.

vif (lm (y ~ x1 + x2 + x3))

x1       x2       x3 
9.182507 9.184419 1.001853 

Nota: la regresión de y en x1 y x3. Observe que el error estándar de x1 es solo 0.03.

resumen (lm (y ~ x1 + x3))

Coefficients:
              Estimate Std. Error   t value Pr(>|t|)    
(Intercept) -0.1595528  0.0647908    -2.463    0.014 *  
x1           0.4871557  0.0321623    15.147   <2e-16 ***
x3          -0.6997853  0.0001121 -6240.617   <2e-16 ***

En base a los resultados anteriores, mi conclusión es que

  • cuando las variables predictoras están en escalas similares, la colinealidad no es un problema en la regresión lineal;
  • cuando las variables predictoras no están en escalas similares,
    • cuando las dos variables altamente correlacionadas están en el modelo verdadero, la colinealidad no es un problema;
    • cuando solo una de las dos variables altamente correlacionadas está en el modelo verdadero,
      • Si las otras variables "verdaderas" se incluyen en la regresión lineal, la regresión lineal identificará las variables no significativas que están correlacionadas con la variable significativa.
      • Si las otras variables "verdaderas" no se incluyen en la regresión lineal, el problema de la colinealidad es grave, lo que resulta en una inflación de error estándar.
vtshen
fuente
Interesante, aunque estos resultados asumen relaciones lineales entre los predictores / características y y. Están lejos de ser exhaustivos. ¿Qué sucede si hay fuertes relaciones no lineales en sus predictores (por ejemplo, términos de interacción x1 * x2, características de función de paso / variables ficticias (1 si x1> c para alguna constante), etc.)? Si trabaja con datos de baja relación señal / ruido, como en la creación de funciones para el comercio algorítmico, siempre utiliza modelos parsimoniosos para reducir el sobreajuste (porque sus señales son débiles), por lo que todavía hay razones sólidas para tratar con multicolinealidad
FXQuantTrader