# 1. Fitted model with `observed`. In the pygmalion expectancy
# experiment, treatment is manipulated while grade is a measured
# classification, so grade's variance stays in the denominator.
pyg <- pygmalion
pyg$grade <- factor(pyg$grade)
fit <- aov(iq_8 ~ treatment * grade, data = pyg)
eta_squared_generalized(fit, observed = "grade")
# 2. Raw sums of squares.
eta_squared_generalized(SS_effect = 100, SS_observed = c(40, 30),
SS_error = 200)
# 3. Raw F-values and degrees of freedom.
eta_squared_generalized(F_effect = 6.0, df_effect = 2,
F_observed = c(2.5, 1.8),
df_observed = c(1, 2), df_error = 50)
# 4. Within-subjects (repeated measures) ANOVA. The denominator
# automatically includes the subject-level variance plus the
# within-subjects error, following Bakeman (2005).
set.seed(113)
n <- 20
rm_data <- data.frame(
subject = factor(rep(seq_len(n), each = 3)),
time = factor(rep(c("Pre", "Mid", "Post"), n),
levels = c("Pre", "Mid", "Post")),
y = rnorm(n, sd = 1.5)[rep(seq_len(n), each = 3)] +
0.7 * rep(1:3, n) + rnorm(n * 3, sd = 1.2)
)
fit_rm <- aov(y ~ time + Error(subject/time), data = rm_data)
eta_squared_generalized(fit_rm)
# 5. Mixed design with a measured between-subjects factor. Treat
# 'group' as observed; its SS stays in the denominator for
# 'time' and the 'group:time' interaction.
set.seed(113)
n_per_group <- 10
n <- n_per_group * 2
mixed_data <- data.frame(
subject = factor(rep(seq_len(n), each = 3)),
group = factor(rep(c("Treatment", "Control"), each = 3 * n_per_group)),
time = factor(rep(c("Pre", "Mid", "Post"), n),
levels = c("Pre", "Mid", "Post")),
y = rnorm(n, sd = 1)[rep(seq_len(n), each = 3)] +
0.5 * rep(1:3, n) + rnorm(n * 3, sd = 1)
)
fit_mixed <- aov(y ~ group * time + Error(subject/time), data = mixed_data)
eta_squared_generalized(fit_mixed, observed = "group")
Run the code above in your browser using DataLab