使用拟合模型从Y值预测X值

cyl*_*lim 2 r lm

我需要使用拟合模型预测xy值的相应值。

通过使用函数y从新x值预测值的通常情况很简单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') 
Run Code Online (Sandbox Code Playgroud)

样例

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

编辑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) 
Run Code Online (Sandbox Code Playgroud)

样例2

Fel*_*lix 6

正如该答案中所暗示的那样,您应该可以approx()用于您的任务。例如:

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

points(xval, 30, col = "blue", lwd = 5)
Run Code Online (Sandbox Code Playgroud)

给你:

在此处输入图片说明

  • 只是要补充一下,`spline`函数也可用于非线性插值,以替代线性的“ approx”函数。 (2认同)