错误:找不到函数“Lag”

4
在运行下面的model0时,我收到了一个错误信息“Error in eval(expr, envir, enclos) : could not find function "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)

})

游戏延迟且没有错误消息:

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:

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

我无法解释这个错误的原因。在第一个模型中,我做错了什么?


2
感谢提供可重现的示例! - Ben Bolker
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)
})

非常感谢您。您的代码运行得非常完美。为了解决这个模糊的错误信息,我花费了整个下午的时间。感谢您的帮助。 - Meso

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接