将stats :: cor()的相关输出与R中的二分数据混淆

时间:2017-06-07 13:04:42

标签: r correlation

我有data.frame df,其中包含三个变量,其值为" 1"或" 0"并且没有带有多个变量的行与#34; 1":

> df <- structure(list(var1 = c(0, 0, 0, 0, 1, 0, 0, 1, 0, 0), var2 = c(1, 
0, 0, 0, 0, 0, 0, 0, 0, 0), var3 = c(0, 1, 0, 1, 0, 1, 0, 0, 
0, 1)), .Names = c("var1", "var2", "var3"), row.names = c(NA, 
-10L), class = c("tbl_df", "tbl", "data.frame"))

> df

   var1 var2 var3
1     0    1    0
2     0    0    1
3     0    0    0
4     0    0    1
5     1    0    0
6     0    0    1
7     0    0    0
8     1    0    0
9     0    0    0
10    0    0    1

所有行的行和小于1:

> rowSums(df)
 [1] 1 1 0 1 1 1 0 1 0 1

当我查看相关性时(我使用&#34; spearman&#34;参数,因为数据是&#34; 1&#34; s和&#34; 0&#34; s),输出是令人困惑,因为存在非零的相关性:

cor(df, method = "spearman")
           var1       var2       var3
var1  1.0000000 -0.1666667 -0.4082483
var2 -0.1666667  1.0000000 -0.2721655
var3 -0.4082483 -0.2721655  1.0000000

我想知道这是否是stats :: cor()的一些奇怪的副作用,所以我尝试了Hmisc :: rcorr(),结果相同:

> Hmisc::rcorr(as.matrix(df), type = "spearman")
      var1  var2  var3
var1  1.00 -0.17 -0.41
var2 -0.17  1.00 -0.27
var3 -0.41 -0.27  1.00

不应该将所有三个变量之间的相关性设为0,因为没有行中多个变量的值为&#34; 1&#34;?我是否误解了相关性如何以某种深刻的方式发挥作用?或者我错误地使用这些功能?

1 个答案:

答案 0 :(得分:1)

您对行总和小于1的观察实际上意味着变量之间存在一些负相关,因为负相关的含义是一个变量更大(在您的情况下为1),一个变量更小(在您的案例0),这与您的结果一致。

由于两个变量中的任何一个的内积为零,可能会出现混淆,但内积为零并不意味着没有相关性(它只表示只有当每个变量都是标准化为平均零,你的情况肯定不是。)