Matlab正态分布检验:
进行参数估计和假设检验时,通常总是假定总体服从正态分布,虽然在许多情况下这个假定是合理的,但是当要以此为前提进行重要的参数估计或假设检验,或者人们对它有较大怀疑的时候,就确有必要对这个假设进行检验,进行总体正态性检验的方法有很多种,以下针对MATLAB统计工具箱中提供的程序,简单介绍几种方法。
1)Jarque-Bera检验
利用正态分布的偏度g1和峰度g2,构造一个包含g1,g2的分布统计量(自由度n=2),对于显著性水平,当分布统计量小于分布的分位数时,接受H0:总体服从正态分布;否则拒绝H0,即总体不服从正态分布。这个检验适用于大样本,当样本容量n较小时需慎用。Matlab命令:
h =jbtest(x),[h,p,jbstat,cv] =jbtest(x,alpha)
例子:
[h,p]=jbtest(a,0.05)
h为测试结果,若h=0,则可以认为X是服从正态分布的;若h=1,则可以否定X服从正态分布;
p为接受假设的概率值,P越接近于0,则可以拒绝是正态分布的原假设;
2)Kolmogorov-Smirnov检验
通过样本的经验分布函数与给定分布函数的比较,推断该样本是否来自给定分布函数的总体。容量n的样本的经验分布函数记为Fn(x),可由样本中小于x的数据所占的比例得到,给定分布函数记为G(x),构造的统计量为,即两个分布函数之差的最大值,对于假设H0:总体服从给定的分布G(x),及给定的,根据Dn的极限分布(n??时的分布)确定统计量关于是否接受H0的数量界限。
因为这个检验需要给定G(x),所以当用于正态性检验时只能做标准正态检验,即H0:总体服从标准正态分布。Matlab命令:
h =kstest(x)
例子:
A=A(:);
alpha=0.05;
[mu,sigma]=normfit(A);
p1=normcdf(A,mu,sigma);
[H1,s1]=kstest(A,[A,p1],alpha);
n=length(A);
if H1==0
disp('该数据服从正态分布。')
end
3)Lilliefors检验
它将Kolmogorov-Smirnov检验改进用于一般的正态性检验,即H0:总体服从正态分布,其中由样本均值和方差估计。Matlab命令:
h =lillietest(x),[h,p,lstat,cv]=lillietest(x,alpha)
clear;
clc;
path1 = 'C:\Users\Administrator\Desktop\重新整理血管网络\真实数据.xls';
mypath1 = path1;%对比两个结果
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);
% jbtest(num1,0.05)
[h,p] = lillietest(num1,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('左分支长度')
[num2] = xlsread(mypath1,B);
[h,p] = lillietest(num2,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('右分支长度')
[num3] = xlsread(mypath1,C);
[h,p] = lillietest(num3,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主左长度比')
[num4] = xlsread(mypath1,D);
[h,p] = lillietest(num4,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主右长度比')
[num5] = xlsread(mypath1,E);
[h,p] = lillietest(num5,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主卷曲度')
[num6] = xlsread(mypath1,F);
[h,p] = lillietest(num6,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('左卷曲度')
[num7] = xlsread(mypath1,G);
[h,p] = lillietest(num7,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('右卷曲度')
[num8] = xlsread(mypath1,H);
[h,p] = lillietest(num8,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主左角度')
[num9] = xlsread(mypath1,I);
[h,p] = lillietest(num9,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主右角度')
[num10] = xlsread(mypath1,G);
[h,p] = lillietest(num10,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('左右角度')
[num11] = xlsread(mypath1,K);
[h,p] = lillietest(num11,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('主端点长')
[num12] = xlsread(mypath1,L);
[h,p] = lillietest(num12,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('左端点长')
[num13] = xlsread(mypath1,M);
[h,p] = lillietest(num13,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('右端点长')
[num14] = xlsread(mypath1,N);
[h,p] = lillietest(num14,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);
disp('总角度')
[num15] = xlsread(mypath1,O);
[h,p] = lillietest(num15,0.05);
fprintf('h值:%d,p值:%f\n\n',h,p);