2017-09-29 110 views
1

我有一个关于产品销售的每日时间系列,我的系列从01/01/2016开始直到2017年8月31日。缺失值 - 华宇车型

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

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

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

正如你所看到的,对于周日的数据。我需要知道如何来填补缺失值运行的ARIMA模型,并能预测什么剩下的2017

+0

查看是否解决方案[这里](https://stackoverflow.com/questions/21008166/adding-missing-dates-to-dataframe)为你工作? –

+0

因此,你基本上想要从日历中删除所有星期日,并假设星期一直接在星期六后直接?也许你可以用1 =第一个星期一,7 =下个星期一等数字来表示你的日子,等等?作为一个方面说明:我有点怀疑纯ARIMA可以很好地描述每周周期。 –

+0

嗨,感谢您的评论。我的意思是,我的系列在每个星期天都有零价值,因为它是关于产品的销售,而这家商店在星期日不工作,因此未来所有星期日的预期价值为零。我确实有星期一到星期六的数据,但考虑到我在星期天有这些零值,我对如何运行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)) 

enter image description here enter image description here

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

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假定时间序列是有规律的间隔的。但是,这也取决于您的“缺失”数据点是否真的缺失,而不是停止活动。前者应该用插值处理,而对于后者,您可能更好地移除星期日,并将时间序列视为不存在星期日。

查看 和讨论这个对Using the R forecast package with missing values and/or irregular time series

+1

非常好的解释。谢谢! –