使用 lmer 进行预测

机器算法验证 r 混合模式 最大似然 广义线性模型
2022-01-28 05:33:30

您好,我有两个问题听起来像是多级/混合模型的自然候选者,但我从未使用过。更简单的,我希望尝试作为介绍的一个如下:数据看起来像表格的许多行

x y innergroup outergroup

其中 x 是一个数字协变量,我想在其上回归 y(另一个数字变量),每个 y 都属于一个内部组,每个内部组都嵌套在一个外部组中(即,给定内部组中的所有 y 都属于同一个外部组) . 不幸的是,innergroup 有很多级别(数千个),每个级别对 y 的观察相对较少,所以我认为这种模型可能是合适的。我的问题是

  1. 我该如何编写这种多级公式?

  2. 一旦lmer拟合模型,如何从中进行预测?我已经安装了一些更简单的玩具示例,但没有找到 predict() 函数。大多数人似乎对推理比使用这种技术的预测更感兴趣。我有几百万行,所以计算可能是一个问题,但我总是可以酌情减少它。

一段时间内我不需要做第二个,但我不妨开始考虑它并玩弄它。我有和以前相似的数据,但没有 x,y 现在是形式的二项式变量(n,nk). y 也表现出很多过度分散,即使在内部群中也是如此。大部分的n不超过 2 或 3(或更少),因此要得出每个成功率的估计值yi我一直在使用 beta-binomial 收缩估计器(α+ki)/(α+β+ni), 在哪里αβ由 MLE 分别为每个内部组估计。这已经足够了,但是数据稀疏仍然困扰着我,所以我想使用所有可用的数据。从一个角度来看,这个问题更容易,因为没有协变量,但从另一个角度来看,二项式性质使它变得更加困难。有没有人有任何高(或低!)水平的指导?

4个回答

使用 R 公式表达因子关系遵循 Wilkinson 的符号,其中“*”表示交叉,“/”表示嵌套,但在处理混合效应模型或更普遍的随机效应的公式时存在一些特殊性。例如,两个交叉的随机效应可能表示为(1|x1)+(1|x2)我将您的描述解释为嵌套的情况,就像类嵌套在学校中(嵌套在州等),所以基本公式lmer看起来像(除非另有说明,gaussian默认情况下使用家庭):

y ~ x + (1|A:B) + (1|A)

其中 A 和 B 分别对应于您的内部和外部因素。B 嵌套在 A 中,两者都被视为随机因素。在较旧的nlme包中,这将对应于类似lme(y ~ x, random=~ 1 | A/B). 如果将 A 视为固定因子,则公式应为y ~ x + A + (1|A:B)

但值得更准确地检查 D. Bates 对lme4包的规范,例如在他即将出版的教科书lme4: Mixed-effects Modeling with R或同一网页上提供的许多讲义中。特别是,在拟合线性混合效应模型(R 中的 lme4 包)中有此类嵌套关系的示例。John Maindonald 的教程也提供了一个很好的概述:混合模型分析的解剖,使用 R 的 lme4 包最后,关于lme4 实现的 R 小插图的第 3 节包括一个嵌套结构分析的示例。

lme4中没有predict()功能(这个函数现在存在,见下面的评论),你必须使用估计的固定(见?fixef)和随机(见?ranef)效应来计算你自己预测的单个值,但另见关于lme4 中缺少预测函数的线程mcmcsamp()您还可以使用该函数从后验分布生成样本。但有时,它可能会发生冲突。有关更多更新信息,请参阅sig-me邮件列表。

ez包包含 ezPredict() 函数,该函数从 lmer 模型中获得预测,其中预测仅基于固定效应。它实际上只是glmm wiki中详细介绍的方法的包装。

我会使用Zelig中的“logit.mixed”函数,它是lime4 的包装器,可以非常方便地进行预测和模拟。

lme4的开发版内置了predict函数(predict.merMod)。它可以在https://github.com/lme4/lme4/上找到。

安装“来自 lme4 r-forge 存储库的几乎最新的开发二进制文件”的代码可以在上面的页面上找到,并且是:

install.packages("lme4", repos=c("http://lme4.r-forge.r-project.org/repos", getOption("repos")["CRAN"]))