Anális factorial exploratorio

El Análisis Factorial (AF) es un método multivariante que pretende expresar p variables observables como una combinación lineal de m variables hipotéticas o latentes, denominadas factores. Tiene una formulación parecida al Análisis de Componentes Principales, pero el modelo que relaciona variables y factores es diferente en AF. Si la matriz de correlaciones existe, las componentes principales también existen, mientras que el modelo factorial podrá ser aceptado o no mediante un test estadístico. Ejemplos en los que la variabilidad de las variables observables se puede resumir mediante unas variables latentes, que el AF identifica como factores, son:

Pasos para efectuar un análisis factorial

  • Verificar que la matriz de datos sea factorizable
  • Extraer los Factores
  • Determinar el número correcto de factores
  • Rotar los factores
  • Interpretar los resultados

En este documento trabajaremos con el conjunto de datos bfi de la librería psyh. Este conjunto de datos contiene 2800 observaciones con 28 variables, con 25 ítems de una prueba de personalidad.

Paso 1:Calcular la matriz de correlación policorica

library(psych)
library(polycor)
library(ggcorrplot)
bfi_s <- bfi[1:200,1:25] # subconjunto de datos
mat_cor <- hetcor(bfi_s)$correlations #matriz de correlación policorica
ggcorrplot(mat_cor,type="lower",hc.order = T)

Después de calcular la matriz de correlación, se puede verificar si la matriz de datos es factorizable por medio de la prueba de esfericidad de Bartlett, y la prueba de Kaiser-Meyer-Olkin.

Paso 1.1 Verificar que la matriz sea factorizable.

En este paso nos tenemos que preguntar si existe la suficiente correlación entre las variable para efectuar el análisis factorial.

  • Aplicamos la prueba de Bartlett que se utiliza para probar la hipótesis nula que afirma que las variables no están correlacionadas en la población.
cortest.bartlett(mat_cor)->p_esf
p_esf$p
## [1] 5.931663e-60

El resultado del p valor nos permite rechazar la hipótesis nula.

  • La otra prueba que podemos aplicar es el criterio de Kaiser-Meyer-Olkin. La prueba de Kaiser-Meyer-Olkin (KMO) es una medida de qué tan adecuados son sus datos para el análisis factorial . La prueba mide la adecuación del muestreo para cada variable en el modelo y para el modelo completo. La estadística es una medida de la proporción de varianza entre variables que podrían ser varianza común.

Como referencia, Kaiser puso los siguientes valores en los resultados:

  • 0.00 a 0.49 inaceptable.
  • 0.50 a 0.59 miserable.
  • 0,60 a 0,69 mediocre.
  • 0.70 a 0.79 medio.
  • 0,80 a 0,89 meritorio.
  • 0.90 a 1.00 maravilloso.
KMO(mat_cor)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_cor)
## Overall MSA =  0.76
## MSA for each item = 
##   A1   A2   A3   A4   A5   C1   C2   C3   C4   C5   E1   E2   E3   E4   E5 
## 0.66 0.77 0.69 0.73 0.75 0.74 0.79 0.76 0.76 0.74 0.80 0.81 0.79 0.81 0.83 
##   N1   N2   N3   N4   N5   O1   O2   O3   O4   O5 
## 0.70 0.67 0.82 0.79 0.82 0.79 0.65 0.81 0.62 0.77

El resultado es 0.76 lo que nos dice que podemos continuar con el análisis Factorial.

Paso 2: Escoger un método para extraer los factores.

