64 votes

Criblage (multi) colinéarité dans un modèle de régression

J'espère que ce ne sera pas "poser des questions"... va ici: (multi)colinéarité fait référence à de très fortes corrélations entre les prédicteurs du modèle de régression. Comment les guérir... et bien, parfois, vous n'avez pas besoin de "guérir" la colinéarité, car il ne modifie pas le modèle de régression elle-même, mais l'interprétation d'un effet de prédicteurs.

Une façon de repérer la colinéarité est de mettre chaque prédicteur comme une variable dépendante, et d'autres prédicteurs comme variables indépendantes, déterminer R2, et si elle est plus grande que .9 (ou .95), on peut considérer prédicteur redondant. C'est une "méthode"... que dire d'autres approches? Certains d'entre eux prennent beaucoup de temps, comme à l'exclusion des prédicteurs du modèle et l'observation de b-coefficient de modifications - ils devraient être sensiblement différente.

Bien sûr, nous devons toujours garder à l'esprit le contexte spécifique/but de l'analyse... Parfois, la seule solution est de refaire une recherche, mais pour l'instant, je suis intéressé par les divers moyens de dépistage redondant prédicteurs lorsque (multi)colinéarité se produit dans un modèle de régression.

39voto

Dirk Eddelbuettel Points 134700

La fonction kappa() peut aider. Voici un exemple simulé:

 > 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
 

et nous allons plus loin en rendant le troisième régresseur de plus en plus colinéaire:

 > 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
> 
 

Cette approximation utilisée, voir help(kappa) pour plus de détails.

34voto

George Dontas Points 12116

Juste pour ajouter à ce que Dirk a dit à propos de la Condition Numéro de la méthode, une règle de base est que les valeurs de CN > 30 indicate severe collinearity. D'autres méthodes, à l'exception de la condition numéro, comprennent:

1) le déterminant de la covariance la matrice qui va de 0 (Parfait La colinéarité) à 1 (Pas de Colinéarité)

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

2) en Utilisant le fait que le déterminant d'une matrice diagonale est le produit des valeurs propres => La présence d'un ou de plus petites valeurs propres indique la colinéarité

> 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) La valeur du Facteur d'Inflation de la Variance (VIF). Le VIF pour prédicteur i est 1/(1-R_i^2), où R_i^2 est la R^2 à partir d'une régression de prédicteur je contre les autres prédicteurs. La colinéarité est présent lors de VIF pour au moins une variable indépendante est grande. Règle de base: VIF > 10 is of concern. Pour une mise en œuvre dans la R voir ici. Je tiens également à faire remarquer que l'utilisation de R^2 pour la détermination de la colinéarité doivent aller main dans la main avec l'examen visuel des nuages de points, car une seule valeur aberrante peut "provoquer" la colinéarité où il n'existe pas, ou peut MASQUER la colinéarité où il existe.

18voto

Jeromy Anglim Points 8325

Vous pourriez, comme Vito de Ricci, de la Carte de Référence "R Pour l'Analyse de Régression" http://cran.r-project.org/doc/contrib/Ricci-refcard-regression.pdf

De manière succincte les listes de nombreux régression liée fonctions dans R, y compris des fonctions de diagnostic. En particulier, il répertorie l' vif fonction de l' car forfait qui peut évaluer la multicolinéarité. http://en.wikipedia.org/wiki/Variance_inflation_factor

L'examen de la multicolinéarité va souvent de pair avec les problèmes de l'évaluation de l'importance variable. Si cela s'applique à vous, peut-être, découvrez l' relaimpo paquet de: http://prof.beuth-hochschule.de/groemping/relaimpo/

8voto

rcs Points 22112

Voir également la Section 9.4 dans ce Livre: Pratique de Régression et analyse de Variance à l'aide de R [Lointain 2002].

La colinéarité peut être détectée dans plusieurs façons:

  1. L'examen de la matrice de corrélation des facteurs prédictifs va révéler de grandes paires collinearities.

  2. Une régression de x_i sur tous les autres facteurs prédictifs donne R^2_i. Répétez l'opération pour tous les prédicteurs. R^2_i à proximité de l'un indique un problème de la délinquance de la combinaison linéaire peut être trouvé.

  3. Examiner les valeurs propres d' t(X) %*% XX indique le modèle de la matrice; Petites valeurs propres indiquer un problème. Le 2-norme nombre de condition peut être démontré le rapport de la plus grande à la plus petite valeur non zéro valeur singulière de la matrice ($\kappa = \sqrt{\lambda_1/\lambda_p}$; voir ?kappa); \kappa >= 30 est considéré comme grand.

8voto

vagabond Points 85

Puisqu'il n'y est fait aucune mention de VIF jusqu'à présent, je vais ajouter ma réponse. D'Inflation de la Variance du Facteur>10 indique généralement graves de la redondance entre les variables prédictives. VIF indique le facteur par lequel la variance du coefficient d'une variable augmenterait si elle n'était pas fortement corrélée avec les autres variables.

vif() est disponible dans le paquet cars et appliqué à un objet de la classe(lm). Il retourne le vif de x1, x2 . . . xn dans l'objet lm(). C'est une bonne idée d'exclure des variables avec des div >10 ou introduire des transformations de variables div>10.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X