Skip to content

假设检验

假设检验是推断统计的核心,用于判断样本数据是否支持关于总体的假设。

基本概念

原假设和备择假设

  • 原假设 (H₀): 通常是我们想要拒绝的假设
  • 备择假设 (H₁): 我们想要支持的假设

显著性水平

python
alpha = 0.05  # 常用的显著性水平

p 值

p 值是在原假设为真的情况下,观察到当前数据或更极端数据的概率。

t 检验

单样本 t 检验

python
import scipy.stats as stats
import numpy as np

# 创建数据
data = [10, 20, 30, 40, 50]

# 单样本 t 检验(检验均值是否等于 30)
t_stat, p_value = stats.ttest_1samp(data, 30)
print(f"t 值: {t_stat}, p 值: {p_value}")

# 判断结果
alpha = 0.05
if p_value < alpha:
    print("拒绝原假设")
else:
    print("不能拒绝原假设")

独立样本 t 检验

python
# 创建两组数据
data1 = [10, 20, 30, 40, 50]
data2 = [20, 30, 40, 50, 60]

# 独立样本 t 检验
t_stat, p_value = stats.ttest_ind(data1, data2)
print(f"t 值: {t_stat}, p 值: {p_value}")

配对样本 t 检验

python
# 创建配对数据
before = [100, 110, 120, 130, 140]
after = [95, 105, 115, 125, 135]

# 配对样本 t 检验
t_stat, p_value = stats.ttest_rel(before, after)
print(f"t 值: {t_stat}, p 值: {p_value}")

方差分析

单因素方差分析

python
# 创建多组数据
group1 = [10, 20, 30]
group2 = [20, 30, 40]
group3 = [30, 40, 50]

# 单因素方差分析
f_stat, p_value = stats.f_oneway(group1, group2, group3)
print(f"F 值: {f_stat}, p 值: {p_value}")

事后检验

python
from statsmodels.stats.multicomp import pairwise_tukeyhsd
import pandas as pd

# 创建数据框
data = pd.DataFrame({
    'value': [10, 20, 30, 20, 30, 40, 30, 40, 50],
    'group': ['A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C']
})

# Tukey HSD 检验
tukey_result = pairwise_tukeyhsd(endog=data['value'], groups=data['group'], alpha=0.05)
print(tukey_result)

卡方检验

拟合优度检验

python
# 观察频数
observed = [10, 20, 30, 40]

# 期望频数(均匀分布)
expected = [25, 25, 25, 25]

# 卡方拟合优度检验
chi2, p_value = stats.chisquare(observed, expected)
print(f"卡方值: {chi2}, p 值: {p_value}")

独立性检验

python
# 创建列联表
observed = [[10, 20], [20, 10]]

# 卡方独立性检验
chi2, p_value, dof, expected = stats.chi2_contingency(observed)
print(f"卡方值: {chi2}, p 值: {p_value}, 自由度: {dof}")

非参数检验

Mann-Whitney U 检验

python
# 创建数据
data1 = [10, 20, 30]
data2 = [40, 50, 60]

# Mann-Whitney U 检验
u_stat, p_value = stats.mannwhitneyu(data1, data2)
print(f"U 值: {u_stat}, p 值: {p_value}")

Kruskal-Wallis 检验

python
# 创建数据
data1 = [10, 20, 30]
data2 = [20, 30, 40]
data3 = [30, 40, 50]

# Kruskal-Wallis 检验
h_stat, p_value = stats.kruskal(data1, data2, data3)
print(f"H 值: {h_stat}, p 值: {p_value}")

注意事项

  1. 假设条件: 不同检验方法有不同的假设条件
  2. 样本量: 样本量较小时检验功效较低
  3. 多重比较: 进行多次检验时需要调整显著性水平
  4. 效应量: 除了统计显著性,还要考虑实际效应大小