Capítulo 14 Análisis factorial

14.1 Variables Latentes

En muchas ocasiones los datos multivariados son vistos como mediciones indirectas provenientes de una fuente subyacente que típicamente no puede ser medida directamente.

Por ejemplo:

  • Tests psicológicos y pedagógicos se usan como una forma de medir la inteligencia u otras habilidades mentales.

  • Los electroencefalogramas miden la actividad cerebral de forma indirecta usando señales electromagnéticas grabadas por sensores colocados en diferentes partes de la cabeza.

  • Los precios de las acciones en el mercado financiero reflejan factores no medidos como la confianza en el mercado o influencias externas que serían dificiles de medir o identificar.

El análisis factorial es una herramienta que permite identificar las fuentes latentes subyacentes a un conjunto de datos.

14.2 Solución factorial

La descomposición en valores singulares (13.1) tiene una representación en variables latentes.

Escribiendo \(S = \sqrt{N}U\), \(A^T = \frac{DV^T}{\sqrt{N}}\), tenemos \[X = SA^T\]

Y por tanto cada columna de \(X\) es una combinación lineal de las columnas de \(S\).

Dado que \(U\) es una matriz ortogonal y asumiendo que las columnas de \(X\) (y de \(U\)) tienen media cero tenemos que las columnas de \(S\) también tienen media cero, no están correlacionadas y tienen varianza unitaria.

En términos de variables aleatorias podemos interpretar a los componentes principales como una estimación del modelo de variables latentes:

\[X_1 = a_{11}S_1+a_{12}S_2+\dots +a_{1p}S_p\] \[X_2 = a_{21}S_1+a_{22}S_2+\dots +a_{2p}S_p\] \[\vdots\] \[X_p = a_{p1}S_1+a_{p2}S_2+\dots +a_{pp}S_p\]

o simplemente \(X = AS\).

Las variables \(X_j\), que están correlacionadas son representadas como una expasión lineal de las variables \(S_l\), no correlacionadas y de varianza unitaria.

Sin embargo, esto no es demasiado satisfactorio puesto que dada cualquier matriz ortogonal de \(p\times p\) en \(\mathbb{R}\) podemos escribir:

\[X = AS\] \[X = AR^TRS\] \[X = A^*S^*\]

Y \(Cov(S^*) = R Cov(S)R^T = I\)

Por lo tanto ha una infinidad de tales descomposiciones haciendo imposible identificar las variables latentes como fuentes subyacentes únicas.

El modelo clásico de factores resuelve este problema escribiendo el modelo como \(X = AS+\epsilon\). Donde \(A\) es la matriz de pesos de los factores, \(S\) un vector de \(q\) variables latentes y \(\epsilon_j\) son errores no correlacionados de media cero.

Comúnmente tanto \(S_j\) y \(\epsilon_j\) se modelan como variables aleatorias normales y el modelo factoria se ajusta por máxima verosimilitud.

Los parámetros dependen de la matriz de covarianzas

\[\Sigma = AA^T+D_{\epsilon}\]

Donde \(D_{\epsilon} = diag[Var(\epsilon_1),\dots , Var(\epsilon_p)]\).

Y dado que \(S_j\) son variables normales no correlacionadas entonces son variables aleatorias independientes.

La presencia de los errores \(\epsilon_j\) hace que el análisis de factores pueda verse como un modelo de la estructura de correlación de \(X_j\) en lugar de la estructura de covarianza (la usada en el análisis de componentes principales).

14.3 Rotaciones de factores

Como se menciona anteriormente las soluciones al modelo factorial podrían no ser únicas para encontrar la unicidad se introducen restricciones meramente arbitrarias.

Diferentes tipos de restricciones derivan en soluciones distintas al modelo.

Al proceso de cambiar de una solución a otra se le llama rotación y proviene de la representación geométrica del procedimiento.

La razón principal para rotar una solución es dar claridad a las cargas factoriales. Si la solución inicial es confusa una rotación puede proporcionar una estructura más fácil de interpretar.

14.3.1 Rotaciones ortogonales

Uno de los patrones de cargas factoriales más usuales y de hecho más deseables es la llamada estructura simple de pesos factoriales.

Se dice que los pesps factoriales presentan una estructura simple si cada variable tiene un gran peso en un solo factor, con pesos cercanos a cero en el resto de los factores.

Una de las rotaciones que procura generar una estructura de pesos simple son las rotaciones ortogonales (los nuevos ejes después de la rotación siguen siendo ortogonales).

14.3.2 Rotaciones oblicuas

Contrario a las rotaciones ortogonales, las rotaciones oblicuas permiten relajar la restricción de ortogonalidad con el fin de ganar simplicidad en la interpretación de los factores.

Con este método los factores resultan correlacionados, aunque generalmente esta correlación es pequeña.

El uso de rotaciones oblicuas se justifica porque en muchos contextos es lógico suponer que los factores están correlacionados.

14.4 Análisis factorial en R

Usando datos de gastos en hogares buscaremos identificar, a través de un análisis factorial, grupos de gastos generales.

