Comment gérer la multicolinéarité lors de la sélection de variables?

28

J'ai un ensemble de données avec 9 variables indépendantes continues. Je suis en train de choisir parmi ces variables pour ajuster un modèle à un pourcentage unique variable ( en fonction), Score. Malheureusement, je sais qu'il y aura une colinéarité sérieuse entre plusieurs des variables.

J'ai essayé d'utiliser la stepAIC()fonction dans R pour la sélection des variables, mais cette méthode, curieusement, semble sensible à l'ordre dans lequel les variables sont répertoriées dans l'équation ...

Voici mon code R (parce que ce sont des données en pourcentage, j'utilise une transformation logit pour Score):

library(MASS)
library(car)

data.tst = read.table("data.txt",header=T)
data.lm = lm(logit(Score) ~ Var1 + Var2 + Var3 + Var4 + Var5 + Var6 + Var7 +
             Var8 + Var9, data = data.tst)

step = stepAIC(data.lm, direction="both")
summary(step)

Pour une raison quelconque, j'ai trouvé que les variables répertoriées au début de l'équation finissent par être sélectionnées par la stepAIC()fonction, et le résultat peut être manipulé en listant, par exemple, d' Var9abord (en suivant le tilde).

Quelle est la manière la plus efficace (et la moins controversée) d'adapter un modèle ici? Je ne suis pas vraiment déterminé à utiliser la régression linéaire: la seule chose que je veux est de pouvoir comprendre laquelle des 9 variables est vraiment à l'origine de la variation de la Scorevariable. De préférence, ce serait une méthode qui prend en compte le fort potentiel de colinéarité de ces 9 variables.

Julie
la source
6
La colinéarité va signifier, quelle que soit l'analyse que vous ferez, qu'il est essentiellement impossible de déterminer si une variable «conduit» la variation plus ou moins qu'une variable avec laquelle elle est fortement colinéaire. Compte tenu de cette limitation, vous pouvez essayer le lasso comme moyen de sélectionner un petit nombre de variables qui prédisent de manière optimale, puis de signaler l'ensemble des variables qu'il sélectionne et celles avec lesquelles cet ensemble est hautement colinéaire. Le lasso groupé est une autre option.
invité
4
@guest: Le lasso ne fonctionne pas particulièrement bien en présence d'une forte colinéarité, notamment en ce qui concerne le problème de sélection des modèles.
Cardinal
2
@cardinal, le lasso fonctionne bien, mais si plusieurs variables sont corrélées, il aura tendance à en sélectionner une seule, c'est pourquoi j'ai suggéré de regarder l'ensemble des variables hautement colinéaires. Décider d'utiliser quelque chose de plus complexe que cette «valeur par défaut» nécessiterait une évaluation de l'utilité et une notion plus solide de ce à quoi ce modèle est destiné.
invité
2
Vous voudrez peut-être examiner la fonction bicreg {package BMA}. Notez que vous avez besoin d'un jeu de données complet pour qu'il fonctionne correctement. Je le trouve extrêmement utile pour la sélection des modèles.
Dominic Comtois
1
@guest: Eh bien, cela dépend beaucoup de la manière dont le paramètre de régularisation est sélectionné. En fait, dans certains régimes, le lasso a une tendance (prouvable) à sur- sélectionner les paramètres. Le PO a demandé "la seule chose que je veux, c'est de pouvoir comprendre laquelle des 9 variables est vraiment à l'origine de la variation de la Scorevariable", qui est la phrase sur laquelle j'ai peut-être trop insisté. En présence d'une forte colinéarité, le lasso ne va pas aider à cela, du moins dans les interprétations plus strictes de la remarque du PO.
Cardinal

Réponses:

14

Tout d'abord, une très bonne ressource pour ce problème est T. Keith, Multiple Regression and Beyond. Il y a beaucoup de matériel dans le livre sur la modélisation des chemins et la sélection des variables et je pense que vous y trouverez des réponses exhaustives à vos questions.

Une façon d'aborder la multicolinéarité consiste à centrer les prédicteurs, c'est-à-dire à soustraire la moyenne d'une série de chaque valeur. La régression de crête peut également être utilisée lorsque les données sont fortement colinéaires. Enfin, la régression séquentielle peut aider à comprendre les relations de cause à effet entre les prédicteurs, conjointement avec l'analyse de la séquence temporelle des événements des prédicteurs.

Les 9 variables présentent-elles une colinéarité? Pour le diagnostic, vous pouvez utiliser le facteur d'inflation de la variance de Cohen 2003. Une valeur VIF> = 10 indique une colinéarité élevée et des erreurs standard gonflées. Je comprends que vous vous intéressez davantage à la relation de cause à effet entre les prédicteurs et les résultats. Sinon, la multicolinéarité n'est pas considérée comme un problème sérieux pour la prédiction, comme vous pouvez le confirmer en vérifiant le MAE des données hors échantillon par rapport aux modèles construits en ajoutant vos prédicteurs un à la fois. Si vos prédicteurs ont un pouvoir de prédiction marginal, vous constaterez que le MAE diminue même en présence de la multicolinéarité du modèle.

Robert Kubrick
la source
16

Parce qu'il est si difficile de déterminer les variables à supprimer, il est souvent préférable de ne pas supprimer les variables. Deux façons de procéder dans ce sens sont (1) utiliser une méthode de réduction des données (par exemple, regroupement de variables ou composants principaux) et mettre des scores résumés dans le modèle au lieu de variables individuelles et (2) mettre toutes les variables dans le modèle mais ne pas tester pour l'effet d'une variable ajustée pour les effets des variables concurrentes. Pour (2), les tests de blocs de variables concurrentes sont puissants car les variables colinéaires unissent leurs forces dans le test d'association global à plusieurs degrés de liberté, au lieu de se faire concurrence comme lorsque vous testez des variables individuellement.

Frank Harrell
la source
pourriez-vous s'il vous plaît simplement expliquerand put summary scores into the model
SIslam
1
Mes notes de cours sur biostat.mc.vanderbilt.edu/rms entrent dans les détails
Frank Harrell
1

Si vous souhaitez effectuer une sélection variable en présence d'une colinéarité élevée, je peux recommander le package l0ara , qui convient aux GLM pénalisés L0 en utilisant une procédure de crête adaptative itérative . Comme cette méthode est finalement basée sur une régression régularisée de crête, elle peut très bien gérer la colinéarité, et dans mes simulations, elle a produit beaucoup moins de faux positifs tout en offrant également d'excellentes performances de prédiction par rapport à LASSO, filet élastique ou LASSO adaptatif. Alternativement, vous pouvez également essayer le package L0Learnavec une combinaison d'une pénalité L0 et L2. La pénalité L0 favorise alors la rareté (c'est-à-dire les petits modèles) tandis que la pénalité L2 régularise la colinéarité. Un filet élastique (qui utilise une combinaison d'une pénalité L1 et L2) est également souvent suggéré, mais dans mes tests, cela a produit beaucoup plus de faux positifs, plus les coefficients seront fortement biaisés. Ce biais, vous pouvez vous en débarrasser si vous utilisez plutôt des méthodes pénalisées L0 (c'est-à-dire le meilleur sous-ensemble) - c'est un soi-disant estimateur Oracle, qui obtient simultanément des coefficients de paramètre cohérents et non biaisés. Les paramètres de régularisation dans toutes ces méthodes doivent être optimisés via une validation croisée pour donner des performances optimales de prédiction hors échantillon. Si vous souhaitez également obtenir des niveaux de signification et des intervalles de confiance sur vos paramètres, vous pouvez également le faire via un amorçage non paramétrique.

L'algorithme itératif de la crête adaptative de l0ara(parfois appelé crête adaptative brisée), comme le filet élastique, possède un effet de regroupement, ce qui l'amènera à sélectionner des variables hautement corrélées dans les groupes dès qu'elles entreront dans votre modèle. Cela a du sens - par exemple, si vous aviez deux variables presque colinéaires dans votre modèle, cela diviserait l'effet également sur les deux.

Si vous analysez des données de proportion, il vaut mieux utiliser un modèle de régression logistique btw - le l0arapackage vous permet de le faire en combinaison avec une pénalité L0; pour le L0Learnpackage, cela sera pris en charge sous peu.

Tom Wenseleers
la source