Learn R Programming

effectsize (version 0.4.0)

eta_squared: Effect size for ANOVA

Description

Functions to compute effect size measures for ANOVAs, such as Eta, Omega and Epsilon squared, and Cohen's f (or their partialled versions) for aov, aovlist and anova models. These indices represent an estimate of how much variance in the response variables is accounted for by the explanatory variable(s).

Effect sizes are computed using the sums of squares obtained from anova(model) which might not always be appropriate (Yeah... ANOVAs are hard...). It is suggested that ANOVA models be fit with afex package. See details.

Usage

eta_squared(model, partial = TRUE, generalized = FALSE, ci = 0.9, ...)

omega_squared(model, partial = TRUE, ci = 0.9, ...)

epsilon_squared(model, partial = TRUE, ci = 0.9, ...)

cohens_f(model, partial = TRUE, ci = 0.9, squared = FALSE, model2 = NULL, ...)

cohens_f_squared( model, partial = TRUE, ci = 0.9, squared = TRUE, model2 = NULL, ... )

Arguments

model

A model, ANOVA object, or the result of parameters::model_parameters.

partial

If TRUE, return partial indices.

generalized

If TRUE, returns generalized Eta Squared, assuming all variables are manipulated. Can also be a character vector of observed (non-manipulated) variables, in which case generalized Eta Squared is calculated taking these observed variables into account. For afex_aov model, generalized = TRUE, the observed variables are extracted automatically from the fitted model, if they were provided then.

ci

Confidence Interval (CI) level

...

Arguments passed to or from other methods (ignored).

squared

Return Cohen's f or Cohen's f-squared?

model2

Second model. If specified, returns Cohen's f for R-squared-change between the two models.

Value

A data frame with the effect size(s) and confidence interval(s).

A data frame containing the effect size values and their confidence intervals.

Details

For aov and aovlist models, the effect sizes are computed directly with Sums-of-Squares (for mlm / maov models, effect sizes are computed for each response separately). For all other model, the model is passed to anova(), and effect sizes are approximated via test statistic conversion (see F_to_eta2() for more details.)

Type of Sums of Squares

The sums of squares (or F statistics) used for the computation of the effect sizes is based on those returned by anova(model) (whatever those may be - for aov and aovlist these are type-1 sums of squares; for merMod these are type-3 sums of squares). Make sure these are the sums of squares you are interested in; You might want to pass the result of car::Anova(mode, type = 3), or use the afex package to fit ANOVA models.

It is generally recommended to fit models with contr.sum factor weights and centered covariates, for sensible results. See examples and the afex package.

Confidence Intervals

Confidence intervals are estimated using the Noncentrality parameter method; These methods searches for a the best ncp (non-central parameters) for of the noncentral F distribution for the desired tail-probabilities, and then convert these ncps to the corresponding effect sizes.

Special care should be taken when interpreting CIs with a lower bound equal to (or small then) 0, and even more care should be taken when the upper bound is equal to (or small then) 0 (Steiger, 2004; Morey et al., 2016).

Un-Biased Estimate of Eta

Both Omega and Epsilon are unbiased estimators of the population's Eta, which is especially important is small samples. But which to choose?

Though Omega is the more popular choice (Albers \& Lakens, 2018), Epsilon is analogous to adjusted R2 (Allen, 2017, p. 382), and has been found to be less biased (Carroll & Nordholm, 1975).

Cohen's f

Cohen's f can take on values between zero, when the population means are all equal, and an indefinitely large number as standard deviation of means increases relative to the average standard deviation within each group.

When comparing two models in a sequential regression analysis, Cohen's f for R-square change is the ratio between ratio between the increase in R-square and the \

Cohen has suggested that the values of 0.10, 0.25, and 0.40 represent small, medium, and large effect sizes, respectively.

References

  • Albers, C., \& Lakens, D. (2018). When power analyses based on pilot data are biased: Inaccurate effect size estimators and follow-up bias. Journal of experimental social psychology, 74, 187-195.

  • Allen, R. (2017). Statistics and Experimental Design for Psychologists: A Model Comparison Approach. World Scientific Publishing Company.

  • Carroll, R. M., & Nordholm, L. A. (1975). Sampling Characteristics of Kelley's epsilon and Hays' omega. Educational and Psychological Measurement, 35(3), 541-554.

  • Kelley, T. (1935) An unbiased correlation ratio measure. Proceedings of the National Academy of Sciences. 21(9). 554-559.

  • Morey, R. D., Hoekstra, R., Rouder, J. N., Lee, M. D., & Wagenmakers, E. J. (2016). The fallacy of placing confidence in confidence intervals. Psychonomic bulletin & review, 23(1), 103-123.

  • Olejnik, S., & Algina, J. (2003). Generalized eta and omega squared statistics: measures of effect size for some common research designs. Psychological methods, 8(4), 434.

  • Steiger, J. H. (2004). Beyond the F test: Effect size confidence intervals and tests of close fit in the analysis of variance and contrast analysis. Psychological Methods, 9, 164-182.

See Also

F_to_eta2()

Examples

Run this code
# NOT RUN {
library(effectsize)
mtcars$am_f <- factor(mtcars$am)
mtcars$cyl_f <- factor(mtcars$cyl)

model <- aov(mpg ~ am_f * cyl_f, data = mtcars)

eta_squared(model)
eta_squared(model, generalized = "cyl_f")
omega_squared(model)
epsilon_squared(model)
cohens_f(model)
(etas <- eta_squared(model, partial = FALSE))

if(require(see)) plot(etas)

model0 <- aov(mpg ~ am_f + cyl_f, data = mtcars) # no interaction
cohens_f_squared(model0, model2 = model)


# Recommended:
# Type-3 effect sizes + effects coding
if (require(car, quietly = TRUE)) {
  contrasts(mtcars$am_f) <- contr.sum
  contrasts(mtcars$cyl_f) <- contr.sum

  model <- aov(mpg ~ am_f * cyl_f, data = mtcars)
  model_anova <- car::Anova(model, type = 3)

  eta_squared(model_anova)
}

# afex takes care of both type-3 effects and effects coding:
if (require(afex)) {
  data(obk.long, package = "afex")
  model <- aov_car(value ~ treatment * gender + Error(id/(phase)),
                   data = obk.long, observed = "gender")
  eta_squared(model)
  epsilon_squared(model)
  omega_squared(model)
  eta_squared(model, partial = FALSE)
  epsilon_squared(model, partial = FALSE)
  omega_squared(model, partial = FALSE)
  eta_squared(model, generalized = TRUE)
}


if (require("parameters")) {
  model <- lm(mpg ~ wt + cyl, data = mtcars)
  mp <- model_parameters(model)
  eta_squared(mp)
}

if (require(lmerTest, quietly = TRUE)) {
  model <- lmer(mpg ~ am_f * cyl_f + (1|vs), data = mtcars)
  omega_squared(model)
}
# }
# NOT RUN {
# }

Run the code above in your browser using DataLab