使用 tsclean() 删除 R 中的时间序列离群值 - 调整对离群值的敏感度

问题描述 投票:0回答:1

我在 R 中有一个时间序列对象,其中包含来自测量自行车交通模式的传感器的数据。 我想删除代表测量错误的异常值。 通过目视检查可以轻松识别测量误差。 数据具有每年和每周的季节性,这似乎混淆了预测包中 tsclean() 函数中使用的过程,该函数是为此任务设计的。

我不想手动执行此操作,因为我将自动化大约 30 个时间序列对象的过程。

如何调整 tsclean() 函数,使其对每周周期不太敏感?

请帮忙!谢谢。

我使用以下代码来删除异常值并绘制结果以进行目视检查。 抱歉,ts 对象太大,无法在此处生成示例。

1。没有变形

library(forecast)

no_outlier <-  tsclean(ts_Rachel_HoteldeVille, lambda = NULL)
plot(ts_Rachel_HoteldeVille, col='black', lwd=2)
lines(no_outlier, col = "red", lwd=2)
title(main = "No transformation")

异常值由黑线表示。应该只删除大约 9 个数据点。 清理后的数据为红色。 它太敏感并且正在删除代表正常每周变化的数据点

2。 Box Cox 应用

no_outlier_boxcox <-  tsclean(ts_Rachel_HoteldeVille, lambda = "auto")
plot(ts_Rachel_HoteldeVille, col='black', lwd=2)
lines(no_outlier, col = "orange", lwd=2)
title(main = "Box Cox applied")

我还尝试应用 Box-Cox 变换,它提供了更好的结果,但并不完美。 在本例中,橙色线代表“已清理”的时间序列。 它仍在删除某些非异常值数据点,但实际上保留了明显的异常值。

r time-series outliers forecast
1个回答
0
投票

tsclean()
将 MSTL 模型拟合到时间序列,然后删除季节性分量。接下来,它拟合“超级平滑”来对趋势进行建模,并将其从季节性调整后的数据中删除。最后,它使用与 Tukey 原始箱线图中“远出”值相同的阈值来识别剩余序列中的异常值。请参阅 https://robjhyndman.com/hyndsight/tsoutliers/ 了解详细信息。

如果它不适用于您的数据,您可以执行类似的操作,但找到一种更适合您的应用程序的季节性和/或趋势建模方法。关键思想是以某种方式对信号进行建模,将其删除,然后在剩下的内容中找到异常值。

© www.soinside.com 2019 - 2024. All rights reserved.