单样本KS检验,案例分析及Matlab可视化

       Kolmogorov-Smirnov是比较一个经验分布与理论分布或者两个观测值分布的检验方法。其原假设H0:两个数据分布一致或者数据符合理论分布。 对于单样本KS检验,检验统计量为,当根据观测值计算出的则拒绝H0,否则接受H0假设。


目录

基于数据的KS检验统计量的展开式

理论分布在接受域中的上下限

反向验证

案例分析

或许可行的改进及建议

附件:Kolmogorov-Smirnov单样本检验中D的临界值表

Matlab代码——画图

Matlab代码——计算D_N


基于数据的KS检验统计量的展开式

单样本KS检验,案例分析及Matlab可视化_第1张图片

理论分布在接受域中的上下限

单样本KS检验,案例分析及Matlab可视化_第2张图片

单样本KS检验,案例分析及Matlab可视化_第3张图片

反向验证

单样本KS检验,案例分析及Matlab可视化_第4张图片

       也就是,所以也就是说只要成立,则检验统计量落在接受域里。(注意:上面这个不等式的左侧是没有取Max的。但是,由于它对所有的x都成立,所以Max也成立)。由此可见,整个证明过程是自恰的。

案例分析

       不等式一个用途是用于画图分析,只要理论分布落在两条折线和之间,也就是说原假设成立:是来自分布函数为的样本

       例如:检验下面一组数据(N=40)是否来自于正态分布N(76,155),取显著性水平

单样本KS检验,案例分析及Matlab可视化_第5张图片

       样本均值为76.825,样本方差为154.4;查表可知。绘图如下(Matlab代码放在最后面),红线与绿线没有交叉,所以在显著性水平下,可以认为该样本是来自总体分布为N(76,155)

单样本KS检验,案例分析及Matlab可视化_第6张图片 红线代表理论分布函数F0(x) (与原假设对应),蓝色+号代表的是有序样本点对应的F0(xk); 绿线代表的是在原假设成立的条件下,理论分布函数的上下界。

或许可行的改进及建议

单样本KS检验,案例分析及Matlab可视化_第7张图片


附件:Kolmogorov-Smirnov单样本检验中D的临界值表

原文链接:http://www.docin.com/p-47871407.html


Matlab代码——画图

X = [55 85 72 99 48 71 88 70 59 98 80 74 93 ...
     85 74 82 90 71 83 60 95 77 84 73 63 72 ...
     95 79 51 85 76 81 78 65 75 87 86 70 80 64];
X = sort(X,'ascend');      
N = length(X);
D_N005 = 1.36/sqrt(N);    % N大于35的近似公式
 
F0 = zeros(1,Nx);
mu = 76;  
sig = sqrt(155);          % F0的均值和方差
 
F_low = zeros(1,Nx);
F_up  = zeros(1,Nx);
x0 = X(1)-1; xe = X(end)+1;     % 补充x0和x41
X1 = [x0,X,xe];
Nx = 500;    i = 0;  k = 0;
for x = x0:(xe-x0)/(Nx-1):xe
    i = i+1;
    if x > X1(k+1);
        k = k+1;
    end
    F0(i)    = normcdf(x,mu,sig);
    F_low(i) = k/N - D_N005;
    F_up(i)  = k/N + D_N005;
end
F_low(F_low<0) = 0;   F_low(F_low>1) = 1;
F_up(F_up<0)   = 0;   F_up(F_up>1)   = 1;
 
x_grid = x0:(xe-x0)/(Nx-1):xe;
plot(x_grid,F0,'r',x_grid,F_low,'g--',x_grid,F_up,'g--');
hold on ;scatter(X,normcdf(X,mu,sig),'b+');
axis tight

Matlab代码——计算

X = [55 85 72 99 48 71 88 70 59 98 80 74 93 ...
     85 74 82 90 71 83 60 95 77 84 73 63 72 ...
     95 79 51 85 76 81 78 65 75 87 86 70 80 64];
X = sort(X,'ascend');      
N = length(X);
mu = mean(X);  
sig = sqrt(var(X));      % F0的均值和方差
dN = zeros(1,N); 
k = 0;
for x = X
    k = k +1;
    dN(k) = max(abs( normcdf(x,mu,sig) - [k/N,(k-1)/N] ));   
end
% 获取DN
DN = max(dN);

 

你可能感兴趣的:(KS检验,Test,单样本,经验分布函数,非参数统计)