【问题标题】:Fitting a curve in the points在点中拟合曲线
【发布时间】:2017-07-21 11:00:00
【问题描述】:

这是我的数据:

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)

我想通过这些点拟合一条曲线,以便生成中间预测值。我需要一条穿过这些点的曲线。我不在乎它适合什么功能。

我查阅了这个链接。

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")

如果我再次重复这个分析,每次上面的函数都会产生不同的曲线。有谁知道为什么会发生这种情况以及这是否是在这些点上拟合曲线的正确方法?此外,这个函数不会遍历每个点,因此我无法获得中间点。

【问题讨论】:

  • 您需要做一个重要的澄清:您是否需要一条 通过 点的曲线(并且不关心具体功能) - 或者您是否需要需要估计已知函数中的参数(而不关心点是否在函数上)?
  • 我需要一条穿过这些点的曲线。我不在乎它适合什么功能。

标签: r curve-fitting curve


【解决方案1】:

标准方法是拟合样条曲线,这会给出一条穿过所有点的漂亮曲线。 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) 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 1970-01-01
    • 2017-01-02
    • 1970-01-01
    • 2021-01-19
    • 2015-03-02
    • 2020-02-14
    相关资源
    最近更新 更多