Scipy的ttest_ind置换检验结果为何受equal_var参数影响?
问题原理解释
你观察到的差异核心原因是scipy的ttest_ind置换检验模式并没有使用「两组均值差」作为检验统计量,而是依然沿用了普通t检验对应的统计量逻辑,equal_var参数会直接决定统计量的计算方式,具体逻辑如下:
- 当你设置
equal_var=True时,无论是否启用置换检验,函数使用的检验统计量都是合并方差的学生t检验统计量:t = (样本1均值 - 样本2均值) / (合并标准差 * sqrt(1/样本1量 + 1/样本2量)) - 当你设置
equal_var=False时,使用的是韦尔奇t检验的统计量,不会合并两组方差:t = (样本1均值 - 样本2均值) / sqrt(样本1方差/样本1量 + 样本2方差/样本2量)
置换检验的执行流程只是把「理论t分布」替换成了「置换抽样生成的经验分布」:每次将所有数据随机拆分后,都会用你指定的equal_var规则计算对应的t统计量,最终p值是实际观测t值在所有置换生成的t值中的分位值。因为两个场景下的统计量计算规则本身不同,所以最终得到的p值自然会有差异。
如果你需要完全不受方差假设影响、直接用均值差作为统计量的置换检验,可以自己调用scipy.stats.permutation_test自定义统计量为两组均值差,这时候就不会受到类似equal_var参数的干扰。
内容的提问来源于stack exchange,提问作者Braden Anderson
相关产品推荐
相关产品推荐

