找到装有 poly 的函数的最优值

Find optimum of function fitted with poly

我想找到通过 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"

我如何需要调用优化和可能的辅助函数来获得最佳值(在本例中为最大值)?

优化:通常寻找最小值

Optimize 函数状态:

The function optimize searches the interval from lower to upper for a minimum or maximum of the function f with respect to its first argument.

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

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

一个函数的优化

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

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

这将 return P(x) 的值知道由 lm

编辑的系数 return

编辑:检查 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()

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

合身度好吗?

我们用lm计算出来的拟合是正确的,我们没有弄错。