统计学中的t检验法和F检验法的应用条件是样本都来自正态总体或近似正态总体,只有符合这个条件,才能用它们来检验各样本所属的总体参数的差异显著性。
一、非参数检验
1、Kolmogorov-Smirnov正态性检验(单样本)
检验单一样本是否来自某一特定分布。比如检验一组数据是否为正态分布。它的检验方法是以样本数据的累积频数分布与特定理论分布比较,若两者间的差距很小,则推论该样本取自某特定分布族。即对于假设检验问题:
H0:样本所来自的总体分布服从某特定分布
H1:样本所来自的总体分布不服从某特定分布
文章图片
Fn(X)表示一组随机样本的累计概率函数,F0(X)表示分布的分布函数。
当原假设为真时,D的值应较小,若过大,则怀疑原假设,从而,拒绝域为
对于给定的
文章图片
又,
文章图片
R实现: 1.1 ks.test()
> x <- rnorm(3000)
> ks.test(x,"pnorm") One-sample Kolmogorov-Smirnov testdata:x
D = 0.0077, p-value = https://www.it610.com/article/0.9943
alternative hypothesis: two-sided
若不是正态分布函数的检验,只需要将"pnorm"改成相应地分布函数
当已知分布函数时,如:
> ks.test(x,"pnorm",mean(x),sd(x)) One-sample Kolmogorov-Smirnov testdata:x
D = 0.0087, p-value = https://www.it610.com/article/0.9768
alternative hypothesis: two-sided
若出现错误或警报,可能是由于:
Warning message:
In ks.test(X, "pnorm", 2.488715,3.012176) :
ties should not be present for the Kolmogorov-Smirnov test
#若已知可能的分布函数
#样本数据中存在有相同的值,单样本K-S检验要求检验分布是连续的,而连续分布出现相同值的概率为0.如果是出现相同的,则连续分布的假设不成立,则该方法无法使用
1.2 nortest包里的lillie.test()可以实行更精确的Kolmogorov-Smirnov检验
> library(nortest)
> lillie.test(x) Lilliefors (Kolmogorov-Smirnov) normality testdata:x
D = 0.0087, p-value = https://www.it610.com/article/0.8408
可以发现此方法的结果和ks.test的第二种方法的结果是一样的
1.3 fBasics包里的normaltest()和ksnormtest()
> ksnormTest(x)Title:
One-sample Kolmogorov-Smirnov testTest Results:
STATISTIC:
D: 0.0077
P VALUE:
Alternative Two-Sided: 0.9943
AlternativeLess: 0.7946
AlternativeGreater: 0.7012 Description:
Tue Jan 13 21:24:19 2015 by user:
#建议:大样本、已知总体均数和标准差,选择非参数检验-单样本KS检验号。。但对于样本大小,有说大于50、500、5000的,各有所不同的理解。
2、Shapiro-Wilk(W检验)
统计量为:
【R|不同方法的正态性检验及R语言实现】
文章图片
当原假设为真时,W的值应接近于1,若值过小,则怀疑原假设,从而拒绝域为R:W
> shapiro.test(x) Shapiro-Wilk normality testdata:x
W = 0.9997, p-value = https://www.it610.com/article/0.9494
在R中,shpiro.test()函数限制为3-5000个样本之间
2.2 fBasics包里的shapiroTest()
> shapiroTest(x)Title:
Shapiro - Wilk Normality TestTest Results:
STATISTIC:
W: 0.9997
P VALUE:
0.9494
二、图示法
Q-Q图:以样本的分位数作为横坐标,以按照正态分布计算的相应分位点作为纵坐标,把样本表现为直角坐标系的散点。如果数据服从正态分布,则样本点应围绕第一象限的对角线分布。
w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5,
66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0)
qqnorm(w); qqline(w)
文章图片
可以发现:基本上呈正态分布。
推荐阅读
- r语言|手把手(R语言文本挖掘和词云可视化实践)
- R|【R数据可视化手册】笔记1-条形图
- R语言从入门到机器学习|R语言rename重命名dataframe的列名实战:rename重命名dataframe的列名(写错的列名不会被重命名)
- 数据挖掘|决策树
- R|时间序列分析记录一
- R下载安装,Linux版
- R语言(生成正态分布数据生成--rnorm,dnorm,pnorm,qnorm)
- Dynamic|Best Time to Buy and Sell Stock IV
- R(增加或删除矩阵的行或列)