我想知道如何才能适应罗布·海恩德曼(Rob Hyndman)对this blog post中的傅立叶项的使用,以通过附加回归系数预测每周时间序列数据。以下是我的尝试,但在读取xreg is rank deficient
library(forecast)
gascsv <- read.csv("https://robjhyndman.com/data/gasoline.csv", header=FALSE)[,1]
gas<- ts(gascsv[1:300], freq=365.25/7, start=1991+31/365.25)
#assume that gasreg is an additional regressor used to forecast gas
gasreg <- ts(gascsv[301:600], freq=365.25/7, start=1991+31/365.25)
bestfit <- list(aicc=Inf)
for(i in 1:25){
for(j in 1:25){
fit <- auto.arima(gas, xreg=cbind(fourier(gas, K=i),fourier(gasreg,K=j)), seasonal=FALSE)
if(fit$aicc < bestfit$aicc){
bestfit <- fit
k <-i
l <- j
}
else break;
}
}
谢谢!
编辑:在网上进行了一些深入的研究之后,我发现一些有用的材料。 Another of Rob's blog posts使用一组傅立叶项以及一个虚拟变量作为回归变量。 This post on kaggle(请参阅3. ARIMA模型)以与我正在执行的方式非常相似的方式使用多个傅立叶项,尽管我仍然收到xreg is rank deficient
错误。可能是由于gasreg
与气体相同的数据引起的吗?
答案 0 :(得分:0)
fourier(gas, K=i)
和fourier(gasreg,K=j)
产生相同的傅立叶集-我相信fourier()
的结果仅取决于时间序列的长度,而不取决于内容。等级不足错误是由两次使用相同的回归变量引起的。我认为我不需要两次输入傅立叶级数,下面的代码似乎足够了。
bestfit <- list(aicc=Inf)
for(i in 1:25){
for(j in 1:25){
fit <- auto.arima(gas, xreg=cbind(fourier(gas, K=i),gasreg), seasonal=FALSE)
if(fit$aicc < bestfit$aicc){
bestfit <- fit
k <-i
}
else break;
}
}