使用 Matlab 进行自相关和神经网络时如何处理时间序列数据中的间隙/NaN?

机器算法验证 时间序列 数据集 matlab 自相关 缺失数据
2022-03-24 23:57:51

我有一个时间序列的测量值(高度一维序列)。在观察期间,测量过程下降了一些时间点。因此,结果数据是一个带有 NaN 的向量,其中数据中有间隙。使用 MATLAB,这在计算自相关 ( autocorr) 和应用神经网络 ( nnstart) 时给我带来了问题。

应该如何处理这些间隙/NaN?我应该从向量中删除这些吗?或者用插值替换它们的条目?(如果是这样,在 MATLAB 中如何)

4个回答

我根本不会碰数据。将此用于与 NaN 的自相关:

http://www.mathworks.com/matlabcentral/fileexchange/43840-autocorrelation-and-partial-autocorrelation-with-nans/content/nanautocorr.m

“不接触数据”意味着不删除任何数据或时间步长或替换为 0 或平均值,这会损害有关特定时间滞后线性相关性的信息。如果您对“SAMPLE”自相关感兴趣,我也会避免模拟间隙中的值,无论如何,即使是最好的模拟技术也不会基于数据本身添加更多关于自相关的信息。我部分重新编码了 matlab(上面的链接)自相关和部分自相关函数来处理 NaN:包括 NaN 在内的任何数据对都被排除在计算之外。这是为每个滞后完成的。它对我有用。任何建议都被很好地接受。

有一些算法不受缺失值的影响,因此首选的解决方案是寻找它们(例如 Racf用于自相关)。

一般来说,要走的路要么只是丢弃缺少观察的数据(可能非常痛苦),要么只是估算它们的值——邻居的平均值可能足以满足平滑序列和小间隙,但当然有大量其他更强大的方法,使用样条曲线、随机/最频繁值、模型插补等。

使用干预检测,利用有用的 ARIMA 结构和任何本地时间趋势和/或电平变化来估算缺失值。

这里有两个问题。第一个是为您在 matlab 中的自相关答案提供一个有意义的数值框架。为此,您需要拉伸和/或修补数据向量的时间序列部分……这个问题的“数据完整性”部分是最基本的。

其次,您需要决定如何处理向量的“值”组件……这在很大程度上取决于特定应用程序,即最好假设什么,(例如,小的、缺失的时间戳和相应的 NaN或 Null 可以从它的邻居安全地插值...在较大的间隙中,将值设置为零可能更安全...或按照上面的建议进行估算 - 显然,为了有意义,间隙必须再次相对较小。) .