Как бороться с «нецелым» предупреждением от отрицательного биномиального GLM?

11

Я пытаюсь смоделировать среднюю интенсивность паразитов, воздействующих на хозяина в R, используя отрицательную биномиальную модель. Я продолжаю получать 50 или более предупреждений, которые говорят:

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

Как я могу справиться с этим? Мой код выглядит так:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season, data=MI.df)
Наташа
источник
1
Пожалуйста, добавьте воспроизводимый пример для людей, с которыми можно работать.
gung - Восстановить Монику
5
Отрицательный биномиальный GLiM является своего рода моделью подсчета. Ответ должен быть рассчитан. Граф , по определению, не может быть дробным. У вас есть такие ценности?
gung - Восстановить Монику
1
Можете ли вы уточнить, что вы подразумеваете под "интенсивностями"? Вы делите количество паразитов, скажем, на площадь поверхности для хозяина?
gung - Восстановить Монику
1
У меня есть данные подсчета, однако мне пришлось рассчитать интенсивности, чтобы учесть различные усилия по отбору проб. Я понимаю, что мне нужны данные подсчета, но мне было просто интересно, есть ли другой способ работы с нецелыми числами с использованием той же модели. Для интенсивностей я разделил количество паразитов на количество зараженных хозяев.
Наташа
2
@ Наташа, не делай этого. Весьма вероятно, что правильный путь решения этой проблемы - в соответствии с ответом Гунга, со смещением. Если вы хотите быть уверенным, отредактируйте свой вопрос, чтобы объяснить немного больше о том, откуда берутся различия в интенсивности выборки. Это разные номера хостов? Различные отрезки времени или количество коллекторов?
Бен Болкер

Ответы:

9

Отрицательный бином является распределением для данных подсчета, поэтому вы действительно хотите, чтобы ваша переменная ответа была подсчетом (то есть неотрицательными целыми числами). Тем не менее, уместно учитывать «различные попытки отбора проб» (я не знаю точно, что вы имеете в виду, но я понимаю суть этого). Тем не менее, вы не должны пытаться сделать это, разделив ваши счета на другое число. Вместо этого вам нужно использовать этот другой номер в качестве смещения . На CV есть хорошее обсуждение того, что смещение здесь: Когда использовать смещение в регрессии Пуассона? Я предполагаю, что ваша модель должна выглядеть примерно так:

mst.nb = glm.nb(Larvae+Nymphs+Adults~B.type+Month+Season + offset(log(num.hosts)), 
                data=MI.df)
Gung - Восстановить Монику
источник
Спасибо. Я попробую это и вернусь, чтобы рассказать вам, что я сделал.
Наташа
OT: я что-то упускаю, что значит иметь много результатов в регрессии ??
Бакабург
@ Бакабург, я не могу сказать, о чем ты говоришь.
gung - Восстановить Монику
Часть "Личинки + Нимфы + Взрослые ~" в коде.
Bakaburg
1
@ Бакабург, это о том, как работает R. Дополнение поэлементно. Добавление 3 векторов дает вам один вектор, где каждый элемент является суммой 3 соответствующих элементов. Чтобы иметь несколько переменных ответа в LHS формулы R, необходимо использовать cbind().
gung - Восстановить Монику
4

Это предупреждение, а не фатальная ошибка. glm.nb () рассчитывает, что ваша конечная переменная рассчитывается как целые числа. Ваши данные не являются целыми числами: 251,529.

R говорит: «Хммм ... вы можете проверить это и убедиться, что все в порядке, потому что это может выглядеть неправильно». Если моя память верна, SPSS не дает такого предупреждения.

Если вы уверены, что используете правильную модель, даже если у вас нет целых чисел, игнорируйте ее и продолжайте.

Джереми Майлз
источник
1
Я знаю, что это предупреждение, мне просто интересно, есть ли способ обойти это. Хотя у меня есть целые числа, поэтому я пытался выяснить, есть ли способ работы с целыми числами, но использую ту же модель с другим кодом.
Наташа
1
Как подавить предупреждения, объясненные здесь: stackoverflow.com/questions/16194212/…
kjetil b halvorsen
-2

Я экологический паразитолог ... способ, которым вы должны справиться с этим, - связать хосты, которые были паразитированы, и те, которые не были, а затем использовать биномиальное распределение ... см. Код ниже.

Я также никогда не использовал glm с более чем одной переменной y ... поэтому предположим, что вы хотите посмотреть на паразитированных личинок: у вас будет # личинок, которые были здоровы, и #, которые были паразитированы.

Скажем: Lh и Lp

Так например

parasitizedL = cbind (Lp, Lh) Hist (parasitized) # Я предполагаю, что вы можете просто использовать регулярное биномиальное распределение w / glm .. и, возможно, вам не понадобится нег.биномиальная модель PLarvae1 = glm (parasitizedL ~ B.type + Month + Season, семейство = биномиальных, данные = MI.df)

затем выполните поэтапное сокращение модели, чтобы увидеть, какие из ваших факторов значительно влияют на паразитизм ... см. ссылку ниже

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

однако, похоже, что вы должны иметь случайные эффекты для учета повторяющихся выборок ... так что скорее всего ваш случайный эффект будет (1 | Сезон / месяц) ... но трудно сказать без знания ваших данных

Джули Хоппер
источник