У меня есть функция 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)