首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mgcv::gamm()和MuMIn::dredge()错误

mgcv::gamm()和MuMIn::dredge()错误
EN

Stack Overflow用户
提问于 2016-08-02 16:45:56
回答 1查看 803关注 0票数 0

我一直试图在一个函数中使用包mgcv来安装多个GAMs,并通过模型选择过程粗略地选择最合适的模型。但是,我的函数运行第一个模型,因此似乎无法再次识别输入数据dat

我知道错误了

Is.data.frame(数据)中的错误:找不到对象'dat‘。

我认为这是一个范围问题,我已经向herehere寻求帮助,但无法解决。

代码和数据如下(希望可以复制):gam.csv

代码语言:javascript
复制
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)

任何帮助都将不胜感激。

谢谢,康纳

EN

回答 1

Stack Overflow用户

发布于 2016-08-03 17:57:28

get.models在模型的formula环境中进行计算,在gamm中是(总是?) .GlobalEnv,而它应该是函数的环境(即sys.frames(sys.nframe()))。

所以,而不是

代码语言:javascript
复制
get.models(ms, 1)

使用

代码语言:javascript
复制
eval(getCall(ms, 1))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38726210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档