Jak radzić sobie z ostrzeżeniem „non-integer” z ujemnego dwumianowego GLM?

11

Staram się modelować średnie intensywności pasożytów atakujących gospodarza w R przy użyciu ujemnego modelu dwumianowego. Ciągle otrzymuję 50 lub więcej ostrzeżeń, które mówią:

In dpois(y, mu, log = TRUE) : non-integer x = 251.529000

Jak sobie z tym poradzić? Mój kod wygląda następująco:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season, data=MI.df)
Natasza
źródło
1
Dodaj powtarzalny przykład dla osób do pracy.
Gung - Przywróć Monikę
5
Ujemny dwumianowy GLiM jest rodzajem modelu zliczania. Odpowiedź ma się liczyć. Liczyć z definicji nie może być wartością ułamkową. Czy masz takie wartości?
Gung - Przywróć Monikę
1
Czy możesz wyjaśnić, co rozumiesz przez „intensywność”? Czy dzielisz liczbę pasożytów przez, powiedzmy, wielkość powierzchni gospodarza?
Gung - Przywróć Monikę
1
Mam dane, ale musiałem obliczyć intensywności, aby uwzględnić różne próby próbkowania. Rozumiem, że potrzebuję tam danych zliczania, ale zastanawiałem się tylko, czy istnieje inny sposób pracy z liczbami niecałkowitymi przy użyciu tego samego modelu. Dla intensywności podzieliłem liczbę pasożytów z liczbą zainfekowanych żywicieli.
Natasha
2
@Natasha, nie rób tego. Jest bardzo prawdopodobne, że właściwy sposób rozwiązania tego problemu jest zgodny z odpowiedzią Gunga z przesunięciem. Jeśli chcesz się upewnić, edytuj swoje pytanie, aby wyjaśnić nieco więcej, skąd pochodzą różnice w intensywności próbkowania. Czy to różna liczba hostów? Różne długości próbkowania lub liczba kolektorów?
Ben Bolker,

Odpowiedzi:

9

Ujemny dwumian jest rozkładem danych zliczania, więc naprawdę chcesz, aby zmienna odpowiedzi była zliczana (czyli nieujemne liczby całkowite). To powiedziawszy, należy wziąć pod uwagę „różne próby próbkowania” (nie wiem dokładnie, o czym mówisz, ale rozumiem o co chodzi). Nie powinieneś jednak tego robić, dzieląc liczby przez inną liczbę. Zamiast tego musisz użyć tego drugiego numeru jako przesunięcia . Jest ładna dyskusja na temat CV, co to jest przesunięcie: kiedy użyć przesunięcia w regresji Poissona? Domyślam się, że twój model powinien być taki:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season + offset(log(num.hosts)), 
                data=MI.df)
gung - Przywróć Monikę
źródło
Dziękuję Ci. Spróbuję tego i wrócę, aby powiedzieć ci, co zrobiłem.
Natasha
OT: Coś mi brakuje, co to znaczy mieć wiele wyników w regresji?
Bakaburg
@ Bakaburg, nie mogę powiedzieć o czym mówisz.
Gung - Przywróć Monikę
Część „Larwy + Nimfy + Dorośli ~” w kodzie.
Bakaburg
1
@ Bakaburg, chodzi o to, jak działa R. Dodawanie jest elementarne. Dodanie 3 wektorów daje pojedynczy wektor, w którym każdy element jest sumą 3 odpowiednich elementów. Aby mieć wiele zmiennych odpowiedzi w LHS formuły R, musisz użyć cbind().
gung - Przywróć Monikę
4

To ostrzeżenie, a nie fatalny błąd. Glm.nb () oczekuje, że liczy się jako zmienna wynikowa, które są liczbami całkowitymi. Twoje dane nie są liczbami całkowitymi: 251,529.

R mówi „Hmmm… możesz to sprawdzić i upewnić się, że wszystko jest w porządku, ponieważ może nie wyglądać dobrze”. Jeśli moja pamięć jest poprawna, SPSS nie daje takiego ostrzeżenia.

Jeśli masz pewność, że używasz odpowiedniego modelu, nawet jeśli nie masz liczb całkowitych, zignoruj ​​go i kontynuuj.

Jeremy Miles
źródło
1
Wiem, że to ostrzeżenie, po prostu zastanawiałem się, czy można to obejść. Mam jednak liczby całkowite, więc próbowałem sprawdzić, czy istnieje sposób pracy z liczbami całkowitymi, ale używając tego samego modelu z innym kodem.
Natasha
1
Jak tłumić ostrzeżenia wyjaśnione tutaj: stackoverflow.com/questions/16194212/…
kjetil b halvorsen
-2

Jestem ekologicznym pasożytnikiem .. sposób, w jaki powinieneś sobie z tym poradzić, łącząc żywicieli, którzy byli pasożytowani i tych, którzy nie byli, a następnie stosując rozkład dwumianowy .. zobacz poniższy kod.

Nigdy też nie użyłem zmiennej glm w / więcej niż jednej y. Powiedzmy, że chcesz spojrzeć na pasożytujące larwy: miałbyś # larw, które były zdrowe, i # pasożytów.

Powiedzmy: Lh i Lp

Na przykład

pasożytowane L = cbind (Lp, Lh) hist (pasożytowane) # Zgaduję, że możesz po prostu użyć regularnego rozkładu dwumianowego w / glm .. i może nie potrzebować modelu dwumianowego PLarvae1 = glm (pasożytowane L ~ typ + miesiąc + sezon, rodzina = dwumianowa, dane = MI.df)

następnie wykonaj stopniową redukcję modelu, aby zobaczyć, który z twoich czynników znacząco wpływa na pasożytnictwo ... patrz poniższy link

http://bbolker.github.io/mixedmodels-misc/glmmFAQ.html

wygląda jednak na to, że musisz mieć losowe efekty, aby uwzględnić powtarzające się próbkowanie. więc prawdopodobnie twój losowy efekt to (1 | Sezon / miesiąc) ... ale trudno powiedzieć bez znajomości twoich danych

JULIE HOPPER
źródło