SPSS与Matlab箱线图异常值及百分位数不一致问题咨询
为什么MATLAB boxplot和SPSS Explore的异常值/百分位数结果不一致?
这是个非常典型的统计工具默认算法差异问题,尤其在小样本(比如你提到的5个数据点)情况下,这种差异会被放大,导致结果看起来不一致。我来帮你拆解背后的关键原因和解决方法:
1. 百分位数计算的核心差异
MATLAB和SPSS默认使用的百分位数计算算法完全不同,这是导致Q1、Q3(进而影响IQR和异常值判定)差异的根本原因:
- MATLAB的
boxplot函数默认采用Tukey的箱线图规则,其分位数计算基于quantile函数的Type=7(MATLAB默认设置),逻辑是在(k-1)/(n-1)位置做线性插值。 - SPSS的
Analyze>Descriptive Stats>Explore默认采用加权平均法,对应MATLABquantile函数的Type=6,逻辑是在(k)/(n+1)位置做线性插值。
对于5个数据点的小样本,两种算法的计算结果会有明显差异。比如假设你的数据是[1, 3, 5, 7, 15]:
- MATLAB默认Type=7计算:Q1=2,Q3=6,IQR=4,异常值上限=6+1.5*4=12,15会被判定为异常值;
- SPSS默认算法(MATLAB Type=6)计算:Q1=2.2,Q3=6.8,IQR=4.6,异常值上限=6.8+1.5*4.6=13.7,15同样是异常值,但如果换一组数据(比如
[1,2,3,4,9]),两种算法的异常值阈值就可能出现差异,导致某一个工具判定为异常值,另一个则不判定。
2. 异常值判定的连锁影响
箱线图的异常值判定依赖于1.5*IQR规则,而IQR=Q3-Q1。由于Q1/Q3的计算方式不同,IQR的数值会直接变化,最终导致异常值的判定阈值不同——这就是你看到两者异常值结果不一致的直接原因。
3. 如何让两者结果统一?
如果你需要让MATLAB和SPSS的结果对齐,可以手动指定一致的算法:
- 在MATLAB中匹配SPSS的结果:MATLAB R2020b及以后版本支持
boxplot的'QuantileMethod'参数,使用boxplot(test, 'QuantileMethod', 'exclusive')就能切换到和SPSS默认一致的分位数算法;也可以用quantile(test, [0.25, 0.75], 'Type', 6)手动计算分位数,再自行判断异常值。 - 在SPSS中匹配MATLAB的结果:在Explore对话框中点击
Statistics按钮,找到Percentiles选项,选择Tukey's hinges(这就是MATLAB boxplot默认使用的分位数方法),就能让SPSS的结果和MATLAB默认一致。
总结
本质上不是工具出了问题,而是不同工具为适配不同统计场景,默认选择了不同的计算规范。小样本下这种差异会更直观,只要统一算法就能得到一致的结果。
内容的提问来源于stack exchange,提问作者MCK




