прогноз GAM с нулевым раздутием с новыми данными

В GAM с нулевым накачиванием (ziplss) я получаю предупреждение, когда 1) я использую новые данные и 2) в счетной части есть категориальные переменные, которые НЕ входят в часть с нулевой инфляцией. Есть предупреждение для каждой категориальной переменной, не представленной в части нулевой инфляции.

Вот воспроизводимый пример:

library(mgcv)
library(glmmTMB)
data(Salamanders)   
Salamanders$x <- rnorm(nrow(Salamanders), 0, 10)

zipgam <- gam(list(count ~ spp * mined + s(x) + s(site, bs = "re"),
                ~ spp),
           data = Salamanders, family = ziplss, method = "REML")

preds.response <- data.frame(Predict = predict(zipgam, type = "response"))

nd <- data.frame(x = 0, spp = "GP", mined = "yes", site = Salamanders$site[1])      
nd$pred <- predict(zipgam, newdata = nd, exclude="site")

Я нигде не видел, чтобы это упоминалось, что странно и говорит мне, что я, вероятно, делаю что-то не так (иначе это было бы доступно в результатах поиска). Был бы признателен за любое понимание.


person user2602640    schedule 28.10.2018    source источник
comment
Что такое Salamander? Это невозможно воспроизвести, если у нас нет этого объекта.   -  person Gavin Simpson    schedule 29.10.2018
comment
@GavinSimpson. Извините, я просто использовал данные Salamanders из ваших сообщений в блоге и забыл, что они находятся в пакете glmmTMB. Вопрос отредактирован и теперь полностью воспроизводим.   -  person user2602640    schedule 29.10.2018
comment
Что ж, неловко :-) Спасибо за правку. Я посмотрю сейчас.   -  person Gavin Simpson    schedule 29.10.2018


Ответы (1)


Думаю, это просто неудача в реализации. Предупреждение, которое я вижу:

Warning message:
In model.matrix.default(Terms[[i]], mf, contrasts = object$contrasts) :
  variable 'mined' is absent, its contrast will be ignored

Это безвредно (по крайней мере, в этом случае; я не проверял другие случаи) и создается, потому что есть только один object$contrasts, и он содержит сведения о mined, но этой переменной нет в второй линейный предсказатель, поэтому R предупреждает, что он будет игнорировать контрасты для переменной mined, но это происходит только при построении матрицы модели для части модели с нулевой инфляцией. Счетная часть правильно использует переменную mined и правильные контрасты.

Вы могли бы возразить, что если $contrasts будет списком, по одному на линейный предиктор, будет лучше, и тогда матрица модели будет создана с использованием:

model.matrix.default(Terms[[i]], mf, contrasts = object$contrasts[[i]])

но я понятия не имею, нарушит ли это все остальное в mgcv.

В настоящее время $contrasts для этой модели всего:

> zipgam$contrasts
$spp
[1] "contr.treatment"

$mined
[1] "contr.treatment"

$spp
[1] "contr.treatment"

что уже показывает некоторую избыточность.

person Gavin Simpson    schedule 02.11.2018