如何用R的dplyr包绘制分组及全局回归曲线
问题描述
我有如下数据集(原文件包含4类生物):
organism length intersize org1 201 38 org1 334 4221 org2 428 575 org2 573 639 org3 356 700 org3 2414 978
我已创建dplyr对象,并绘制了length与intersize相关图表。现需计算并绘制按organism分组的回归曲线,同时添加全局回归直线,如何在R中实现?
解决方案
可以用ggplot2搭配dplyr来实现这个需求,具体操作如下:
1. 加载依赖包
先确保安装了所需的包,没有的话先安装:
install.packages(c("dplyr", "ggplot2"))
然后加载包:
library(dplyr) library(ggplot2)
2. 数据准备(若未整理为tibble)
假设你的原始数据框是df,转换为dplyr的tibble格式:
df <- tibble( organism = c("org1", "org1", "org2", "org2", "org3", "org3"), length = c(201, 334, 428, 573, 356, 2414), intersize = c(38, 4221, 575, 639, 700, 978) )
3. 绘制分组回归+全局回归直线
用ggplot的geom_smooth()分别实现分组和全局的拟合:
df %>% ggplot(aes(x = length, y = intersize, color = organism)) + # 绘制散点 geom_point(size = 2) + # 分组线性回归曲线(se=FALSE关闭置信区间,可根据需求调整method为loess等非线性方法) geom_smooth(method = "lm", se = FALSE, linewidth = 1) + # 全局线性回归直线(取消分组颜色映射,用黑色虚线加粗区分) geom_smooth(aes(color = NULL), method = "lm", se = FALSE, color = "black", linewidth = 1.2, linetype = "dashed") + # 添加图表标签 labs(title = "Length与Intersize的回归分析", x = "Length", y = "Intersize", color = "生物类别") + # 优化主题样式 theme_minimal()
额外:提取分组回归的统计结果
如果需要查看每个分组的回归系数、显著性等信息,可以用broom包来整理模型输出:
install.packages("broom") library(broom) df %>% group_by(organism) %>% do(tidy(lm(intersize ~ length, data = .)))
这段代码会输出每个生物类别的回归系数、标准误、t值和p值等统计数据。
内容的提问来源于stack exchange,提问作者user3683485
相关产品推荐
相关产品推荐

