関係が単調でない場合、または複数の予測値がある場合は、特定のy値に対して複数のx値が存在する可能性があるため、その対処方法を決定する必要があります。
遅くなる可能性のある(そして前述の他のパッケージで使用されている方法である可能性がある)1つのオプションは、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)
パッケージのTkPredict
関数を使用して、ソリューションを目で確認できます。TeachingDemos
approxfun
または、多くの予測ポイントを生成し、それらをまたはsplinfun
関数にフィードして近似を生成することにより、かなり迅速な近似を取得できます。
tmpx <- seq(min(x), max(x), length.out=250)
tmpy <- predict(fit, data.frame(x=tmpx) )
tmpfun <- splinefun( tmpy, tmpx )
tmpfun(4)