Teoría

Los Modelos de Ecuaciones Estructurales (SEM) es una técnica de análisis de estadística multivariada, que permite analizar patrones complejos de relaciones entre variables, realizar comparaciones entre e intragrupos, y validar modelos teóricos y empíricos.

Ejemplo 1. Estudio de Holzinger y Swineford (1939)

Contexto

Holzinger y Swineford realizaron exámenes de habilidad mental a adolescentes de 7° y 8° de dos escuelas (Pasteur y Grand-White).

La base de datos está incluida como paquete en R, e incluye las siguientes columnas:

  • sex: Género (1=male, 2=female)
  • x1: Percepción visual
  • x2: Juego con cubos
  • x3: Juego con pastillas/espacial
  • x4: Comprensión de párrafos
  • x5: Completar oraciones
  • x6: Significado de palabras
  • x7: Sumas aceleradas
  • x8: Conteo acelerado de puntos
  • x9: Disciminación acelerada de mayúsculas rectas y curvas.

Se busca identificar las relaciones entre las habilidades visual (x1, x2, x3), textual (x4, x5, x6) y velocidad (x7, x8, x9) de los adolescentes.

Instalar paquetes y llamar librerías

# install.packages("lavaan")
library(lavaan)
## This is lavaan 0.6-17
## lavaan is FREE software! Please report any bugs.
# install.packages("lavaanPlot")
library(lavaanPlot)
# Lavaan = Latent variable analysis 

Importar la base de datos

df1 <- HolzingerSwineford1939

Entender la base de datos

summary(df1)
##        id             sex            ageyr        agemo       
##  Min.   :  1.0   Min.   :1.000   Min.   :11   Min.   : 0.000  
##  1st Qu.: 82.0   1st Qu.:1.000   1st Qu.:12   1st Qu.: 2.000  
##  Median :163.0   Median :2.000   Median :13   Median : 5.000  
##  Mean   :176.6   Mean   :1.515   Mean   :13   Mean   : 5.375  
##  3rd Qu.:272.0   3rd Qu.:2.000   3rd Qu.:14   3rd Qu.: 8.000  
##  Max.   :351.0   Max.   :2.000   Max.   :16   Max.   :11.000  
##                                                               
##          school        grade             x1               x2       
##  Grant-White:145   Min.   :7.000   Min.   :0.6667   Min.   :2.250  
##  Pasteur    :156   1st Qu.:7.000   1st Qu.:4.1667   1st Qu.:5.250  
##                    Median :7.000   Median :5.0000   Median :6.000  
##                    Mean   :7.477   Mean   :4.9358   Mean   :6.088  
##                    3rd Qu.:8.000   3rd Qu.:5.6667   3rd Qu.:6.750  
##                    Max.   :8.000   Max.   :8.5000   Max.   :9.250  
##                    NA's   :1                                       
##        x3              x4              x5              x6        
##  Min.   :0.250   Min.   :0.000   Min.   :1.000   Min.   :0.1429  
##  1st Qu.:1.375   1st Qu.:2.333   1st Qu.:3.500   1st Qu.:1.4286  
##  Median :2.125   Median :3.000   Median :4.500   Median :2.0000  
##  Mean   :2.250   Mean   :3.061   Mean   :4.341   Mean   :2.1856  
##  3rd Qu.:3.125   3rd Qu.:3.667   3rd Qu.:5.250   3rd Qu.:2.7143  
##  Max.   :4.500   Max.   :6.333   Max.   :7.000   Max.   :6.1429  
##                                                                  
##        x7              x8               x9       
##  Min.   :1.304   Min.   : 3.050   Min.   :2.778  
##  1st Qu.:3.478   1st Qu.: 4.850   1st Qu.:4.750  
##  Median :4.087   Median : 5.500   Median :5.417  
##  Mean   :4.186   Mean   : 5.527   Mean   :5.374  
##  3rd Qu.:4.913   3rd Qu.: 6.100   3rd Qu.:6.083  
##  Max.   :7.435   Max.   :10.000   Max.   :9.250  
## 
str(df1)
## 'data.frame':    301 obs. of  15 variables:
##  $ id    : int  1 2 3 4 5 6 7 8 9 11 ...
##  $ sex   : int  1 2 2 1 2 2 1 2 2 2 ...
##  $ ageyr : int  13 13 13 13 12 14 12 12 13 12 ...
##  $ agemo : int  1 7 1 2 2 1 1 2 0 5 ...
##  $ school: Factor w/ 2 levels "Grant-White",..: 2 2 2 2 2 2 2 2 2 2 ...
##  $ grade : int  7 7 7 7 7 7 7 7 7 7 ...
##  $ x1    : num  3.33 5.33 4.5 5.33 4.83 ...
##  $ x2    : num  7.75 5.25 5.25 7.75 4.75 5 6 6.25 5.75 5.25 ...
##  $ x3    : num  0.375 2.125 1.875 3 0.875 ...
##  $ x4    : num  2.33 1.67 1 2.67 2.67 ...
##  $ x5    : num  5.75 3 1.75 4.5 4 3 6 4.25 5.75 5 ...
##  $ x6    : num  1.286 1.286 0.429 2.429 2.571 ...
##  $ x7    : num  3.39 3.78 3.26 3 3.7 ...
##  $ x8    : num  5.75 6.25 3.9 5.3 6.3 6.65 6.2 5.15 4.65 4.55 ...
##  $ x9    : num  6.36 7.92 4.42 4.86 5.92 ...

