【统计检验】方差齐性检验

统计检验前置必做:方差齐性检验|原理+方法+Python实战全攻略

方差齐性检验是进行 t 检验、方差分析(ANOVA)、线性回归 之前必须做的前提检验,用来判断“不同组数据的波动大小是否差不多”。


一、什么是方差齐性?(一句话看懂)

  • 方差:数据的离散程度 / 波动大小
  • 方差齐性:不同组的数据波动程度差不多
  • 方差不齐:有的组很分散,有的组很集中

超简单例子

  • 班级 A:成绩 50~100,波动巨大 → 方差大
  • 班级 B:成绩 75~85,非常集中 → 方差小
    这就叫 方差不齐

二、为什么一定要做方差齐性检验?

因为:
t 检验、方差分析、线性回归 都有一个重要假设:
各组方差相等(方差齐)

如果方差不齐,你直接做检验:
👉 结果会不准、p 值会骗人、结论会错误!

所以:
方差齐性检验 = 统计分析前的“安全检查”


三、3 种最常用方差齐性检验方法

1. F 检验(两组方差比较)

只适用于 两组数据,且数据符合正态分布

公式:
F=S12S22(大方差放分子) F = \frac{S_1^2}{S_2^2} \quad(大方差放分子) F=S22S12(大方差放分子)

  • H0:方差相等
  • H1:方差不等

特点:对正态性非常敏感。


2. Bartlett 检验(多组方差比较)

适用于 3 组及以上,但依然要求数据正态

原理:基于对数方差和卡方分布。
特点:速度快,但偏离正态就容易误判


3. Levene 检验(最推荐、最稳健)

最常用、最实用、最靠谱
✅ 不严格要求正态分布
✅ 两组、多组都能用
✅ 受极端值影响小

原理:计算每个数据到均值或中位数的距离,再做方差分析。


四、方法选择总结(直接照这个选)

情况推荐方法
两组数据 + 正态F 检验
多组数据 + 正态Bartlett 检验
任意组数 + 不确定正态Levene 检验(首选)

五、判断规则(一看就会)

给定显著性水平 α=0.05:

  • p < 0.05 → 拒绝 H0 → 方差不齐
  • p ≥ 0.05 → 不拒绝 H0 → 方差齐

六、Python 完整实战(可直接运行)

我们模拟 3 组成绩,方差明显不同,然后做检验。

1. 导入库 + 生成数据

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from scipy import stats

# 固定随机种子
np.random.seed(42)

# 生成3组数据(方差明显不同)
group_A = np.random.normal(loc=75, scale=5, size=30)   # 波动小
group_B = np.random.normal(loc=78, scale=8, size=30)   # 波动中
group_C = np.random.normal(loc=80, scale=12, size=30)  # 波动大

# 构建DataFrame
df = pd.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(x='Group', y='Score', data=df, palette='Set2')
sns.swarmplot(x='Group', y='Score', data=df, color='black', alpha=0.6)
plt.title('三组成绩分布对比', fontsize=14)
plt.grid(alpha=0.3)
plt.show()

能明显看到:C 组最分散,A 组最集中。


3. 方差齐性检验(核心代码)

# Bartlett 检验(适合正态)
bartlett_stat, bartlett_p = stats.bartlett(group_A, group_B, group_C)

# Levene 检验(最推荐,基于中位数)
levene_stat, levene_p = stats.levene(group_A, group_B, group_C, center='median')

print("===== 方差齐性检验结果 =====")
print(f"Bartlett 统计量: {bartlett_stat:.4f}, p值: {bartlett_p:.4f}")
print(f"Levene  统计量: {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(x='Group', y='Score', data=df, estimator=np.var, palette='bright')
plt.title('各组成绩方差对比', fontsize=14)
plt.ylabel('Variance')
plt.grid(alpha=0.3, axis='y')
plt.show()

6. 自动结论输出

print("\n===== 最终结论 =====")
if bartlett_p < 0.05:
    print("Bartlett:方差不齐 ❌")
else:
    print("Bartlett:方差齐 ✅")

if levene_p < 0.05:
    print("Levene:方差不齐 ❌")
else:
    print("Levene:方差齐 ✅")

七、结果怎么解读?

你会看到类似输出:

Bartlett p值: 0.0002
Levene  p值: 0.0015

< 0.05
方差不齐


八、方差不齐怎么办?(解决方案)

如果检验显示方差不齐,你可以:

  1. ✅ 使用 Welch t 检验(不要求方差齐)
  2. ✅ 使用 Welch ANOVA
  3. ✅ 数据变换(log、根号等)
  4. ✅ 使用非参数检验(Kruskal-Wallis)

九、方差齐性检验总结(背诵版)

  1. 是 t 检验、ANOVA 必做前置检验
  2. 检验各组波动是否差不多
  3. Levene 检验最稳健,优先用
  4. p < 0.05 → 方差不齐
  5. 不齐就换稳健方法,不要硬做普通 t / ANOVA
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeepModel

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值