Supprimer les valeurs aberrantes de coefficient de corrélation de calcul
Supposons que nous avons deux vecteurs numériques x
et y
. Le coefficient de corrélation de Pearson entre x
et y
est donnée par
cor(x, y)
Comment puis-je automatiquement ne considérer qu'un sous-ensemble de x
et y
dans le calcul (soit 90%) afin de maximiser le coefficient de corrélation?
Que considérez-vous comme une valeur aberrante ici? Déviation de la méthode des moindres carrés ajustement de la ligne (c'est à dire plus grand des résidus), ou des valeurs extrêmes de la distribution bivariée de
Ici, je considère que le plus gros des résidus à des valeurs aberrantes.
x
et y
?Ici, je considère que le plus gros des résidus à des valeurs aberrantes.
OriginalL'auteur Leo | 2011-01-12
Vous devez vous connecter pour publier un commentaire.
Si vous vraiment souhaitez le faire (enlever le plus gros (absolue) des résidus), alors nous pouvons utiliser le modèle linéaire pour estimer la solution des moindres carrés et associés résidus, puis sélectionnez le moyen n% des données. Voici un exemple:
Tout d'abord, générer des données factices:
Ensuite, nous avons adapté le modèle linéaire et d'en extraire les résidus:
La
quantile()
fonction peut nous donner le nécessaire quantile des résidus. Vous a suggéré de retenir 90% des données, de sorte que nous voulons la partie supérieure et inférieure de 0,05 quantiles:Sélectionnez ces observations avec les résidus dans le milieu 90% des données:
Nous pouvons alors représenter ceci, avec les points rouges étant celles que nous conserverons:
Corrélations pour l'ensemble des données et le sous-ensemble sélectionné sont:
Être conscient qu'ici, nous avons peut-être de jeter parfaitement bonnes données, car nous venons de choisir les 5% avec plus positive des résidus et de 5% avec le plus négatif. Une alternative consiste à sélectionner les 90% pour le plus petit absolue résidus:
Avec cette légèrement différentes sous-ensemble, la corrélation est légèrement inférieur:
Un autre point est que, même alors, nous sommes à jeter de bonnes données. Vous voudrez peut-être regarder à distance de Cook comme une mesure de la force des valeurs aberrantes, et jetez seulement les valeurs au-dessus d'un certain seuil, la distance de Cook. Wikipedia a des infos sur la distance de Cook et les seuils proposés. Le
cooks.distance()
fonction peut être utilisée pour extraire les valeurs demod
:et si vous calculez le seuil(s) proposé sur Wikipédia et ne supprimer que ceux qui dépassent le seuil. Pour ces données:
aucun de Cuisiner les distances dépassent les seuils proposés (pas surprenant, compte tenu de la façon dont j'ai généré les données.)
Ayant dit tout cela, pourquoi voulez-vous faire cela? Si vous essayez juste de se débarrasser de données pour améliorer une corrélation, ou de générer un lien significatif, qui sonne un peu louche et peu comme les données des opérations de dragage pour moi.
OriginalL'auteur Gavin Simpson
À l'aide de
method = "spearman"
danscor
sera robuste à la contamination et est facile à mettre en œuvre, puisqu'il s'agit de remplacercor(x, y)
aveccor(x, y, method = "spearman")
.Répéter Prasad de l'analyse, mais à l'aide de corrélations de Spearman au lieu de cela, nous constatons que la corrélation de Spearman est en effet solide à la contamination ici, la récupération de la sous-tendent une corrélation nulle:
spearman
spearman
sera robuste pour certains types de contamination, à savoir unique de la haute valeur des points en étant parfaitement corrélée résultant en un gonfléspearson
de corrélation. Il ne sera pas complètement robuste à la contamination par les valeurs aberrantes à l'extrémité inférieure de l'échelle.OriginalL'auteur G. Grothendieck
Ce qui peut avoir été déjà évident pour l'OP, mais juste pour s'assurer que... Vous devez être prudent, car en essayant de maxmimize corrélation peut effectivement tendance à inclure valeurs aberrantes. (@Gavin abordé ce point dans sa réponse/vos commentaires.) Je serais première la suppression des valeurs aberrantes, puis calcul de la corrélation. Plus généralement, nous voulons être le calcul de corrélation qui est robuste aux valeurs aberrantes (et il ya beaucoup de ces méthodes dans R).
Juste pour illustrer ce de façon spectaculaire, nous allons créer deux vecteurs
x
ety
qui sont non corrélés:Maintenant, nous allons ajouter une valeur aberrante du point de
(500,500)
:Maintenant la corrélation de tout sous-ensemble qui comprend la valeur aberrante point sera proche de 100%, et la corrélation de tout suffisamment grand sous-ensemble qui exclut les valeurs aberrantes sera proche de zéro. En particulier,
Si vous souhaitez estimer un "vrai" corrélation qui n'est pas sensible aux valeurs aberrantes, vous pouvez essayer le
robust
package:Vous pouvez jouer avec les paramètres de
covRob
de décider de la façon de découper les données.Mise à JOUR: Il y a aussi le
rlm
(solide régression linéaire) dans leMASS
paquet.OriginalL'auteur Prasad Chalasani
Voici une autre possibilité avec les valeurs aberrantes capturé. À l'aide d'un système similaire comme Prasad:
Dans les autres réponses, 500 a été coincé sur la fin de x et y comme une valeur aberrante. Qui peut, ou peut ne pas causer un problème de mémoire avec votre machine, alors j'ai laissé tomber vers le bas à 4 pour l'éviter.
Voici les images de la x1, y1, xy1 de données:
OriginalL'auteur bill_080
Vous pouvez essayer d'amorçage vos données pour trouver le plus haut coefficient de corrélation, par exemple:
Et après le rodage
max(boot.cor)
. Ne soyez pas déçu si tous les coefficients de corrélation sera tout de même 🙂OriginalL'auteur daroczig