首页 > 解决方案 > 如何使用谐波回归器在 ARIMA 中找到最大傅立叶项数?

问题描述

我正在尝试预测法国电力系统的未来负荷和可再生负荷系数。

从 2012 年到 2018 年,我有一个包含 61368 小时观测值(8 年 * 8760 小时左右)的数据库,用于每个变量(消耗、风荷载系数、光伏荷载系数)。我想用这些过去的观察来预测它们直到 2024 年。

为此,我从 Hyndman 的书中读到,我可以使用ARIMA具有傅立叶项的模型作为攻击者,因为我的变量呈现多个季节性和超过 200 个周期(至少对于年度季节性而言)。

我的问题是在合理的时间内找到 K 的最佳数量,也就是傅里叶项的数量。

我尝试使用auto.arima(consumption, seasonal = FALSE, xreg = fourier(consumption, K = c(12, 84, 4380), h = 8760*6)),但需要数小时才能解决。

所以这就是我现在正在尝试的:

#Creating msts objects for main variables
demand <- msts(dataset$Consommation, seasonal.periods = c(24,168,8760))

#Seasonality detection for main variables
ndiffs(demand)
p_demand <- periodogram(demand)
data.table(period=1/p_demand$freq, spec=p_demand$spec)[order(-spec)][1:2]

#Splitting time series into train and test sets
train_demand <- ts(demand[1:55230])
test_demand <- demand[55231:61368]

#Creation of a base model
fit0_demand <- auto.arima(train_demand)
(bestfit_demand <- list(aicc=fit0_demand$aicc, i=0, j=0, fit_demand=fit0_demand))

#Forecasting and ploting base model
fc0_demand <- forecast(fit0_demand, h= 8760*6)
plot(fc0_demand)

#Choosing the best maximal number of Fourier terms by AICc
for (i in 1:5) {
   for (j in 1:5) {
      z1_demand <- fourier(ts(train_demand, frequency = 8777.143), K = i)
      z2_demand <- fourier(ts(train_demand, frequency = 24), K = j)
      fit_demand < auto.arima(train_demand, xreg = cbind(z1_demand,z2_demand), seasonal = FALSE)

        if(fit_demand$aicc < bestfit_demand$aicc){
            bestfit_demand <- list(aicc=fit_demand$aicc,i=i,j=j, fit_demand=fit_demand)
    }
  }
}
bestfit_demand

#Forecasting with best fits
fc_demand <- forecast(bestfit_demand$fit, xreg=cbind(fourier(ts(train_demand, frequency = 8777.143), K = bestfit_demand$i, h = 6*8760), fourier(ts(train_demand, frequency = 24), K = bestfit_demand$j, h = 6*8760)))
plot(fc_demand)

实际上没有错误消息,但我的 for 循环需要数小时和数小时(我在 17 小时前启动了代码并且仍在循环中工作)来解决。有没有更快的方法呢?我有一i58GB RAM笔记本电脑。

谢谢您的帮助 !

PS:我没有包括加载包和数据代码部分。

标签: rforecastingarimafourier-descriptors

解决方案


推荐阅读