Agrupación de variables basadas en correlaciones entre ellas

23

Preguntas:

  1. Tengo una gran matriz de correlación. En lugar de agrupar correlaciones individuales, quiero agrupar variables basadas en sus correlaciones entre sí, es decir, si la variable A y la variable B tienen correlaciones similares a las variables C a Z, entonces A y B deberían ser parte del mismo grupo. Un buen ejemplo de esto en la vida real son las diferentes clases de activos: las correlaciones intraclase son más altas que las correlaciones entre clases de activos.

  2. También estoy considerando agrupar variables en términos de relación de resistencia entre ellas, por ejemplo, cuando la correlación entre las variables A y B es cercana a 0, actúan de manera más o menos independiente. Si de repente algunas condiciones subyacentes cambian y surge una fuerte correlación (positiva o negativa), podemos pensar que estas dos variables pertenecen al mismo grupo. Entonces, en lugar de buscar una correlación positiva, uno buscaría relación versus no relación. Supongo que una analogía podría ser un grupo de partículas cargadas positiva y negativamente. Si la carga cae a 0, la partícula se aleja del grupo. Sin embargo, tanto las cargas positivas como negativas atraen partículas a grupos reveladores.

Pido disculpas si algo de esto no está muy claro. Por favor, hágamelo saber, aclararé detalles específicos.

Eduardas
fuente
1
¿El análisis factorial no haría el trabajo para qn 1? La pregunta 2 es un poco vaga. "Relación" parece un sinónimo de "correlación" o al menos una forma de relación es relación lineal y la correlación captura eso. Tal vez, necesite aclarar qn 2.
Has dicho lo que quieres hacer. ¿Cuál es tu pregunta? ¿Se trata de implementación o si su enfoque de análisis es apropiado? ¿o algo mas?
Jeromy Anglim

Respuestas:

14

Aquí hay un ejemplo simple en R usando el bficonjunto de datos: bfi es un conjunto de datos de 25 elementos de prueba de personalidad organizados en torno a 5 factores.

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

Un análisis de agrupamiento jerárquico utilizando la distancia euclidan entre variables basado en la correlación absoluta entre variables puede obtenerse así:

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

texto alternativo El dendrograma muestra cómo los elementos generalmente se agrupan con otros elementos de acuerdo con agrupaciones teorizadas (p. Ej., N (Neuroticismo) se agrupan). También muestra cómo algunos elementos dentro de los grupos son más similares (por ejemplo, C5 y C1 podrían ser más similares que C5 con C3). También sugiere que el grupo N es menos similar a otros grupos.

Alternativamente, podría hacer un análisis factorial estándar como este:

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
fuente
1
Hola jeromy P: ¿qué significa tomar el dist de abs (cor (...))? ¿No es una matriz cor una en la que un número mayor indica más de una relación, mientras que en una matriz de distancia ocurre lo contrario? (Sospecho que me falta algo, ¿podría explicarlo?)
Tal Galili
@Tal Entiendo que la función dist toma la distancia euclidiana de la matriz que se le pasó, que en este caso era una matriz de correlación absoluta. Quizás, una conversión más literal de la matriz de correlación sería la función as.dist () que toma una matriz de distancia existente: por ejemplo, as.dist (1-abs (cor (na.omit (x)))). see? dist
Jeromy Anglim
1
usar 1-abs (cor ...) tendría más sentido para mí :)
Tal Galili
@Tal Sí. Estoy de acuerdo. Eché un vistazo rápido. En este caso, el vector de distancias (euclidiana de abs cor con 1-abs cor) se correlaciona alrededor de .96, por lo que no hace mucha diferencia.
Jeromy Anglim
1
@Tal la opción dist: cada variable tiene un vector de correlaciones absolutas. Las variables con vectores más similares tendrían distancias euclidianas más pequeñas: en.wikipedia.org/wiki/Euclidean_distance
Jeromy Anglim
2

Cuando se agrupan correlaciones, es importante no calcular la distancia dos veces. Cuando tomas la matriz de correlación, en esencia estás haciendo un cálculo de distancia. Deberá convertirlo a una distancia real tomando 1, el valor absoluto.

1-abs(cor(x))

Cuando vaya a convertir esta matriz en un objeto de distancia, si utiliza la función dist, tomará las distancias entre sus correlaciones. En su lugar, desea utilizar la as.dist()función que simplemente transformará sus distancias precalculadas en un "dist"objeto.

Aplicando este método al ejemplo de Alglim

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

da como resultado un dendroggrama diferente Dendrograma de racimo

Justin Leiterman
fuente