【问题标题】:Forecasting Hierarchical Time Series预测分层时间序列
【发布时间】:2019-05-21 07:17:12
【问题描述】:

我正在尝试对三个发电厂的生产数据进行 6 个月的预测,我将数据构建为具有 3 个级别的 hts 对象。但是,当我执行预测功能然后尝试使用测试数据查看准确性时,我收到以下错误:“x - fcasts 中的错误:不合格数组”

此外,当我尝试在 hts 对象上应用“arima”作为预测方法时,我得到以下信息(警告消息重复 9 次,因为我在 hts 对象中有 9 个时间序列):

预测

我使用以下指令来获取 hts 对象:

并且数据具有以下结构: 我不确定我哪里出错了。任何人都可以帮助一些想法?

谢谢!

数据:

structure(list(LarGroup1 = c(188.3, 187.2, 94.7, 109.2, 202.7, 
146.6, 121.9, 151.3, 111.1, 103.4, 188.1, 168.1, 233.9, 230.7, 
187.1, 0, 98.9, 173.5, 149.4, 168.6, 4.7, 14.8, 91.8, 166.5, 
170.5, 123.6, 85.2, 64.4), LarGroup2 = c(159.1, 127.7, 210.3, 
199.8, 113, 143.4, 144.5, 83.8, 41.6, 35.1, 95.2, 178.2, 241.1, 
236.4, 181.9, 194.3, 196.1, 92.4, 154.6, 78.9, 35.7, 0, 74.5, 
75.1, 140, 142.5, 3.8, 17.5), RibGroup1 = c(49.4, 102.4, 50.8, 
118.8, 108.4, 139.5, 121.7, 69.6, 53.4, 28, 113.3, 96.3, 70.8, 
124.4, 54.4, 128.7, 63.3, 2.1, 41.3, 0.4, 0.6, 0, 5.4, 57.9, 
9.9, 30, 221, 167.2), RibGroup2 = c(32.7, 32, 98.1, 6.3, 85.5, 
96.6, 41.1, 44.9, 50.4, 27.3, 0, 45.4, 199.1, 179.2, 86.1, 0, 
58.4, 43.3, 41.8, 42.1, 22.1, 11.8, 71.8, 112, 204.1, 40.9, 24.5, 
210.9), RibGroup3 = c(90.8, 15.4, 10.5, 124.4, 33.9, 8.4, 38.3, 
56.9, 13.5, 0, 32.6, 132.8, 160.7, 168.7, 60.7, 131.9, 110.8, 
29.2, 131.3, 62.1, 6.1, 0, 0, 3.4, 23.9, 192.7, 165.5, 0), SinGroup1 = c(235.2, 
225.4, 226.1, 234.4, 222.1, 232.3, 233.4, 201.9, 195.3, 209.4, 
233.6, 223.6, 222.2, 232, 224, 149.8, 201.6, 220.2, 203.1, 212.1, 
71.9, 82.3, 183.2, 210.6, 198.6, 230.8, 218, 163.2), SinGroup2 = c(233.4, 
225.6, 227, 51.6, 76, 230.7, 233.1, 202.7, 200.2, 207.2, 228.4, 
226.2, 183.9, 230.4, 222.3, 227.7, 177.9, 152, 218.6, 210.6, 
80.9, 63.2, 188.1, 209.5, 233.2, 210.1, 226.5, 200.5), SinGroup3 = c(233.2, 
188.5, 226.9, 234.7, 222.8, 234.6, 220.6, 156.4, 209.2, 218.7, 
232.9, 226.1, 215.4, 231, 222.7, 222.7, 183.7, 203.8, 216.8, 
112, 0, 39.6, 180.8, 203.6, 221.1, 228.9, 202.8, 186.7), SinGroup4 = c(218, 
215.5, 226.8, 235.6, 223.6, 234.8, 234.9, 69.3, 192, 207.8, 235.2, 
217.2, 235.1, 231.8, 223.5, 230.5, 225.6, 220.1, 220, 211.9, 
114.8, 44.5, 158.5, 206.3, 231.8, 179, 225.3, 198.6)), class = "data.frame", row.names = c(NA, 
-28L))

