如何使用R语言实现并行增长混合模型(GMM)分析
R中lcmm包实现双结局并行增长混合模型(GMM)实操
你之前用lcmm做单结局GMM调用的是hlme函数,双/多结局并行GMM直接换用同包的multlcmm函数即可,参数逻辑和单结局模型高度一致,不需要额外学习太多新规则,具体脚本步骤如下:
步骤1:环境准备与数据格式要求
首先安装加载包,你的输入数据必须为长格式:每个受试者每个观测时间点对应一行,至少包含4类字段:受试者唯一ID、观测时间点、第一个结局变量、第二个结局变量,可额外加协变量字段。
# 安装加载包 install.packages("lcmm") library(lcmm) # 示例数据结构参考(你的数据集替换掉your_data即可) # head(your_data) # id time y1 y2 gender age # 1 1 0 2.3 1.1 1 35 # 2 1 1 3.1 1.5 1 35 # 3 1 2 4.0 1.8 1 35 # 4 2 0 1.8 0.9 0 42
步骤2:拟合k=1的基准并行增长模型
先拟合无分组的单类别多结局增长模型,作为后续选组的基准,同时给后续多类别模型提供初始值减少收敛问题。
fit_k1 <- multlcmm( fixed = list(y1 ~ time, y2 ~ time), # 列表形式传入两个结局的固定效应公式,这里假设两个结局都是线性时间趋势;如果y1要加二次项就写y1 ~ time + I(time^2) random = ~ time, # 两个结局共用的随机效应结构,这里设置为随机截距+随机时间斜率 subject = "id", # 受试者ID对应的列名 ng = 1, # 类别数设为1,无分组 data = your_data # 替换为你的数据集名 ) summary(fit_k1)
步骤3:拟合不同类别数的并行GMM,筛选最优模型
一般测试k=2~k=5的模型,结合3个指标选最优:BIC值最小、分类熵值>0.8、每个类别的样本占比不低于总样本的5%。
# 拟合k=2的模型,用k=1的结果作为初始值 fit_k2 <- multlcmm( fixed = list(y1 ~ time, y2 ~ time), random = ~ time, subject = "id", ng = 2, data = your_data, B = fit_k1, # 继承上一个模型的初始值 maxiter = 5000 # 收敛失败可调整迭代次数上限 ) summary(fit_k2) # 同理拟合k=3、k=4的模型,直接用上一个k值的结果做初始值即可 fit_k3 <- multlcmm( fixed = list(y1 ~ time, y2 ~ time), random = ~ time, subject = "id", ng = 3, data = your_data, B = fit_k2 )
你可以直接用summarytable(fit_k1, fit_k2, fit_k3)输出所有模型的BIC、熵值等指标,方便对比选优。
步骤4:提取分类结果与可视化
确定最优模型后,直接提取每个受试者的分类结果:
# 假设最优模型是fit_k2,提取后验分类概率与所属类别 class_result <- fit_k2$pprob # 输出结果包含3个核心列:id(受试者ID)、class(所属类别编号)、prob1/prob2(属于对应类别的后验概率) # 可视化两个结局的各类别拟合增长轨迹 plot(fit_k2, which = "fit")
常见场景调整参数
- 需要加协变量预测类别归属:增加
classmb = ~ 协变量1 + 协变量2参数即可 - 结局为分类变量:增加
link参数指定连接函数,比如两个二分类结局就写link = list("logit", "logit") - 两个结局的随机效应结构不同:把
random参数也换成list格式,分别指定每个结局的随机效应即可
内容的提问来源于stack exchange,提问作者Shay
相关产品推荐
相关产品推荐

