簡體   English   中英

mgcv :: gamm()和MuMIn :: dredge()錯誤

[英]mgcv::gamm() and MuMIn::dredge() errors

我一直在嘗試使用函數中的mgcv軟件包來適合多個GAM,並通過模型選擇過程粗略地選擇最合適的模型。 但是我的函數運行第一個模型,然后似乎無法再次識別輸入數據dat

我得到錯誤

is.data.frame(data)中的錯誤:找不到對象'dat'。

我認為這是一個范圍界定問題,我已經在這里此處尋求幫助,但無法解決。

代碼和數據如下(希望可復制): 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在模型的formula環境(在gamm中始終是gamm )中.GlobalEnv ,而它應該是函數的環境(即sys.frames(sys.nframe()) )。

所以,代替

get.models(ms, 1)

采用

eval(getCall(ms, 1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM