4

在下面找到运行时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)

带有 Lag 且没有错误消息的 Lm:

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)
})

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

4

1 回答 1

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)
})
于 2012-11-23T15:33:42.250 回答