Ошибка запуска биномиального ГАМ в мгКВ с пропорциональными данными - PullRequest
0 голосов
/ 17 апреля 2020

Я пытаюсь запустить GAM на пропорциональных данных (цифры c между 0 и 1). Но я получаю предупреждение

In eval(family$initialize) : non-integer #successes in a binomial glm!

По сути, я моделирую количество случаев появления адаптированных к теплу видов по сравнению с общими случаями появления адаптированных к теплу и холоду видов в зависимости от температуры поверхности моря и используя данные из другой погодной системы ( NAO) как случайный эффект и три других категориальных, параметри c, переменных.

m5 <- gam(prop ~ s(SST_mean) + s(NAO, bs="re") + WarmCold + Cycle6 + Region, 
          family=binomial, data=DAT_WC, method = "REML")

prop = пропорция случаев, WarmCold = независимо от того, адаптированы ли виды к теплу или адаптированы к холоду, цикл6 = время 6 лет период, регион = один из 4 регионов. Пример моего набора данных ниже

structure(list(WarmCold = structure(c(1L, 1L, 1L, 1L, 2L, 2L), .Label = c("Cold", 
"Warm"), class = "factor"), Season = structure(c(2L, 2L, 2L, 
2L, 2L, 2L), .Label = c("Autumn", "Spring", "Summer", "Winter"
), class = "factor"), Region = structure(c(1L, 2L, 3L, 4L, 1L, 
2L), .Label = c("OSPARII_N", "OSPARII_S", "OSPARIII_N", "OSPARIII_S"
), class = "factor"), Cycle6 = structure(c(1L, 1L, 1L, 1L, 1L, 
1L), .Label = c("1990-1995", "1996-2001", "2002-2007", "2008-2013", 
"2014-2019"), class = "factor"), WC.Strandings = c(18L, 10L, 
0L, 3L, 5L, 25L), SST_mean = c(7.4066298185553, 7.49153086390094, 
9.28247524767124, 10.8654859624361, 7.4066298185553, 7.49153086390094
), NAO = c(0.542222222222222, 0.542222222222222, 0.542222222222222, 
0.542222222222222, 0.542222222222222, 0.542222222222222), AMO = c(-0.119444444444444, 
-0.119444444444444, -0.119444444444444, -0.119444444444444, -0.119444444444444, 
-0.119444444444444), Total.Strandings = c(23, 35, 5, 49, 23, 
35), prop = c(0.782608695652174, 0.285714285714286, 0, 0.0612244897959184, 
0.217391304347826, 0.714285714285714)), row.names = c(NA, 6L), class = "data.frame")

Из литературы (Zuur, 2009) кажется, что биномиальное распределение лучше всего использовать для пропорциональных данных. Но это не похоже на работу. Он работает, но выдает вышеупомянутое предупреждение, а результаты не имеют смысла. Что я тут не так делаю?

Ответы [ 2 ]

2 голосов
/ 18 апреля 2020

Это предупреждение, а не ошибка, но оно указывает на то, что что-то не так; биномиальное распределение поддерживает неотрицательные целочисленные значения, поэтому нет смысла передавать нецелые значения без итоговых значений выборок, из которых были сформированы пропорции.

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

В качестве альтернативы, рассмотрите возможность использования family = quasibinomial, если отношение средней дисперсии подходит для ваши данные; потепление исчезнет go, но тогда вы не сможете использовать AI C и связанные с ним инструменты, которые ожидают реальной вероятности.

Если ваши пропорции являются истинными пропорциями, тогда рассмотрите family = betar, чтобы соответствовать модель бета-регрессии, где условное распределение ответа поддерживает значения действительных значений в единичном интервале (0, 1) (но технически не 0 или 1 - mgcv добавит или вычтет небольшое число для корректировки данных, если есть 0 или 1 значения в ответе).

0 голосов
/ 20 апреля 2020

Я также обнаружил, что вместо того, чтобы вычислять итоги, но с помощью cbind () с двумя интересующими колонками убрано предупреждение, например,

m8 <- gam(cbind(WC.Strandings, Total.Strandings) ~ s(x1) + x2, 
family=binomial(link="logit"), data=DAT, method = "REML")
...