De acuerdo con Kabacoff (2011: 332), el AFE es un conjunto de métodos diseñados para descubrir la estructura latente que subyace a un conjunto de variables. Busca un reducido conjunto de constructos subyacentes o latentes que explican la relación entre variables manifiestas u observadas. Por ejemplo, identificar si hay actitudes latentes diferentes respecto de las opiniones de las personas en relación a la distribución de roles de cuidado y trabajo en el hogar.
Lo primero que debemos hacer es recodificar los valores de las variables para que las categorías estén ordenadas (ni de acuerdo ni es desacuerdo debe estar en el medio), y convertir las no respuestas en missing values:
table(genero12$P6A)
##
## 1 2 3 4 5 8 9
## 107 529 500 39 17 9 2
table(roles.genero$p6a.r, exclude = NULL)
##
## -2 -1 0 1 2 <NA>
## 39 500 17 529 107 11
Al igual que en el análisis de componentes principales, un criterio para escoger la cantidad de factores a extraer es el de tomar como referencia los autovalores (o eigenvalues) de los factores comunes. Sin embargo hay que tomar en cuenta que:
En el siguiente gráfico de autovalores se comparan los autovalores de la matriz de datos a partir del método de componentes principales y del método de análisis factorial exploratorio. En ambos casos el resultado sugiere extraer 3 factores.
## Parallel analysis suggests that the number of factors = 0 and the number of components = 3
A continuación se muestra la matriz de factores no rotados usando el método de máxima verosimilitud:
## Factor Analysis using method = ml
## Call: fa(r = roles.genero[, -1], nfactors = 3, rotate = "none", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML1 ML2 ML3 h2 u2 com
## p6a.r -0.23 0.05 0.13 0.069 0.93 1.7
## p6b.r 0.42 0.33 -0.42 0.471 0.53 2.9
## p6c.r 0.38 0.30 -0.31 0.333 0.67 2.8
## p6d.r 0.64 0.12 0.41 0.590 0.41 1.8
## p6e.r 0.15 0.09 0.17 0.058 0.94 2.6
## p7a.r -0.39 0.64 0.17 0.586 0.41 1.8
## p7b.r 0.42 -0.08 0.08 0.186 0.81 1.2
##
## ML1 ML2 ML3
## SS loadings 1.12 0.64 0.52
## Proportion Var 0.16 0.09 0.07
## Cumulative Var 0.16 0.25 0.33
## Proportion Explained 0.49 0.28 0.23
## Cumulative Proportion 0.49 0.77 1.00
##
## Mean item complexity = 2.1
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 21 and the objective function was 0.42 with Chi Square of 499.73
## The degrees of freedom for the model are 3 and the objective function was 0
##
## The root mean square of the residuals (RMSR) is 0.01
## The df corrected root mean square of the residuals is 0.02
##
## The harmonic number of observations is 1174 with the empirical chi square 3.55 with prob < 0.31
## The total number of observations was 1203 with Likelihood Chi Square = 2.78 with prob < 0.43
##
## Tucker Lewis Index of factoring reliability = 1.003
## RMSEA index = 0 and the 90 % confidence intervals are 0 0.047
## BIC = -18.49
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## ML1 ML2 ML3
## Correlation of (regression) scores with factors 0.83 0.76 0.71
## Multiple R square of scores with factors 0.69 0.58 0.51
## Minimum correlation of possible factor scores 0.37 0.16 0.01
Con la finalidad de nombrar mejor a los factores extraídos, podemos rotar los factores usando un método ortogonal (minimiza la correlación entre los factores) como el método varimax:
## Factor Analysis using method = ml
## Call: fa(r = roles.genero[, -1], nfactors = 3, rotate = "varimax",
## fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML3 ML1 ML2 h2 u2 com
## p6a.r -0.17 -0.05 0.19 0.069 0.93 2.1
## p6b.r 0.68 0.06 -0.05 0.471 0.53 1.0
## p6c.r 0.57 0.10 -0.03 0.333 0.67 1.1
## p6d.r 0.13 0.74 -0.14 0.590 0.41 1.1
## p6e.r 0.02 0.24 0.04 0.058 0.94 1.1
## p7a.r 0.02 0.02 0.76 0.586 0.41 1.0
## p7b.r 0.12 0.31 -0.27 0.186 0.81 2.3
##
## ML3 ML1 ML2
## SS loadings 0.85 0.72 0.72
## Proportion Var 0.12 0.10 0.10
## Cumulative Var 0.12 0.22 0.33
## Proportion Explained 0.37 0.32 0.31
## Cumulative Proportion 0.37 0.69 1.00
##
## Mean item complexity = 1.4
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 21 and the objective function was 0.42 with Chi Square of 499.73
## The degrees of freedom for the model are 3 and the objective function was 0
##
## The root mean square of the residuals (RMSR) is 0.01
## The df corrected root mean square of the residuals is 0.02
##
## The harmonic number of observations is 1174 with the empirical chi square 3.55 with prob < 0.31
## The total number of observations was 1203 with Likelihood Chi Square = 2.78 with prob < 0.43
##
## Tucker Lewis Index of factoring reliability = 1.003
## RMSEA index = 0 and the 90 % confidence intervals are 0 0.047
## BIC = -18.49
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## ML3 ML1 ML2
## Correlation of (regression) scores with factors 0.76 0.77 0.78
## Multiple R square of scores with factors 0.58 0.59 0.61
## Minimum correlation of possible factor scores 0.15 0.18 0.22
Otra metodología para extraer factores es usar una rotación oblicua que permite cierta correlación entre los factores extraídos. Un método oblicuo común es la rotación “promax”. La rotación oblicua es más compleja pero es una representación más realista de los datos:
## Factor Analysis using method = ml
## Call: fa(r = roles.genero[, -1], nfactors = 3, rotate = "promax", fm = "ml")
## Standardized loadings (pattern matrix) based upon correlation matrix
## ML3 ML2 ML1 h2 u2 com
## p6a.r -0.14 0.17 0.00 0.069 0.93 1.9
## p6b.r 0.73 0.07 -0.06 0.471 0.53 1.0
## p6c.r 0.60 0.08 0.02 0.333 0.67 1.0
## p6d.r -0.01 -0.04 0.76 0.590 0.41 1.0
## p6e.r -0.01 0.07 0.26 0.058 0.94 1.2
## p7a.r 0.19 0.85 0.13 0.586 0.41 1.1
## p7b.r 0.02 -0.23 0.28 0.186 0.81 2.0
##
## ML3 ML2 ML1
## SS loadings 0.85 0.72 0.72
## Proportion Var 0.12 0.10 0.10
## Cumulative Var 0.12 0.22 0.33
## Proportion Explained 0.37 0.31 0.32
## Cumulative Proportion 0.37 0.68 1.00
##
## With factor correlations of
## ML3 ML2 ML1
## ML3 1.00 -0.41 0.35
## ML2 -0.41 1.00 -0.33
## ML1 0.35 -0.33 1.00
##
## Mean item complexity = 1.3
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 21 and the objective function was 0.42 with Chi Square of 499.73
## The degrees of freedom for the model are 3 and the objective function was 0
##
## The root mean square of the residuals (RMSR) is 0.01
## The df corrected root mean square of the residuals is 0.02
##
## The harmonic number of observations is 1174 with the empirical chi square 3.55 with prob < 0.31
## The total number of observations was 1203 with Likelihood Chi Square = 2.78 with prob < 0.43
##
## Tucker Lewis Index of factoring reliability = 1.003
## RMSEA index = 0 and the 90 % confidence intervals are 0 0.047
## BIC = -18.49
## Fit based upon off diagonal values = 1
## Measures of factor score adequacy
## ML3 ML2 ML1
## Correlation of (regression) scores with factors 0.78 0.80 0.79
## Multiple R square of scores with factors 0.61 0.63 0.63
## Minimum correlation of possible factor scores 0.22 0.27 0.26
En marzo del 2016 el IOP replicó algunos de las preguntas sobre roles de género, actitudes hacia la violencia de género y hacia la homosexualidad que se hicieron en la encuesta del 2010 que hemos utilizado como ejemplo en nuestras lecciones.
Replique el análisis de componentes principales y/o el análisis factorial exploratorio con los datos del 2016 y compárelos con los del 2012 con la finalidad de determinar si los indicadores empleados siguen manteniendo la misma estructura de relaciones. Puede descargar la base de datos 2016 y el cuestionario desde el siguiente enlace: Genero PUCP 2016
library(psych)
library(foreign)
library(car)
library(GPArotation)
genero12 <- read.spss("https://www.dropbox.com/s/kjva39yh3dzb07r/IOP_1212_01_B.sav?dl=1",
to.data.frame = T, use.value.labels = F)
names(genero12)
roles.genero <- genero12[, c(1, 15:21)]
roles.genero$p6a.r <- recode(roles.genero$P6A, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p6b.r <- recode(roles.genero$P6B, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p6c.r <- recode(roles.genero$P6C, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p6d.r <- recode(roles.genero$P6D, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p6e.r <- recode(roles.genero$P6E, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p7a.r <- recode(roles.genero$P7A, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero$p7b.r <- recode(roles.genero$P7B, "1=2; 2=1; 3=-1; 4=-2; 5=0; else = NA")
roles.genero <- roles.genero[, c(1, 9:15)]
table(genero12$P6A)
table(roles.genero$p6a.r, exclude = NULL)
fa.parallel(roles.genero[, -1], fa="both", fm = "ml")
genero.efa1 <- fa(roles.genero[, -1], nfactors = 3, rotate = "none", fm="ml")
genero.efa1
genero.efa1b <- fa(roles.genero[, -1], nfactors = 3, rotate = "varimax", fm="ml")
genero.efa1b
fa.diagram(genero.efa1c)
genero.efa1c <- fa(roles.genero[, -1], nfactors = 3, rotate = "promax", fm="ml")
genero.efa1c
fa.diagram(genero.efa1c)