Clustering delle variabili in base alle correlazioni tra di loro


23

Domande:

  1. Ho una grande matrice di correlazione. Invece di raggruppare singole correlazioni, voglio raggruppare le variabili in base alle loro correlazioni reciproche, vale a dire se la variabile A e la variabile B hanno correlazioni simili alle variabili da C a Z, allora A e B dovrebbero far parte dello stesso cluster. Un buon esempio di ciò nella vita reale sono le diverse classi di attività: le correlazioni intra-classe sono più alte delle correlazioni tra classi di attività.

  2. Sto anche prendendo in considerazione il raggruppamento di variabili in termini di relazione tra loro, ad esempio quando la correlazione tra le variabili A e B è vicina a 0, agiscono in modo più o meno indipendente. Se improvvisamente alcune condizioni sottostanti cambiano e sorge una forte correlazione (positiva o negativa), possiamo pensare a queste due variabili come appartenenti allo stesso cluster. Quindi, invece di cercare una correlazione positiva, si cercherebbe una relazione anziché una relazione. Immagino che un'analogia possa essere un ammasso di particelle caricate positivamente e negativamente. Se la carica scende a 0, la particella si allontana dal cluster. Tuttavia, sia le cariche positive che quelle negative attraggono le particelle nei gruppi rivelatori.

Mi scuso se un po 'di questo non è molto chiaro. Per favore fatemi sapere, chiarirò i dettagli specifici.


1
L'analisi fattoriale non farebbe il lavoro per qn 1? La domanda 2 è un po 'vaga. 'Relazione' sembra un sinonimo di 'correlazione' o almeno una forma di relazione è la relazione lineare e la correlazione lo cattura. Forse, è necessario chiarire qn 2.

Hai dichiarato cosa vuoi fare. Qual è la tua domanda? Riguarda l'implementazione o se il tuo approccio di analisi è appropriato? o qualcos'altro?
Jeromy Anglim,

Risposte:


14

Ecco un semplice esempio in R usando il bfiset di dati: bfi è un set di dati di 25 elementi di test della personalità organizzati attorno a 5 fattori.

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

In questo modo è possibile ottenere un'analisi del cluster hiearchical utilizzando la distanza dell'euclidan tra le variabili in base alla correlazione assoluta tra le variabili:

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

testo alternativo Il dendrogramma mostra come gli oggetti generalmente si raggruppano con altri oggetti in base a raggruppamenti teorizzati (ad esempio, gli elementi N (nevroticismo) raggruppano insieme). Mostra anche come alcuni elementi all'interno dei cluster siano più simili (ad esempio, C5 e C1 potrebbero essere più simili di C5 con C3). Suggerisce inoltre che il cluster N è meno simile agli altri cluster.

In alternativa è possibile eseguire un'analisi fattoriale standard in questo modo:

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
Ciao Jeromy. D: cosa significa prendere la dist di abs (cor (...))? Una matrice del cuore non è quella in cui un numero maggiore indica più di una relazione, mentre in una matrice della distanza è vero il contrario? (Sospetto che mi manchi qualcosa, potresti spiegarmi per favore?)
Tal Galili,

@Tal La mia comprensione è che la funzione dist prende la distanza euclidea della matrice passata ad essa, che in questo caso era una matrice di correlazione assoluta. Forse, una conversione più letterale dalla matrice di correlazione sarebbe la funzione as.dist () che accetta una matrice di distanza esistente: ad es. As.dist (1-abs (cor (na.omit (x)))). vedi? dist
Jeromy Anglim,

1
usare un 1-abs (cor ...) avrebbe più senso per me :)
Tal Galili,

@Tal Sì. Sono d'accordo. Ho dato una rapida occhiata. In questo caso il vettore delle distanze (euclidee di addominali addominali con 1 addominali addominali) correla intorno a .96, quindi non fa molta differenza.
Jeromy Anglim,

1
@Tal l'opzione dist: ogni variabile ha un vettore di correlazioni assolute. Le variabili con vettori più simili avrebbero distanze euclidee minori: en.wikipedia.org/wiki/Euclidean_distance
Jeromy Anglim

2

Quando si raggruppano le correlazioni è importante non calcolare la distanza due volte. Quando prendi la matrice di correlazione stai essenzialmente facendo un calcolo della distanza. Ti consigliamo di convertirlo in una vera distanza prendendo 1 - il valore assoluto.

1-abs(cor(x))

Quando vai a convertire questa matrice in un oggetto distanza, se utilizzi la funzione dist prenderai le distanze tra le tue correlazioni. Invece vuoi usare la as.dist()funzione che trasformerà semplicemente le tue distanze precalcolate in a in un "dist"oggetto.

Applicando questo metodo all'esempio Alglim

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

risulta in un dendroggram diverso Dendrogramma a grappolo

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.