【问题标题】:correlation with multiple variables and its mutiple combination与多个变量及其多重组合的相关性
【发布时间】:2018-02-24 03:56:39
【问题描述】:

这里是要计算O_data和M_data可能的多种组合之间相关性的数据集的例子。

O_data=runif(10)
M_a=runif(10)
M_b=runif(10)
M_c=runif(10)
M_d=runif(10)
M_e=runif(10)
M_data=data.frame(M_a,M_b,M_c,M_d,M_e)

我可以计算 O_data 和单个 M_data 数据之间的相关性。

correlation= matrix(NA,ncol = length(M_data[1,]))

for (i in 1:length(correlation))
{
  correlation[,i]=cor(O_data,M_data[,i])
}

除此之外,如何获取O_data与M_data集可能的多种组合之间的相关性?

让我们澄清一下组合。

cor_M_ab=cor((M_a+M_b),O_data)
cor_M_abc=cor((M_a+M_b+M_c),O_data)
cor_M_abcd=...
cor_M_abcde=...
...
....
cor_M_bcd=..
..
cor_M_eab=...
....
...

我不想要 M_a 和 M_c 的组合,我想要连续的组合,例如 M_ab 或 bc,bcd,abcde,ea,eab........

【问题讨论】:

    标签: r correlation


    【解决方案1】:

    使用set.seed 生成数据,以便重现:

    set.seed(42)  
    O_data=runif(10)
    M_a=runif(10)
    M_b=runif(10)
    M_c=runif(10)
    M_d=runif(10)
    M_e=runif(10)
    M_data=data.frame(M_a,M_b,M_c,M_d,M_e)
    

    棘手的部分是让事情井井有条。由于您没有指定,我制作了一个 5 行 31 列的矩阵。这些行获取M_data 中变量的名称。这是矩阵(动机:All N Combinations of All Subsets

    M_grid <- t(do.call(expand.grid, replicate(5, 0:1, simplify = FALSE))[-1,])
    rownames(M_grid) <- names(M_data)                                          
    M_grid                                                                     
    #>     2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
    #> M_a 1 0 1 0 1 0 1 0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0
    #> M_b 0 1 1 0 0 1 1 0  0  1  1  0  0  1  1  0  0  1  1  0  0  1  1  0  0  1
    #> M_c 0 0 0 1 1 1 1 0  0  0  0  1  1  1  1  0  0  0  0  1  1  1  1  0  0  0
    #> M_d 0 0 0 0 0 0 0 1  1  1  1  1  1  1  1  0  0  0  0  0  0  0  0  1  1  1
    #> M_e 0 0 0 0 0 0 0 0  0  0  0  0  0  0  0  1  1  1  1  1  1  1  1  1  1  1
    #>     28 29 30 31 32
    #> M_a  1  0  1  0  1
    #> M_b  1  0  0  1  1
    #> M_c  0  1  1  1  1
    #> M_d  1  1  1  1  1
    #> M_e  1  1  1  1  1
    

    现在,当我对M_data 和我的M_grid 的任何列进行矩阵乘法时,我得到M_data 中的列的总和,对应于M_grid 的哪些行有1。例如:

    as.matrix(M_data) %*% M_grid[,4]
    

    给我M_aM_b 的总和。我可以计算O_data 与这些总和之间的相关性。将它们放在一行中:

    (final <- cbind(t(M_grid), apply(as.matrix(M_data) %*% M_grid, 2, function(x) cor(O_data, x))))
    #>    M_a M_b M_c M_d M_e             
    #> 2    1   0   0   0   0  0.066499681
    #> 3    0   1   0   0   0 -0.343839423
    #> 4    1   1   0   0   0 -0.255957896
    #> 5    0   0   1   0   0  0.381614222
    #> 6    1   0   1   0   0  0.334916617
    #> 7    0   1   1   0   0  0.024198743
    #> 8    1   1   1   0   0  0.059297654
    #> 9    0   0   0   1   0  0.180676146
    #> 10   1   0   0   1   0  0.190656099
    #> 11   0   1   0   1   0 -0.140666930
    #> 12   1   1   0   1   0 -0.094245439
    #> 13   0   0   1   1   0  0.363591787
    #> 14   1   0   1   1   0  0.363546012
    #> 15   0   1   1   1   0  0.111435827
    #> 16   1   1   1   1   0  0.142772457
    #> 17   0   0   0   0   1  0.248640472
    #> 18   1   0   0   0   1  0.178471959
    #> 19   0   1   0   0   1 -0.117930168
    #> 20   1   1   0   0   1 -0.064838097
    #> 21   0   0   1   0   1  0.404258155
    #> 22   1   0   1   0   1  0.348609692
    #> 23   0   1   1   0   1  0.114267433
    #> 24   1   1   1   0   1  0.131731971
    #> 25   0   0   0   1   1  0.241561478
    #> 26   1   0   0   1   1  0.229693510
    #> 27   0   1   0   1   1  0.001390233
    #> 28   1   1   0   1   1  0.030884234
    #> 29   0   0   1   1   1  0.369212761
    #> 30   1   0   1   1   1  0.354971839
    #> 31   0   1   1   1   1  0.166132390
    #> 32   1   1   1   1   1  0.182368955
    

    最后一列是 O_dataM_data 中所有 31 个可能的列总和的相关性。您可以通过查看该行下方的1 来判断包含哪一列。

    我尽量不要过多地使用矩阵,但这是我首先想到的。

    【讨论】:

    • 如果我只想定期获取 O_data 与 M_a、M_b、M_c...、M_b、M_c... 之间的相关值,而不是像 M_a、M_c..., M_c,M_e,M_b?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-15
    • 2016-12-14
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多