Tipos de Fórmulas

  1. Regresion (~) Variable que depende de otras.
  2. Variables latentes (=~) No se observa, se infiere.
  3. Varianzas y covarianzas (~~) Relaciones entre variables latentes y observada (Varianza entre sí misma, Covarianza entre otras).
  4. Intercepto (~1) Valor esperado cuando las demás variables son cero.

Estructurar el modelo

modelo1  <- ' # Regresiones
            # Variables Latentes
            visual =~ x1 + x2 + x3
            textual =~ x4 + x5 + x6
            velocidad =~ x7 + x8 + x9
            # Varianzas y Covarianzas
            # Intercepto
            '

Generar el Análisis Factorial Confirmatorio (CFA)

fit <- cfa(modelo1, df1)
summary(fit)
## lavaan 0.6.17 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
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual =~                                           
##     x1                1.000                           
##     x2                0.554    0.100    5.554    0.000
##     x3                0.729    0.109    6.685    0.000
##   textual =~                                          
##     x4                1.000                           
##     x5                1.113    0.065   17.014    0.000
##     x6                0.926    0.055   16.703    0.000
##   velocidad =~                                        
##     x7                1.000                           
##     x8                1.180    0.165    7.152    0.000
##     x9                1.082    0.151    7.155    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual ~~                                           
##     textual           0.408    0.074    5.552    0.000
##     velocidad         0.262    0.056    4.660    0.000
##   textual ~~                                          
##     velocidad         0.173    0.049    3.518    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .x1                0.549    0.114    4.833    0.000
##    .x2                1.134    0.102   11.146    0.000
##    .x3                0.844    0.091    9.317    0.000
##    .x4                0.371    0.048    7.779    0.000
##    .x5                0.446    0.058    7.642    0.000
##    .x6                0.356    0.043    8.277    0.000
##    .x7                0.799    0.081    9.823    0.000
##    .x8                0.488    0.074    6.573    0.000
##    .x9                0.566    0.071    8.003    0.000
##     visual            0.809    0.145    5.564    0.000
##     textual           0.979    0.112    8.737    0.000
##     velocidad         0.384    0.086    4.451    0.000
lavaanPlot(fit, coef= TRUE, cov=TRUE)
fit_senderos <- sem(modelo1, data = df1)
summary(fit_senderos)
## lavaan 0.6.17 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
## 
## Parameter Estimates:
## 
##   Standard errors                             Standard
##   Information                                 Expected
##   Information saturated (h1) model          Structured
## 
## Latent Variables:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual =~                                           
##     x1                1.000                           
##     x2                0.554    0.100    5.554    0.000
##     x3                0.729    0.109    6.685    0.000
##   textual =~                                          
##     x4                1.000                           
##     x5                1.113    0.065   17.014    0.000
##     x6                0.926    0.055   16.703    0.000
##   velocidad =~                                        
##     x7                1.000                           
##     x8                1.180    0.165    7.152    0.000
##     x9                1.082    0.151    7.155    0.000
## 
## Covariances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##   visual ~~                                           
##     textual           0.408    0.074    5.552    0.000
##     velocidad         0.262    0.056    4.660    0.000
##   textual ~~                                          
##     velocidad         0.173    0.049    3.518    0.000
## 
## Variances:
##                    Estimate  Std.Err  z-value  P(>|z|)
##    .x1                0.549    0.114    4.833    0.000
##    .x2                1.134    0.102   11.146    0.000
##    .x3                0.844    0.091    9.317    0.000
##    .x4                0.371    0.048    7.779    0.000
##    .x5                0.446    0.058    7.642    0.000
##    .x6                0.356    0.043    8.277    0.000
##    .x7                0.799    0.081    9.823    0.000
##    .x8                0.488    0.074    6.573    0.000
##    .x9                0.566    0.071    8.003    0.000
##     visual            0.809    0.145    5.564    0.000
##     textual           0.979    0.112    8.737    0.000
##     velocidad         0.384    0.086    4.451    0.000
lavaanPlot(fit_senderos, coef= TRUE, cov=TRUE)

