随机效应变化的时间分析

机器算法验证 混合模式 多层次分析 随机效应模型 咕噜咕噜 流行病学
2022-04-09 18:03:17

我正在查看患者数据,其中感兴趣的主要结果是因紧急情况住院后 30 天内的死亡率。我正在研究 2003-2017 年的数据,每年大约有 100,000 次观察。我之前理解这是一个“简单”的多层次逻辑分析,我对此有一些经验,但我刚刚了解到,主要兴趣在于该期间结果的医院级别变化的变化。所以它还有一个时间序列元素,但数据不是在患者层面的重复测量(事实上,多次入院的患者将被排除在外)。

临床负责人说,他认为应该将数据分成每年的数据集,并在每个数据集上运行相同的模型,然后查看医院级别的变化如何变化。这让我觉得不理想。另一方面,我不知道什么是理想的。任何建议或类似研究的链接将不胜感激。

3个回答

新答案:2020!

主要兴趣在于医院级别差异的变化

您有 15 年的数据,包括 100 多家医院和每年大约 100,000 次观察,因此每个医院每年平均有大约 1000 次观察。

我认为只有一种方法可以回答研究问题,那就是将数据划分为子集。有多少子集将取决于您希望变化变化的频率。每年是一种选择,每季度是另一种选择,甚至是每月一次。

然后,您将在每个数据子集上拟合一个模型,并随机截取医院的数据。由于您的结果是二元的,这将是一个广义线性混合模型,具有二项式族和 logit 链接。您将对每个子集使用相同的模型公式。然后,您只需提取每个时间段的医院级别变化,即。截距的方差或标准偏差,hospital并以任何合适的方式呈现 - 图形将是我的选择。如果您认为可能存在季节性成分,那么您可能希望使用季度子集。

另一种方法(在另一个答案中提到)是将time:hospital交互建模为随机的。在这里,您将在整个数据集上拟合一个模型,但另外还有与医院交互的时间变量的随机截距。同样,您可以为时间变量选择最有意义的任何时间段。您还可以随机拟合一个仅包含医院的模型,并使用似然比检验来确定哪个模型最适合。然而,这并不能回答医院水平变化如何随时间变化的问题。这同样适用于使用相关结构,例如 AR1,因为这也不会说明医院级别变化的变化。

R需要更多信息才能在这里找到最佳解决方案,所以我只是用示例代码回答了一些场景。

建模结果

如果结果是二进制的,请使用family = binomial(). 如果是计数数据,请使用,family = poisson()因为它是固定的时间间隔。您还可以考虑将二进制数据聚合为计数,然后使用泊松。

我将从这里开始假设二项式。

为固定医院建模:时间交互

如果您的医院很少(例如,少于五家),那么推断随机效应超参数的信息将非常少。在这种情况下,它们可能只是被建模为固定的:

fit_full = glm(status ~ time * hospital, data = df, family = binomial())

那么由此产生的对time:hospital交互作用的推论可能会很有趣。

随机医院建模:时间交互

将术语建模为随机的唯一实际含义之一是它应用了收缩。也就是说,远离模型预测的数据点被视为部分随机波动,真实值更接近均值。在这里阅读更多

使用与上述相同的模型,但允许每个医院的随机斜率:

fit_full = lme4::glmer(status ~ time + (1 + time|hospital), family = binomial())

要测试随机斜率,您可以通过与不包含此项的(嵌套)模型进行比较来进行似然比测试 (LRT):

fit_null = lme4::glmer(status ~ time + (1|hospital), family = binomial())
summary(anova(fit_full, fit_null))

就个人而言,我偏爱贝叶斯推理,您可以使用brms非常类似于glmer. 作为快速修复,您还可以计算基于 BIC 的贝叶斯因子(参见Wagenmakers 等人(2007 年)

exp((BIC(fit_full) - BIC(fit_null))/2)

建模时间序列

我知道没有其他软件包可以执行上述操作模拟一些自相关brms(也许nlmer::lme)。brms不过,可能需要几个小时才能适应。对于 AR(1),它将类似于:

fit = brms::brm(status ~ time + (1 + time|hospital), data = df, family = bernoulli(), autocor = cor_ar(~1, p = 1))

如果您的日期仅以整数形式出现(2013、2014、2015、2016、2017),那么估计自回归系数的信息可能太少,您可以考虑将其省略。您确实有很多数据,因此现在可能需要这样做。您的时间变量需要更精细的分辨率才能识别自回归模型。

你真的被扔进了深渊!它看起来不像是时间序列问题,但似乎可以自然地建模为多级回归。作为第一步(当然是在通常的数据探索等之后),我可能会拟合一个广义线性混合效应模型。要包含时间组件,您可以添加时间变量(1=2003、2=2004 等)。可能有更好的方法来增加时间——我想其他人会对此有更好的选择。