概率统计Python计算:双正态总体方差比单侧假设的F检验

在这里插入图片描述
设总体 X X X~ N ( μ 1 , σ 1 2 ) N(\mu_1,\sigma_1^2) N(μ1,σ12) Y Y Y~ N ( μ 2 , σ 2 2 ) N(\mu_2, \sigma_2^2) N(μ2,σ22)相互独立,为检验右侧假设 H 0 : σ 1 2 / σ 2 2 ≤ 1 , H 1 : σ 1 2 / σ 2 2 > 1 H_0:\sigma_1^2/\sigma_2^2\leq1,H_1:\sigma_1^2/\sigma_2^2>1 H0:σ12/σ221,H1:σ12/σ22>1(或左侧假设 H 0 : σ 1 2 / σ 2 2 ≥ 1 , H 1 : σ 1 2 / σ 2 2 < 1 H_0:\sigma_1^2/\sigma_2^2\geq1,H_1:\sigma_1^2/\sigma_2^2<1 H0:σ12/σ221,H1:σ12/σ22<1),检验统计量为 S 1 2 S 2 2 \frac{S_1^2}{S_2^2} S22S12~ F ( n 1 − 1 , n 2 − 1 ) F(n_1-1,n_2-1) F(n11,n21)。其中, S 1 2 S_1^2 S12 S 2 2 S_2^2 S22分别为样来自 X X X Y Y Y的样本方差, n 1 n_1 n1 n 2 n_2 n2为样本容量。下列代码定义了计算单侧假设 H 0 H_0 H0p值检验函数。

from scipy.stats import f			#导入f
def ftestR(F, dfn, dfd, alpha):		#右侧检验函数
    p=f.sf(F, dfn, dfd)
    return p>=alpha
def ftestL(F, dfn, dfd, alpha):		#左侧检验函数
    p=f.cdf(F, dfn, dfd)
    return p>=alpha

程序的第2~4行定义 F F F方法右侧检验函数ftestR,第5~7行定义左侧检验函数ftestL。两个函数函数的参数F、dfn、dfd和alpha分别表示检测统计量观测值 s 1 2 s 2 2 \frac{s_1^2}{s_2^2} s22s12 F ( n 1 − 1 , n 2 − 1 ) F(n_1-1,n_2-1) F(n11,n21)分布的自由度 n 1 − 1 n_1-1 n11 n 2 − 1 n_2-1 n21以及显著水平 α \alpha α。对于右侧检验函数ftestR,第3行计算p值为 F ( n 1 − 1 , n 2 − 1 ) F(n_1-1,n_2-1) F(n11,n21)分布的残存函数在统计量值F处的函数值。而对于左侧检验函数ftestL,第6行计算p值为 F ( n 1 − 1 , n 2 − 1 ) F(n_1-1,n_2-1) F(n11,n21)分布的累积分布函数在统计量值F处的函数值。返回的布尔值p>=alpha为True,则接受假设 H 0 : σ 1 2 / σ 2 2 ≤ 1 H_0:\sigma_1^2/\sigma_2^2\leq1 H0:σ12/σ221(或 σ 1 2 / σ 2 2 ≥ 1 \sigma_1^2/\sigma_2^2\geq1 σ12/σ221),否则拒绝 H 0 H_0 H0
例1 甲、乙两个铸造厂生产同一种铸件,假设两厂生产的铸件重量都服从正态分布,先从中随机抽取若干个,测得重量如下(单位:kg):
甲厂: 93.3 , 92.1 , 94.7 , 90.1 , 95.6 , 90.0.94.7 乙厂: 95.6 , 94.9 , 96.2 , 95.8 , 95.1 , 96.3 \text{甲厂:}93.3,92.1,94.7,90.1,95.6,90.0.94.7\\ \text{乙厂:}95.6,94.9,96.2,95.8,95.1,96.3 甲厂:93.3,92.1,94.7,90.1,95.6,90.0.94.7乙厂:95.6,94.9,96.2,95.8,95.1,96.3
试问乙厂铸件重量的方差是否比甲厂的小(取显著水平 α = 0.05 \alpha=0.05 α=0.05)?
解: 设甲、乙两厂的铸件重量分别为 X X X~ N ( μ 1 , σ 1 2 ) N(\mu_1, \sigma_1^2) N(μ1,σ12) Y Y Y~ N ( μ 2 , σ 2 2 ) N(\mu_2, \sigma_2^2) N(μ2,σ22)。需检验左侧假设
H 0 : σ 1 2 / σ 2 2 > 1 , H 1 : σ 1 2 / σ 2 2 ≤ 1. H_0:\sigma_1^2/\sigma_2^2>1, H_1:\sigma_1^2/\sigma_2^2\leq1. H0:σ12/σ22>1,H1:σ12/σ221.
下列代码完成本例计算。

import numpy as np                                      #导入numpy
x=np.array([93.3, 92.1, 94.7, 90.1, 95.6, 90.0, 94.7])  #样本数据
y=np.array([95.6, 94.9, 96.2, 95.8, 95.1, 96.3])        #样本数据
s12=x.var(ddof=1)                                       #样本方差
s22=y.var(ddof=1)                                       #样本方差
n1=x.size                                               #样本容量
n2=y.size                                               #样本容量
alpha=0.05                                              #显著水平
F=s12/s22                                               #检验统计量值
accept=ftestL(F, n1-1, n2-1, allpha)      				#左侧f检验
print('sigma1^2>sigma2^2 is %s.'%accept)

第2~8行根据题面设置各项数据。第9行计算检验统计量值 s 1 2 / s 2 2 s_1^2/s_2^2 s12/s22为F,第10行调用ftestL计算本例中总体方差比左侧假设的检验。运行程序,输出

sigma1^2>sigma2^2 is True.

表示接受假设 H 0 : σ 1 2 / σ 2 2 > 1 H_0:\sigma_1^2/\sigma_2^2>1 H0:σ12/σ22>1,即在显著水平 α = 0.05 \alpha=0.05 α=0.05下推断乙厂铸件重量的方差比甲厂的小。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
返回《导引》