找到最适合poly

时间:2016-04-12 11:55:31

标签: r optimization curve-fitting scatter polynomials

我想通过散点图poly找到最适合的函数。

示例数据:

x <- c(32,64,96,118,126,144,152.5,158)  
y <- c(99.5,104.8,108.5,100,86,64,35.3,15)

我用

获得了这个功能
poly(lm(y ~ poly(x, 3)))

但是当我想使用optimize时,

o <- optimize(f = lm(y ~ poly(x, 3, raw=TRUE)), interval=c(0,150))

我得到了

Error in (function (arg)  : could not find function "f"

我如何调用优化和可能的辅助函数来获得最佳值(在这种情况下最大值)?

1 个答案:

答案 0 :(得分:1)

优化:通常寻找最低

Optimize功能状态:

  

函数optimize从下到上搜索函数f相对于其第一个参数的最小值或最大值。

maximum logical. Should we maximize or minimize (the default)

所以你的公式会寻找最小值。

功能优化

lm不返回x的函数,它返回一个元素列表(系数,截距等),您可以将它们用于多项式。

您需要做的是创建一个函数evaluate.polynom

在知道lm

返回的系数时,将返回P(x)的值

编辑:检查optimize

的结果和警告

结果

X2<- x^2; X3<-x^3; df= data.frame(y = y, x = x, X2 = X2, X3 = X3)
L<-lm(y ~ X3 + X2 + x, data = df ) ### not being familiar with poly I prefer to do this
P<-function(x){ L$coefficients[1] + x^3 * L$coefficients[2] + x^2*L$coefficients[3] + x*L$coefficients[4] }
o<- optimize(f = P, interval = c(0,150), maximum = TRUE)

它说最大值是92。

是否正确?

library(ggplot2);qplot(x = 0:150, y = P(0:150), geom = "line")+theme_bw()

Polynom evaluation

我们可以清楚地看到我们的多项式在边缘达到最大值,但optimize 找到了局部最大值。如果你真的想要你的间隔最大值,我建议你也要在间隔的边缘评估你的多项式。

适合好吗?

Comparison fit and points

我们用lm计算的拟合是正确的,我们没有在那里犯错。