创建相关矩阵p值

7
我可以使用以下命令获取相关矩阵:
> df<-data.frame(x=c(5,6,5,9,4,2,1,3,5,7),y=c(3.1,2.5,3.8,5.4,6.5,2.5,1.5,8.1,7.1,6.1),z=c(5,6,4,9,2,4,1,6,2,4))
> cor(df)
           x         y        z
x  1.0000000 0.2923939 0.6566866
y  0.2923939 1.0000000 0.1167084
z 0.6566866 0.1167084 1.0000000
>

我可以使用命令获取单个p值:

> cor.test(x,y)$p.value
[1] 0.4123234

我该如何获得所有这些相关系数的p值矩阵?感谢您的帮助。
3个回答

16
你也可以使用Hmisc软件包。
它的工作原理示例如下:
mycor <- rcorr(as.matrix(data), type="pearson")

mycor$r 显示相关矩阵,mycor$p 显示相应的 p 值矩阵。


1
由于“cor”本身是一个函数,对我来说有些困惑。我正在使用“mycor = rcorr(......)”,并且我可以轻松地从mycor中获取r、n和P值。谢谢。 - rnso
3
请使用cor$P,其中P需要大写。 - AvidLearner

4

这个例子计算了每一列组合的p值。虽然不是最优解决方案(例如,会计算出x-yy-x的p值),但是应该可以为您提供一些启示。主要的技巧是使用expand.grid生成列的组合,并使用mapply在每个组合上调用cor.test

col_combinations = expand.grid(names(df), names(df))
cor_test_wrapper = function(col_name1, col_name2, data_frame) {
    cor.test(data_frame[[col_name1]], data_frame[[col_name2]])$p.value
}
p_vals = mapply(cor_test_wrapper, 
                  col_name1 = col_combinations[[1]], 
                  col_name2 = col_combinations[[2]], 
                  MoreArgs = list(data_frame = df))
matrix(p_vals, 3, 3, dimnames = list(names(df), names(df)))
           x         y          z
x 0.00000000 0.4123234 0.03914453
y 0.41232343 0.0000000 0.74814951
z 0.03914453 0.7481495 0.00000000

谢谢,但我仍在努力理解*apply函数。 - rnso

2

一种方法是使用psych包中的corr.test(注意双r)。

如果你喜欢使用mapplysapply,你可以编写自己的函数来完成这个任务。例如:

rrapply <- function(A, FUN, ...) mapply(function(a, B) lapply(B, 
         function(x) FUN(a, x, ...)), a = A, MoreArgs = list(B = A))
cor.tests <- rrapply(df, cor.test) # a matrix of cor.tests
apply(cor.tests, 1:2, function(x) x[[1]]$p.value) # and it's there

现在您可以使用相同的逻辑来制作一个t检验矩阵或相关性的置信区间。


谢谢,但对于像我这样的初学者来说,使用rcorr似乎更容易。 - rnso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接