R将滞后变量添加到sarima模型

时间:2018-12-06 23:25:35

标签: r arima

我正在尝试在回归中引入变量的滞后值,然后在新的变量集合上使用arima模型。例如,我正在尝试使用死亡率对温度和污染水平的回归来对死亡率,温度和污染水平之间的关系进行建模。然后,引入四个星期前颗粒水平的滞后变量。这是此代码:

temp = tempr-mean(tempr)
ded = ts.intersect(cmort, trend=time(cmort), temp, temp2=temp^2, part, partL4=lag(part,-4))
summary(fit <- lm(cmort~trend + temp + temp2 + part + partL4, data=ded))
pairs(ded) # easiest way is to do all of them
cor(ded)
AIC(fit)/nrow(ded) - log(2*pi)
BIC(fit)/nrow(ded) - log(2*pi)

其中temp是中心温度值,temp2是中心温度的平方,部分是空气中污染颗粒的水平,部分L4是四个星期前的颗粒水平。此回归按预期工作,并且没有任何问题。但是,当我尝试在新的变量集合上使用Arima模型时,就会出现问题。这是我用于在没有新的滞后变量的原始变量集合上使用arima模型的代码:

trend = time(cmort); temp = tempr - mean(tempr); temp2 = temp^2
fit = lm(cmort~trend + temp + temp2 + part, na.action=NULL)
acf2(resid(fit), 52) # implies AR2
sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part) )

此模型也适用。但是,当我尝试引入partL4滞后变量时,出现以下错误:

stats :: arima(xdata,order = c(p,d,q),season = list(order = c(P,:'x'和'xreg'的长度不匹配')错误

当我检查cmort的长度以及xreg中使用的新变量集合时,长度略有不同。但是,当我像原始代码中那样删除partL4变量时,长度匹配。

我真的不知道如何解决此问题并在新的变量集合上运行arima模型。唯一需要使用的库是:

library(astsa)

任何帮助将不胜感激,因为我不确定如何使长度对齐,或者是否还有其他更好的方法可以做到这一点。

这是我目前的完整代码(出现错误):

library(astsa)
temp = tempr-mean(tempr)
temp2=temp^2
trend=time(cmort)
partly=lag(part, -4)

ded = ts.intersect(cmort, trend, temp, temp2, part, partL4, dframe=TRUE)

fit <- lm(cmort~trend + temp + temp2 + part + partL4, data=ded, na.action=NULL)
summary(fit)

attach(ded)
tsplot(resid(fit))
acf2(resid(fit)) #implies AR2


sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part, partL4))
# pairs(ded) # easiest way is to do all of them
# cor(ded)
# AIC(fit)/nrow(ded) - log(2*pi)
# BIC(fit)/nrow(ded) - log(2*pi)
detach(ded)

1 个答案:

答案 0 :(得分:0)

我认为问题出在滞后:您在时间上移动值,因此,在所有时间序列上调用cbind时,最终得到的数据超出了最终日期cmort,R抱怨。 (尝试cbind(trend, temp, temp2, part, partL4),您可以清楚地看到正在发生的事情)。如果您在调用partL4之前从sarima中删除这些值,则它应该可以工作:

partL4_new <- window(partL4, end = 1979.750)
sarima(cmort, 2,0,0, xreg=cbind(trend, temp, temp2, part, partL4_new))