time-series - 在多元时间序列中估算缺失数据
问题描述
我有一个问题,我必须预测某家商店在 3 个月内销售 4000 种产品。在 4000 个时间序列中,我有许多空值,尤其是许多连续时间段,例如,一个产品有 3 个月的空值行。有人可以告诉我一些估算这些值的技巧吗?我在 R 中看到了名为mtsdi的包,但我不明白它是如何工作的,如果有人有示例,我将不胜感激。
我想到的另一种方法是插值,但有许多连续的空值周期,我不知道它是否也能正常工作。
解决方案
各种产品之间是否存在相关性?如果产品无论如何都不是真正相关的,您可以使用单变量时间序列插补算法,它只查看时间间相关性。(例如您建议的插值 - 但也有更高级的插值,它们也考虑了季节性)。
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包。这适用于横截面数据,但您可以将时间方面部分建模为附加变量。(例如添加滞后和领先变量)
推荐阅读
- angular - Angular中HttpRequest错误的正确类型是什么
- node.js - 有人可以解释一下 express js 中的静态文件是如何工作的吗?
- github - Macos - Heroku 错误代码 H=10(Twitter Opensea.io 销售机器人)
- android - WindowInsetsControllerCompat.OnControllableInsetsChangedListener 不会触发插入显示操作
- javascript - jquery onload代码到javascript不起作用
- django - 配置 django 应用程序及其加载选项
- python - 如何按列对数据进行分组 - Pyspark?
- cassandra - 关于墓碑的 Cassandra 地图和列更新
- solidity - 将结构数组发送到不同的合约
- c++ - 基于条件的部分类模板专业化?