使用permutation_test时出现维度不匹配ValueError问题求助
问题原因及解决办法
首先,你存在两个核心问题:
置换检验的对象用错了:
permutation_test是针对原始观测数据做置换检验的工具,而非bootstrap生成的众数抽样分布(sampleModes2、sampleModes3)。bootstrap的作用是估计统计量的抽样分布,置换检验则是通过打乱原始数据的分组来检验两组数据的统计量差异是否显著,二者的逻辑和输入对象完全不同。输入格式与测试函数不匹配:错误提示里的
(2,1000)和(2,)形状冲突,说明你可能把两个(1000,)的数组按行堆叠成二维数组传给了permutation_test,或者你的测试函数没有正确处理输入——permutation_test要求测试函数返回单个标量统计量(比如两组众数的差值),如果返回数组就会触发广播错误。
修正步骤
如果你想检验matrix2和matrix3的众数是否存在显著差异,正确做法是直接用原始数据调用permutation_test:
- 定义返回标量的测试统计量函数:
import scipy.stats as stats from scipy.stats import permutation_test def mode_diff_stat(x, y): # 计算两组数据的众数并返回差值 mode_x = stats.mode(x.flatten(), keepdims=False)[0] mode_y = stats.mode(y.flatten(), keepdims=False)[0] return mode_x - mode_y
- 传入原始数据执行置换检验:
# 将matrix2和matrix3展平为一维数组后传入 result = permutation_test( (matrix2.flatten(), matrix3.flatten()), mode_diff_stat, n_resamples=1000 )
如果非要基于已有的bootstrap抽样分布做检验(逻辑上不严谨,不推荐),此时应该用你已经完成的KS检验来对比两个抽样分布的差异,而非置换检验。
内容的提问来源于stack exchange,提问作者Anthony Petruzzio
相关产品推荐
相关产品推荐

