(1) 两个总体均值之差检验
以下为样本量小,两个总体方差未知,同时两个总体方差不相等,因此采用T分布,其自由度为f
import numpy as np
import pandas as pd
from scipy.stats import t
import scipy
x1 = [568, 681, 636, 607, 555
,496, 540, 539, 529, 562
,589, 646, 596, 617, 584]
x2 = [650, 569, 622, 630, 596
,637, 628, 706, 617, 624
,563, 580, 711, 480, 688
,723, 651, 569, 709, 632]
def mean_difference(data1, data2, alpha):
"""
data1: 总体1
data2: 总体2
alpha: 显著性水平
功能:以alpha的显著性水平检验两个总体均值之差是否存在显著差异
"""
n1 = len(data1)
n2 = len(data2)
x1_mean = np.mean(data1)
x2_mean = np.mean(data2)
x1_var = np.var(data1, ddof=1)
x2_var = np.var(data2, ddof=1)
# f自由度
f = np.power((x1_var/n1 + x2_var/n2), 2) / ((np.power((x1_var/n1), 2)/(n1-1)) + (np.power((x2_var/n2), 2)/(n2-1)))
t_score = scipy.stats.t.isf(alpha, df = int(f)) # t分布临界值
# 检验统计量 t值
t_value = ((x1_mean - x2_mean)-(0)) / np.sqrt((x1_var/n1) + (x2_var/n2))
if abs(t_value) > abs(t_score):
result = 'refuse H0, accept H1'
else:
result = 'accept H1, refuse H0'
return t_score, t_value ,result
>>>mean_difference(x1, x2, 0.05)
>>>(1.693888754005164, -2.4868888763745463, 'accept H1, refuse H0')
(2) 两个总体方差比的检验
由于是检验总体方差1和总体方差2是否相等,故采用双侧检验
H0: 总体方差1 = 总体方差2 或 总体方差1/总体方差2 = 1
H1: 总体方差1 != 总体方差2 或 总体方差1/总体方差2 != 1
条件:
为了比较两个未知的总体方差,我们可以用两个样本方差的比来判断,
1.如果两个样本方差的比接近于1,说明两个总体方差很接近
2.如果两个样本方差的比远离于1,说明两个总体方差有较大差异
注意:在两个正态总体条件下, 两个方差之比服从F分布。
def var_difference(data1, data2, alpha):
"""
data1: 总体1
data2: 总体2
alpha: 显著性水平
功能:以alpha的显著性水平检验两个总体的方差是否存在显著差异
"""
n1 = len(data1)
n2 = len(data2)
x1_var = np.var(data1, ddof=1)
x2_var = np.var(data2, ddof=1)
# 样本统计量F值
f_value = x1_var / x2_var
# 两个F分布临界点|值
f_score1 = scipy.stats.f.isf(1-alpha / 2, dfn=n1-1, dfd=n2-1)
f_score2 = scipy.stats.f.isf(alpha / 2, dfn=n1-1, dfd=n2-1)
return "两个F分布临界点:({},{})".format(round(f_score1,3), round(f_score2,3)), "F值:{}".format(round(f_value, 3))
>>>var_difference(x1, x2, 0.05)
>>>('两个F分布临界点:(0.35,2.647)', 'F值:0.662')