wilcox.test()结值处理规则、默认排秩方法及Holm校正相关咨询
pairwise.wilcox.test()结值警告相关问题解答 在含大量结值的数据集上运行pairwise.wilcox.test()时,会出现如下警告:
Warning in wilcox.test.default(xi, xj, paired = paired, ...) : cannot compute exact p-value with ties
针对相关技术问题的解答如下:
1. wilcox.test()对结值的处理规则
结值指数据集中存在多个取值完全相等的观测值,函数对结值的处理逻辑如下:
- 无结值时,函数可以基于秩次的排列分布计算精确p值;
- 存在结值时,原本的精确p值计算逻辑不再成立(结值会打破秩次的唯一排列特性,无法枚举所有等可能的秩次组合),函数会自动切换为正态近似法计算p值,同时抛出上述警告。该警告不属于运行错误,仅提示当前p值为近似计算结果;
- 排秩阶段遇到结值时,函数不会给相等的观测值分配不同秩次,而是统一分配结值覆盖位置的平均秩次;如果开启默认的连续性校正(
correct = TRUE),近似计算p值时还会针对结值带来的方差偏差做校正,提升近似结果的准确性。
2. 默认排秩方法
函数默认采用升序平均秩法排秩:
- 先将参与检验的所有观测值按数值从小到大排序,每个观测值对应的排序位置为原始秩次;
- 若遇到取值相等的结值,计算这些结值占据的所有原始秩次的算术平均值,将该平均值作为这一组结值的统一秩次。
举个简单例子:观测值序列[2,5,5,7]排序后位置依次为1、2、3、4,两个相等的5占据了2、3两个位置,因此两个5的秩次统一为(2+3)/2=2.5,2的秩次为1,7的秩次为4。
3. "P value adjustment method: holm"的具体含义
这是pairwise.wilcox.test()做多组两两比较时,默认采用的多重检验校正方法,作用是控制多次两两比较带来的一类错误(假阳性)膨胀。
Holm校正属于逐步向下的序贯校正方法,逻辑为:
- 先把所有两两比较得到的原始p值从小到大排序,记总比较次数为m;
- 排序后第i位的p值,校正后的值为
原始p值 * (m - i + 1); - 若校正后p值大于1则截断为1,同时保证排序靠后的校正p值不会小于前一位的校正p值,避免逻辑矛盾。
和最常用的Bonferroni校正相比,Holm校正的检验效能更高,结果更不容易出现假阴性,同时依然能严格控制整体一类错误水平。
内容的提问来源于stack exchange,提问作者SteveMcManaman
相关产品推荐
相关产品推荐

