La librería lavaan permite contrastar modelos usando ecuaciones estructurales. En su página web tienes disponible toda la documentación y ejemplos http://lavaan.ugent.be/ de Structural Equation Modeling (SEM).

  • En este ejemplo se muestra el uso de lavaan para el contraste de hipótesis en un modelo de relaciones directas (EFECTOS DIRECTOS), entre variables medidas con escala (ítems) y como datos de entrada tenemos la MATRIZ DE CORRELACIONES entre esos ítems.

 

Cargamos la librería lavaan (solo usaremos esta en todo el ejemplo):

library( lavaan ) # Modelos de ecuaciones estructurales SEM


 

Modelo conceptual (Hipótesis)

Vamos a usar el paper de Gefen, Karahanna y Straub (2003) para ilustrar el uso de lavaan aplicado a un modelo de ecuaciones estructurales (SEM) sencillo. Iremos directamente a la práctica, sin comentar la teoría de los modelos de ecuaciones estructurales.

Queremos contrastar unas hipótesis basadas en relaciones directas entre varios constructos que se han medido en escalas o ítems. En la Figure 1 se muestran las relaciones del modelo.

 

 

FUENTE: Gefen, Karahanna y Straub (2003) Trust and TAM in online shopping: An integrated model, MIS Quarterly, vol.27.

 

Matriz de datos (datos de entrada)

Los modelos de ecuaciones estructurales se basan en la matriz de varianzas/covarianzas de las variables observadas. Sin embargo, para determinados objetivos de investigación, es posible usar la matriz de correlación.

  • El artículo que usamos de ejemplo Gefen et al (2003) aplica LISREL para hacer su modelo de ecuaciones estructurales, y solo tenemos disponible en el artículo la matriz de correlaciones de los ítems (variables observadas), sin sus desviaciones típicas. (Con la matriz de correlaciones y las desviaciones típicas podríamos calcular la matriz de covarianzas).

  • Por lo tanto usaremos la matriz de correlaciones como datos de entrada (La matriz de correlaciones de los datos sin tipificar ES la matriz de covarianzas de los datos tipificados).

  • Si tuviéramos la base de datos original, no haría falta hacer estos pasos, porque cualquier progama SEM obtiene la matriz de varianzas/covarianzas de forma automática.

 

  RECUERDA. Al estimar el modelo usando como datos de entrada la matriz de correlaciones los resultados que obtengamos no serán exactamente los publicados en Gefen et al (2003).

 

Cargamos nuestra matriz de correlaciones de los items (indicadores o variables observadas), y la asignamos al objeto data. Como es muy extensa, no la muestro entera. (En el código debes poner toda la matriz). En el Anexo la tienes completa para que practiques.

data <- '
1.0000
0.6066 1.0000
0.4735 0.6408 1.0000
0.1527 0.1514 0.1661 1.0000
0.1617 0.1649 0.1421 0.8543 1.0000
0.1713 0.1485 0.1090 0.7624 0.8386 1.0000
seguirias poniendo el resto de la matriz '

 

Obtener la matriz de correlación completa

La librería lavaan funciona con la matriz completa (la diagonal de arriba y la diagonal de abajo). Usamos la función getCov para convertir nuestra matriz de datos de entrada (la diagonal de abajo) en una matriz completa:

  • data: la matriz de correlaciones (la mitad de abajo de la diagonal de la matriz).

  • sds( ): las desviaciones típicas. Nosotros no las tenemos (si las tuviéramos, podríamos transformar la matriz de correlaciones en matriz de covarianzas).

  • names( ): los nombres de los items.

matriz.cov <- getCov( data,
                      sds = NULL,
                      names = c( "CB1", "CB2", "CB3", "EO1", "EO2", "EO3", "EO4", "EO5", "EO6", "FV1", "FV2", "FV3", "IB1", "IB2", "IB3", "IB4", "KB1", "KB2", "KB3", "KB4", "KB5", "KB6", "KB7", "PU1", "PU2", "PU3", "PU4", "PU5", "PU6", "SN1", "SN2", "SN3", "USE1", "USE2" ) )

 

Comprobamos que los nombres de las variables observadas están correctamente puestos en la matriz:

matriz.cov  # la salida no se muestra

 

 

Especificación del modelo

