我有一个长格式数据集,包含大约 7 万人的数据。该数据跟踪基线后 3、6 和 12 个月的连续随访测量(每个时间点都有 +/- 1 个月的缓冲期)。成员只需在任何时间点采取 1 项后续措施即可纳入研究。基线时有完整的数据,第 3 个月的数据完整率为 94%,但在后期时间点有相当多的缺失(第 6 个月为 60%,第 12 个月为 87%)。
身份证 | 时间_点 | 持续成果 |
---|---|---|
1 | 0 | 7.5 |
1 | 3 | 7.2 |
1 | 6 | 不适用 |
1 | 12 | 7.0 |
我正在使用 R 的
lmer
包中的 lme4
命令来尝试运行此模型,将时间作为固定效应中的因子变量,并结合随机斜率(时间作为连续变量)和随机效应中的截距,将每个成员视为一个单独的集群。
代码:
m.unstructured <- lmer(outcome ~ time_factor + (1 + time | id),
data = df.long
)
我期望获得一个模型摘要,其中包含每个时间点相对于基线的变化值。但是,模型无法收敛并出现以下错误:
Warning message:
In checkConv(attr(opt, "derivs"), opt$par, ctrl = control$checkConv, :
Model failed to converge with max|grad| = 0.00317116 (tol = 0.002, component 1)
只有当我添加像 Nelder-Mead 或 bobyqa 这样的优化器时,我才能让模型运行,例如
control = lmerControl(optimizer ="Nelder_Mead")
。当我尝试使用 nlme
命令在 lme
包中运行此模型时,我遇到了类似的问题。
我的问题是,这个论证的作用是什么?为什么没有它我的模型就无法运行?是因为样本量大、缺失广泛吗?我可以假设这种使用优化器的方法会产生有效的结果吗?最终,我想比较协方差结构并添加额外的固定效应,例如性别和年龄,但在我能够理解如何运行我的模型之前,我陷入了困境。感谢您提供的任何指导!
lme4
文档和辅助信息中有很多关于此的信息:
更具体地说,本页说明收敛检查机制在大约 10,000 个观察值时开始变得不可靠(您有大约 120K 个观察值:“观察值”是数据框中的一行,即主题:时间点组合)。
您所说的错误在技术上并不是错误,而是一个警告;这是一个重要的区别(请参阅here了解更多信息。如果您确实有错误,您将无法检索结果;因为这是警告,所以您可以。
我的建议:
allFit()
使用所有可用的优化器来尝试您的模型time_factor
的固定效应或随机效应方差,以及对您的应用程序来说重要的任何容差)
lmerControl(calc.derivs = FALSE)
来抑制(容易出错的)导数计算,这将使您免受进一步警告(!)并节省时间...