install.packages("lavaan")
install.packages("readxl")
library(lavaan)
## Warning: package 'lavaan' was built under R version 4.5.2
## This is lavaan 0.7-2
## lavaan is FREE software! Please report any bugs.
library(readxl)

Ejercicio 1. Estudio de Holzinger y Swineford (1939)

1.1 Modelo inicial

datos_hs <- HolzingerSwineford1939

modelo_hs <- '
  visual  =~ x1 + x2 + x3
  textual =~ x4 + x5 + x6
  speed   =~ x7 + x8 + x9
'

ajuste_hs <- cfa(modelo_hs, data = datos_hs)

summary(ajuste_hs, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.7-2 ended normally after 35 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        21
## 
##   Number of observations                           301
## 
## Model Test User Model:
##                                                       
##   Test statistic                                85.306
##   Degrees of freedom                                24
##   P-value (Chi-square)                           0.000
## 
## Model Test Baseline Model:
## 
##   Test statistic                               918.852
##   Degrees of freedom                                36
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.931
##   Tucker-Lewis Index (TLI)                       0.896
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -3737.745
##   Loglikelihood unrestricted model (H1)      -3695.092
##                                                       
##   Akaike (AIC)                                7517.490
##   Bayesian (BIC)                              7595.339
##   Sample-size adjusted Bayesian (SABIC)       7528.739
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.092
##   90 Percent confidence interval - lower         0.071
##   90 Percent confidence interval - upper         0.114
##   P-value H_0: RMSEA <= 0.050                    0.001
##   P-value H_0: RMSEA >= 0.080                    0.840
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.065
## 
## Goodness of Fit Index:
## 
##   Goodness of Fit Index (GFI)                    0.959
##   90 Percent confidence interval - lower         0.939
##   90 Percent confidence interval - upper         0.976
## 
## 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
##   visual =~                                                             
##     x1                1.000                               0.900    0.772
##     x2                0.554    0.100    5.554    0.000    0.498    0.424
##     x3                0.729    0.109    6.685    0.000    0.656    0.581
##   textual =~                                                            
##     x4                1.000                               0.990    0.852
##     x5                1.113    0.065   17.014    0.000    1.102    0.855
##     x6                0.926    0.055   16.703    0.000    0.917    0.838
##   speed =~                                                              
##     x7                1.000                               0.619    0.570
##     x8                1.180    0.165    7.152    0.000    0.731    0.723
##     x9                1.082    0.151    7.155    0.000    0.670    0.665
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   visual ~~                                                             
##     textual           0.408    0.074    5.552    0.000    0.459    0.459
##     speed             0.262    0.056    4.660    0.000    0.471    0.471
##   textual ~~                                                            
##     speed             0.173    0.049    3.518    0.000    0.283    0.283
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .x1                0.549    0.114    4.833    0.000    0.549    0.404
##    .x2                1.134    0.102   11.146    0.000    1.134    0.821
##    .x3                0.844    0.091    9.317    0.000    0.844    0.662
##    .x4                0.371    0.048    7.779    0.000    0.371    0.275
##    .x5                0.446    0.058    7.642    0.000    0.446    0.269
##    .x6                0.356    0.043    8.277    0.000    0.356    0.298
##    .x7                0.799    0.081    9.823    0.000    0.799    0.676
##    .x8                0.488    0.074    6.573    0.000    0.488    0.477
##    .x9                0.566    0.071    8.003    0.000    0.566    0.558
##     visual            0.809    0.145    5.564    0.000    1.000    1.000
##     textual           0.979    0.112    8.737    0.000    1.000    1.000
##     speed             0.384    0.086    4.451    0.000    1.000    1.000
fitMeasures(ajuste_hs, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 85.306 24.000  0.000  0.931  0.896  0.092  0.065

1.2 Depuracion

mi_hs <- modindices(ajuste_hs)

head(mi_hs[order(-mi_hs$mi), ], 5)
##        lhs op rhs     mi    epc sepc.lv sepc.all sepc.nox
## 30  visual =~  x9 36.411  0.577   0.519    0.515    0.515
## 76      x7 ~~  x8 34.145  0.536   0.536    0.859    0.859
## 28  visual =~  x7 18.631 -0.422  -0.380   -0.349   -0.349
## 78      x8 ~~  x9 14.946 -0.423  -0.423   -0.805   -0.805
## 33 textual =~  x3  9.151 -0.272  -0.269   -0.238   -0.238
modelo_hs2 <- '
  visual  =~ x1 + x2 + x3 + x9
  textual =~ x4 + x5 + x6
  speed   =~ x7 + x8 + x9
'

ajuste_hs2 <- cfa(modelo_hs2, data = datos_hs)

fitMeasures(ajuste_hs2, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 52.382 23.000  0.000  0.967  0.948  0.065  0.045

1.3 Conclusiones

Afirmacion: la estructura de tres factores del estudio de Holzinger y Swineford se sostiene, pero necesita un ajuste en el item x9 para tener un ajuste aceptable. Razon: el modelo original trata cada item como si midiera un solo factor, cuando en la practica el item x9 comparte varianza con la habilidad visual ademas de la de velocidad, y esa restriccion de mas es lo que estaba deteriorando el ajuste. Evidencia: el modelo inicial dio CFI de 0.931, TLI de 0.896 y RMSEA de 0.092, todos fuera de los criterios recomendados, y el indice de modificacion mas alto (36.4) apuntaba justamente a que x9 cargara en visual. Al liberar ese parametro el chi cuadrada bajo de 85.3 a 52.4 y los indices pasaron a CFI de 0.967, TLI de 0.948 y RMSEA de 0.065, ya dentro de lo aceptable.

Ejercicio 2. Democracia Politica e Industrializacion

2.1 El modelo

datos_pd <- PoliticalDemocracy

modelo_pd <- '
  # modelo de medicion
  ind60 =~ x1 + x2 + x3
  dem60 =~ y1 + y2 + y3 + y4
  dem65 =~ y5 + y6 + y7 + y8

  # modelo estructural
  dem60 ~ ind60
  dem65 ~ ind60 + dem60

  # errores correlacionados: son los mismos indicadores medidos dos veces
  y1 ~~ y5
  y2 ~~ y4 + y6
  y3 ~~ y7
  y4 ~~ y8
  y6 ~~ y8
'

ajuste_pd <- sem(modelo_pd, data = datos_pd)

summary(ajuste_pd, fit.measures = TRUE, standardized = TRUE)
## lavaan 0.7-2 ended normally after 68 iterations
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                        31
## 
##   Number of observations                            75
## 
## Model Test User Model:
##                                                       
##   Test statistic                                38.125
##   Degrees of freedom                                35
##   P-value (Chi-square)                           0.329
## 
## Model Test Baseline Model:
## 
##   Test statistic                               730.654
##   Degrees of freedom                                55
##   P-value                                        0.000
## 
## User Model versus Baseline Model:
## 
##   Comparative Fit Index (CFI)                    0.995
##   Tucker-Lewis Index (TLI)                       0.993
## 
## Loglikelihood and Information Criteria:
## 
##   Loglikelihood user model (H0)              -1547.791
##   Loglikelihood unrestricted model (H1)      -1528.728
##                                                       
##   Akaike (AIC)                                3157.582
##   Bayesian (BIC)                              3229.424
##   Sample-size adjusted Bayesian (SABIC)       3131.720
## 
## Root Mean Square Error of Approximation:
## 
##   RMSEA                                          0.035
##   90 Percent confidence interval - lower         0.000
##   90 Percent confidence interval - upper         0.092
##   P-value H_0: RMSEA <= 0.050                    0.611
##   P-value H_0: RMSEA >= 0.080                    0.114
## 
## Standardized Root Mean Square Residual:
## 
##   SRMR                                           0.044
## 
## Goodness of Fit Index:
## 
##   Goodness of Fit Index (GFI)                    1.000
##   90 Percent confidence interval - lower         0.959
##   90 Percent confidence interval - upper         1.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
##   ind60 =~                                                              
##     x1                1.000                               0.670    0.920
##     x2                2.180    0.139   15.742    0.000    1.460    0.973
##     x3                1.819    0.152   11.967    0.000    1.218    0.872
##   dem60 =~                                                              
##     y1                1.000                               2.223    0.850
##     y2                1.257    0.182    6.889    0.000    2.794    0.717
##     y3                1.058    0.151    6.987    0.000    2.351    0.722
##     y4                1.265    0.145    8.722    0.000    2.812    0.846
##   dem65 =~                                                              
##     y5                1.000                               2.103    0.808
##     y6                1.186    0.169    7.024    0.000    2.493    0.746
##     y7                1.280    0.160    8.002    0.000    2.691    0.824
##     y8                1.266    0.158    8.007    0.000    2.662    0.828
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   dem60 ~                                                               
##     ind60             1.483    0.399    3.715    0.000    0.447    0.447
##   dem65 ~                                                               
##     ind60             0.572    0.221    2.586    0.010    0.182    0.182
##     dem60             0.837    0.098    8.514    0.000    0.885    0.885
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##  .y1 ~~                                                                 
##    .y5                0.624    0.358    1.741    0.082    0.624    0.296
##  .y2 ~~                                                                 
##    .y4                1.313    0.702    1.871    0.061    1.313    0.273
##    .y6                2.153    0.734    2.934    0.003    2.153    0.356
##  .y3 ~~                                                                 
##    .y7                0.795    0.608    1.308    0.191    0.795    0.191
##  .y4 ~~                                                                 
##    .y8                0.348    0.442    0.787    0.431    0.348    0.109
##  .y6 ~~                                                                 
##    .y8                1.356    0.568    2.386    0.017    1.356    0.338
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .x1                0.082    0.019    4.184    0.000    0.082    0.154
##    .x2                0.120    0.070    1.718    0.086    0.120    0.053
##    .x3                0.467    0.090    5.177    0.000    0.467    0.239
##    .y1                1.891    0.444    4.256    0.000    1.891    0.277
##    .y2                7.373    1.374    5.366    0.000    7.373    0.486
##    .y3                5.067    0.952    5.324    0.000    5.067    0.478
##    .y4                3.148    0.739    4.261    0.000    3.148    0.285
##    .y5                2.351    0.480    4.895    0.000    2.351    0.347
##    .y6                4.954    0.914    5.419    0.000    4.954    0.443
##    .y7                3.431    0.713    4.814    0.000    3.431    0.322
##    .y8                3.254    0.695    4.685    0.000    3.254    0.315
##     ind60             0.448    0.087    5.173    0.000    1.000    1.000
##    .dem60             3.956    0.921    4.295    0.000    0.800    0.800
##    .dem65             0.172    0.215    0.803    0.422    0.039    0.039
fitMeasures(ajuste_pd, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 38.125 35.000  0.329  0.995  0.993  0.035  0.044

2.2 Efectos estructurales

resultado_pd <- standardizedSolution(ajuste_pd)

resultado_pd[resultado_pd$op == "~", ]
##      lhs op   rhs est.std    se      z pvalue ci.lower ci.upper
## 12 dem60  ~ ind60   0.447 0.103  4.323   0.00    0.244    0.649
## 13 dem65  ~ ind60   0.182 0.070  2.587   0.01    0.044    0.320
## 14 dem65  ~ dem60   0.885 0.051 17.405   0.00    0.786    0.985

2.3 Conclusiones

Afirmacion: la industrializacion de 1960 si influye en el nivel de democracia politica, pero su efecto sobre 1965 es casi todo indirecto: lo que mas explica la democracia de 1965 es la democracia que ya habia en 1960. Razon: las instituciones democraticas son estables en el tiempo, asi que un pais que ya era democratico tiende a seguir siendolo, mientras que la industrializacion actua mas como una condicion de fondo que empuja el nivel inicial. Evidencia: el coeficiente estandarizado de dem60 sobre dem65 es de 0.885, muy por encima del efecto directo de ind60 sobre dem65 que es de apenas 0.182, mientras que ind60 sobre dem60 es de 0.447. El modelo ajusta muy bien: chi cuadrada de 38.1 con 35 grados de libertad y un valor p de 0.329, que al no ser significativo indica que el modelo no se separa de los datos, ademas de CFI de 0.995, TLI de 0.993 y RMSEA de 0.035.

Ejercicio 3. Bienestar de los Colaboradores

3.0 Cargar los datos

archivo <- list.files(pattern = "SEM.*\\.xlsx$")
archivo <- archivo[!grepl("^~\\$", archivo)]

print(archivo)
## [1] "Actividad 3 SEM Data (1).xlsx" "Actividad 3 SEM Data (2).xlsx"
## [3] "Actividad 3 SEM Data.xlsx"
datos <- read_excel(archivo[1])

names(datos) <- trimws(names(datos))

datos <- as.data.frame(datos)

print(nrow(datos))
## [1] 223
print(names(datos))
##  [1] "ID"    "GEN"   "EXPER" "EDAD"  "RPD01" "RPD02" "RPD03" "RPD05" "RPD06"
## [10] "RPD07" "RPD08" "RPD09" "RPD10" "RRE02" "RRE03" "RRE04" "RRE05" "RRE06"
## [19] "RRE07" "RRE10" "RMA02" "RMA03" "RMA04" "RMA05" "RMA06" "RMA07" "RMA08"
## [28] "RMA09" "RMA10" "RCO02" "RCO03" "RCO04" "RCO05" "RCO06" "RCO07" "EN01" 
## [37] "EN02"  "EN04"  "EN05"  "EN06"  "EN07"  "EN08"  "EVI01" "EVI02" "EVI03"
## [46] "EDE01" "EDE02" "EDE03" "EAB01" "EAB02" "EAB03"

Parte 1. Analisis factorial confirmatorio de segundo orden

modelo_rec <- '
  desapego   =~ RPD01 + RPD02 + RPD03 + RPD05 + RPD06 + RPD07 + RPD08 + RPD09 + RPD10
  relajacion =~ RRE02 + RRE03 + RRE04 + RRE05 + RRE06 + RRE07 + RRE10
  maestria   =~ RMA02 + RMA03 + RMA04 + RMA05 + RMA06 + RMA07 + RMA08 + RMA09 + RMA10
  control    =~ RCO02 + RCO03 + RCO04 + RCO05 + RCO06 + RCO07

  recuperacion =~ desapego + relajacion + maestria + control
'

ajuste_rec <- cfa(modelo_rec, data = datos)

fitMeasures(ajuste_rec, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##    chisq       df   pvalue      cfi      tli    rmsea     srmr 
## 1221.031  430.000    0.000    0.888    0.879    0.091    0.075

Depuracion

cargas <- standardizedSolution(ajuste_rec)
cargas <- cargas[cargas$op == "=~", c("lhs", "rhs", "est.std")]

head(cargas[order(cargas$est.std), ], 10)
##             lhs      rhs est.std
## 21     maestria    RMA06   0.579
## 34 recuperacion maestria   0.603
## 16   relajacion    RRE10   0.698
## 32 recuperacion desapego   0.713
## 17     maestria    RMA02   0.730
## 5      desapego    RPD06   0.745
## 1      desapego    RPD01   0.788
## 3      desapego    RPD03   0.797
## 25     maestria    RMA10   0.798
## 18     maestria    RMA03   0.800
mi_rec <- modindices(ajuste_rec)
mi_rec <- mi_rec[mi_rec$op == "~~", ]

head(mi_rec[order(-mi_rec$mi), c("lhs", "rhs", "mi")], 8)
##       lhs   rhs      mi
## 311 RPD06 RPD08 109.338
## 385 RPD09 RPD10  96.902
## 556 RMA02 RMA03  47.245
## 229 RPD02 RPD07  40.479
## 430 RRE02 RRE03  34.218
## 471 RRE04 RRE05  30.999
## 508 RRE06 RRE07  29.815
## 232 RPD02 RPD10  20.910
modelo_rec2 <- '
  desapego   =~ RPD03 + RPD05 + RPD07 + RPD09
  relajacion =~ RRE02 + RRE04 + RRE05 + RRE07
  maestria   =~ RMA04 + RMA05 + RMA07 + RMA08
  control    =~ RCO03 + RCO04 + RCO05 + RCO06

  recuperacion =~ desapego + relajacion + maestria + control
'

ajuste_rec2 <- cfa(modelo_rec2, data = datos)

fitMeasures(ajuste_rec2, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##   chisq      df  pvalue     cfi     tli   rmsea    srmr 
## 165.376 100.000   0.000   0.979   0.975   0.054   0.053
cargas2 <- standardizedSolution(ajuste_rec2)

cargas2[cargas2$op == "=~", c("lhs", "rhs", "est.std")]
##             lhs        rhs est.std
## 1      desapego      RPD03   0.824
## 2      desapego      RPD05   0.917
## 3      desapego      RPD07   0.820
## 4      desapego      RPD09   0.823
## 5    relajacion      RRE02   0.831
## 6    relajacion      RRE04   0.903
## 7    relajacion      RRE05   0.938
## 8    relajacion      RRE07   0.780
## 9      maestria      RMA04   0.875
## 10     maestria      RMA05   0.847
## 11     maestria      RMA07   0.885
## 12     maestria      RMA08   0.868
## 13      control      RCO03   0.909
## 14      control      RCO04   0.888
## 15      control      RCO05   0.924
## 16      control      RCO06   0.867
## 17 recuperacion   desapego   0.720
## 18 recuperacion relajacion   0.875
## 19 recuperacion   maestria   0.545
## 20 recuperacion    control   0.810

Parte 2. Analisis factorial confirmatorio de energia recuperada

modelo_ene <- '
  energia =~ EN01 + EN02 + EN04 + EN05 + EN06 + EN07 + EN08
'

ajuste_ene <- cfa(modelo_ene, data = datos)

fitMeasures(ajuste_ene, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
## 47.222 14.000  0.000  0.986  0.978  0.103  0.012
standardizedSolution(ajuste_ene)[1:7, c("rhs", "est.std")]
##    rhs est.std
## 1 EN01   0.893
## 2 EN02   0.933
## 3 EN04   0.924
## 4 EN05   0.939
## 5 EN06   0.940
## 6 EN07   0.928
## 7 EN08   0.946
mi_ene <- modindices(ajuste_ene)
mi_ene <- mi_ene[mi_ene$op == "~~", ]

head(mi_ene[order(-mi_ene$mi), c("lhs", "rhs", "mi")], 5)
##     lhs  rhs     mi
## 25 EN02 EN07 11.977
## 30 EN04 EN08 11.122
## 34 EN06 EN07  9.621
## 22 EN02 EN04  9.477
## 16 EN01 EN02  5.065

Depuracion

modelo_ene2 <- '
  energia =~ EN04 + EN05 + EN06 + EN08
'

ajuste_ene2 <- cfa(modelo_ene2, data = datos)

fitMeasures(ajuste_ene2, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##  chisq     df pvalue    cfi    tli  rmsea   srmr 
##  3.165  2.000  0.205  0.999  0.997  0.051  0.005

Parte 3. Analisis de senderos con mediacion

datos$REC <- rowMeans(datos[, c("RPD03", "RPD05", "RPD07", "RPD09",
                                "RRE02", "RRE04", "RRE05", "RRE07",
                                "RMA04", "RMA05", "RMA07", "RMA08",
                                "RCO03", "RCO04", "RCO05", "RCO06")])

datos$ENE <- rowMeans(datos[, c("EN04", "EN05", "EN06", "EN08")])

datos$ENG <- rowMeans(datos[, c("EVI01", "EVI02", "EVI03",
                                "EDE01", "EDE02", "EDE03",
                                "EAB01", "EAB02", "EAB03")])
modelo_sendero <- '
  ENE ~ a*REC
  ENG ~ b*ENE + c*REC

  indirecto := a*b
  total     := c + a*b
'

ajuste_sendero <- sem(modelo_sendero, data = datos, se = "bootstrap", bootstrap = 1000)

summary(ajuste_sendero, standardized = TRUE)
## lavaan 0.7-2 ended normally after 1 iteration
## 
##   Estimator                                         ML
##   Optimization method                           NLMINB
##   Number of model parameters                         5
## 
##   Number of observations                           223
## 
## Model Test User Model:
##                                                       
##   Test statistic                                 0.000
##   Degrees of freedom                                 0
## 
## Parameter Estimates:
## 
##   Standard errors                            Bootstrap
##   Number of requested bootstrap draws             1000
##   Number of successful bootstrap draws            1000
## 
## Regressions:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##   ENE ~                                                                 
##     REC        (a)    1.031    0.061   16.787    0.000    1.031    0.747
##   ENG ~                                                                 
##     ENE        (b)    0.390    0.080    4.859    0.000    0.390    0.451
##     REC        (c)    0.245    0.105    2.345    0.019    0.245    0.206
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##    .ENE               1.290    0.127   10.134    0.000    1.290    0.442
##    .ENG               1.345    0.189    7.130    0.000    1.345    0.616
## 
## Defined Parameters:
##                    Estimate  Std.Err  z-value  P(>|z|)   Std.lv  Std.all
##     indirecto         0.402    0.086    4.684    0.000    0.402    0.337
##     total             0.647    0.085    7.596    0.000    0.647    0.543
parameterEstimates(ajuste_sendero, standardized = TRUE)[, c("lhs", "op", "rhs", "est", "se", "pvalue", "std.all")]
##         lhs op   rhs   est    se pvalue std.all
## 1       ENE  ~   REC 1.031 0.061  0.000   0.747
## 2       ENG  ~   ENE 0.390 0.080  0.000   0.451
## 3       ENG  ~   REC 0.245 0.105  0.019   0.206
## 4       ENE ~~   ENE 1.290 0.127  0.000   0.442
## 5       ENG ~~   ENG 1.345 0.189  0.000   0.616
## 6       REC ~~   REC 1.535 0.000     NA   1.000
## 7 indirecto :=   a*b 0.402 0.086  0.000   0.337
## 8     total := c+a*b 0.647 0.085  0.000   0.543

Parte 4. Modelo de medicion

modelo_medicion <- '
  # experiencias de recuperacion, segundo orden
  desapego   =~ RPD03 + RPD05 + RPD07 + RPD09
  relajacion =~ RRE02 + RRE04 + RRE05 + RRE07
  maestria   =~ RMA04 + RMA05 + RMA07 + RMA08
  control    =~ RCO03 + RCO04 + RCO05 + RCO06
  recuperacion =~ desapego + relajacion + maestria + control

  # energia recuperada
  energia =~ EN04 + EN05 + EN06 + EN08

  # engagement, segundo orden
  vigor      =~ EVI01 + EVI02 + EVI03
  dedicacion =~ EDE01 + EDE02 + EDE03
  absorcion  =~ EAB01 + EAB02 + EAB03
  engagement =~ vigor + dedicacion + absorcion

  # estructural
  energia    ~ a*recuperacion
  engagement ~ b*energia + c*recuperacion

  indirecto := a*b
  total     := c + a*b
'

ajuste_medicion <- sem(modelo_medicion, data = datos)

fitMeasures(ajuste_medicion, c("chisq", "df", "pvalue", "cfi", "tli", "rmsea", "srmr"))
##   chisq      df  pvalue     cfi     tli   rmsea    srmr 
## 864.747 367.000   0.000   0.928   0.921   0.078   0.064
estimados <- parameterEstimates(ajuste_medicion, standardized = TRUE)

estimados[estimados$op %in% c("~", ":="), c("lhs", "op", "rhs", "est", "se", "pvalue", "std.all")]
##           lhs op          rhs   est    se pvalue std.all
## 37    energia  ~ recuperacion 1.139 0.124   0.00   0.813
## 38 engagement  ~      energia 0.397 0.105   0.00   0.434
## 39 engagement  ~ recuperacion 0.320 0.156   0.04   0.250
## 79  indirecto :=          a*b 0.452 0.126   0.00   0.353
## 80      total :=        c+a*b 0.772 0.108   0.00   0.604
segundo_orden <- standardizedSolution(ajuste_medicion)
segundo_orden <- segundo_orden[segundo_orden$op == "=~", ]

segundo_orden[segundo_orden$lhs %in% c("recuperacion", "engagement"), c("lhs", "rhs", "est.std")]
##             lhs        rhs est.std
## 17 recuperacion   desapego   0.724
## 18 recuperacion relajacion   0.805
## 19 recuperacion   maestria   0.594
## 20 recuperacion    control   0.846
## 34   engagement      vigor   0.899
## 35   engagement dedicacion   0.987
## 36   engagement  absorcion   0.904

3.5 Conclusiones

Afirmacion: las experiencias de recuperacion influyen en el engagement laboral principalmente a traves de la energia recuperada, con una mediacion parcial, y la estructura de medicion de los tres constructos se sostiene una vez depurada. Razon: desconectarse del trabajo, relajarse, hacer actividades retadoras y decidir sobre el propio tiempo libre no impactan el engagement por si solos, sino en la medida en que efectivamente le devuelven energia al colaborador; esa energia es la que despues se traduce en vigor, dedicacion y absorcion en el trabajo. Evidencia: en el modelo de senderos el efecto indirecto estandarizado es de 0.337 contra un efecto directo de 0.206, y en el modelo de medicion con latentes el patron se repite con 0.353 de indirecto contra 0.250 de directo, ambos significativos. El modelo de medicion completo alcanza CFI de 0.928, TLI de 0.921, RMSEA de 0.078 y SRMR de 0.064, un ajuste aceptable considerando que tiene 367 grados de libertad. En el segundo orden de recuperacion, la dimension que menos aporta es maestria (0.594) y la que mas, control (0.846), mientras que en engagement las tres dimensiones cargan muy alto, entre 0.899 y 0.987.

Ejercicio 4. Behson, Eddy y Lorenzet (2000)

4.1 Comparacion de los dos modelos

Indicador Modelo 1 (tres etapas) Modelo 2 (dos etapas)
Chi cuadrada 124.25 (25 gl) 12.09 (3 gl)
GFI 0.91 0.99
CFI 0.89 0.98
RMSEA 0.14 0.16
Caminos significativos 12 de 14 7 de 15
Varianza en satisfaccion 0.42 0.37
Varianza en motivacion 0.38 0.32
AIC 294.48 80.09
CAIC 446.29 227.56

4.2 Conclusiones

Afirmacion: los autores eligieron el Modelo 1 porque un modelo se evalua por su coherencia teorica y por la utilidad de lo que estima, no nada mas por sus indices de ajuste. Razon: el Modelo 2 ajusta mejor pero es un modelo mas simple y con coeficientes que contradicen decadas de teoria sobre diseƱo del trabajo, mientras que el Modelo 1 reproduce el mecanismo que la teoria propone, donde los estados psicologicos son el nucleo causal del modelo. Evidencia: aunque el Modelo 2 saca mejor GFI (0.99 contra 0.91), mejor CFI (0.98 contra 0.89) y menor AIC (80.09 contra 294.48), ocho de sus nueve caminos hacia los resultados salen no significativos, explica menos varianza en dos de las tres variables dependientes y tiene peor RMSEA (0.16 contra 0.14).