Cribado (multi)colinealidad en un modelo de regresión


Espero que esta no sea una pregunta de "preguntar y responder"... aquí va: (multi)colinealidad se refiere a correlaciones extremadamente altas entre predictores en el modelo de regresión. Cómo curarlos... bueno, a veces no es necesario "curar" la colinealidad, ya que no afecta el modelo de regresión en sí, sino la interpretación de un efecto de predictores individuales.

Una forma de detectar la colinealidad es poner cada predictor como una variable dependiente, y otros predictores como independientes variables, determinar R2, y si es más grande que .9 (or .95), podemos considerar el predictor redundante. Este es un "método"... ¿qué pasa con otros enfoques? Algunos de ellos consumen mucho tiempo, como excluir predictores del modelo y observar los cambios del coeficiente b, deberían ser notablemente diferentes.

Por supuesto, siempre debemos tener en cuenta el contexto/objetivo específico del análisis... A veces, el único remedio es repetir una investigación, pero en este momento, estoy interesado en varias maneras de predictores redundantes de cribado cuando se produce (multi) colinealidad en un modelo de regresión.

Author: dbliss, 2010-06-15

5 answers

La función kappa() puede ayudar. Aquí hay un ejemplo simulado:

> set.seed(42)
> x1 <- rnorm(100)
> x2 <- rnorm(100)
> x3 <- x1 + 2*x2 + rnorm(100)*0.0001    # so x3 approx a linear comb. of x1+x2
> mm12 <- model.matrix(~ x1 + x2)        # normal model, two indep. regressors
> mm123 <- model.matrix(~ x1 + x2 + x3)  # bad model with near collinearity
> kappa(mm12)                            # a 'low' kappa is good
[1] 1.166029
> kappa(mm123)                           # a 'high' kappa indicates trouble
[1] 121530.7

Y vamos más allá haciendo que el tercer regresor sea cada vez más colineal:

> x4 <- x1 + 2*x2 + rnorm(100)*0.000001  # even more collinear
> mm124 <- model.matrix(~ x1 + x2 + x4)
> kappa(mm124)
[1] 13955982
> x5 <- x1 + 2*x2                        # now x5 is linear comb of x1,x2
> mm125 <- model.matrix(~ x1 + x2 + x5)
> kappa(mm125)
[1] 1.067568e+16
> 

Esto usó aproximaciones, vea help(kappa) para más detalles.

 38
Author: Dirk Eddelbuettel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-15 03:06:15

Solo para agregar a lo que Dirk dijo sobre el método del Número de Condición, una regla general es que los valores de CN > 30 indicate severe collinearity. Otros métodos, aparte del número de condición, incluyen:

1) el determinante de la covarianza matriz que oscila entre 0 (Perfecto Colinealidad) a 1 (Sin colinealidad)

# using Dirk's example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09

2) Usando el hecho de que el determinante de una matriz diagonal es el producto de los autovalores => La presencia de uno o más autovalores pequeños indica colinealidad

> eigen(cov(mm12[,-1]))$values
[1] 1.0876357 0.8143184

> eigen(cov(mm123[,-1]))$values
[1] 5.388022e+00 9.862794e-01 1.677819e-09

3) El valor del Factor de Inflación de la Varianza (VIF). El VIF para el predictor i es 1 / (1-R_i^2), donde R_i^2 es el R^2 de una regresión del predictor i contra los predictores restantes. La colinealidad está presente cuando el VIF para al menos una variable independiente es grande. Regla general: VIF > 10 is of concern. Para una implementación en R ver aquí. También me gustaría comentar que el uso de R^2 para determinar la colinealidad debe ir de la mano con el examen visual de las gráficas de dispersión porque una sola el valor atípico puede "causar" colinealidad donde no existe, o puede ocultar la colinealidad donde existe.

 33
Author: George Dontas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-16 09:14:50

Es posible que le guste La Tarjeta de Referencia de Vito Ricci " R Functions For Regression Analysis" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

Enumera sucintamente muchas funciones útiles relacionadas con la regresión en R, incluidas las funciones de diagnóstico. En particular, enumera la función vif del paquete car que puede evaluar la multicolinealidad. http://en.wikipedia.org/wiki/Variance_inflation_factor

La consideración de la multicolinealidad a menudo va de la mano con cuestiones de evaluación de la importancia variable. Si esto se aplica a usted, tal vez eche un vistazo al paquete relaimpo: http://prof.beuth-hochschule.de/groemping/relaimpo /

 17
Author: Jeromy Anglim,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-06-15 09:08:29

Ver también la Sección 9.4 en este Libro: Regresión Práctica y Anova usando R [Faraway 2002] .

La colinealidad se puede detectar de varias maneras:

  1. El examen de la matriz de correlación de los predictores revelará grandes colinealidades en parejas.

  2. Una regresión de x_i en todos los otros predictores da R^2_i. Repetir para todos los predictores. R^2_i cerca de uno indica un problema-se puede encontrar la combinación lineal infractora.

  3. Examine los valores propios de t(X) %*% X, donde X denota la matriz del modelo; los valores propios pequeños indican un problema. Se puede demostrar que el número de condición de 2 normas es la relación entre el valor singular distinto de cero más grande y el más pequeño de la matriz (\\kappa = \sqrt{\lambda_1 / \lambda_p} see; ver ?kappa); \kappa >= 30 se considera grande.

 8
Author: rcs,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-26 01:44:47

Dado que no hay mención de VIF hasta ahora, agregaré mi respuesta. El Factor de inflación de Varianza>10 suele indicar una redundancia grave entre las variables predictoras. VIF indica el factor por el cual la varianza del coeficiente de una variable aumentaría si no estuviera altamente correlacionada con otras variables.

vif() está disponible en package cars y se aplica a un objeto de clase(lm). Devuelve el vif de x1, x2 . . . xn en object lm(). Es una buena idea excluir variables con vif > 10 o introducir transformaciones a las variables con vif>10.

 7
Author: vagabond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-25 20:50:05