1

(溶けた) 相関行列ですべての一意の値を報告したいと考えています。

私が行った場合:

melt(cor(x,method="pearson",use="complete.obs"))

私は手に入れます:

VarA    VarA   1
VarA    VarB   0.001
VarA    VarC   -0.002
VarB    VarB   1
VarB    VarA   0.001
VarB    VarC   0.003
VarC    VarC   1
VarC    VarA   -0.002
VarC    VarB   0.003

ただし、一部の行は同じことを効果的に報告しています。つまりVarA VarB = VarB VarA、私が本当に欲しいのは次のとおりです。

VarA    VarA   1
VarA    VarB   0.001
VarA    VarC   -0.002
VarB    VarB   1
VarB    VarC   0.003
VarC    VarC   1

または、ボーナスとして、それ自体に相関する変数を削除することで、次のもののみを取得できます。

VarA    VarB   0.001
VarA    VarC   -0.002
VarB    VarC   0.003
4

2 に答える 2

8

マトリックスで作業することができます。これは簡単です。

res <- cor(iris[,-5])
res[lower.tri(res)] <- NA #assuming there are no actual NAs already
                          # which seems likely with complete.obs
#use lower.tri(res, diag = TRUE) to remove the diagonal too
na.omit(reshape2::melt(res))

#           Var1         Var2      value
#1  Sepal.Length Sepal.Length  1.0000000
#5  Sepal.Length  Sepal.Width -0.1175698
#6   Sepal.Width  Sepal.Width  1.0000000
#9  Sepal.Length Petal.Length  0.8717538
#10  Sepal.Width Petal.Length -0.4284401
#11 Petal.Length Petal.Length  1.0000000
#13 Sepal.Length  Petal.Width  0.8179411
#14  Sepal.Width  Petal.Width -0.3661259
#15 Petal.Length  Petal.Width  0.9628654
#16  Petal.Width  Petal.Width  1.0000000
于 2016-02-02T14:18:39.280 に答える
1

2段階のアプローチを行うことができます:

#starting from:
x <- melt(cor(x,method="pearson",use="complete.obs"))
#subset first the variable 3 when it is equal to 1
x <- subset(x, V3 != 1)
#remove duplicate entries in that same variable
x[duplicated(x$V3),]
V1   V2     V3
5 VarB VarA  0.001
8 VarC VarA -0.002
9 VarC VarB  0.003
于 2016-02-02T14:24:06.790 に答える