【问题标题】:How to create a forecasting model that takes working days per month in consideration?如何创建一个考虑每月工作日的预测模型?
【发布时间】:2012-11-12 17:20:04
【问题描述】:

我想创建一个对一个月的工作日数敏感的预测模型。例如,今年(2012 年)圣诞节在一周的中间,因此 12 月明显短于圣诞节在周末期间。我知道像 ForecastPro 这样的商业软件包有能力在他们所谓的“帮助文件”的帮助下做到这一点。我想知道是否有人能够在 R 中证明这一点?

我有以下时间序列,我想预测上一时期之后的情况。

ts <- structure(c(88.3, 97.1, 110.2, 93.1, 104.7, 102.6, 94.8, 85.6, 
103.8, 109.6, 111.4, 98.6, 102.5, 101.8, 113.6, 99, 104.6, 106, 
99.2, 87.5, 101.6, 111.3, 106.9, 91.6, 99.4, 100.3, 108.3, 106.2, 
104.1, 105.2, 103.9, 85.8, 107.5, 113.7, 110, 97, 101.6, 102.4, 
112, 104.1, 103.3, 104.4, 106.1, 83.9, 112.2, 117.7, 110.2, 104.7, 
101.8, 106.9, 123.3, 112.5, 108.7, 117.4, 109.3, 92.3, 118, 117.6, 
121.3, 108, 106.5, 109.6, 121, 116.3, 114, 121.8, 109.9, 99.1, 
124, 121.2, 128.2, 113.1, 117.5, 119.4, 139.9, 119.4, 131, 131.3, 
117.1, 107.1, 128.7, 133.7, 134.6, 115.3, 126.3, 124.9, 140.5, 
123.6, 129.9, 132.9, 127.6, 113.1, 130, 141.5, 139.4, 112.8, 
132.5, 133.8, 132.7, 138.7, 128.5, 133.2, 130.8, 105.5, 134.4, 
134.4, 118.3, 99.9, 102.8, 103.3, 113.8, 104.6, 101.4, 109.9, 
109.9, 90.6, 118.1, 119.8, 115.8, 104.2, 104.3, 109.5, 128.7, 
116.2, 115.2, 126.2, 116.9, 102.6, 127, 126.6, 129, 115.3, 115.8, 
118.4, 137.3, 119.4, 128.1, 125.7, 117.1, 109.4, 130.3, 123.7, 
127.9, 111.3, 117.1, 120.5, 132, 115.5, 123.3, 122.9, 118.3), .Tsp = c(2000, 
2012.5, 12), class = "ts")

我还有以下关于工作日的信息(尚未映射所有假期),但这不应该限制我们查看这个概念。

workingdays <- structure(c(21L, 21L, 23L, 20L, 23L, 22L, 21L, 23L, 21L, 22L, 
22L, 21L, 23L, 20L, 22L, 21L, 23L, 21L, 22L, 23L, 20L, 23L, 22L, 
21L, 23L, 20L, 21L, 22L, 23L, 20L, 23L, 22L, 21L, 23L, 21L, 22L, 
23L, 20L, 21L, 22L, 22L, 21L, 23L, 21L, 22L, 23L, 20L, 23L, 22L, 
20L, 23L, 22L, 21L, 22L, 22L, 22L, 22L, 21L, 22L, 23L, 21L, 20L, 
23L, 21L, 22L, 22L, 21L, 23L, 22L, 21L, 22L, 22L, 22L, 20L, 23L, 
20L, 23L, 22L, 21L, 23L, 21L, 22L, 22L, 21L, 23L, 20L, 22L, 21L, 
23L, 21L, 22L, 23L, 20L, 23L, 22L, 21L, 23L, 21L, 21L, 22L, 22L, 
21L, 23L, 21L, 22L, 23L, 20L, 23L, 22L, 20L, 22L, 22L, 21L, 22L, 
23L, 21L, 22L, 22L, 21L, 23L, 21L, 20L, 23L, 22L, 21L, 22L, 22L, 
22L, 22L, 21L, 22L, 23L, 21L, 20L, 23L, 21L, 22L, 22L, 21L, 23L, 
22L, 21L, 22L, 22L, 22L, 21L, 22L, 21L, 23L, 21L, 22L, 23L, 20L, 
23L, 22L, 21L, 23L, 20L, 21L, 22L, 23L, 20L, 23L, 22L, 21L, 23L, 
21L, 22L), .Tsp = c(2000, 2013.91666666667, 12), class = "ts")

您会注意到,包含工作日的月数大大超出了第一个时间序列 (ts) 的范围。

如果有人可以为我指出正确的方向(例如要使用哪些函数)来创建一个预测模型,让我可以在考虑工作日系列的同时预测 ts 系列,我将不胜感激。在预测中,这意味着它将根据预测月份的工作日数调整值。我有点卡住了,似乎无法想象如何使用我所知道的任何预测/时间序列函数来做到这一点。

感谢您的帮助! 约赫姆

【问题讨论】:

  • 您已经尝试过什么(除了将您的时间序列加载到ts 对象中。您尝试过哪些包(例如预测、动物园),以及为什么您没有成功获得您想要的他们?现在你的问题有点太宽泛了,StackOverflow 是针对特定的编程问题的。
  • 谢谢你的回答保罗。你可能是对的,我的问题很宽泛,或者实际上,我可能同时问两个问题,我需要分别提出两个问题。然而,事实是我有点卡住了,审查(和谷歌搜索)并没有导致对正确方向的洞察。
  • 您的第一个问题是您的数据格式不适合建模。您可能想要重塑(可能使用 reshape2 包)该时间序列,以便有一个标识月份的列和一个带有值的列。为了适应时代,我推荐 lubridate 包。为了轻松识别假期,我推荐 TimeWarp 和 Holidays 包。

标签: r events forecasting


【解决方案1】:

试试这个:

require(forecast)
fit <- auto.arima(ts,xreg=window(workingdays,end=2012.5))
fcast <- forecast(fit,xreg=window(workingdays,start=2012.51))

【讨论】:

    【解决方案2】:

    我会查看CRAN Timeseries Taskview 以获取与您的问题相关的软件包。如果您对特定功能/包有任何具体问题,可以在这里提出新问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      • 2018-10-24
      • 2018-06-06
      • 2021-06-27
      • 2013-04-08
      相关资源
      最近更新 更多