Calculating sample size for a paired t-test

Suppose you are planning to conduct a repeated-measures study, where outcomes are measured from the same subject at more than one point in time and the average within-subject effect is calculated using a paired t-test or linear regression. How might you calculate how many subjects need to be tested in order to find an effect?

Similar to calculating sample size for a 2 independent sample t-test, we can use Python’s statsmodels module to calculate sample size for a paired t-test. To find a given paired standardised mean difference of 1, we can calculate the following (output shown using >>> prompt, and documentation available here):

from statsmodels.stats.power import tt_solve_power

mean_diff, sd_diff = 0.5, 0.5
std_effect_size = mean_diff / sd_diff

n = tt_solve_power(effect_size=std_effect_size, alpha=0.05, power=0.8, alternative='two-sided')
print('Number in the group: {:.5f}'.format(n))

>>> Number in the group: 9.93785

Note, we are using the same standardised effect size (0.5/0.5 = 1), standard deviation of the paired difference (0.5), alpha (0.05) and power (0.8) that we used previously for a t-test on 2 independent samples, but the sample size is much smaller for a paired t-test (N=9.9) compared to a t-test on 2 independent samples (N=16.7). This is because for a paired t-test, each subject’s outcome is correlated with their previous outcome (ie. each subject acts as their own control) so the test becomes more powerful to detect an effect.

But remember, a paired or independent standardised effect size of 1 is a big effect, even for most fields of research. Standardised effect sizes vary substantially depending on the field of research, so it is important to know how big an effect needs to be detected for a given study, since much published research in neuroscience and clinical trials is already underpowered.

For a paired t-test, how does sample size change as effect size decreases?

for mean_diff in [0.5, 0.4, 0.3]:
    n = tt_solve_power(effect_size=mean_diff/sd_diff, alpha=0.05, power=0.8, alternative='two-sided')
    print('Number in the group when paired standardised mean difference is {:<4.2f}: {:.2f}'.format(mean_diff, n))

>>> Number in the group when paired standardised mean difference is 0.50: 9.94
>>> Number in the group when paired standardised mean difference is 0.40: 14.30
>>> Number in the group when paired standardised mean difference is 0.30: 23.79

For a given standard deviation of the paired difference, sample size increases as the standardised effect size decreases.

Summary

We used Python’s statsmodels module to calculate sample size for paired t-test. Sample size is sensitive to the size and variability of the paired difference, and tolerance to Type I and II errors.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s