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

如何在marginaleffects的avg_predictions()中使用参数术语名设置假设?

解决marginaleffects包中avg_predictions用术语名称设定hypothesis的问题

当by参数包含多个变量时,直接用带空格的术语名(如"cauc yes" - "afam yes" = 0)写hypothesis会报错,核心原因是解析器会把空格当成变量分隔符,无法识别完整术语名。这里给你两种可行的解决方法:

方法1:用反引号包裹术语名

在hypothesis字符串里,给带空格的术语名加上反引号,让解析器识别为单个完整术语,直接在avg_predictions()中使用:

# 加载包并拟合示例模型
library(marginaleffects)
mod <- glm(am ~ vs * cyl, data = mtcars, family = binomial)

# 用by参数分组,hypothesis里用反引号包裹术语名
avg_pred <- avg_predictions(
    mod,
    by = c("vs", "cyl"),
    hypothesis = "`vs 0:cyl 4` - `vs 1:cyl 4` = 0"
)

# 查看假设检验结果
tidy(avg_pred)

方法2:先生成预测结果,再用hypothesis()函数指定假设

如果不确定术语名,先运行不带hypothesis的avg_predictions(),用tidy()查看term列的准确名称,再用hypothesis()函数基于结果对象构建假设,这种方式更灵活,也不容易出错:

# 先得到分组预测结果
avg_pred_base <- avg_predictions(mod, by = c("vs", "cyl"))

# 查看term列的准确术语名
tidy(avg_pred_base)

# 基于结果对象构建假设,用term[]引用具体术语
avg_pred_hyp <- hypothesis(
    avg_pred_base,
    term["vs 0:cyl 4"] - term["vs 1:cyl 4"] = 0
)

# 查看假设检验结果
tidy(avg_pred_hyp)

这两种方法都能避开位置标识(b1、b2)的不稳定问题,直接用术语名精准指定组间差异的假设。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 07:31:11