r - 如何在 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)
如果有人能给我一些建议,我将不胜感激。
谢谢你的时间!
解决方案
推荐阅读
- ruby - 如何使用 Selenium 检测 SSL 证书信息?
- android - 片段中的 RecyclerView:没有附加适配器跳过布局
- angular - Angular 5路由器解析器未获取数据
- java - 从字符串的开头提取一些文本
- python - 添加到新窗口的文本在诅咒中不可见
- python - Groupby 和重新采样时间序列,因此日期范围是一致的
- jquery - 页面加载完成后仅调用一次函数
- ide - 将代码输入 Python 的 PyCharm IDE 时出现问题?
- c# - 为什么添加 COM 组件会引发 ReflectionTypeLoadException?
- r - 单线创建迭代序列列表?