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

R语言如何可视化3个以上自变量的多元回归并绘制±1 SD区间

多元线性回归可视化问题解答

注:你提供的示例代码中lm1的公式重复写入了iris$Petal.Width,实际使用时建议删除重复项避免共线性问题。

一、多自变量多元线性回归的高效汇总可视化方案

  • 优先推荐ggeffects包:专门用于回归模型边际效应可视化,支持最多4个自变量同时展示(通过x轴、分组颜色、行/列分面组合实现),生成的图表自带置信区间、标准差区间配置,代码非常简洁:
    library(ggeffects)
    # 计算边际效应,terms参数指定要展示的变量,可指定控制变量固定的分位数
    me <- ggpredict(lm1, terms = c("Sepal.Width", "Species", "Petal.Width [quart2]"))
    plot(me) + theme_bw()
    
  • 其次可以用ggstatsplot包的ggcoefstats函数:一键生成回归系数森林图,同时展示系数值、置信区间、显著性标记,适合快速汇总所有自变量的效应方向和显著性,比附加变量图更适合结果汇报:
    library(ggstatsplot)
    ggcoefstats(lm1)
    
  • 你提到的ggPredict函数来自ggiraphExtra包,确实支持最多3个变量的可视化,还支持交互效果,用法如下:
    library(ggiraphExtra)
    ggPredict(lm1, mapping = aes(color=Species, fill=Species), se=FALSE, show.point = TRUE)
    

如果自变量超过4个,可以用分面分组分批展示核心变量的效应,其余控制变量固定在均值/分位数值即可。

二、添加±1标准差区间带的实现方法

1. 基于ggplot的散点回归图实现

geom_smooth默认的se参数输出的是95%置信区间,要改成±1标准差的话,需要手动计算预测值和标准差,再用geom_ribbon绘制:

library(dplyr)
# 按物种分组拟合模型,提取预测值和标准差
iris_reg <- iris %>%
  group_by(Species) %>%
  mutate(
    pred = predict(lm(Sepal.Length ~ Sepal.Width, data = cur_data())),
    sd = predict(lm(Sepal.Length ~ Sepal.Width, data = cur_data()), se.fit = TRUE)$se.fit
  )

ggplot(iris_reg, aes(x = Sepal.Width, y = Sepal.Length, col = Species, fill = Species)) +
  geom_point(size=1) + 
  geom_line(aes(y = pred), linewidth = 1) +
  # 添加±1标准差区间
  geom_ribbon(aes(ymin = pred - sd, ymax = pred + sd), alpha = 0.2, color = NA) +
  theme_bw()

如果是全样本不分物种的回归,去掉group_by分组逻辑即可。

2. 附加变量图添加±1标准差区间

car包的avPlots默认没有提供标准差区间的参数,可以手动提取附加变量图的数据,再用ggplot重绘并添加区间:

library(car)
# 提取avPlots的数据,不直接绘图
av_data <- avPlots(lm1, intercept = TRUE, plot = FALSE)
# 提取Sepal.Width对应的附加变量数据,可按需替换为其他自变量
sw_av <- as.data.frame(av_data$`iris$Sepal.Width`)
colnames(sw_av) <- c("x", "y")

# 拟合附加变量的回归,计算标准差
av_lm <- lm(y ~ x, data = sw_av)
sw_av$pred <- predict(av_lm)
sw_av$sd <- predict(av_lm, se.fit = TRUE)$se.fit

# 绘制带±1标准差区间的附加变量图
ggplot(sw_av, aes(x = x, y = y)) +
  geom_point() +
  geom_line(aes(y = pred), color = "blue") +
  geom_ribbon(aes(ymin = pred - sd, ymax = pred + sd), alpha = 0.2, fill = "blue") +
  labs(x = "Sepal.Width | 控制其余变量", y = "Sepal.Length | 控制其余变量") +
  theme_bw()

内容的提问来源于stack exchange,提问作者Anna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:24:04