Прогноз GAM с нулевым уровнем инфляции с новыми данными - PullRequest
0 голосов
/ 28 октября 2018

В 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")

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

1 Ответ

0 голосов
/ 02 ноября 2018

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

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"

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

...