已完成Spearman相关性分析,如何绘制匹配Spearman's rho的散点图?
绘制带Spearman rho匹配拟合线的散点图
Spearman相关系数基于变量的秩次计算,因此对应的拟合线需通过变量秩的线性回归得到,而非原始变量的线性回归。以下提供两种R语言实现方案:
方案一:Base R 原生绘图
# 1. 绘制原始变量散点图 plot(db$Var_2, db$Var_4, main = "Var_2 与 Var_4 散点图(带Spearman秩拟合线)", xlab = "Var_2", ylab = "Var_4", pch = 16, col = "#2c3e50") # 2. 基于变量秩拟合线性模型 rank_model <- lm(rank(db$Var_4) ~ rank(db$Var_2)) # 3. 生成拟合线的坐标序列 x_seq <- seq(min(db$Var_2), max(db$Var_2), length.out = 100) # 将秩的预测值转换回原始Var_4的分位数值 y_pred <- quantile(db$Var_4, predict(rank_model, newdata = data.frame(`rank(db$Var_2)` = rank(x_seq)))) # 4. 添加拟合线与rho值标注 lines(x_seq, y_pred, col = "#e74c3c", lwd = 2) text(x = max(db$Var_2)*0.7, y = max(db$Var_4)*0.9, labels = paste("Spearman's rho =", round(-0.01818182, 4)), col = "#e74c3c", font = 2)
方案二:ggplot2 绘图(更美观易定制)
先加载ggplot2包:
library(ggplot2)
执行绘图代码:
ggplot(db, aes(x = Var_2, y = Var_4)) + geom_point(color = "#2c3e50", size = 3) + # 添加基于秩的线性拟合线(se = FALSE 关闭置信区间) geom_smooth(method = "lm", formula = y ~ rank(x), color = "#e74c3c", se = FALSE, linewidth = 1.2) + # 标注Spearman rho值 annotate("text", x = quantile(db$Var_2, 0.7), y = quantile(db$Var_4, 0.9), label = paste("Spearman's rho =", round(-0.01818182, 4)), color = "#e74c3c", fontface = "bold") + labs(title = "Var_2 与 Var_4 散点图(带Spearman秩拟合线)", x = "Var_2", y = "Var_4") + theme_minimal()
关键说明
- Spearman rho等价于变量秩的Pearson相关系数,因此拟合线必须基于秩次回归,才能匹配已计算的rho值。
- 若直接对原始变量做线性回归,得到的是对应Pearson相关的拟合线,与Spearman rho无关。
内容的提问来源于stack exchange,提问作者ArTu
相关产品推荐
相关产品推荐

