如何使用“cor.test”来关联特定列?

How to use `cor.test` for correlation of specific columns?

我有以下数据示例:

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

这行得通。然而,我想同时拥有 estimate 和 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 不同)关联特定列的请求。这个问题有什么解决办法吗?

您可以使用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