Ошибка «неверный метод» при попытке использования функции step.Gam - PullRequest
0 голосов
/ 31 января 2019

У меня есть функция gam со многими ковариатами, и я хотел бы упростить ее (найти минимальную модель)

Я использовал функцию dsm для моделирования плотности вида по отрезкам линейного трансектакак функция ковариат.И это работает отлично!Но это была максимальная модель со слишком большим количеством ковариат, и я хотел бы автоматически уменьшить их число.Поэтому я попытался использовать функцию gam::step.Gam.(Я также использовал функцию gam.scope, чтобы убедиться, что я все делаю правильно).

Код DSM:

GamModel = dsm(
  ddf.obj=PreparedDdf, 
  formula = D ~ x + y + Cov1 + Cov2 +...+ Covn factor1+ factor2+...+factorn,
  family=gaussian(link='identity'), 
  group=FALSE,
  engine='gam',
  convert.units=1,
  segment.data=segment.df, 
  observation.data=observation.df
)

step.Gam-код:

GamScope=gam.scope(segment.df[,c(5:6,11:16)], response=1, smoother="s", arg=NULL, form=TRUE)
MinModel = step.Gam(GamModel, GamScope, trace=TRUE, direction="backward")

Я надеялся получить минимальную модель, вместо этого она дает мне следующую ошибку:

Ошибка в игре (формула = D ~ x + Cov1 + Cov2 + Cov3,: недопустимый `метод ': REML

И я не понимаю, почему это происходит! Я пробовал разные методы (GACV.Cp, ML), и я получаю одинаковую ошибку (недопустимый метод: GACV.Cp и т. Д.) Почему это происходит?Это потому, что это игровая модель, созданная функцией dsm? И что более важно, как я могу минимизировать модель автоматически?

(Когда я использовал engine='glm' вместо 'gam' в функции dsm)и я пробую функцию stats::step, чтобы найти минимальную модель, которая работает, но результаты кажутся немного скромными ... поэтому я хочу использовать движок gam)

1 Ответ

0 голосов
/ 31 января 2019

Пакет gam не подходит для моделей, использующих REML или другие указанные вами опции.Это параметры функции gam() в пакете mgcv .

Допустимые параметры аргумента method в gam::gam():

  1. "model.frame", который на самом деле ничего не делает, так как дает команду функции просто выплевывать фрейм модели, полученный из формулы.

Очень важно различать эти два пакета, которые оба предоставляют функцию gam().Это очень разные подходы к оценке GAM.

Поскольку вы используете dsm(), вы будете использовать mgcv::gam(), а не gam::gam(), и в этом случае вы не сможете применить функцию gam::step.gam()к модели.

Я считаю, что авторы dsm() рекомендуют использовать аргумент select = TRUE для mgcv::gam(), который вы можете предоставить при использовании dsm() и который будет передан gam().Это добавит дополнительные штрафы к сглаживающим терминам в модели, так что они могут быть исключены из модели.

...