【问题标题】:minimum of a function predicted by 2nd-degree polynomial regression二次多项式回归预测的函数的最小值
【发布时间】:2015-08-07 01:12:34
【问题描述】:

我有一个使用具有二次多项式的线性模型来拟合我的数据的曲线,例如:

data <- data.frame(x=c(0,1,2,3,4,5), y=c(0, 2, 5, 10, 17, 26))
lm1 <- lm(y~x+I(x^2), data=data)
plot(y~x, data=data)
points(predict(lm1)~data$x, type="l", col="blue", lwd=1)

然后我想找到模型预测的函数的最小值。我可以提取系数来编写函数

a<-summary(lm1)$coef[,1][1]
b<-summary(lm1)$coef[,1][2]
c<-summary(lm1)$coef[,1][3]

但在那之后我不知道该怎么做,也没有在谷歌上找到答案。不是R中的一个函数来计算吗?还是应该计算导数的零?

【问题讨论】:

  • 是的,继续计算导数的零。这是一个简单的计算。
  • 我从 R 开始,我发现用从 lm 摘要中提取的系数计算导数并不容易。所以如果你能给我一个更明确的答案,我将非常感激!
  • 如果y=a+b*x+c*x^2然后y' = b + 2*c*x; b+2*c*x=0x=-b/(2*c)。那么y 的值为a-b^2/(2*c)+b^2/(4*c)(你应该检查我的代数并简化结果)。或者谷歌“抛物线的最小值”......
  • 是的,谢谢,我知道这些公式,但我需要在 R 上自动执行此操作,以便拥有一个可以在许多数据集上运行的脚本

标签: r regression


【解决方案1】:

设置数据并拟合模型:

dd <- data.frame(x=c(0,1,2,3,4,5), 
                 y=c(0, 2, 5, 10, 17, 26))
lm1 <- lm(y~x+I(x^2), data=dd)

获取预测:

pp <- data.frame(x=seq(-3,5,length=51))
pp$y <- predict(lm1,newdata=pp)     

返回最小 x/y 值的函数:

getMin <- function(model) {
    cc <- setNames(as.list(coef(model)),c("a","b","c"))
    with(cc,
         c(x=-b/(2*c),y=a-b^2/(4*c)))
}
mm <- getMin(lm1)

绘制结果:

plot(y~x,data=dd,xlim=c(-3,5))
with(pp,lines(x,y,col=4))
points(mm[1],mm[2],pch=16,col=2)

【讨论】:

  • 感谢您的回答!同时我还发现了“优化”功能对我的情况可能会有所帮助。
【解决方案2】:

你必须尝试类似的东西:

 predict(lm1, interval="prediction")[, "lwr"]

【讨论】:

  • 非常感谢! min(predict(lm1, interval="prediction")[, "lwr"]) 给了我最小的 y 值,对吧?如果我也想要相关的 x 值怎么办?
  • 您的 x 拟合值对应于预测值。如果您想提供 x 的新值,请将它们添加到 predict.lm 中的 newdata
  • 我认为这不是 OP 想要的。
猜你喜欢
  • 2019-07-29
  • 2019-12-30
  • 2019-01-24
  • 2022-01-03
  • 2021-07-18
  • 2018-10-19
  • 2015-02-12
  • 1970-01-01
  • 2016-11-10
相关资源
最近更新 更多