基于R语言GLMMadaptive的多左删失数据混合效应建模求助
针对多水平删失混合效应模型的GLMMadaptive使用方案
1. GLMMadaptive是否为合适选择?
是的,GLMMadaptive完全适配你的场景:
- 支持左删失、右删失、区间删失,能处理随仪器/污染物变动的不同删失阈值(多删失水平)
- 原生支持混合效应模型(随机截距、随机斜率),可解决样本内多种污染物测量的非独立性问题
- 对比你试过的工具:NADA包不支持混合效应,VGAM包的tobit类模型无随机效应接口,GLMMadaptive是当前最匹配的选择,没有遗漏核心功能。
2. 如何指定删失观测及删失水平?
GLMMadaptive的删失指定不是通过censored.normal()的参数,而是需要在数据中构造上下限列来定义每个观测的测量区间:
步骤1:构造删失区间列
在你的pollutants数据框中新增两列(假设已有Result(测量值)、Censor_Type(标识删失类型:"left"=低于阈值,"right"=高于阈值,"exact"=精确测量)、Threshold(对应观测的删失阈值)):
# 用dplyr构造上下限列,也可以用base R实现 pollutants <- pollutants %>% mutate( # y_lower:左边界,左删失时填阈值,精确值填自身,右删失填-Inf y_lower = case_when( Censor_Type == "left" ~ Threshold, Censor_Type == "exact" ~ Result, Censor_Type == "right" ~ -Inf ), # y_upper:右边界,右删失时填阈值,精确值填自身,左删失填Inf y_upper = case_when( Censor_Type == "right" ~ Threshold, Censor_Type == "exact" ~ Result, Censor_Type == "left" ~ Inf ) )
步骤2:修改模型代码
将原模型中的Result替换为y_lower | y_upper的形式,censored.normal()会自动识别区间定义的删失类型:
library(GLMMadaptive) fit <- mixed_model( fixed = y_lower | y_upper ~ Sample_type/AG_level/Regulated, random = ~1|Sample_ID, data = pollutants, family = censored.normal() ) # 查看模型结果 summary(fit)
补充说明
- 如果你的数据只有单一方向的删失(比如仅左删失),仍推荐用区间列的方式,因为它能兼容不同观测的不同阈值
- 模型拟合后,
summary()输出会包含删失观测的统计信息(数量、类型占比),可用于验证删失定义是否正确
内容的提问来源于stack exchange,提问作者SGE
相关产品推荐
相关产品推荐

