【问题标题】:Column by column correlation & significance between two data sets两个数据集之间的逐列相关性和显着性
【发布时间】:2022-11-23 03:24:38
【问题描述】:

我想使用 psych 包中的 corr.test 函数来计算两个数据帧的相应列之间的相关性和重要性。 我正在使用的数据帧Df1Df2 的一个简化示例是:

set.seed(42)
Df1 <- data.frame(matrix(runif(50), 10, 5))
Df2 <- data.frame(matrix(runif(50), 10, 5))

请注意,此问题已在此处得到解答:

Column by column correlation between two data sets with R?

但仅针对相关部分,即它缺乏我正在寻找的重要性,因为它使用 cor 函数而不是 corr.test 函数。

任何帮助将不胜感激。

【问题讨论】:

  • 使用前面的问题,您是否尝试过将 sapply(seq(idx), function(i) cor(Df1[, i], Df2[, i])) 替换为 sapply(seq(idx), function(i) cor.test(Df1[, i], Df2[, i]))

标签: r correlation significance


【解决方案1】:

也许是这样的。将相关性和 p 值映射到数据框:

library(tidyverse)

map_dfr(1:ncol(Df1), (i) {
  cr_tst <- cor.test(Df1[, i], Df2[, i])
  tibble(var = colnames(Df1)[i],
         cor = cr_tst$estimate,
         p.value = cr_tst$p.value)
})
#> # A tibble: 5 x 3
#>   var       cor p.value
#>   <chr>   <dbl>   <dbl>
#> 1 X1     0.249    0.488
#> 2 X2    -0.408    0.242
#> 3 X3     0.0372   0.919
#> 4 X4    -0.0997   0.784
#> 5 X5     0.466    0.174

【讨论】:

    【解决方案2】:

    rcorr() 函数(来自 Hmisc 包)允许一次计算多对变量的相关测试的 p 值。应用于我们的数据集,我们有:

    library("Hmisc")
    res2 <- rcorr(as.matrix(cbind(Df1, Df2)))
    res2
    
    P
       X1     X2     X3     X4     X5     X1     X2     X3     X4     X5    
    X1        0.8552 0.3306 0.2765 0.6174 0.4885 0.8445 0.3510 0.4739 0.8592
    X2 0.8552        0.4264 0.9639 0.7081 0.2472 0.2417 0.7335 0.9291 0.1414
    X3 0.3306 0.4264        0.6919 0.7151 0.4481 0.6139 0.9188 0.9900 0.7766
    X4 0.2765 0.9639 0.6919        0.5230 0.4341 0.8599 0.2467 0.7841 0.9047
    X5 0.6174 0.7081 0.7151 0.5230        0.1280 0.1076 0.1151 0.8081 0.1744
    X1 0.4885 0.2472 0.4481 0.4341 0.1280        0.0130 0.5283 0.6915 0.9308
    X2 0.8445 0.2417 0.6139 0.8599 0.1076 0.0130        0.8044 0.7331 0.4809
    X3 0.3510 0.7335 0.9188 0.2467 0.1151 0.5283 0.8044        0.8020 0.2286
    X4 0.4739 0.9291 0.9900 0.7841 0.8081 0.6915 0.7331 0.8020        0.0595
    X5 0.8592 0.1414 0.7766 0.9047 0.1744 0.9308 0.4809 0.2286 0.0595
    

    【讨论】:

      【解决方案3】:

      mapply 中使用 cor.test 并子集所需的统计信息,其中估计是相关性。

      mapply((x, y) cor.test(x, y)[c('estimate', 'p.value')], Df1, Df2)
      #                 X1        X2        X3         X4          X5       
      # estimate 0.2486405 -0.408098 0.03718413 -0.09967868 0.4662738
      # p.value  0.4884952 0.2416943 0.9187721  0.7841065   0.1743502
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-02-15
        • 2012-06-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-03
        相关资源
        最近更新 更多