R语言lme拟合多元多水平模型报奇异收敛错误咨询
R lme函数拟合多元多水平模型报singular convergence(7)解决方案
报错对应代码与信息
拟合代码:
MVMM2.2 <- lme(MUTU ~ - 1 + Respon+Respon:(x2+x4+x5+x9+x10+z1+z2+z3+x2*z1+x2*z2), random = ~ -1 + Respon:(x2 + x4) + Respon|kab.kota, weights=varIdent(form=~1|Respon), corr=corSymm(form=~as.numeric(Respon)|kab.kota/npsn), data=data_edit, method="ML", control = list(maxIter=2380, msMaxIter=2380, tolerance=1e-8, niterEM=1850))
报错输出:
Error in lme.formula(MUTU ~ -1 + Respon + Respon:(x2 + x4 + x5 + x9 : nlminb problem, convergence error code = 1 message = singular convergence (7)
报错本质是优化过程中出现奇异矩阵,要么是模型过参数化、待估参数超过数据支撑能力,要么是变量共线性、分组样本量不足、参数设置不合理导致无法得到稳定最优解。
可直接落地的解决步骤
按优先级依次尝试,每改完一次重新运行模型验证是否收敛:
- 简化随机效应结构
当前随机效应设定~ -1 + Respon:(x2 + x4) + Respon|kab.kota会估计大量随机效应的方差与协方差参数,是奇异收敛的最常见诱因。先删除高阶随机斜率,从最简随机结构random = ~ -1 + Respon|kab.kota开始跑,能收敛的话再逐个加回Respon:x2、Respon:x4随机斜率,定位触发问题的冗余随机项。 - 替换过复杂的相关结构
代码中corSymm是无结构相关矩阵,待估参数数量随Respon的水平数呈平方级增长,很容易过参数化。先替换为更简约的corCompSymm(复合对称结构)试跑,如果简约结构能收敛,再评估是否真的需要使用无结构相关设定。同时检查kab.kota/npsn嵌套分组下,Respon的所有水平是否完整、排列顺序是否一致,分组内缺失Respon水平也会触发奇异问题。 - 排查固定效应共线性
固定效应包含多组二阶交互项,很容易出现多重共线性。先对所有预测变量做共线性检验,剔除方差膨胀因子VIF大于10的变量;所有连续预测变量提前做中心化处理,可以大幅降低交互项带来的共线性问题;同时检查是否存在分类变量完全分离、连续变量极端异常值的情况,提前做异常值缩尾处理。 - 调整优化控制参数
当前把收敛容差tolerance设为1e-8过于严格,很容易在接近最优解时被判定为奇异。先把容差调回默认量级1e-6~1e-5,同时可以将优化器从默认的nlminb换成optim,参考控制参数设置:control = lmeControl( maxIter=2000, msMaxIter=2000, tolerance=1e-6, niterEM=1000, msMaxEval=2000, opt="optim" ) - 核查分层样本量
检查kab.kota(高层)、npsn(低层)两个分组维度的样本量,如果存在大量分组仅包含1~2条观测,随机效应的方差无法被有效估计,也会触发奇异收敛,这类情况需要合并样本量过小的分组,或者调整模型的嵌套层级设定。
内容的提问来源于stack exchange,提问作者aripal Togo
相关产品推荐
相关产品推荐

