2014-11-29 5 views
3

4 ульи были оснащены датчиками, которые собирали температуру, влажность, давление, децибелы внутри улья. это переменные отклика.Ошибка Lme: «Ошибка в восстановлении»

Обработка была экспозицией с использованием wifi, экспериментальные группы подвергались воздействию Wi-Fi с 1-го по 20-й день, затем снова с 35-45 дней, и данные собирались до дня дня 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_t/ч являются либо данные о температуре и влажности. «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-гну (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

ответ

9

Существует множество i здесь важны некоторые относящиеся к программированию (StackOverflow), но, вероятно, важны статистические проблемы (подходящие для CrossValidated или [email protected]).

TL; др Если вы просто хотите, чтобы избежать ошибки, я думаю, что вам нужно random=~1|hive (независимо от вашей переменной улей-индикатор), чтобы соответствовать модели, в которой базовая реакция (перехватывать) варьируется в зависимости от ульев, но я призываю вы читаете дальше ...

  • у нас есть (маленький!) reproducible example?
  • не используют attach(Hives), используйте data=Hives в вашем lme() вызова (не обязательно проблема, но [много] лучшая практика)
  • только с 4 ульев это немного сомнительно, случайная спецификация эффект через ульев будет работать (хотя с миллионами наблюдений вы могли бы сойти с рук)
  • случайный эффект должен состоять из категориальный (фактор) группирующая переменная; в вашем случае я думаю, что «hive» - это переменная группировки, но я не могу сказать по вашему вопросу, какая переменная идентифицирует ульи
  • вы должны почти наверняка иметь модель, которая учитывает тенденции во времени и вариации во временных трендах по ульям, т.е.модель случайных откосов, которые будут выражены в formula=...~...+time, random=~time|hive (где ... представляют биты существующей модели)
  • вам придется конвертировать время что-то дельное, чтобы использовать его в вашей модели (см ?strptime или lubridate пакета), что-то вроде секунд/минут/часов от времени начала может быть наиболее разумным. (Какое у вас временное разрешение? У вас есть несколько датчиков на улей, и в этом случае вам следует также рассмотреть возможность случайного влияния сенсора?)
  • с миллионами точек данных ваша модель подходит очень медленно; вы можете рассмотреть пакет lme4
  • с миллионами точек данных все будет статистически значимым и очень чувствительным к аспектам модели, которые не отображаются в данных, например (1) нелинейные тенденции во времени (например, рассмотреть возможность применения аддитивных моделей тенденций времени с помощью mgcv::gamm или пакета gamm4); (2) временная автокорреляция (рассмотрите добавление параметра correlation в вашу модель lme).
+0

Благодарим за отзыв. Я очень это ценю. Воспроизводимый код редактировался в OP. Несмотря на наличие> миллионов точек данных, наличие n = 4 (2 контрольных/2 экспериментальных) статистически сомнительно. В настоящее время только столбец $ treatment_hive указывает на лечение против контроля, но не на отдельные ульи. Должно ли это? Временное разрешение: около 15 точек регистрировались в минуту датчиками. – Evan

+0

Кроме того, после редактирования в ваших предложениях я не понял, как конвертировать время с начальной точки. как бы выглядел код? – Evan

+0

О выборе правильной модели, это слишком важно, если воздействие wifi повлияло на экспериментальные ульи. Кроме того, я думаю об уменьшении данных, потому что моя 32-битная машина не может обрабатывать модели. Например, как принимать данные каждые полчаса вместо нескольких раз в минуту, например. – Evan

Смежные вопросы