Los siguientes datos provienen de un cuestionario de actitudes para el trabajo en equipo que se aplicó a 540 estudiantes universitarios. Los investigadores tenían entre sus objetivos explorar la estructura factorial del cuestionario ya que el instrumento nunca se había aplicado en el contexto colombiano.
df <- read_excel("C:/Users/jcami/Downloads/Trabajo aplicado de personalidadF.xlsx")
Items_CACTE <- df[,c(91:102)]
colnames(Items_CACTE) <- c("E1","E2","E3","E4","E5","E6","E7","E8","E9","E10",
"E11","E12")
Antes de comenzar los análisis se evalúa la normalidad multivariada de los datos utilizando la prueba de Mardia. Tal como se puede observar los datos no siguen una distribución multivariada, sin embargo, de aquí en adelante se asumirá normalidad.
MVN::mvn(Items_CACTE, mvnTest = "mardia")$multivariateNormality # los datos no son normales
## Test Statistic p value Result
## 1 Mardia Skewness 1693.71061291749 4.92587948249273e-170 NO
## 2 Mardia Kurtosis 35.8256301299833 0 NO
## 3 MVN <NA> <NA> NO
También se utilizó la prueba de Kaiser-Meyer-Olkin y la prueba de esfericidad de Barlett para confirmar que la matriz de correlación era apta para el análisis factorial.
BARTLETT(cor(Items_CACTE),N=540)
##
## ✔ The Bartlett's test of sphericity was significant at an alpha level of .05.
## These data are probably suitable for factor analysis.
##
## 𝜒²(66) = 2601.51, p < .001
KMO(cor(Items_CACTE))
## Kaiser-Meyer-Olkin factor adequacy
## Call: KMO(r = cor(Items_CACTE))
## Overall MSA = 0.9
## MSA for each item =
## E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12
## 0.93 0.89 0.88 0.89 0.88 0.83 0.86 0.90 0.92 0.93 0.91 0.91
Ahora se computaran los autovalores de la matriz de correlación y se construyó un gráfico de sedimentación para determinar el número de factores que se necesitaran.
eigen <- eigen(cor(Items_CACTE))
eigen$values
## [1] 5.3452954 1.2791879 0.8904405 0.7854488 0.6553995 0.6039573 0.5369972
## [8] 0.4736019 0.4028635 0.3859484 0.3340661 0.3067935
Ahora diseñamos en grafico de sedimentación que nos ayudara a visualizar nuestros datos y decidir cuantos factores utilizaremos más adelante. Como podemos ver los primeros dos autovalores son mayores al punto de corte (>1) por lo que es probable que necesitemos dos factores para explicar la varianza de nuestro set de datos.
eigen <- eigen$values
ind <- 1:12
scree_plot <- as.data.frame(cbind(eigen,ind))
ggplot(data = scree_plot, aes(x=ind, y=eigen))+geom_line()+geom_point()+
geom_hline(yintercept = 1)+labs(x = "Indicadores", y = "Autovalores")+
scale_x_continuous(breaks = (1:12))+scale_y_continuous(breaks = (0:6))+
theme_classic()
Comenzaremos utilizando un modelo con variables ortogonales con rotación varimax debido a que durante el desarrollo original de cuestionario los autores esperaban encontrar dos factores relativamente independientes. Además, utilizaremos el estimador de máxima verosimilitud, aunque es probable que no sea el más apropiado para este caso particular.
# modelo ortogonal
FA_ortogonal <-factanal(Items_CACTE, factors = 2, rotation = "varimax")
print(round(FA_ortogonal$loadings,2), cutoff = 0.44)
##
## Loadings:
## Factor1 Factor2
## E1 0.60
## E2 0.73
## E3 0.74
## E4 0.45
## E5 -0.45
## E6 -0.52
## E7 0.68
## E8 0.70
## E9 0.66
## E10 0.47 0.47
## E11 0.60
## E12 0.57
##
## Factor1 Factor2
## SS loadings 2.963 2.579
## Proportion Var 0.247 0.215
## Cumulative Var 0.247 0.462
biplot.psych(factanal(Items_CACTE, factors = 2, rotation = "varimax",
scores = "regression"),cex = c(0.5,0.8),main = "Distribución factorial del modelo ortogonal")
Finalmente utilizaremos un análisis factorial oblicuo. En estudios previos se ha observado que los factores del cuestionario suelen estar correlacionados, por lo que es probable que esta estructura se ajuste mejor a los datos.
FA_oblicuo <- factanal(Items_CACTE, factors = 2, rotation = "promax")
print(round(FA_oblicuo$loadings,2), cutoff = 0.37)
##
## Loadings:
## Factor1 Factor2
## E1 0.56
## E2 0.78
## E3 0.84
## E4 0.42
## E5 -0.40
## E6 -0.62
## E7 0.83
## E8 0.72
## E9 0.70
## E10 0.37
## E11 0.64
## E12 0.61
##
## Factor1 Factor2
## SS loadings 2.900 2.390
## Proportion Var 0.242 0.199
## Cumulative Var 0.242 0.441
biplot.psych(factanal(Items_CACTE, factors = 2, rotation = "promax",
scores = "regression"),cex = c(0.5,0.8), main = "Distribución factorial del modelo oblicuo")
FA_oblicuo
##
## Call:
## factanal(x = Items_CACTE, factors = 2, rotation = "promax")
##
## Uniquenesses:
## E1 E2 E3 E4 E5 E6 E7 E8 E9 E10 E11 E12
## 0.463 0.363 0.399 0.704 0.678 0.719 0.523 0.382 0.485 0.558 0.568 0.607
##
## Loadings:
## Factor1 Factor2
## E1 0.218 0.563
## E2 0.783
## E3 0.842
## E4 0.419 0.160
## E5 -0.210 -0.400
## E6 0.141 -0.619
## E7 0.827 -0.219
## E8 0.725
## E9 0.700
## E10 0.351 0.369
## E11 0.640
## E12 0.612
##
## Factor1 Factor2
## SS loadings 2.903 2.401
## Proportion Var 0.242 0.200
## Cumulative Var 0.242 0.442
##
## Factor Correlations:
## Factor1 Factor2
## Factor1 1.000 0.704
## Factor2 0.704 1.000
##
## Test of the hypothesis that 2 factors are sufficient.
## The chi square statistic is 235.73 on 43 degrees of freedom.
## The p-value is 2.05e-28
Para establecer la fiabilidad de cada uno de los factores se utilizará el coeficiente alfa y omega.
# Factor 1
Items_CACTE$E5 <- (-1*Items_CACTE$E5)+6
Items_CACTE$E6 <- (-1*Items_CACTE$E6)+6
set.seed(4699)
omega1 <- ci.reliability(data=Items_CACTE[,c(4,7,8,9,11,12)]
, type="omega", conf.level = 0.95, interval.type="bca"
, B=1000)
alpha1 <- psych::alpha(Items_CACTE[,c(4,7,8,9,11,12)])
# coeficiente omega
round(omega1$est,2)
## [1] 0.83
#coeficiente alfa
round(alpha1$total$raw_alpha,2)
## [1] 0.83
# Factor 2
set.seed(4699)
omega2<- ci.reliability(data=Items_CACTE[,c(1,2,3,5,6,10)]
, type="omega", conf.level = 0.95, interval.type="bca"
, B=1000)
alpha2 <-psych::alpha(Items_CACTE[,c(1,2,3,5,6,10)])
round(omega2$est,2)
## [1] 0.82
round(alpha2$total$raw_alpha,2)
## [1] 0.82