我正试图在R中重新创建论文“Box-Jenkins季节性预测:案例研究中的问题”(1973)。现在我差不多完成了,但遇到了预测问题。
为了使数据保持不变并消除季节性,销售数据记录(df)的差异被取了两次。
# required lib
require(forecast);
# transform data
df=read.table("Sample.txt", header = TRUE)
df
ts<-ts(df, frequency=12, start=c(1965,1))
ts
ts_log10 <- log10(ts)
ts_log10
dd12zt <- diff(diff(ts_log10, 12))
dd12zt
(对不起,我知道有更好的方式来写这个。)在我检查了最合适的ARIMA模型后,我预测了未来12个月的销售情况。
# Best fitting ARIMA
ARIMAfit <- auto.arima(dd12zt)
summary(ARIMAfit)
# Forecast
fcast <- forecast(ARIMAfit, h=12)
plot(fcast)
summary(fcast)
当然,预测值与样本的值不匹配。我的问题是现在我如何最好地“转换”预测数据“回来”,以便我可以将它与原始时间序列一起绘制?
数据(Sample.txt): 销售 154 96 73 49 36 59 95 169 210 278 298 245 200 118 90 79 78 91 167 169 289 347 375 203 223 104 107 85 75 99 135 211 335 460 488 326 346 261 224 141 148 145 223 272 445 560 612 467 518 404 300 210 196 186 247 343 464 680 711 610 613 392 273 322 189 257 324 404 677 858 895 664 628 308 324 248 272
P.S。如果我发错了,我很抱歉。我对stackoverflow的习惯还不是很有经验。我期待着提示和建议。
答案 0 :(得分:1)
auto.arima
函数将为您处理差异和变换。以下代码应该做你想要的。
library(forecast)
y <- ts(c(154,96,73,49,36,59,95,169,210,278,298,245,200,118,90,79,78,91,167,169,289,347,375,203,223,104,107,85,75,99,135,211,335,460,488,326,346,261,224,141,148,145,223,272,445,560,612,467,518,404,300,210,196,186,247,343,464,680,711,610,613,392,273,322,189,257,324,404,677,858,895,664,628,308,324,248,272),
frequency=12, start=c(1965,1))
fit <- auto.arima(y, lambda=0, d=1, D=1)
fcast <- forecast(fit)
plot(fcast)
但是,我认为日志转换过于强大。我会使用像lambda=0.4
这样的东西。此外,你真的不需要第一个区别,季节性差异就足够了。如果您让auto.arima
为您处理,结果非常好:
fit <- auto.arima(y, lambda=0.4)
fcast <- forecast(fit)
plot(fcast)