Wilcoxon符号秩检验

Wilcoxon符号秩检验

   它适用于T检验中的成对比较,但并不要求成对数据之差服从正态分布,只要求对称分布即可。检验成对观测数据之差是否来自均值为0的总体(产生数据的总体是否具有相同的均值)。

在Matlab中,秩和检验由函数ranksum实现。

命令为: [p,h]=ranksum(x,y,alpha)

   其中x,y可为不等长向量,alpha为给定的显著水平,它必须为0和1之间的数量。p返回 产生两独立样本的总体是否相同的显著性概率,h返回假设检验的结果。如果x和y的总 体差别不显著,则h为零;如果x和y的总体差别显著,则h为1。如果p接近于零,则可对 原假设质疑。

clear;
clc;
path1 = 'C:\Users\Administrator\Desktop\重新整理血管网络\真实数据.xls';
path2 = 'C:\Users\Administrator\Desktop\重新整理血管网络\真实数据1.xls';
path3 = 'C:\Users\Administrator\Desktop\重新整理血管网络\生成数据9.xls';
path4 = 'C:\Users\Administrator\Desktop\重新整理血管网络\生成数据1.xls';
path5 = 'C:\Users\Administrator\Desktop\重新整理血管网络\wgan-gp1.xls';
path6 = 'C:\Users\Administrator\Desktop\重新整理血管网络\wgan-gp200.xls';


mypath1  = path1;%对比两个结果
mypath2  = path2;
A = 'A2:A500';
B = 'B2:B500';
C = 'C2:C500';
D = 'D2:D500';
E = 'E2:E500';
F = 'F2:F500';
G = 'G2:G500';
H = 'H2:H500';
I = 'I2:I500';
J = 'J2:J500';
K = 'K2:K500';
L = 'L2:L500';
M = 'M2:M500';
N = 'N2:N500';
O = 'O2:O500';
disp('主分支长度')
[num1] = xlsread(mypath1,A);
[num2] =  xlsread(mypath2,A);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('左分支长度')
[num1] = xlsread(mypath1,B);
[num2] =  xlsread(mypath2,B);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('右分支长度')
[num1] = xlsread(mypath1,C);
[num2] =  xlsread(mypath2,C);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主左长度比')
[num1] = xlsread(mypath1,D);
[num2] =  xlsread(mypath2,D);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主右长度比')
[num1] = xlsread(mypath1,E);
[num2] =  xlsread(mypath2,E);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主分叉卷曲度')
[num1] = xlsread(mypath1,F);
[num2] =  xlsread(mypath2,F);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('左分叉卷曲度')
[num1] = xlsread(mypath1,G);
[num2] =  xlsread(mypath2,G);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('右分叉卷曲度')
[num1] = xlsread(mypath1,H);
[num2] =  xlsread(mypath2,H);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主左角度')
[num1] = xlsread(mypath1,I);
[num2] =  xlsread(mypath2,I);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主右角度')
[num1] = xlsread(mypath1,J);
[num2] =  xlsread(mypath2,J);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('左右角度')
[num1] = xlsread(mypath1,K);
[num2] =  xlsread(mypath2,K);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('主端点长度')
[num1] = xlsread(mypath1,L);
[num2] =  xlsread(mypath2,L);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p);

disp('左端点长度')
[num1] = xlsread(mypath1,M);
[num2] =  xlsread(mypath2,M);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p)

disp('右端点长度')
[num1] = xlsread(mypath1,N);
[num2] =  xlsread(mypath2,N);
mean1 = mean(num1); %平均值
mean2 = mean(num2); 
std1 = std(num1); %标准差
std2 = std(num2); 
var1 = var(num1); %方差
var2 = var(num2);
[p,h] = ranksum(num1,num2);
fprintf('原始数据1--平均值:%f,标准差:%f,方差:%f\n',mean1,std1,var1);
fprintf('原始数据2--平均值:%f,标准差:%f,方差:%f\n',mean2,std2,var2);
fprintf('h值:%d,p值:%f\n\n',h,p)

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Wilcoxon符号检验是一种非参数检验方法,用于比较两组相关或配对的样本数据。在MATLAB中,可以使用ranksum函数进行Wilcoxon符号检验。具体使用方法如下: 1. 准备数据:将两组相关或配对的样本数据存储在两个向量中。 2. 调用ranksum函数:使用ranksum函数进行Wilcoxon符号检验,语法如下: [p,h,stats] = ranksum(x,y) 其中,x和y分别为两组样本数据的向量,p为检验的p值,h为检验的假设是否被拒绝的结果(1表示拒绝,表示接受),stats为检验的统计量。 3. 解释结果:根据p值和h值来判断检验的结果,如果p值小于显著性水平(通常为.05),则拒绝原假设,即认为两组样本数据存在显著差异。 以上就是Wilcoxon符号检验在MATLAB中的使用方法。 ### 回答2: Wilcoxon符号检验是用来比较两组相关或无关样本的非参数检验方法,它的本质是通过比较两组样本的秩和来判断它们是否具有统计学显著性差异。相比于t检验Wilcoxon符号检验不需要样本来自正态分布,也不需要假定方差相等,因此具有更广泛的适用范围。 在Matlab中,Wilcoxon符号检验的函数为"signrank",它的语法如下: [p,h,stats] = signrank(x,y) 其中,x和y分别代表两组样本数据,p表示检验的双侧p值,h表示拒绝或接受零假设的判定结果(1表示拒绝,0表示接受),stats包含了检验的统计量。 需要注意的是,当样本数较小(小于等于5)的时候,使用Wilcoxon符号检验可能会出现功效不足的问题,此时可以使用精确的Fisher's Exact Test来进行检验。在Matlab中,精确的Fisher's Exact Test的函数为"fishertest"。 另外,如果需要进行多组样本之间的比较,可以使用Kruskal-Wallis检验,它是Wilcoxon符号检验的推广。Matlab中实现Kruskal-Wallis检验的函数为"kruskalwallis"。 ### 回答3: Wilcoxon符号检验是一种非参数检验方法,通常用于比较两个相关或无关样本的中位数是否相等。对于小样本或数据不满足正态分布的情况,Wilcoxon符号检验的优势就更加明显。 MATLAB中实现Wilcoxon符号检验的函数为“signrank”。该函数的基本使用方法是:signrank(x,y)。其中x是一个n维行向量,y是一个m维行向量。若x和y不同,则Wilcoxon符号检验为两个独立的样本;若x和y相同,则Wilcoxon符号检验为两个相关的样本。 对于独立的样本,Wilcoxon符号检验的假设为: H0:x的中位数等于y的中位数 Ha:x的中位数不等于y的中位数 对于相关的样本,Wilcoxon符号检验的假设为: H0:x-y的中位数等于0 Ha:x-y的中位数不等于0 在MATLAB中进行Wilcoxon符号检验时,除了输入x和y外,还可以指定显著性水平alpha(默认值为0.05)和检验是否为单侧或双侧(单侧检验为lower或upper,双侧检验为both,默认为both)。 需要注意的是,Wilcoxon符号检验的结果不仅包括检验的P值,还包括中位数差异的置信区间和Wilcoxon符号检验统计量的值。 总之,Wilcoxon符号检验是一种简单且有效的非参数检验方法,MATLAB中的signrank函数可以方便地实现该方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值