Ejercicio 2: Democracia Política e Industrialización

Contexto

La base de datos contiene distintas mediciones sobre la democracia política e industrialización en pa+íses en desarrollo durante 1960 y 1965.

La tabla incluye los siguientes datos:

  • y1: Calificaciones sobre libertad de prensa en 1960
  • y2: Libertad de la oposición política en 1960
  • y3: Imparcialidad de elecciones en 1960
  • y4: Eficacia de la legislatura electa en 1960
  • y5: Calificaciones sobre libertad de prensa en 1965
  • y6: Libertad de la oposición política en 1965
  • y7: Imparcialidad de elecciones en 1965
  • y8: Eficacia de la legislatura electa en 1965
  • x1: PIB per cápita en 1960
  • x2: Consumo de energía inanimada per cápita en 1960
  • x3: Porcentaje de la fuerza laboral en la industria en 1960

Importar la base de datos

df2 <- PoliticalDemocracy
LS0tDQp0aXRsZTogIk1vZGVsb3MgZGUgRWN1YWNpb25lcyBFc3RydWN0dXJhbGVzIg0KYXV0aG9yOiAiUmF1bCBDYW50dSAtIEEwMTA4NzY4MyINCmRhdGU6ICIyMDI0LTAyLTIyIg0Kb3V0cHV0OiANCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IFRSVUUNCiAgICB0b2NfZmxvYXQ6IFRSVUUNCiAgICBjb2RlX2Rvd25sb2FkOiBUUlVFDQogICAgdGhlbWU6IHlldGkNCi0tLQ0KDQohW10oQzpcXFVzZXJzXFxyYXVsY1xcT25lRHJpdmVcXEVzY3JpdG9yaW9cXGVzY3VlbGEuZ2lmKQ0KDQojIFRlb3LDrWENCkxvcyAqKk1vZGVsb3MgZGUgRWN1YWNpb25lcyBFc3RydWN0dXJhbGVzIChTRU0pKiogZXMgdW5hIHTDqWNuaWNhIGRlIGFuw6FsaXNpcyBkZSBlc3RhZMOtc3RpY2EgbXVsdGl2YXJpYWRhLCBxdWUgcGVybWl0ZSBhbmFsaXphciBwYXRyb25lcyBjb21wbGVqb3MgZGUgcmVsYWNpb25lcyBlbnRyZSB2YXJpYWJsZXMsIHJlYWxpemFyIGNvbXBhcmFjaW9uZXMgZW50cmUgZSBpbnRyYWdydXBvcywgeSB2YWxpZGFyIG1vZGVsb3MgdGXDs3JpY29zIHkgZW1ww61yaWNvcy4NCg0KIyBFamVtcGxvIDEuIEVzdHVkaW8gZGUgSG9semluZ2VyIHkgU3dpbmVmb3JkICgxOTM5KQ0KDQojIyBDb250ZXh0byANCkhvbHppbmdlciB5IFN3aW5lZm9yZCByZWFsaXphcm9uIGV4w6FtZW5lcyBkZSBoYWJpbGlkYWQgbWVudGFsIGEgYWRvbGVzY2VudGVzIGRlIDfCsCB5IDjCsCBkZSBkb3MgZXNjdWVsYXMgKFBhc3RldXIgeSBHcmFuZC1XaGl0ZSkuICANCg0KTGEgYmFzZSBkZSBkYXRvcyBlc3TDoSBpbmNsdWlkYSBjb21vIHBhcXVldGUgZW4gUiwgZSBpbmNsdXllIGxhcyBzaWd1aWVudGVzIGNvbHVtbmFzOiAgDQoNCiogc2V4OiBHw6luZXJvICgxPW1hbGUsIDI9ZmVtYWxlKSAgDQoqIHgxOiBQZXJjZXBjacOzbiB2aXN1YWwgIA0KKiB4MjogSnVlZ28gY29uIGN1Ym9zICANCiogeDM6IEp1ZWdvIGNvbiBwYXN0aWxsYXMvZXNwYWNpYWwgIA0KKiB4NDogQ29tcHJlbnNpw7NuIGRlIHDDoXJyYWZvcyAgDQoqIHg1OiBDb21wbGV0YXIgb3JhY2lvbmVzICANCiogeDY6IFNpZ25pZmljYWRvIGRlIHBhbGFicmFzICANCiogeDc6IFN1bWFzIGFjZWxlcmFkYXMgIA0KKiB4ODogQ29udGVvIGFjZWxlcmFkbyBkZSBwdW50b3MgIA0KKiB4OTogRGlzY2ltaW5hY2nDs24gYWNlbGVyYWRhIGRlIG1hecO6c2N1bGFzIHJlY3RhcyB5IGN1cnZhcy4gIA0KDQpTZSBidXNjYSBpZGVudGlmaWNhciBsYXMgcmVsYWNpb25lcyBlbnRyZSBsYXMgaGFiaWxpZGFkZXMgdmlzdWFsICh4MSwgeDIsIHgzKSwgdGV4dHVhbCAoeDQsIHg1LCB4NikgeSB2ZWxvY2lkYWQgKHg3LCB4OCwgeDkpIGRlIGxvcyBhZG9sZXNjZW50ZXMuDQoNCiMjIEluc3RhbGFyIHBhcXVldGVzIHkgbGxhbWFyIGxpYnJlcsOtYXMNCmBgYHtyfQ0KIyBpbnN0YWxsLnBhY2thZ2VzKCJsYXZhYW4iKQ0KbGlicmFyeShsYXZhYW4pDQojIGluc3RhbGwucGFja2FnZXMoImxhdmFhblBsb3QiKQ0KbGlicmFyeShsYXZhYW5QbG90KQ0KIyBMYXZhYW4gPSBMYXRlbnQgdmFyaWFibGUgYW5hbHlzaXMgDQpgYGANCg0KDQojIyBJbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zDQpgYGB7cn0NCmRmMSA8LSBIb2x6aW5nZXJTd2luZWZvcmQxOTM5DQpgYGANCg0KIyMgRW50ZW5kZXIgbGEgYmFzZSBkZSBkYXRvcw0KYGBge3J9DQpzdW1tYXJ5KGRmMSkNCnN0cihkZjEpDQpgYGANCg0KIyMgVGlwb3MgZGUgRsOzcm11bGFzDQoxLiBSZWdyZXNpb24gKH4pIFZhcmlhYmxlIHF1ZSBkZXBlbmRlIGRlIG90cmFzLg0KMi4gVmFyaWFibGVzIGxhdGVudGVzICg9fikgTm8gc2Ugb2JzZXJ2YSwgc2UgaW5maWVyZS4NCjMuIFZhcmlhbnphcyB5IGNvdmFyaWFuemFzICh+fikgUmVsYWNpb25lcyBlbnRyZSB2YXJpYWJsZXMgbGF0ZW50ZXMgeSBvYnNlcnZhZGEgKFZhcmlhbnphIGVudHJlIHPDrSBtaXNtYSwgQ292YXJpYW56YSBlbnRyZSBvdHJhcykuDQo0LiBJbnRlcmNlcHRvICh+MSkgVmFsb3IgZXNwZXJhZG8gY3VhbmRvIGxhcyBkZW3DoXMgdmFyaWFibGVzIHNvbiBjZXJvLg0KDQojIyBFc3RydWN0dXJhciBlbCBtb2RlbG8NCmBgYHtyfQ0KbW9kZWxvMSAgPC0gJyAjIFJlZ3Jlc2lvbmVzDQogICAgICAgICAgICAjIFZhcmlhYmxlcyBMYXRlbnRlcw0KICAgICAgICAgICAgdmlzdWFsID1+IHgxICsgeDIgKyB4Mw0KICAgICAgICAgICAgdGV4dHVhbCA9fiB4NCArIHg1ICsgeDYNCiAgICAgICAgICAgIHZlbG9jaWRhZCA9fiB4NyArIHg4ICsgeDkNCiAgICAgICAgICAgICMgVmFyaWFuemFzIHkgQ292YXJpYW56YXMNCiAgICAgICAgICAgICMgSW50ZXJjZXB0bw0KICAgICAgICAgICAgJw0KYGBgDQoNCiMjIEdlbmVyYXIgZWwgQW7DoWxpc2lzIEZhY3RvcmlhbCBDb25maXJtYXRvcmlvIChDRkEpDQpgYGB7cn0NCmZpdCA8LSBjZmEobW9kZWxvMSwgZGYxKQ0Kc3VtbWFyeShmaXQpDQpsYXZhYW5QbG90KGZpdCwgY29lZj0gVFJVRSwgY292PVRSVUUpDQoNCmZpdF9zZW5kZXJvcyA8LSBzZW0obW9kZWxvMSwgZGF0YSA9IGRmMSkNCnN1bW1hcnkoZml0X3NlbmRlcm9zKQ0KbGF2YWFuUGxvdChmaXRfc2VuZGVyb3MsIGNvZWY9IFRSVUUsIGNvdj1UUlVFKQ0KDQpgYGANCg0KIyBFamVyY2ljaW8gMjogRGVtb2NyYWNpYSBQb2zDrXRpY2EgZSBJbmR1c3RyaWFsaXphY2nDs24NCg0KIyMgQ29udGV4dG8NCkxhIGJhc2UgZGUgZGF0b3MgY29udGllbmUgZGlzdGludGFzIG1lZGljaW9uZXMgc29icmUgbGEgZGVtb2NyYWNpYSBwb2zDrXRpY2EgZSBpbmR1c3RyaWFsaXphY2nDs24gZW4gcGErw61zZXMgZW4gZGVzYXJyb2xsbyBkdXJhbnRlIDE5NjAgeSAxOTY1LiAgDQoNCkxhIHRhYmxhIGluY2x1eWUgbG9zIHNpZ3VpZW50ZXMgZGF0b3M6DQoNCiogeTE6IENhbGlmaWNhY2lvbmVzIHNvYnJlIGxpYmVydGFkIGRlIHByZW5zYSBlbiAxOTYwICANCiogeTI6IExpYmVydGFkIGRlIGxhIG9wb3NpY2nDs24gcG9sw610aWNhIGVuIDE5NjAgIA0KKiB5MzogSW1wYXJjaWFsaWRhZCBkZSBlbGVjY2lvbmVzIGVuIDE5NjAgIA0KKiB5NDogRWZpY2FjaWEgZGUgbGEgbGVnaXNsYXR1cmEgZWxlY3RhIGVuIDE5NjAgIA0KKiB5NTogQ2FsaWZpY2FjaW9uZXMgc29icmUgbGliZXJ0YWQgZGUgcHJlbnNhIGVuIDE5NjUgIA0KKiB5NjogTGliZXJ0YWQgZGUgbGEgb3Bvc2ljacOzbiBwb2zDrXRpY2EgZW4gMTk2NSAgDQoqIHk3OiBJbXBhcmNpYWxpZGFkIGRlIGVsZWNjaW9uZXMgZW4gMTk2NSAgDQoqIHk4OiBFZmljYWNpYSBkZSBsYSBsZWdpc2xhdHVyYSBlbGVjdGEgZW4gMTk2NSAgDQoqIHgxOiBQSUIgcGVyIGPDoXBpdGEgZW4gMTk2MCAgDQoqIHgyOiBDb25zdW1vIGRlIGVuZXJnw61hIGluYW5pbWFkYSBwZXIgY8OhcGl0YSBlbiAxOTYwICANCiogeDM6IFBvcmNlbnRhamUgZGUgbGEgZnVlcnphIGxhYm9yYWwgZW4gbGEgaW5kdXN0cmlhIGVuIDE5NjAgIA0KDQojIyBJbXBvcnRhciBsYSBiYXNlIGRlIGRhdG9zDQpgYGB7cn0NCmRmMiA8LSBQb2xpdGljYWxEZW1vY3JhY3kNCmBgYA0K