I have been asked to transition from costly SPSS' AMOS to R to run structural equation models. We have a specific (and complicated) SEM model that I am trying to reproduce in R with the
lavaan package. When running the model in AMOS, standard errors can be calculated, along with all other requested output. I have set likelihood to "wishart" to match the AMOS method. However, when I run what I think is the exact same model in R's
lavaan throws warnings (see below) and I get odd output. What am I missing or misspecifying in
lavaan? Or, does
lavaan have different thresholds or mechanisms than AMOS that I am not aware of?
Our model has three outcomes connected with an intentional feedback loop (i.e., is non-recursive). Two of those outcomes are single-item latents. The rest of the model contains 13 endogenous variables, quite a few of which are comprised of only two items. We do not set any covariances. We have known multicollinearity issues. Our data is non-normal (but has been tested in past and is accepted). We listwise-delete missing data. Despite all this, we are able to run the model in AMOS. Although we never achieve a non-significant p value, we do get decent fit statistics.
I went back to more basic models to see if I could at any point get both software to run a matching model. Up to a decent degree (included all but three endogenous variables), the
lavaan software runs and the output matches that of AMOS and runs without any warnings.
lav_qs_for_latents <- ' # latent variables ELM =~ Q7855_08S + Q7355_04S SLM =~ Q8227_06S + Q1266_06S + Q4234_06S + Q9806_15S + Q6979_13S SP =~ Q8117_08S + Q8260_06S RE =~ Q5074_04S + Q8641_13S + Q5704_13S + Q8511_04S PD =~ Q3437_06S + Q9183_04S + Q9292_04S TM =~ Q8179_04S + Q8355_04S + Q4882_06S TW =~ Q4332_11S + Q5113_11S + Q7644_15S SW =~ Q9958_04S + Q2928_06S PB =~ Q1718_06S + Q2593_06S + Q8152_11S RC =~ Q4636_08S + Q5601_06S JS =~ Q5079_04S + Q1344_06S EMP =~ Q8520_06S + Q8385_06S + Q3182_08S VMG =~ Q1782_04S + Q5178_04S COMMIT =~ Q3373_06S + Q6957_06S # regressions SLM ~ ELM SP ~ ELM + SLM RE ~ ELM + SLM + SP PD ~ ELM + SLM + SP + RE TM ~ SLM + RE TW ~ ELM + PD + TM SW ~ ELM + SLM + RE + PD + TW PB ~ ELM + SP + TW + SW RC ~ ELM + SLM + SP + RE + PD + SW + PB JS ~ ELM + SLM + PD + TM EMP ~ ELM + SLM + RE + PD + RC + JS VMG ~ ELM + PD + TM + TW Q2327_06S ~ SW + JS + EMP + COMMIT Q2958_06S ~ Q2327_06S + ELM + SW + PB + EMP + VMG COMMIT ~ Q2327_06S + Q2958_06S + TW + JS + PB + VMG ' sem_qs_for_latents <- sem(model = lav_qs_for_latents, likelihood = "wishart", sample.cov = datacov, sample.nobs = data_N) summary(sem_qs_for_latents, standardized=TRUE, rsquare=TRUE)
I expected the information matrix to be invertible and standard errors to be calculated. Instead, I got the following warnings:
Warning messages: 1: In lav_model_vcov(lavmodel = lavmodel, lavsamplestats = lavsamplestats, : lavaan WARNING: Could not compute standard errors! The information matrix could not be inverted. This may be a symptom that the model is not identified. 2: In lav_object_post_check(object) : lavaan WARNING: some estimated lv variances are negative 3: In lavaan::lavaan(model = lav_qs_for_latents, sample.cov = datacov, : lavaan WARNING: not all elements of the gradient are (near) zero; the optimizer may not have found a local solution; use lavInspect(fit, "optim.gradient") to investigate
lavInspect(sem_qs_for_latents, "optim.gradient") gave me the value of 0.000 for all except the following:
TW~ELM = 0.005; TW~PD = 0.008; TW~TM = 0.002; JS~ELM = -0.002; JS~SLM = -0.002; JS~PD = -0.001; JS~TM = -0.001
I don't know how to upload my covariance matrix, but I don't think that is the problem as I can run more basic models in
lavaan on that covariance matrix with output matching the corresponding AMOS models. My apologies if this is not an appropriate question. I have been stuck on this for weeks and don't know where to turn for help.