如何从回归曲线中直接提取指定x值对应的预测y值?
问题:获取ggplot曲线中指定x值的预测y值
我希望从给定图表中提取指定x值对应的若干预测y值。已知可通过以下代码获取曲线上的x、y坐标:
coordinate <- ggplot_build(curve)$data[[2]][,c("x","y")] head(coordinate,n = 6L) # x y 1 0.1810660 32845.225 2 0.4810660 27635.136 3 0.7553301 23904.792 4 1.3295942 18316.923 5 1.8288582 15092.595 6 5.0312446 8018.707
请问是否存在函数可直接获取如3.5这类不在coordinate中的x值对应的预测y值?
解决方法
不建议直接从ggplot提取的坐标点做后续插值,更可靠的方式是回到生成曲线的原始模型,或者对现有坐标点做插值计算:
方法1:用原始模型直接预测(优先推荐)
如果你的curve是基于某个拟合模型(比如lm、glm、gam等)生成的,直接用模型的predict()函数对目标x值计算预测值,这是最准确的方式:
# 假设原始模型是model,目标x值存放在new_x中 new_x <- data.frame(x = 3.5) # 注意列名要和模型中的自变量名一致 predicted_y <- predict(model, newdata = new_x)
方法2:对现有坐标点做插值计算
如果无法获取原始模型,可以用R内置的插值函数对coordinate中的点进行插值,比如approx()或spline():
- 线性插值(
approx()):适合曲线变化平缓的情况
# 获取x=3.5对应的y值 linear_pred <- approx(x = coordinate$x, y = coordinate$y, xout = 3.5)$y
- 样条插值(
spline()):适合曲线非线性变化的情况,拟合更平滑
spline_pred <- spline(x = coordinate$x, y = coordinate$y, xout = 3.5)$y
注意:插值的精度依赖于现有坐标点的密度,点越多结果越接近真实预测值。
内容的提问来源于stack exchange,提问作者Florian B.
相关产品推荐
相关产品推荐

