1

[免责声明:此问题已在 lavaan 的 Google 群组中交叉发布(链接:https ://groups.google.com/forum/#!topic/lavaan/nI8SUIU8JCM )。它也张贴在这里以提高知名度。]

对于交叉滞后面板 SEM,我有大约 3000 个数据(但只有 265 个完整案例)。我的分析有点像下图。比如说,在我们的例子中,A=AGE(连续),B=sex(二进制),X=emp(二进制),Y=SA(二进制),Z=SE(4 类)。所有变量都是观察变量。换句话说,我们想要测试我们假设的 emp、SA 和 SE 之间的交叉滞后关系,其中 AGE 和性别是这些关系的混杂因素。这些观察到的变量在不同时间点存在缺失值 (NA)。

1) 我首先尝试了以下代码,通过声明http://lavaan.ugent.be/tutorial/cat.html中建议的分类内生观察变量,仅使用 emp 和 SE 运行一个简单模型,没有任何混杂因素。

d <- read.csv('newdata.csv', header=T)

# Convert the variables to factors
d$sex <- factor(d$sex)
d$emp1 <- ordered(d$emp1)
d$emp2 <- ordered(d$emp2)
d$emp5 <- ordered(d$emp5)
d$SA1 <- ordered(d$SA1)
d$SA2 <- ordered(d$SA2)
d$SA5 <- ordered(d$SA5)
d$SE1 <- ordered(d$SE1)
d$SE2 <- ordered(d$SE2)
d$SE5 <- ordered(d$SE5) 

library(lavaan)

clpm0 <- '
# synchronous covariances
SA1 ~~ emp1
SA2 ~~ emp2
SA5 ~~ emp5

# autoregressive + cross-lagged paths
SA2 ~ SA1 + emp1 
emp2 ~ emp1 + SA1 
SA5 ~ SA2 + emp2 
emp5 ~ emp2 + SA2 
'

fit0 <- sem(clpm0, data=d)

但这会产生以下错误消息:

Error in tmp[cbind(REP$row[idx], REP$col[idx])] <- lavpartable$free[idx] : 
  NAs are not allowed in subscripted assignments

我还尝试了以下方法:

fit0 <- sem(clpm0, data=d, missing='listwise')

但是得到了同样的错误信息:

Error in tmp[cbind(REP$row[idx], REP$col[idx])] <- lavpartable$free[idx] : 
  NAs are not allowed in subscripted assignments

我很确定我犯了一些错误,但作为 lavaan 的新用户无法弄清楚我的错误。你能告诉我我的错误是什么吗?当我在这些情况下理论上使用 missing='pairwise' 时会发生什么?因为那时它向我展示了类似的东西:

Error in tmp[cbind(REP$row[idx], REP$col[idx])] <- lavpartable$free[idx] : 
  NAs are not allowed in subscripted assignments
In addition: Warning message:
In lav_data_full(data = data, group = group, cluster = cluster,  :
  lavaan WARNING: some cases are empty and will be ignored:
  1 2 10 14 16 18 19 20 21 31 33 58 60 62 98 105 188 209 253 293 303 306 308 324 328 341 346 392 425 435 436 498 500 511 517 518 540 542 548 555 557 574 581 583 585 595 596 597

2)其次,我尝试将混杂因素 AGE 和性别结合起来。即使解决了第一部分的问题,我也很困惑代码是否应该如下所示:

clpm1 <- '
# synchronous covariances
SA1 ~~ emp1
SA2 ~~ emp2
SA5 ~~ emp5

# autoregressive + cross-lagged paths
SA2 ~ SA1 + emp1 + AGE + sex
emp2 ~ emp1 + SA1 + AGE + sex
SA5 ~ SA2 + emp2 + AGE + sex 
emp5 ~ emp2 + SA2 + AGE + sex
'

fit1 <- sem(clpm1, data=d, missing='listwise') 

然后它显示错误:

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): [SA1 emp1];
  Please remove them and try again.
In addition: Warning message:
In lavaan::lavaan(model = clpm1, data = d, missing = "listwise",  :
  lavaan WARNING: syntax contains parameters involving exogenous covariates; switching to fixed.x = FALSE

3)最后一个问题是:如果我想用附图所示的模型图进行完整的分析,下面的代码需要做些什么改变?

clpm2 <- '
# synchronous covariances
SA1 ~~ emp1
SA2 ~~ emp2
SA5 ~~ emp5

SE1 ~~ emp1
SE2 ~~ emp2
SE5 ~~ emp5

SE1 ~~ SA1
SE2 ~~ SA2
SE5 ~~ SA5

# autoregressive + cross-lagged paths
SE1 ~ SA1 + emp1 + AGE + sex

emp2 ~ emp1 + SA1 + AGE + sex 
SA2 ~ SA1 + emp1 + AGE + sex 
SE2 ~ SE1 + SA1 + emp1 + SA2 + emp2 + AGE + sex 

emp5 ~ emp2 + SA2 + AGE + sex 
SA5 ~ SA2 + emp2 + AGE + sex 
SE5 ~ SE2 + SA2 + emp2 + SA5 + emp5 + AGE + sex 
'

# fit the model 
fit1 <- sem(clpm1, data=d, missing='listwise')

非常感谢您的建议。在此处输入图像描述

4

0 回答 0