2017-08-12 1 views
2
set.seed(1); x <- round(rnorm(30), 1); y <- sin(pi * x) + rnorm(30)/10 
plot(x, y, main = "spline(x,y) when x has ties") 
lines(spline(x, y, n = 201), col = 2) 

enter image description hereWie Glätte von Spline anpassen

Gibt es einen Weg, um die Glätte des Splines anpassen? Vor allem ab -0,5 gibt es wackelige Teile, die glatter sein könnten. Ich habe die Dokumentation angeschaut, aber es scheint kein direkter Parameter zu sein, der dies tut (so etwas wie spar in smooth.spline).

Antwort

1

Löss ist eine Methode, aber wenn Sie Splines verwenden möchten, verwenden Sie smooth.spline, nicht das Interpolations spline

set.seed(1); 
x <- round(rnorm(30), 1); 
y <- sin(pi * x) + rnorm(30)/10 
plot(x, y, main = "spline(x,y) when x has ties") 
sm <- smooth.spline(x, y, spar = 0.5) # play with spar 
pred <- predict(sm, seq(-2, 2, by = 0.1)) 
lines(pred, col = "red") 

smoothing splines

Es gibt ein Problem mit dieser Lösung: beachten Sie, dass im negativen Bereich Wo Punkte weniger dicht sind, ist die Passform nicht so gut. loess ist mehr lokal (das ist, wofür das l steht), also könnte es besser sein.

0

würde ich LOESS zur Glättung verwenden:

lines(loess.smooth(y=spl[["y"]], x=spl[["x"]], span = 0.05), col=2) 

Spanne einstellen je nach Bedarf.