R语言JM包联合建模报错:optim函数传入非有限值问题求助
线性混合模型与Cox模型联合建模报错修复方案
我在运行线性混合模型与Cox模型的联合建模时遇到报错,原代码及报错信息如下:
原代码
rbcLME <- lme(log(RBC.counts+1)~time+time:DAC, random = ~1|ID, data=no.missing.rbc) rbcSURV <- coxph(Surv(surv.time, death) ~ GroupforDCAtreatment, data = rbc.df, x = TRUE) rbc.JM <- jointModel(rbcLME, rbcSURV, timeVar = "time", method = "piecewise-PH-GH")
报错信息
Error in optim(thetas, opt.survPC, gr.survPC, method = "BFGS", control = list(maxit = if (it < : non-finite value supplied by optim
以下是针对该报错的修复方案:
1. 更换优化器并调整迭代参数
optim抛出的非有限值错误通常源于BFGS优化器在搜索过程中遇到目标函数不收敛的情况,尝试更换更稳健的优化方法并增加迭代次数:
# 使用Nelder-Mead优化器,提升最大迭代次数 rbc.JM <- jointModel(rbcLME, rbcSURV, timeVar = "time", method = "piecewise-PH-GH", control = list(optim.method = "Nelder-Mead", maxit = 1000))
2. 检查并预处理数据
- 确保纵向数据
no.missing.rbc与生存数据rbc.df的ID完全匹配,无缺失或不一致条目 - 对
time变量做标准化处理,避免因数值范围过大导致优化不稳定:
# 标准化time变量 no.missing.rbc$time <- scale(no.missing.rbc$time) rbc.df$time <- scale(rbc.df$time) # 重新拟合LME模型 rbcLME <- lme(log(RBC.counts+1)~time+time:DAC, random = ~1|ID, data=no.missing.rbc) # 重新拟合联合模型 rbc.JM <- jointModel(rbcLME, rbcSURV, timeVar = "time", method = "piecewise-PH-GH")
3. 调整联合模型的拟合方法
尝试更换联合模型的基础方法,比如使用样条基函数替代分段比例风险模型:
# 使用样条PH模型,设置3个节点 rbc.JM <- jointModel(rbcLME, rbcSURV, timeVar = "time", method = "spline-PH-GH", control = list(n.knots = 3))
4. 验证Cox模型的拟合有效性
确保Cox模型无分离问题或极端系数,必要时添加惩罚项稳定拟合:
# 查看Cox模型摘要,检查系数合理性 summary(rbcSURV) # 若存在分离问题,使用弹性网惩罚拟合Cox模型 library(glmnet) cox_pen <- glmnet(x = rbcSURV$x, y = Surv(rbc.df$surv.time, rbc.df$death), family = "cox", alpha = 0.5) # 提取最优惩罚系数作为联合模型初始值 pen_coef <- coef(cox_pen, s = "lambda.min") init_surv <- pen_coef[pen_coef != 0] # 带初始值拟合联合模型 rbc.JM <- jointModel(rbcLME, rbcSURV, timeVar = "time", method = "piecewise-PH-GH", inits = list(surv = init_surv))
内容的提问来源于stack exchange,提问作者user3561144
相关产品推荐
相关产品推荐

