RStudio中分组线性回归的分析与可视化实现求助
解决方案:两组数据的线性回归分析与可视化
1. 组内线性回归显著性检验
使用dplyr分组拟合线性模型,结合broom包整理输出统计结果(系数、p值、R²):
# 加载依赖包 library(tidyverse) library(broom) # 分组拟合回归并提取统计量 group_reg_results <- data_NeuroPsych %>% group_by(Group) %>% do(model = lm(Neuropsych_Delta ~ Flanker_Ratio, data = .)) %>% mutate( coef_details = map(model, tidy), # 提取系数与显著性 model_summary = map(model, glance) # 提取模型整体指标(R²、模型p值) ) %>% unnest(coef_details) %>% unnest(model_summary) # 查看关键结果(分组、变量、系数、p值、R²) select(group_reg_results, Group, term, estimate, p.value, r.squared, statistic)
输出中,每组Flanker_Ratio对应的p.value就是该组x与y线性关系的显著性,r.squared为决定系数。
2. 组间回归差异显著性检验
通过交互项模型检验两组回归斜率的差异:拟合包含Flanker_Ratio与Group交互项的线性模型,交互项的p值即为组间回归关系的显著性差异指标。
# 构建含交互项的回归模型 interaction_model <- lm(Neuropsych_Delta ~ Flanker_Ratio * Group, data = data_NeuroPsych) # 查看交互项的显著性 tidy(interaction_model) %>% filter(term == "Flanker_Ratio:Group")
若交互项p值<0.05,说明两组的回归斜率存在显著差异;若不显著,说明两组线性关系的斜率一致,仅可能存在截距差异。
3. 同图展示所有分析结果
使用ggplot2结合ggpmisc包,在图中添加分组回归线、回归方程、R²、组内p值,以及组间差异的标注:
# 安装并加载ggpmisc install.packages("ggpmisc") library(ggpmisc) # 提取交互项p值用于图中标注 interact_p_val <- tidy(interaction_model) %>% filter(term == "Flanker_Ratio:Group") %>% pull(p.value) %>% round(3) # 绘图 ggplot(data_NeuroPsych, aes(x = Flanker_Ratio, y = Neuropsych_Delta, color = Group)) + geom_point(alpha = 0.7, size = 2) + # 添加分组回归线 geom_smooth(method = "lm", fill = NA, linewidth = 1.2) + # 添加每组的回归方程、R²、p值(自动解析为数学表达式) stat_poly_eq( aes(label = paste(..eq.label.., ..rr.label.., ..p.value.label.., sep = "~~~")), formula = y ~ x, parse = TRUE, label.x = "right", # 标签对齐方向 label.y = c(0.9, 0.8), # 两组标签分别放在不同y轴位置,避免重叠 size = 4 ) + # 添加组间斜率差异的标注 annotate("text", x = Inf, y = Inf, label = paste("Slope difference p =", interact_p_val), hjust = 1.1, vjust = 1.1, size = 4) + theme_minimal(base_size = 12) + labs(x = "Flanker Ratio", y = "Neuropsych Delta", color = "Group")
stat_poly_eq自动生成每组的回归方程(如y = ax + b)、R²值和模型p值;- 组间差异标注放在图的右上角,清晰展示斜率差异的显著性;
- 可调整
label.x、label.y、size等参数优化标签位置和样式。
内容的提问来源于stack exchange,提问作者Natalie
相关产品推荐
相关产品推荐

