0
我有一个数据框,我想找到哪组变量共享最高的相关性。例如:一组高度相关的变量
mydata <- structure(list(V1 = c(1L, 2L, 5L, 4L, 366L, 65L, 43L, 456L, 876L, 78L, 687L, 378L, 378L, 34L, 53L, 43L),
V2 = c(2L, 2L, 5L, 4L, 366L, 65L, 43L, 456L, 876L, 78L, 687L, 378L, 378L, 34L, 53L, 41L),
V3 = c(10L, 20L, 10L, 20L, 10L, 20L, 1L, 0L, 1L, 2010L,20L, 10L, 10L, 10L, 10L, 10L),
V4 = c(2L, 10L, 31L, 2L, 2L, 5L, 2L, 5L, 1L, 52L, 1L, 2L, 52L, 6L, 2L, 1L),
V5 = c(4L, 10L, 31L, 2L, 2L, 5L, 2L, 5L, 1L, 52L, 1L, 2L, 52L, 6L, 2L, 3L)),
.Names = c("V1", "V2", "V3", "V4", "V5"),
class = "data.frame", row.names = c(NA,-16L))
我可以计算相关与找到具有高于阈值corelations每对为:
var.corelation <- cor(as.matrix(mydata), method="pearson")
fin.corr = as.data.frame(as.table(var.corelation))
combinations_1 = combn(colnames(var.corelation) , 2 , FUN = function(x) paste(x , collapse = "_"))
fin.corr = fin.corr[ fin.corr$Var1 != fin.corr$Var2 , ]
fin.corr = fin.corr [order(fin.corr$Freq, decreasing = TRUE) , ,drop = FALSE]
fin.corr = fin.corr[ paste(fin.corr$Var1 , fin.corr$Var2 , sep = "_") %in% combinations_1 , ]
fin.corr <- fin.corr[fin.corr$Freq > 0.62, ]
fin.corr <- fin.corr[order(fin.corr$Var1, fin.corr$Var2), ]
fin.corr
直到现在的输出是:
Var1 Var2 Freq
V1 V2 0.9999978
V3 V4 0.6212136
V3 V5 0.6220380
V4 V5 0.9992690
这里V1
和V2
形式一组而其他V3
,V4
,V5
形成另一组,其中每对变量bles的相关性高于阈值。我想把这两组变量作为一个列表。例如
list(c("V1", "V2"), c("V3", "V4", "V5"))
我想你可以将你的方法建立在一个更干净的过程上,从相关性中提取组。我可以看到两种可能性:聚类相关矩阵(例如检查“hclust”(例如:http://research.stowers-institute.org/efg/R/Visualization/cor-cluster/)。第二个可能性:因子分析并利用因子) –
谢谢埃里克!我通过链接张贴问题。我的层次聚类没有工作,因为我错过了步骤'as.dist'将相关矩阵转换为dist对象,我的(错误)假设是他们是一样的,谢谢你的评论和答复,我已经接受了。 – discipulus