For most hypothesis tests, we start with the assumptions and work forward to derive the sampling distribution of the test statistic under the null hypothesis. For permutation tests we will reverse the procedure, since the sampling distribution involves the permutations which give the procedure its name and are the key theoretical issue in understanding the test.
In mathematics, a permutation is a reordering of the numbers 1, ..., n. For example,
- (1, 2, 3, 4, 5, 6)
(1, 3, 2, 4, 5, 6)
(4, 5, 2, 6, 1, 3)
(3, 2, 1, 6, 4, 5)
are all permutations of the numbers 1 through 6 (note that this includes the standard order in first line). There are n! (n factorial) permutations of n objects. In this case, 6! = 720, so you can see why they aren't all written out here.
The term permutation tests refers to rearrangements of the data. The null hypothesis of the test specifies that the permutations are all equally likely. A concise way to say this is that the distribution of the data under the null hypothesis satisfies exchangeability.
The sampling distribution of the test statistic under the null hypothesis is computed by forming all or many of the permutations, calculating the test statistic for each and considering these values all equally likely.
Consider the following two group example.
Group 1: 55 58 60
Group 2: 12 22 34
Clearly a t-test will not work with this small example, however a permutation test will do the job.
Here are the steps we will follow to use a permutation test to analyze the differences between the two groups.
- Analyze the problem
- Choose a test statistic
- Resample and recompute the test statistic
- Reject or fail to reject the null hypothesis
For the original order the sum for Group 1 is 173. In this example, if the groups were truly equal then ramdomly moving the observations among the groups would make no difference in the sum for Group 1. Some of the sums would be a little larger than the original sum and some would be a bit smaller. For the six observations there are 720 permutations of which there are 20 distinct combinations for which we can compute the sum of Group 1.
Order | Group 1 | Group 2 | Sum 1 | 55 58 60 | 12 22 34 | 173 2 | 55 58 12 | 60 22 34 | 125 3 | 55 58 22 | 12 60 34 | 135 4 | 55 58 34 | 12 22 60 | 148 5 | 55 12 60 | 58 22 34 | 127 6 | 55 22 60 | 12 58 34 | 137 7 | 55 34 60 | 12 22 58 | 149 8 | 12 58 60 | 55 22 34 | 130 9 | 22 58 60 | 12 55 34 | 140 10 | 34 58 60 | 12 22 55 | 152 11 | 12 22 60 | 55 58 34 | 94 12 | 12 58 22 | 55 60 34 | 92 13 | 55 12 22 | 12 55 58 | 89 14 | 12 34 60 | 55 22 58 | 106 15 | 12 58 34 | 55 22 60 | 104 16 | 55 12 34 | 58 22 60 | 101 17 | 22 34 60 | 12 55 58 | 116 18 | 22 58 34 | 12 55 60 | 114 19 | 55 22 34 | 12 58 60 | 111 20 | 12 22 34 | 55 58 60 | 68
Of these 20 different orderings only one has a Group 1 sum that greater than or equal to the Group 1 sum from our original ordering. Therefor the probability that a sum this large or larger would occur by chance alone is 1/20 = 0.05 and can be considered to be statistically significant.
In this case the permutation yielded an exact test because we were able to enumerate all of the possible combinations. We will also demonstrate this using the Stata permute command using the data from above. The permute command randomly places observations into groups so we will use 200 replications to insure that all combinations have a chance to be present.
input y grp 55 1 58 1 60 1 12 0 22 0 34 0 end permute grp r(sum) if grp, reps(200) nodots nodrop nowarn: summarize y Monte Carlo permutation results Number of obs = 6 command: summarize y if grp _pm_1: r(sum) permute var: grp ------------------------------------------------------------------------------ T | T(obs) c n p=c/n SE(p) [95% Conf. Interval] -------------+---------------------------------------------------------------- _pm_1 | 173 10 200 0.0500 0.0154 .0242342 .0900275 ------------------------------------------------------------------------------ Note: Confidence interval is with respect to p=c/n. Note: c = #{|T| >= |T(obs)|}
In larger examples it won't be possible to enumerate every permutaion so we will have to take numerous random orderings. We will demonstrate this using the Stata permute command with the hsb2 dataset with 1,000 replications.
use http://www.philender.com/courses/data/hsb2, clear ttest read, by(female) Two-sample t test with equal variances ------------------------------------------------------------------------------ Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval] ---------+-------------------------------------------------------------------- male | 91 52.82418 1.101403 10.50671 50.63605 55.0123 female | 109 51.73394 .9633659 10.05783 49.82439 53.6435 ---------+-------------------------------------------------------------------- combined | 200 52.23 .7249921 10.25294 50.80035 53.65965 ---------+-------------------------------------------------------------------- diff | 1.090231 1.457507 -1.783997 3.964459 ------------------------------------------------------------------------------ Degrees of freedom: 198 Ho: mean(male) - mean(female) = diff = 0 Ha: diff < 0 Ha: diff ~= 0 Ha: diff > 0 t = 0.7480 t = 0.7480 t = 0.7480 P < t = 0.7723 P > |t| = 0.4553 P > t = 0.2277 /* use ~female because males have the larger mean and therefore larger sum */ permute female sum=r(sum), reps(1000) nodots nodrop nowarn: summarize read if ~female command: summarize read if ~female sum: r(sum) permute var: female Monte Carlo permutation statistics Number of obs = 200 Replications = 1000 ------------------------------------------------------------------------------ T | T(obs) c n p=c/n SE(p) [95% Conf. Interval] -------------+---------------------------------------------------------------- sum | 4807 255 1000 0.2550 0.0138 .2282394 .2832112 ------------------------------------------------------------------------------ Note: confidence interval is with respect to p=c/n Note: c = #{|T| >= |T(obs)|} ttest science, by(female) Two-sample t test with equal variances ------------------------------------------------------------------------------ Group | Obs Mean Std. Err. Std. Dev. [95% Conf. Interval] ---------+-------------------------------------------------------------------- male | 91 53.23077 1.125037 10.73217 50.99569 55.46585 female | 109 50.69725 .8657315 9.038503 48.98122 52.41328 ---------+-------------------------------------------------------------------- combined | 200 51.85 .7000987 9.900891 50.46944 53.23056 ---------+-------------------------------------------------------------------- diff | 2.533522 1.397901 -.223164 5.290207 ------------------------------------------------------------------------------ Degrees of freedom: 198 Ho: mean(male) - mean(female) = diff = 0 Ha: diff < 0 Ha: diff ~= 0 Ha: diff > 0 t = 1.8124 t = 1.8124 t = 1.8124 P < t = 0.9643 P > |t| = 0.0714 P > t = 0.0357 /* use ~female because males have the larger mean and therefore larger sum */ permute female sum=r(sum), reps(1000) nodots nodrop nowarn: summarize science if ~female command: summarize science if ~female sum: r(sum) permute var: female Monte Carlo permutation statistics Number of obs = 200 Replications = 1000 ------------------------------------------------------------------------------ T | T(obs) c n p=c/n SE(p) [95% Conf. Interval] -------------+---------------------------------------------------------------- sum | 4844 43 1000 0.0430 0.0064 .0312912 .0574863 ------------------------------------------------------------------------------ Note: confidence interval is with respect to p=c/n Note: c = #{|T| >= |T(obs)|} tabstat write, by(female) stat(median) Summary for variables: write by categories of: female female | p50 -------+---------- male | 52 female | 57 -------+---------- Total | 54 ------------------ median write, by(female) Median test Greater | than the | female median | male female | Total -----------+----------------------+---------- no | 56 51 | 107 yes | 35 58 | 93 -----------+----------------------+---------- Total | 91 109 | 200 Pearson chi2(1) = 4.3369 Pr = 0.037 Continuity corrected: Pearson chi2(1) = 3.7643 Pr = 0.052 /* use female since females have higher median */ permute female median=r(p50), reps(1000) nodots nodrop nowarn: summarize write if female, detail command: summarize write if female, detail median: r(p50) permute var: female Monte Carlo permutation statistics Number of obs = 200 Replications = 1000 ------------------------------------------------------------------------------ T | T(obs) c n p=c/n SE(p) [95% Conf. Interval] -------------+---------------------------------------------------------------- median | 57 66 1000 0.0660 0.0079 .0514086 .0832061 ------------------------------------------------------------------------------ Note: confidence interval is with respect to p=c/n Note: c = #{|T| >= |T(obs)|}
From: http://www.philender.com/courses/intro/notes/permute.html