基于变量之间的相关性聚类变量

机器算法验证 相关性 聚类 相关矩阵
2022-02-08 06:06:03

问题:

  1. 我有一个很大的相关矩阵。我不想对单个相关性进行聚类,而是根据变量彼此的相关性对变量进行聚类,即如果变量 A 和变量 B 与变量 C 到 Z 具有相似的相关性,那么 A 和 B 应该属于同一个集群。现实生活中的一个很好的例子是不同的资产类别——资产类别内部的相关性高于资产类别之间的相关性。

  2. 我还在考虑根据变量之间的强度关系对变量进行聚类,例如,当变量 A 和 B 之间的相关性接近 0 时,它们或多或少地独立运行。如果突然一些潜在条件发生变化并出现强相关性(正或负),我们可以认为这两个变量属于同一个集群。因此,与其寻找正相关,不如寻找关系与无关系。我想一个类比可能是一簇带正电和带负电的粒子。如果电荷下降到 0,粒子就会从簇中漂移。然而,正电荷和负电荷都将粒子吸引到相关的簇中。

如果其中一些不是很清楚,我深表歉意。请告诉我,我会澄清具体细节。

2个回答

这是 R 中使用数据集的一个简单示例bfi:bfi 是围绕 5 个因素组织的 25 个性格测试项目的数据集。

library(psych)
data(bfi)
x <- bfi 

根据变量之间的绝对相关性,使用变量之间的欧几里登距离进行层次聚类分析,如下所示:

plot(hclust(dist(abs(cor(na.omit(x))))))

替代文字 树状图显示项目通常如何根据理论分组(例如,N(神经质)项目组合在一起)与其他项目聚集在一起。它还显示了集群中的某些项目如何更相似(例如,C5 和 C1 可能比 C5 和 C3 更相似)。它还表明 N 集群与其他集群不太相似。

或者,您可以像这样进行标准因子分析:

factanal(na.omit(x), 5, rotation = "Promax")


Uniquenesses:
   A1    A2    A3    A4    A5    C1    C2    C3    C4    C5    E1    E2    E3    E4    E5    N1 
0.848 0.630 0.642 0.829 0.442 0.566 0.635 0.572 0.504 0.603 0.541 0.457 0.541 0.420 0.549 0.272 
   N2    N3    N4    N5    O1    O2    O3    O4    O5 
0.321 0.526 0.514 0.675 0.625 0.804 0.544 0.630 0.814 

Loadings:
   Factor1 Factor2 Factor3 Factor4 Factor5
A1  0.242  -0.154          -0.253  -0.164 
A2                          0.570         
A3         -0.100           0.522   0.114 
A4                  0.137   0.351  -0.158 
A5         -0.145           0.691         
C1                  0.630           0.184 
C2  0.131   0.120   0.603                 
C3  0.154           0.638                 
C4  0.167          -0.656                 
C5  0.149          -0.571           0.125 
E1          0.618   0.125  -0.210  -0.120 
E2          0.665          -0.204         
E3         -0.404           0.332   0.289 
E4         -0.506           0.555  -0.155 
E5  0.175  -0.525   0.234           0.228 
N1  0.879  -0.150                         
N2  0.875  -0.152                         
N3  0.658                                 
N4  0.406   0.342  -0.148           0.196 
N5  0.471   0.253           0.140  -0.101 
O1         -0.108                   0.595 
O2 -0.145   0.421   0.125   0.199         
O3         -0.204                   0.605 
O4          0.244                   0.548 
O5  0.139                   0.177  -0.441 

               Factor1 Factor2 Factor3 Factor4 Factor5
SS loadings      2.610   2.138   2.075   1.899   1.570
Proportion Var   0.104   0.086   0.083   0.076   0.063
Cumulative Var   0.104   0.190   0.273   0.349   0.412

Test of the hypothesis that 5 factors are sufficient.
The chi square statistic is 767.57 on 185 degrees of freedom.
The p-value is 5.93e-72 

在聚类相关性时,重要的是不要计算两次距离。当您采用相关矩阵时,您实际上是在进行距离计算。您需要通过取 1(绝对值)将其转换为真实距离。

1-abs(cor(x))

当您将此矩阵转换为距离对象时,如果您使用 dist 函数,您将获取相关性之间的距离。相反,您想使用as.dist()将预先计算的距离转换为"dist"对象的函数。

将此方法应用于 Alglim 示例

library(psych)
data(bfi)
x <- bfi 
plot(hclust(as.dist(1-abs(cor(na.omit(x))))))

产生不同的树状图 聚类树状图