我可以使用以下命令获得相关矩阵:
> 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值矩阵?谢谢你的帮助。
答案 0 :(得分:12)
您还可以使用包Hmisc
。
它如何运作的一个例子:
mycor <- rcorr(as.matrix(data), type="pearson")
mycor$r
显示相关矩阵,mycor$p
矩阵和相应的p值。
答案 1 :(得分:3)
此示例计算每个列组合的p值。它不是最佳解决方案(例如,x-y
和y-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)
..或者,如果您是mapply
和sapply
的粉丝,您可以编写自己的功能。类似的东西:
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的相关性