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

segmented包是否支持广义线性混合模型?实操报错求助

segmented包是否支持广义线性混合模型(GLMM)?

我正在撰写基金申请书,旨在评估某项干预措施在多组医院中的效果。经统计咨询后,决定采用带医院随机截距的Poisson或负二项广义线性混合模型(GLMM)。有人推荐使用segmented包,但将GLMM代入segmented()或segmented.lme()时均无法正常运行。查看segmented包文档,仅说明支持广义线性模型(GLM)和线性混合模型(LMM),因此想确认该包是否支持GLMM。


数据结构示例

医院名称月份数剖宫产数量分娩总量
Hospital A130100
Hospital B150240

(注:因涉及受保护健康信息,无法提供可复现代码)


尝试的模型与调用方式

构建的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),原因如下:

  1. segmented()的GLM处理分支仅支持S3类的GLM对象,而lme4::glmer()和glmmTMB::glmmTMB()输出的是S4类模型,无法兼容,导致S4类相关报错。
  2. segmented.lme()仅适配nlme::lme()拟合的线性混合模型(LMM),不支持带离散因变量的GLMM,因此无法识别glmmTMB或lme4的模型结果。

若需在GLMM中实现分段回归,可考虑以下替代方法:

  • 手动分段验证:将month_n按预设分割点(如13、25)转为分组变量,与原变量构建交互项加入模型,通过似然比检验判断分段效应是否显著。
  • 贝叶斯框架实现:使用brms或Stan包构建带分段参数的贝叶斯GLMM,直接估计分割点和分段效应。
  • 关注包更新:可查看segmented包的GitHub仓库或更新日志,确认后续是否会添加GLMM支持。

内容的提问来源于stack exchange,提问作者Thea B.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 07:57:26