如何在ggplot绘制的散点图中添加正交回归线?
给散点图添加正交回归线(适配双向测量误差)
嘿,刚好我之前处理过类似的需求——当存在双向测量误差时,普通OLS回归就不合适了,正交(主轴/MA)回归才是正确的选择。咱们用lmodel2包来搞定这个,下面是修改后的完整代码和步骤说明:
步骤1:安装并加载所需包
首先得装lmodel2,它专门用来处理这类有双向误差的回归:
# 第一次使用先安装包 install.packages("lmodel2") # 加载所有需要的包 library(ggplot2) library(dplyr) library(readr) # 显式加载readr,避免隐式调用的潜在问题 library(lmodel2)
步骤2:加载数据并拟合正交回归
不用单独提取x、y列,直接用数据框操作更简洁,同时拟合主轴回归:
# 加载你的数据 r <- read_csv("Uni/MSci/Project/DATA/new data sheets/comparisons/for comarison graphs/R Regression/GAcAs.csv") # 提取第一、第二列作为x和y(和你原代码逻辑一致) x_vals <- r[[1]] y_vals <- r[[2]] # 拟合正交(主轴)回归,method="MA"对应主轴回归(正交回归的常用类型) ortho_reg <- lmodel2(y_vals ~ x_vals, method = "MA") # 可以打印回归结果,确认截距和斜率是否合理 print(ortho_reg)
步骤3:绘制带正交回归线的散点图
把拟合好的回归线加到你的ggplot里,用geom_abline()调用回归的截距和斜率:
ggplot(r, aes(x = .data[[names(r)[1]]], y = .data[[names(r)[2]]])) + geom_point() + # 原代码的scale_size_area()未设置size映射,暂时移除,需要的话可添加aes(size = 变量) # 添加红色的正交回归线,从回归结果中提取参数 geom_abline( intercept = ortho_reg$regression.results[ortho_reg$regression.results$Method == "MA", "Intercept"], slope = ortho_reg$regression.results[ortho_reg$regression.results$Method == "MA", "Slope"], color = "red", linewidth = 1 ) + xlab("Expected") + ylab("Observed") + ggtitle("G - As x Ac") + xlim(0, 40) + ylim(0, 40) + theme_bw() # 可选:添加清爽的主题优化视觉效果
小补充
- 如果你的变量量纲差异较大,可以试试
method="RMA"(标准化主轴回归),适配性会更好; - 要是需要给散点添加大小映射,再把
scale_size_area()加回去,同时在geom_point()的aes里设置size = 你的目标变量就行。
内容的提问来源于stack exchange,提问作者A.Carter
相关产品推荐
相关产品推荐

