【问题标题】:Forecasting Weekly Time-Series Data with Multiple Regressors使用多个回归器预测每周时间序列数据
【发布时间】:2019-03-11 20:22:35
【问题描述】:

我想知道如何调整 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 与gas 的数据相同吗?

【问题讨论】:

    标签: r time-series regression arima forecast


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 1970-01-01
      • 2018-07-22
      • 2014-03-18
      • 1970-01-01
      • 2020-02-08
      • 2013-03-24
      • 1970-01-01
      • 2022-11-22
      相关资源
      最近更新 更多