皮尔逊相关性和相关性的意义

时间:2016-01-18 17:48:49

标签: r

我有一个包含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相关系数和关联显着性水平的输出(唯一数据帧)?

抱歉这个问题!

3 个答案:

答案 0 :(得分:1)

stats::cor.test有两个输入,xy,它们是相同长度的数字向量 - 请参阅文档?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有一个非常具体的输入法。我们假设您的数据xy中有两个变量:

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总是有几种做事方式。这是一个。