7 min read

Conversions between partial eta squared and Cohen's d

(This post was last updated on 2021-04-12.)

This post mainly discusses how to convert between partial eta squared and Cohen’s d for within-subject designs (with two conditions). (For the conversion for between-subject designs, please refer to this website or this website.)

Here I make a simple simulated dataset for the within-subject designs:

# load library
library(tidyverse)
library(afex)
library(effectsize)

# simulate data
set.seed(42)
nSubj <- 20

# parts of the covariance matrix
C <- matrix(0.5, nrow = 2, ncol = 2)
diag(C) <- 1

# simulate data for the two conditions
simu_dv <- mvtnorm::rmvnorm(nSubj, mean = c(14, 10), sigma = C*6^2)
colnames(simu_dv) <- c("cond1", "cond2")

simu_long <- simu_dv %>% 
  as_tibble(.name_repair="check_unique") %>% 
  mutate(Subject = 1:nSubj) %>% 
  pivot_longer(c(cond1, cond2), names_to = "IV", values_to = "DV")

simu_long
## # A tibble: 40 x 3
##    Subject IV       DV
##      <int> <chr> <dbl>
##  1       1 cond1 21.1 
##  2       1 cond2  8.86
##  3       2 cond1 17.1 
##  4       2 cond2 14.2 
##  5       3 cond1 16.2 
##  6       3 cond2 10.0 
##  7       4 cond1 22.6 
##  8       4 cond2 11.8 
##  9       5 cond1 25.6 
## 10       5 cond2 12.8 
## # … with 30 more rows

in which, twenty participants completed tasks in two conditions. There are forty data points in total.

1 Paired sample t-test vs. one sample t-test and Cohen’s d

To analyze data with within-subject design, we usually use paired sample t-test. Alternatively, we can choose one sample t-test after we calculate the differences between the pairs and further test if those differences are significantly different from zero.

1.1 Paired sample t-test

t.test(DV ~ IV, 
       data = simu_long,
       paired = TRUE)
## 
##  Paired t-test
## 
## data:  DV by IV
## t = 3.4454, df = 19, p-value = 0.002711
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  2.225084 9.112426
## sample estimates:
## mean of the differences 
##                5.668755
cohens_d(DV ~ IV, 
       data = simu_long,
       paired = TRUE)
## Cohen's d |       95% CI
## ------------------------
## 0.77      | [0.27, 1.30]

1.2 One sample t-test

simu_one <- simu_long %>% 
  pivot_wider(id_cols = Subject, values_from = DV, names_from = IV) %>% 
  mutate(DV = cond1 - cond2) %>% 
  select(Subject, DV)
# one sample t-test
t.test(simu_one$DV)
## 
##  One Sample t-test
## 
## data:  simu_one$DV
## t = 3.4454, df = 19, p-value = 0.002711
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  2.225084 9.112426
## sample estimates:
## mean of x 
##  5.668755
(cohen_simu <- cohens_d(simu_one$DV))
## Cohen's d |       95% CI
## ------------------------
## 0.77      | [0.27, 1.30]

Please note that the results of paired sample t-test and those of one sample t-test are exactly the same, including the effect sizes (i.e., Cohen’s d).

1.3 Formula for Cohen’s d

The Cohen’s d for one sample t-test is relatively simple:

\[\begin{align} \tag1 \text{Cohen's}\; d = \frac{mean(data)}{sd(data)} \end{align}\]

where mean denotes the mean and sd denotes the standard deviation.

Following this equation, Cohen’s d for the one sample t-test is mean(simu_one$DV)/sd(simu_one$DV), i.e., 0.77, which is the same as the effect size calculated by cohens_d().

1.4 Formula for t-value

The equation for t-value (in one sample t-test) is \[\begin{align} \tag2 t = \frac{mean(data)}{se(data)} = \frac{mean(data)}{\frac{sd(data)}{\sqrt{N}}} \end{align}\]

where mean denotes the mean, se denotes standard error, sd denotes the standard deviation, and N denotes the number of subjects.

Following this equation, t-value in that one sample t-test is mean(simu_one$DV)/(sd(simu_one$DV)/sqrt(nSubj)), i.e., 3.445, which is the same as that calculated by t.test.

1.5 Relationships between Cohen’s d and t-value

With equation (1) and (2), we can obtain the relationship between Cohen's d and t: \[\begin{align} \tag3 t &= \frac{mean(data)}{sd(data)} \times \sqrt{N} \\ &= \text{Cohen's}\;d \times \sqrt{N} \end{align}\]

2 Repeated-mesuare ANOVA and partial eta squared

aov_simu <- aov_4(DV ~ IV + (IV | Subject),
                  data = simu_long)
aov_simu
## Anova Table (Type 3 tests)
## 
## Response: DV
##   Effect    df   MSE        F  ges p.value
## 1     IV 1, 19 27.07 11.87 ** .136    .003
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '+' 0.1 ' ' 1
(eta_simu <- eta_squared(aov_simu, ci=.95))
## Parameter | Eta2 (partial) |       95% CI
## -----------------------------------------
## IV        |           0.38 | [0.07, 0.63]

