Licencia:
Definiciones y antecedentes:
El Análisis Factorial es un nombre genérico que se da a una clase de métodos estadísticos multivariantes cuyo propósito principal es definir la estructura subyacente en una matriz de datos. Generalmente hablando, aborda el problema de cómo analizar la estructura de las interrelaciones (correlaciones) entre un gran número de variables (por ejemplo, un conjunto de variables socio económicas o ambientales para estratificar grupos de individuos, compilar en un solo índice diferentes variables de cualquier tipo, resumir las respuestas de cuestionarios, etc.) con la definición de una serie de dimensiones subyacentes comunes, conocidas como factores.
Objetivos del análisis factorial
El punto inicial del análisis factorial, es encontrar los factores para condensar (resumir) la informadción contenida en una serie de variables originales en una serie más pequeña de dimensiones compuestas o valores teóricos (factores) nuevos con una mínima pérdida de información. La técnica del análisis factorial puede satisfacer cualquiera de los siguientes objetivos:
La identificación de la estructura estadística para poder excluir las variables que no aportan en la variabilidad, o
La reducción de datos.
El diseño de un análisis factorial
El siguiente paso deberá ser el análisis de la matriz de correlaciones el mismo que nos indicará la existencia o no de multicolinealidad. Es lógico de suponer que en el caso de que las variables presenten correlaciones extremadamente bajas no es recomendable aplicar un AF.
Y es importante mencionar que existen otras medidas de identificación si es aplicable o no un AF, sin embaro el modelo teórico de un AF se basa en la matriz de correlaciones o covarianzas, razón por la cual es el estimador más fuerte que existe.
Es importante mencionar que el AF tipo Factor se basa en las intercorrelaciones entre las variables, mientras que el AF tipo Clúster se basa en una medida de similitud definida por la distancia entre las puntuaciones de los encuestados sobre las variables analizadas.
Supuestos del Análisis Factorial
Los supuestos básicos subyacentes del análisis factorial son más de tipo conceptual que estadístico. Desde este punto de vista, se pueden obviar los supuestos de normalidad y homoscedasticidad, siendo conscientes de que su incumplimiento produce una disminución en las correlaciones observadas. En realidad, sólo es necesaria la normalidad cuando se aplica una prueba estadística a la significancia de los factores; sin embargo, raramente se utilizan estas pruebas. De hecho es deseable que haya cierto grado de multicolinealidad.
Si la inspección visual revela que no hay un número sustancial de correlaciones mayores que 0.30 entonces el AF es probablemente inapropiado
Ahora bien es el momento de hablar de otras medidas que nos permitirán identificar si es viable o no aplicar un AF en nuestra matriz de datos:
Test de Bartlett, la misma que es una prueba estadística para homogeneidad de varianzas, y para la aplicación en un AF es decir proporciona la probabilidad estadística de que la matriz de correlación de las variables sea una matriz identidad.
Medida de suficiencia o adecuación de la muestra (MSA o KMO)
Este índice se extiende de 0 a 1, llegando a 1 cuando cada variable es perfectamente predicha sin error por las otras variables.
Fórmula de cálculo:
\[\begin{equation*} KMO=\frac{{\sum_{i≠j}^{n}{r_{ij}^2}}}{{\sum_{i≠j}^{n}{r_{ij}^2}}+{\sum_{i≠j}^{n}{diag}^2}} \end{equation*}\]La medida puede ser interpretada con las siguientes directrices:
SUGERENCIA: El MSA o KMO aumenta conforme:
La estimación de los factores y la valoración del ajuste general. Para lo cual nuevamente procederemos con el ejercicio de las calificaciones de un grupo de 20 estudiantes que presentan sus puntajes en la siguiente matriz:
library(openxlsx) #Librería que interactúa con MSExcel
library(corrplot) #Librería para el gráfico de correlaciones
library(corrr) #Otra opción de librería para el cálculo y gráfico de correlaciones
## Loading required package: dplyr
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
estudiantes<-read.xlsx(xlsxFile='/opt/ProyectosR/TEST DE HIPÓTESIS/NOTAS_ESTUDIANTES.xlsx',
sheet = 'Sheet1') # Lectura de la BDD de acuerdo a su ubicación
estudiantes #Visualización de la tabla
## CienciasNaturales Matematicas Geografia Literatura Fisica
## 1 7 7 5 5 6
## 2 5 5 6 6 5
## 3 5 6 5 7 5
## 4 6 8 5 6 6
## 5 7 6 6 7 6
## 6 4 4 6 7 6
## 7 5 5 5 5 6
## 8 5 6 5 5 5
## 9 6 5 7 6 6
## 10 6 5 6 6 6
## 11 6 7 5 6 5
## 12 5 5 4 5 4
## 13 6 6 6 6 5
## 14 8 7 8 8 8
## 15 6 7 5 6 6
## 16 4 3 4 4 4
## 17 6 4 7 8 7
## 18 6 6 7 7 7
## 19 6 5 4 4 4
## 20 7 7 6 7 6
matriz_correlaciones <- cor(estudiantes, use = "pairwise.complete.obs")
matriz_correlaciones
## CienciasNaturales Matematicas Geografia Literatura
## CienciasNaturales 1.0000000 0.65614980 0.49706742 0.4203412
## Matematicas 0.6561498 1.00000000 0.09908375 0.2295101
## Geografia 0.4970674 0.09908375 1.00000000 0.8133904
## Literatura 0.4203412 0.22951010 0.81339038 1.0000000
## Fisica 0.5839847 0.31711567 0.84081035 0.7662285
## Fisica
## CienciasNaturales 0.5839847
## Matematicas 0.3171157
## Geografia 0.8408104
## Literatura 0.7662285
## Fisica 1.0000000
corrplot(cor(estudiantes), order = "hclust", tl.col='black', tl.cex=1) #Gráfico de las correlaciones
estudiantes_correlaciones <- correlate(estudiantes) #Cálculo de un objeto de correlaciones
rplot(estudiantes_correlaciones, legend = TRUE, colours = c("firebrick1", "black",
"darkcyan"), print_cor = TRUE) #Opción gráfica de las correlaciones
PROCESO DEL ANÁLISIS FACTORIAL:
Aquí vamos a empezar con las pruebas estadísticas antes de empezar con el AF:
# Se puede conocere la presencia de multicolinealidad al evaluar la
# Determinante de la matriz de correlaciones de las variables ingresadas al
# estudio:
det(matriz_correlaciones)
## [1] 0.02585506
EXPLICACIÓN:
Un determinante bajo, es decir, cercano a 0, indica alta multicolinealidad entre las variables. De ser igual a cero (matriz no singular), esto indicaría que algunas de las variables son linealmente dependientes y no se podrían realizar ciertos cálculos necesarios para los procedimientos multivariados. En este caso observamos que es muy cercano a 0, lo que sugiere un alto nivel de colinealidad en el conjunto de variables involucradas en la matriz.
#Por consiguiente vamos a ubicar el cálculo de los estimadores del Test de Bartlett y el MSA(KMO):
bartlett.test(estudiantes)
##
## Bartlett test of homogeneity of variances
##
## data: estudiantes
## Bartlett's K-squared = 1.1957, df = 4, p-value = 0.8788
Ahora bien la explicación del Test de Bartlett es muy similar a la prueba Chi Cuadrado, es decir a valores pequeños de K-squared expresa que existe una homogeneidad en las varianzas y por lo consiguiente existen un buen número de correlaciones positivas entre las variables y el p-valor y se puede corroborarlo fijando un H0: Las varianzas son homogéneas (correlaciones aceptables), con un alfa=0.05. Otra explicación es que dicho test proporciona la probabilidad de que la matriz de correlación de las variables sea una matriz identidad
NOTA IMPORTANTE: Las variables que intervienen para el cálculo del Test de Bartlett son provenientes de una distribución Chi Cuadrado
# Test MSA o KMO:
library(psych)
KMO(estudiantes)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = estudiantes)
## Overall MSA = 0.67
## MSA for each item =
## CienciasNaturales Matematicas Geografia Literatura
## 0.65 0.42 0.63 0.76
## Fisica
## 0.81
La medida de adecuación de la muestra MSA o KMO (Kaiser-Meyer-Olkin) contrasta si las correlaciones parciales entre las variables son suficientemente pequeñas. El estadístico KMO varía entre 0 y 1. Los valores pequeños indican que el análisis factorial puede no ser una buena idea, dado que las correlaciones entre los pares de variables no pueden ser explicadas por otras variables. Los menores que 0.5 indican que no debe utilizarse el AF con la matriz de datos que se están analizando
Popularmente para el AF existe la librería stats que es propia del R Base:
library(stats) #Librería del sistema base
# Por consiguiente vamos a ubicar el cálculo de los estimadores del Test de
# Bartlett y el MSA(KMO)
Continuando con el Cuarto Paso procedemos a calcular los factores, con la librería stats:
factanal(estudiantes, factors = 2, rotation = "none")
##
## Call:
## factanal(x = estudiantes, factors = 2, rotation = "none")
##
## Uniquenesses:
## CienciasNaturales Matematicas Geografia Literatura
## 0.378 0.005 0.040 0.291
## Fisica
## 0.205
##
## Loadings:
## Factor1 Factor2
## CienciasNaturales 0.415 0.670
## Matematicas 0.997
## Geografia 0.971 0.128
## Literatura 0.803 0.254
## Fisica 0.823 0.343
##
## Factor1 Factor2
## SS loadings 2.439 1.642
## Proportion Var 0.488 0.328
## Cumulative Var 0.488 0.816
##
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 1.23 on 1 degree of freedom.
## The p-value is 0.268
NOTA IMPORTANTE: Para la elección de los factores propios de un AF bastará con seleccionar 2, y a partir de este número hacer las pruebas necesarias de acuerdo al Prueba Chi Cuadrado que me arroja el output, debido a que esta prueba estadística me determinará si son suficientes o no el número de factores.
INTERPRETACIÓN:
UNICIDAD (Uniquenesses): Es el porcentaje de varianza que no ha sido explicada por el Factor y es igual a: 1 - Comunalidad.
COMUNALIDAD (Loadings-Saturaciones): Porcentaje de la variabilidad de la variable explicada por ese Factor.
FACTOR1 - FACTOR2: Algebraicamente, un factor se estima mediante una combinación lineal de variables observadas. Cuando se encuentran los factores de “mejor ajuste”, debe recordarse que estos factores no son únicos. Se puede demostrar que cualquier rotación de los factores que mejor se ajuste es también el mejor factor. La rotación de factores se utiliza para ajustar la varianza que explicará el Factor.
Si todos los factores explican conjuntamente un gran porcentaje de varianza en una variable dada, esa variable tiene una alta comunalidad (y por lo tanto una singularidad baja)
SS loadings: La saturación acumulada
Proportion Var: Proporción de la varianza
Cumulative Var: Varianza acumulada
Ahora es importante saber que existen puntuaciones o pesos que son considerados como las saturaciones por cada observación de las variables ingresadas al cálculo del AF:
factanal(estudiantes, factors = 2, rotation = "none", scores = "regression")$scores
## Factor1 Factor2
## 1 -0.6281017 1.0173812
## 2 0.2825014 -0.5540238
## 3 -0.5145680 0.2173476
## 4 -0.7388028 1.7945847
## 5 0.4032198 0.2572924
## 6 0.6035467 -1.3332075
## 7 -0.3923261 -0.5643958
## 8 -0.6707361 0.2098259
## 9 1.1648405 -0.5228020
## 10 0.4430236 -0.5373570
## 11 -0.7105398 1.0044752
## 12 -1.3642900 -0.5948386
## 13 0.1646136 0.2368647
## 14 2.0571969 1.0969395
## 15 -0.5854663 1.0124191
## 16 -1.1711497 -2.1716535
## 17 1.5994186 -1.2895019
## 18 1.2146615 0.2710683
## 19 -1.4069253 -0.5898765
## 20 0.2498833 1.0394579
EXPLICACIÓN: Y son estos valores que podrán tomarse como el peso para el cálculo de un índice que explica por cada i-ésima fila la variabilidad de todo el conjunto de datos, pero necesamiente tendrán que ser normalizados con la siguiente fórmula:
\[\begin{equation*} Normalización=\frac{X_{ij}-X_{min}}{X_{max}-X_{min}} \end{equation*}\]puntuaciones <- factanal(estudiantes, factors = 2, rotation = "none", scores = "regression")$scores
estudiantes <- cbind(estudiantes, puntuaciones)
estudiantes$Factor1 <- round(((estudiantes$Factor1 - min(estudiantes$Factor1))/(max(estudiantes$Factor1) -
min(estudiantes$Factor1))), 2)
estudiantes
## CienciasNaturales Matematicas Geografia Literatura Fisica Factor1
## 1 7 7 5 5 6 0.22
## 2 5 5 6 6 5 0.49
## 3 5 6 5 7 5 0.26
## 4 6 8 5 6 6 0.19
## 5 7 6 6 7 6 0.52
## 6 4 4 6 7 6 0.58
## 7 5 5 5 5 6 0.29
## 8 5 6 5 5 5 0.21
## 9 6 5 7 6 6 0.74
## 10 6 5 6 6 6 0.53
## 11 6 7 5 6 5 0.20
## 12 5 5 4 5 4 0.01
## 13 6 6 6 6 5 0.45
## 14 8 7 8 8 8 1.00
## 15 6 7 5 6 6 0.24
## 16 4 3 4 4 4 0.07
## 17 6 4 7 8 7 0.87
## 18 6 6 7 7 7 0.76
## 19 6 5 4 4 4 0.00
## 20 7 7 6 7 6 0.48
## Factor2
## 1 1.0173812
## 2 -0.5540238
## 3 0.2173476
## 4 1.7945847
## 5 0.2572924
## 6 -1.3332075
## 7 -0.5643958
## 8 0.2098259
## 9 -0.5228020
## 10 -0.5373570
## 11 1.0044752
## 12 -0.5948386
## 13 0.2368647
## 14 1.0969395
## 15 1.0124191
## 16 -2.1716535
## 17 -1.2895019
## 18 0.2710683
## 19 -0.5898765
## 20 1.0394579
hist(estudiantes$Factor1, freq = TRUE, main = "Gráfico de la Distribución del Factor 1",
xlab = "Factor 1", ylab = "Frecuencia", col = "#009ACD")
Calcular la matriz inicial de factores no rotados para que nos dé una indicación preliminar acerca del número de factores a extraer. La matriz de factores contiene las cargas factoriales para cada variable sobre cada factor. Considerando que matriz de factores no ha sido aún rotada, el investigador deberá estar interesado en la mejor combinación lineal de variables, es decir, en encontrar aquella combinación particular de las variables originales que cuenta con el mayor porcentaje de varianza de los datos. En consecuencia, el primer factor puede contemplarse como el mejor resumen de las relaciones lineales que los datos manifiestan. El segundo factor se define com la segunda mejor combinación lineal de las variables, los factores subsiguientes se definen de forma análoga hasta haber agotado la varianza de los datos.
NOTA IMPORTANTE: Las cargas factoriales son las correlaciones entre cada variable y el factor.
Es por esto que la solución factorial no rotada puede no suministrar un patrón significativo de cargas de las variables, razón por la cual el siguiente paso es:
Hacer uso de un método de rotación para lograr soluciones factoriales más simples y teóricamente más significativas.
En una tercera etapa, el investigador valora la necesidad de especificar de nuevo el modelo de factores debido a:
Concretamente, se giran los ejes a partir del origen, en referencia a los factores, hasta alcanzar una determinada posición. Como se indicó previamente, el primer factor tiende a ser un factor general dado que cuenta del mayor porcentaje de varianza. El segundo y los siguientes factores se basan en la varianza residual (cada uno explica porcentajes de varianza cada vez menores). El efecto de rotar la matriz de factores es redistribuir la varianza de los primeros factores a los últimos para lograr un patrón de factores más simple y teóricamente más significativo.
Existen dos tipos de rotación y son:
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.
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 y no habremos logrado el objetivo de reducir la dimensionalidad.
Método de rotación que minimiza el número de factores necesarios para explicar cada variable.
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 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.
El método más usado es varimax.
NOTA IMPORTANTE:
La opción rotation de R incluye “varimax” , “promax” , “none” . Se agrega la opción scores=“regression” o “Barlett” para generar los factores. Se usa la opción covmat para ingresar la matriz de correlación o covarianza directamente.
Una decisión crucial en el AF es determinar el número de factores a extraerse. El paquet nFactors ofrece un conjunto de rutinas para direccionar esta decisión. Desde luego, cualquier solución factorial debe ser interpretable para ser de utilidad.
library(nFactors)
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
##
## select
## Loading required package: boot
##
## Attaching package: 'boot'
## The following object is masked from 'package:psych':
##
## logit
## Loading required package: lattice
##
## Attaching package: 'lattice'
## The following object is masked from 'package:boot':
##
## melanoma
##
## Attaching package: 'nFactors'
## The following object is masked from 'package:lattice':
##
## parallel
ev <- eigen(cor(estudiantes)) # Obtención de los autovalores
ap <- parallel(subject=nrow(estudiantes),var=ncol(estudiantes),rep=100,cent=.05)
nS <- nScree(x=ev$values, aparallel=ap$eigen$qevpea)
plotnScree(nS,xlab = "Número de Componentes",ylab = "Autovalores",
main = "Solución por autovalores para determinar
el número de factores o componentes")