Es pasar el modelo conceptual (nuestro dibujo de las relaciones entre las variables) al modelo estructural y modelo de medida.

 

1. Modelo de medida

Hay que poner cómo se ha medido cada variable. La sintaxis en lavaan es:

  variable =~ item1 + item2 + item3

 

Tras hacer el oportuno CFA (no resuelto en este tutorial), los autores eliminan algunos items de sus escalas de medida y se quedan con los siguientes:

  • La variable Intended Use (Use) está formada por los ítems USE1 y USE2.

  • La variable Perceived Usefulness (PU) está formada por los ítems PU2, PU3, PU4, y PU6.

  • La variable Perceived Ease of Use (PEOU) está formada por los ítems EOU2, EOU3, EOU4, EOU5.

  • La variable Trust (Trust) está formada por los ítems KB1, KB2, KB3, KB5 y KB7.

  • La variable Structural Assurances (Assurances) está formada por los ítems IB1, IB2, IB3.

  • La variable Situational Normality (Normality) está formada por los ítems SN1 y SN2.

  • La variable Familiarity with the e-Vendor (Familiarity) está formada por los ítems FV2 y FV3.

  • La variable Calculative Based (Calculative) está formada por los ítems CB1, CB2 y CB3.

 

2. Modelo estructural

Son las relaciones entre nuestras variables (efectos directos, efectos indirectos -mediación-, interacciones -moderación-). Es trasladar las “flechas” de nuestro modelo a la sintaxis de lavaan. En nuestro caso solo tenemos efectos directos.

 

La sintaxis para los EFECTOS DIRECTOS es:

    variable dependiente ~ var.independiente1 + var.independiente2

De forma que se van sumando todas las variables independientes que tienen un efecto directo hacia la variable dependiente. Por ejemplo, Normality tiene un efecto directo sobre PEOU, Familiarity tiene un efecto directo sobre PEOU, quedaría: PEOU ~ Normality + Familiarity

 

La Especificación del modelo con la sintaxis de lavaan es:

modelo <- ' 
# modelo de medida
    Use =~ USE1 + USE2
    PU =~ PU2 + PU3 + PU4 + PU6
    PEOU =~ EO2 + EO3 + EO4 + EO5
    Trust =~ KB1 + KB2 + KB3 + KB5 + KB7
    Assurances =~ IB1 + IB2 + IB3
    Normality =~ SN1 + SN2
    Familiarity =~ FV2 + FV3
    Calculative =~ CB1 + CB2 + CB3

# modelo estructural
    Use ~ Trust + PEOU + PU
    PU ~ Trust + PEOU
    PEOU ~ Normality + Familiarity
    Trust ~ Calculative + Assurances + Normality + Familiarity + PEOU
  '

 

 

Estimación del modelo

 

1. Matriz de varianzas/covarianzas muestral

Este paso lo hemos explicado en el apartado de Matriz de datos. Básicamente consiste en decidir si como datos de entrada se usará la matriz de correlación o la matriz de covarianza. Según los objetivos de investigación se usará una u otra.

 

2. Método de estimación y solución

Estimación por el método de máxima verosimilitud (maximum likelihood ML). Se usa la función sem( ), que al usar como datos la matriz de covarianzas (sample.cov) hay que indicar el tamaño de la muestra (sample.nobs).

Creamos el objeto fit (u otro nombre que tú quieras). Es donde guarda lavaan los resultados de nuestro SEM.

fit <- sem( modelo, 
            sample.cov = matriz.cov, # datos de entrada
            sample.nobs = 213, # tamaño de la muestra n=213
            std.lv = TRUE,
            estimator = "ML") # método de máxima verosimilitud

 

Para mostrar la solución obtenida se pueden usar varias funciones. La función summary( ) proporciona los resultados para el test de la chi-cuadrado, los índices para el ajuste del modelo (RMSEA, CFI,…), los parámetros estimados, covarianzas, varianzas y R cuadrados.

summary( fit, 
         fit.measures = TRUE, # indices ajuste del modelo
         standardized = TRUE, 
         rsquare = TRUE ) 
# la salida no se muestra

Con esta otra función se muestran los intervalos de confianza CI:

standardizedSolution( fit )
# la salida no se muestra

Y con esta función una lista completa con todos los índices para el ajuste del modelo:

