我运行了以下代码,以便我的Lavaan模型能够测试不同的预测器。然而,错误说它找不到我的“预测器”。我需要保留“粘贴”行,以便指定它是".x“还是".y”变量。我觉得这是个简单的问题。有人能帮帮我吗?谢谢!
gender_thermometer.x <-sample(0:10, 1000, rep = TRUE)
gender_thermometer.y <-sample(0:10, 1000, rep = TRUE)
COVID_threat.x <-sample(0:10, 1000, rep = TRUE)
COVID_threat.y <-sample(0:10, 1000, rep = TRUE)
d_exhaustion.x <-sample(0:10, 1000, rep = TRUE)
d_relaxation.x <-sample(0:10, 1000, rep = TRUE)
d_not_sharing_negative.x <-sample(0:1, 1000, rep = TRUE)
Couple_ID <-sample(0:100, 1000, rep = TRUE)
data_wide<-data.frame(gender_thermometer.x,gender_thermometer.y,COVID_threat.x,COVID_threat.y,
d_exhaustion.x,d_relaxation.x,d_not_sharing_negative.x,Couple_ID)
library(lavaan)
models <- list()
for (i in c( "gender_thermometer","COVID_threat")) {
print(paste0("###################:",i))
predictor= paste(i,".y",sep = "")
model[[i]] <- '
level: 1
d_exhaustion.x ~ b1*d_relaxation.x + c1*d_not_sharing_negative.x + predictor
d_relaxation.x ~ a1*d_not_sharing_negative.x + predictor
d_not_sharing_negative.x~f1*predictor
indirect1:=f1*a1*b1
indirect11:=f1*c1
level: 2
d_exhaustion.x ~ b2*d_relaxation.x + c2*d_not_sharing_negative.x + predictor
d_relaxation.x ~ a2*d_not_sharing_negative.x + predictor
d_not_sharing_negative.x~f2*predictor
indirect2:=f2*a2*b2
indirect22:=f2*c2
'
fit[[i]] <- sem(model = model[[i]], data = data_wide, cluster = "Couple_ID")
print(summary(fit[[i]]))
}lav_data_full中的错误(数据=数据,组=组,集群=集群,:lavaan错误:数据集中缺少观测变量:预测器
)
发布于 2022-09-24 16:35:33
R字符串格式需要像sprintf或paste这样的插值处理程序,就像在分配predictor时所做的那样。目前,模型字符串采用文字预测器,而不是它的基础值。
因此,考虑使用 (C函数的包装器)等字符串格式:
vars <- c("gender_thermometer", "COVID_threat")
models <- vector(mode="list", length=length(vars))
for (i in seq_along(vars)) {
print(paste0("###################:", vars[[i]]))
predictor <- paste0(vars[[i]], ".y")
# STRING WITH %1$s PLACEHOLDERS
model_string <- '
level: 1
d_exhaustion.x ~ b1*d_relaxation.x + c1*d_not_sharing_negative.x + %1$s
d_relaxation.x ~ a1*d_not_sharing_negative.x + %1$s
d_not_sharing_negative.x~f1*%1$s
indirect1:=f1*a1*b1
indirect11:=f1*c1
level: 2
d_exhaustion.x ~ b2*d_relaxation.x + c2*d_not_sharing_negative.x + %1$s
d_relaxation.x ~ a2*d_not_sharing_negative.x + %1$s
d_not_sharing_negative.x~f2*%1$s
indirect2:=f2*a2*b2
indirect22:=f2*c2
'
# FORMAT STRING WITH VALUE
models[[i]] <- sprintf(model_string, predictor)
cat(models[[i]])
fit[[i]] <- sem(model = models[[i]], data = data_wide, cluster = "Couple_ID")
print(summary(fit[[i]]))
}或者使用gsub,用变量值替换文字预测器:
model_string <- '
level: 1
d_exhaustion.x ~ b1*d_relaxation.x + c1*d_not_sharing_negative.x + predictor
d_relaxation.x ~ a1*d_not_sharing_negative.x + predictor
d_not_sharing_negative.x~f1*predictor
indirect1:=f1*a1*b1
indirect11:=f1*c1
level: 2
d_exhaustion.x ~ b2*d_relaxation.x + c2*d_not_sharing_negative.x + predictor
d_relaxation.x ~ a2*d_not_sharing_negative.x + predictor
d_not_sharing_negative.x~f2*predictor
indirect2:=f2*a2*b2
indirect22:=f2*c2
'
models[[i]] <- gsub("predictor", predictor, model_string)https://stackoverflow.com/questions/73838253
复制相似问题