Clustering von Variablen basierend auf Korrelationen zwischen ihnen

23

Fragen:

  1. Ich habe eine große Korrelationsmatrix. Anstatt einzelne Korrelationen zu gruppieren, möchte ich Variablen anhand ihrer Korrelationen miteinander gruppieren. Wenn also Variable A und Variable B ähnliche Korrelationen zu Variablen C bis Z aufweisen, sollten A und B Teil desselben Clusters sein. Ein gutes Beispiel aus der Praxis sind verschiedene Anlageklassen - die Korrelationen innerhalb der Anlageklassen sind höher als die Korrelationen zwischen den Anlageklassen.

  2. Ich denke auch über Clustering-Variablen in Bezug auf die Längenbeziehung zwischen ihnen nach, z. B. wenn die Korrelation zwischen Variablen A und B nahe bei 0 liegt, agieren sie mehr oder weniger unabhängig. Wenn sich plötzlich einige zugrunde liegende Bedingungen ändern und eine starke Korrelation entsteht (positiv oder negativ), können wir uns diese beiden Variablen als zu demselben Cluster gehörig vorstellen. Anstatt also nach positiver Korrelation zu suchen, würde man nach Beziehung statt nach keiner Beziehung suchen. Ich denke, eine Analogie könnte ein Cluster von positiv und negativ geladenen Teilchen sein. Wenn die Ladung auf 0 fällt, driftet das Teilchen vom Cluster weg. Sowohl positive als auch negative Ladungen ziehen jedoch Partikel zu offenbarenden Clustern an.

Ich entschuldige mich, wenn einige davon nicht sehr klar sind. Bitte lassen Sie es mich wissen, ich werde bestimmte Details klären.

Eduardas
quelle
1
Würde die Faktorenanalyse für qn 1 nicht den Job machen? Frage 2 ist etwas vage. "Beziehung" scheint ein Synonym für "Korrelation" zu sein, oder mindestens eine Form der Beziehung ist eine lineare Beziehung, die durch Korrelation erfasst wird. Vielleicht müssen Sie
Sie haben angegeben, was Sie tun möchten. Was ist deine Frage? Geht es um die Implementierung oder ob Ihr Analyseansatz angemessen ist? oder etwas anderes?
Jeromy Anglim

Antworten:

14

Hier ist ein einfaches Beispiel in R unter Verwendung des bfiDatensatzes: bfi ist ein Datensatz von 25 Persönlichkeitstestelementen, die um 5 Faktoren herum organisiert sind.

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

Eine hiearchische Clusteranalyse unter Verwendung des euklidischen Abstands zwischen Variablen basierend auf der absoluten Korrelation zwischen Variablen kann wie folgt erhalten werden:

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

Alt-Text Das Dendrogramm zeigt, wie sich Gegenstände im Allgemeinen mit anderen Gegenständen gemäß theoretischer Gruppierungen (z. B. N (Neurotizismus) -Gegenstandsgruppen) zusammenlagern. Es wird auch gezeigt, wie einige Elemente in Clustern ähnlicher sind (z. B. könnten C5 und C1 ähnlicher sein als C5 mit C3). Dies legt auch nahe, dass der N-Cluster anderen Clustern weniger ähnlich ist.

Alternativ können Sie eine Standardfaktoranalyse wie folgt durchführen:

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
quelle
1
Hallo Jeromy. F: Was bedeutet es, die dist von abs (cor (...)) zu nehmen? Ist eine Cor-Matrix nicht eine Matrix, bei der eine größere Zahl eher auf eine Beziehung hinweist, während in einer Distanzmatrix das Gegenteil der Fall ist? (Ich vermute, ich vermisse etwas, könnten Sie bitte erklären?)
Tal Galili
@Tal Mein Verständnis ist, dass die dist-Funktion den euklidischen Abstand der ihr übergebenen Matrix berechnet, die in diesem Fall eine absolute Korrelationsmatrix war. Möglicherweise wäre eine wörtlichere Konvertierung aus der Korrelationsmatrix die Funktion as.dist (), die eine vorhandene Distanzmatrix verwendet: z. B. as.dist (1-abs (cor (na.omit (x))). siehe? dist
Jeromy Anglim
1
Die Verwendung einer 1-abs (cor ...) würde mir mehr Sinn machen :)
Tal Galili
@Tal Ja. Genau. Ich habe einen kurzen Blick darauf geworfen. In diesem Fall korreliert der Vektor der Abstände (Euklid von abs cor mit 1-abs cor) um 0,96, sodass es keinen großen Unterschied gibt.
Jeromy Anglim
1
@Tal the dist Option: Jede Variable hat einen Vektor absoluter Korrelationen. Variablen mit ähnlichen Vektoren hätten kleinere euklidische Abstände: en.wikipedia.org/wiki/Euklidische_Entfernung
Jeromy Anglim
2

Beim Clustering von Korrelationen ist es wichtig, den Abstand nicht zweimal zu berechnen. Wenn Sie die Korrelationsmatrix nehmen, führen Sie im Wesentlichen eine Entfernungsberechnung durch. Sie werden es in eine wahre Distanz umrechnen wollen, indem Sie 1 - den absoluten Wert - nehmen.

1-abs(cor(x))

Wenn Sie diese Matrix in ein Entfernungsobjekt konvertieren, nehmen Sie mit der dist-Funktion die Entfernungen zwischen Ihren Korrelationen. Stattdessen möchten Sie die as.dist()Funktion verwenden, mit der Ihre vorberechneten Entfernungen einfach in "dist"Objekte umgewandelt werden.

Anwenden dieser Methode auf das Alglim-Beispiel

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

führt zu einem anderen Dendroggramm Cluster-Dendrogramm

Justin Leiterman
quelle