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))
Iはcorelationsを計算することができ、各対が閾値を超える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
は、 BLEは、閾値より高い相関を有する。これら2つの変数グループをリストとして取得したいと思います。例えば
list(c("V1", "V2"), c("V3", "V4", "V5"))
私はあなたのアプローチをより洗練されたプロセスに基づいて、相関からグループを抽出できると思います。 2つの可能性:相関行列のクラスタリング(例:hclust(例:http://research.stowers-institute.org/efg/R/Visualization/cor-cluster/))。第2の可能性:階乗分析と悪用する要素) –
ありがとうございましたEric!私は質問を投稿したそのリンクを見ました。私の階層クラスタリングは、相関行列をdistオブジェクトに変換するための 'as.dist'ステップを逃したので機能しませんでした。コメントと答えをありがとう、私はそれを受け入れた。 – discipulus