【问题标题】:Predict X value from Y value with a fitted model [duplicate]使用拟合模型从 Y 值预测 X 值
【发布时间】:2017-09-05 11:05:05
【问题描述】:

我需要使用拟合模型预测新的y 值对应的x 值。

使用predict 函数从新的x 值预测y 值的通常情况很简单,但我不知道如何进行相反的操作。

对于有多个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') 

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) 

【问题讨论】:

  • 关于您对缺乏对称性的评论,您来使用 pca 创建一条存在对称性的线(即您没有一维的值,您知道另一个)。您还可以创建两个单独的回归(缺乏对称性的原因是由于回归均值)。很好奇这里是否还有其他想法/方法。
  • 见这里:stats.stackexchange.com/questions/13152/… 也可以在 wiki 上阅读回归稀释:en.wikipedia.org/wiki/Regression_dilution

标签: r lm


【解决方案1】:

正如this answer 中所暗示的,您应该能够使用approx() 来完成您的任务。例如。像这样:

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

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

给你:

【讨论】:

  • 补充一点,spline 函数也可用于非线性插值,以替代线性的approx 函数。
猜你喜欢
  • 2021-04-01
  • 2020-12-06
  • 2015-10-30
  • 2019-05-08
  • 1970-01-01
  • 2018-11-13
  • 1970-01-01
  • 2012-08-18
  • 2014-06-26
相关资源
最近更新 更多