【问题标题】:Missing values - Arima model缺失值 - Arima 模型
【发布时间】:2018-03-11 19:40:21
【问题描述】:

我有一个关于产品销售的每日时间序列,我的系列从 2016 年 1 月 1 日到 2017 年 8 月 31 日开始。

考虑到这是一个为期六天的一周(我的一周从星期一开始到星期六结束),没有星期天的数据,我知道在运行 Arima 模型之前,我需要先填充缺失的值。这是我需要帮助的地方:我读到我可以用na.approxNA 填充缺失值,但我不知道该怎么做。

你可以在这里看到我的系列:

https://drive.google.com/file/d/0BzIf8XvzKOGWSm1ucUdYUVhfVGs/view?usp=sharing

如您所见,周日没有数据。我需要知道如何填充缺失值以运行 Arima 模型并能够预测 2017 年的剩余时间。

【问题讨论】:

  • 看看here 的解决方案是否适合您?
  • 所以你基本上想从日历中删除所有星期日并假设星期一直接跟随星期六?也许您可以将您的日子编号为 1 = 第一个星期一,7 = 下一个星期一,等等?附带说明:我有点怀疑纯 ARIMA 能否很好地描述每周周期。
  • 您好,感谢您的评论。我的意思是,我的系列每个星期天都有零值,因为它是关于一个产品的销售,而这家商店在星期天不营业,所以未来所有星期天的期望值都是零。我确实有从周一到周六的数据,但考虑到我在周日有这些零值,我对如何运行 arima 模型感到非常困惑
  • 我的回答对您有帮助吗?
  • 是的!非常感谢您的回答!! ..这正是我需要的!非常感谢!!!

标签: r time-series missing-data zoo arima


【解决方案1】:

这里有三种方法:

library(lubridate)
library(xts)
library(dplyr)
library(forecast)

df$Date = mdy(df$Date)

删除周日:

ts_no_sunday = df %>%
  filter(wday(df$Date) != 1) %>%
  {xts(.$Units, .$Date)}

plot(ts_no_sunday)

no_sunday_arima = auto.arima(ts_no_sunday)

plot(forecast(no_sunday_arima, h = 10))

将星期日替换为 NA:

ts_sunday = df %>%
  mutate(Units = replace(Units, which(wday(df$Date) == 1), NA)) %>%
  {xts(.$Units, .$Date)}

plot(ts_sunday)

sunday_arima = auto.arima(ts_sunday)

plot(forecast(sunday_arima, h = 10))

插入星期日:

ts_interp = df %>%
  mutate(Units = replace(Units, which(wday(df$Date) == 1), NA),
         Units = na.approx(Units)) %>%
  {xts(.$Units, .$Date)}

plot(ts_interp)

interp_arima = auto.arima(ts_interp)

plot(forecast(interp_arima, h = 10))

注意事项:

正如我们所看到的,它们会产生不同的预测。这是因为第一个时间序列是不规则的,第二个是具有缺失值的规则时间序列,第三个是具有插值数据的规则时间序列。在我看来,处理缺失值的更好方法是在拟合 ARIMA 之前进行插值,因为 ARIMA 假设时间序列是有规律的间隔的。然而,这也取决于您的“缺失”数据点是否真的缺失,而不是活动停止。前者应该用插值处理,而对于后者,您最好删除星期日并将时间序列视为星期日不存在。

How to handle nonexistent or missing data? 上查看此讨论 这个在Using the R forecast package with missing values and/or irregular time series

【讨论】:

    【解决方案2】:

    原则上,您可以使用 imputeTS(用于填充 NA)-预测(用于进行预测)组合。

    这很容易做到:

    library("imputeTS")
    library("forecast")
    ts_sunday %>% na_kalman() %>% auto.arima() %>% forecast(h=10)
    

    会做这项工作。 但是在这种特定的情况下,这将是一个坏主意。如果数据会随机丢失,您可以考虑此解决方案。但事实并非如此——总是缺少星期天。一些时间序列模型也可以处理 NA,并且仍然可以构建模型。(但缺点与之前的解决方案几乎相同)。模型应该如何对待星期日,因为它从未被观察到......可能最好的解决方案(从统计角度来看)是avid_useR 在另一个答案中描述为完全删除星期日。如果您不需要星期天 - 并且无论如何都没有星期天的值,那么只需删除它们。但通常这迟早会导致下一个问题..“如何对待公共假期”——这通常也是不适用的。还要始终牢记您的问题 - 一种解决方案可能适合一种设置 - 对于另一种设置可能没有意义。

    【讨论】:

      猜你喜欢
      • 2015-08-15
      • 2020-02-07
      • 1970-01-01
      • 2021-04-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 1970-01-01
      • 2018-07-10
      相关资源
      最近更新 更多