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

5
我需要预测一个已拟合模型下,新的y值所对应的x值。
通常情况下,通过使用predict函数可以轻松地预测新的x值所对应的y值,但我无法想出如何完成反向预测。
对于有多个解的情况,我希望获得所有在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


关于您对缺乏对称性的评论,您可以使用PCA创建一条具有对称性的线(即在一个维度上没有值,您知道另一个维度)。您还可以创建两个单独的回归模型(缺乏对称性的原因是由于回归到平均值)。不过,我很好奇是否还有其他想法/方法。 - Bryan Shalloway
请参阅此处:https://stats.stackexchange.com/questions/13152/how-to-perform-orthogonal-regression-total-least-squares-via-pca,也可以在维基百科上了解回归稀释:https://en.wikipedia.org/wiki/Regression_dilution。 - Bryan Shalloway
1个回答

12

正如这个答案所示,您可以使用approx()来完成您的任务。例如:

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

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

给你:

在此输入图片描述


3
补充一点,spline 函数也可用于非线性插值,作为 approx 函数的替代选择。 - cylim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接