stepwise - Screening(multi) collinearity en un modelo de regresión
r regression lineal (5)
Espero que esta no sea una pregunta de "preguntar y responder" ... aquí va: (multi) la colinealidad se refiere a las correlaciones extremadamente altas entre los 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 variables independientes, determinar R 2 , y si es mayor que 0,9 (o 0,95), podemos considerar que el predictor es redundante. Este es un "método" ... ¿qué hay de otros enfoques? Algunos de ellos consumen mucho tiempo, como excluir los predictores del modelo y observar los cambios del coeficiente b, que 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 formas de evaluar los predictores redundantes cuando la (multi) colinealidad ocurre en un modelo de regresión
Como no hay mención de VIF hasta ahora, agregaré mi respuesta. El factor de inflación de la varianza> 10 generalmente indica una redundancia seria entre las variables predictoras. VIF indica el factor por el cual la varianza del coeficiente de una variable aumentaría si no estuviese altamente correlacionada con otras variables.
vif()
está disponible en paquetes de cars
y se aplica a un objeto de clase (lm). Devuelve el vif de x1, x2. . . xn en el objeto lm()
. Es una buena idea excluir variables con vif> 10 o introducir transformaciones a las variables con vif> 10.
Puede que le guste la Tarjeta de referencia de Vito Ricci "Funciones R para el análisis de regresión" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf
Enumera de manera sucinta 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 de car
que puede evaluar la multicolinealidad. http://en.wikipedia.org/wiki/Variance_inflation_factor
La consideración de multicolinealidad a menudo va de la mano con cuestiones de evaluación de importancia variable. Si esto se aplica a usted, tal vez consulte el paquete relaimpo
: http://prof.beuth-hochschule.de/groemping/relaimpo/
Solo para agregar a lo que dijo Dirk sobre el método del Número de condición, una regla de oro 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 matriz de covarianza que va desde 0 (Collinearity perfecto) a 1 (Sin Collinearity)
# using Dirk''s example
> det(cov(mm12[,-1]))
[1] 0.8856818
> det(cov(mm123[,-1]))
[1] 8.916092e-09
2) Usar el hecho de que el determinante de una matriz diagonal es el producto de los valores propios => La presencia de uno o más valores propios 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 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 frente a los predictores restantes. La colinealidad está presente cuando VIF para al menos una variable independiente es grande. Regla de oro: VIF > 10 is of concern
. Para una implementación en R ver here . 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 los diagramas de dispersión porque un único valor atípico puede "causar" colinealidad donde no existe, o puede OCULTAR la colinealidad donde existe .
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:
El examen de la matriz de correlación de los predictores revelará grandes colinealidades por pares.
Una regresión de x_i en todos los otros predictores da R ^ 2_i. Repita para todos los predictores. R ^ 2_i cerca de uno indica un problema: se puede encontrar la combinación lineal ofensiva.
Examine los valores propios de
t(X) %*% X
, dondeX
denota la matriz del modelo; Los valores propios pequeños indican un problema. El número de condición de 2 normas se puede mostrar como la relación entre el valor singular más grande y el valor singular distinto de cero de la matriz ($ / kappa = / sqrt {/ lambda_1 / / lambda_p} $; ver?kappa
);/kappa >= 30
se considera grande.
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, ver help(kappa)
para más detalles.