找到装有 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
计算出来的拟合是正确的,我们没有弄错。
我想找到通过 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
编辑:检查 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
计算出来的拟合是正确的,我们没有弄错。