首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用Lavaan的循环找不到变量

在R中使用Lavaan的循环找不到变量
EN

Stack Overflow用户
提问于 2022-09-24 15:03:51
回答 1查看 50关注 0票数 0

我运行了以下代码,以便我的Lavaan模型能够测试不同的预测器。然而,错误说它找不到我的“预测器”。我需要保留“粘贴”行,以便指定它是".x“还是".y”变量。我觉得这是个简单的问题。有人能帮帮我吗?谢谢!

代码语言:javascript
复制
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错误:数据集中缺少观测变量:预测器

)

EN

回答 1

Stack Overflow用户

发布于 2022-09-24 16:35:33

R字符串格式需要像sprintfpaste这样的插值处理程序,就像在分配predictor时所做的那样。目前,模型字符串采用文字预测器,而不是它的基础值。

因此,考虑使用 (C函数的包装器)等字符串格式:

代码语言:javascript
复制
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,用变量值替换文字预测器:

代码语言:javascript
复制
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)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73838253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档