您的位置:首页 > 其它

R语言 Shapiro-Wilk检验

2016-04-06 11:01 639 查看
分布检验方法比较

²图示法相对于其他方法而言,比较直观,方法简单,从图中可以直接判断,无需计算,但这种方法效率不是很高,它所提供的信息只是正态性检验的重要补充。

²经常使用的拟合优度检验和Kolmogorov-Smirnov检验的检验功效较低,在许多计算机软件的Kolmogorov-Smirnov检验无论是大小样本都用大样本近似的公式,很不精准,一般使用Shapiro-Wilk检验和Lilliefor检验。

²Kolmogorov-Smirnov检验只能检验是否一个样本来自于一个已知样本,而Lilliefor检验可以检验是否来自未知总体。

²Shapiro-Wilk检验和Lilliefor检验都是进行大小排序后得到的,所以易受异常值的影响。

²Shapiro-Wilk检验只适用于小样本场合(3≤n≤50),其他方法的检验功效一般随样本容量的增大而增大。

²拟合优度检验和Kolmogorov-Smirnov检验都采用实际频数和期望频数进行检验,前者既可用于连续总体,又可用于离散总体,而Kolmogorov-Smirnov检验只适用于连续和定量数据。

²拟合优度检验的检验结果依赖于分组,而其他方法的检验结果与区间划分无关。

²偏度和峰度检验易受异常值的影响,检验功效就会降低。

²假设检验的目的是拒绝原假设,当p值不是很大时,应根据数据背景再作讨论。

Shapiro-Wilk检验:

Shapiro-Wilk检验用来检验是否数据符合正态分布,类似于线性回归的方法一样,是检验其于回归曲线的残差。该方法作者推荐在样本量很小的时候使用,比如N<20。但是也有作者推荐在大数据集上使用。该作者将这种修改后的方法运用在R语言的stats包中的shapiro.test函数中。

该检验原假设为H0:数据集符合正态分布,统计量W为:







为排序后的样本数据,

为待估常量,假设样本数据确实符合一个未知均值

、标准差

的正态分布,那么样本数据就会满足下列一次函数式:





其中

是随机正态分布N(0,1)中排序数据。

统计量越大则表示数据越符合正态分布,但是仅凭这一个参数是不够的,在非正态分布的小样本数据中也经常会出现较大的W值。该统计量的分布是未知的,因此需要通过模拟或者查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。

R语言中的Shapiro-Wilk检验

shapiro.test(x)该函数只有一个参数即数据集x。x可以是数值型向量,允许存在NA,但是非丢失数据需要在3-5000内。

例1:

11个随机抽取的样本的体重数据为:

148154158160161162166170182195236

>k<-c(148,154,158,160,161,162,166,170,182,195,236)

>shapiro.test(k)

Shapiro-Wilknormalitytest

data:k

W=0.7888,p-value=0.006704

结果中W统计量为0.7888非常接近于0,但是其p值小于0.05,所以我们可以拒绝原假设,即该数据不符合正态分布。因此,在这个例子中我们也可发现较大的W统计量的情况下,我们依然可能拒绝其符合正态分布。

例2:
>shapiro.test(rnorm(100,mean=5,sd=3))

Shapiro-Wilknormalitytest

data:rnorm(100,mean=5,sd=3)

W=0.9926,p-value=0.863


>shapiro.test(runif(100,min=2,max=4))

Shapiro-Wilknormalitytest

data:runif(100,min=2,max=4)

W=0.9561,p-value=0.00214


在这个例子中,我们可以发现,第一个命令是检验一个随机生产的100个数据,该数据集符合均值为5、标准差为3的正态分布,其W统计量接近1,p值显著大于0.05,所以我们没办法拒绝其符合正态分布。第二个命令检验一个随机产生的100个数据,但是该数据是符合最小值为2,最大值为4的均一分布,其W统计量也是接近1,但是其P值小于0.05,所以我们有足够理由拒绝其符合正态分布。

转载地址:http://blog.sina.com.cn/s/blog_403aa80a01019lwd.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: