假设检验
假设检验是推断统计的核心,用于判断样本数据是否支持关于总体的假设。
基本概念
原假设和备择假设
- 原假设 (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}")注意事项
- 假设条件: 不同检验方法有不同的假设条件
- 样本量: 样本量较小时检验功效较低
- 多重比较: 进行多次检验时需要调整显著性水平
- 效应量: 除了统计显著性,还要考虑实际效应大小