时间序列平滑,避免修订

3
这次我的问题比较方法论而不是技术性的。我有一组每周更新的时间序列数据,但这些数据非常波动。因此,我想应用一种过滤/平滑方法。我尝试了Hodrick-Prescott和LOESS。两种结果看起来都不错,但问题在于如果一个新的数据点与历史数据点明显不同,那么旧值就必须被修正/更改。有没有人知道在R中实现我想要的方法?一个方法/函数的名称可能就足够了。但它应该比左侧移动平均更复杂,因为我不想失去时间序列开头的数据。感谢任何帮助!非常感谢!
最好的问候,
安德烈亚斯
2个回答

4

我想你可能在寻找的术语是因果过滤,即不依赖未来值的过滤。在这个类别中,最简单/最为人所知的方法可能是指数平滑,它可以在forecastexpsmooth包中实现(library("sos"); findFn("{exponential smoothing}"))。

这对您有帮助吗?


非常感谢您的快速回复!我对StackOverflow和你们的团队感到惊讶!我会尝试并在明天告诉您我的结果!谢谢! - chameau13
尽管其名称为指数平滑,但它并不是一种平滑方法,而是用于预测的单边滤波器。听起来chameau13想要一个真正的双边平滑方法。 - Rob Hyndman
@RobHyndman:你说的指数平滑方法是正确的(糟糕)。你可能比我更了解这个。你有更好的想法吗?我不知道双边平滑方法如何具有OP想要的属性...? - Ben Bolker
实际上,方法本身或其工作原理并不是那么重要。然而,单向滤波器听起来不太容易被修改。我需要这样做的原因是:目前时间序列非常波动(它是基于调查的指标;波动性问题主要是由于我们的样本量太小,但我想使其更平滑,从而更易于解释)。最终,我想使用一些季节性分解,但目前这是不可能的,因为我只有一年的数据。 - chameau13
非常感谢您的帮助!今天我终于有时间测试了您所有有用的建议。关于我选择的解决方案,请参见上面的答案!非常感谢! - chameau13

3
似乎你需要一个强大的双侧平滑器。问题在于,端点处的异常值与趋势突然变化难以区分。只有收集到多个观测数据后(即使这样,还需要一些强的趋势平滑假设),才能清楚其为异常值。
我认为你很难找到比loess()更好的选择,但其他旨在进行鲁棒平滑的函数包括:
- smooth() 用于Tukey平滑法; - supsmu() 用于Friedman超级平滑法;
Hodrick-Prescott平滑对异常值不鲁棒。

非常感谢!我在看到你的回答之前已经发表了上面的评论。很抱歉!今晚我会尝试你提供的所有建议并在这里报告我的结果。 - chameau13
非常感谢您的帮助!测试您的建议花费了我一些时间。然而,最终我使用了locfit包中的单侧平滑器!非常感谢! - chameau13

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