2017-04-10 74 views
1

我需要使用擬合模型來預測新值y的相應x值。使用擬合模型預測Y值的X值

從一個新的x值預測y價值的通常情況下是通過使用predict功能簡單,但我無法弄清楚如何做反向。

對於具有多個x解決方案的情況,我希望獲得x值範圍內的所有解決方案,即1-10。並且新的y將始終在用於擬合模型的y值的範圍內。

查看下面的示例代碼,我需要找到新的x值(new_x)。

x = seq(1:10) 
y = c(60,30,40,45,35,20,10,15,25,10) 

fit = lm(y ~ poly(x, 3, raw=T)) 

plot(x, y) 
lines(sort(x), predict(fit)[order(x)], col='red') 

example plot

new_y = 30 
new_x = predict(fit, data.frame(y=new_y)) #This line does not work as intended. 

編輯1:反轉配件

擬合反演關係不會產生相同的模式,因爲我們得到了一個不同的模型/擬合線。

rev_fit = lm(x ~ poly(y, 3, raw=T)) 

plot(x, y) 
lines(sort(x), predict(fit)[order(x)], col='red') 
lines(predict(rev_fit)[order(y)], sort(y), col='blue', lty=2) 

example plot 2

+0

讓我告訴你例子。如果你有y = 2x + 3那麼對於x = 1 y是5,所以對於y = 13 x等於=(y-3)/ 2 –

+0

對於簡單的情況,可以手動計算。但我正在尋找R中可能錯過的實現函數。我真正的模型涉及樣本負二項分佈,所以理想情況下我不想自己解決這個問題。 (當然,除非這是唯一的方法。) – cylim

+0

難道你不能只是用另一種方式建立你的模型嗎?擬合x到y?或者我錯過了什麼。 – PinkFluffyUnicorn

回答

3

正如在this answer你應該能夠使用approx()您的任務暗示。例如。像這樣:

xval <- approx(x = fit$fitted.values, y = x, xout = 30)$y 

points(xval, 30, col = "blue", lwd = 5) 

爲您提供:

enter image description here

+1

感謝您的回答。我剛剛看到了幾分鐘前提到的鏈接,實際上它是迄今爲止我能找到的最佳解決方案,並且可以用於更復雜的模型。 – cylim

+1

只需添加,'樣條函數也可用於非線性插值,作爲線性「近似」函數的替代。 – cylim