首页 > 解决方案 > 在多元时间序列中估算缺失数据

问题描述

我有一个问题,我必须预测某家商店在 3 个月内销售 4000 种产品。在 4000 个时间序列中,我有许多空值,尤其是许多连续时间段,例如,一个产品有 3 个月的空值行。有人可以告诉我一些估算这些值的技巧吗?我在 R 中看到了名为mtsdi的包,但我不明白它是如何工作的,如果有人有示例,我将不胜感激。

我想到的另一种方法是插值,但有许多连续的空值周期,我不知道它是否也能正常工作。

标签: time-seriesnaimputation

解决方案


各种产品之间是否存在相关性?如果产品无论如何都不是真正相关的,您可以使用单变量时间序列插补算法,它只查看时间间相关性。(例如您建议的插值 - 但也有更高级的插值,它们也考虑了季节性)。

imputeTS包在这里提供了多种功能。(季节性分解插值 - 例如 na_seadec())。是一个包含所有功能的不错的介绍。

library("imputeTS")
na_seadec(yourData)

代码看起来就像这个例子一样简单。

但正如您正确假设的那样 - NA 差距越长,仅通过查看一个变量的时间间相关性就越难产生合理的插补。连续3个月NA很多。

因此,如果您的产品/变量之间存在某种相关性,那么实际使用它是有意义的。

要使用mtsdi,只需查看包文档中提供的示例:

library(mtsdi)
data(miss)
f <- ~c31+c32+c33+c34+c35
i <- mnimput(formula = f, dataset = miss, eps = 1e-3, ts = TRUE, method = "spline", sp.control = list(df=c(7,7,7,7,7)))
summary(i)

这将是示例中的参数:

> formula - formula indicating the missing data frame, for instance, ~X1+X2+X3+...+Xp
> dataset - data with missing values to be imputated
> eps - stop criterion
> ts  - logical. TRUE if is time series
> method - method for univariate time series filtering. It may be smooth, gam or arima. See Details
> sp.control - list for Spline smooth control. See Details

但我不太相信 mtsdi 包和方法。对我来说似乎不是很成熟。

如果存在变量间相关性,我宁愿使用mouse包。这适用于横截面数据,但您可以将时间方面部分建模为附加变量。(例如添加滞后和领先变量)


推荐阅读