我這裏還有三個方面做的:
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))
爲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))
內插星期日:
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假定時間序列是有規律的間隔的。但是,這也取決於您的「缺失」數據點是否真的缺失,而不是停止活動。前者應該用插值處理,而對於後者,您可能更好地移除星期日,並將時間序列視爲不存在星期日。
查看 和討論這個對Using the R forecast package with missing values and/or irregular time series
查看是否解決方案[這裏](https://stackoverflow.com/questions/21008166/adding-missing-dates-to-dataframe)爲你工作? –
因此,你基本上想要從日曆中刪除所有星期日,並假設星期一直接在星期六後直接?也許你可以用1 =第一個星期一,7 =下個星期一等數字來表示你的日子,等等?作爲一個方面說明:我有點懷疑純ARIMA可以很好地描述每週週期。 –
嗨,感謝您的評論。我的意思是,我的系列在每個星期天都有零價值,因爲它是關於產品的銷售,而這家商店在星期日不工作,因此未來所有星期日的預期價值爲零。我確實有星期一到星期六的數據,但考慮到我在星期天有這些零值,我對如何運行arima模型感到非常困惑 –