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

如何用R绘制展示自变量负交互效应减弱趋势的可视化图形?

如何用ggplot2绘制有序回归中的交互效应图

问题背景

我对数据集做了有序回归分析,发现两个显著自变量:ER_Ratio和Goals_Score。其中:

  • Goals_Score与ER_Ratio存在负交互作用:当ER_Ratio降低时,Goals_Score对因变量Academic.Performance的效应会减弱;
  • Goals_Score与不显著自变量Adj_Score也存在负交互作用:当Adj_Score升高时,Goals_Score对Academic.Performance的效应会减弱。

交互模型输出结果

Adj_Score:Goals_Score had a value of -0.064, and Std. Error of 
  0.026, and a t value of -2.428.

Goals_Score:ER_Ratio had a value of -0.055, an Std.Error of 0.0096, 
  and a t value of -5.7654.

尝试的代码及问题

我用下面的ggplot2代码绘图:

ggplot(data, aes(x=Goals_Score, y=Academic.Performance)) + 
    geom_point(aes(color = Adj_Score)) + 
    geom_smooth(method = “lm”, se = FALSE) + 
    scale_color_gradient (low = “blue”, high = “red”)

但这个图只显示高Academic.Performance对应高Goals_Score和高Adj_Score,没法展示“当Adj_Score升高时,Goals_Score对Academic.Performance的效应减弱”(以及ER_Ratio的类似情况)的效果,请问该怎么用R绘制符合需求的图?

修正后的示例数据集

(注:原示例数据存在语法错误,已修正补全并将因变量设为有序因子)

n <- 10
dat <- data.frame(id=1:n,
                  Adj_Score = c(0.555, 0.444, 0.4888, 0.7333, 0.4888, 0.8222, 0.7555, 0.666, 0.9111, 0.5222),
                  Goals_Score= c(32, 54, 38, 47, 35, 50, 53, 42, 49, 39),
                  Academic.Performance = factor(c("0-40%", "41-50%", "51-60%", "61-70%", "71-80%", "81-90%", "91-100%", "51-60%", "71-80%", "41-50%"), 
                                                levels = c("0-40%", "41-50%", "51-60%", "61-70%", "71-80%", "81-90%", "91-100%"),
                                                ordered = TRUE))

解决方案

要展示交互效应,核心是按调节变量的分组(或关键水平)分别拟合回归线,直观呈现自变量斜率随调节变量变化的趋势。以下分两种交互情况给出实现代码:

1. 展示Goals_Score与Adj_Score的交互效应

方法:按Adj_Score分位数分组拟合

将Adj_Score分为高、中、低三组,分别绘制Goals_Score对Academic.Performance的回归线:

library(ggplot2)
library(dplyr)

# 给Adj_Score按三分位数分组
dat <- dat %>%
  mutate(Adj_Group = cut(Adj_Score, 
                         breaks = quantile(Adj_Score, probs = c(0, 0.33, 0.66, 1)),
                         labels = c("低Adj_Score", "中Adj_Score", "高Adj_Score"),
                         include.lowest = TRUE))

# 绘制交互效应图
ggplot(dat, aes(x = Goals_Score, y = as.numeric(Academic.Performance))) +
  geom_point(aes(color = Adj_Group), alpha = 0.7) +
  geom_smooth(aes(color = Adj_Group), method = "lm", se = FALSE, linewidth = 1) +
  scale_color_manual(values = c("低Adj_Score" = "blue", "中Adj_Score" = "green", "高Adj_Score" = "red")) +
  labs(x = "目标得分", y = "学业表现(数值化)", color = "调节变量分组") +
  theme_minimal()

说明:

  • 有序因变量需转为数值型(as.numeric(Academic.Performance))才能用线性拟合展示趋势;
  • 绘图后可清晰看到:高Adj_Score组的回归线斜率比低组更平缓,对应“Adj_Score升高时,Goals_Score对学业表现的效应减弱”的结论。

2. 展示Goals_Score与ER_Ratio的交互效应

逻辑与上述一致,按ER_Ratio分位数分组后绘图:

# 假设数据集包含ER_Ratio列,先按三分位数分组
dat <- dat %>%
  mutate(ER_Group = cut(ER_Ratio, 
                        breaks = quantile(ER_Ratio, probs = c(0, 0.33, 0.66, 1)),
                        labels = c("低ER_Ratio", "中ER_Ratio", "高ER_Ratio"),
                        include.lowest = TRUE))

# 绘制交互效应图
ggplot(dat, aes(x = Goals_Score, y = as.numeric(Academic.Performance))) +
  geom_point(aes(color = ER_Group), alpha = 0.7) +
  geom_smooth(aes(color = ER_Group), method = "lm", se = FALSE, linewidth = 1) +
  scale_color_manual(values = c("低ER_Ratio" = "blue", "中ER_Ratio" = "green", "高ER_Ratio" = "red")) +
  labs(x = "目标得分", y = "学业表现(数值化)", color = "调节变量分组") +
  theme_minimal()

说明:

  • 绘图后会看到低ER_Ratio组的回归线斜率更平缓,对应“ER_Ratio降低时,Goals_Score对学业表现的效应减弱”的结论。

进阶方法:用interactions包直接绘制有序回归交互效应

如果不想手动分组,可使用interactions包的interact_plot函数,自动处理有序因变量并展示交互趋势:

library(interactions)
library(MASS) # 用于拟合有序回归模型

# 拟合包含交互项的有序回归模型(以Adj_Score为例)
ord_model <- polr(Academic.Performance ~ Goals_Score * Adj_Score, data = dat, Hess = TRUE)

# 绘制交互效应图
interact_plot(ord_model, pred = Goals_Score, modx = Adj_Score, 
              modx.values = c("min", "mean", "max"),
              y.label = "学业表现", x.label = "目标得分", legend.main = "Adj_Score")

说明:

  • 该函数会直接输出不同Adj_Score水平(最小值、均值、最大值)下,Goals_Score对学业表现的预测趋势线,无需手动转换因变量类型;
  • 替换modx = ER_Ratio即可绘制另一组交互效应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 20:57:12