R语言学习系列25KS分布检验与正态性检验.docx
《R语言学习系列25KS分布检验与正态性检验.docx》由会员分享,可在线阅读,更多相关《R语言学习系列25KS分布检验与正态性检验.docx(9页珍藏版)》请在冰豆网上搜索。
R语言学习系列25KS分布检验与正态性检验
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单样本总体分布检验
用来检验样本数据是否服从某已知分布。
它是一种基于经验分布函数的检验,令
其中,
为一组随机样本的累计概率分布函数,
为真实的分布函数。
当
时,
的极限分布满足:
原假设H0:
即分布相同;备择假设H1:
二者分布不同。
X=c(420,500,920,1380,1510,1650,1760,2100,2300,2350)#某设备10次无故障工作时间的数据
lambda<-mean(X)
lambda
[1]1489
ks.test(X,"pexp",1/lambda)#检验是否服从参数为1/1489的指数分布
One-sampleKolmogorov-Smirnovtest
data:
X
D=0.30418,p-value=0.2563
alternativehypothesis:
two-sided
P值=0.2563>0.05,接受原假设H0,即服从指数分布。
2.两独立样本K-S同分布检验
假定有分别来自两个独立总体的两个样本,要检验是否服从同一分布。
设两个样本的样本量分别为
和
,累积经验分布函数分别为
和
,令
,则统计量
近似服从正态分布。
原假设H0:
服从同一分布;备择假设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.50,-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-sampleKolmogorov-Smirnovtest
data:
xxandyy
D=0.23,p-value=0.5286
alternativehypothesis:
two-sided
P值=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个独立观测值按非降排序,记为
,检验统计量:
当总体分布为正态分布时,W值应该接近于1。
用函数shapiro.test()实现,基本格式为:
shapiro.test(x)
其中,x为样本数据。
attach(mtcars)
shapiro.test(mpg)
Shapiro-Wilknormalitytest
data:
mpg
W=0.94756,p-value=0.1229
detach(mtcars)
P值=0.1229>0.05,接受原假设,即服从正态分布。
二、Kolmogorov-Smirnov检验(D检验)
适合在样本量50≤n≤1000时使用。
即将前文的K-S单样本总体分布检验的已知分布,设为正态分布即可。
或者使用Lilliefor检验,它是Kolmogorov-Smirnov正态性检验修正,使用nortest包中的函数lillie.test()实现。
基本格式为:
lillie.test(x)
其中x为样本数据。
library(nortest)
attach(mtcars)
lillie.test(mpg)
Lilliefors(Kolmogorov-Smirnov)normalitytest
data:
mpg
D=0.1263,p-value=0.2171
detach(mtcars)
P值=0.2171>0.05,接受原假设,即服从正态分布。
三、Jarque-Bera正态性检验
是基于偏度和峰度的联合分布检验法。
记偏度为S,峰度为K,则统计量:
用tseries包中的使用函数jarque.bera.test()实现,基本格式:
jarque.bera.test(x)
其中,x为样本数据。
library(tseries)
attach(mtcars)
jarque.bera.test(mpg)
JarqueBeraTest
data:
mpg
X-squared=2.2412,df=2,p-value=0.3261
detach(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-vonMises正态性检验
函数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)
caloriesfatsugars
[1,]212.12123.03030318.18182
[2,]212.12123.03030315.15151
[3,]100.00000.0000000.00000
[4,]146.66672.66666713.33333
[5,]110.00000.00000014.00000
[6,]173.33332.66666710.66667
#mshapiro.test()函数检验多元正态性
library(mvnormtest)
mshapiro.test(t(y))#注意要对y转置
Shapiro-Wilknormalitytest
data:
Z
W=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="QQPlotAssessingMultivariateNormality",ylab="MahalanobisD2")
abline(a=0,b=1)
identify(coord$x,coord$y,labels=row.names(UScereal))