目录
假设检验(Hypothesis Testing)是数理统计学中根据一定假设条件由样本推断总体的一种方法。事先对总体参数或分布形式作出某种假设,然后利用样本信息来判断原假设是否成立。具体来说,假设检验的基本步骤包括:
提出假设:通常包括原假设(H0)和备择假设(H1)。原假设是研究者想要拒绝的假设,而备择假设则是研究者希望接受的假设。
确定适当的检验统计量:根据样本数据计算出一个统计量,这个统计量在原假设为真时具有特定的分布。
规定显著性水平:即小概率事件的标准,通常取α=0.01、0.05或0.10等。
计算检验统计量的值:根据样本数据计算出检验统计量的实际值。
作出统计决策:根据检验统计量的值和显著性水平,判断原假设是否成立。如果检验统计量的值落在拒绝域内,则拒绝原假设;否则,接受原假设。
假设检验的基本原理是小概率原理,即小概率事件在一次随机试验中几乎不可能发生。如果原假设为真,那么不利于或不能支持这一假设的事件(即小概率事件)在一次试验中几乎不可能发生。然而,如果这样的事件竟然发生了,那么就有理由怀疑原假设的真实性,从而拒绝原假设。
此外,根据研究者感兴趣的备择假设的内容不同,假设检验还可分为单侧检验(单尾检验)和双侧检验(双尾检验),而单侧检验又分为左侧检验和右侧检验。
请注意,假设检验的结果可能会受到样本容量、样本选择、数据分布等因素的影响,因此在进行假设检验时需要谨慎考虑这些因素,并结合实际情况做出合理的决策。
1、单样本Z检验
单样本Z检验是一种用于检验单个样本的平均值是否等于某个已知值(通常是某个理论值或假设值)的统计方法。
import numpy as np
from scipy import stats
# 假设我们有一个样本数据
sample_data = np.array([0.497, 0.506, 0.518, 0.524,0.498,0.511,0.520,0.515,0.512])
# 假设检验的零假设(H0)通常是样本平均值等于某个特定值,比如3
mu_0 = 0.5
# 已知的总体标准差
known_population_std = 0.015
# 计算样本均值
sample_mean = np.mean(sample_data)
# 计算样本量
n = len(sample_data)
# 计算Z统计量
z_statistic = (sample_mean - mu_0) / (known_population_std / np.sqrt(n))
# 计算双尾检验的p值
p_value = 2 * (1 - stats.norm.cdf(abs(z_statistic)))
print(f"Z统计量: {z_statistic}")
print(f"p值: {p_value}")
# 根据p值与显著性水平α比较,做出决策
alpha = 0.05
if p_value < alpha:
print("拒绝零假设,认为样本平均值不等于给定的值")
else:
print("接受零假设,认为样本平均值等于给定的值")
Z统计量: 2.244444444444471
p值: 0.024803819632255975
拒绝零假设,认为样本平均值不等于给定的值
2、单样本t检验(One-Sample T-Test)
检验单个样本的平均值是否等于给定的某个值。
import scipy.stats as stats
# 假设我们有一个样本数据
sample_data = [1.2, 2.3, 3.4, 4.5, 5.6]
# 假设检验的零假设(H0)通常是样本平均值等于某个特定值,比如3
mu_0 = 3
# 进行t检验
t_statistic, p_value = stats.ttest_1samp(sample_data, mu_0)
print(f"t统计量: {t_statistic}")
print(f"p值: {p_value}")
# 根据p值与显著性水平α比较,做出决策
alpha = 0.05
if p_value < alpha:
print("拒绝零假设,认为样本平均值不等于3")
else:
print("接受零假设,认为样本平均值等于3")
3、双样本t检验(Two-Sample T-Test)
检验两个独立样本的平均值是否相等。
# 假设有两个独立样本
sample1 = [1.2, 2.3, 3.4, 4.5, 5.6]
sample2 = [2.5, 3.6, 4.7, 5.8, 6.9]
# 进行双样本t检验
t_statistic, p_value = stats.ttest_ind(sample1, sample2)
print(f"t统计量: {t_statistic}")
print(f"p值: {p_value}")
# 根据p值与显著性水平α比较,做出决策
if p_value < alpha:
print("拒绝零假设,认为两个样本平均值不相等")
else:
print("接受零假设,认为两个样本平均值相等")
4、配对样本t检验(Paired T-Test)
检验两个相关或配对样本的平均值差是否等于某个值(通常是0)。
# 假设有两个配对样本
sample1 = [1.2, 2.3, 3.4, 4.5, 5.6]
sample2 = [2.1, 3.2, 4.1, 5.2, 6.3]
# 进行配对样本t检验
t_statistic, p_value = stats.ttest_rel(sample1, sample2)
print(f"t统计量: {t_statistic}")
print(f"p值: {p_value}")
# 根据p值与显著性水平α比较,做出决策
if p_value < alpha:
print("拒绝零假设,认为两个配对样本的平均值差不等于0")
else:
print("接受零假设,认为两个配对样本的平均值差等于0")
5、卡方检验(Chi-Square Test)
用于比较实际观测频数与期望频数之间的差异,常用于检验分类变量。
# 假设有一个分类变量的观测频数
observed = [10, 20, 30, 40]
# 假设有一个期望频数
expected = [15, 15, 30, 20]
# 进行卡方检验
chi2_statistic, p_value, dof, expected_freq = stats.chi2_contingency([observed])
print(f"χ²统计量: {chi2_statistic}")
print(f"p值: {p_value}")
print(f"自由度: {dof}")
print(f"期望频数: {expected_freq}")
# 根据p值与显著性水平α比较,做出决策
if p_value < alpha:
print("拒绝零假设,认为观测频数与期望频数有显著差异")
else:
print("接受零假设,认为观测频数与期望频数无显著差异")
补充:
在假设检验中,P值(Probability value)是一种概率度量,用于表示观察到的数据(或更极端的数据)出现的概率,假设原假设(null hypothesis)为真。P值通常用于确定是否应该拒绝原假设。
更具体地说,P值是在原假设为真的条件下,观察到的样本数据或更极端情况出现的概率。如果P值很小(通常小于0.05或0.01),那么我们可以认为观察到的数据与原假设不一致,因此拒绝原假设。相反,如果P值很大,那么我们倾向于接受原假设,因为观察到的数据与原假设没有显著的不一致性。
需要注意的是,P值不是给定样本结果时原假设为真的概率,而是给定原假设为真时样本结果出现的概率。此外,P值也不是观察到的数据与原假设不一致的概率,而是在原假设为真的情况下观察到更极端数据的概率。
在进行假设检验时,通常会选择一个显著性水平(如0.05或0.01),并将P值与这个显著性水平进行比较。如果P值小于显著性水平,那么我们可以拒绝原假设;否则,我们接受原假设。需要注意的是,P值本身并不告诉我们观察到的数据是否“好”或“坏”,而只是告诉我们观察到的数据与原假设不一致的程度。