首页 > 解决方案 > 如何在 predict() 函数中使用的 newdata data.frame 中指定随机效果名称?- lme4

问题描述

我在使用 lme4 中的 predict() 函数时遇到问题。更准确地说,我不太清楚如何声明要在 newdata 数据帧中使用的随机效应的名称,我将它提供给 predict() 函数,以获得一些预测。我将尝试详细描述我的问题。

数据

我正在使用的数据是纵向的。我有 119 个观察结果,对于每个观察结果,我有几个(6-7)个测量值,它们代表蛋白质的大小,它们会随着时间的推移聚集并变大(我们称之为 LDL)。

模型

用来描述这个过程的模型是一个理查德曲线(广义逻辑函数),可以写成

在此处输入图像描述

现在,我为每个观察的测量组拟合一条单独的曲线,具有以下固定的随机效应和变量:

alpha_fix - alpha 的固定效应
alpha|Obs - alpha 的随机效应,随观测值变化
gamma_fix - γ 的固定效应
gamma|Obs - gamma 的随机效应,随观测值变化
delta_f - 固定效应
Time - a连续变量,以小时为单位的时间
LDL - 响应变量,连续,表示时间点 t 的蛋白质大小。

预测

一旦我拟合了模型,我想用它来预测 每个观察值在特定时间点的LDL值。为此,我需要使用 predict 函数并为newdata分配一个数据框。阅读此处的文档,它说以下内容:

如果 re.form 中包含任何随机效应(见下文),newdata 必须包含与原始模型中使用的所有分组变量和随机效应相对应的列,即使并非所有都用于预测;但是,在这种情况下,它们可以安全地设置为 NA

现在,按照我的理解,我需要一个数据框 newdata,在我的例子中包含以下列:“Time”、“Obs”、“alpha_f”、“gamma_f”、“delta_f”,以及两个分别为 alpha 和 gamma 的随机效应的列。但是,我不确定如何命名这两个具有随机效应的列,以便 predict() 函数理解它们。我尝试了“alpha|Obs”和“gamma|Obs”,以及“Obs$alpha”、“Obs$gamma”,但都抛出了错误

FUN(X[[i]], ...) 中的错误:re.form 中指定的随机效应在原始模型中不存在。

我想知道是否有人知道正确的方法是什么。

为了完整起见,下面提供了用于拟合模型的代码:

    ModelFunction = function (alpha, gamma, delta, Time) {

  15 + (alpha-15) / (1 + exp ((gamma-Time) / delta)) 
}


ModelGradient = deriv(body(ModelFunction) [[2]], namevec = c ("alpha", "gamma", "delta"), function.arg = ModelFunction)

starting_conditions = c (alpha = 5000, gamma = 1.5, delta = 0.2) # Based on visual observation

fit = nlmer (
  LDL ~ 
    ModelGradient (alpha, gamma, delta, Time) 
  ~ (gamma | Obs) + (alpha | Obs), 
  start = starting_conditions, 
  nlmerControl(optimizer="bobyqa", optCtrl = list(maxfun = 100000)),
  data = ldlData)

如果有人能给我一些建议,我将不胜感激。

谢谢你的时间!

标签: rpredictlme4

解决方案


推荐阅读