23. K-S分布检验与正态性检验(一)假设检验1. 什么是假设检验?实际中,我们只能得到抽取的样本(部分)的统计结果,要进一步推断总体(全部)的特征,但是这种推断必然有可能犯错,犯错的概率为多少时应该接受这种推断呢?为此,统计学家就开发了一些统计方法进行统计检定,通过把所得到的统计检定值,与统计学家树立了一些随机变量的概率分布进行对比,我们可以知道在百分之多少的机遇下会得到目前的结果。
倘若经比较后发现,涌现这结果的机率很少,即是说,是在时机很少、很罕有的情况下才出现;那我们便可以有信念地说,这不是巧合,该推断结果是具有统计学上的意义的。
否则,就是推断结果不具有统计学意义。
2. 假设检验的基本思想——小概率反证法思想小概率思想是指小概率事件(P<α, α=0.05或0.01)在一次试验中基本上不会发生。
反证法思想是先提出原假设(H0),再用适当的统计方法确定假设成立的可能性(P值)大小,如可能性小(P≤α),则认为原假设不成立,若可能性大,则还不能认为备择假设(H1)成立。
3. 原假设与备择假设原假设与备择假设是完备且相互独立的事件组,一般,原假设(H0)——研究者想收集证据予以反对的假设;备择假设(H1)——研究者想收集证据予以支持的假设;假设检验的P值,就是在H0为真时,观察到的差异来源于抽样误差的可能性大小。
假设检验判断方法有:临界值法、P值检验法。
四、假设检验分类及步骤(以t检验为例)1. 双侧检验I. 原假设H0: μ=μ0, 备择假设H1:μ≠μ0;Ⅱ. 根据样本数据计算出统计量t的观察值t0;Ⅲ. P值= P{|t| ≥|t0|} = t0的双侧尾部的面积;Ⅳ. 若P值≤α(在双尾部分),则在显著水平α下拒绝H0;若P值>α,则在显著水平α下接受H0;注意:α为临界值,看P值在不在阴影部分(拒绝域),空白部分为接受域。
2. 左侧检验I. 原假设H0: μ≥μ0, 备择假设H1:μ<μ0;Ⅱ. 根据样本数据计算出统计量t的观察值t0(< 0);Ⅲ. P值= P{t ≤t0} = t0的左侧尾部的面积;Ⅳ. 若P值≤α(在左尾部分),则在显著水平α下拒绝H0; 若P值>α,则在显著水平α下接受H0;3. 右侧检验I. 原假设H0: μ≤μ0, 备择假设H1:μ>μ0;Ⅱ. 根据样本数据计算出统计量t的观察值t0(> 0);Ⅲ. P值= P{t ≥t0} = t0的右侧尾部的面积;Ⅳ. 若P值≤α(在右尾部分),则在显著水平α下拒绝H0; 若P值>α,则在显著水平α下接受H0;(二)K-S 分布检验Kolmogorov-Smirnov 检验,用来检验一组样本数据是否服从某已知分布,或两组样本数据是否服从相同分布。
用函数ks.test()实现,基本格式为:ks.test(x, y, ...,alternative=,exact=NULL)其中,x 为样本数据;y 为分布名(此时…为该分布的参数)或样本数据;alternative 设置是"two.sided"双侧检验(默认)、"less"左侧检验、"greater"右侧检验;exact 设置是否计算精确p 值,默认NULL 。
1. K-S 单样本总体分布检验用来检验样本数据是否服从某已知分布。
它是一种基于经验分布函数的检验,令0sup |()()|n n nD F x F x =-其中,()n F x 为一组随机样本的累计概率分布函数,0()F x 为真实的分布函数。
当n→∞时,nD的极限分布满足:22(1)exp(2), 0}()0, 0njjnjP Kλλλλλ=-∞⎧-->⎪<→=⎨⎪≤⎩∑原假设H0:nF F=即分布相同;备择假设H1:二者分布不同。
X=c(420,500,920,1380,1510,1650,1760,2100,2300,2350) #某设备10次无故障工作时间的数据lambda<-mean(X)lambda[1] 1489ks.test(X,"pexp",1/lambda)#检验是否服从参数为1/1489的指数分布One-sample Kolmogorov-Smirnov testdata: XD = 0.30418, p-value = 0.2563alternative hypothesis: two-sidedP值=0.2563>0.05,接受原假设H0,即服从指数分布。
2. 两独立样本K-S同分布检验假定有分别来自两个独立总体的两个样本,要检验是否服从同一分布。
设两个样本的样本量分别为1n和2n,累积经验分布函数分别为1()F x和2()F x,令12()()j j jD F x F x=-,则统计量max||jjZ D=近似服从正态分布。
原假设H0:12F F=服从同一分布;备择假设H1:不服从同一分布。
xx=c(0.61,0.29,0.06,0.59,-1.73,-0.74,0.51,-0.56,0.39, 1.64,0.05,-0.06,0.64,-0.82,0.37,1.77,1.09,-1.28,2.36,1.31, 1.05,-0.32,-0.40,1.06,-2.47)yy=c(2.20,1.66,1.38,0.20,0.36,0.00,0.96,1.56,0.44,1.5 0,-0.30,0.66,2.31,3.29,-0.27,-0.37,0.38,0.70,0.52,-0.71) ks.test(xx,yy) #检验两组数据是否服从同一分布Two-sample Kolmogorov-Smirnov testdata: xx and yyD = 0.23, p-value = 0.5286alternative hypothesis: two-sidedP值=0.5286>0.05, 接受原假设,即两组数据服从同一分布。
注1:在做K-S检验时,有时会有错误提示“Kolmogorov - Smirnov 检验里不应该有连结”,这是因为K-S检验只对连续CDF有效,而连续CDF中出现相同值的概率为0,因此R会报错。
这也提醒我们,在做正态性检验之前,要先对数据进行描述性分析,对数据整体要先有个大致的认识,这也才后续才能选择正确的检验方法。
注2:K-S检验主要用于定量数据,而卡方同质性检验主要用于分类数据。
(三)正态性检验原假设H0:服从正态分布;备择假设H1:不服从正态分布一、Shapiro-Wilk检验(W检验)适合在样本量8≤n≤50时使用。
W检验是建立在次序统计量的基础上,对n个独立观测值按非降排序,记为12,,,n x x x ,检验统计量:21121[()]()ni n i i i ni i a x x W x x +-==-=-∑∑当总体分布为正态分布时,W 值应该接近于1。
用函数shapiro.test()实现,基本格式为:shapiro.test(x)其中,x 为样本数据。
attach(mtcars)shapiro.test(mpg)Shapiro-Wilk normality testdata: mpgW = 0.94756, p-value = 0.1229detach(mtcars)P 值=0.1229>0.05, 接受原假设,即服从正态分布。
二、Kolmogorov-Smirnov 检验(D 检验)适合在样本量50≤n ≤1000时使用。
即将前文的K-S 单样本总体分布检验的已知分布,设为正态分布即可。
或者使用Lilliefor 检验,它是Kolmogorov-Smirnov 正态性检验修正,使用nortest 包中的函数lillie.test()实现。
基本格式为:lillie.test(x)其中x 为样本数据。
lillie.test(mpg)Lilliefors (Kolmogorov-Smirnov) normality testdata: mpgD = 0.1263, p-value = 0.2171detach(mtcars)P 值=0.2171>0.05, 接受原假设,即服从正态分布。
三、Jarque-Bera 正态性检验是基于偏度和峰度的联合分布检验法。
记偏度为S ,峰度为K ,则统计量:222()~(2)64n k K JB S χ-=+ 用tseries 包中的使用函数jarque.bera.test()实现,基本格式:jarque.bera.test(x)其中,x 为样本数据。
library(tseries)attach(mtcars)jarque.bera.test(mpg)JarqueBera Testdata: mpgX-squared = 2.2412, df = 2, p-value = 0.3261detach(mtcars)P 值=0.2412>0.05, 接受原假设,即服从正态分布。
注:还可以使用nromtest 包中的函数jb.norm.test()和ajb.norm.test(),前者参数除了x 之外,多了一个蒙特卡罗模拟值,默认是2000,后者是J-B 检验的修正,主要解决JB 统计量收敛速度慢的缺点。
四、其它正态性检验nortest包中还提供了:1. AD正态性检验函数ad.test(x), 计算统计量A值(越接近0越服从正态分布)和P值。
2. Cramer-von Mises正态性检验函数cvm.test(x)3. Pearson卡方正态性检验函数pearson.test(x)4. Shapiro-Francia正态性检验函数sf.test(x)五、多元正态性检验W检验shapiro.test()可推广到多元正态性检验,使用mvnormtest包中的函数mshapiro.test()或者使用Q-Q图检验,若有一个p×1的多元正态随机向量x,均值为μ,协方差矩阵为Σ,那么x与μ的马氏距离的平方服从自由度为p的卡方分布。
Q-Q图展示卡方分布的分位数,横纵坐标分别是样本量与马氏距离平方值。
如果点全部落在斜率为1、截距项为0的直线上,则表明数据服从多元正态分布。
library(MASS)attach(UScereal)y<-cbind(calories, fat, sugars)head(y)calories fat sugars[1,] 212.1212 3.030303 18.18182[2,] 212.1212 3.030303 15.15151[3,] 100.0000 0.000000 0.00000[4,] 146.6667 2.666667 13.33333[5,] 110.0000 0.000000 14.00000[6,] 173.3333 2.666667 10.66667#mshapiro.test()函数检验多元正态性library(mvnormtest)mshapiro.test(t(y))#注意要对y转置Shapiro-Wilk normality testdata: ZW = 0.6116, p-value = 7.726e-12#Q-Q图检验多元正态性center<-colMeans(y)n<-nrow(y)p<-ncol(y)cov<-cov(y)d<-mahalanobis(y, center, cov)coord<-qqplot(qchisq(ppoints(n),df=p), d, main="QQ Plot Assessing Multivariate Normality", ylab="Mahalanobis D2") abline(a=0, b=1)identify(coord$x, coord$y, labels=s(UScereal))。