概率统计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/σ22≤1,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/σ22≥1,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(n1−1,n2−1)。其中,
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
H0的p值检验函数。
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(n1−1,n2−1)分布的自由度
n
1
−
1
n_1-1
n1−1和
n
2
−
1
n_2-1
n2−1以及显著水平
α
\alpha
α。对于右侧检验函数ftestR,第3行计算p值为
F
(
n
1
−
1
,
n
2
−
1
)
F(n_1-1,n_2-1)
F(n1−1,n2−1)分布的残存函数在统计量值F处的函数值。而对于左侧检验函数ftestL,第6行计算p值为
F
(
n
1
−
1
,
n
2
−
1
)
F(n_1-1,n_2-1)
F(n1−1,n2−1)分布的累积分布函数在统计量值F处的函数值。返回的布尔值p>=alpha为True,则接受假设
H
0
:
σ
1
2
/
σ
2
2
≤
1
H_0:\sigma_1^2/\sigma_2^2\leq1
H0:σ12/σ22≤1(或
σ
1
2
/
σ
2
2
≥
1
\sigma_1^2/\sigma_2^2\geq1
σ12/σ22≥1),否则拒绝
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/σ22≤1.
下列代码完成本例计算。
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下推断乙厂铸件重量的方差比甲厂的小。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
返回《导引》