曲线平滑保留峰和谷

时间:2017-04-29 20:57:34

标签: r smoothing

我想生成一组数据点的平滑版本,但保留任何局部峰值或谷值(即前一个和下一个值都大于或小于当前值的位置)。 R中的标准smooth函数执行运行中值,这对中间值非常有用,但可以截断数据的峰值和谷值。这是一个希望有助于解释这个问题的例子:

peakValleys <- runif(20);

landform <- approx(x=seq_along(peakValleys), y=peakValleys, n=200)$y;
landform <- landform + runif(200, max=0.1);

plot(landform);
points(smooth(landform), type="l", col="red");

peak/valley with smoothing

我希望红线包含任何局部峰值/谷值,但仍然看起来很平滑(即不仅仅是在峰值/谷值点跳跃)。这在28左右最明显,其中谷数据点已被完全排除。

如果我有一个更大的平滑窗口和运行中位数,问题会更严重。理想情况下,这种“包含峰值的平滑”应适用于任何窗口大小:

plot(landform.jitter);
points(runmed(landform.jitter, 7), type="l", col="red");

peak/valley with smoothing window of size 7

0 个答案:

没有答案