检测一组数据是否为正态分布
(1)QQ图
Quantile-Quantile plot可以检视数据是否符合某种类型的分布(如正态分布),或两组分布进行比较。
步骤:
原始数据的每一个点作为一个分位数,然后找一个任意的正态分布,求出与原始数据等量的正态分布分位数。原始数据的分位数与理论的分位数画图,如果原始数据符合这种分布,点就会很好地拟合在直线上。
用法:
> set.seed(1234)
> a <- rnorm(100,mean=0,sd=2)
> set.seed(1234)
> b <- rnorm(100,mean=0,sd=4)
> qqnorm(a,main="QQ Plot")
> qqline(a)
(2)K-S test
Kolmogorov-Smirnov检验是基于累计分布函数的,用于检验一个分布是否符合某种理论分布或比较两个经验分布是否有显著差异。单样本K-S检验是用来检验一个数据的观测经验分布是否符合已知的理论分布。两样本K-S检验由于对两样本的经验分布函数的位置和形状参数的差异都敏感,所以成为比较两样本的最有用且最常用的非参数方法之一。
红线表示假定符合的分布(正态分布),蓝线是离散化的数据,所以呈现阶梯状。X轴表示数据值的大小,Y轴表示的数据累计所占百分比(实际上就是概率密度函数的积分)。两条线之间的最大距离也就是黑色箭头,称为D值,表示了二者之间的最大区别程度。
步骤:
提出H0;计算统计量D;用样本容量n和显著水平a查出临界值Dna;如果D < Dna,则认为拟合是满意的。
H0:数据符合正态分布(数据与正态分布没有差异)。
p-value < 0.05,拒绝H0;p-value > 0.05,不能拒绝H0。
用法:
> ks.test(a,"pnorm",mean(a),sd(a))
One-sample Kolmogorov-Smirnov test
data: a
D = 0.10124, p-value = 0.257
alternative hypothesis: two-sided
> ks.test(a[1:30],a[31:100]) #来自同一分布的数据
Two-sample Kolmogorov-Smirnov test
data: a[1:30] and a[31:100]
D = 0.16667, p-value = 0.5527
alternative hypothesis: two-sided
> ks.test(a,a+1) #改变分布的位置
Two-sample Kolmogorov-Smirnov test
data: a and a + 1
D = 0.27, p-value = 0.001365
alternative hypothesis: two-sided
> ks.test(a,b) #改变分布的形状
Two-sample Kolmogorov-Smirnov test
data: a and b
D = 0.27, p-value = 0.001365
alternative hypothesis: two-sided
# 如果出现K-S检验不应该有连结,表示原数据中有重复值,可以加一个随机扰动runif(length(a),-0.05,0.05)
(3)S-W test
Shapiro-Wilk检验用于验证一个随机样本数据是否来自正态分布,适用于样本量小于50的情况。
步骤:
提出H0;计算统计量W(可以看做线性回归的确定性系数);W接近1,p > 0.05,不能拒绝H0;W小于临界值Wα,则拒绝H0。
H0:数据符合正态分布。
p-value < 0.05,拒绝H0;p-value > 0.05,不能拒绝H0。
用法:
> shapiro.test(a)
Shapiro-Wilk normality test
data: a
W = 0.96587, p-value = 0.01078
两组间差异的非参数检验
参数检验,就是假定数据服从某种分布,通过样本信息对总体参数进行检验。因而在分析前,先要检验数据是否符合该类型的分布。如果数据不符合检验假设的分布,则可以考虑选择使用非参数检验。
(1)Wilcoxon秩和检验
秩和检验方法最早是由Wilcoxon提出,后来Mann-Whitney将其应用到两样本容量不等的情况。Wilcoxon秩和检验(Mann-Whitney U检验),假设两个样本分别来自除了总体均值以外完全相同的两个总体,目的是检验这两个总体的均值是否有显著的差别。适用于双独立样本。
步骤:
将样本量为n1、n2的两组数据混合,按照从小到大排序编号;分别计算两个样本的编号之和W1、W2;计算统计量U1、U2;U1,U2中的最小值用于与临界值Uα相比较,如果Umin < Uα,则拒绝H0,表明两样本之间存在差异。
原假设:两样本分布相同。
备择假设:在理论研究时,假设两个总体的分布函数性状相同,仅有可能是位置参数不同。在实际应用时,不必强求两个总体的分布函数形状相同。
用法:
wilcox.test(y~x,data) #y是连续变量(两组值合并到一起),x是一个二分变量(分组),data为一个包含这些变量的矩阵或数据框
wilcox.test(y1,y2) #y1和y2为变量名
> wilcox.test(a[1:30],a[31:100]) #来自同一分布的数据
Wilcoxon rank sum test with continuity correction
data: a[1:30] and a[31:100]
W = 952, p-value = 0.4633
alternative hypothesis: true location shift is not equal to 0
> wilcox.test(a,a+1) #改变分布的位置,敏感
Wilcoxon rank sum test with continuity correction
data: a and a + 1
W = 3502, p-value = 0.0002532
alternative hypothesis: true location shift is not equal to 0
> wilcox.test(a,b) #改变分布的形状,似乎不那么敏感
Wilcoxon rank sum test with continuity correction
data: a and b
W = 5708, p-value = 0.08386
alternative hypothesis: true location shift is not equal to 0
(2)Wilcoxon配对秩和检验
符号检验是用来检验两配对样本所来自的总体的分布是否存在显著差异的非参数方法,但是配对样本的符号检验注重对变化方向的分析,而没有考虑变化幅度。Wilcoxon配对秩和检验是对Sign符号检验的改进。适用于双配对样本检验。
步骤:
用第二组样本的各个观察值减去第一组对应样本的观察值,差值为正则记为正号,为负则记为负号,并同时保存差值数据;将差值变量按升序排序,并求出差值变量的秩;最后,分别计算正号秩总和W+和负号秩和W-。
H0:两组数据总体中位数相等。
用法:
wilcox.test(y~x,data,paired=TRUE)
wilcox.test(y1,y2,paired=TRUE)
> wilcox.test(a[1:30],a[31:60],paired=T)
Wilcoxon signed rank test
data: a[1:30] and a[31:60]
V = 286, p-value = 0.2801
alternative hypothesis: true location shift is not equal to 0
> wilcox.test(a[1:30],a[31:60])
Wilcoxon rank sum test
data: a[1:30] and a[31:60]
W = 551, p-value = 0.1381
alternative hypothesis: true location shift is not equal to 0