#Preparando la data
library(rio)
github='https://github.com/DataPolitica/salidas/raw/master/Data/Cajamarca.sav'
cajamarca=import(github)
#Preparo mi data para factorizar con las variables requerridas
subdata<- cajamarca[,c(2:10)]
#Pregunta 2 : Matriz de correlaciones
library(polycor)
matriz<-hetcor(subdata)
matriz_corr<- matriz$correlations
library(ggcorrplot)
## Loading required package: ggplot2
ggcorrplot(matriz_corr)
#Mejoramos el gráfico a 0.5
ggcorrplot(matriz_corr,
p.mat = cor_pmat(matriz_corr),
insig = "blank")
#Momento de realizar el diagnóstico de la matriz de correalciones
#primero observamos el KMO
library(psych)
##
## Attaching package: 'psych'
## The following objects are masked from 'package:ggplot2':
##
## %+%, alpha
## The following object is masked from 'package:polycor':
##
## polyserial
KMO(matriz_corr)
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = matriz_corr)
## Overall MSA = 0.4
## MSA for each item =
## prural desnutcr mortinf analfab inasiesc nintrab hacinam sinagua
## 0.42 0.40 0.54 0.38 0.37 0.22 0.72 0.40
## sindesag
## 0.48
#luego observamos el bartlett
cortest.bartlett(matriz_corr,n=nrow(subdata))$p.value>0.05
## [1] FALSE
#Finalmente observamos la singularidad
library(matrixcalc)
is.singular.matrix(matriz_corr)
## [1] FALSE
Observando los resultados del diagnóstico de correlaciones, podemos observar que tanto la prueba de bartlett como la de singularidad son optimas, pues rechazan la hipótesis nula, representando significancia en sus resultados (FALSE). Sin embargo, la prueba de KMO resulta ser menor a 0.4, lo que significa que el análisis factorial no està siendo el adecuado.
#Es momento de identificar el número de factores recomendados, asi como el AFE
fa.parallel(subdata,fm = 'ML', fa = 'fa') #de esta manera vemos cuantos factores latentes son recomendados
## Parallel analysis suggests that the number of factors = 2 and the number of components = NA
En este caso, se recomiendan 2 variables latentes
#Realizamos el EFA con las variables dadas
library(GPArotation)
resfa <- fa(subdata,nfactors = 2,cor = 'mixed',rotate = "varimax",fm="minres")
## Warning in fa.stats(r = r, f = f, phi = phi, n.obs = n.obs, np.obs = np.obs, :
## The estimated weights for the factor scores are probably incorrect. Try a
## different factor score estimation method.
## Warning in fac(r = r, nfactors = nfactors, n.obs = n.obs, rotate = rotate, : An
## ultra-Heywood case was detected. Examine the results carefully
print(resfa$loadings)
##
## Loadings:
## MR1 MR2
## prural 0.999
## desnutcr 0.661 0.451
## mortinf 0.747
## analfab 0.460 0.659
## inasiesc 0.185 1.000
## nintrab 0.663
## hacinam 0.470 0.299
## sinagua 0.992
## sindesag 0.843
##
## MR1 MR2
## SS loadings 3.603 2.733
## Proportion Var 0.400 0.304
## Cumulative Var 0.400 0.704
Luego de realizar el EFA con 2 variables se puede observar que existen algunas que se juntan en las variables
print(resfa$loadings,cutoff = 0.5) #se realiza un corte al 0.5
##
## Loadings:
## MR1 MR2
## prural 0.999
## desnutcr 0.661
## mortinf 0.747
## analfab 0.659
## inasiesc 1.000
## nintrab 0.663
## hacinam
## sinagua 0.992
## sindesag 0.843
##
## MR1 MR2
## SS loadings 3.603 2.733
## Proportion Var 0.400 0.304
## Cumulative Var 0.400 0.704
Al hacer el corte en 0.5 se observa con mayor detenimiento cómo estarán distribuidas las variables dentro de las nuevas variables latentes (nuevos conjuntos), vemos que MR1 tiene 4 valores y MR2 también
#Presentamos las variables en el diagrama
fa.diagram(resfa)
#Realizamos una evaluación del EFA
resfa$crms #raiz de error cuadrático medio corregida
## [1] 0.1021802
Se encuentra cercano a 0, indica buen ajuste
resfa$RMSEA #Raíz del error cuadrático medio de aproximación
## RMSEA lower upper confidence
## 0.1364794 0.0000000 0.3202334 0.9000000
Dado que los valores son mayores a 0.5, se debe reportar que no existe suficiencia de validez de las variables
resfa$TLI #prueba Tucker-Lewis
## [1] 0.7525446
Que salga menor a 0.9 indica insuficiencia de validez, se debe reportar.
#Se debe ver qué variable aporta más a los factores
sort(resfa$communality)
## hacinam nintrab mortinf desnutcr analfab sindesag sinagua prural
## 0.3100542 0.4456448 0.5577819 0.6406220 0.6456363 0.7163766 0.9847289 0.9994019
## inasiesc
## 1.0350391
La variable que aporta más a los valores creados es “inasiesc” y le siguen las variables “sinagua” y “prural”
#Presentamos las variables encontradas en una nueva base de datos y pasamos a revisar sus principales descriptivos
factorial_casos<-as.data.frame(resfa$scores)
head(factorial_casos)
## MR1 MR2
## 1 -0.4091776 2.2390867
## 2 0.5267579 2.0469175
## 3 0.7216715 -2.0465796
## 4 1.1389531 0.2931199
## 5 -0.3282183 1.4949300
## 6 0.7027532 -0.4289251
summary(factorial_casos)
## MR1 MR2
## Min. :-2.0182 Min. :-2.04658
## 1st Qu.:-0.4092 1st Qu.:-1.07783
## Median : 0.5141 Median :-0.00491
## Mean : 0.0000 Mean : 0.00000
## 3rd Qu.: 0.7217 3rd Qu.: 0.29312
## Max. : 1.1390 Max. : 2.23909