非常に長くてノイズの多いデータをRで滑らかにしたいと思います。しかし、非常に周期的なデータの場合、すぐに使用できるsmooth.spline()
はすぐに壊れます平滑化されたデータが鳴り始める。`smooth.spline`が長い(周期的な)時系列に深刻に劣る
(またはノイズなし)コサイン時系列を考えてみましょう
t <- seq(0,100*2*pi,length.out=3000)
y <- cos(t)# + rnorm(length(t), 0,0.05)
y100_s <- smooth.spline(y)$y
plot(y~t, type="l")
lines(y100_s~t, col="blue")
我々はフィット感が(鳴っていても、より低い周波数で
# rms increases as points are added to smooth.spline
rms <- sapply(seq(250,3000,by=250), function(i)
sqrt(mean((y[1:i] - smooth.spline(y[1:i])$y)^2)))
plot(rms)
、
smooth.spline()
に複数の値を追加することの影響を調べることができますオプション)。
t <- seq(0,50*2*pi,length.out=3000)
y <- cos(t)# + rnorm(length(t), 0,0.05)
y50_s <- smooth.spline(y)$y
require(pracma)
peaks <- list(findpeaks(y50_s),findpeaks(-y50_s))
plot(y~t, type="l")
lines(y50_s~t, col="red")
lines(peaks[[1]][,1]~t[peaks[[1]][,2]], type="l")
lines(-peaks[[2]][,1]~t[peaks[[2]][,2]], type="l")
ビットのために探索した後、この動作はスパー引数の関数であるように見えますが、私は効果を排除するために十分小さな値に設定することはできません。これはスプラインフィットの明白な結果であり、すぐに使える方法に頼っていないという欠点がありますが、私はいくつかの洞察に感謝します。 smooth.spline()
で指定できるコントロール、または平滑化のための代替の推奨事項/戦略がありますか?
素晴らしいレスポンスのおかげで、これは私がspline.smoothには理解できなかったものを主としています。 all.knots = TRUEを指定すると、df 705.0414と同等の結果が得られます。しかし、smooth.spline(t、y、df = 705.0414)を設定すると、ヘルプに表示されます。 df]の場合、フィットしたスムージングスプラインはまだdf 196を持っています。今はdfではなくnknotを設定していたはずです。 – noname