俺的学习笔记

Thursday, November 15, 2018

Kolmogorov-Smirnov Goodness-of-Fit Test

The Kolmogorov-Smirnov test (K-S test) is used to decide if a sample comes from a population with a specific distribution.
K-S检验是用来测试某一样本的分布是否符合某种理论分布,或者两个样本的分布是否有显著的差异。
例如,抽样了100人的血糖值,检验血糖值的分布是否符合正态分布。
K-S检验也非常简单,它是基于empirical distribution function (ECDF)的。
给定一组数据,Y={Y1, Y2, ..., YN}
ECDF是这样定义的:EN=n(i)/N
这里的n(i)是这样定义的,把Y从小到大排序,n(i)是小于Yi的数据的个数。
说起来太难理解了,举个例子:
比如有一组数据:
Y={4.45, 5.23, 3.77, 4.83, 5.04, 5.98, 5.80, 2.75, 3.53, 5.36}
把它从小到大排序:
Y={2.75, 3.53, 3.77, 4.45, 4.83, 5.04, 5.23, 5.36, 5.80, 5.98}
那么n(0)=小于Y0,2.75的数据个数,n(0)=0
n(1)=小于Y1,3.53的数据个数,n(1)=1
n(2)=小于Y2,3.77的数据个数,n(2)=2
...
这么一直计算下去得到这样一组数据
2.750
3.530.1
3.770.2
4.450.3
4.830.4
5.040.5
5.230.6
5.360.7
5.80.8
5.890.9
画成图形就是这样的图形

※俺怎么感觉计算n(i)时不应该是小于,而应该是小于等于,要不然的话永远不能等于1。
The hypotheses for the test are:
Null hypothesis (H0): the data comes from the specified distribution.
Alternate Hypothesis (H1): at least one value does not match the specified distribution.
That is,
H0:F(x)=F0(x),
HA:F(x)F0(x).也就是说,H0表示服从某一特定分布,H1表示不服从这一分布。
(或者两个样本比较的话,就是H0表示两个样本分布相同,H1表示两个样本分布不同)
那么如何判断H0成不成立呢?要算D。
Dn=supx[|Fn(x)F0(x)|]
这个D是什么意思呢?如下图,
这个D其实就是样本和某分布(或两个样本)的ECDF之差的最大值。
简单来说,所谓的K-S检验就是做一条被测数据的ECDF,再做一条标准分布的,比如正态分布的ECDF(或者做两个需要比较的ECDF),两条ECDF之间最大的那个差就是D。然后查表来确定p-value。根据p-value判断H0或H1哪个成立。
当然了,R里面也有现成的K-S Test的函数。非常简单就能完成。
> # 还是刚才那组数据
> x=c(4.45, 5.23, 3.77, 4.83, 5.04, 5.98, 5.80, 2.75, 3.53, 5.36)
> x
[1] 4.45 5.23 3.77 4.83 5.04 5.98 5.80 2.75 3.53 5.36
> p=ecdf(x) # 取得x的empirical distribution function
> plot(p) # 画出来是这个样子的
※果然如俺刚才说的,计算ecdf时不是小于,而是小于等于。
> # 下面再做一组标准的正态分布数据
> nm=rnorm(10000,mean=4.674, sd=1.2)
> q=ecdf(nm)
> plot(q) # 正态分布的ecdf画出来是这个样子滴
这个是正态分布的ecdf函数的样子。
> lines(p,col="red") # 把刚才的数据的ecdf加上去
直观上看起来差不多啊。下面用K-S方法来检验一下
> ks.test(x,nm,alternative = "two.sided")

    Two-sample Kolmogorov-Smirnov test

data: x and nm
D = 0.1499, p-value = 0.9783
alternative hypothesis: two-sided

> ks.test(x,nm,alternative = "less")

    Two-sample Kolmogorov-Smirnov test

data: x and nm
D^- = 0.1499, p-value = 0.6383
alternative hypothesis: the CDF of x lies below that of y

> ks.test(x,nm,alternative = "greater")

    Two-sample Kolmogorov-Smirnov test

data: x and nm
D^+ = 0.1422, p-value = 0.6676
alternative hypothesis: the CDF of x lies above that of y
这样看来K-S检验也是检验分布的,那么它和卡方检验(Chi-Square Goodness of Fit Test)有什么区别,什么时候用卡方,什么时候用K-S检验呢?
还有,上面提到的t检验Wilcocox检验都是用来检验均值的,那么什么时候用t检验,什么时候用Wilcocox检验呢?
CMMI的观点是这样的,即,按照数据类型分类。
但是这种观点和统计学的观点是有出入的,事实上远非这么简单。
统计学的观点可以参照这篇文章。统计学理论上这些测试分成parametric和nonparametric两种类型。如果符合正态分布,则用parametric,否则用nonparametric。该文的观点是,都行,主要考虑样本的大小。
当然了,为了应付考试,还是按照教材上说的做比较保险。
https://www.itl.nist.gov/div898/handbook/eda/section3/eda35g.htm
https://onlinecourses.science.psu.edu/stat414/node/234/

Labels: , ,

0 Comments:

Post a Comment

<< Home