一、概念介绍

检验统计量是统计假设检验的核心。在进行假设检验中,通过计算样本数据的某个统计量得到一个值,该值代表样本数据中可以区分两个假设的差异程度。这个统计量就是检验统计量。

检验统计量通常是用来衡量样本数据与抽样分布中的理论值之间差异的。抽样分布往往是已知的,如果该差异达到一定的临界值,则认为数据支持原假设不成立,否则,就认为数据支持原假设成立。

不同的检验问题需要使用不同的检验统计量,例如,当我们要检验一个总体均值是否等于一个已知常数时,可以使用t检验,其检验统计量就是样本均值与常数的差值除以标准误差。

二、检验统计量的常见类型

1. z检验统计量

z检验统计量是若干次独立采样后,样本平均数与总体平均数之间差异的数量度量。在大样本条件下,将样本平均数减去总体平均数,再除以标准误,得到的值服从标准正态分布。


def z_value(sample_mean, population_mean, std_error):
    return (sample_mean - population_mean) / std_error

2. t检验统计量

t检验统计量基于样本的平均值与总体的平均值之间的差异量。在小样本条件下,假设样本数据来自于正态分布总体,t检验统计量的分布近似于自由度为n-1的t分布。


def t_value(sample_mean, population_mean, std_error, sample_size):
    return (sample_mean - population_mean) / (std_error / math.sqrt(sample_size))

3. F检验统计量

F检验统计量用于检验两个或更多正态分布总体方差是否相同。F检验统计量就是两个样本方差的比值。在假设方差相等的条件下,F检验统计量的分布近似于自由度为n-1的F分布。


def f_value(sample_1_var, sample_2_var):
    return sample_1_var / sample_2_var

三、检验统计量的应用

1. z检验统计量的应用

假设我们要检验一种药物对体温的影响。随机抽取n个受试者服用药物后,测量体温值并计算平均值和标准误差。根据零假设,该药物不会对体温产生影响,即样本均值等于总体均值。如果得到的z值在显著性水平上的临界值范围外,则拒绝零假设,认为该药物对体温产生影响。


def z_test(sample_mean, population_mean, std_error, alpha):
    z_value = abs(z_value(sample_mean, population_mean, std_error))
    z_alpha = norm.ppf(alpha / 2)
    if z_value > z_alpha:
        print("Reject the null hypothesis.")
    else:
        print("Cannot reject the null hypothesis.")

2. t检验统计量的应用

假设我们要比较两种方法对某个指标的影响。随机抽取n1个受试者使用第一种方法,另n2个受试者使用第二种方法,然后测量指标并计算两个样本的平均值、标准误差和t值。在显著性水平为0.05的条件下,如果t值在t分布表格中对应自由度为n1+n2-2的t临界值范围内,则不能拒绝零假设,即认为两种方法对指标的影响没有显著差异。


def t_test(sample_mean_1, sample_mean_2, std_error_1, std_error_2, sample_size_1, sample_size_2, alpha):
    df = sample_size_1 + sample_size_2 - 2
    t_value = abs((sample_mean_1 - sample_mean_2) / math.sqrt(std_error_1**2 / sample_size_1 + std_error_2**2 / sample_size_2))
    t_alpha = t.ppf(alpha / 2, df)
    if t_value > t_alpha:
        print("Reject the null hypothesis.")
    else:
        print("Cannot reject the null hypothesis.")

3. F检验统计量的应用

假设我们要比较三种方法的效果。分别随机抽取n1、n2和n3个受试者,使用三种方法并测量效果值,然后计算方差,并比较F值与F分布临界值之间的差异。如果F值超过了显著性水平为0.05(或0.01)的F分布下临界之外,则拒绝零假设。


def f_test(sample_var_1, sample_var_2, sample_var_3, alpha):
    f_value_1 = f_value(sample_var_1, sample_var_2)
    f_value_2 = f_value(sample_var_1, sample_var_3)
    df_1 = len(sample_var_1) - 1
    df_2 = len(sample_var_1) - 1
    f_alpha_1 = f.ppf(1 - alpha / 2, df_1, df_2)
    f_alpha_2 = f.ppf(alpha / 2, df_1, df_2)
    if f_value_1 > f_alpha_1 or f_value_2 < f_alpha_2:
        print("Reject the null hypothesis.")
    else:
        print("Cannot reject the null hypothesis.")