如果您的关系是非单调的,或者如果您有多个预测变量值,那么给定 y 值可能有多个 x 值,您需要决定如何处理。
一个可能很慢的选项(可能是提到的其他包中使用的方法)是使用 uniroot 函数:
x <- runif(100, min=-1,max=2)
y <- exp(x) + rnorm(100,0,0.2)
fit <- lm( y ~ poly(x,3), x=TRUE )
(tmp <- uniroot( function(x) predict(fit, data.frame(x=x)) - 4, c(-1, 2) )$root)
library(TeachingDemos)
plot(x,y)
Predict.Plot(fit, 'x', data=data.frame(x=x), add=TRUE, ref.val=tmp)
您可以使用 TeachingDemos 包中的 TkPredict 函数来查看解决方案。
或者您可以通过生成大量预测点来获得相当快的近似值,然后将它们提供给 approxfun 或 splinfun 函数以生成近似值:
tmpx <- seq(min(x), max(x), length.out=250)
tmpy <- predict(fit, data.frame(x=tmpx) )
tmpfun <- splinefun( tmpy, tmpx )
tmpfun(4)