oneway_anova: One-way analysis of variance (ANOVA)

View source: R/oneway-anova.R

oneway_anovaR Documentation

One-way analysis of variance (ANOVA)

Description

Parametric, non-parametric, robust, and Bayesian one-way ANOVA.

Usage

oneway_anova(
  data,
  x,
  y,
  subject.id = NULL,
  type = "parametric",
  paired = FALSE,
  digits = 2L,
  conf.level = 0.95,
  effsize.type = "omega",
  var.equal = FALSE,
  bf.prior = 0.707,
  tr = 0.2,
  nboot = 100L,
  ...
)

Arguments

data

A data frame (or a tibble) from which variables specified are to be taken. Other data types (e.g., matrix, table, array, etc.) will not be accepted. Additionally, grouped data frames from {dplyr} should be ungrouped before they are entered as data.

x

The grouping (or independent) variable from data. For repeated measures designs, see the note on ordering in subject.id.

y

The response (or outcome or dependent) variable from data.

subject.id

Relevant in case of a repeated measures or within-subjects design (i.e., paired = TRUE), it specifies the subject or repeated measures identifier. Important: If this argument is NULL (which is the default), observations are paired by their row order within each level of x (i.e., the data is assumed to be sorted in a subject-1, subject-2, ... pattern within every level). If the data is not sorted this way, the paired results will be silently incorrect, so it is safest to always specify subject.id. For paired designs, each subject must have at most one row per level of x (an error is thrown otherwise), and rows with a missing subject.id are dropped because they cannot be paired (see complete_subjects()).

type

A character specifying the type of statistical approach:

  • "parametric"

  • "nonparametric"

  • "robust"

  • "bayes"

You can specify just the initial letter (e.g. "np" or "bf"). Matching is on the initial lowercase letter only, so any other value (including capitalized values such as "Bayes") falls back to "parametric" without a warning.

paired

Logical that decides whether the experimental design is repeated measures/within-subjects or between-subjects. The default is FALSE.

digits

Number of digits for rounding or significant figures. May also be "signif" to return significant figures or "scientific" to return scientific notation. Control the number of digits by adding the value as suffix, e.g. digits = "scientific4" to have scientific notation with 4 decimal places, or digits = "signif5" for 5 significant figures (see also signif()).

conf.level

Scalar between 0 and 1 (default: ⁠95%⁠ confidence/credible intervals, 0.95).

effsize.type

Type of effect size needed for parametric tests. The argument can be "eta" (partial eta-squared) or "omega" (partial omega-squared).

var.equal

a logical variable indicating whether to treat the two variances as being equal. If TRUE then the pooled variance is used to estimate the variance otherwise the Welch (or Satterthwaite) approximation to the degrees of freedom is used.

bf.prior

A number between 0.5 and 2 (default 0.707), the prior width to use in calculating Bayes factors and posterior estimates. In addition to numeric arguments, several named values are also recognized: "medium", "wide", and "ultrawide", corresponding to r scale values of 1/2, sqrt(2)/2, and 1, respectively. In case of an ANOVA, this value corresponds to scale for fixed effects.

tr

Trim level for the mean when carrying out robust tests. In case of an error, try reducing the value of tr, which is by default set to 0.2. Lowering the value might help.

nboot

Number of bootstrap samples for computing confidence interval for the effect size (Default: 100L).

...

Additional arguments (currently ignored).

Value

The returned object is a tibble data frame with the additional class "statsExpressions". The exact set of columns depends on the test and, for functions that accept a type argument, on the chosen analysis (parametric, non-parametric, robust, or Bayesian). Any given call therefore returns some (not all) of the columns below.

Hypothesis testing

  • statistic: the numeric value of a statistic

  • df and/or df.error: degrees of freedom for the test. A t-test uses df.error, a chi-squared test uses df, and a parametric ANOVA uses both (numerator df and denominator df.error)

  • p.value: the p-value associated with the observed statistic (two-sided unless a one-sided alternative is requested, where supported)

  • method: the name of the inferential statistical test

Effect size estimation

  • effectsize: the name of the effect size

  • estimate: estimated value of the effect size

  • conf.level: the coverage level of the confidence/credible interval (e.g. 0.95); the interval itself spans conf.low to conf.high

  • conf.low: lower bound for the effect size estimate

  • conf.high: upper bound for the effect size estimate

  • conf.method: method used to compute the confidence/credible interval

  • conf.distribution: statistical distribution for the effect

Bayesian analysis (only when type = "bayes")

  • bf10: Bayes factor for the alternative hypothesis relative to the null

  • log_e_bf10: natural logarithm of the Bayes factor (present for most, but not all, Bayesian analyses)

  • prior.distribution, prior.scale, prior.location: prior specification used to compute the Bayes factor and posterior estimates

