2016-04-16 12 views
0

Ich habe nur 4 Datenpunkte eine glatte Kurve auf einem Grundstück passen:Wie mit sehr wenigen Punkten in R

points = c(60, 46, 46, 60) 

dass „will“ eine Parabel zu beschreiben. Offensichtlich kann ich jedoch keinen Weg finden, es glatt zu machen; stattdessen habe ich am Ende in diese Richtung unter Verwendung von Code mit dem kantigen Grundstück in rot auf:

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2) 
fit = loess(points ~ c(1:4), bw=nrd0, na.rm=T) 
lines(predict(fit), lwd=2, col= 2) 

Ich frage mich, ob es irgendeine Art und Weise der Ecken glatt zu machen, so dass es eher wie die blaue Linie sieht ...

enter image description here

Antwort

2

Wie in der Nachricht, die Sie bekommen gesagt, ist loess mit so wenig Punkten nicht glücklich. Aber man kann eine schöne Kurve bekommen mit spline:

points = c(60, 46, 46, 60) 
plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2) 
lines(spline(1:4, points, n=100)) 

enter image description here

1

Da Sie eine quadratische passen wollen, können Sie bekommen, was Sie wollen, wie folgt. Angenommen, die quadratische Funktion ist

f(x) = a*x^2 + b*x + c 

dann wissen wir, dass

a+b+c = 60 
4a+2b+c = 46 
9a+3b+c = 46 

von f(1),f(2),f(3) mit points[1:3] gleich. Wir können das vierte Element von points] wegen der Symmetrie ignorieren. Die a,b,c sind die Lösung eines Satzes von linearen Gleichungen A %*% x = points. konstruieren So Matrix A wie folgt

A <- matrix(c(1,1,1,4,2,1,9,3,1),nrow=3,byrow=TRUE) 

und dann die linearen Gleichungen lösen:

pcoef <- solve(A,points[1:3]) 

nun die Grafik, die Sie

f <- function(x,pcoef) pcoef[1]*x^2 + pcoef[2]*x + pcoef[3] 
g <- function(x) f(x,pcoef) 

plot(points, ylim=c(40,60), pch = 20, col = 2, cex = 2) 
curve(g,from=1,to=4,add=TRUE, col="blue") 

enter image description here

tun wollen bekommen
Verwandte Themen