LIBRERÍAS:
library(rio)
library(dplyr)
library(polycor)
library(psych)
library(GPArotation)
library(BBmisc)
library(lavaan)
library(semPlot)
data=import("wvs_brasil.xlsx")
data=import(“wvs_brasil.xlsx”)
Un grupo de investigadores está planteando una investigación respecto al nivel de confianza en diferentes organizaciones por parte de la población Brasileña. Para ello se utilizará la WVS wave 7 (World Value Survey) donde las variables en cuestión registran las siguientes categorías escalares: 1=Confía totalmente, 2=Confía parcialmente, 3=Desconfía un poco, 4=Desconfía totalmente, así como otros valores.
A. Prepare las siguientes 15 variables (Columnas 91-105) para aplicar el análisis factorial exploratorio, eliminando valores indeseados y ordenando las categorías de forma ascendente. Explique la necesidad de este procedimiento. (5 pts)
DESCRIPCIÓN: Debemos ver si podemos crear una variable latente de confianza en las instituciones. Para ello se tomará 15 variables observables de la base datos de (World Value Survey)
confianza=data[,c(91:105)]
confianza[confianza>4] <- NA
confianza[confianza<1] <- NA
confianza=na.omit(confianza)
Una vez limpia la base con la que trabajaremos (o sea, habiendo eliminado los datos perdidos), procederemos a ordenar las categorías de forma ascendente y a nombrarlas.
library(car)
library(dplyr)
names(confianza)=c("Iglesia","Fuerzas armadas","Prensa","Televisión","Sindicatos","Policía","Sistema Judicial","Gobierno","Partidos políticos","Parlamento/Congreso","Servicio Civil","Universidades","Elecciones","Grandes Empresas","Bancos")
confianza$Iglesia=recode(confianza$Iglesia,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Fuerzas armadas`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Prensa,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Televisión,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Sindicatos,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Policía,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Sistema Judicial`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Gobierno,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Partidos políticos`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Parlamento/Congreso`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Servicio Civil`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Universidades,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Elecciones,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$`Grandes Empresas`,"1=4;2=3;3=2;4=1")
confianza$Iglesia=recode(confianza$Bancos,"1=4;2=3;3=2;4=1")
INTERPRETACIÓN: Primero,la eliminación de datos pérdidos sirve para poder trabajar con las variables observables sin obstrucciones en el R. Segundo, es necesario marcar que los valores encima de 4 tiene valores perdidos y que los que están debajo de 1 también, ya que ello nos permite indicarle a R que solo trabajaremos con el intervalo del medio.Por último, como lo que buscamos es que un mayor porcentaje nos de mayor confianza, es crucial el ordenar las categorías de forma ascendente (para poder otrogar una interpretación desde desconfianza total hasta confianza total).
B. Aplique los pasos necesarios para el análisis factorial, explicando los resultados obtenidos en el proceso: (15 pts)
-PASO 1: Calcular la matriz de correlación
library(polycor)
library(psych)
poly_cor = polychoric(confianza)
poly_cor
## Call: polychoric(x = confianza)
## Polychoric correlations
## Igles Frzsa Prens Tlvsn Sndct Polic SstmJ Gobrn Prtdp Prl/C
## Iglesia 1.00
## Fuerzas armadas -0.37 1.00
## Prensa -0.39 0.47 1.00
## Televisión -0.39 0.38 0.77 1.00
## Sindicatos -0.38 0.37 0.48 0.46 1.00
## Policía -0.41 0.57 0.42 0.42 0.42 1.00
## Sistema Judicial -0.41 0.49 0.49 0.44 0.51 0.65 1.00
## Gobierno -0.42 0.31 0.43 0.43 0.51 0.42 0.55 1.00
## Partidos políticos -0.40 0.22 0.44 0.46 0.51 0.33 0.41 0.74 1.00
## Parlamento/Congreso -0.40 0.27 0.42 0.43 0.53 0.35 0.46 0.72 0.81 1.00
## Servicio Civil -0.42 0.36 0.39 0.31 0.38 0.43 0.47 0.44 0.44 0.41
## Universidades -0.43 0.38 0.31 0.25 0.32 0.40 0.42 0.21 0.18 0.20
## Elecciones -0.39 0.29 0.37 0.37 0.45 0.30 0.39 0.52 0.63 0.59
## Grandes Empresas -0.60 0.40 0.41 0.37 0.30 0.39 0.42 0.37 0.34 0.34
## Bancos -1.00 0.37 0.39 0.39 0.38 0.41 0.41 0.42 0.40 0.40
## SrvcC
## Iglesia
## Fuerzas armadas
## Prensa
## Televisión
## Sindicatos
## Policía
## Sistema Judicial
## Gobierno
## Partidos políticos
## Parlamento/Congreso
## Servicio Civil 1.00
## Universidades 0.54
## Elecciones 0.43
## Grandes Empresas 0.48
## Bancos 0.42
## Unvrs Elccn GrndE Bancs
## Universidades 1.00
## Elecciones 0.32 1.00
## Grandes Empresas 0.49 0.41 1.00
## Bancos 0.43 0.39 0.60 1.00
##
## with tau of
## 1 2 3
## Iglesia -0.69 -0.0606 1.2060
## Fuerzas armadas -0.73 0.3475 0.9679
## Prensa -1.58 -0.2848 0.3862
## Televisión -1.85 -0.3552 0.3227
## Sindicatos -1.53 -0.3745 0.3075
## Policía -1.25 0.1241 0.7774
## Sistema Judicial -1.19 0.0660 0.7037
## Gobierno -1.96 -0.7037 -0.0733
## Partidos políticos -2.30 -1.0553 -0.4215
## Parlamento/Congreso -2.21 -0.9422 -0.2886
## Servicio Civil -1.45 -0.0063 0.7436
## Universidades -0.60 0.7270 1.3810
## Elecciones -1.63 -0.5793 0.0099
## Grandes Empresas -1.40 0.1716 0.8766
## Bancos -1.21 0.0606 0.6922
Creamos un objeto con la matriz de correlaciones
corMatrix=poly_cor$rho
cor.plot(corMatrix,
numbers=T, #Se muestren los numeros de las correlaciones
upper=F, #Que aparezca la segunda parte
main= "Matriz de correlaciones",#Titulo
show.legend=T)#Mostrar leyenda
INTERPRETACIÓN: Primero, es necesario mencionar que se ejecuta una correlación policórica, ya que estamos usando una variable ordinal (mide la confianza desde nada a mucha). Segundo, se crea la matriz de correlaciones para poder ver si existen variable correlacionadas para poder conoformar una variable latente. Por último, se vislumbra el gráfico que denota las variable con mayor fuerza en su corrrelación, estás son las que son más azules y más rojas.
-PASO 2: Verificando que los datos se puedan factorizar
psych::KMO(confianza)
## Error in solve.default(r) :
## Lapack routine dgesv: system is exactly singular: U[15,15] = 0
## matrix is not invertible, image not found
## Kaiser-Meyer-Olkin factor adequacy
## Call: psych::KMO(r = confianza)
## Overall MSA = 0.5
## MSA for each item =
## Iglesia Fuerzas armadas Prensa Televisión
## 0.5 0.5 0.5 0.5
## Sindicatos Policía Sistema Judicial Gobierno
## 0.5 0.5 0.5 0.5
## Partidos políticos Parlamento/Congreso Servicio Civil Universidades
## 0.5 0.5 0.5 0.5
## Elecciones Grandes Empresas Bancos
## 0.5 0.5 0.5
INTERPRETACIÓN: A partir de la pruea de KMO podemos determinar si los datos se pueden factorizar o no. En es este caso, el Overall MSA = 0.5, entonces podemos decir que tenemos una correlación parcial. Por tanto, podemos decir que sí es pertinente emplear el análisis factorial. Esto se confirmará a partir de la prueba Bartlett
-PASO 3: Verificar si la matriz de correlaciones es adecuada
cortest.bartlett(corMatrix,n=nrow(confianza))$p.value>0.05#Menor a 0.05 saldrá FALSE, mayor a 0.05 saldra TRUE
## [1] FALSE
H0: La matriz de correlacion es una matriz identidad
INTERPRETACIÓN: Con la prueba de Bartlett podemos notar un P value menor a 0.05 se rechaza la H0, por lo que podemos afirmar que la matriz de correlación es distinta a la de identidad.. En esa línea, se confirma/verifica que es pertinente usar una análisis factorial.
-PASO 4: Determinar cuántos factores o variables latententes puede redimensionar la data
fa.parallel(corMatrix, fm="pa", fa="fa", main = "Scree Plot")
## Warning in fa.parallel(corMatrix, fm = "pa", fa = "fa", main = "Scree Plot"):
## It seems as if you are using a correlation matrix, but have not specified the
## number of cases. The number of subjects is arbitrarily set to be 100
## Parallel analysis suggests that the number of factors = 4 and the number of components = NA
eigenf = eigen(cor(confianza, use="complete"))
eigenf$values
## [1] 6.029940e+00 1.642779e+00 1.271539e+00 1.037149e+00 8.170377e-01
## [6] 6.526397e-01 6.246260e-01 5.400582e-01 5.068876e-01 4.934100e-01
## [11] 4.268707e-01 3.719192e-01 3.022399e-01 2.829036e-01 -3.191528e-16
INTERPRETACIÓN: Por un lado, el gráfico de sedimentación recomienda determinar 3 factores. Por otro lado, los autovalores que superan a 1 son 4 factores, justo los 4 primeros.
-PASO 5: Solicitamos el número de componentes.
Aplicamos la redimensión
En esta parte, aplicamos los componentes principales. En este caso, determinaré 3 factores a partir de la visualización en el gráfico de sedimentación. No uso los resultados de los autovalores, ya que en esta oportunidad estamos frente a 15 variables, que -en comparación con otros análisis que cuentan con mayores variables- no se vería perdido mucho del análisis. En otras palabras, cuando uno se encuentra frente a muchos valores, el hecho de determinarlos por una cantidad mínima de valores podría hacer que se pierda parte importante del análisis. Sin embargo, cuando uno se encuentra frente a menos valores (como en este caso que solo se cuenta con 15), no existe problema en tomar pocos facotres, al contrario ello facilita el análisis. Por lo que resulta conveniente usar 3 factores(como se visualiza en el gráficode sedimentación), en lugar de 4(como recomiendan los autovalores).
install.packages("GPArotation")
library(GPArotation)
factorial <- fa(confianza,nfactors= 3 ,rotate = "varimax",fm="minres")
factorial
## Factor Analysis using method = minres
## Call: fa(r = confianza, nfactors = 3, rotate = "varimax", fm = "minres")
## Standardized loadings (pattern matrix) based upon correlation matrix
## MR1 MR2 MR3 h2 u2 com
## Iglesia -0.26 -0.20 -0.94 0.98 0.017 1.3
## Fuerzas armadas 0.61 0.10 0.15 0.40 0.597 1.2
## Prensa 0.56 0.31 0.12 0.43 0.572 1.7
## Televisión 0.49 0.33 0.12 0.37 0.631 1.9
## Sindicatos 0.42 0.41 0.13 0.37 0.634 2.2
## Policía 0.65 0.16 0.15 0.47 0.527 1.2
## Sistema Judicial 0.64 0.28 0.14 0.51 0.492 1.5
## Gobierno 0.28 0.66 0.14 0.54 0.462 1.4
## Partidos políticos 0.12 0.84 0.11 0.73 0.270 1.1
## Parlamento/Congreso 0.17 0.78 0.12 0.66 0.341 1.1
## Servicio Civil 0.47 0.27 0.23 0.35 0.655 2.1
## Universidades 0.49 0.06 0.27 0.32 0.684 1.6
## Elecciones 0.27 0.51 0.17 0.36 0.638 1.8
## Grandes Empresas 0.44 0.18 0.42 0.40 0.600 2.3
## Bancos 0.26 0.20 0.94 0.98 0.017 1.3
##
## MR1 MR2 MR3
## SS loadings 2.93 2.69 2.24
## Proportion Var 0.20 0.18 0.15
## Cumulative Var 0.20 0.37 0.52
## Proportion Explained 0.37 0.34 0.28
## Cumulative Proportion 0.37 0.72 1.00
##
## Mean item complexity = 1.6
## Test of the hypothesis that 3 factors are sufficient.
##
## The degrees of freedom for the null model are 105 and the objective function was 27.86 with Chi Square of 38447.19
## The degrees of freedom for the model are 63 and the objective function was 18.58
##
## The root mean square of the residuals (RMSR) is 0.05
## The df corrected root mean square of the residuals is 0.06
##
## The harmonic number of observations is 1387 with the empirical chi square 604.77 with prob < 1.6e-89
## The total number of observations was 1387 with Likelihood Chi Square = 25604.33 with prob < 0
##
## Tucker Lewis Index of factoring reliability = -0.112
## RMSEA index = 0.541 and the 90 % confidence intervals are 0.535 0.546
## BIC = 25148.53
## Fit based upon off diagonal values = 0.99
## Measures of factor score adequacy
## MR1 MR2 MR3
## Correlation of (regression) scores with factors 0.87 0.91 0.98
## Multiple R square of scores with factors 0.76 0.83 0.97
## Minimum correlation of possible factor scores 0.52 0.66 0.93
Diagramamos
fa.diagram(factorial)
¿Que variables componen cada uno de mis factores?
print(factorial$loadings,cutoff = 0.4)
##
## Loadings:
## MR1 MR2 MR3
## Iglesia -0.935
## Fuerzas armadas 0.609
## Prensa 0.561
## Televisión 0.494
## Sindicatos 0.422 0.414
## Policía 0.652
## Sistema Judicial 0.640
## Gobierno 0.663
## Partidos políticos 0.839
## Parlamento/Congreso 0.784
## Servicio Civil 0.471
## Universidades 0.487
## Elecciones 0.510
## Grandes Empresas 0.441 0.418
## Bancos 0.935
##
## MR1 MR2 MR3
## SS loadings 2.930 2.694 2.238
## Proportion Var 0.195 0.180 0.149
## Cumulative Var 0.195 0.375 0.524
INTERPRETACIÓN: Para empezar, podemos ver qué variables tiene cada componente. El primer componente: MR1 contiene la variable policía, sistema judicial, Fuerzas Armadas, prensa, televisión, universidades, servicio civil, grandes empresas y sindicatos. El segundo componente contiene la variable de partidos políticos, parlamento/congreso, gobierno, elecciones. El terce componente contiene la variable Iglesia y bancos. Para continuar, podemos ver la carga que aporta cada variable a su respectivo componente. Resulta interesante que en el “componente 3” ambas de sus variables le aporten la misma carga pero una en positivo y la otra en negativo (Podemos observar que hay unas líneas punteadas rojas, ello implica que las cargas factoriales son negativas, lo que significa que la relación entre la variable observable y el factor creado es inversa). En otras palabras, el tener mayor confianza en la iglesia (al ser inverso) hace que tengas menor confianza en la instituciones, pero el tener mayor confianza en los Bancos hace que tengas mayor confianza en la intituciones. Pese a que los efectos en torno a la cofianza sean relaciones inversas, denotan la misma carga (en este caso, un +/-0.9)
-PASO 6: Evaluamos el Análisis Factorial Exploratorio solicitado
sort(factorial$communality)
## Universidades Servicio Civil Elecciones Sindicatos
## 0.3155243 0.3454187 0.3624852 0.3658207
## Televisión Grandes Empresas Fuerzas armadas Prensa
## 0.3687552 0.3998891 0.4025156 0.4280589
## Policía Sistema Judicial Gobierno Parlamento/Congreso
## 0.4731101 0.5080182 0.5378259 0.6592753
## Partidos políticos Bancos Iglesia
## 0.7295693 0.9827231 0.9827231
En este caso, la variable que tiene mayor porcentaje de varianza común, que más aporta a la confianza en las organizaciones es la de Bancos e Iglesia.
sort(factorial$complexity)
## Partidos políticos Parlamento/Congreso Fuerzas armadas Policía
## 1.075724 1.147986 1.172095 1.230833
## Iglesia Bancos Gobierno Sistema Judicial
## 1.251387 1.251387 1.448120 1.476596
## Universidades Prensa Elecciones Televisión
## 1.608431 1.678893 1.783420 1.896090
## Servicio Civil Sindicatos Grandes Empresas
## 2.096292 2.181951 2.309342
**En este caso las variables que contribuye a más de un factor son las que sobrepasan al 2. Estas son las de Servicio Civil, Grandes Empresas, y Sindicatos.
sort(factorial$uniquenesses)
## Iglesia Bancos Partidos políticos Parlamento/Congreso
## 0.01727691 0.01727691 0.27043068 0.34072474
## Gobierno Sistema Judicial Policía Prensa
## 0.46217405 0.49198183 0.52688988 0.57194112
## Fuerzas armadas Grandes Empresas Televisión Sindicatos
## 0.59748439 0.60011086 0.63124482 0.63417927
## Elecciones Servicio Civil Universidades
## 0.63751478 0.65458133 0.68447568
En este caso, vemos que la variable Universidades tiene un componente único de 0.6844 entre las variables. En otras palabras, esta variable tiene menor cantidad de información en común.
-PASO 7: Guardamos los componentes como nuevas variables
factorial_casos<-as.data.frame(factorial$scores)
head(factorial_casos)
## MR1 MR2 MR3
## 2 2.9230046 0.3822365 1.6626436
## 4 -4.6850470 -6.5315049 -3.0271269
## 5 0.9500469 2.8405885 0.9471945
## 6 -4.6850470 -6.5315049 -3.0271269
## 8 -1.3217857 -2.1077892 -1.8877081
## 9 -4.3067377 -1.5838532 -2.1838643
summary(factorial_casos)
## MR1 MR2 MR3
## Min. :-11.29191 Min. :-12.5332 Min. :-7.4513
## 1st Qu.: -2.80891 1st Qu.: -2.1025 1st Qu.:-2.2216
## Median : -0.09852 Median : 0.4886 Median :-0.3595
## Mean : 0.00000 Mean : 0.0000 Mean : 0.0000
## 3rd Qu.: 2.77996 3rd Qu.: 2.6746 3rd Qu.: 2.2104
## Max. : 8.52868 Max. : 5.4720 Max. : 5.8212
Agregamos a la subdata
confianza$confins1<- factorial_casos$MR1
confianza$confins2<- factorial_casos$MR2
confianza$confins3<- factorial_casos$MR3
Primer factor: Organismos de fizcalización Segundo factor: Organismos gubernamentales Tercer factor: Organizaciones masivos
-PASO 8. Estandarizamos a una escala de 10
library(BBmisc)
confianza$confins1 = normalize(confianza$confins1,
method = "range",
margin=2, # by column
range = c(0, 10))
confianza$confins2 = normalize(confianza$confins2,
method = "range",
margin=2, # by column
range = c(0, 10))
confianza$confins3 = normalize(confianza$confins3,
method = "range",
margin=2, # by column
range = c(0, 10))
Vemos resultados de cada factor
summary(confianza)
## Iglesia Fuerzas armadas Prensa Televisión Sindicatos
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.00 Min. :1.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:2.00 1st Qu.:2.000
## Median :3.000 Median :2.000 Median :3.000 Median :3.00 Median :3.000
## Mean :2.394 Mean :2.298 Mean :2.905 Mean :2.98 Mean :2.963
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:4.00 3rd Qu.:4.000
## Max. :4.000 Max. :4.000 Max. :4.000 Max. :4.00 Max. :4.000
## Policía Sistema Judicial Gobierno Partidos políticos
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.:3.000 1st Qu.:3.000
## Median :2.000 Median :2.000 Median :4.000 Median :4.000
## Mean :2.563 Mean :2.597 Mean :3.263 Mean :3.507
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.:4.000 3rd Qu.:4.000
## Max. :4.000 Max. :4.000 Max. :4.000 Max. :4.000
## Parlamento/Congreso Servicio Civil Universidades Elecciones
## Min. :1.000 Min. :1.000 Min. :1.000 Min. :1.000
## 1st Qu.:3.000 1st Qu.:2.000 1st Qu.:1.000 1st Qu.:2.000
## Median :4.000 Median :3.000 Median :2.000 Median :3.000
## Mean :3.427 Mean :2.658 Mean :2.043 Mean :3.164
## 3rd Qu.:4.000 3rd Qu.:3.000 3rd Qu.:2.000 3rd Qu.:4.000
## Max. :4.000 Max. :4.000 Max. :4.000 Max. :4.000
## Grandes Empresas Bancos confins1 confins2
## Min. :1.000 Min. :1.000 Min. : 0.000 Min. : 0.000
## 1st Qu.:2.000 1st Qu.:2.000 1st Qu.: 4.280 1st Qu.: 5.793
## Median :2.000 Median :2.000 Median : 5.647 Median : 7.232
## Mean :2.542 Mean :2.606 Mean : 5.697 Mean : 6.961
## 3rd Qu.:3.000 3rd Qu.:3.000 3rd Qu.: 7.100 3rd Qu.: 8.446
## Max. :4.000 Max. :4.000 Max. :10.000 Max. :10.000
## confins3
## Min. : 0.000
## 1st Qu.: 3.940
## Median : 5.343
## Mean : 5.614
## 3rd Qu.: 7.279
## Max. :10.000
Primer factor: Organismos de fizcalización Segundo factor: Organismos gubernamentales Tercer factor: Organizaciones masivos