缺少价值 - 有马模型

Jos*_* R. 2 r time-series missing-data zoo arima

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

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

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

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

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

avi*_*seR 5

这有三种方法:

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

df$Date = mdy(df$Date)
Run Code Online (Sandbox Code Playgroud)

删除星期日:

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

用NAs代替星期日:

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

星期日插值:

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))
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 在此输入图像描述

笔记:

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

请参阅有关如何处理不存在或丢失数据的讨论? 这就是使用带有缺失值和/或不规则时间序列的R预测包