2016-08-25 94 views
0

我有一个包含很多缺失值的矩阵,我试图计算列之间的相关性。`cor()`给出整个矩阵时给出不一致的结果,并且只给出一对列时

为了应对缺失值,我用

cor(matrix,use="complete") 

这给出了一个矩阵没有NA值达到目标。但是,如果我做两列A和B的

cor(matrix[,A],matrix[,B],use="complete") 

之间的成对相关我得到不同的结果比一个在[A,B]在基质中的条目。

看这两个变量之间的情节,似乎第二个结果更合理。

这种差异从何而来?

+0

欢迎来到SO。为了帮助人们提供答案,通常需要将您的数据添加到问题中以制作可重复的示例。阅读http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – dww

回答

0

您在询问"complete.obs""pairwise.complete.obs"之间的区别。

## example matrix 
set.seed(0);X <- matrix(rnorm(10*3),ncol=3) 
X[1:2,1] <- NA 
X[3:4,2] <- NA 
X[5:6,3] <- NA 

#    [,1]  [,2]  [,3] 
# [1,]   NA 0.7635935 -0.22426789 
# [2,]   NA -0.7990092 0.37739565 
# [3,] 1.329799263   NA 0.13333636 
# [4,] 1.272429321   NA 0.80418951 
# [5,] 0.414641434 -0.2992151   NA 
# [6,] -1.539950042 -0.4115108   NA 
# [7,] -0.928567035 0.2522234 1.08576936 
# [8,] -0.294720447 -0.8919211 -0.69095384 
# [9,] -0.005767173 0.4356833 -1.28459935 
#[10,] 2.404653389 -1.2375384 0.04672617 

## complete 
cor(X, use = "complete.obs") 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.69629279 -0.09773585 
#[2,] -0.69629279 1.00000000 -0.01228196 
#[3,] -0.09773585 -0.01228196 1.00000000 

## pairwise 
cor(X, use = "pairwise.complete.obs") 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.5531396 0.08229729 
#[2,] -0.55313958 1.0000000 -0.10786401 
#[3,] 0.08229729 -0.1078640 1.00000000 

对于use = "complete.obs",与至少一个NA任何行会被丢弃。因此,它本质上是做

X1 <- X[7:10, ] ## only the last 4 rows have no `NA` 
cor(X1) 
#   [,1]  [,2]  [,3] 
#[1,] 1.00000000 -0.69629279 -0.09773585 
#[2,] -0.69629279 1.00000000 -0.01228196 
#[3,] -0.09773585 -0.01228196 1.00000000 

这里,(1,2)(2,1)进入-0.69629279计算,只有4个数据。但是,如果您进行配对,则可以使用6个数据进行计算:

cor(X[5:10, 1], X[5:10, 2]) 
# [1] -0.5531396 
相关问题