fitMeasures( fit )
# la salida no se muestra

 

Con todas esas funciones ya tendrías los resultados y pasarías a su interpretación.

Como nuestro objetivo es rehacer el modelo de Gefen et al (2003) usando lavaan, vamos a mostrar solo los “trozos” de los resultados que buscamos (los que se muestran en el dibujo del modelo Figure 2).

 

 

Evaluación del modelo (resultados)

 

1. Evaluar el modelo global (bondad de ajuste)

 

Test de Chi-cuadrado

# Chi Square Test
fit
lavaan 0.6-3 ended normally after 46 iterations

  Optimization method                           NLMINB
  Number of free parameters                         68

  Number of observations                           213

  Estimator                                         ML
  Model Fit Test Statistic                     391.607
  Degrees of freedom                               257
  P-value (Chi-square)                           0.000

 

Indicadores de ajuste del modelo (Índices ad-hoc)

# Fit Indices
fitMeasures( fit, 
             c( 'rmr','rmsea','gfi','agfi', 'nfi','cfi' ) )
  rmr rmsea   gfi  agfi   nfi   cfi 
0.051 0.050 0.875 0.842 0.902 0.964 

 

 

2. Parámetros/coeficientes estimados

Nos interesan las columnas pvalue y std.lv

 

# Latent variables
rdo <- parameterestimates( fit, standardized=TRUE )
# Regressions
rdo[ rdo$op == "~", c(-8,-9,-12)] 
     lhs op         rhs    est    se      z pvalue std.lv std.all
26   Use  ~       Trust  0.273 0.085  3.213  0.001  0.262   0.262
27   Use  ~        PEOU  0.303 0.111  2.733  0.006  0.246   0.246
28   Use  ~          PU  0.433 0.107  4.045  0.000  0.395   0.395
29    PU  ~       Trust  0.248 0.066  3.737  0.000  0.262   0.262
30    PU  ~        PEOU  0.618 0.088  7.042  0.000  0.552   0.552
31  PEOU  ~   Normality  0.610 0.113  5.394  0.000  0.467   0.467
32  PEOU  ~ Familiarity  0.331 0.104  3.167  0.002  0.253   0.253
33 Trust  ~ Calculative  0.270 0.095  2.858  0.004  0.176   0.176
34 Trust  ~  Assurances  0.570 0.110  5.184  0.000  0.370   0.370
35 Trust  ~   Normality  0.512 0.136  3.779  0.000  0.332   0.332
36 Trust  ~ Familiarity -0.010 0.123 -0.080  0.936 -0.006  -0.006
37 Trust  ~        PEOU  0.326 0.092  3.545  0.000  0.276   0.276

 

 

Interpretación del modelo (de los resultados)

Es evaluar lo bien que nuestros datos se han “ajustado” al modelo propuesto: nos lo dice el test chi-cuadrado, los índices ad-hoc, y la significatividad de los prámetros/coeficientes estimados.

 

  RECUERDA. Al estimar el modelo usando como datos de entrada la matriz de correlaciones los resultados que obtengamos no serán exactamente los publicados en Gefen et al (2003).

 

1. Ajuste del modelo global

  • Test Chi-cuadrado (buen ajuste si p-value > 0.05). Los resultados obtenidos son Chi-cuadrado 391.607, grados de libertad 257, p-value 0.000.

  • Indices ad-hoc (buen ajuste si RMR < 0.08, RMSEA < 0.08, GFI > 0.90, AGFI > 0.90, NFI > 0.90, CFI > 0.90). Los resultados obtenidos son RMR 0.051, RMSEA 0.050, GFI 0.875, AGFI 0.842, NFI 0.902, CFI 0.964.

 

2. Ajuste del modelo estructural

  • Comprobamos qué parámetros son significativos: son nuestras relaciones causales o nuestras hipótesis. (Los resultados a interpretar son los de las columnas pvalue y std.lv).

 

