大数跨境
0
0

R中给图形添加p值方法汇总

R中给图形添加p值方法汇总 R语言数据分析指南
2024-11-27
1

欢迎关注R语言数据分析指南

经常遇到有读者询问一个问题如何给图形添加p值,在R中理解统计分析才是最主要的内容,而将统计结果添加到图形上则非常的简单,R中有几款非常成熟的包可以很轻松的解决此类问题。本节只介绍最常见的几种类型图,当然方法都是一致的,一通百通。详细的内容请参考下方几款R包的官方文档

主要使用R包

1.ggprism该包内的 add_pvalue() 可以将已经统计好的结果添加到图表上,常见的统计分析使用rstatix均可完成。
2.ggpubr该包内的 stat_pvalue_manual() 也可以将已经统计好的结果添加到图表上。
3.ggsignif该包内的 geom_signif() 会自动的完成统计分析及p值添加整个过程,该包经过更新后目前自定义更高。

library(tidyverse)
# install.packages("ggprism")
library(ggprism)
library(ggsignif)
library(rstatix)
library(ggpubr)

ggprism官方文档

https://csdaw.github.io/ggprism/articles/pvalues.html

案例展示

df_p_val <- ToothGrowth %>% 
  rstatix::group_by(factor(dose)) %>% 
  rstatix::t_test(len ~ 1, mu = 26) %>% 
  rstatix::adjust_pvalue(p.col = "p", method = "holm") %>% 
  rstatix::add_significance(p.col = "p.adj")

p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + 
  stat_summary(geom = "col", fun = mean) + 
  stat_summary(geom = "errorbar"
               fun = mean,
               fun.min = function(x) mean(x) - sd(x),
               fun.max = function(x) mean(x) + sd(x),
               width = 0.3) + 
  theme_prism() + 
  coord_cartesian(ylim = c(0, 40)) + 
  scale_y_continuous(breaks = seq(0, 40, 5), expand = c(0, 0))

# remember xmin and x are referring to the column dames in df_p_val
p + add_pvalue(df_p_val, 
               xmin = "group1"
               x = "factor(dose)"
               y = 37,
               label = "p.adj.signif")
df_p_val <- rstatix::t_test(ToothGrowth, len ~ dose)

p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + 
  geom_violin(trim = FALSE,aes(fill=factor(dose)),show.legend = F) + 
  geom_boxplot(width = 0.2) +
  theme_prism() + 
  coord_cartesian(ylim = c(0, 45)) + 
  scale_y_continuous(breaks = seq(0, 45, 5), expand = c(0, 0))

p + add_pvalue(df_p_val, 
               y.position = c(44, 41, 44),
               bracket.shorten = c(0.025, 0, 0.025))

分组比较

df_p_val1 <- ToothGrowth %>%
  rstatix::group_by(dose) %>%
  rstatix::t_test(len ~ supp) %>%
  rstatix::adjust_pvalue(p.col = "p", method = "bonferroni") %>%
  rstatix::add_significance(p.col = "p.adj") %>% 
  rstatix::add_xy_position(x = "dose", dodge = 0.8# important for positioning!

df_p_val2 <- rstatix::t_test(ToothGrowth, len ~ dose, 
                             p.adjust.method = "bonferroni") %>% 
  rstatix::add_xy_position()

p <- ggplot(ToothGrowth, aes(x = factor(dose), y = len)) + 
  geom_boxplot(aes(fill = supp)) + 
  theme_prism() + 
  coord_cartesian(ylim = c(045))

p + add_pvalue(df_p_val1, 
               xmin = "xmin"
               xmax = "xmax",
               label = "p = {p.adj}",
               tip.length = 0) + 
  add_pvalue(df_p_val2,
             label = "p = {p.adj}",
             tip.length = 0.01,
             bracket.nudge.y = 2,
             step.increase = 0.015)

ggpubr官方文档

https://rpkgs.datanovia.com/ggpubr/reference/stat_pvalue_manual.html

stat.test2 <- ToothGrowth %>% mutate(dose=as.factor(dose)) %>% group_by(dose) %>% 
  t_test(len ~ supp) %>%
  adjust_pvalue() %>% add_significance("p.adj") %>% add_xy_position(x="dose"

stat.test3 <- ToothGrowth %>% 
  t_test(len ~ dose,p.adjust.method = "bonferroni") %>%
  adjust_pvalue() %>% add_significance("p.adj") %>% add_xy_position() 

res.aov <- ToothGrowth %>% mutate(dose=as.factor(dose)) %>% anova_test(len ~ dose)

ToothGrowth %>% mutate(dose=as.factor(dose)) %>% 
  ggplot(aes(dose,len)) +
  stat_boxplot(geom = "errorbar",width=0.2,
               aes(fill = supp),position = position_dodge(1)) +
  geom_boxplot(aes(fill= supp),position = position_dodge(1)) +
  stat_pvalue_manual(stat.test2,label = "p.adj.signif",label.size=6,hide.ns = T) +
  stat_pvalue_manual(stat.test3,label = "p.adj.signif",label.size=6,hide.ns = T)+
  labs(subtitle = get_test_label(res.aov, detailed = TRUE))+
  scale_y_continuous(expand=c(0,0),limits = c(0,42))+
  theme_classic()

ggsignif官方文档

https://github.com/const-ae/ggsignif?tab=readme-ov-file

dat <- data.frame(
  Group = c("S1""S1""S2""S2"),
  Sub = c("A""B""A""B"),
  Value = c(3578)
)

ggplot(dat, aes(Group, Value)) +
  geom_bar(aes(fill = Sub), stat = "identity", position = "dodge", width = .5) +
  geom_signif(
    y_position = c(5.38.3), xmin = c(0.81.8), xmax = c(1.22.2),
    annotation = c("**""NS"), tip_length = 0
  ) +
  geom_signif(
    comparisons = list(c("S1""S2")),
    y_position = 9.3, tip_length = 0, vjust = 0.2
  ) +
  scale_fill_manual(values = c("grey80""grey20"))

关注下方公众号下回更新不迷路

购买介绍

本节介绍到此结束,有需要学习R数据可视化的朋友欢迎到淘宝店铺:R语言数据分析指南,购买小编的R语言可视化文档(2024版),购买将赠送2023年的绘图文档内容。目前此文档(2023+2024)已经更新上传200案例文档,每个案例都附有相应的数据和代码,并配有对应的注释文档,方便大家学习和参考。

2024更新的绘图内容将同时包含数据+代码+注释文档+文档清单,2023无目录仅有数据文件夹,小编只分享案例文档,不额外回答问题,无答疑服务,零基础不推荐买。

案例特点

所选案例图均属于个性化分析图表完全适用于论文发表,内容异常丰富两年累计发布案例图200+,2024年6月起提供html版注释文档更加直观易学。文档累计上千人次购买拥有良好的社群交流体验。R代码结构清晰易懂,为防止中文乱码提供单独的注释文档

R代码结构清晰易懂,为防止中文乱码2024年6月起提供单独html注释文档

群友精彩评论

淘宝店铺

2024年已更新案例图展示

2023年案例图展示


【声明】内容源于网络
0
0
R语言数据分析指南
R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
内容 1180
粉丝 0
R语言数据分析指南 R语言重症爱好者,喜欢绘制各种精美的图表,喜欢的小伙伴可以关注我,跟我一起学习
总阅读222
粉丝0
内容1.2k