2016-08-02 25 views
0

私は、関数内でパッケージmgcvを使用して複数のGAMに適合させようとしており、モデル選択手順で最も適切なモデルを厳選しています。しかし、私の関数は最初のモデルを実行し、入力データdatを再度認識していないようです。mgcv :: gamm()とMuMIn :: dredge()のエラー

私はis.data.frameでエラー

エラー(データ)を取得:オブジェクトのDAT 'が見つかりませんが。

は、私は、これはスコープの問題だと思うし、私は助けを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) 

任意の助けを大幅に高く評価されるだろう。

おかげで、 コナー

+0

は私が通り実行したときので、エラーが浚渫モデルオブジェクトを呼び出すget.modelsだと思います データ=相関、相関= corARMA(フォーム=〜1 |年、p = 0、年、月、bs = "cc"、k = k.month)+ s 1)、 control = ctrl)) ' このエラーで関数がクラッシュすることはありません。 –

答えて

1

get.modelsgammに(常に?).GlobalEnv、それは機能の環境(すなわち sys.frames(sys.nframe()))である必要がありながら あるモデルのformula環境で評価されます。 - 浚渫(gamm( `m1の<:

ので、代わりに

get.models(ms, 1) 

使用の

eval(getCall(ms, 1)) 
関連する問題