Hipótesis Relación
H1 PU -> Use relación significativa (p-value < 0.05), coeficiente 0.395
H2 PEOU -> Use relación significativa (p-value < 0.05), coeficiente 0.246
H3 PEOU -> PU relación significativa (p-value < 0.05), coeficiente 0.552
H4 Trust -> Use relación significativa (p-value < 0.05), coeficiente 0.262
H5 Trust -> PU relación significativa (p-value < 0.05), coeficiente 0.262
H6 Familiarity -> Trust relación no significativa p-value=0.936 (p-value > 0.05)
H7 Calculative -> Trust relación significativa (p-value < 0.05), coeficiente 0.176
H8 Normality -> Trust relación significativa (p-value < 0.05), coeficiente 0.332
H9 Assurances -> Trust relación significativa (p-value < 0.05), coeficiente 0.370
H10 PEOU -> Trust relación significativa (p-value < 0.05), coeficiente 0.276
H11 Normality -> PEOU relación significativa (p-value < 0.05), coeficiente 0.467
H12 Familiarity -> PEOU relación significativa (p-value < 0.05), coeficiente 0.253

 

 

FUENTE: Gefen, Karahanna y Straub (2003) Trust and TAM in online shopping: An integrated model, MIS Quarterly, vol.27.

 

 

 

 

Anexo. Matriz de correlaciones entre los ítems

