前面文章秩和检验 (1),笼统地介绍了秩和检验相关信息,现在介绍秩和检验的完整流程。
Rank / 秩
Rank,秩,是排名的意思。具体来讲,就是全部观察值按某种顺序排列的位序(通常是由小到大的顺序)。
举个例子,假设一个班有10个同学,将这10个同学按身高从低到高进行排列,就获取到这10个同学的身高排名,第一个同学的排名为1,他对应的秩就是1;第二个同学的排名为2,他对应的秩就是2;以此类推。
在排序过程中,可能会出现身高相同的情况,这时候的秩取相同值排名的平均值。假设排在前两名的两个人的身高相同,则他们的秩都为(1+2)/2=1.5
。
举例1:
一组数据:34, 39, 41, 28, 33,问33的秩
因为28<33<34<39<41,所以33的秩为2
举例2:
一组数据:0, 1, 1, 1, 2, 3, 3,问各个数的秩是多少
各个数对应的位序为:1, 2, 3, 4, 5, 6, 7
3个1的秩为(2+3+4)/3=3
2个3的秩为(6+7)/2=6.5
Rank-sum / 秩和
秩和,是指对秩的求和,也就是将排名进行求和。秩和也是秩和检验构建的统计量。
举例1:
一组数据:34, 39, 41, 28, 33
秩和:T=1+2+3+4+5=15
举例2:
一组数据:0, 1, 1, 1, 2, 3, 3
秩和:T=1+2+3+4+5+6+7=28
这里有人可能会觉得疑惑,第二个例子中的秩为位序的平均值,不应该这样相加。其实,位序的均值相加,与原始值相加,结果是相同的。
举例3:
实验室测得两组各6人的尿蛋白,结果如下:
这个数据跟之前的两个例子有2点区别,首先,它是有两组数据;第二,它的观察值不是数值型资料,而是等级资料。秩和检验是非参数检验,不关注具体数值,只关注观测值大小排序。所以等级变量符合分析的要求。那么如何求这两组比较的数据的秩和呢?
首先,对这两组数据进行统一编秩。两组数据混合在一起就得到了12个观察值,也就得到了12个排名:
因为数据里有相同值,所以还需要对相同值的排名取平均。这样之后,就得到了每个观察值的秩。
而每组的秩和,就是每组内观察值对应秩的求和。经过计算,得到每组的秩和是这样的:
这就是秩和检验的统计量T,这里有两组秩和,因为两组总的样本量是确定的,所以总秩和是一个定值,知道了一组秩和,另一组秩和也是确定的。我们取样本量较小的那一组秩和进行分析。
P值的确定
还记得警察抓小偷的例子吗?(秩和检验 (1))类比到秩和检验,如果零假设成立的话,两个总体分布位置是相同的。那么这两组观测值的分布位置也应该大体相同,它们的秩和不应相差太大。
这里的相差大小如何表示?用在零假设成立的前提下获取当前的统计量值的概率来表示。总体分布位置相同,两组秩和如果差值越大,那么发生的概率就越小。如果概率小于0.05,这就是一件小概率事件。根据小概率原理,可以认为这件事是不可能发生的,于是我们有理由认为零假设不成立。知道统计量后,下面就是P值的确定了。
P值的确定主要分为不使用统计软件和使用统计软件。使用统计软件可以精确计算出统计量对应P值得大小;不适用统计软件,可以通过与特定概率对应的界值比较来确定P值的范围,从而给出统计结论和专业结论。目前不使用统计软件的情况只出现在统计相关的考试中,日常工作中,都会使用统计软件。
不使用统计软件,通常有两种方法:查界值表法和正态近似法。
查界值表法
秩和检验的查界值表法,是通过判断所得统计量是否在某个范围内,如果在范围内,它对应的P值是大于检验水准的,也就是接受零假设;如果不在范围之内,它对应的P值是小于检验水准的,我们就有理由拒绝零假设,认为两组的总体位置分布是不同的。以下界值表来源于教材截图:
以上面尿蛋白为例,n1=6,n2=6,选取双侧0.05的检验水准,对应的范围是26--52。而我们所获得两组秩和25和53都不在这个范围内,所以P值小于0.05。即,在双侧0.05的检验水准下,拒绝零假设,接受备择假设,认为两组尿蛋白等级分布不同。
正态近似法
前面展示的秩和检验的界值表中,两组的样本量都是不超10的。如果超过10,就无法使用界值表法了,这时候再不使用计算机的情况下,可以使用正态近似法。
当两组样本量至少有一组大于10时,T分布已经接近均数为n1(N+1)/2,方差为n1n2(N+1)/2的正态分布,可按以下公式直接计算u值,按标准正态分布界定P值并做出推断结论。
将T=25,n1=6, n2=6 代入公式得u=2.1617>1.96,所以P<0.05。在双侧0.05的检验水准下,拒绝零假设,接受备择假设,认为两组尿蛋白等级分布不同。
注:公式中的0.5为连续性校正数,因为u分布是连续的,而T分布是不连续的。在SAS官方文档中,有对连续性矫正进行描述:
Continuity Correction
PROC NPAR1WAY uses a continuity correction for the asymptotic two-sample Wilcoxon and Siegel-Tukey tests by default. You can remove the continuity correction by specifying the CORRECT=NO option. PROC NPAR1WAY incorporates the continuity correction when computing the standardized test statistic z by subtracting 0.5 from the numerator if it is greater than 0. If the numerator is less than 0, PROC NPAR1WAY adds 0.5. Some sources recommend a continuity correction for nonparametric tests that use a continuous distribution to approximate a discrete distribution. (See Sheskin 1997.)
If you specify CORRECT=NO, PROC NPAR1WAY does not use a continuity correction for any test.
使用统计软件——SAS
我们日常工作使用的统计软件是SAS,SAS中使用NPAR1WAY过程步,实现Wilcoxon秩和检验。以尿蛋白的数据为例,代码如下:
***Read the data;
data test;
input group $ grade @@;
datalines;
A 1 A 2 A 3 A 3 A 3 A 4
B 3 B 4 B 4 B 4 B 5 B 5
;
run;
***Rank-sum test;
proc npar1way data = test wilcoxon;
class group;
var grade;
run;
SAS代码运行后,输出结果如下。结果分为两个部分,分别为基本的统计描述与秩和检验结果。秩和检验分为Wilcoxon双样本检验和Kruskal-Wallis 检验,本例为两组独立样本资料,所以要看Wilcoxon 双样本检验;如果是多组独立样本,需要看的是Kruskal-Wallis 检验结果。
P=0.0247<0.05。在双侧0.05的检验水准下,拒绝零假设,接受备择假设,认为两组尿蛋白等级分布不同。
SAS编程工作中,还需要提取秩和检验的P值,按照TFL Shell的布局,经过整理后,放置到合适的位置。获取SAS程序中获取秩和检验的P值,一般有两种方法:
***1;
ods output WilcoxonTest = wt1;
proc npar1way data = test wilcoxon;
class group;
var grade;
run;
ods output close;
***2;
proc npar1way wilcoxon data =test;
class group;
var grade;
output out = wt2 wilcoxon;
run;
两者输出的数据集如下,两种方法输出的变量名称以及保留的小数位数也差异,编程的时候需要注意。
校正问题
我们可以看到,正态近似法运算得出的u=2.1617,而SAS统计软件输出的z=-2.2458。这两个数的绝对值应该是相同的,为什么会有这样的差异呢?我在教科书中发现了这样的描述:
对应到尿蛋白数据中,有4个观察值为“+”,有4个观察值为“++”,有2个观察值为“+++”,所以对应的t值分别为4, 4, 2,重复值占比为83.3%(10/12)。代入公式,C= 0.927739,进而计算出校正的u=2.2443,这个跟软件计算出的z值非常接近了,但还是有差异。
我用教科书上的数据,进行验证了下:
以下应用代码验证:
***Read the data;
data test2;
input group $ grade freq @@;
datalines;
A 1 11 A 2 65 A 3 83 A 4 23
B 1 12 B 2 51 B 3 98 B 4 60
;
run;
***Rank-sum test;
proc npar1way data = test2 wilcoxon;
class group;
var grade;
freq freq;
run;
SAS运行结果如下,
教科书中,相同秩次数过多,校正后的值为3.5961, SAS结果中显示的值为-3.5960。可以推断,SAS程序运行是默认相同秩次过多的校正的。但是,我一时没有在官方文档中发现控制这个校正的选项。
我在项目TFL Shell中,发现了以下这句话,这里的“multiplicity adjustment”/多重性调整,应该是指在相同观察值过多的情况下所进行的校正。我在参考的代码中没有发现对应这个校正的选项代码。由于我们有效性指标是试验室测得的连续性观察值,出现相同观察值的可能性很低,所以SAS“默认的校正”=不进行校正。以上只是我的一些推测。
感谢阅读!若有疑问,欢迎评论区留言讨论。