【问题标题】:How to use `cor.test` for correlation of specific columns?如何使用“cor.test”来关联特定列?
【发布时间】:2015-06-01 12:28:37
【问题描述】:

我有以下数据示例:

A<-rnorm(100)
B<-rnorm(100)
C<-rnorm(100)

v1<-as.numeric(c(1:100))
v2<-as.numeric(c(2:101))
v3<-as.numeric(c(3:102))
v2[50]<-NA
v3[60]<-NA
v3[61]<-NA

df<-data.frame(A,B,C,v1,v2,v3)

如您所见,df 在第 5 列中有 1 个 NA,在第 6 列中有 2 个 NA。 现在我想一方面制作 col1 和 3 的相关矩阵,另一方面制作 col2,4,5,6 的相关矩阵。在 R 中使用 cor 函数:

cor(df[ , c(1,3)], df[ , c(2,4,5,6)], use="complete.obs")

#             B         v1         v2         v3
# A -0.007565203 -0.2985090 -0.2985090 -0.2985090
# C  0.032485874  0.1043763  0.1043763  0.1043763

这行得通。然而,我想同时拥有估计值和 p.value,因此我切换到 cor.test。

cor.test(df[ ,c(1,3)], df[ , c(2,4,5,6)], na.action = "na.exclude")$estimate

这不起作用,因为 'x' 和 'y' 必须具有相同的长度。 无论数据中是否存在 NA,此错误实际上都会发生。似乎 cor.test 不理解(与 cor 不同)关联特定列的请求。这个问题有解决办法吗?

【问题讨论】:

  • cor.testxy 应该是向量。另一种选择是来自psych 包的corr.test
  • 谢谢,这看起来很棒! Benjamini Hochberg 似乎还有可能在里面,很好!

标签: r correlation


【解决方案1】:

您可以使用outer 在所有列对之间执行测试。这里的XY 是从df 扩展而来的数据帧,每个包含8 列。

outer(df[, c(1,3)], df[, c(2,4,5,6)], function(X, Y){
    mapply(function(...) cor.test(..., na.action = "na.exclude")$estimate,
           X, Y)
})

您甚至可以得到与cor 相同形式的输出:

           B          v1          v2          v3
A 0.07844426  0.01829566  0.01931412  0.01528329
C 0.11487140 -0.14827859 -0.14900301 -0.15534569

【讨论】:

  • 不客气! outer 是一个很棒的功能,但请注意,如果在大型数据集上使用 XY 会变得非常大。
猜你喜欢
  • 2016-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2019-12-03
  • 1970-01-01
相关资源
最近更新 更多