【统计检验】方差齐性检验
统计检验前置必做方差齐性检验原理方法Python实战全攻略方差齐性检验是进行t 检验、方差分析ANOVA、线性回归之前必须做的前提检验用来判断“不同组数据的波动大小是否差不多”。一、什么是方差齐性一句话看懂方差数据的离散程度 / 波动大小方差齐性不同组的数据波动程度差不多方差不齐有的组很分散有的组很集中超简单例子班级 A成绩 50~100波动巨大 → 方差大班级 B成绩 75~85非常集中 → 方差小这就叫方差不齐。二、为什么一定要做方差齐性检验因为t 检验、方差分析、线性回归都有一个重要假设✅各组方差相等方差齐如果方差不齐你直接做检验结果会不准、p 值会骗人、结论会错误所以方差齐性检验 统计分析前的“安全检查”三、3 种最常用方差齐性检验方法1. F 检验两组方差比较只适用于两组数据且数据符合正态分布。公式FS12S22大方差放分子 F \frac{S_1^2}{S_2^2} \quad大方差放分子FS22S12大方差放分子H0方差相等H1方差不等特点对正态性非常敏感。2. Bartlett 检验多组方差比较适用于3 组及以上但依然要求数据正态。原理基于对数方差和卡方分布。特点速度快但偏离正态就容易误判。3. Levene 检验最推荐、最稳健✅最常用、最实用、最靠谱✅ 不严格要求正态分布✅ 两组、多组都能用✅ 受极端值影响小原理计算每个数据到均值或中位数的距离再做方差分析。四、方法选择总结直接照这个选情况推荐方法两组数据 正态F 检验多组数据 正态Bartlett 检验任意组数 不确定正态Levene 检验首选五、判断规则一看就会给定显著性水平 α0.05p 0.05 → 拒绝 H0 → 方差不齐p ≥ 0.05 → 不拒绝 H0 → 方差齐六、Python 完整实战可直接运行我们模拟 3 组成绩方差明显不同然后做检验。1. 导入库 生成数据importnumpyasnpimportpandasaspdimportseabornassnsimportmatplotlib.pyplotaspltfromscipyimportstats# 固定随机种子np.random.seed(42)# 生成3组数据方差明显不同group_Anp.random.normal(loc75,scale5,size30)# 波动小group_Bnp.random.normal(loc78,scale8,size30)# 波动中group_Cnp.random.normal(loc80,scale12,size30)# 波动大# 构建DataFramedfpd.DataFrame({Score:np.concatenate([group_A,group_B,group_C]),Group:[A]*30[B]*30[C]*30})2. 可视化箱线图 散点图plt.figure(figsize(10,6))sns.boxplot(xGroup,yScore,datadf,paletteSet2)sns.swarmplot(xGroup,yScore,datadf,colorblack,alpha0.6)plt.title(三组成绩分布对比,fontsize14)plt.grid(alpha0.3)plt.show()能明显看到C 组最分散A 组最集中。3. 方差齐性检验核心代码# Bartlett 检验适合正态bartlett_stat,bartlett_pstats.bartlett(group_A,group_B,group_C)# Levene 检验最推荐基于中位数levene_stat,levene_pstats.levene(group_A,group_B,group_C,centermedian)print( 方差齐性检验结果 )print(fBartlett 统计量:{bartlett_stat:.4f}, p值:{bartlett_p:.4f})print(fLevene 统计量:{levene_stat:.4f}, p值:{levene_p:.4f})4. 查看各组方差print(\n 各组描述统计 )print(df.groupby(Group)[Score].agg([mean,std,var]))5. 方差柱状图plt.figure(figsize(10,5))sns.barplot(xGroup,yScore,datadf,estimatornp.var,palettebright)plt.title(各组成绩方差对比,fontsize14)plt.ylabel(Variance)plt.grid(alpha0.3,axisy)plt.show()6. 自动结论输出print(\n 最终结论 )ifbartlett_p0.05:print(Bartlett方差不齐 ❌)else:print(Bartlett方差齐 ✅)iflevene_p0.05:print(Levene方差不齐 ❌)else:print(Levene方差齐 ✅)七、结果怎么解读你会看到类似输出Bartlett p值: 0.0002 Levene p值: 0.0015都 0.05→方差不齐八、方差不齐怎么办解决方案如果检验显示方差不齐你可以✅ 使用Welch t 检验不要求方差齐✅ 使用Welch ANOVA✅ 数据变换log、根号等✅ 使用非参数检验Kruskal-Wallis九、方差齐性检验总结背诵版是 t 检验、ANOVA 必做前置检验检验各组波动是否差不多Levene 检验最稳健优先用p 0.05 → 方差不齐不齐就换稳健方法不要硬做普通 t / ANOVA