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

在ggplot facet_wrap图中为lm添加p值、F值标签报错求助

在ggplot分面图中添加线性回归的方程、R²、F值和p值

以下是两种可靠的实现方法,解决你添加p值出错的问题,同时包含F值的展示:

方法一:自定义函数提取统计量(灵活可控)

借助broom包提取模型的所有关键统计量,提前生成标注文本,再在图中添加:

# 加载所需包
library(ggplot2)
library(broom)
library(dplyr)

# 模拟两组数据(替换为你的实际数据集)
df <- mtcars %>% mutate(group = factor(am, labels = c("Group A", "Group B")))

# 定义提取回归统计量的函数
get_reg_results <- function(data) {
  # 构建线性回归模型
  model <- lm(mpg ~ wt, data = data)
  # 提取模型整体统计量(R²、F值、F检验p值)
  model_summary <- glance(model)
  # 提取系数(用于构建方程)
  model_coef <- tidy(model)
  
  # 格式化各统计量文本
  equation <- sprintf("y = %.2f + %.2f x", model_coef$estimate[1], model_coef$estimate[2])
  r_squared <- sprintf("R² = %.3f", model_summary$r.squared)
  f_value <- sprintf("F = %.2f", model_summary$statistic)
  p_value <- ifelse(model_summary$p.value < 0.001, "p < 0.001", sprintf("p = %.3f", model_summary$p.value))
  
  # 合并为多行文本
  paste(equation, r_squared, f_value, p_value, sep = "\n")
}

# 先生成分面对应的标注数据(指定标注位置)
annot_data <- df %>%
  group_by(group) %>%
  summarise(
    label = get_reg_results(cur_data()),
    x = max(wt),  # 标注位置:x轴最大值处
    y = min(mpg)  # 标注位置:y轴最小值处
  )

# 绘制分面图并添加标注
ggplot(df, aes(x = wt, y = mpg)) +
  geom_point(color = "#2c3e50") +
  geom_smooth(method = "lm", se = FALSE, color = "#e74c3c") +
  facet_wrap(~group) +
  geom_text(
    data = annot_data, 
    aes(x = x, y = y, label = label),
    hjust = 1, vjust = 0, size = 3, color = "#2c3e50"
  ) +
  theme_minimal()

方法二:用ggpmisc包快速生成(简洁高效)

如果不想自定义函数,可使用ggpmisc的stat_poly_eq直接生成包含所有统计量的标注:

library(ggplot2)
library(ggpmisc)

# 模拟数据(替换为你的数据集)
df <- mtcars %>% mutate(group = factor(am, labels = c("Group A", "Group B")))

ggplot(df, aes(x = wt, y = mpg)) +
  geom_point(color = "#2c3e50") +
  geom_smooth(method = "lm", se = FALSE, color = "#e74c3c") +
  facet_wrap(~group) +
  # 添加回归统计标注
  stat_poly_eq(
    aes(label = paste(..eq.label.., ..rr.label.., ..f.value.label.., ..p.value.label.., sep = "\n")),
    formula = y ~ x,  # 对应你的回归公式
    parse = TRUE,  # 必须开启,解析数学表达式
    size = 3, color = "#2c3e50"
  ) +
  theme_minimal()

常见错误排查

你之前添加p值出错,大概率是以下原因:

  • 自定义提取时混淆了斜率的p值和F检验的整体p值:前者是单个系数的显著性,后者是模型整体的显著性,如果你要的是模型整体p值,需用glance(model)$p.value而非summary(model)$coefficients[2,4];
  • 使用stat_poly_eq时未加载ggpmisc包,或未设置parse = TRUE,导致统计量文本无法解析;
  • 标注位置未对应分面数据,导致文本显示错乱。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:45:35