根据基于相关性的标准子集数据框

subset data frame according to a criteria based on correlation

我有一个数据框,想创建一个只保留低相关变量的函数。这意味着查看每个变量与其余变量的成对相关性,并且对于那些其中至少一个相关系数大于 0.4 的变量,然后从数据框中取出该变量和一个高度相关的变量。

例如假设我有一个数据框:

 data <-  data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
cor(data, use="pairwise.complete.obs")

            x1         x2          x3         x4
x1  1.00000000 -0.3325757  0.08567911  0.2651721
x2 -0.33257569  1.0000000 -0.18761301  0.4660056
x3  0.08567911 -0.1876130  1.00000000 -0.3321003
x4  0.26517210  0.4660056 -0.33210031  1.0000000

然后我想return一个只保留x1和x3的数据框(假定x2和x4的相关系数为0.46)

你可以试试:

set.seed(50)
data <-  data.frame(x1=rnorm(10), x2=rnorm(10), x3=runif(10), x4=runif(10,15,20))
mycor <- cor(data, use="pairwise.complete.obs")
data[, !apply(mycor, 2, function (x) max(x[-which.max(x)]) >.4 | min(x[which.min(x)]) < -.4) ]

计算相关矩阵cd,检查是否有任何东西>0.4。 然后子集化,忽略 diagonals,其中 row==col:

cd <- abs(cor(data, use="pairwise.complete.obs")) > 0.4
data[-unique(col(cd)[cd & row(cd) != col(cd)])]