2011-10-03 7 views
4

Je voudrais calculer des corrélations dans R. Cependant, j'ai beaucoup de valeurs manquantes. Donc, je voudrais admettre dans la matrice des corrélations seulement les corrélations qui ont été calculées à partir d'au moins 10 paires de valeurs. Comment procéder?calcul de corrélation avec seuil dans R

Édition: Veuillez noter que la matrice de corrélation est générée à partir de deux grandes matrices X et Y ayant les mêmes individus (lignes).

+0

Je ne comprends pas votre modification. Vous pouvez facilement convertir d'un data.frame à une matrice en utilisant 'as.data.frame' et vice-versa – csgillespie

Répondre

1

D'abord nous générons quelques exemples de données:

R> x = matrix(rnorm(100), ncol=5) 
##Fill in some NA's 
R> x[3:15,1] = NA 
R> x[2:10,3] = NA 

boucle suivante nous à travers la matrice x faire un comparsion pour détecter NA de:

##Create a matrix with where the elements are the 
##maximum number of possible comparisons 
m = matrix(nrow(x), ncol=ncol(x),nrow=ncol(x)) 
## This comparison can be made more efficient. 
## We only need to do column i with i+1:ncol(x) 

## Each list element 
for(i in 1:ncol(x)) { 
    detect_na = is.na(x[,i]==x) 
    c_sums = colSums(detect_na) 
    m[i,] = m[i,] - c_sums 
} 

La matrice m contient maintenant le nombre de comparaison pour chaque paire de colonnes. Maintenant convertir la matrice m en préparation de subsetting:

m = ifelse(m>10, TRUE, NA) 

Ensuite nous travaillons sur la corrélation pour toutes les paires de colonnes et de sous-ensemble selon m:

R> matrix(cor(x, use = "complete.obs")[ m], ncol=ncol(m), nrow=nrow(m)) 
    [,1] [,2]  [,3] [,4] [,5] 
[1,] NA  NA  NA  NA  NA 
[2,] NA 1.0000 -0.14302 0.35902 -0.3466 
[3,] NA -0.1430 1.00000 0.03949 0.6172 
[4,] NA 0.3590 0.03949 1.00000 0.1606 
[5,] NA -0.3466 0.61720 0.16061 1.0000 
+0

Merci pour votre réponse – Delphine

+0

Cependant votre solution prend trop de temps pour les grandes matrices – Delphine

+0

Je ne pensais pas que vous auriez un problème avec les grandes matrices puisque votre crédité devait avoir au moins ** 10 ** observations. Si vous avez beaucoup de colonnes, vous pouvez supprimer des colonnes où il y a moins de dix observations avant la boucle. – csgillespie

Questions connexes