【问题标题】:Pearson correlation and significance of the correlationPearson相关性和相关性的显着性
【发布时间】:2016-01-18 17:48:48
【问题描述】:

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

对不起这个问题!

【问题讨论】:

  • cor() 将创建数据帧的相关矩阵,cor.prob() 将生成 p 值矩阵

标签: r


【解决方案1】:

cor.test 有一个非常具体的输入法。假设您的数据中有两个变量xy

cor.test(~ x + y, data)

会得到你想要的。

【讨论】:

    【解决方案2】:

    stats::cor.test 接受两个输入,xy,它们是相同长度的数字 向量 -- 请参阅文档,?cor.test -- 长和短,你无法喂cor.testdata.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 值应用一个调整因子。根据psych::corr.test 的文档:

    “对于对称矩阵,原始概率报告在对角线下方,相关性针对对角线上方的多次比较进行了调整。在 x 和 y 不同的情况下,默认为多次测试调整概率。”

    你可以像这样使用adjust = "none"关闭p-value调整...

    corr.test(data1[sapply(data1, is.numeric)], adjust = "none")

    ...但是,在解释此类结果时应谨慎。 有关调整后的 p 值的更多信息,请参阅?p.adjust

    【讨论】:

      【解决方案3】:

      如果没有可重现的示例,这有点繁琐。我将使用 iris 数据集作为您的示例。您的cor.test() 调用不起作用的原因是您需要指定要比较的变量。查看?cor.test 了解更多详情。

      但是,如果您想使用数据框解决此问题,我建议您使用 dplyr 包。首先,您需要了解如何从cor.test() 对象中提取值。运行关联:

      iris.cor <- cor.test(iris$Petal.Width, iris$Petal.Length)
      

      然后看dataframe的结构:

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

      【讨论】:

      • 这对于一个简单的问题来说相当复杂——没有理由引入 dplyr 包
      • @Senor O 您将如何创建原始问题要求的输出?如果您阅读原始问题,他不仅想运行关联,还想提取元素并将它们组合成一个数据框。我很清楚还有其他方法可以做到这一点。
      猜你喜欢
      • 2011-04-26
      • 2020-02-06
      • 2013-03-17
      • 2017-03-08
      • 1970-01-01
      • 2019-02-15
      • 2013-03-30
      • 2021-08-18
      相关资源
      最近更新 更多