使用Tobit回归进行中介分析时提示无法找到结果变量
解决mediation包结合vglm Tobit模型时的"object not found"错误
问题原因
mediation包的mediate函数对模型对象的结构有特定要求,它默认适配标准的lm/glm类模型,但不直接支持VGAM包的vglm对象。尽管你的outcome_model能单独运行,但mediate在从vglm对象中提取数据和变量时,无法识别其内部存储结构,导致抛出"object 'outcome' not found"的错误。
解决方案
方案1:改用AER包的tobit函数(推荐)
AER包的tobit函数生成的是标准glm类对象,完全兼容mediation包的要求:
library(mediation) library(AER) test <- data.frame(mediator = c(0.333,0.201,0.343,0.133,0.240), DV = c(0.152,2.318,0.899,0.327,1.117), outcome=c(1.715,1.716,0.544,3.284,3.599)) mediator_model <- lm(mediator ~ DV, data = test) # 使用AER的tobit,用left/right指定截尾边界 outcome_model <- tobit(outcome ~ mediator + DV, left = -4, right = 4, data = test) # 运行中介分析 med <- mediate(mediator_model, outcome_model, treat = "DV", mediator = "mediator") summary(med)
方案2:显式向mediate传入数据集
如果必须使用vglm的Tobit模型,可以通过data参数直接传入原始数据集,强制mediate使用指定的数据框而非从模型对象中提取:
library(mediation) library(VGAM) test <- data.frame(mediator = c(0.333,0.201,0.343,0.133,0.240), DV = c(0.152,2.318,0.899,0.327,1.117), outcome=c(1.715,1.716,0.544,3.284,3.599)) mediator_model <- lm(mediator ~ DV, data = test) outcome_model <- vglm(outcome ~ mediator + DV, tobit(Upper = 4, Lower = -4), link = "identity", data = test) # 显式传入data参数 med <- mediate(mediator_model, outcome_model, treat = "DV", mediator = "mediator", data = test)
注意事项
- AER的
tobit与VGAM的vglmTobit参数存在差异:AER用left/right定义截尾上下限,VGAM用Upper/Lower。 - 方案2中需确保传入的数据集与模型拟合时的数据集完全一致,变量名无拼写错误。
内容的提问来源于stack exchange,提问作者Henry Brice
相关产品推荐
相关产品推荐

