R Lme错误:";“重构中的错误”;

R Lme错误:";“重构中的错误”;,r,mixed-models,R,Mixed Models,4个蜂箱装有传感器,可收集蜂箱内的温度、湿度、压力和分贝。这些是响应变量 names(Hives) [1] "time" "dht22_t" "dht11_t" "dht22_h" [5] "dht11_h" "db" "pa" "treatment_hive" [9] "wifi" 治疗为wifi暴露,实验组从第1天到第20天暴露于wifi,然后从第35天到第45

4个蜂箱装有传感器,可收集蜂箱内的温度、湿度、压力和分贝。这些是响应变量

names(Hives)
[1] "time"           "dht22_t"        "dht11_t"        "dht22_h"       
[5] "dht11_h"        "db"             "pa"             "treatment_hive"
[9] "wifi"   
治疗为wifi暴露,实验组从第1天到第20天暴露于wifi,然后从第35天到第45天再次暴露于wifi,收集数据直到第54天。n个蜂巢=4个,每个蜂巢中传感器收集的数据n=百万

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

所有蜂箱的响应变量都有一个数据框

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\u t/H为温度和湿度数据。“wifi”是一个二分法变量(1=打开0=关闭),对应于暴露时间,治疗蜂箱是暴露于wifi的蜂箱的另一个二分法变量(1=暴露,0=控制)

这是我得到的错误

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\u 0.8.9原型\u 0.3-9.2重塑\u 0.8.4 plyr\u 1.7.1 nlme\u 3.1-104

[6] lme4_0.999999-0 Matrix_1.0-6 lattice_0.20-6

这里有很多问题,有些问题与编程(堆栈溢出)有关,但可能是统计问题(适用于或
r-sig-mixed-models@r-org
)更重要

tl;dr如果您只是想避免错误,我认为您需要
random=~1 | hive
(无论您的hive指示符变量是什么)来适应基线响应(截距)随hive而变化的模型,但我鼓励您继续阅读

  • 我们能要一个(小的!)吗
  • 不要使用
    attach(Hives)
    ,在
    lme()
    调用中使用
    data=Hives
    (不一定是问题,但[更好的]实践)
  • 由于只有4个蜂箱,跨蜂箱的随机效果规范是否有效有点值得怀疑(尽管有一百万次观察,你可能会侥幸成功)
  • 随机效应必须由分类(因子)分组变量组成;在您的例子中,我认为“hive”是分组变量,但我无法从您的问题中分辨出哪个变量标识hive
  • 几乎可以肯定的是,您应该有一个模型来解释蜂巢中的时间趋势和时间趋势的变化,即随机斜率模型,它可以表示为
    公式=…~…+时间,随机=~time |蜂巢
    (其中
    表示现有模型的位)
  • 您必须将时间转换为合理的时间,以便在您的模型中使用它(请参见
    ?strtime
    lubridate
    包),从开始时间算起的秒/分钟/小时可能是最合理的。(你的时间分辨率是多少?每个蜂箱有多个传感器,在这种情况下,你也应该考虑传感器的随机效应)?<
  • 由于有数百万个数据点,您的模型拟合可能非常缓慢;您可能想考虑<代码> LME4<代码>包
  • 有数百万个数据点,所有事物都将具有统计上的显著性,并且对模型中不出现数据的方面非常敏感,例如(1)时间的非线性趋势(例如,考虑时间趋势与<代码> MGCV的拟合加性模型::GAMM < /代码>或<代码> GAM4< /代码>包);(2) 时间自相关(考虑在
    lme
    模型中添加
    correlation
    参数)

感谢您的回复。我非常感激。可复制代码被编辑到OP中。尽管数据点>百万,但n=4(2个对照/2个实验)在统计学上是可疑的。目前,只有列$treatment\u hive指定治疗与对照,而不是单个hive。应该吗?时间分辨率:传感器每分钟记录大约15个点。另外,在编辑了您的建议后,我还不知道如何从起点转换时间。代码是什么样子的?关于选择正确的型号,还不能确定wifi暴露是否对实验性蜂箱有影响。此外,我正在考虑减少数据量,因为我的32位机器无法处理运行模型的问题。例如,每半小时采集一次数据点,而不是一分钟几次。每个蜂巢有多少个传感器?即使每小时采样一次,我也只能得到54*4*24*60=311040个总样本——你真的是每5秒采样一次吗?如果你的编程问题得到解决(即,如果你能让任何模型在
lme
中运行,只需一小部分数据),我强烈建议你接受这个答案,并将你的问题的一个版本发布在网站上。