置换检验代码, matlab codes for permutation tests

Matlab 排列组合代码

COMBNTNS  All possible combinations of a set of values

   c = COMBNTNS(choicevec,choose) returns all combinations of the values of the input choice vector.

PERMS  All possible permutations.
   PERMS(1:N), or PERMS(V) where V is a vector of length N, creates a  matrix with N! rows and N columns containing all possible  permutations of the N elements.

%=================================
% Author:
%         http://emanlee.cnblogs.com
% Date: 2011/6/28
% Function: 置换检验, matlab codes for permutation tests
%=================================
%
%                Control           Drug
% Expression     9 12 14 17        18 21 23 26
% Average        13                22
%
% The difference in averages is 22-13=9.
%=================================

a=[9  12  14  17   18  21  23  26]
Mcontrol = mean(a(1:4));
Mdrug = mean(a(5:8));
SumA = sum(a);
TS = Mdrug-Mcontrol;   %计算检验统计量
Rearranges = combntns(a,4);   %组合,重排,本例有70行
MeanControls = sum(Rearranges,2)/4;   %重排后Control组的样本均值,本例有70行
MeanDrugs = (SumA-sum(Rearranges,2))/4;   %重排后Drug组的样本均值,本例有70行
PermutationValues = MeanDrugs - MeanControls;   %置换值,本例有70行
[m,n]=size(PermutationValues);
hist(PermutationValues )    % 产生直方图

GreaterNumbers=0;    %计算超过检验统计量的置换值的个数
for i=1:m
    if PermutationValues(i,1)>=TS
        GreaterNumbers=GreaterNumbers+1;
    end
end;

PValue=GreaterNumbers/m; %计算P值

%=================================

 

 

 

 

%=================================

%=================================

原文地址:https://www.cnblogs.com/emanlee/p/2092506.html