error using WLSMV in moderated mediation analysis, ordinal dependent outcomes, continuous moderator

49 views
Skip to first unread message

Onur Şahin

unread,
Dec 19, 2018, 8:25:34 PM12/19/18
to lavaan
Hi all,

I tried conducting a moderated mediation analysis with lavaan. It works using "MLM", however because I have ordinal data, I tried to conduct the analysis with "WLSMV". I got the following error:

Error in vnames(FLAT, type = "ov.x", ov.x.fatal = TRUE) : 
  lavaan ERROR: model syntax contains variance/covariance/intercept formulas
  involving (an) exogenous variable(s): [DivScr_c];
  Please remove them and try again.

My code is:

model <- "
M ~ a1*X1
M ~ a2*X2

D1 =~ d11+ d12+ d13+ d14+ d15
D2 =~ d21+ d22+ d23+ d24+ d25
D3 =~ d31+ d32+ d33+ d34+ d35
D4 =~ d41+ d42+ d43+ d44+ d145
D5 =~ d51+ d52+ d53+ d54+ d55 

L =~ D1+ D2+ D3+ D4+ D5

L~ b1*M

M~ a3*DivScr_c
M~ a4*X1DivScr
M~ a5*X2DivScr
M~ a6*X1X2
M~ a7*X1X2DivScr

L~ c1*X1
L~ c2*X2

DivScr_c ~ mean_of_DivScr*1
DivScr_c ~~ var_of_DivScr*DivScr_c

SD.below := a1 + a4*(mean_of_DivScr - sqrt(var_of_DivScr))
mean_ := a1 + a4*(mean_of_DivScr)
SD.above := a1 + a4*(mean_of_DivScr + sqrt(var_of_DivScr))

X1_Lindirect.SDbelow := a1*b1 + a4*-sqrt(var_of_DivScr)*b1
X1_Lindirect.mean := a1*b1 + a4*(mean_of_DivScr)*b1
X1_Lindirect.SDabove := a1*b1 + a4*sqrt(var_of_DivScr)*b1

I do not understand how I can resolve the error (I don't understand the error at all. Can someone provide advice or readings? Thank you.

Edward Rigdon

unread,
Dec 20, 2018, 9:18:11 AM12/20/18
to lav...@googlegroups.com
     I don't quite understand why there is an error, but if the "exogenous" status really is the problem, you could resolve it by making the variable into a single, error-free indicator of a common factor. In efect, the factor would be identical to the observed variable but the "exogenous" flag would not go up. (Here, "exogenous" just means not predicted by something else. The lavaan package does have some special procedures for deaing with such variables, so it is possible that you have turned up some peculiar behavior.)
     To implement this fix, you will add lines like this:
DivScr_c_factor=~1*DivScr_c   # observed variable loads on factor, loading = 1
DivScr_c~~0*DivScr_c              # 0 residual variance in DivScr_c, so variace of factor = variance of observed var
DivScr_c~0*1                            # 0 intercept for DivScr_c, so mean of factor = mean of observed var  
DivScr_c_factor~~var_of_DivScr_c_factor* DivScr_c_factor 
                                                  # var_of_DivScr_c_factor replaces var_of_DivScr_c in code
DivScr_c_factor~1*mean_of_DivScr_c_factor* DivScr_c_factor 
                                                  # mean_of_DivScr_c_factor replaces mean_of_DivScr_c in code

     Watch out for unexpected free covariances between DivScr_c_factor and other variables in your model which are not predicted ("exogenous" in the SEM sense). These changes should leave fit and DF entirely unchanged. Also, watch out for typos in my code, above.
     Good luck.

--
You received this message because you are subscribed to the Google Groups "lavaan" group.
To unsubscribe from this group and stop receiving emails from it, send an email to lavaan+un...@googlegroups.com.
To post to this group, send email to lav...@googlegroups.com.
Visit this group at https://groups.google.com/group/lavaan.
For more options, visit https://groups.google.com/d/optout.

Terrence Jorgensen

unread,
Jan 3, 2019, 2:17:16 PM1/3/19
to lavaan
Error in vnames(FLAT, type = "ov.x", ov.x.fatal = TRUE) : 
  lavaan ERROR: model syntax contains variance/covariance/intercept formulas
  involving (an) exogenous variable(s): [DivScr_c];
  Please remove them and try again.

I do not understand how I can resolve the error

Did you try following the advice?  "Please remove them and try again"  It is referring to these lines:

DivScr_c ~ mean_of_DivScr*1
DivScr_c ~~ var_of_DivScr*DivScr_c

Those lines are unnecessary because by default, lavaan's options are fixed.x=TRUE and (for models with categorical outcomes) conditional.x=TRUE.  See the ?lavOptions help page for details.  Basically, you can avoid making distributional assumptions about exogenous predictors if you consider them fixed (as they are treated in OLS regression), in which case lavaan does not estimate their means & (co)variances but instead simply plugs in the observed sample statistics.

Terrence D. Jorgensen
Assistant Professor, Methods and Statistics
Research Institute for Child Development and Education, the University of Amsterdam

Reply all
Reply to author
Forward
0 new messages