Se la tua relazione non è monotona o se hai più valori di predittore, allora ci possono essere più valori x per un dato valore y e devi decidere come gestirlo.
Una possibilità che potrebbe essere lento (e può essere il metodo utilizzato negli altri pacchetti menzionati) è quello di utilizzare la funzione 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)
è possibile utilizzare la funzione TkPredict
dal pacchetto TeachingDemos
a bulbo oculare un soluzione.
Oppure si potrebbe ottenere un abbastanza veloce approssimazione generando un sacco di punti previsti, quindi nutrirli ai approxfun
o splinfun
funzioni per produrre le approssimazioni:
tmpx <- seq(min(x), max(x), length.out=250)
tmpy <- predict(fit, data.frame(x=tmpx))
tmpfun <- splinefun(tmpy, tmpx)
tmpfun(4)
fonte
2012-08-22 19:40:16
per quello che vale, 'library (sos); findFn ("{inverse prediction}") 'trova questa funzione, così come una funzione simile nel pacchetto' quantchem' (che sembra fare anche inversione non lineare ...) –