Los métodos disponibles son: Componentes principales, Mínimos cuadrados no ponderados, Mínimos cuadrados generalizados, Máxima verosimilitud, factorización de Ejes principales, factorización Alfa y factorización Imagen.

  • Análisis de componentes principales. Método para la extracción de factores utilizada para formar combinaciones lineales no correlacionadas de las variables observadas. El primer componente tiene la varianza máxima. Las componentes sucesivas explican progresivamente proporciones menores de la varianza y no están correlacionadas unas con otras. El análisis principal de las componentes se utiliza para obtener la solución factorial inicial. No se puede utilizar cuando una matriz de correlaciones es singular.
  • Método de mínimos cuadrados no ponderados. Método de extracción de factores que minimiza la suma de los cuadrados de las diferencias entre las matrices de correlación observada y reproducida, ignorando las diagonales.
  • Método de Mínimos cuadrados generalizados. Método de extracción de factores que minimiza la suma de los cuadrados de las diferencias entre las matrices de correlación observada y reproducida. Las correlaciones se ponderan por el inverso de su exclusividad, de manera que las variables que tengan un valor alto de exclusividad reciban una ponderación menor que aquéllas que tengan un valor bajo de exclusividad.
  • Método de máxima verosimilitud. Método de extracción factorial que proporciona las estimaciones de los parámetros que con mayor probabilidad ha producido la matriz de correlaciones observada, si la muestra procede de una distribución normal multivariada. Las correlaciones se ponderan por el inverso de la exclusividad de las variables, y se emplea un algoritmo iterativo.
  • Factorización de ejes principales. Método para la extracción de factores que parte de la matriz de correlaciones original con los cuadrados de los coeficientes de correlación múltiple insertados en la diagonal principal como estimaciones iniciales de las comunalidades. Las cargas factoriales resultantes se utilizan para estimar de nuevo las comunalidades que reemplazan a las estimaciones previas de comunalidad en la diagonal. Las iteraciones continúan hasta que el cambio en las comunalidades, de una iteración a la siguiente, satisfaga el criterio de convergencia para la extracción. Alfa.
  • Método de extracción factorial que considera a las variables incluidas en el análisis como una muestra del universo de las variables posibles. Este método maximiza el Alfa de Cronbach para los factores.
  • Factorización imagen. Método para la extracción de factores, desarrollado por Guttman y basado en la teoría de las imágenes. La parte común de una variable, llamada la imagen parcial, se define como su regresión lineal sobre las restantes variables, en lugar de ser una función de los factores hipotéticos.

Con la función fa() podemos utilizar los métodos siguientes.

  • minres: minimo residuo
  • mle: maxima verosimilitud
  • paf: método de ejes principales
  • alpah: alfa
  • minchi: minimos cuadrados
  • minrak : rango minimo
### prueba de dos modelos con tres factores
modelo1<-fa(mat_cor,
           nfactors = 3,
           rotate = "none",
           fm="mle") # modelo máxima verosimilitud

modelo2<-fa(mat_cor,
           nfactors = 3,
           rotate = "none",
           fm="minres") # modelo minimo residuo
######comparando las comunalidades
sort(modelo1$communality,decreasing = T)->c1
sort(modelo2$communality,decreasing = T)->c2
head(cbind(c1,c2))
##           c1        c2
## N1 0.7576920 0.6809294
## E2 0.6802809 0.6564523
## N2 0.6797943 0.5866483
## E1 0.5219674 0.5394762
## N3 0.5198285 0.4942059
## N4 0.4839516 0.4744005
####comparacion de las unicidades 
sort(modelo1$uniquenesses,decreasing = T)->u1
sort(modelo2$uniquenesses,decreasing = T)->u2
head(cbind(u1,u2))
##           u1        u2
## O2 0.9460554 0.9293483
## A4 0.8928892 0.8908844
## A1 0.8607240 0.8822080
## O5 0.8533481 0.8272041
## C5 0.8136600 0.7931685
## O1 0.7986908 0.7904667

