Ошибка модели GAM

Мой фрейм данных выглядит так:

head(bush_status)
distance  status count
       0 endemic   844
       1 exotic     8
       5 native     3
      10 endemic    5
      15 endemic    4
      20 endemic    3

Данные подсчета распределены ненормально. Я пытаюсь подогнать обобщенную аддитивную модель к своим данным двумя способами, поэтому я могу использовать anova, чтобы увидеть, поддерживает ли p-значение m2.

m1 <- gam(count ~ s(distance) + status, data=bush_status, family="nb")
m2 <- gam(count ~ s(distance, by=status) + status, data=bush_status, family="nb")

m1 работает нормально, но m2 отправляет сообщение об ошибке:

"Error in smoothCon(split$smooth.spec[[i]], data, knots, absorb.cons, 
scale.penalty = scale.penalty,  : 
  Can't find by variable"

Это не для меня, поэтому, если бы кто-нибудь мог дать какой-либо совет, был бы очень признателен!


person Fbj9506    schedule 23.08.2017    source источник
comment
m1 не работает нормально, используя данные вашего примера. Он возвращает ошибку в smooth.construct.tp.smooth.spec (object, dk $ data, dk $ knots): термин имеет меньше уникальных ковариантных комбинаций, чем указанные максимальные степени свободы.   -  person neilfws    schedule 23.08.2017
comment
status факторная переменная? Пожалуйста, предоставьте dput(bush_status).   -  person Roland    schedule 23.08.2017
comment
@Roland status - это символьная переменная - должен ли он быть фактором? dput () дает очень длинный вывод, но последняя часть читает: Names = c("distance", "status", "count"), row.names = c(NA, -702L), class = "data.frame")   -  person Fbj9506    schedule 23.08.2017
comment
Да, переменная, переданная в by, должна быть факторной переменной в mgcv.   -  person Roland    schedule 23.08.2017
comment
@Roland работает! Спасибо!   -  person Fbj9506    schedule 23.08.2017


Ответы (1)


Из ваших комментариев стало ясно, что вы передали переменную character в by в сглаживании. Вы должны передать туда переменную factor. Для меня это тоже частая проблема, и я считаю это недостатком дизайна (потому что базовые регрессионные функции R отлично справляются с символьными переменными).

person Roland    schedule 23.08.2017
comment
Обратите внимание, что это также применимо при использовании функции s() в пакете brms, который является оболочкой для функции с тем же именем в пакете mgcv. - person mikoontz; 11.03.2019