2016-07-24 32 views
1

Ich versuche, die Kurve eines Polynoms zu zeichnen, aber es gibt so wenige Punkte, dass die Kurve an einigen Stellen sehr gerade aussieht. Wie kann ich mehr Punkte auf dem Polynom testen, damit ich eine schönere Kurve habe? Stellen Sie dar, das Problem unten mit dem Code zu veranschaulichen, der versucht, Problem zu lösen.Hinzufügen von mehr Punkten auf einer Polynomkurve

enter image description here

library('MonoPoly') # monotonic polynomials 

dataT = read.csv("data.csv", header=TRUE, sep=",") 
x <- dataT[,'x'] 
y <- dataT[,'y'] 
fitResult <- monpol(y~x, degree=3,algorithm="Hawkins") 
fitted <- fitted(fitResult) # not enough data points. Only 120 

z = predict(fitResult, seq(1, 5, 0.01)) # attempt at making more data points 

plot(1:5, 1:5, type = "n")# setting up coord system 
points(x,y,col="red") # plotting data fitting to 
lines(sort(x), sort(fitted),col="blue") #plotting fitted because z isn't working 
points(x,z,col="blue") # plotting curve 

Antwort

5

Sie haben kein reproduzierbares Beispiel, aber im Allgemeinen auf die Antwort auf diese Art von Frage sind, da die meisten predict() Methoden in R ein newdata Argument haben, die Vorhersage mit zusätzlichen Punkten ermöglicht.

library('MonoPoly') # monotonic polynomials 

Set up Daten:

set.seed(101) 
dd <- data.frame(x=c(1,2,10:20)) 
dd$y <- with(dd,rnorm(13,2+3*x-0.2*x^2,sd=0.4)) 

Im Allgemeinen, wenn eine Anpassungsfunktion in R ein data Argument bietet, dann ist es eine gute Idee, davon Gebrauch zu machen.

fitResult <- monpol(y~x, degree=3,algorithm="Hawkins",data=dd) 

Baukonstruktion Vorhersage Datenrahmen und vorhersagen, mit neuen Daten:

pframe <- with(dd,data.frame(x=seq(min(x),max(x),length.out=101))) 
pframe$y <- predict(fitResult, newdata=pframe) 

Grundstück Ergebnisse:

par(bty="l",las=1) ## cosmetic 
plot(y~x,data=dd,col="red") 
lines(dd$x, fitted(fitResult),col="blue",type="b",cex=2) 
with(pframe, points(x,y,col="purple",cex=0.5)) 

enter image description here

+0

Danke. Das hat perfekt funktioniert. Entschuldigung für das unvollständige Beispiel. Ich konnte mir keine Möglichkeit vorstellen, sie ohne eine riesige Textausgabe von Hunderten von Werten zu reproduzieren. Ihr kurzes Beispiel war wirklich nett. Du hattest recht damit, dass ich keine Erfahrung mit R habe und daher nicht wusste, wie man "Daten" eingibt. Danke nochmal für die tolle Antwort. Ich war viel zu lange an diesem Problem festgebissen. –