Pairwise comparisons (for pairwise_comparisons() and pairwise_contingency_table())

  • group1, group2: the two levels being compared

  • p.adjust.method: the adjustment method used for multiple comparisons

  • p.value.adj: the adjusted p-value; returned by pairwise_contingency_table(). Note that pairwise_comparisons() instead folds the adjusted value into p.value (and does not return a separate p.value.adj column)

Common columns

  • n.obs: sample size used for the analysis: observations for unpaired tests, complete subjects/pairs for paired two-sample tests and ANOVAs, or studies for meta-analysis

  • expression: a list-column of pre-formatted plotmath expressions; each element is a language object (not a character string) containing the statistical details, ready to be used in {ggplot2} (e.g. in labs() or annotate())

For a per-function, column-by-column breakdown of the output (and an explanation of the internal add_expression_col() engine that builds the expression column), see the Return value schema article. For more examples, see the data frame output vignette.

One-way ANOVA

The table below provides summary about:

  • statistical test carried out for inferential statistics

  • type of effect size estimate and a measure of uncertainty for this estimate

  • functions used internally to compute these details

Between-subjects

Hypothesis testing

Type No. of groups Test Function used
Parametric > 2 Fisher's or Welch's one-way ANOVA stats::oneway.test()
Non-parametric > 2 Kruskal-Wallis one-way ANOVA stats::kruskal.test()
Robust > 2 Heteroscedastic one-way ANOVA for trimmed means WRS2::t1way()
Bayesian > 2 Fisher's ANOVA BayesFactor::anovaBF()

Effect size estimation

Type No. of groups Effect size CI available? Function used
Parametric > 2 partial eta-squared, partial omega-squared Yes effectsize::omega_squared(), effectsize::eta_squared()
Non-parametric > 2 rank epsilon squared Yes effectsize::rank_epsilon_squared()
Robust > 2 Explanatory measure of effect size Yes WRS2::t1way()
Bayesian > 2 Bayesian R-squared Yes performance::r2_bayes()

Within-subjects

Paired data: See complete_subjects() for subject matching, duplicate observations, and removal of incomplete subjects.

Hypothesis testing

Type No. of groups Test Function used
Parametric > 2 One-way repeated measures ANOVA afex::aov_ez()
Non-parametric > 2 Friedman rank sum test stats::friedman.test()
Robust > 2 Heteroscedastic one-way repeated measures ANOVA for trimmed means WRS2::rmanova()
Bayesian > 2 One-way repeated measures ANOVA BayesFactor::anovaBF()

Effect size estimation

Type No. of groups Effect size CI available? Function used
Parametric > 2 partial eta-squared, partial omega-squared Yes effectsize::omega_squared(), effectsize::eta_squared()
Non-parametric > 2 Kendall's coefficient of concordance Yes effectsize::kendalls_w()
Robust > 2 Algina-Keselman-Penfield robust standardized difference average Yes WRS2::wmcpAKP()
Bayesian > 2 Bayesian R-squared Yes performance::r2_bayes()

Citation

Patil, I., (2021). statsExpressions: R Package for Tidy Dataframes and Expressions with Statistical Details. Journal of Open Source Software, 6(61), 3236, https://doi.org/10.21105/joss.03236

Examples


# for reproducibility
set.seed(123)
library(statsExpressions)

# ----------------------- parametric -------------------------------------

# between-subjects
oneway_anova(
  data = mtcars,
  x = cyl,
  y = wt
)

# biased (partial eta-squared) effect size
oneway_anova(
  data = mtcars,
  x = cyl,
  y = wt,
  effsize.type = "eta"
)

# within-subjects design
oneway_anova(
  data = bugs_long,
  x = condition,
  y = desire,
  subject.id = subject,
  paired = TRUE
)

# ----------------------- non-parametric ----------------------------------

# between-subjects
oneway_anova(
  data = mtcars,
  x = cyl,
  y = wt,
  type = "np"
)

# within-subjects design
oneway_anova(
  data = bugs_long,
  x = condition,
  y = desire,
  subject.id = subject,
  paired = TRUE,
  type = "np"
)

# ----------------------- robust -------------------------------------

# between-subjects
oneway_anova(
  data = mtcars,
  x = cyl,
  y = wt,
  type = "r"
)

# within-subjects design
oneway_anova(
  data = bugs_long,
  x = condition,
  y = desire,
  subject.id = subject,
  paired = TRUE,
  type = "r"
)

# ----------------------- Bayesian -------------------------------------

# between-subjects
oneway_anova(
  data = mtcars,
  x = cyl,
  y = wt,
  type = "bayes"
)

# within-subjects design
oneway_anova(
  data = bugs_long,
  x = condition,
  y = desire,
  subject.id = subject,
  paired = TRUE,
  type = "bayes"
)



statsExpressions documentation built on Oct. 17, 2026, 9:06 a.m.