lavaan. Ejemplo de Gefen, Karahanna y Straub (2003)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).
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
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.
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
Es pasar el modelo conceptual (nuestro dibujo de las relaciones entre las variables) al modelo estructural y 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.
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
'
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.
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).
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
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
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).
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.
| 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.
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 '
:)