library(psych)
library(GPArotation)

gastos <- read.csv("example_data/pob2.csv", sep = "\t")
str(gastos)
## 'data.frame':	19479 obs. of  59 variables:
##  $ folioviv  : num  1e+08 1e+08 1e+08 1e+08 1e+08 ...
##  $ foliohog  : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ ubica_geo : int  10010001 10010001 10010001 10010001 10010001 10010001 10010001 10010001 10010001 10010001 ...
##  $ tam_loc   : int  1 1 1 1 1 1 1 1 1 1 ...
##  $ est_socio : int  4 4 4 4 4 4 4 4 4 3 ...
##  $ clase_hog : int  3 1 2 3 2 3 2 2 2 3 ...
##  $ sexo_jefe : int  2 1 1 1 1 1 1 1 1 1 ...
##  $ edad_jefe : int  77 64 60 79 72 67 58 50 56 44 ...
##  $ educa_jefe: int  8 6 8 10 10 10 8 11 6 9 ...
##  $ tot_integ : int  2 1 3 3 3 4 3 4 4 7 ...
##  $ hombres   : int  1 1 1 3 2 1 2 3 1 4 ...
##  $ mujeres   : int  1 0 2 0 1 3 1 1 3 3 ...
##  $ mayores   : int  2 1 3 3 3 4 3 4 4 6 ...
##  $ menores   : int  0 0 0 0 0 0 0 0 0 1 ...
##  $ p12_64    : int  0 1 3 2 1 2 3 4 4 5 ...
##  $ p65mas    : int  2 0 0 1 2 2 0 0 0 1 ...
##  $ ocupados  : int  0 0 2 2 1 1 2 1 4 4 ...
##  $ ing_cor   : num  39787 19524 101214 87884 86261 ...
##  $ cereales  : num  681 231 591 1646 1491 ...
##  $ carnes    : num  51.4 0 3529.3 64.3 4382.9 ...
##  $ pescado   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ leche     : num  759 424 1286 1144 759 ...
##  $ huevo     : num  141 0 347 283 386 ...
##  $ aceites   : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ tuberculo : num  0 0 103 0 129 ...
##  $ verduras  : num  283 0 707 810 746 ...
##  $ frutas    : num  1620 579 476 1260 698 ...
##  $ azucar    : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ cafe      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ especias  : num  0 0 0 0 0 ...
##  $ otros_alim: num  7637 0 5413 3471 2571 ...
##  $ bebidas   : num  0 0 2301 0 1067 ...
##  $ ali_fuera : num  0 707 2006 0 643 ...
##  $ tabaco    : num  0 0 0 0 0 ...
##  $ vestido   : num  0 0 489 293 0 ...
##  $ calzado   : num  401 0 0 0 0 ...
##  $ alquiler  : num  0 0 0 0 0 ...
##  $ pred_cons : num  505 0 138 125 212 ...
##  $ agua      : num  294 0 600 300 900 ...
##  $ energia   : num  1400 0 2252 675 1950 ...
##  $ limpieza  : num  1003 212 1866 2879 0 ...
##  $ cuidados  : num  514 212 1632 2860 0 ...
##  $ utensilios: num  0 0 234.8 19.6 0 ...
##  $ enseres   : num  489 0 0 0 0 ...
##  $ atenc_ambu: num  1370 0 1125 421 0 ...
##  $ hospital  : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ medicinas : num  32.3 117.4 117.4 0 0 ...
##  $ publico   : num  0 0 386 0 0 ...
##  $ foraneo   : num  0 0 0 0 0 ...
##  $ adqui_vehi: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ mantenim  : num  4381 0 2903 0 5806 ...
##  $ refaccion : num  1957 0 0 0 0 ...
##  $ combus    : num  2424 0 2903 0 5806 ...
##  $ comunica  : num  1110 0 2540 1440 1200 ...
##  $ educacion : num  0 0 0 3019 0 ...
##  $ esparci   : num  900 0 0 0 1050 ...
##  $ paq_turist: num  0 0 0 0 0 0 0 0 0 0 ...
##  $ cuida_pers: num  438.4 203.2 1622.9 847.7 95.8 ...
##  $ acces_pers: num  0 0 0 0 0 ...

Trabajaremos solamente con la información relacionada a gastos.

gastos <- gastos[,19:59]
factores <- fa(gastos, nfactors = 4, rotate = "oblimin")
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## In smc, smcs < 0 were set to .0
## In factor.scores, the correlation matrix is singular, an approximation is used
autoplot(abs(factores$loadings[,1:4]))
## Scale for 'y' is already present. Adding another scale for 'y', which
## will replace the existing scale.

Ejercicios:

  1. ¿Considera que los factores son buenos?

  2. ¿Qué problema encuentra en los datos que puedan causar una mala optimización en la búsqueda de los factores?

  3. Analize detalladamente los datos y proponga alguna solución si es que considera que hay problemas en los datos.

  4. Vuelva aplicar el análisis factorial.

  5. ¿Cómo interpretaría los factores?