You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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的vglm Tobit参数存在差异:AER用left/right定义截尾上下限,VGAM用Upper/Lower。
  • 方案2中需确保传入的数据集与模型拟合时的数据集完全一致,变量名无拼写错误。

内容的提问来源于stack exchange,提问作者Henry Brice

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 10:10:22