Paso 3: Determinar el número de factores

  • Kaiser Criterion (Guttman, 1954): esta regla sugiere que se deben retener todos los factores que tengan un eigenvalue de 1.0 o mayor; con el razonamiento de que un factor no debe explicar menos que la varianza equivalente que hubiera explicado una sola de las variables incluidas en el análisis. La regla sin embargo no es estricta y debe analizarse en conjunto con otros criterios.

  • Análisis del Scree Plot (Cattell, 1966): este método complementa al anterior y se basa también el análisis de la magnitud de los eigenvalues pero a partir de la tendencia que se observa en el Scree Plot. Se procuran seleccionar un grupo reducido de factores que tengan eigenvalues significativamente superiores a los demás, para lo cual se identifica el punto de inflexión en la curva del scree plot (también referido como el codo por su semejanza con un brazo) a partir del cual la curva se transforma a una línea “plana” o relativamente recta. En el ejemplo que se presenta hay un claro punto de inflexión después de dos factores.

  • Análisis paralelo (Horn, 1965): Esta regla suele complementar las anteriores cuando el numero de variables iniciales y factores resultantes es elevado. El procedimiento es basado en el principio de que los factores a extraer deben dar cuenta de mas varianza que la que es esperada de manera aleatoria. El procedimiento reordena las observaciones de manera aleatoria entre cada variable y los eigenvalues son recalculados a partir de esta nueva base de datos aleatoriamente ordenada. Los factores con eigenvalues mayores a los valores aleatorios son retenidos para interpretación.

scree(mat_cor)

fa.parallel(mat_cor,n.obs=200,fa="fa",fm="minres")

## Parallel analysis suggests that the number of factors =  5  and the number of components =  NA

EL análisis paralelo sugiere utilizar 5 factores.

Paso 4: Rotar la matriz

La obtención de la matriz factorial, no es mas que el primer paso del AF. Normalmente la matriz obtenida no define unos factores interpretables, Se han propuesto diferentes versiones sobre como transformar la matriz factorial a fin de obtener una estructura simple de los factores. Esencialmente se trata de conseguir que unas saturaciones sean altas a costa de otras, que serán bajas, para así destacar la influencia de los factores comunes sobre las variables observables. Existen dos formas básicas de realizar la Rotación de Factores , oblicuas y ortogonales. Se elige uno u otro procedimiento según que los factores rotados sigan siendo ortogonales o no. Señalar que en ambas rotaciones la comunalidad de cada variable no se modifica, esto es, la rotación no afecta a la bondad del ajuste de la solución factorial: aunque cambie la matriz factorial, las especificidades no cambian y, en consecuencia, las comunidades permanecen invariantes. Sin embargo, cambia la varianza explicada por cada factor, por tanto, los nuevos factores no están ordenados de acuerdo con la información que contienen, cuantificada mediante su varianza.

  • Varimax:Método de rotación ortogonal que minimiza el número de variables que tienen saturaciones altas en cada factor. Simplifica la interpretación de los factores.

  • Criterio Oblimin directo:Método para la rotación oblicua (no ortogonal). El método necesita un valor delta que servirá para ajustar los ejes en función de las saturaciones buscan una mejor aproximación, pero considerando que la varianza se distribuirá entre todos los factores.

  • Método quartimax: Método de rotación que minimiza el número de factores necesarios para explicar cada variable.

  • Método equamax:Método de rotación que es combinación del método varimax, que simplifica los factores, y el método quartimax, que simplifica las variables. Se minimiza tanto el número de variables que saturan alto en un factor como el número de factores necesarios para explicar una variable.

  • Rotación Promax: Rotación oblicua que permite que los factores estén correlacionados. Esta rotación se puede calcular más rápidamente que una rotación oblimin directa, por lo que es útil para conjuntos de datos grandes.

library()
#Rotaciones
library(GPArotation)
rot<-c("none", "varimax", "quartimax","Promax")
bi_mod<-function(tipo){
biplot.psych(fa(bfi_s,nfactors = 2,fm="minres",rotate = tipo),main = paste("Biplot con rotación ",tipo),col=c(2,3,4),pch = c(21,18),group = bfi[,"gender"])  
}
sapply(rot,bi_mod)

## $none
## NULL
## 
## $varimax
## NULL
## 
## $quartimax
## NULL
## 
## $Promax
## NULL

Paso 5: La interpretación

Esta es la parte mas difícil del análisis factorial para ayudar a la interpretación se puede hacer un gráfico de árbol.

modelo_varimax<-fa(mat_cor,nfactors = 5,rotate = "varimax",
              fa="minres")
fa.diagram(modelo_varimax)

Los factores pueden ser interprestados como:

