我有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。
这样做的原因是,它是根据滚动平均值计算得出的,因此失真很大。
但是问题是:有没有更好的解决方案可以满足我的需求?
最佳答案
这里的挑战是您尚未真正说出什么是噪声和什么是信号。通常,非常不同的(“峰值”)值将被分类为噪声。人们说滤波时,通常会想到低通滤波(消除高频噪声并保持总体趋势)。根据该定义,突然的峰值将是噪音。
如果您对系统及其噪声有数学上的了解,卡尔曼滤波器将为您提供使用的工具。在KF的“预测”步骤中,您将拥有一个数学模型,该数学模型将产生一个期望值,以该期望值来测试您的测量。如果您可以预测峰值(峰值或什至仅存在峰值),KF可以为您提供帮助。
一种可能有用的方法是http://www.lifl.fr/~casiez/1euro/“1欧元”过滤器。核心思想是,总体运动(突然的峰值)可能基本是正确的,而运动缓慢的时期则比较嘈杂,应平均下来。每当发生大的运动时,该滤波器就会突然打开其带宽,然后逐渐将其钳位。它旨在跟踪人类的运动而不会反射测量的噪声。
关于r - 平滑时间序列数据而不平滑R中的峰值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30484772/