2014-06-27 13 views
5

Próbuję rozliczać autokorelację w GLMM. Moja zmienna odpowiedzi to boolean, reprezentuje obecność i nieobecność zdarzenia w cyklu życia zestawu gniazd pszczół. Próbuję przewidzieć prawdopodobieństwo takiego zdarzenia za pomocą zestawu zmiennych numerycznych opisujących stan każdego gniazda. W związku z tym użyłem rozkładu dwumianowego w uogólnionym modelu z gniazdem jako efektem losowym (za pomocą glmer()). Jednak zdarzenia są autokorelowane, więc dostaję dość przerażający wzór w moich resztkach. Gdybym używał rozkładu gaussowskiego w błędach bez efektów losowych, oszacowałbym niektóre parametry korelacji za pomocą struktury korelacji z gls(), ale to nie zadziała w tym przypadku. Szukałem sposobów włączenia tej autokorelacji do GLMM, ale wydaje mi się, że nie jest to właściwe. Odkryłem, że zestaw danych można przekształcić za pomocą funkcji ts() i diff(), aby umożliwić uwzględnienie modelu jako predykatora, poprzednich wartości odpowiedzi. Działa to dla modelu liniowego lm(), dzięki czemu reszty są o wiele ładniejsze.Rachunkowość korelacji czasowej w GLMM

basket.1<-subset(basket,select=c(Nest,day,number_cells,provitioning_cells,closed_cells, 
          reopened_cells,eclosed_cells,pollen)) 
basket.ts<-ts(as.matrix.data.frame(basket.1),start=1,frequency=9) 
m.basket.ts1<-lm(pollen~provitioning_cells+reopened_cells+closed_cells 
      +eclosed_cells+day,data=diff(basket.ts,differences=2))` 

Jednak ani lmer(), ani glm() nie akceptują wyjścia tych funkcji. Problem polega na tym, że przekształcenie powoduje, że niektóre wartości są ujemne, a glm() nie przyjmuje ujemnych wartości dla modelu dwumianowego (co ma sens). Czytałem, że możliwe jest uwzględnienie autokorelacji glm(), która już byłaby udoskonaleniem, ale nie mogę sprawić, żeby działała. Czytałem również, że glmmPQL() może zawierać struktury korelacji. Ten model działa, ale nie poprawia wzorców w moich resztach. Nadal wydają się być autokorelowane.

m.basket.glmm1<-glmmPQL(pollen~provitioning_cells+reopened_cells+closed_cells 
      +eclosed_cells+day,random=~1|Nest,family=binomial,correlation=corAR1(form=~day), 
      data=basket) 

Próbowałem różnych struktur korelacji i żaden z nich nie wydaje się działać.

W końcu próbowałem pakietu dyn, który ma umożliwić funkcje regresji do obsługi szeregów czasowych. Ale po raz kolejny funkcja nie działa z wartościami wytworzonymi przez transformację.

m.bas.glm.dyn1<-dyn$glm(pollen~provitioning_cells+reopened_cells+closed_cells 
        +eclosed_cells+day,family=poisson,data = diff(basket.ts,differences=3)) 

Podsumowując, muszę uruchomić GLMM z korelacji czasowych, ale nie mogę znaleźć sposób, aby to zrobić. Byłbym bardzo wdzięczny za pomoc.

Pozdrawiam !!!

Odpowiedz

1

Czy możesz dać nam powtarzalny przykład? Zasadniczo nie powinno być zbyt trudno opóźniać wartości "ręcznie", np.

basket.1 <- subset(basket,select=c(Nest,day,number_cells, 
          provitioning_cells,closed_cells, 
          reopened_cells,eclosed_cells,pollen)) 
n <- nrow(basket.1) 
basket.2 <- transform(basket.1,pollen.lag1=c(pollen[2:n],NA), 
         pollen.lag2=c(pollen[3:n],rep(NA,2))) 

library("lme4") 
m.basket.glmm1 <- glmer(pollen~provitioning_cells+ 
        reopened_cells+ closed_cells+ 
        eclosed_cells+day+pollen.lag1+pollen.lag2+ 
        (1|Nest), 
        family=binomial,data=basket.2) 

zależności od wielkości zbioru danych, jeżeli day jest numeryczne zamiast czynnika może chcesz (day|Nest) zamiast (1|Nest) ...

+0

Co zrobić, jeśli nie wiemy, jak bardzo w tyle wartości, ? @benbolker – lg929

+0

Zwykle patrzysz na wykres funkcji autokorelacji resztek prostego modelu. –

Powiązane problemy