在点中拟合曲线
Fitting a curve in the points
这是我的数据:
y<-c(1.8, 2, 2.8, 2.9, 2.46, 1.8,0.3,1.1,0.664,0.86,1,1.9)
x<- c(1:12)
data<-as.data.frame(cbind(y,x))
plot(data$y ~ data$x)
我想通过这些点拟合一条曲线,以便生成中间预测值。我需要一条通过点的曲线。我不在乎它适合什么功能。
我参考了这个link。
Fitting a curve to specific data
install.packages("rgp")
library(rgp)
result <- symbolicRegression(y ~ x,data=data,functionSet=mathFunctionSet,
stopCondition=makeStepsStopCondition(2000))
# inspect results, they'll be different every time...
(symbreg <- result$population[[which.min(sapply(result$population,
result$fitnessFunction))]])
function (x)
exp(sin(sqrt(x)))
# inspect visual fit
ggplot() + geom_point(data=data, aes(x,y), size = 3) +
geom_line(data=data.frame(symbx=data$x, symby=sapply(data$x, symbreg)),
aes(symbx, symby), colour = "red")
如果我再次重复这个分析,每次上面的函数都会产生不同的曲线。有谁知道为什么会这样,这是否是在这些点上拟合曲线的正确方法?此外,此功能不会遍历每个点,因此我无法获得中间点。
标准方法是拟合样条曲线,这给出了一条贯穿所有点的漂亮曲线。 See spline。具体来说,您可以使用如下调用:
spline(x = myX, y = myY, xout=whereToInterpolate)
或者只是为你的例子计算 100 分:
ss <- spline(x,y, n=100)
plot(x,y)
lines(ss)
请注意,还有一个 smoothing spline 可能有助于噪声数据。
如果曲线不需要平滑,可以使用更简单的 approx 进行线性插值。
approx(x = myX, y = myY, xout=whereToInterpolate)
这是我的数据:
y<-c(1.8, 2, 2.8, 2.9, 2.46, 1.8,0.3,1.1,0.664,0.86,1,1.9)
x<- c(1:12)
data<-as.data.frame(cbind(y,x))
plot(data$y ~ data$x)
我想通过这些点拟合一条曲线,以便生成中间预测值。我需要一条通过点的曲线。我不在乎它适合什么功能。
我参考了这个link。
Fitting a curve to specific data
install.packages("rgp")
library(rgp)
result <- symbolicRegression(y ~ x,data=data,functionSet=mathFunctionSet,
stopCondition=makeStepsStopCondition(2000))
# inspect results, they'll be different every time...
(symbreg <- result$population[[which.min(sapply(result$population,
result$fitnessFunction))]])
function (x)
exp(sin(sqrt(x)))
# inspect visual fit
ggplot() + geom_point(data=data, aes(x,y), size = 3) +
geom_line(data=data.frame(symbx=data$x, symby=sapply(data$x, symbreg)),
aes(symbx, symby), colour = "red")
如果我再次重复这个分析,每次上面的函数都会产生不同的曲线。有谁知道为什么会这样,这是否是在这些点上拟合曲线的正确方法?此外,此功能不会遍历每个点,因此我无法获得中间点。
标准方法是拟合样条曲线,这给出了一条贯穿所有点的漂亮曲线。 See spline。具体来说,您可以使用如下调用:
spline(x = myX, y = myY, xout=whereToInterpolate)
或者只是为你的例子计算 100 分:
ss <- spline(x,y, n=100)
plot(x,y)
lines(ss)
请注意,还有一个 smoothing spline 可能有助于噪声数据。
如果曲线不需要平滑,可以使用更简单的 approx 进行线性插值。
approx(x = myX, y = myY, xout=whereToInterpolate)