logo

统计假设检验

wangzf / 2023-07-08


目录

假设检验

假设检验(Hypothesis Test)是由 K.Pearson 于 20 世纪初提出的, 之后由费希尔进行了细化,并最终由 Neyman 和 E.Pearson 提出了较完整的假设检验理论。

假设检验作为统计学的一项重要模块,是用来判断样本与总体的差异是由抽样误差引起还是本质差别造成的统计推断方法。

假设检验需要事先对总体参数或分布形式做出某种假设,然后利用样本信息来判断原假设是否成立。 一般假设检验分为参数检验和非参数检验,其运用逻辑上的反证法,依据统计上的小概率原理来实现, 假设检验分为原假设 $H0$ 和备择假设 $H1$

统计显著性

显著性、统计显著性(Statistical Significance)是指零假设为真的情况下拒绝零假设所要承担的风险水平, 又叫概率水平,或者显著水平(Significant Level)。

显著性的含义是指两个群体的态度之间的任何差异是由于系统因素而不是偶然因素(采样等)的影响。 假定控制了可能影响两个群体之间差异的所有其他因素,因此,余下的解释就是所推断的因素, 而这个因素不能够 100% 保证,所以有一定的概率值,叫显著性水平。

总的来说,它表示群体之间得以相互区别的能力。在统计假设检验中,公认的小概率事件的概率值被称为统计假设检验的显著性水平, 对同一量,进行多次计量,然后算出平均值。

假设检验的基本思想

假如实验结果与原假设 $H$ 发生矛盾就拒绝原假设 $H$,否则就接受原假设 $H$

假如对某个指标 $\theta$ 进行检测,检测的临界值为 $\theta_0$, 即如果 $\theta \geq \theta_0$ 则认为指标 $\theta$ 合格; 如果 $\theta < \theta_0$,则认为指标 $\theta$ 不合格。

因此命题 “$\theta \geq \theta_0$” 将涉及如下两个参数集合:

$$\Theta_0 = \{\theta:\theta \geq \theta_0\}$$

$$\Theta_1 = \{\theta:\theta < \theta_0\}$$

在统计学中,这两个非空不相交的参数集合都称作统计假设,简称假设。 通过样本对一个假设作出"对"或"不对"的具体判断规则就称为该假设的一个检验或检验法则。

检验的结果若是否定该命题,则称拒绝这个假设,否则就称为接受该假设。 若假设可用一个参数的集合表示,该假设检验问题称为参数假设检验, 否则称为非参数假设检验问题,上面的问题就是一个参数假设检验问题, 而对假设"总体为正态"作出检验的问题就是一个非参数假设检验问题。

假设检验的基本步骤

建立假设

假设的基本形式:

假设的类别:

在假设检验中,通常将不宜轻易加以否定的假设作为原假设

选择检验统计量并给出拒绝域形式

拒绝域:对于一个假设的检验就是指这样一个法则:当有了具体的样本后, 按照该法则就可以决定是接受 $H_0$ 还是拒绝 $H_0$, 即检验就等价于把样本空间划分为两个互不相交的部分 $W$$\bar{W}$, 当样本属于 $W$ 时,拒绝 $H_0$;否则接受 $H_0$, 于是,称 $W$ 为该检验的拒绝域,而称 $\bar{W}$ 为接受域

检验统计量:由样本对原假设进行检验总是通过一个统计量完成的,该统计量称为检验统计量

选择显著性水平

由于样本是随机的,当应用某种检验做判断时,可能做出正确的判断,也可能做出错误的判断

$$g(\theta)=\left\{ \begin{array}{l} \alpha(\theta) & & {\theta\in\Theta_0}\\ 1-\beta(\theta) & & {\theta\in\Theta_1}\\ \end{array} \right.$$

$$\left\{ \begin{array}{l} \alpha(\theta)=g(\theta) & & {\theta\in\Theta_0}\\ \beta(\theta)= 1-g(\theta) & & {\theta\in\Theta_1}\\ \end{array} \right.$$

上面的函数说明,在样本量给定的条件下,$\alpha$$\beta$ 中一个减小必导致另一个增大, 既然不能同时控制一个检验的犯第一类、第二类错误的概率,只能采取折中方案, 通常的做法是仅限制犯第一类错误的概率,也就是费希尔的显著性检验.

抽样分布

常用假设检验

正态性检验

Shapiro-Wilk Test

Shapiro-Wilk Test 用于检验样本数据是否来自服从某个正态分布的总体。 在实际应用中,Shapiro-Wilk Test 被认为是一个可靠的正态性检验, 但是也有人认为该检验更适用于较小的数据样本(数千个观测值以内)。

from scipy.stats import shapiro

# 置信水平
alpah = 0.05
# 数据
data = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869,
]
# 假设检验
stat, p = shapiro(data)
print(f"stat={stat}%.3f, p={p}%.3f")

# 做出决定
if p > alpah:
    print("不能拒绝原假设,样本数据服从正态分布")
else:
    print("拒绝原假设,样本数据不服从正态分布")

D’Agostino’s K2 Test

D’Agostino’s K2 Test,用于检验样本数据是否来自服从正态分布的总体。是通过计算样本数据的峰度和偏度, 来判断其分布是否偏离正态分布。偏度是对数据分布对称性的测度,衡量数据分布是否左偏或右偏。 峰度是对数据分布平峰或尖峰程度的测度,它是一种简单而常用的正态性统计检验量。

from scipy.stats import normaltest

# 执行水平
alpha = 0.05
# 数据
data = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869,
]
# 假设检验
stat, p = normaltest(data)
print(f"stat={stat}, p={p}")

