2017-09-29 157 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

非常好的解釋。謝謝! –