2016-08-25 29 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 
相關問題