创建相关矩阵p值

时间:2014-04-14 07:00:01

标签: r

我可以使用以下命令获得相关矩阵:

> 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 个答案:

答案 0 :(得分:12)

您还可以使用包Hmisc

它如何运作的一个例子:

mycor <- rcorr(as.matrix(data), type="pearson")

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

答案 1 :(得分:3)

此示例计算每个列组合的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

答案 2 :(得分:2)

一种方法是使用corr.test包中的psych(注意双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检验矩阵,或者说CI的相关性