const-ae/ggsignif

Correcting for multiple testing when using geom_signif

IsabelPotani opened this issue · 5 comments

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?

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

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

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

@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))

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