引用
正态性检验之qqplot和ppplot原理及R语言实现
QQ图
KS检验和SW检验的区别
t检验算法及其在R语言中的实现
R语言做正态分布检验
R语言与统计分析
数据统计中的方差分析第一步应该是检查数据,其次做正态性检验。
而正态性检验:
- KS检验(样本量>5000)
- SW检验(样本量<5000)
- QQ图
1.QQ图
- Q-Q图是一种散点图,对应于正态分布的Q-Q图,就是由标准正态分布的分位数为横坐标,样本值为纵 坐标的散点图.
- 要利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近,而且该直线的斜率为标准差,截距为均值.
d <- rnorm(1000,mean = 76,sd=7);d
[1] 63.63068 81.41180 62.65524 58.53152 82.86776 71.45430 83.80898 71.65438 61.58349 78.42920 71.28601 73.50931
[13] 93.39517 65.07725 70.14370 72.21523 76.18374 80.55893 69.23166 88.16256 67.21181 84.96855 83.66621 62.01507
//省略
> qqnorm(d)
> qqline(d)
2.K-S检验
- 柯尔莫戈洛夫-斯米诺夫检验(Kolmogorov-Smirnov test),简称K-S检验;
nortest
包-
ad.test是Anderson-Darling正态性检验,;
cvm.test是Cramer-von Mises正态性检验;
lillie.test是Lilliefors (Kolmogorov-Smirnov)正态性检验;
pearson.test是pearson卡方正态性检验;
sf.test是Shapiro-Francia正态性检验, 用这些检验验证a,b的正态性
-
fBasics
包
#1
> library(nortest)
> lillie.test(d)
Lilliefors (Kolmogorov-Smirnov) normality test
data: d
D = 0.033671, p-value = 0.009551
-
Lilliefor test是K-S检验的修正。在R中使用Lillefor检验,就相当于在SPSS中正态性检验的Kolmogorov-Smirnov的lilliefors的修正值,二者结果是相同的。
-
需要注意的是,K-S检验只需要K-S检验默认是检验是否符合标准正态分布,所以我们需要先用scale函数对需要检测的数据标准化。
#2
> ks.test(d,"pnorm")
One-sample Kolmogorov-Smirnov test
data: d
D = 1, p-value < 2.2e-16
alternative hypothesis: two-sided
> ks.test(scale(d),"pnorm")
One-sample Kolmogorov-Smirnov test
data: scale(d)
D = 0.033671, p-value = 0.2069
alternative hypothesis: two-sided
- D值越小,越接近0,表示样本数据越接近正态分布(D越小越好);P小于显著性水平α(0.05),则拒绝H0(p越大越好)
3.S-W检验
- 夏皮洛-威尔克检验(Shapiro—Wilk test),简称S-W检验。
> shapiro.test(d)
Shapiro-Wilk normality test
data: d
W = 0.99736, p-value = 0.1031
-
W接近1,p值大于0.05,所以数据为正态分布
-
两种正态性检验方法,包括S-W检验和K-S检验。小样本(小于50)时建议使用S-W检验,大样本(大于50)时建议使用K-S检验;此两个检验的原假设为数据正态分布,因而P值>0.05,说明该项具有正态分布特质。 KS检验和SW检验的区别,
-
这里很有误导性,到底样本啥样呢,我1000的样本,用Lilliefor test检验,P<0.05,并没有证明正态,而用S-W,就可以。
-
SPSS 规定: 当样本含量3 ≤ n ≤ 5000时, 结果以Shapiro-Wilk为准, 当样本含量n > 5000结果以Kolmogorov-Smirnov为准.
-
而SAS 规定: 当样本含量n ≤ 2000时, 结果以Shapiro-Wilk为准, 当样本含量n >2000时, 结果以Kolmogorov-Smirnov为准.
-
写到最后,到底一组数据如何去判断呢?个人倾向于SPSS规定,说句不严谨的话,数据没有异常值,都是好数据,你说呢。
#当我把d取到10000时报错
> shapiro.test(d)
Error in shapiro.test(d) : 样本大小必需在3和5000之间`
看完如果对你有帮助,感谢点赞支持!
如果你是电脑端,看到右下角的 “一键三连” 了吗,没错点它[哈哈]