如何在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
相关产品推荐
相关产品推荐

