【问题标题】:Smoothing of time-series data without smoothing out peak values in R平滑时间序列数据而不平滑 R 中的峰值
【发布时间】:2015-08-09 16:12:25
【问题描述】:

我有 3 个月时间序列的每日数据(每 5 分钟记录一次数据)。数据非常嘈杂。
我已经尝试了一些 MA 方法。它们工作正常,产生的曲线相当平滑,但问题是峰值几乎被平滑掉了。

所以我的问题是:

有什么方法可以消除图中所有这些噪音但保留峰值?

我也读过一些关于卡尔曼滤波的文章,但我不确定它是如何工作的,以及这是否适合我的问题。

我尝试了以下代码:

smooth <- rollapply(PCM4 [,3], width=10, FUN=mean, align = "center", fill=NA)

我还尝试了一些不同的窗口宽度输入值,这使得结果数据更平滑,但也减少了我不想要的峰值。

数据集:

DateTime            h     v     Q      T
2014-12-18 11:45:00 0.112 0.515 17.141 15.4
2014-12-18 11:50:00 0.113 0.511 17.007 15.5
2014-12-18 11:55:00 0.114 0.518 17.480 15.5

未平滑的情节:

平滑图(宽度=10):

如您所见,第二个图非常扭曲,第一个峰值例如约为 250 L/s 而不是 500 L/s。 这样做的原因是,它是从滚动平均值计算出来的,所以它变得非常扭曲。

但问题是:有没有更好的解决方案来满足我的需求?

【问题讨论】:

  • 对不起 :) 给你!!
  • 现在看起来好多了。不过,我对 R 并不精通。只能建议您等待,同时熟悉 SO。 stackoverflow.com/tour
  • 做了一点修改。如果你附上一张图表的图片(过滤前后),答案会变得更加可读。
  • 非常感谢。我对 R 和这个论坛还很陌生,所以我很感谢你的帮助 :) 但我担心,在获得 10 的声誉之前我不能发布任何图片!否则我以前会这样做!
  • 现在你有 11 个了。)

标签: r time-series noise smoothing kalman-filter


【解决方案1】:

有什么方法可以消除图中所有这些噪音但保留峰值?

这里的挑战是你还没有真正说出什么是噪音和什么是信号。通常,完全不同的(“峰值”)值将被归类为噪声。当人们说滤波时,他们通常会想到低通滤波(去除高频噪声并保持总体趋势)。按照这个定义,突然出现的峰值就是噪音。

如果您对系统及其噪声有数学上的了解,卡尔曼滤波器将为您提供一个可以使用的工具。在 KF 的“预测”步骤中,您将拥有一个数学模型,该模型将产生一个预期值,您可以根据该预期值测试您的测量值。如果您可以预测峰值(无论是它们的值,还是只是它们存在的时间),那么 KF 可以为您提供帮助。

http://www.lifl.fr/~casiez/1euro/“1 欧元”过滤器可能会有所帮助。核心思想是总体运动(你的突然高峰)可能基本上是真实的,而低运动时期是嘈杂的,应该平均下来。每当发生大运动时,该滤波器就会突然打开其带宽,然后逐渐将其钳制下来。它专为跟踪人体运动而设计,不会反射测量中的噪音。

【讨论】:

  • 嗨,本,感谢您的努力。听起来这正是我正在寻找的。我已经意识到这个问题,根据定义,这个“峰值”值将被视为噪声,尽管它们是真实的。通常一些简单的移动平均线就足以满足我的需要,但是在这种情况下它有点复杂。但是仍然存在一个问题:似乎没有在 R 中使用“1€-filter”的实现?!
猜你喜欢
  • 1970-01-01
  • 2020-01-03
  • 1970-01-01
  • 2019-05-12
  • 2017-10-31
  • 2012-07-10
  • 2020-07-12
  • 2013-11-29
  • 2018-06-08
相关资源
最近更新 更多