带相关结构的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
相关产品推荐
相关产品推荐

