【问题标题】:small Time Series Analysis小时间序列分析
【发布时间】:2020-06-03 18:46:23
【问题描述】:

我需要对未来 2 年做出预测。但是,我有非常少量的数据。 数据:

   structure(list(BelegDat = structure(c(16801, 16832, 16861, 16892, 
    16922, 16953, 16983, 17014, 17045, 17075, 17106, 17136, 17167, 
    17198, 17226, 17257, 17287, 17318, 17348, 17379, 17410, 17440, 
    17471, 17501, 17532, 17563, 17591, 17622, 17652, 17683, 17713, 
    17744, 17775, 17805, 17836, 17866, 17897, 17928, 17956, 17987, 
    18017, 18048, 18078, 18109, 18140, 18170, 18201, 18231), class = "Date"), 
        Value = c(37, 28, 37, 47, 37, 28, 37, 37, 19, 37, 37, 28, 
        40, 30, 40, 50, 40, 30, 40, 40, 20, 40, 40, 30, 30, 40, 30, 
        30, 40, 30, 30, 50, 30, 50, 20, 20, 60, 20, 60, 40, 20, 10, 
        40, 20, 20, 10, 44, 33)), row.names = c(NA, -48L), class = "data.frame")

我正在使用 ARIMA:

myts <- ts(df_ready[,2], start=c(2016,01), end=c(2019,12), frequency = 12)

fit <- auto.arima(myts)

pred <- forecast(fit, 24) # next 2 years (24 Months)
plot(pred)

我的输出: Output

能否请您告诉我我的错误/建议一些其他方式如何完成这个预测?

提前谢谢你!

【问题讨论】:

  • 为什么你认为这是错误的?因为预测是固定的?您还可以分享一个可重现的数据示例吗?
  • 我认为预测是错误的,因为它没有捕捉到任何季节性,它只是一条直线。我使用的数据与问题中的数据相同。还是您在谈论 csv 文件?
  • 只需执行dput(your_dataframe) 并将结果复制/粘贴到您的问题中
  • 感谢您提供的信息,刚刚更改
  • @IvanMatoshchuk 您显示的数据不支持任何季节性证据。 ARIMA(0,0,0) 模型最适合您的数据;换句话说,您的数据类似于白噪声(偏移了偏移量)。然而换句话说,您的数据y_iy_i ~ N(offset, sigma^2) 是一致的。

标签: r time-series prediction arima forecast


【解决方案1】:

auto.arima 中有一个名为 D 的参数。我们需要将其设置为 1 以强制 arima 使用季节性模型。在这种情况下,

m1 <- ts(df$Value, start = min(df$BelegDat), frequency = 12)
autoplot(forecast(auto.arima(m1, D = 1), 24)) 

给出,

【讨论】:

  • 感谢您的回答!请您推荐一些其他算法,这些算法对这些数据有用吗?
  • 我建议您探索包forecast。它是由罗布·海德曼建造的。 His book 也非常适合为您提供一些预测数据的内部信息,所有示例都在 R 中,其中包括他的库
  • 我会非常小心解释这些预测!您的数据类似于(均值偏移)白噪声(这是auto.arima 的输出告诉您的)。没有(数据衍生的)证据表明存在/任何季节性效应(也没有证据表明任何非季节性 MA/AR 效应)。
  • @MauritsEvers 是的,我明白你在说什么,我看到人们做出这样的解释。我同意您对白噪声信号的幼稚(根据季节性)预测方法
  • @MauritsEvers 和 Sotos 感谢您的反馈。我完全同意你们两个,我应该加强我对时间序列分析的了解。这项任务需要一些“好看”的输出,显然,它不会被视为值得预测。
【解决方案2】:

您的数据不支持任何季节性证据;您的数据与偏移偏移的白噪声一致。

强制使用特定的 SARIMA 结构,然后根据您的白噪声数据使用它进行预测是非常危险的。

为了演示,让我们扭转局面,生成偏移相同偏移量且方差与样本数据相同的白噪声数据。请记住,这是设计的白噪声

library(forecast)
library(ggplot2)
set.seed(2018)
ts <- ts(
    rnorm(48, mean = 33.8750, sd = 11.15796),
    start = c(2016, 1), frequency = 12)
autoplot(ts) + theme_minimal()

我们现在将 SARIMA(0, 0, 0)(0, 1, 0)12 模型拟合到数据中。

fit <- arima(ts, order = c(0, 0 , 0), seasonal = list(order = c(0, 1, 0), period = 12))
fit
#
#Call:
#arima(x = ts, order = c(0, 0, 0), seasonal = list(order = c(0, 1, 0), period = 12))
#
#
#sigma^2 estimated as 283:  log likelihood = -152.7,  aic = 307.39

同样,请记住,数据是从 ARIMA(0,0,0) = SARIMA(0,0,0)(0,0,0) 生成的,即白噪声模型。

我们现在使用fit 进行预测

autoplot(forecast(ts, h = 24, model = fit)) + theme_minimal()

因此,我们在这里所做的是基于白噪声数据进行预测,假设不存在季节性影响。

是的,您无需在forecast 中引发任何警告/标志即可执行此操作。不,这些预测没有意义。

【讨论】: