2014-10-02 4 views
2

Я полиномиальная модель линейной регрессии, одномерной и Я предсказать х от у для нового набора данных. модель что-то вродеОбратного предсказания с полиномиальной моделью

f22<- lm(y~I(x^2.0) + I(x^3.0) + I(x^0.5)) 

Я использую эту модель в достаточно узком диапазоне х, где модель является монотонной. Я думаю, что не могу использовать функцию предсказывать.lm ... любые предложения? Спасибо.

+0

Быстрый способ, но, возможно, не самое лучшее, чтобы собрать образцы от х и у, а затем подобрать модель, где вход is y – Donbeo

+1

@ Donbeo Нет, это другая модель (разные предположения относительно ошибки). – Roland

ответ

2

Вот решение, основанное на uniroot:

#some data 
x <- 1:100 
set.seed(42) 
y <- 1.8*x^2 - 0.015*x^3 + 0.4*x^0.5 + rnorm(100) 
plot(y~x) 

#fitting the model 
f22<- lm(y~I(x^2.0) + I(x^3.0) + I(x^0.5), data=data.frame(x, y)) 
f22 

lines(x, predict(f22)) 

resulting plot

#function to pass to uniroot for inverse prediction 
ynew <- 2000 + (1:10)*100 
fun <- function(x1, y1, mod) { 
    predict(mod, newdata=data.frame(x=x1)) - y1 
}  
#note how the interval is specified 
xpred <- sapply(ynew, function(z) uniroot(fun, interval=c(20, 70), mod=f22, y1=z)$root) 
#[1] 42.46892 43.86588 45.27242 46.69238 48.12992 49.58967 51.07714 52.59857 54.16165 55.77589 

#check if it worked 
predict(f22, newdata=data.frame(x=xpred)) 
#  1  2  3  4  5  6  7  8  9  10 
#2100.000 2200.000 2300.000 2400.001 2500.002 2599.999 2700.000 2800.000 2900.000 3000.000