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' Var9
abord (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 Score
variable. De préférence, ce serait une méthode qui prend en compte le fort potentiel de colinéarité de ces 9 variables.
Score
variable", 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.Réponses:
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.
la source
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.
la source
and put summary scores into the model
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
l0ara
package vous permet de le faire en combinaison avec une pénalité L0; pour leL0Learn
package, cela sera pris en charge sous peu.la source