使用Greg的有用答案here,我将二阶多项式回归线拟合到我的数据集中:
poly.fit<-lm(y~poly(x,2),df)
当我绘制线条时,我得到下面的图表:
系数为:
# Coefficients:
# (Intercept) poly(x, 2)1 poly(x, 2)2
# 727.1 362.4 -269.0
然后我想找到峰值的x值。我认为在R中有一种简单的方法可以这样做,但我不知道,*所以我去了Wolfram Alpha。我输入了等式:
y=727.1+362.4x-269x^2
Wolfram Alpha返回以下内容:
如您所见,该函数与x轴相交,大约为x = 2.4。这显然不同于我在R中的图,其范围从0≤x≤80。为什么这些不同? R是否将我的x值解释为某些后台变量的一部分?
*我也很欣赏如何找到这个高峰的答案。显然我可以采用衍生物,但我如何设置为零?
答案 0 :(得分:3)
使用predict
。
plot( 40:90, predict( poly.fit, list(x=40:90) )
答案 1 :(得分:1)
在二次多项式的情况下,你当然可以使用一点微积分和代数(一旦你有友好的系数)。
更一般地说,您可以通过在一系列候选值上评估模型并确定哪一个给出最大响应值来估算。
这是一个(只有适度强大的)功能,可以在这里使用。
xmax <- function(fit, startx, endx, x='x', within=NA){
## find approximate value of variable x where model
## specified by fit takes maximum value, inside interval
## [startx, endx]; precision specified by within
within <- ifelse(is.na(within), (endx - startx)/100, within)
testx <- seq(startx, endx, by=within)
testlist <- list(testx)
names(testlist)[1] <- x
testy <- predict(fit, testlist)
testx[which.max(testy)]
}
请注意,如果您的预测变量被调用为x以外的其他变量,则必须在x
参数中将其指定为字符串。
所以要找到曲线有峰值的x值:
xmax(poly.fit, 50, 80, within=0.1)