You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 09:51:19