R中的cor()行为在各个向量和data.frame之间有所不同

Posted

技术标签:

【中文标题】R中的cor()行为在各个向量和data.frame之间有所不同【英文标题】:cor() behavior in R different between individual vectors and data.frame 【发布时间】:2012-01-14 08:45:03 【问题描述】:

我正在尝试获取数据框中所有行相对于彼此的 Pearson 相关系数。有些值是空的(NA),这似乎是我在 2 个缺少值的向量上运行 cor() 时没有遇到的问题。这是 2 个向量的正确结果:

x <- c(NA, 4.5, NA, 4, NA, 1)
y <- c(2.5, 3.5, 3, 3.5, 3, 2.5)
cor(x,y, use = "complete.obs")
[1] 0.9912407

这是当它们是数据框的一部分时的结果:

cor(t(critics1), use = "complete.obs")
   y  a  b  c  d  e  x
y  1 NA NA NA NA NA NA
a NA  1  1  1 -1  1 -1
b NA  1  1  1 -1  1 -1
c NA  1  1  1 -1  1 -1
d NA -1 -1 -1  1 -1  1
e NA  1  1  1 -1  1 -1
x NA -1 -1 -1  1 -1  1
Warning message:
In cor(t(critics1), use = "complete.obs") : the standard deviation is zero

为什么use参数的效果不一样? 这是critics1 数据框的样子;

film1 film2 film3 film4 film5 film6
y   2.5   3.5   3.0   3.5   3.0   2.5
a   3.0   3.5   1.5   5.0   3.0   3.5
b   2.5   3.0    NA   3.5   4.0    NA
c    NA   3.5   3.0   4.0   4.5   2.5
d   3.0   4.0   2.0   3.0   3.0   2.0
e   3.0   4.0    NA   5.0   3.0   3.5
x    NA   4.5    NA   4.0    NA   1.0

【问题讨论】:

data.frame critics1 是什么样的?您能否在问题中包含几行? 也许您的矩阵中实际上没有完整的观察结果,在这种情况下您可能需要使用pairwise.complete.obs?正如 Josh 所说,唯一确定的方法是分享矩阵的结构。 @joran。答对了。只有两个完整的观察结果,并且(启动),y 显示它们之间没有差异。使用pairwise.complete.obs,它工作得很好。 【参考方案1】:

正如@joran 推测的那样,当您转置critics1 时,只有两个完整的观察结果(即没有缺失值的行)。这就是为什么所有相​​关性都是1-1 或(对于那些涉及y,在两个完整行中的值都是3.5)NA

t(critics1)
#         y   a   b   c d   e   x
# film1 2.5 3.0 2.5  NA 3 3.0  NA
# film2 3.5 3.5 3.0 3.5 4 4.0 4.5
# film3 3.0 1.5  NA 3.0 2  NA  NA
# film4 3.5 5.0 3.5 4.0 3 5.0 4.0
# film5 3.0 3.0 4.0 4.5 3 3.0  NA
# film6 2.5 3.5  NA 2.5 2 3.5 1.0

如果您使用use="pairwise.complete.obs" 而不是use="complete.obs",它会随心所欲地工作:

cor(t(df), use="pairwise.complete.obs")["y","x"] # Extract correlation of y and x
# [1] 0.9912407

【讨论】:

以上是关于R中的cor()行为在各个向量和data.frame之间有所不同的主要内容,如果未能解决你的问题,请参考以下文章

R:你如何总结 Data.Tree 中叶子和节点的数据?

R从字符向量输入名称到函数公式语句

有没有办法在二维数组中提取连续特征

【R】数值型向量及运算

如何将矩阵转换为 R 中的列向量列表?

R x相关性计算时缺失值的处理