r - LME 错误 : "Error in reStruct"

标签 r mixed-models

4 个 hive 配备了传感器,用于收集 hive 内的温度、湿度、压力和分贝。这些是响应变量。

治疗是wifi暴露,实验组从第1天到第20天,然后从第35-45天再次暴露在wifi下,直到第54天收集数据。n个荨麻疹= 4,收集的数据n个每个 hive 中的传感器 = ~ 百万。

我在运行混合效果模型时遇到了困难。

所有 hive 的响应变量都有一个数据框。

names(Hives)
[1] "time"           "dht22_t"        "dht11_t"        "dht22_h"       
[5] "dht11_h"        "db"             "pa"             "treatment_hive"
[9] "wifi"   

时间以“%Y-%m-%d %H:%M:%S”为单位,dht11/22_t/h 是温度和湿度数据。 “wifi”是对应于暴露时间的二分变量(1=on 0=off),治疗 hive 是暴露于wifi的 hive 的另一个二分变量(1=exposure,0=control)。

这是我得到的错误。

attach(Hives)
model2 = lme(pa_t~wifi*treatment_hive, random=time, na.action=na.omit, method="REML",)

Error in reStruct(random, REML = REML, data = NULL) : 
Object must be a list or a formula

以下是代码示例:

    time    dht22_t dht11_t dht22_h dht11_h db  pa  treatment_hive  wifi
1   01/09/2014 15:19    NA      NA  NA      NA  51.75467    NA      0   1
2   01/09/2014 15:19    30.8    31  59.8    44  55.27682    100672  0   1
3   01/09/2014 15:19    30.8    31  60.3    44  54.81995    100675  0   1
4   01/09/2014 15:19    30.8    31  60.9    44  54.14134    100671  0   1
5   01/09/2014 15:19    30.8    31  61.1    44  53.88574    100672  0   1
6   01/09/2014 15:19    30.8    31  61.2    44  53.68800    100680  0   1

R 版本 2.15.1 (2012-06-22) 平台:i486-pc-linux-gnu(32位)
附包: [1] ggplot2_0.8.9 proto_0.3-9.2 reshape_0.8.4 plyr_1.7.1 nlme_3.1-104
[6] lme4_0.999999-0 Matrix_1.0-6 lattice_0.20-6

最佳答案

这里有各种各样的问题,一些与编程有关(StackOverflow)但可能是统计问题(适用于 CrossValidatedr-sig-mixed-models@r-project.org ) 更重要。

tl;dr 如果您只是想避免错误,我认为您需要 random=~1|hive (无论您的 hive-indicator 变量是什么)来适应基线响应(拦截)因荨麻疹而异的模型,但我鼓励您继续阅读...

  • 我们可以有一个(小!)reproducible example ?
  • 不要使用 attach(Hives),在 lme() 调用中使用 data=Hives(不一定是问题,但[更多] 更好的做法)
  • 只有 4 个 hive ,一个跨 hive 的随机效应规范是否会起作用有点值得怀疑(尽管有一百万个观察结果你可能会侥幸逃脱)
  • 随机效应必须由一个分类(因子)分组变量组成;在您的情况下,我认为“ hive ”是分组变量,但我无法从您的问题中分辨出哪个变量标识了 hive
  • 几乎可以肯定,您应该有一个模型来说明时间趋势和跨 hive 的时间趋势变化,即随机斜率模型,它可以表示为 formula=...~...+time , random=~time|hive(其中 ... 代表现有模型的位)
  • 您必须将时间转换为合理的值才能在模型中使用(参见 ?strptimelubridate 包),例如秒/分钟/小时从开始时间可能是最明智的。 (你的时间分辨率是多少?每个 hive 有多个传感器,在这种情况下,你应该考虑拟合传感器的随机效应吗?)
  • 拥有数百万个数据点,您的模型拟合可能会非常缓慢;您可能需要考虑 lme4
  • 拥有数百万个数据点,一切都将具有统计意义,并且对模型中未出现在数据中的方面非常敏感,例如 (1) 非线性时间趋势(例如,考虑拟合mgcv::gammgamm4 包的时间趋势); (2) 时间自相关(考虑在您的 lme 模型中添加 correlation 参数)。

关于r - LME 错误 : "Error in reStruct",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27207594/

相关文章:

r - 如何在正确的方向上记录变换 R geom_histogram 的 y 轴?

r - 如何绘制 lme 模型的各个轨迹

r - lme() 函数中截距的两个随机效应

r - 如何获得 lmer 对象的置信区间?

r - 在 mclogit 中编码随机效应

r - clmm后如何使用texreg(我想提取随机效应成分)

r - ggmap 改变 map 的大小

r - 将多个字符串拆分为 R 矩阵中的多列

r - 在 POSIXct 样本中生成随机时间

r - 使用nls跳过数据表计算中的错误