置换检验代码, 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值
%=================================
%=================================
%=================================