错误:找不到功能“滞后”

时间:2012-11-23 15:21:33

标签: r gam

在下面找到model0时,我收到错误消息“eval中的错误(expr,envir,enclos):找不到函数”Lag“。在发布此消息之前,我已经扫描了此论坛和网络,但找不到相关解决方案。我相信我的模型中的错误可能不是由于Lag函数,因为下面显示的其他模型(1和2)可以运行而不会遇到任何问题。

我的主要动机是通过循环解释变量列表及其滞后来运行GAM模型。

library(quantmod)
library(gamair) 
library(mgcv) 
data(chicago) 

names(chicago)

varlist0 <- c("pm10median", "pm25median", "o3median", "so2median")

model0<- lapply(varlist0, function(x) {
  gam(substitute(death ~ s(time,bs="cr",k=200)+ s(tmpd,bs="cr") + Lag(i,0:4) , list(i = as.name(x))),family=quasipoisson,na.action=na.omit, data=chicago)

})

Gam + Lag,没有错误消息:

model1<- gam(death ~ s(time,bs="cr",k=200)+ s(tmpd,bs="cr") + Lag(pm10median, 0:4),family=quasipoisson,na.action=na.omit, data=chicago)

Lm with Lag且没有错误消息:

hsb2 <- read.csv("http://www.ats.ucla.edu/stat/data/hsb2.csv")
varlist <- names(hsb2)[8:11]   
models <- lapply(varlist, function(x) {
    lm(substitute(read ~ Lag(i,0:4) , list(i = as.name(x))), data = hsb2)
})

我无法破译此错误的原因。我在第一个模型中做错了什么?

1 个答案:

答案 0 :(得分:3)

我不能说确切原因,但它与mgcv正在评估公式的环境有关。比substitute更安全的方法是执行以下操作:

varlist0 <- c("pm10median", "pm25median", "o3median", "so2median")
model0 <- lapply(varlist0,function(v) {
    f <- sprintf("death ~ s(time,bs='cr',k=200)+s(tmpd,bs='cr') + Lag(%s,0:4)",v)
    gam(as.formula(f),family=quasipoisson,na.action=na.omit,data=chicago)
})