R:混合模型 - 如何使用同一变量的先前值预测变量

R: mixed models - how to predict a variable using previous values of this same variable

我在多层次模型上遇到困难,并准备了一个可重现的例子来说明。

假设我想在 follow_up 的 12 个月后预测 children 的身高,即他们在月份 == 12 时的身高,使用先前获得的身高值,而且他们以前的权重值,具有这样的数据框。

df <- data.frame (ID = c (1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3),
                  month = c (1, 3, 6, 12, 1, 6, 12, 1, 6, 8, 12),
                  weight = c (14, 15, 17, 18, 21, 21, 22, 8, 8, 9, 10),
                  height = c (100, 102, 103, 104, 122, 123, 125, 82, 86, 88, 90))
        
   ID month weight height
1   1     1     14    100
2   1     3     15    102
3   1     6     17    103
4   1    12     18    104
5   2     1     21    122
6   2     6     21    123
7   2    12     22    125
8   3     1      8     82
9   3     6      8     86
10  3     8      9     88
11  3    12     10     90

我的计划是使用以下模型(显然我有比 3 个患者更多的数据,每个患者的行数更多)。因为我的身高在每个患者中都是相关的,所以我想添加一个随机截距 (1|ID),还有一个随机斜率,这就是我添加 (month|ID) 的原因(我在几个预测分数的例子中看到学生认为“场合”或“日间测试”是作为随机斜率添加的)。所以我使用了下面的代码。

library(tidymodels)
library(multilevelmod)
library(lme4)

#Specifications
mixed_model_spec <- linear_reg() %>% 
  set_engine("lmer") %>% 
  set_args(na.action=na.exclude, control = lmerControl(optimizer ="bobyqa"))

#Fitting the model
mixed_model_fit <- 
  mixed_model_spec %>% 
  fit(height ~ weight + month + (month|ID),
      data = df)

我的第一个问题是,如果我将“权重”(及其每个 ID 的多个值)添加为变量,则会出现以下错误“边界(单数)拟合:请参阅帮助('isSingular')” (即使在我的大数据集中),而如果我只为每个患者保留一个值的变量(例如性别),我就没有这个问题。 谁能解释一下为什么?

我的第二个问题是,通过训练一个类似的模型,我可以预测新的 children 几乎所有月份的身高值(我在第 1 个月、第 X 个月、... ,第 12 个月),我可以将其与我的测试集上收集的真实值进行比较。 然而,我感兴趣的是预测第 12 个月的值,并整合此测试中每个患者的先前值。换句话说,我不希望模型从头开始预测整组值(更准确地说,从用于训练的患者数据),而是从新患者在第 1 个月、第 4 个月、第 1 个月的先前值预测6等已经可用。我如何编写代码来获得这样的预测?

非常感谢您的帮助!

My first problem is that if I add "weight" (and its multiple values per ID) as a variable, I have the following error "boundary (singular) fit: see help('isSingular')" (even in my large dataset), while if I keep only variables with one value per patient (e.g. sex) I do not have this problem. Can anyone explain me why ?

当随机效应结构过于复杂而无法被数据支持时,就会发生这种情况。除此之外,通常不可能准确地确定为什么在某些情况下会发生这种情况,而在其他情况下不会。基本上模型是过度拟合的。您可以尝试的几件事是:

  • month 变量为中心
  • 以其他数值变量为中心
  • 通过使用 || 而不是 |
  • 在随机斜率和截距之间没有相关性的情况下拟合模型

这里还有一些相关的问答:

https://stats.stackexchange.com/questions/378939/dealing-with-singular-fit-in-mixed-models/379068#379068

https://stats.stackexchange.com/questions/509892/why-is-this-linear-mixed-model-singular/509971#509971

至于第二个问题,听起来您想要某种时间序列模型。诸如 AR(1) 之类的自回归模型可能就足够了,但这不受 lme4 支持。您可以试试 nmle