web-dev-qa-db-fra.com

Traitement des valeurs manquantes pour le calcul des corrélations

J'ai une matrice énorme avec beaucoup de valeurs manquantes. Je veux obtenir la corrélation entre les variables.

1. Est la solution

cor(na.omit(matrix))

mieux qu'en dessous?

cor(matrix, use = "pairwise.complete.obs")

J'ai déjà sélectionné uniquement des variables ayant plus de 20% de valeurs manquantes.

2. Quelle est la meilleure méthode pour donner un sens?

29
Delphine

Je voterais pour la deuxième option. Il semble que vous ayez une bonne quantité de données manquantes et que vous cherchiez donc une stratégie d'imputation multiple judicieuse pour remplir les espaces. Voir le texte de Harrell "Stratégies de modélisation de la régression" pour une multitude de conseils sur "comment procéder correctement.

16
42-

Je pense que la deuxième option est plus logique,

Vous pourriez envisager d'utiliser la fonction rcorr dans le package Hmisc.

Il est très rapide et ne comprend que des observations complètes par paire. L'objet retourné contient une matrice

  1. des scores de corrélation
  2. avec le nombre d'observation utilisé pour chaque valeur de corrélation
  3. d'une valeur de p pour chaque corrélation

Cela signifie que vous pouvez ignorer les valeurs de corrélation en fonction d'un petit nombre d'observations (quel que soit ce seuil pour vous) ou en fonction d'une valeur p.

library(Hmisc)
x<-matrix(nrow=10,ncol=10,data=runif(100))
x[x>0.5]<-NA
result<-rcorr(x)
result$r[result$n<5]<-0 # ignore less than five observations
result$r
12
Iain

Pour les futurs lecteurs La corrélation complète par paire est considérée comme dangereuse peut être utile, arguant que cor(matrix, use = "pairwise.complete.obs") est considéré comme dangereux et suggérant des alternatives telles que use = "complete.obs").

6
Triamus