data <- '
1.0000
0.6066 1.0000
0.4735 0.6408 1.0000
0.1527 0.1514 0.1661 1.0000
0.1617 0.1649 0.1421 0.8543 1.0000
0.1713 0.1485 0.1090 0.7624 0.8386 1.0000
0.1831 0.1609 0.1762 0.7982 0.7869 0.8128 1.0000
0.1350 0.1382 0.1047 0.7476 0.7874 0.8147 0.8261 1.0000
0.1585 0.1024 0.1571 0.7538 0.8037 0.7919 0.8125 0.8502 1.0000
0.2758 0.2009 0.1652 0.2759 0.2629 0.3117 0.3422 0.2707 0.2581 1.0000
0.2215 0.1433 0.1119 0.3906 0.3972 0.4336 0.4157 0.3866 0.3924 0.4597 1.0000
0.1809 0.1388 0.1244 0.3825 0.3823 0.3893 0.4107 0.3323 0.3436 0.3452 0.7483 1.0000
0.0958 0.0319 0.0306 0.0745 0.0800 0.0797 0.1122 0.1661 0.1415 0.1886 0.3050 0.2703 1.0000
0.0427 0.0170 -0.0235 0.0495 0.0203 0.0253 0.1031 0.0996 0.0849 0.0859 0.1952 0.1969 0.4795 1.0000
0.2026 0.0937 0.1141 0.0407 0.0298 0.0205 0.1104 0.1276 0.1440 0.2390 0.2347 0.2210 0.5494 0.6261 1.0000
0.1103 0.0965 0.1056 0.1620 0.1825 0.1581 0.2363 0.2478 0.2222 0.2179 0.2237 0.1731 0.4114 0.5499 0.6009 1.0000 
0.2503 0.2003 0.2123 0.3628 0.3913 0.4305 0.4439 0.4462 0.4824 0.3072 0.3046 0.3470 0.1949 0.2041 0.3546 0.3957 1.0000 
0.3004 0.2057 0.2936 0.3511 0.3793 0.4025 0.4196 0.4203 0.4339 0.3509 0.3389 0.3469 0.2509 0.1300 0.3545 0.4118 0.7628 1.0000 
0.2162 0.1595 0.2342 0.3092 0.3192 0.2506 0.3592 0.3375 0.3466 0.2927 0.2395 0.2949 0.2750 0.2503 0.4319 0.4586 0.5773 0.6475 1.0000   
0.1787 0.2189 0.2751 0.5172 0.5429 0.5094 0.5050 0.5021 0.5499 0.2604 0.3695 0.4063 0.1921 0.1615 0.2237 0.3511 0.7420 0.7525 0.5660 1.0000
0.2581 0.2100 0.2617 0.3905 0.4159 0.3890 0.3976 0.3964 0.4466 0.2525 0.3205 0.3402 0.2649 0.2336 0.3589 0.3727 0.6710 0.6303 0.5931 0.7309 1.0000
0.2181 0.2656 0.3114 0.4323 0.4431 0.4472 0.4507 0.4829 0.4824 0.2651 0.3679 0.3934 0.2696 0.2243 0.3411 0.4156 0.7340 0.7289 0.5845 0.8218 0.8014 1.0000
0.1899 0.1512 0.1716 0.4216 0.4144 0.3999 0.4296 0.4540 0.4412 0.3100 0.3885 0.4174 0.2325 0.1751 0.2717 0.3325 0.5404 0.6003 0.4788 0.6774 0.5819 0.6671 1.0000
0.2045 0.1281 0.1709 0.5936 0.6529 0.6673 0.6440 0.6235 0.6265 0.3129 0.4948 0.4544 0.1720 0.1568 0.1856 0.2602 0.4923 0.4706 0.3578 0.5321 0.4290 0.4708 0.4230 1.0000
0.1484 0.0613 0.1371 0.5141 0.5829 0.4916 0.5596 0.5492 0.5548 0.2685 0.3706 0.3912 0.1427 0.2205 0.1688 0.3290 0.3850 0.3839 0.4575 0.4561 0.3867 0.3983 0.4222 0.7049 1.0000
0.1147 0.0642 0.0876 0.4964 0.5662 0.5790 0.5817 0.6017 0.5880 0.2974 0.4450 0.4428 0.1989 0.2298 0.2118 0.3848 0.4617 0.4160 0.3878 0.4437 0.3697 0.4506 0.4319 0.7376 0.7767 1.0000
0.1743 0.0754 0.1403 0.5264 0.5806 0.5640 0.5802 0.5636 0.5736 0.3080 0.3885 0.4296 0.1920 0.1993 0.1752 0.3409 0.4019 0.4112 0.4407 0.4463 0.4116 0.4623 0.4243 0.7218 0.8070 0.8411 1.0000
0.1043 0.0679 0.1253 0.5174 0.5749 0.4799 0.5064 0.5556 0.5440 0.2449 0.3821 0.4083 0.1837 0.2055 0.1719 0.3191 0.3336 0.3255 0.4002 0.4103 0.3792 0.4182 0.4105 0.6774 0.7967 0.7937 0.8265 1.0000
0.1578 0.0432 0.1216 0.4991 0.5696 0.4845 0.5201 0.5144 0.5442 0.2771 0.3921 0.3838 0.2098 0.2046 0.1554 0.2950 0.3379 0.3171 0.3207 0.4039 0.3536 0.4056 0.3830 0.6618 0.7783 0.7650 0.8024 0.8517 1.0000
0.1297 0.1168 0.1453 0.4847 0.5214 0.5088 0.4478 0.4941 0.5080 0.2336 0.4430 0.3851 0.1254 0.0930 0.1114 0.2824 0.4522 0.4412 0.3431 0.5341 0.4302 0.4955 0.3875 0.5848 0.5259 0.5009 0.4801 0.4928 0.4575 1.0000
0.0709 0.0962 0.0868 0.4409 0.4635 0.4092 0.4142 0.4746 0.4841 0.1831 0.4293 0.4448 0.1283 0.1042 0.1227 0.2350 0.3551 0.3828 0.3474 0.4685 0.3887 0.5209 0.4157 0.4759 0.4936 0.5213 0.4863 0.4961 0.4904 0.7592 1.0000
0.1284 0.1322 0.0841 0.4657 0.5132 0.5281 0.4660 0.4959 0.4813 0.2150 0.3659 0.3854 0.1605 0.1170 0.1400 0.2561 0.4017 0.3354 0.2843 0.4561 0.4318 0.4708 0.3803 0.4699 0.3823 0.4675 0.4376 0.4174 0.3708 0.6744 0.6696 1.0000
0.1534 0.1019 0.1175 0.4440 0.4716 0.5296 0.4646 0.5035 0.5273 0.2375 0.3552 0.3547 0.1470 0.1225 0.1631 0.3219 0.4302 0.4453 0.3781 0.4741 0.4495 0.5089 0.3655 0.4937 0.4995 0.5927 0.5626 0.5486 0.5274 0.4325 0.4801 0.4324 1.0000
0.0977 0.0255 0.1355 0.4469 0.4513 0.4748 0.4996 0.5050 0.5666 0.2028 0.3230 0.3154 0.1856 0.1960 0.2458 0.3210 0.3987 0.3693 0.2764 0.4234 0.3939 0.4510 0.4119 0.4458 0.4692 0.5163 0.4877 0.4838 0.4768 0.3680 0.4355 0.3677 0.6584 1.0000 '

 

 

:)