假设检验是根据一定的假设条件,由样本推断总体的一种方法。
假设检验的基本思想是小概率反证法思想,小概率思想认为小概率事件在一次试验中基本上不可能发生,在这个方法下,我们首先对总体作出一个假设,这个假设大概率会成立,如果在一次试验中,试验结果和原假设相背离,也就是小概率事件竟然发生了,那我们就有理由怀疑原假设的真实性,从而拒绝这一假设。
假设检验步骤:
选取原有理论作为原假设H0,新理论作为备择假设H1.
选择合适的检验统计量取决于数据的类型、分布、样本大小以及研究问题的性质。以下是一些常见的检验统计量及其适用情况:
- Z检验:
- 适用于大样本(通常n > 30)或已知总体标准差σ的情况。
- 用于检验单个总体均值的假设,或者两个独立样本均值差的假设(当两个总体方差相等且已知时)。
- 假设数据服从正态分布或近似正态分布。
- t检验:
- 适用于小样本(通常n ≤ 30)或总体标准差σ未知的情况。
- 包括单样本t检验(检验单个总体均值)、独立样本t检验(检验两个独立样本均值差)和配对样本t检验(检验同一组对象在不同条件下的均值差)。
- 假设数据服从正态分布或近似正态分布。
- 卡方检验(χ²检验):
- 用于检验分类变量(如性别、血型等)的观察频数与期望频数之间的差异。
- 适用于多组频数数据的比较,如拟合优度检验(检验实际分布与理论分布的差异)和独立性检验(检验两个分类变量是否独立)。
- 不要求数据服从正态分布,但要求样本量足够大,以保证每个类别的频数不小于5。
- F检验:
- 主要用于方差分析(ANOVA),检验两个或多个总体方差是否相等。
- 也用于比较两个或多个独立样本的方差是否相等(F检验的方差齐性检验)。
- 假设数据服从正态分布或近似正态分布。
在选择合适的检验统计量时,需要考虑以下因素:
- 数据类型:是连续型数据还是分类数据?
- 样本大小:是大样本还是小样本?
- 总体参数是否已知:如总体均值和方差是否已知?
- 数据分布:是否服从正态分布或近似正态分布?
- 研究问题的性质:是检验均值、比例、方差还是其他统计量?
下面是用python相关库的具体实现方法
t 检验(Student's t-test)
用于比较两组数据(通常是样本均值)是否有显著差异。
python复制代码
from scipy import stats | |
# 假设我们有两个样本 | |
sample1 = [1, 2, 3, 4, 5] | |
sample2 = [5, 6, 7, 8, 9] | |
# 使用 scipy 的 ttest_ind 进行两独立样本 t 检验 | |
t_statistic, p_value = stats.ttest_ind(sample1, sample2) | |
print(f"t statistic: {t_statistic}") | |
print(f"p value: {p_value}") |
z 检验(Z-test)
对于大样本或已知总体标准差的情况,可以使用 z 检验。但是,SciPy 没有直接提供 z 检验的函数,但你可以手动计算或使用正态分布函数进行近似。
python复制代码
from scipy.stats import norm | |
# 假设你有一个样本均值和总体标准差,以及你希望比较的总体均值 | |
sample_mean = 5.5 | |
population_mean = 5 | |
population_std = 1 | |
n = len(sample1) # 假设这是你的样本大小 | |
# 计算 z 分数 | |
z_score = (sample_mean - population_mean) / (population_std / np.sqrt(n)) | |
# 计算 p 值(双尾) | |
p_value = 2 * (1 - norm.cdf(abs(z_score))) | |
print(f"z score: {z_score}") | |
print(f"p value: {p_value}") |
卡方检验(Chi-square test)
用于检验两个分类变量是否独立。在 SciPy 中,可以使用 chi2_contingency
或 chisquare
函数。
python复制代码
from scipy.stats import chi2_contingency | |
# 假设你有一个观察频数表 | |
observed = [[10, 10, 20], [20, 20, 20]] | |
chi2, p, dof, expected = chi2_contingency(observed) | |
print(f"chi-square statistic: {chi2}") | |
print(f"p value: {p}") |
- ANOVA(方差分析)
用于比较两组或多组数据的均值是否有显著差异。
python复制代码
from scipy.stats import f_oneway | |
# 假设你有三个样本 | |
sample1 = [1, 2, 3, 4, 5] | |
sample2 = [5, 6, 7, 8, 9] | |
sample3 = [9, 10, 11, 12, 13] | |
# 使用 f_oneway 进行单因素方差分析 | |
f_stat, p_value = f_oneway(sample1, sample2, sample3) | |
print(f"F statistic: {f_stat}") | |
print(f"p value: {p_value}") |
请注意,上述示例中的 p 值都是双尾的。如果你想要单尾的 p 值,你可能需要相应地调整计算方式。此外,在解释 p 值时,通常认为如果 p 值小于某个显著性水平(如 0.05),则拒绝原假设,认为两组数据有显著差异。