我有一个包含6行和14列的数据帧。我通过以下方式计算Pearson相关性:
#read data
data1 <- read.csv("test.csv")
#calculate correlation
pearson_coef <- cor(data1[sapply(data1, is.numeric)])
我得到了正确的相关系数。现在我想得到相关的显着性水平。所以我用过:
significance <- cor.test(data1)
但是我收到了这个错误:
Error in cor.test.default(data1) :
argument "y" is missing, with no default
我不明白这是什么问题。你能帮帮我吗?
此外,我想知道是否有可能获得具有Pearson相关系数和关联显着性水平的输出(唯一数据帧)?
抱歉这个问题!
答案 0 :(得分:1)
stats::cor.test
有两个输入,x
和y
,它们是相同长度的数字向量 - 请参阅文档?cor.test
- 长和短,你不能cor.test
data.frame
。
要获得所需的行为,您可以使用psych
包及其corr.test()
功能 - 请尝试以下操作:
# install.packages("psych")
library(psych)
corr.test(data1[sapply(data1, is.numeric)])
这将返回相关矩阵,样本大小和 p 值的矩阵。根据您的示例,您可以使用以下内容仅提取 p - 值并将其分配给significance
:
significance <- corr.test(data1[sapply(data1, is.numeric)])$p
<小时/> N.B。这将对返回的 p - 值应用调整因子。根据{{1}}的文档:
&#34;对于对称矩阵,在对角线以下报告原始概率,并针对对角线以上的多个比较调整相关性。在不同的x和ys的情况下,默认是调整多个测试的概率。&#34;
您可以使用psych::corr.test
来关闭 p - 值调整...
adjust = "none"
...但是,在解释此类结果时应谨慎使用。
有关已调整的 p 值的详细信息,请参阅corr.test(data1[sapply(data1, is.numeric)], adjust = "none")
。
答案 1 :(得分:1)
cor.test
有一个非常具体的输入法。我们假设您的数据x
和y
中有两个变量:
cor.test(~ x + y, data)
会得到你想要的东西。
答案 2 :(得分:0)
如果没有可重复的例子,这有点麻烦。我将使用虹膜数据集作为您的示例。您的cor.test()
调用无效的原因是您需要指定要比较的变量。请查看?cor.test
了解更多详情。
但是,如果您想通过数据框解决此问题,我建议使用dplyr
包。首先,您需要了解如何从cor.test()
对象中提取值。运行相关性:
iris.cor <- cor.test(iris$Petal.Width, iris$Petal.Length)
然后查看数据帧的结构:
str(iris.cor)
请注意,您可以从cor.test()对象中提取值,如下所示:
iris.cor$estimate
iris.cor$p.value
现在,如果要在数据框中包含这些值,可以采用多种方法。我的偏好是dplyr
解决方案,但有很多方法可以为这只猫提供皮肤。
library(dplyr)
iris %>%
summarise(coef=cor.test(Petal.Width, Petal.Length)$estimate,
pval=cor.test(Petal.Width, Petal.Length)$p.value)
这样做的好处是可以轻松添加cor.test()
对象的其他元素或添加分组变量:
iris %>%
group_by(Species) %>%
summarise(coef=cor.test(Petal.Width, Petal.Length)$estimate,
pval=cor.test(Petal.Width, Petal.Length)$p.value)
在一天结束时,R总是有几种做事方式。这是一个。