【问题讨论】:

  • 我对分层时间序列了解不多。尝试阅读otexts.org/fpp2/hierarchical.html 关于他们的信息。这本在线书籍由 Rob Hyndman 撰写,并逐步解释了如何使用 hts 运行分层预测。
  • 当我使用粘贴的data.frame 创建一个data 变量,然后调用forecasts <- forecast(data, h=6, method="bu"),我得到一个不同的错误:“ets 中的错误(对象,lambda = lambda,biasadj =biasadj, allow.multiplicative.trend = allow.multiplicative.trend, : y 应该是一个单变量时间序列”。我们还缺少更多细节吗?
  • @hmhensen 我正在关注本书的章节,并根据示例中使用的数据集重新构建了我的数据,但仍然没有得到我想要的结果。
  • 我的主要问题是应用准确度函数,因为我需要做的是比较几种方法并选择最适合数据的一种

标签: r time-series hierarchical


【解决方案1】:
  1. 在准确率函数中,您需要包含测试数据,而不是训练数据。您要求提前 6 个步骤,但您的测试数据仅包含 4 个时间段。

  2. 季节性差异错误表明您使用的是旧版本的预测包。请更新您的软件包。

以下代码使用当前的 CRAN 包(预测 v8.4,hts v

library(hts)
Production_data <- data.frame(
  LarGroup1 = c(
    188.3, 187.2, 94.7, 109.2, 202.7,
    146.6, 121.9, 151.3, 111.1, 103.4, 188.1, 168.1, 233.9, 230.7,
    187.1, 0, 98.9, 173.5, 149.4, 168.6, 4.7, 14.8, 91.8, 166.5,
    170.5, 123.6, 85.2, 64.4
  ), LarGroup2 = c(
    159.1, 127.7, 210.3,
    199.8, 113, 143.4, 144.5, 83.8, 41.6, 35.1, 95.2, 178.2, 241.1,
    236.4, 181.9, 194.3, 196.1, 92.4, 154.6, 78.9, 35.7, 0, 74.5,
    75.1, 140, 142.5, 3.8, 17.5
  ), RibGroup1 = c(
    49.4, 102.4, 50.8,
    118.8, 108.4, 139.5, 121.7, 69.6, 53.4, 28, 113.3, 96.3, 70.8,
    124.4, 54.4, 128.7, 63.3, 2.1, 41.3, 0.4, 0.6, 0, 5.4, 57.9,
    9.9, 30, 221, 167.2
  ), RibGroup2 = c(
    32.7, 32, 98.1, 6.3, 85.5,
    96.6, 41.1, 44.9, 50.4, 27.3, 0, 45.4, 199.1, 179.2, 86.1, 0,
    58.4, 43.3, 41.8, 42.1, 22.1, 11.8, 71.8, 112, 204.1, 40.9, 24.5,
    210.9
  ), RibGroup3 = c(
    90.8, 15.4, 10.5, 124.4, 33.9, 8.4, 38.3,
    56.9, 13.5, 0, 32.6, 132.8, 160.7, 168.7, 60.7, 131.9, 110.8,
    29.2, 131.3, 62.1, 6.1, 0, 0, 3.4, 23.9, 192.7, 165.5, 0
  ), SinGroup1 = c(
    235.2,
    225.4, 226.1, 234.4, 222.1, 232.3, 233.4, 201.9, 195.3, 209.4,
    233.6, 223.6, 222.2, 232, 224, 149.8, 201.6, 220.2, 203.1, 212.1,
    71.9, 82.3, 183.2, 210.6, 198.6, 230.8, 218, 163.2
  ), SinGroup2 = c(
    233.4,
    225.6, 227, 51.6, 76, 230.7, 233.1, 202.7, 200.2, 207.2, 228.4,
    226.2, 183.9, 230.4, 222.3, 227.7, 177.9, 152, 218.6, 210.6,
    80.9, 63.2, 188.1, 209.5, 233.2, 210.1, 226.5, 200.5
  ), SinGroup3 = c(
    233.2,
    188.5, 226.9, 234.7, 222.8, 234.6, 220.6, 156.4, 209.2, 218.7,
    232.9, 226.1, 215.4, 231, 222.7, 222.7, 183.7, 203.8, 216.8,
    112, 0, 39.6, 180.8, 203.6, 221.1, 228.9, 202.8, 186.7
  ), SinGroup4 = c(
    218,
    215.5, 226.8, 235.6, 223.6, 234.8, 234.9, 69.3, 192, 207.8, 235.2,
    217.2, 235.1, 231.8, 223.5, 230.5, 225.6, 220.1, 220, 211.9,
    114.8, 44.5, 158.5, 206.3, 231.8, 179, 225.3, 198.6
  )
)
Production_data_ts <- ts(Production_data, frequency = 12, start = c(2016, 7))
Production_data_hts <- hts(Production_data_ts, characters = c(3, 6))
data <- window(Production_data_hts, start = c(2016, 7), end = c(2018, 6))
test <- window(Production_data_hts, start = c(2018, 7), end = c(2018, 10))
forecasts <- forecast(data, h = 4, method = "bu")
accuracy(forecasts, test)

【讨论】:

  • 对不起,我发布了错误的预测图片,即使我这样做也是一样的错误:> accuracy.gts(forecsts, test) 关于第二点,R studio 说当我尝试更新它们时,所有软件包都是最新的。
  • 我添加了可以使用当前 CRAN 包的代码。也许您还使用了非常旧的 R 版本,因此您无法更新到当前的 CRAN 包。
  • 当我将 h=6 更改为 h=4 时,我的代码工作得很好,但我真的很想请你解释一下..因为我之前尝试将数据分成两个相等的部分(火车 14 个月,测试 14 个月)和 h 是 6 ......但我仍然得到同样的错误......你能否提供一个解释或链接来解释 h 和测试期?谢谢!
  • 你的考试时间是2018年7月-10月,也就是4个月。
猜你喜欢
  • 2015-04-24
  • 1970-01-01
  • 2014-10-26
  • 2016-01-08
  • 2020-10-05
  • 2021-06-12
  • 1970-01-01
  • 2020-01-14
相关资源
最近更新 更多