Я пытаюсь установить несколько GAM с помощью пакета mgcv
внутри функции и грубо выбрать наиболее подходящую модель с помощью процедур выбора модели. Но моя функция запускает первую модель, а затем снова не распознает входные данные dat
.mgcv :: gamm() и ошибки MuMIn :: dredge()
Я получаю ошибку
Ошибки в is.data.frame (данные): объект 'Даты' не найдено.
Я думаю, что это проблема обзорной и я посмотрел here и here за помощью, но не могу понять его.
код и данные следующим образом (мы надеемся, воспроизводимые): https://github.com/cwaldock1/Help/blob/master/test_gam.csv
library(mgcv)
# Function to fit multiple models
best.mod <- function(dat) {
# Set up control structure
ctrl <- list(niterEM = 0, msVerbose = TRUE, optimMethod="L-BFGS-B")
# AR(1)
m1 <- get.models(dredge(gamm(Temp ~ s(Month, bs = "cc") + s(Date, bs = 'cr') + Year,
data = dat, correlation = corARMA(form = ~ 1|Year, p = 1),
control = ctrl)), subset=1)[[1]]
# AR(2)
m2 <- get.models(dredge(gamm(Temp ~ s(Month, bs = "cc") + s(Date, bs = 'cr') + Year,
data = dat, correlation = corARMA(form = ~ 1|Year, p = 2),
control = ctrl)), subset=1)[[1]]
# AR(3)
m3 <- get.models(dredge(gamm(Temp ~ s(Month, bs = "cc") + s(Date, bs = 'cr') + Year,
data = dat, correlation = corARMA(form = ~ 1|Year, p = 3),
control = ctrl)), subset = 1)[[1]]
### Select best model to work with based on unselective AIC criteria
if(AIC(m2$lme) > AIC(m1$lme)){mod = m1}else{mod = m2}
if(AIC(mod$lme) > AIC(m3$lme)){mod = m3}else{mod = mod}
return(mod$gam)
}
mod2 <- best.mod(dat = test_gam)
Любая помощь будет принята с благодарностью.
Спасибо, Конор
Я думаю, потому что при запуске, как ошибка get.models называя объекты драги модели: 'm1 <- драги (GAMM (Temp ~ s (Месяц, bs = "cc", k = k.month) + s (Дата, bs = 'cr') + Год, data = dat, корреляция = corARMA (form = ~ 1 | Year, p = 1), control = ctrl)) ' функция не падает с этой ошибкой. –