zoukankan      html  css  js  c++  java
  • Permutation Tests

    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

  • 相关阅读:
    【应试】数据通信与网络
    【应试】操作系统OS
    【笔记】 卷积
    【HDU 5920】 Ugly Problem
    【笔记】位运算
    【洛谷P1378】油滴扩展
    【洛谷 P1120】 小木棍[数据加强版]
    [codeforces]Round #538 (Div. 2) F. Please, another Queries on Array?
    [BZOJ]2563: 阿狸和桃子的游戏
    [BZOJ]4668: 冷战
  • 原文地址:https://www.cnblogs.com/emanlee/p/2084403.html
Copyright © 2011-2022 走看看