const-ae / ggsignif

Easily add significance brackets to your ggplots
https://const-ae.github.io/ggsignif/
GNU General Public License v3.0
593 stars 43 forks source link

Correcting for multiple testing when using geom_signif #123

Closed IsabelPotani closed 2 years ago

IsabelPotani commented 2 years ago

I would like to use the Bonferroni correction when using geom_signif but cannot figure out how to incorporate this. I suspect it can be achieved using test.args or the test argument. Do you have any guidance?

const-ae commented 2 years ago

Hi Isabel,

unfortunately, the Bonferroni (or other multiple testing corrections) are not supported by ggsignif. You will have to calculate the tests manually, calculate the correction, and then provide the annotation to ggsignif. Please see the 'Advanced Example' on how to do this.

Best, Constantin

IndrajeetPatil commented 2 years ago

@IsabelPotani You can have a look at ggstatsplot, which uses ggsignif to show pairwise comparisons with statistics adjusted for multiple comparisons.

IsabelPotani commented 2 years ago

Thanks, both. Your solutions have helped to resolve my problem

IsabelPotani commented 1 year ago

@IsabelPotani You can have a look at ggstatsplot, which uses ggsignif to show pairwise comparisons with statistics adjusted for multiple comparisons.

Hi. Thanks for your help last time. I am trying to change the annotation for pairwise comparisons to asterisk and not the actual p values using the code below, but it's not working. Can you help me pick out what I am doing wrong?

ggbetweenstats( data = survival1b,type="p",results.subtitle="FALSE",k=2, x=site, y = hos_stay3, outlier.tagging = FALSE,pairwise.display="significant", plot.type = "box",pairwise.annotation = "asterisk", p.adjust.method="bonferroni", xlab="Site",ylab="Number of days hospitalised" ,title = "Duration of hospital stay", )+ggplot2::scale_y_continuous( breaks = seq(from = 0, to = 43, by = 2))

IndrajeetPatil commented 1 year ago

Here is an example:

library(ggplot2)
library(ggsignif)
library(dplyr, warn.conflicts = FALSE)
library(ggstatsplot)

# creating a basic plot
p <- ggplot(iris, aes(Species, Sepal.Width)) +
  geom_boxplot()

# using `pairwise_comparisons()` package to create a data frame with results
df <- pairwise_comparisons(iris, Species, Sepal.Width) %>%
    dplyr::mutate(groups = purrr::pmap(.l = list(group1, group2), .f = c)) %>%
    dplyr::arrange(group1)

# add new significance column based on standard APA guidelines
signif_column <- function(data, p) {
  dplyr::mutate(
    data,
    significance = dplyr::case_when(
      {{ p }} >= 0.050 ~ "ns",
      {{ p }} < 0.050 & {{ p }} >= 0.010 ~ "*",
      {{ p }} < 0.010 & {{ p }} >= 0.001 ~ "**",
      {{ p }} < 0.001 ~ "***"
    )
  )
}

df <- signif_column(df, p.value)

# using `geom_signif` to display results
p +
  ggsignif::geom_signif(
    comparisons      = df$groups,
    map_signif_level = TRUE,
    tip_length       = 0.01,
    y_position       = c(4.75, 5.00, 5.25),
    annotations      = df$significance,
    test             = NULL,
    na.rm            = TRUE
  )

Created on 2022-12-14 with reprex v2.0.2