You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:21:15