Variables de clustering basées sur les corrélations entre elles

23

Des questions:

  1. J'ai une grande matrice de corrélation. Au lieu de regrouper les corrélations individuelles, je veux regrouper les variables en fonction de leurs corrélations l'une avec l'autre, c'est-à-dire si la variable A et la variable B ont des corrélations similaires aux variables C à Z, alors A et B doivent faire partie du même cluster. Un bon exemple concret de cela est les différentes classes d'actifs - les corrélations intra-classe d'actifs sont plus élevées que les corrélations inter-classes d'actifs.

  2. J'envisage également de regrouper les variables en termes de relation étroite entre elles, par exemple lorsque la corrélation entre les variables A et B est proche de 0, elles agissent plus ou moins indépendamment. Si soudainement certaines conditions sous-jacentes changent et qu'une forte corrélation apparaît (positive ou négative), nous pouvons penser que ces deux variables appartiennent au même cluster. Ainsi, au lieu de chercher une corrélation positive, on chercherait une relation contre aucune relation. Je suppose qu'une analogie pourrait être un groupe de particules chargées positivement et négativement. Si la charge tombe à 0, la particule s'éloigne du groupe. Cependant, les charges positives et négatives attirent les particules vers des amas révélateurs.

Je m'excuse si certains de ces éléments ne sont pas très clairs. Veuillez me le faire savoir, je vais clarifier des détails spécifiques.

Eduardas
la source
1
L'analyse factorielle ne ferait-elle pas l'affaire pour qn 1? La question 2 est un peu vague. «Relation» semble synonyme de «corrélation» ou au moins une forme de relation est une relation linéaire et la corrélation le capture. Peut-être, vous devez clarifier qn 2.
Vous avez indiqué ce que vous voulez faire. Quelle est ta question? S'agit-il de la mise en œuvre ou si votre approche d'analyse est appropriée? ou autre chose?
Jeromy Anglim

Réponses:

14

Voici un exemple simple dans R utilisant l' bfiensemble de données: bfi est un ensemble de données de 25 éléments de test de personnalité organisés autour de 5 facteurs.

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

Une analyse de grappes hiearchical utilisant la distance euclidienne entre les variables basée sur la corrélation absolue entre les variables peut être obtenue comme suit:

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

texte alternatif Le dendrogramme montre comment les éléments se regroupent généralement avec d'autres éléments selon les groupes théorisés (par exemple, les éléments N (névrosisme) se regroupent). Il montre également comment certains éléments au sein des clusters sont plus similaires (par exemple, C5 et C1 peuvent être plus similaires que C5 avec C3). Cela suggère également que le cluster N est moins similaire aux autres clusters.

Vous pouvez également effectuer une analyse factorielle standard comme suit:

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 
Jeromy Anglim
la source
1
Salut Jeromy. Q: que signifie prendre la distance des abdos (cor (...))? N'est-ce pas une matrice cor est celle où un plus grand nombre indique plus d'une relation, tandis que dans une matrice de distance l'inverse est vrai? (Je soupçonne que je manque quelque chose, pourriez-vous s'il vous plaît expliquer?)
Tal Galili
@Tal Ma compréhension est que la fonction dist prend la distance euclidienne de la matrice qui lui est transmise, qui dans ce cas était une matrice de corrélation absolue. Peut-être, une conversion plus littérale de la matrice de corrélation serait la fonction as.dist () qui prend une matrice de distance existante: par exemple, as.dist (1-abs (cor (na.omit (x))))). voir? dist
Jeromy Anglim
1
utiliser un 1-abs (cor ...) aurait plus de sens pour moi :)
Tal Galili
@Tal Oui. Je suis d'accord. J'ai fait un rapide coup d'œil. Dans ce cas, le vecteur de distances (euclidienne du noyau abs avec le noyau 1-abs) est en corrélation autour de 0,96, donc cela ne fait pas beaucoup de différence.
Jeromy Anglim
1
@Tal l'option dist: chaque variable a un vecteur de corrélations absolues. Les variables avec des vecteurs plus similaires auraient des distances euclidiennes plus petites: en.wikipedia.org/wiki/Euclidean_distance
Jeromy Anglim
2

Lors du regroupement des corrélations, il est important de ne pas calculer la distance deux fois. Lorsque vous prenez la matrice de corrélation, vous effectuez essentiellement un calcul de distance. Vous voudrez le convertir en une vraie distance en prenant 1 - la valeur absolue.

1-abs(cor(x))

Lorsque vous allez convertir cette matrice en objet distance, si vous utilisez la fonction dist, vous prendrez les distances entre vos corrélations. Au lieu de cela, vous souhaitez utiliser la as.dist()fonction qui transformera simplement vos distances pré-calculées en un en un "dist"objet.

Application de cette méthode à l'exemple d'Alglim

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

entraîne un dendroggram différent Dendrogramme de cluster

Justin Leiterman
la source