在处理由 10 分钟信息点组成的大数据集时 - 即144每天、1008每周和52560每年的点数 - 我在 R 中遇到了一些问题。这些信息涉及一年中源变电站的电力负荷。
多重季节性:
该数据集清楚地显示了多个季节性,即每日、每周和每年。从那里我了解到 R 不处理 ARIMA 建模函数中的多个季节性。不过,我真的很想使用 ARIMA 模型,因为我以前的工作是基于 ARIMA 模型的,而且我大致知道如何将模型转换为方程。
长季节性:
每个季节性都具有很高的价值,最短的一个是 144 的每日季节性。不幸的是,从 SARIMA 的一般方程是
我猜给定模型的最大滞后是
SARIMA(p,d,q)(P,D,Q)144
我真的很想尝试拟合 P 和/或 Q 值大于 1 的模型,但 R 不允许我,因为maximum supported lag = 350. 为此,我发现这个链接非常有趣,并导致了 M. Hyndman 预测包中的新功能,fourier您fourierf可以在此处找到。但由于我不是预测专家,也不是统计学专家,所以我很难理解如何完成这项工作。
问题是我认为整个傅立叶回归包可以帮助我很多。据我了解,我可以用它来模拟我的数据集的长期季节性,也许用它来模拟多个季节性,甚至更多地它可以让我引入外生变量——即temperature和(public holiday + sundays)。
我还尝试按照此示例进行一些回归,但我无法使其工作,因为:
Error in forecast.Arima(bestfit, xreg = fourierf(gas, K = 12, h = 1008)) :
Number of regressors does not match fitted model
我真的希望有人可以帮助我更好地了解这些功能。谢谢。
编辑:所以我用这里给出的傅立叶例子尽我所能,但不知道它是如何处理拟合的。这是代码(我复制粘贴了 M. Hyndman 一个并适应了我的数据集 - 不成功):
n <- 50000
m <- 144
y <- read.table("auch.txt", skip=1)
fourier <- function(t,terms,period)
{
n <- length(t)
X <- matrix(,nrow=n,ncol=2*terms)
for(i in 1:terms)
{
X[,2*i-1] <- sin(2*pi*i*t/period)
X[,2*i] <- cos(2*pi*i*t/period)
}
colnames(X) <- paste(c("S","C"),rep(1:terms,rep(2,terms)),sep="")
return(X)
}
library(forecast)
fit <- Arima(y[1:n,1], order=c(2,1,5), seasonal=c(1,2,8), xreg=cbind(fourier(1:n,4,m),fourier(1:n,4,1008)))
plot(forecast(fit, h=14*m, xreg=cbind(fourier(n+1:(14*m),4,m), fourier(n+1:(14*m),4,1008))))
所以我想将模型“强制”为 a SARIMA(2,1,5)(1,2,8)[144],但是当我键入时,arimod这是 Arima 拟合的结果:
> fit
Series: y[1:n, 1] ,
ARIMA(2,1,5)
sigma^2 estimated as 696895: log likelihood=-407290.2
AIC=814628.3 AICc=814628.3 BIC=814840
它甚至没有考虑模型的季节性部分,而且我对 AIC 值可以采用的范围知之甚少,但它似乎太高了,无法成为一个很好的拟合模型。我认为这一切都归结为我对使用傅立叶项作为回归量的误解,但我不知道为什么。
编辑 2:我似乎也无法向 Arima 函数添加另一个外生变量。我需要使用temperature- 可能作为引导 - 来适应SARIMAX模型,但是一旦我写下这个:
fit <- Arima(y[1:n,1], order=c(2,1,5), seasonal=c(1,2,8), xreg=cbind(fourier(1:n,4,m),fourier(1:n,4,1008), tmp[1:n]))
plot(forecast(fit, h=14*m, xreg=cbind(fourier(n+1:(14*m),4,m),fourier(n+1:(14*m),4,1008), tmp[n+1:(14*m)])))
除了初始数据集外,没有绘制任何内容。没有预测就没有预测,tmp因为xreg我仍然得到一些结果。