Mostrar código
rm(list = ls())
library(lavaan) # Ajuste del modelo
library(semPlot) # Diagramas de caminos
library(lavaanPlot) # Alternativa para diagramasClase: SEM Taller: 3 Preparado por: Jair Arciniegas
El taller busca:
Ajustar un modelo de medición (tres factores) y un modelo estructural.
Evaluar el ajuste global mediante la prueba χ2 y los índices CFI y TLI.
Graficar el diagrama de caminos con etiquetas estandarizadas.
Interpretar brevemente los resultados obtenidos.
A continuación se presentan la preparación del entorno, que describe las librerías que se utilizarán en el taller.
rm(list = ls())
library(lavaan) # Ajuste del modelo
library(semPlot) # Diagramas de caminos
library(lavaanPlot) # Alternativa para diagramasLectura de los datos, que de acuerdo con lo descrito en las instrucciones contiene información de N = 500 estudiantes sobre nueve variables observadas relacionadas con Ajuste, Riesgo y Rendimiento Académico.
dat <-read.csv('https://stats.idre.ucla.edu/wp-content/uploads/2021/02/worland5.csv')
dim(dat) # Dimensiones del conjunto de datos[1] 500 9
names(dat) # Nombres de las variables[1] "motiv" "harm" "stabi" "ppsych" "ses" "verbal" "read" "arith"
[9] "spell"
Tal como describe el enunciado, se observa que el conjunto de datos contiene 500 observaciones y 9 variables.
Siguiedo las pautas entregadas, a continuación se presenta la definición del modelo:
Mod1 <- '
#MOdelo de medición
adjust =~ motiv+ harm+ stabi
risk =~ verbal+ ses+ ppsych
achieve=~ read+ arith+ spell
#Modelo estructural
adjust ~risk
achieve ~ adjust + risk
'
#Estimación
mod_sem <- sem(Mod1, data = dat)Con base en los resultados de la estimación del modelo presentada a continuación se presentan las respuestas a las preguntas guía.
summary(mod_sem, standardized=T)# incluir solución estandarizadalavaan 0.6-19 ended normally after 112 iterations
Estimator ML
Optimization method NLMINB
Number of model parameters 21
Number of observations 500
Model Test User Model:
Test statistic 148.982
Degrees of freedom 24
P-value (Chi-square) 0.000
Parameter Estimates:
Standard errors Standard
Information Expected
Information saturated (h1) model Structured
Latent Variables:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
adjust =~
motiv 1.000 9.324 0.933
harm 0.884 0.041 21.774 0.000 8.246 0.825
stabi 0.695 0.043 15.987 0.000 6.478 0.648
risk =~
verbal 1.000 7.319 0.733
ses 0.807 0.076 10.607 0.000 5.906 0.591
ppsych -0.770 0.075 -10.223 0.000 -5.636 -0.564
achieve =~
read 1.000 9.404 0.941
arith 0.837 0.034 24.437 0.000 7.873 0.788
spell 0.976 0.028 34.338 0.000 9.178 0.919
Regressions:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
adjust ~
risk 0.599 0.076 7.837 0.000 0.470 0.470
achieve ~
adjust 0.375 0.046 8.085 0.000 0.372 0.372
risk 0.724 0.078 9.253 0.000 0.564 0.564
Variances:
Estimate Std.Err z-value P(>|z|) Std.lv Std.all
.motiv 12.870 2.852 4.512 0.000 12.870 0.129
.harm 31.805 2.973 10.698 0.000 31.805 0.319
.stabi 57.836 3.990 14.494 0.000 57.836 0.580
.verbal 46.239 4.788 9.658 0.000 46.239 0.463
.ses 64.916 4.975 13.048 0.000 64.916 0.650
.ppsych 68.033 5.068 13.425 0.000 68.033 0.682
.read 11.372 1.608 7.074 0.000 11.372 0.114
.arith 37.818 2.680 14.109 0.000 37.818 0.379
.spell 15.560 1.699 9.160 0.000 15.560 0.156
.adjust 67.694 6.066 11.160 0.000 0.779 0.779
risk 53.561 6.757 7.927 0.000 1.000 1.000
.achieve 30.685 3.449 8.896 0.000 0.347 0.347
Las métricas del modelo se presentan en la siguientes salidas del modelo. Puntualmente, se observa que se rechaza la hipótesis de la prueba \(\chi^2\) (que tiene como \(Ho: \Sigma = \Sigma(\theta)\) ), con un p-valor <0.001, por lo que se argumenta que el modelo hipotetizado no representa adecuadamente lo propuesto.
fitMeasures(mod_sem, c("cfi", "tli")) cfi tli
0.951 0.927
El CFI y el TLI indican, un ajuste adecuado del modelo tomando valores de 0.951 y 0.927, respectivamente. Es decir que según la regla empírica, desde la perspectiva del CFI el modelo es excelente y desde la perspectiva del TLI es aceptable. Estos resultados contradicen lo encontrado por la prueba \(\chi^2\), sin embargo frente a esta vale la pena destacar que ante tamaños muestrales grandes, la prueba tiende a rechazar la hipótesis nula de buen ajuste, incluso cuando el modelo es adecuado, considerando que por definición el estadístico de esta prueba es sensible ante grandes valores de N, magnificando el resultado de la función de discrepacia.
Por lo que se recomienda complementar la interpretación de la prueba con los índices CFI y TLI.
Frente a los modelos de medición se destaca un patrón que puede ser intuitivo:
A continuación se presenta el diagrama de caminos del modelo estimado empleando la librería semPlot, con etiquetas estandarizadas.
semPaths(mod_sem,
whatLabels = 'std', # coeficientes estandarizados
layout= 'tree', # disposición sugerida
edge.label.cex = 0.8, # tama~no de texto en flechas
residuals = FALSE) # oculta errores de medidaUna alternativa está dada por la librería lavaanPlot, que permite graficar el modelo de una manera más amigable, sin embargo, no permite incluir los errores de medida.
lavaanPlot2(model=mod_sem,
#stars = c("latent"),
graph_options = list(rankdir = 'TB'),#de arriba hacia abajo
node_options = list( fontname = "Helvetica"),
edge_options = list(color = "cornflowerblue"),
coef_labels = F,
#stand = TRUE
)