如何从 lm 中找到最小值最大值

问题描述 投票:0回答:2

我正在尝试找出一种从拟合二次模型中找到最小值/最大值的方法。在这种情况下是最小值。

x.lm <- lm(Y ~ X + I(X^2))

编辑:澄清一下,我已经可以通过 min(predict(x.lm)) 找到最小 y。我怎样才能将其转换为相应的 x 值。

r
2个回答
3
投票

看看这个。想法是你必须从 x.lm fit 中获取拟合值

#example data

X <- 1:100 
Y <- 1:100 + rnorm(n = 100, mean = 0, sd = 4)

x.lm <- lm(Y ~ X + I(X^2))

fits <- x.lm$fitted.values #getting fits, you can take residuals,
# and other parameters too

# I guess you are looking for this.
min.fit = min(fits)
max.fit = max(fits)

又一个问题之后

df <- cbind(X, Y, fits)
df <- as.data.frame(df)
index <- which.min(df$fits) #very usefull command
row.in.df <- df[index,]

0
投票

虽然已经有了一个公认的答案,但它的缺点是它不能产生拟合曲线的最小值或最大值,而只能产生曲线上的一个随机点,该点恰好是预测变量值的随机样本中的最小值。

正如@Roland 指出的,很容易从拟合系数计算实际极值。请记住,极值的必要条件是导数消失,对于 $y = ax^2 + bx + c$,它产生点 $x = -b/2a$。因此,您可以按如下方式找到极值:

fit <- lm(mpg ~ disp + I(disp^2), data=mtcars)
a <- coef(fit)[3]
b <- coef(fit)[2]
-b/(2*a)
# 419.2907

plot(mpg ~ disp, data=mtcars)
mtcars.sorted <- mtcars[order(mtcars$disp),]
lines(mtcars.sorted$disp, predict(fit, newdata=mtcars.sorted), col="red")
abline(v=-b/(2*a), col="blue")

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.