在使用mgcv包运行gam模型时,我遇到了一条奇怪的错误消息,我无法理解 . 错误消息是“model.frame.default中的错误(公式=死亡~pm10滞后(resid1,1)):变量长度不同(找到'Lag(resid1,1)')” . 模型1中使用的观察数量是与偏差残差的长度完全相同,因此我认为这个误差与数据大小或长度的差异无关 .
我在网页here上发现了一条相当相关的错误消息,但该帖子没有得到足够的答案,因此对我的问题没有帮助
可重复的示例和数据如下:
library(quantmod)
library(mgcv)
require(dlnm)
df <- chicagoNMMAPS
df1 <- df[,c("date","dow","death","temp","pm10")]
df1$trend<-seq(dim(df1)[1]) ### Create a time trend
运行模型
model1<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5), data=df1, na.action=na.omit, family=poisson)
获得偏差残差
resid1 <- residuals(model1,type="deviance")
为模型1添加一天滞后偏差
model1_1 <- update(model1,.~.+ Lag(resid1,1), na.action=na.omit)
model1_2<-gam(death ~ pm10 + s(trend,k=14*7)+ s(temp,k=5) + Lag(resid1,1), data=df1, na.action=na.omit, family=poisson)
这两个模型都产生了相同的错误消息
3 回答
另一件可能导致此错误的事情是使用arm包中的中心/缩放标准化函数创建模型 -
m <- standardize(lm(y ~ x, data = train))
如果您尝试
predict(m)
,则会收到与此问题相同的错误 .Joran建议在运行模型之前首先删除NA . 因此,我删除了NA,运行模型并获得残差 . 当我通过包含滞后残差更新model2时,错误消息没有再次出现 .
删除NAs
运行主模型
获得残差
通过包含滞后1残差来更新模型2
它很简单,只需确保列中的数据类型相同即可 . 对于例如我遇到了同样的错误,那是另一个错误:
所以,我回到我的excel文件或csv文件,在变量上设置一个过滤器,抛出错误并检查不同的数据类型是否相同 . 而且......哦!它有数字和字符串,所以我将数字转换为字符串,它对我来说效果很好 .