使用R的survey包在无协变量调整的简单GLM中计算预测边际
仅截距调查加权GLM使用marginpred报错的解决方法
问题场景
已加载survey和srvyr包,构建复杂调查设计并拟合仅含截距的调查加权GLM:
library(survey) # Analysis of Complex Survey Samples library(srvyr) # 'dplyr' inspired syntactic style # 复杂调查设计 design <- data %>% as_survey_design(ids = HOSP_NRD, weights = DISCWT, strata = NRD_STRATUM) # 拟合仅含截距的调查加权GLM fit_cost <- svyglm(Costs1 ~ 1, design = design, family = Gamma(link = "log")) # 使用svypredmeans计算预测边际均值正常运行 svypredmeans(fit_cost, ~group)
但调用marginpred计算预测边际时失败:
# 尝试计算标准化预测值(预测边际) marginpred(fit_cost, predictat = data.frame(group = c("a", "b")))
报错信息:
Error in eval(e[[2L]], where) : argument "adjustfor" is missing, with no default
解决方法
marginpred要求必须显式指定adjustfor参数,即使模型仅包含截距项、无协变量需要调整。此时可以将adjustfor设置为~1(代表基于截距水平调整)或NULL,即可正常运行:
# 方法1:设置adjustfor为~1 marginpred(fit_cost, predictat = data.frame(group = c("a", "b")), adjustfor = ~1) # 方法2:设置adjustfor为NULL marginpred(fit_cost, predictat = data.frame(group = c("a", "b")), adjustfor = NULL)
原理:当模型仅含截距时,没有额外协变量需要调整均值,显式指定adjustfor参数可以满足函数的参数校验,使其正确基于调查权重计算不同group的预测边际值。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