MR4: Agradable (A1, A2, A3, A4, A5) MR3: Conciencia (C1, C2, C3, C4, C5) MR1: Extraversión (E1, E2, E3, E4, E5) MR2: Neuroticismo (N1, N2, N3, N4, N5) MR5: Apertura ( O1, O2, O3, O4, O5)

print(modelo_varimax$loadings,cut=0) 
## 
## Loadings:
##    MR1    MR2    MR4    MR3    MR5   
## A1  0.234  0.106 -0.422 -0.072 -0.092
## A2  0.112 -0.032  0.653  0.190  0.113
## A3  0.198  0.066  0.744  0.051  0.169
## A4  0.163 -0.048  0.413  0.137 -0.142
## A5  0.328 -0.154  0.692 -0.009  0.115
## C1  0.054  0.089  0.140  0.634  0.287
## C2  0.052  0.174  0.114  0.690  0.050
## C3  0.032  0.018  0.076  0.642  0.016
## C4 -0.058  0.087 -0.090 -0.559 -0.159
## C5 -0.241  0.228 -0.040 -0.459  0.014
## E1 -0.691 -0.006 -0.066 -0.084 -0.017
## E2 -0.713  0.345 -0.138 -0.133 -0.025
## E3  0.546  0.003  0.157 -0.008  0.221
## E4  0.522 -0.027  0.416  0.167  0.048
## E5  0.588 -0.009  0.148  0.308  0.159
## N1  0.131  0.802 -0.150 -0.074 -0.133
## N2  0.088  0.800 -0.151 -0.038 -0.008
## N3 -0.183  0.701  0.005  0.037 -0.087
## N4 -0.513  0.491 -0.006  0.004  0.034
## N5 -0.274  0.571  0.059  0.096 -0.082
## O1  0.203 -0.107  0.148  0.076  0.535
## O2 -0.099  0.096  0.144 -0.191 -0.330
## O3  0.326 -0.159  0.034  0.062  0.680
## O4 -0.240  0.122  0.169  0.105  0.548
## O5 -0.004  0.061 -0.074 -0.077 -0.636
## 
##                  MR1   MR2   MR4   MR3   MR5
## SS loadings    2.823 2.667 2.223 2.103 1.867
## Proportion Var 0.113 0.107 0.089 0.084 0.075
## Cumulative Var 0.113 0.220 0.309 0.393 0.467

Ejemplo tomado del libro de cuadras

Las asignaturas clásicas de la enseæanza media, se dividen, en lneas generales, en asignaturas de Ciencias y de Letras, las primeras con contenido más racional y emprico, las segundas con contenido más humanstico y artístico. Consideremos las siguientes 5 asignaturas: ciencias naturales,matematicas,latin y frances.

datos<-read.csv("estudiantes.csv")
datos_f<-datos[,-1]
mat_cor<-cor(datos_f)
ggcorrplot(mat_cor,hc.order = T,type="lower")

KMO(mat_cor)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = mat_cor)
## Overall MSA =  0.67
## MSA for each item = 
##    ciencias matematicas     frances       latin  literatura 
##        0.65        0.42        0.63        0.76        0.81
cortest.bartlett(mat_cor,n = nrow(datos))$p
## [1] 3.164023e-09
scree(mat_cor)

modelo<-fa(datos_f,rotate = "varimax",nfactors = 2,fm="minres")
fa.diagram(modelo)

print(modelo$loadings,cut=0)
## 
## Loadings:
##             MR1   MR2  
## ciencias    0.438 0.640
## matematicas 0.039 0.997
## frances     0.974 0.073
## latin       0.814 0.173
## literatura  0.861 0.297
## 
##                  MR1   MR2
## SS loadings    2.546 1.527
## Proportion Var 0.509 0.305
## Cumulative Var 0.509 0.815
modelo$uniquenesses
##    ciencias matematicas     frances       latin  literatura 
## 0.398973792 0.004166179 0.046075726 0.307011837 0.171233976
modelo$communalities
##    ciencias matematicas     frances       latin  literatura 
##   0.6009843   0.9950000   0.9539002   0.6929323   0.8287368

Los factores latentes son ciencias y Letras. de esta forma MR2 es Ciencias MR1 es letras.