R 多变量相关及其多重组合

R 多变量相关及其多重组合,r,correlation,R,Correlation,这里是要计算O_数据和M_数据的可能多个组合之间的相关性的数据集的示例 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_数据和单个M_数据之间的相关性 correlation= matrix(NA,ncol = length(M_data[1,])) for (i in 1:l

这里是要计算O_数据和M_数据的可能多个组合之间的相关性的数据集的示例

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_数据和单个M_数据之间的相关性

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

for (i in 1:length(correlation))
{
  correlation[,i]=cor(O_data,M_data[,i])
}
除此之外,如何获得O_数据和M_数据集可能的多种组合之间的相关性

让我们澄清一下组合

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……。

使用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_数据中变量的名称。以下是矩阵的动机:

给我M_a和M_b的总和。我可以计算O_数据和这些总和之间的相关性。将所有内容放在一行中:

(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_数据与M_数据中所有31个可能列和的相关性。您可以通过查看该行的哪个列下有1来判断包含了哪个列


我尽量不诉诸矩阵太多,但这是我想到的第一件事

如果我只想定期得到O_数据和M_a,M_b,M_c…,M_b,M_c…,而不是像M_a,M_c…,M_c,M_e,M_b…,之间的相关值呢?
as.matrix(M_data) %*% M_grid[,4]
(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