Phl*_*das 1 r curve-fitting polynomials
我正在尝试绘制多项式的曲线,但是有一些点使得曲线在某些地方看起来非常直.如何在多项式上测试更多点,这样我就能得到更好的曲线?图片说明了下面的问题,代码试图解决问题.
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
Run Code Online (Sandbox Code Playgroud)
你还没有给出一个可重复的例子,但总的来说,这类问题的答案是predict()R 中的大多数方法都有一个newdata参数允许用额外的点进行预测.
library('MonoPoly') # monotonic polynomials
Run Code Online (Sandbox Code Playgroud)
设置数据:
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))
Run Code Online (Sandbox Code Playgroud)
一般来说,如果R中的拟合函数提供了一个data参数,那么使用它是个好主意.
fitResult <- monpol(y~x, degree=3,algorithm="Hawkins",data=dd)
Run Code Online (Sandbox Code Playgroud)
构建预测数据框并使用新数据进行预测:
pframe <- with(dd,data.frame(x=seq(min(x),max(x),length.out=101)))
pframe$y <- predict(fitResult, newdata=pframe)
Run Code Online (Sandbox Code Playgroud)
情节结果:
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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
46 次 |
| 最近记录: |