根据基于相关性的标准

时间:2015-11-04 02:55:08

标签: r subset

我有一个数据框,并希望创建一个只保留低相关变量的函数。这意味着查看每个变量与其余变量的成对相关性,对于其中至少一个相关系数大于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

然后我想返回一个只保留x1和x3的数据帧(假设x2和x4的相关性为0.46)

2 个答案:

答案 0 :(得分:3)

计算相关矩阵cd,检查是否有>0.4。 然后离开子集,忽略diag onals,其中row==col

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

答案 1 :(得分:2)

你可以尝试:

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) ]