if p > alpha:
    print("不能拒绝原假设,样本数据服从正态分布")
else:
    print("拒绝原假设,样本数据不服从正态分布")

Anderson-Darling Test

Anderson-Darling Test,用于检验样本数据是否服从某一已知分布。 该检验修改自一种更复杂的非参数的拟合良好的检验统计(Kolmogorov-Smirnov Test)。 SciPy 中的 anderson() 函数实现了Anderson-Darling Test,函数参数为样本数据及要检验的分布名称, 默认情况下,为 'norm'正态分布,还支持对 'expon' 指数分布、'logistic' 分布,以及 'gumbel' 耿贝尔分布的检验, 它会返回一个包含不同显著性水平下的p值的列表,而不是一个单一的 $p$ 值,因此这可以更全面地解释结果

from scipy.stats import anderson

# 显著性水平
alpha = 0.05
# 样本数据
data = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869
]
# 假设检验
result = anderson(data)
pritn(f"stat={result.statistic}, p={result.critical_values}")

for i in range(len(result.critical_values)):
    sl, cv = result.significance_level[i], result.critical_values[i]
    if result.statistic < result.critical_values[i]:
        print(f"显著性水平为 {sl/100:.3f}时,p 值为 {cv:.3f},不能拒绝原假设,样本数据服从正态分布")
    else:
        print(f"显著性水平为 {sl/100:.3f}时,p 值为 {cv:.3f},拒绝原假设,样本数据不服从正态分布")

相关性检验

Pearson 相关系数

Pearson 相关系数,用于检验两样本数据之间线性关系的强度。 该检验将两个变量之间的协方差进行归一化处理以给出可解释的分数,为一个介于 -1 到 1 之间的值, -1 表示完全负相关,1 表示完全正相关,0 表示没有相关性。

from scipy.stats import pearsonr


# 显著性水平
alpha = 0.05
# 数据
data1 = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869
]
data2 = [
    0.353, 3.517, 0.125, -7.545, -0.555, 
    -1.536, 3.350, -1.578, -3.537, -1.579
]
# 假设检验
stat, p = pearsonr(data1, data2)
print(f"stat={stat:.3f}, p={p:.3f}")

if p > alpha:
    print("两个变量相互独立")
else:
    print("两个变量可能存在线性相关关系")

Spearman 等级相关系数

Spearman 相关,用于检验两变量是否具有单调关系。当两变量因非线性关系相关,或者不服从正态分布时, Spearman 相关系数可以用来反映变量间的相关性强度。如果存在线性关系,也可以使用这种方法来检验, 但是可能导致计算出的相关系数较低。Spearman 不是使用样本数据本身的协方差和标准差来计算相关系数的, 而是根据样本值的相对秩次来计算统计量,这是非参数统计中常用的方法。

from scipy.stats import spearmanr

# 显著性水平
alpha = 0.05
# 数据
data1 = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869
]
data2 = [
    0.353, 3.517, 0.125, -7.545, -0.555, 
    -1.536, 3.350, -1.578, -3.537, -1.579
]
# 假设检验
stat, p = spearmanr(data1, data2)
print(f"stat={stat:.3f}, p={p:.3f}")
# 做出决定
if p > 0.05:
    print("两个变量相互独立")
else:
    print("两个变量可能存在相关关系")

Kendall 等级相关

用于检验两变量是否具有单调关系

from scipy.stats import kendalltau

# 显著性水平
alpha = 0.05
# 数据
data1 = [
    0.873, 2.817, 0.121, -0.945, -0.055, 
    -1.436, 0.360, -1.478, -1.637, -1.869
]
data2 = [
    0.353, 3.517, 0.125, -7.545, -0.555, 
    -1.536, 3.350, -1.578, -3.537, -1.579
]
# 假设检验
stat, p = kendalltau(data1, data2)
print(f"stat={stat:.3f}, p={p:.3f}")
# 做出决定
if p > alpha:
    print("两变量相互独立")
else:
    print("两变量可能存在相关关系")

Chi-square Test

Chi-Squared Test,用于检验两分类变量是否相关,属于非参数检验的范畴。 卡方检验的零假设是一个分类变量的实际观测频数与该分类变量的理论期望频数相吻合。 检验统计量服从卡方分布。实际观测值与理论推断值之间的偏离程度就决定卡方值的大小, 如果卡方值越大,二者偏差程度越大;反之二者偏差越小;若两个值完全相等时,卡方值就为 0, 表明理论值完全符合。

from scipy.stats import chi2_contingency
from scipy.stats import chi2

# 列联表
table = [
    [10, 20, 30],
    [6, 9, 17],
]
print(f"列联表:\n{table}")
# 假设检验
stat, p, dof, expected = chi2_contingency(table)
print(f"自由度 dof: {dof}")
print(f"期望分布:\n{expected}")

# 采用统计量推断
prob = 0.95
critical = chi2.ppf(prob, dof)

参数检验

非参数检验

时间序列平稳性检验

Q-Q 图

参考