正态分布检验-NormalTest m sci代码
// .m .sci 文件 代码
function [Res,u1,u2]=NormalTest(x,alpha)
//u1=g1/sig1 ~ N(0,1) 偏度
//u2=(g2-mu2)/sig2 ~ N(0,1) 峰度
//N>=100. 当N<100时检验准确性较低
Mean=0;
Std=1;
Q=(1-alpha)/4;
P=1-Q;
uu=cdfnor("X",Mean,Std,P,Q);
N=length(x);
sig1=sqrt(6*(N-2)/(N+1)/(N+3));
sig2=sqrt(4*N*(N-3)/(N+1)/(N+5))*sig1;
mu1=0;
mu2=3-6/(N+1);
A1=sum(x)/N;
A2=sum(x.*x)/N;
A3=sum(x.*x.*x)/N;
A4=sum(x.*x.*x.*x)/N;
B2=A2-A1*A1;
B3=A3-3*A2*A1+2*A1*A1*A1;
B4=A4-4*A3*A1+6*A2*A1*A1-3*A1*A1*A1*A1;
g1=B3/B2/sqrt(B2);
g2=B4/B2/B2;
u1=g1/sig1;
u2=(g2-mu2)/sig2;
b1=abs(u1)-uu;
b2=abs(u2)-uu;
c=[b1,b2];
if sum(c>0) then
Res=0;
else
Res=1;
end
endfunction
调用示例:
N=1000;
z=grand(1,N,"nor",0,1);
bRes=0;
alpha=0.1;
[bRes,u1,u2]=NormalTest(z,1-alpha);
bRes=1 是通过检验,数据正态分布,置信度1-alpha。
N<100时 检验准确性较低