Kolmogorov-Smirnov是比较一个经验分布与理论分布
或者两个观测值分布的检验方法。其原假设H0:两个数据分布一致或者数据符合理论分布。 对于单样本KS检验,检验统计量为
,当根据观测值计算出的
则拒绝H0,否则接受H0假设。
目录
附件:Kolmogorov-Smirnov单样本检验中D的临界值表
Matlab代码——计算D_N
基于数据的KS检验统计量的展开式
理论分布在接受域中的上下限
反向验证
也就是,所以也就是说只要
成立,则检验统计量落在接受域里。(注意:上面这个不等式的左侧是没有取Max的。但是,由于它对所有的x都成立,所以Max也成立)。由此可见,整个证明过程是自恰的。
案例分析
不等式一个用途是用于画图分析,只要理论分布
落在两条折线
和
之间,也就是说原假设成立:
是来自分布函数为
的样本
例如:检验下面一组数据(N=40)是否来自于正态分布N(76,155),取显著性水平。
样本均值为76.825,样本方差为154.4;查表可知。绘图如下(Matlab代码放在最后面),红线
与绿线没有交叉,所以在显著性水平
下,可以认为该样本是来自总体分布为N(76,155)。
![](https://img-blog.csdnimg.cn/20191123144029848.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1ODg3MzI3,size_16,color_FFFFFF,t_70)
或许可行的改进及建议
附件: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代码——计算![\large D_{N}](https://private.codecogs.com/gif.latex?%5Cdpi%7B100%7D%20%5Clarge%20D_%7BN%7D)
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);