R语言 Shapiro-Wilk检验
关键词:shapiro wilk正态检验、shapiro wilk检验、shapiro wilk检验法、shapiro wilk检验原理
分布检验方法比较
² 图示法相对于其他方法而言,比较直观,方法简单,从图中可以直接判断,无需计算,但这种方法效率不是很高,它所提供的信息只是正态性检验的重要补充。
² 经常使用的拟合优度检验和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为:
为排序后的样本数据,为待估常量,假设样本数据确实符合一个未知均值、标准差的正态分布,那么样本数据就会满足下列一次函数式:
统计量越大则表示数据越符合正态分布,但是仅凭这一个参数是不够的,在非正态分布的小样本数据中也经常会出现较大的W值。该统计量的分布是未知的,因此需要通过模拟或者查表来估计其概率。由于原假设是其符合正态分布,所以当P值小于指定显著水平时表示其不符合正态分布。
R语言中的Shapiro-Wilk检验
shapiro.test(x)该函数只有一个参数即数据集x。x可以是数值型向量,允许存在NA,但是非丢失数据需要在3-5000内。
例1:
11个随机抽取的样本的体重数据为:
148 154 158 160 161 162 166 170 182 195 236
> k<-c(148 ,154, 158, 160, 161, 162, 166, 170, 182, 195, 236)
> shapiro.test(k)
Shapiro-Wilk normality test
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-Wilk normality test
data: rnorm(100, mean = 5, sd = 3)
W = 0.9926, p-value = 0.863
> shapiro.test(runif(100, min = 2, max = 4))
Shapiro-Wilk normality test
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,所以我们有足够理由拒绝其符合正态分布。