R/flexmix中多分类结局潜类别增长模型实现及分层问题咨询
问题
需要在R的flexmix包中实现带多分类结局变量的潜类别增长模型(LCGM),同时按性别这类分类变量对类别分层,让性别按簇影响增长曲线(参考Mikolai和Lyons-Amos 2017的Mplus分层实现)。
尝试的代码如下:
lcgm_formula <- as.formula(rel_stat~age + I(age^2) + gender + gender:age) lcgm <- flexmix::stepFlexmix(.~ .| id, data=d, k=nr_of_classes, # 实际分析中为1:12 nrep=1, # 实际分析中为50以避免局部最优 control = list(iter.max = 500, minprior = 0), model = flexmix::FLXMRmultinom(lcgm_formula,varFix=T,fixed = ~0))
该代码参考了Wardenaar(2020)针对连续结局的LCGM代码,但发现FLXMRmultinom不支持varFix和fixed参数,怀疑类内固定斜率、截距等约束未正确设定。模型结果虽合理,但出现标签切换问题:相似轨迹的男女被分到错位类别(预期1↔1、2↔2、3↔3,实际为1↔3、2↔1、3↔2),寻求正确的模型设定及标签切换的解决方法。
解决方案
一、修正FLXMRmultinom的模型设定
FLXMRmultinom确实不支持varFix和fixed参数,要实现按簇分层的多分类结局LCGM,需调整公式结构和模型参数:
- 明确分层逻辑:将性别与增长项的交互项纳入类特异性参数,确保类内固定效应通过公式正确传递。
- 使用FLXMRmultinom的正确参数:该模型默认类内参数为固定效应,无需额外指定
varFix,只需通过公式明确类特异性项。
修正后的代码示例:
# 定义公式:将增长项、性别及交互项设为类特异性 lcgm_formula <- as.formula(rel_stat ~ 1 + age + I(age^2) + gender + gender:age) # 拟合flexmix模型 lcgm <- flexmix::stepFlexmix( rel_stat ~ age + I(age^2) + gender + gender:age | id, data = d, k = nr_of_classes, nrep = 50, # 实际分析保留50次重复避免局部最优 control = list(iter.max = 500, minprior = 0), model = flexmix::FLXMRmultinom(formula = . ~ ., fixed = ~0) )
- 拆分公式结构,确保所有增长相关项(含性别交互)均按簇估计;
fixed = ~0表示无全局固定效应,所有参数为类特异性,符合分层LCGM的要求。
二、解决标签切换问题
标签切换是潜类别模型的常见问题,可通过以下方法解决:
- 基于簇特征排序:提取各簇核心特征(如平均截距、斜率),按特征大小统一簇标签:
# 提取各簇的参数估计 cluster_params <- lapply(lcgm@models, function(m) coef(m)) # 按截距(或其他关键增长参数)排序簇 sorted_indices <- order(sapply(cluster_params, function(p) p["(Intercept)"])) # 重新分配簇标签 d$cluster <- factor(lcgm@cluster, levels = sorted_indices, labels = 1:nr_of_classes)
- 添加锚定约束:拟合时对某一簇的参数设置固定值作为锚点,避免标签切换。例如固定第一簇的截距:
# 自定义带锚定约束的FLXMRmultinom模型 anchored_model <- flexmix::FLXMRmultinom( formula = rel_stat ~ 1 + age + I(age^2) + gender + gender:age, fixed = ~1, # 全局固定项,锚定第一簇 ref = 1 # 指定第一簇为锚定簇 ) # 拟合锚定模型 lcgm_anchored <- flexmix::stepFlexmix( rel_stat ~ age + I(age^2) + gender + gender:age | id, data = d, k = nr_of_classes, nrep = 50, control = list(iter.max = 500, minprior = 0), model = anchored_model )
- 多次拟合后择优:利用
nrep参数进行多次拟合,选择对数似然最高的模型,再对该模型的簇进行特征排序,确保标签一致性。
内容的提问来源于stack exchange,提问作者Samuel Saari
相关产品推荐
相关产品推荐

