遗漏的价值观 - 有马模型

时间:2017-09-29 20:41:09

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

这里有三种方法:

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))

enter image description here enter image description here

用星期日取代星期日:

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))

enter image description here enter image description here

周日插播:

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))

enter image description here enter image description here

备注:

可以看出,他们产生了不同的预测。这是因为第一个时间序列是不规则的,第二个是具有缺失值的常规时间序列,第三个是具有内插数据的常规时间序列。在我看来,处理缺失值的更好方法是在拟合ARIMA之前进行插值,因为ARIMA假设时间序列是规则间隔的。然而,这也取决于你的"缺失"实际上缺少数据点,而不是活动停止。前者应该用插值处理,而对于后者你可能最好去除星期日并将时间序列视为星期日不存在。

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

答案 1 :(得分:0)

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

这很容易做到:

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

会做这份工作。 但是在这种特定情况下是个坏主意。如果数据会随机丢失,则可以考虑使用此解决方案。但这不是-总是缺少星期日。某些时间序列模型也可以处理NA并仍然可以建立模型(但缺点几乎与以前的解决方案相同)。由于从未观测到模型,该如何处理星期天……最好的解决方案(从统计角度来看)是avid_useR在另一个答案中描述为完全删除星期天。如果您不需要周日-而且周日没有任何值,则只需删除它们即可。但是通常这迟早会导致下一个问题..'如何对待公共假期'-通常也是如此。另外,请始终牢记您的问题-一种解决方案可能适合一种设置-对于另一种解决方案可能没有任何意义。