stat_friedman_test {ggpubr} | R Documentation |
Add Friedman Test P-values to a GGPlot
Description
Add automatically Friedman test p-values to a ggplot, such as box blots, dot plots and stripcharts.
Usage
stat_friedman_test(
mapping = NULL,
data = NULL,
wid = NULL,
group.by = NULL,
label = "{method}, p = {p.format}",
label.x.npc = "left",
label.y.npc = "top",
label.x = NULL,
label.y = NULL,
step.increase = 0.1,
p.adjust.method = "holm",
significance = list(),
geom = "text",
position = "identity",
na.rm = FALSE,
show.legend = FALSE,
inherit.aes = TRUE,
parse = FALSE,
...
)
Arguments
mapping |
Set of aesthetic mappings created by |
data |
The data to be displayed in this layer. There are three options: If A A |
wid |
(factor) column name containing individuals/subjects identifier.
Should be unique per individual. Required only for repeated measure tests
( |
group.by |
(optional) character vector specifying the grouping variable; it should be used only for grouped plots. Possible values are :
|
label |
the column containing the label (e.g.: label = "p" or label =
"p.adj"), where |
label.x.npc , label.y.npc |
can be
|
label.x , label.y |
|
step.increase |
numeric vector with the increase in fraction of total height for every additional comparison to minimize overlap. |
p.adjust.method |
method for adjusting p values (see
|
significance |
a list of arguments specifying the signifcance cutpoints
and symbols. For example, In other words, we use the following convention for symbols indicating statistical significance:
|
geom |
The geometric object to use to display the data, either as a
|
position |
Position adjustment, either as a string naming the adjustment
(e.g. |
na.rm |
If FALSE (the default), removes missing values with a warning. If TRUE silently removes missing values. |
show.legend |
logical. Should this layer be included in the legends?
|
inherit.aes |
If |
parse |
If TRUE, the labels will be parsed into expressions and displayed
as described in |
... |
other arguments passed to the function |
Computed variables
statistic: the value of the test statistic (Chi-squared).
df: the degrees of freedom of the approximate chi-squared distribution of the test statistic.
p: p-value.
p.adj: Adjusted p-values.
p.signif: P-value significance.
p.adj.signif: Adjusted p-value significance.
p.format: Formated p-value.
p.adj.format: Formated adjusted p-value.
n: number of samples.
Examples
# Data preparation
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Transform `dose` into factor variable
df <- ToothGrowth
df$dose <- as.factor(df$dose)
df$id <- as.factor(c(rep(1:10, 3), rep(11:20, 3)))
# Add a random grouping variable
set.seed(123)
df$group <- sample(factor(rep(c("grp1", "grp2", "grp3"), 20)))
df$len <- ifelse(df$group == "grp2", df$len+2, df$len)
df$len <- ifelse(df$group == "grp3", df$len+7, df$len)
head(df, 3)
# Basic boxplot
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Create a basic boxplot
# Add 5% and 10% space to the plot bottom and the top, respectively
bxp <- ggboxplot(df, x = "dose", y = "len") +
scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))
# Add the p-value to the boxplot
bxp + stat_friedman_test(aes(wid = id))
# Change the label position
# Using coordinates in data units
bxp + stat_friedman_test(aes(wid = id), label.x = "1", label.y = 10, hjust = 0)
# Format the p-value differently
custom_p_format <- function(p) {
rstatix::p_format(p, accuracy = 0.0001, digits = 3, leading.zero = FALSE)
}
bxp + stat_friedman_test(
aes(wid = id),
label = "Friedman test, italic(p) = {custom_p_format(p)}{p.signif}"
)
# Show a detailed label in italic
bxp + stat_friedman_test(aes(wid = id), label = "as_detailed_italic")
# Faceted plots
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
# Create a ggplot facet
df$id <- rep(1:10,6)
bxp <- ggboxplot(df, x = "dose", y = "len", facet.by = "supp") +
scale_y_continuous(expand = expansion(mult = c(0.05, 0.1)))
# Add p-values
bxp + stat_friedman_test(aes(wid = id))
# Grouped plots
#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
df$id <- rep(1:10,6)
bxp <- ggboxplot(df, x = "dose", y = "len", color = "supp", palette = "jco")
# For each legend group, computes tests within x variable groups
bxp + stat_friedman_test(aes(wid = id, group = supp, color = supp), within = "x")
# For each x-position, computes tests within legend variable groups
bxp + stat_friedman_test(
aes(wid = id, group = supp, color = supp),
within = "group", label = "p = {p.format}"
)