如何估计新主题的随机效应以进行预测(GNU R 的 lme4 中的示例)

机器算法验证 r 混合模式 lme4-nlme
2022-03-25 17:45:57

我想知道如何从拟合的混合效应模型(在常客框架中)对新主题进行预测。

具体来说,我们对一组受试者进行了多次观察,我们可以在一系列时间点(例如 0-9)内拟合具有受试者特定随机截距和随机斜率的混合效应模型。

现在,我们观察几个初始时间点(比如 0-5)的新主题。我们想使用拟合模型在时间点 6-9 对这些新主题进行预测。

所以,我设想的步骤是:

  1. 使用第一组受试者估计模型,获得固定效应和随机效应协方差。
  2. 使用拟合模型,根据观察到的数据获取新主题随机截距和随机斜率的估计值。
  3. 最后,使用特定于主题的随机效应在未观察到的时间对新主题进行预测。

我不确定如何进行步骤 (2)。我假设可以使用最大似然 (ML) 来估计特定于主题的随机效应,并且这些估计对于每个新主题都是独立的 - 因为我们不希望新主题的任何反馈用于推理模型(步骤 2 应该对步骤 1 没有影响)。然而,在受限最大似然 (REML) 框架中拟合混合效应模型是很典型的,因为 ML 会导致对随机效应协方差的有偏估计……但对于估计特定主题的随机效应来说,这是否正确以协方差为条件,还是 ML 就足够了?

对于步骤(3),有一个明显的问题是通过这个过程会传播多少不确定性。如果我们使用 ML 来估计新的特定主题随机效应,我们将完全忽略第一个模型中的不确定性。我们可以引导整个过程以获得特定主题随机效应的分布。B 计划是改用贝叶斯方法,尽管现在我对常客版本感兴趣。

为了具体说明,我提出了以下使用lme4inGNU R和内置sleepstudy数据集的最小工作示例

R.Version()$version.string
## "R version 3.4.1 (2017-06-30)"                                                                                                     
library("lme4")
packageVersion("lme4")
## ‘1.1.13’                                                                                                                           
library("merTools")
packageVersion("merTools")
## ‘0.3.0’                                                                                                                            


data("sleepstudy")

summary(sleepstudy)
nlevels(sleepstudy$Subject) ## 18 subjects                                                                                            


## Fit model to "Observed" data (only 15 subjects)                                                                                                       
sleepstudy.reduced <- subset( sleepstudy, Subject %in% levels(sleepstudy$Subject)[1:15] )

FITTED.reduced <- lmer(Reaction ~ Days + (Days|Subject), sleepstudy.reduced)


## Then imagine we get new observations on three new subjects on fewer days                                                                                   
sleepstudy.newdata <- subset( sleepstudy, (Subject %in% levels(sleepstudy$Subject)[16:18]) & (Days<=5) )

## ... and we want to make predictions for these subjects at new Days                                                                 
sleepstudy.toPredict <- subset( sleepstudy, (Subject %in% levels(sleepstudy$Subject)[16:18]), c("Days","Subject") )

## So, given FITTED.reduced,                                                                                                          
## can we estimates random-effects for the new subjects (sleepstudy.newdata)                                                          
##                                                                                                                                    
## Then plug those into predict(?) to get outcomes at new Days (sleepstudy.toPredict)      


## something like
## FITTED.newdata <- ( sleepstudy.newdata | FITTED.reduced )
## ^^^^ this is the bit I can't see how to do ^^^^

## followed by
## PREDICT <- predict( FITTED.newdata, newdata=sleepstudy.toPredict )

我玩过predict.merMod(),simulate.merMod()predictInterval()from merTools-package,但我不太明白如何使用它们来解决这个问题。

在我看来,下一步是根据拟合模型获得观察新受试者的可能性。

0个回答
没有发现任何回复~