Cor.test()
将矢量 x
和 y
作为参数,但我有一个完整的数据矩阵,我想成对测试 . Cor()
把这个矩阵作为一个参数就好了,我希望找到一种方法来为 cor.test()
做同样的事情 .
其他人的共同建议似乎是使用 cor.prob()
:
https://stat.ethz.ch/pipermail/r-help/2001-November/016201.html
但是这些p值与 cor.test()
生成的p值不同! Cor.test()
似乎也比 cor.prob()
能更好地处理成对删除(我的数据集中有相当多的缺失数据) .
有没有人有 cor.prob()
的替代品?如果解决方案涉及嵌套for循环,那么就是它(我已经足够 R
,因为即使这对我来说也是有问题的) .
5 回答
psych
包中的corr.test
旨在执行此操作:如评论中所述,要在整个矩阵上复制基础
cor.test()
函数的p值,则需要关闭p值的调整以进行多次比较(默认为使用Holm的调整方法):[但在解释这些结果时要小心!]
如果您严格遵循
cor.test
矩阵格式的pvalues,这是一个从Vincent无耻地窃取的解决方案(LINK):注意:Tommy也提供了更快的解决方案,但不太容易实现 . 哦,没有循环:)
Edit 我的
qdapTools
包中有一个函数v_outer
,这个任务非常简单:可能最简单的方法是使用Hmisc中的
rcorr()
. 它只需要一个矩阵,所以如果你的数据在data.frame中,请使用rcorr(as.matrix(x))
. 它将返回一个列表,其中包括:1)r成对的矩阵,2)成对n的矩阵,3)r的p值矩阵 . 它会自动忽略丢失的数据 .理想情况下,此类函数也应采用data.frames,并输出置信区间符合'New Statistics' .
已接受的解决方案(心理包中的corr.test函数)有效,但对于大型矩阵来说速度极慢 . 我正在使用与药物敏感性矩阵相关的基因表达矩阵(~20,000到~1,000)(~1,000~500)我不得不停止它,因为它需要永远 .
我从mental包中获取了一些代码并直接使用了cor()函数,并得到了更好的结果:
即使有两个100 x 200矩阵,差异也是惊人的 . 一秒或两秒对45秒 .
“已接受的解决方案(心理包中的功能)可以正常工作,但对于大型矩阵来说速度非常慢 . ”
如果你使用
ci=FALSE
,那么速度要快得多 . 默认情况下,会找到置信区间 . 但是,这会导致速度略有下降 . 所以,对于rs
,ts
和ps
,设置ci=FALSE
.