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

带相关结构的nlme模型拟合失败且导致R崩溃问题求助

nlme拟合带相关结构模型时R崩溃问题排查

我有一个带非线性项的混合模型,因此打算使用R包nlme而非lme。但即便不额外修改模型,切换到nlme后就会导致RStudio和R崩溃。
我发现哪怕是用lme可以轻松拟合的模拟数据,在我的设备上运行nlme也会出现该问题。

复现步骤

1. 构造数据集

首先加载依赖库,并构建包含分组id和空间坐标x的data.frame:

library(nlme)

nid <- 300
nx <- 10

data <- expand.grid(
  x = seq(nx),
  id = seq(nid)
)

2. 生成误差和随机效应

接下来分别生成相关误差、独立误差列,以及每个id对应的随机截距值,arima.sim的输出需要做归一化处理:

data$ec <- c(
  replicate(
    nid,
    as.numeric(
      arima.sim(
        model = list(
          order = c(1, 0, 0),
          ar = 0.5
        ),
        n = nx
      )
    )
  )
)
data$ec <- data$ec / sd(data$ec)
data$eu <- rnorm(nid * nx)
data$random <- rep(rnorm(nid), each = nx)

3. 生成因变量

现在我们生成3个因变量对应3种模型:第一种是带独立(常规)误差的混合模型,第二种包含指数(AR1)相关结构,第三种结合二者。我设置截距为1,随机效应标准差为2,总残差标准差为3:

data$y1 <- 1 + 2 * data$random + 3 * data$eu
data$y2 <- 1 + 2 * data$random + 3 * data$ec
data$y3 <- 1 + 2 * data$random + sqrt(8) * data$ec + sqrt(1) * data$eu

4. 可正常运行的lme代码

以下所有lme模型均可正常拟合,输出结果符合预期:

l1 <- lme(
  fixed = y1 ~ 1,
  random = ~ 1 | id,
  data = data,
  method = "ML"
)
l2 <- lme(
  fixed = y2 ~ 1,
  random = ~ 1 | id,
  correlation = corExp(
    form = ~ x | id
  ),
  data = data,
  method = "ML"
)
l3 <- lme(
  fixed = y3 ~ 1,
  random = ~ 1 | id,
  correlation = corExp(
    form = ~ x | id,
    nugget = TRUE
  ),
  data = data,
  method = "ML"
)

5. 导致崩溃的nlme代码

据我所知,以下nlme代码定义的模型与上述完全一致。第一个模型可正常运行,但带相关结构的模型会导致R/RStudio崩溃,无任何警告或报错信息。调整参数和nlmeControl暂未解决问题,但我认为可从nlmeControl入手寻找解决方案:

nlme(
  model = y1 ~ b0,
  fixed = b0 ~ 1,
  random = b0 ~ 1,
  group = ~ id,
  data = data,
  start = list(
    fixed = fixed.effects(l1),
    random = setNames(random.effects(l1), "b0")
  ),
  method = "ML"
)
nlme(
  model = y2 ~ b0,
  fixed = b0 ~ 1,
  random = b0 ~ 1,
  group = ~ id,
  correlation = corExp(
    form = ~ x
  ),
  data = data,
  start = list(
    fixed = fixed.effects(l2),
    random = setNames(random.effects(l2), "b0")
  ),
  method = "ML"
)
nlme(
  model = y3 ~ b0,
  fixed = b0 ~ 1,
  random = b0 ~ 1,
  group = ~ id,
  correlation = corExp(
    form = ~ x,
    nugget = TRUE
  ),
  data = data,
  start = list(
    fixed = fixed.effects(l3),
    random = setNames(random.effects(l3), "b0")
  ),
  method = "ML"
)

疑问

  • 是否有人遇到过同类问题?
  • 上述示例代码在其他设备上是否会出现相同问题?
  • 调整nlmeControl的哪些参数可尝试修复该问题?

内容的提问来源于stack exchange,提问作者LBogaardt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:24:01