2.1 Formula for partial eta squared (based on F-value)

According to these resources (website 1, website 2 and others), partial eta squared can be computed from F-value:

\[\begin{align} \tag4 \text{partial}\ \eta^2 = \frac{F \times df_{\text{effect}}}{F \times df_{\text{effect}} + df_{\text{error}}} \end{align}\]

Since there are only two conditions for paired samples, \[\begin{align} \tag5 df_{\text{effect}} = 1\\ df_{\text{error}} = N-1 \end{align}\]

Thus, \[\begin{align} \tag6 \text{partial}\ \eta^2 = \frac{F}{F + N-1} \end{align}\]

where F is the F-value and N is the number of subjects.

Following equation 6, partial eta squared for the effect is as_tibble(aov_simu$anova_table)$F/(as_tibble(aov_simu$anova_table)$F + as_tibble(aov_simu$anova_table)[1,2]), i.e., 0.384532, which is the same as the effect size calculated by eta_squared.

3 Conversion between Cohen’s d and partial eta squared

In the statistics analysis for the same dataset, \[\tag7 F = t^2 \] where F denotes the F-value in ANOVA and t denotes the t-value in t-test. (For derivation see here or here)

3.1 From Cohen’s d to partial eta squared

Put equations 3, 6 and 7 together: \[\begin{align} t &= \text{Cohen's}\;d \times \sqrt{N}\\ \\ \text{partial}\:\eta^2 & = \frac{F}{F + N-1} \\ & = \frac{t^2}{t^2 + N - 1} \\ \tag8 & = \frac{{\text{Cohen's}\;d}^2 \times N}{{\text{Cohen's}\;d}^2 \times N + N -1} \end{align}\]

Therefore, the equation for conversion from Cohen’s d to partial eta squared is: \[\begin{align} \tag9 \text{partial}\;\eta^2 = \frac{\text{Cohen's}\;d^2 \times N}{{\text{Cohen's}\;d}^2 \times N + N -1} \end{align}\]

With formula 9, we can calculate partial eta squared from Cohen’s d via cohen_simu$Cohens_d^2 * nSubj /(cohen_simu$Cohens_d^2 * nSubj + nSubj - 1), i.e. 0.38, which is the same as the effect size calculated by eta_squared.

3.2 From partial eta squared to Cohen’s d

The equation for conversion from partial eta squared to Cohen’s d can be obtained from equation 9: \[\begin{align} \text{partial}\:\eta^2 & = \frac{{\text{Cohen's}\;d}^2 \times N}{{\text{Cohen's}\;d}^2 \times N + N -1}\\ ({\text{Cohen's}\;d}^2 \times N + N -1) \times \text{partial}\:\eta^2 & = {\text{Cohen's}\;d}^2 \times N \\ \\ {\text{Cohen's}\;d}^2 \times N \times (\text{partial}\:\eta^2 - 1) & = - (N-1) \times \text{partial}\:\eta^2 \\ \\ {\text{Cohen's}\;d}^2 & = \frac{- (N-1) \times \text{partial}\:\eta^2}{N \times (\text{partial}\:\eta^2 - 1)} \\ & = \frac{(N-1)}{N} \times \frac{\text{partial}\:\eta^2}{(1 - \text{partial}\:\eta^2)} \\ \\ \text{Cohen's}\;d &= \sqrt(\frac{(N-1)}{N} \times \frac{\text{partial}\:\eta^2}{(1 - \text{partial}\:\eta^2)}) \tag{10} \end{align}\]

With formula 10, we can calculate the Cohen’s d from partial eta squared via sqrt((nSubj-1)/nSubj*eta_simu$Eta2_partial/(1-eta_simu$Eta2_partial)), i.e., 0.77, which is the same as the effect size calculated by cohens_d.

4 Some words at the end

I cannot guarantee these conversions are applicable in all situations, but at least they work well for the cases similar to the simulated data. To make it simple, I guess as long as the data can be analyzed with one sample t-test (e.g., paired sample t-test, or even the interaction between two independent variables with within-subject design), these conversions should work.

The initial motivation for me to look into the conversion between Cohen’s d and partial eta squared is my trying to run equivalence tests. I just start to learn running equivalence tests and notice that an interval of raw values or an interval of Cohen’s d needs to be set for using TOSTER package in R. However, what I got from a meta-analysis paper is an interval of partial eta squared.

Hope these conversions make sense and I really appreciate if you could let me know if there is any error in this post.

5 Update

Now I added the two functions of converting between partial eta squared and Cohen’s d in gist. The example usage is as following:

# load the functions
devtools::source_gist("https://gist.github.com/HaiyangJin/3334e4d6588cbfe36b69c1bf2540c2ea")
cohen_simu$Cohens_d
## [1] 0.770416
# convert partial eta squared to Cohen's d
pes2d(eta_simu$Eta2_partial, nSubj) # 0.38 
## [1] 0.770416
eta_simu$Eta2_partial
## [1] 0.384532
# convert Cohen's d to partial eta square
d2pes(cohen_simu$Cohens_d, nSubj) # 0.77
## [1] 0.384532