Permutation Tests
  TnD0WQEygW8e 2023年11月08日 50 0

 

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.

  1. Analyze the problem
  2. Choose a test statistic
  3. Resample and recompute the test statistic
  4. 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



【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
TnD0WQEygW8e