缺失值 - Arima模型

3

我有一个关于产品销售的每日时间序列,我的序列从2016年1月1日到2017年8月31日。

考虑到一周有六天(从星期一到星期六),没有星期日的数据,所以在运行ARIMA模型之前,需要先填补缺失数据。这就是我需要帮助的地方:我已经了解到可以使用na.approx或者NA来填补缺失值,但是我不知道如何操作。

您可以在这里看到我的时间序列:

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

正如您所见,星期日没有数据。我需要知道如何填补缺失值,并运行ARIMA模型,以便能够预测剩下的2017年。


请查看这里的解决方案是否适用于您?(https://dev59.com/3XvZa4cB1Zd3GeqP-xQ2) - Z.Lin
嗨,感谢您的评论。我的意思是,我的系列每个星期日都有零值,因为它是关于产品销售的,而这家商店星期日不营业,所以未来所有星期日的预期值都是零。我确实有周一到周六的数据,但我真的很困惑如何运行ARIMA模型,考虑到我在星期日有这些零值。 - Jose R.
我的回答对你有帮助吗? - acylam
是的!!非常感谢您的回答!!..这正是我需要的!!非常感谢!!! - Jose R.
你没有在评论中提到我(@useR),所以我当时没有看到。但很可能是你运行了一些使用与df相同名称的其他对象的代码。尝试清除你的工作空间,然后只重新运行你的数据和我的代码。你也可以使用test = mdy(df$Date)进行测试,这样每次运行代码时就不会替换df$Date - acylam
显示剩余2条评论
2个回答

6

以下是三种方法:

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

在此输入图片描述 在此输入图片描述

将周日替换为NA:

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

enter image description here enter image description here

注意事项:

正如你所看到的,它们产生不同的预测结果。这是因为第一个时间序列是不规则的,第二个是带有缺失值的常规时间序列,第三个是带有插值数据的常规时间序列。在我看来,处理缺失值的更好方法是在拟合ARIMA之前进行插值,因为ARIMA假定时间序列是等间隔的。然而,这也取决于您的“缺失”数据点是否实际缺失,而不是活动停止。前者应该用插值处理,而对于后者,您可能最好删除星期天,并将时间序列视为不存在星期天。

请参见如何处理不存在或缺失的数据?上的讨论, 以及使用R预测包处理缺失值和/或不规则时间序列上的讨论。


0
原则上,您可以使用imputeTS(用于填充NAs)- forecast(用于进行预测)组合。
这可以很容易地完成:
library("imputeTS")
library("forecast")
ts_sunday %>% na_kalman() %>% auto.arima() %>% forecast(h=10)

可以完成任务。但是在这种特定情况下,这将是一个坏主意。如果数据是随机缺失的,您可以考虑此解决方案。但它不是 - 总是缺少星期天。一些时间序列模型也可以处理NAs并仍然构建模型(但缺点几乎与先前的解决方案相同)。模型应该如何处理星期天,因为从未观察到... 从统计学角度来看,最好的解决方案可能是像avid_useR在另一个答案中所描述的完全删除星期天。如果您不需要星期天 - 并且无论如何都没有星期天的价值,那么只需将其删除即可。但通常这迟早会引起下一个问题..“如何处理公共假期” - 这也经常是NA。还要始终记住您的问题 - 一个解决方案可能适用于一个设置 - 对于另一个设置可能没有意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接