segmented包是否支持广义线性混合模型?实操报错求助
segmented包是否支持广义线性混合模型(GLMM)?
我正在撰写基金申请书,旨在评估某项干预措施在多组医院中的效果。经统计咨询后,决定采用带医院随机截距的Poisson或负二项广义线性混合模型(GLMM)。有人推荐使用segmented包,但将GLMM代入segmented()或segmented.lme()时均无法正常运行。查看segmented包文档,仅说明支持广义线性模型(GLM)和线性混合模型(LMM),因此想确认该包是否支持GLMM。
数据结构示例
| 医院名称 | 月份数 | 剖宫产数量 | 分娩总量 |
|---|---|---|---|
| Hospital A | 1 | 30 | 100 |
| Hospital B | 1 | 50 | 240 |
(注:因涉及受保护健康信息,无法提供可复现代码)
尝试的模型与调用方式
构建的GLMM模型
# model 1 - glmmTMB包拟合 model <- glmmTMB::glmmTMB(cesarean_volume ~ month_n + birth_volume + (1 | site_name), family = poisson, data = df) # model 2 - lme4包拟合 model <- lme4::glmer(cesarean_volume ~ month_n + birth_volume + (1 | site_name), family = poisson, data = df)
segmented包的两种调用方式
library(segmented) # 方式1:适配GLM的调用格式 segmented(model, seg.Z = ~ month_n, psi = list(month_n = c(13, 25))) # 方式2:适配LMM的调用格式(对应segmented.lme) segmented(model, seg.Z = ~ month_n, psi = list(month_n = c(13, 25)))
各组合的报错信息
- glmmTMB模型 + GLM调用格式:
Error in Z - PSI : non-conformable arrays
- glmmTMB模型 + LMM调用格式:
Error in segmented.lme(poisson_model_g1_23_only, seg.Z = ~month_n, psi = list(month_n = c(13, :
'obj' should be a lme fit or a lme call
- lme4模型 + GLM调用格式:
Error in obj$call : $ operator not defined for this S4 class
- lme4模型 + LMM调用格式:
Error in obj$dims : $ operator not defined for this S4 class
结论与替代方案
segmented包目前不支持广义线性混合模型(GLMM),原因如下:
segmented()的GLM处理分支仅支持S3类的GLM对象,而lme4::glmer()和glmmTMB::glmmTMB()输出的是S4类模型,无法兼容,导致S4类相关报错。segmented.lme()仅适配nlme::lme()拟合的线性混合模型(LMM),不支持带离散因变量的GLMM,因此无法识别glmmTMB或lme4的模型结果。
若需在GLMM中实现分段回归,可考虑以下替代方法:
- 手动分段验证:将
month_n按预设分割点(如13、25)转为分组变量,与原变量构建交互项加入模型,通过似然比检验判断分段效应是否显著。 - 贝叶斯框架实现:使用brms或Stan包构建带分段参数的贝叶斯GLMM,直接估计分割点和分段效应。
- 关注包更新:可查看segmented包的GitHub仓库或更新日志,确认后续是否会添加GLMM支持。
内容的提问来源于stack exchange,提问作者Thea B.
相关产品推荐
相关产品推荐

