对单因素试验模型
X
=
{
X
1
,
X
2
,
⋯
,
X
s
}
X=\{X_1,X_2,\cdots,X_s\}
X={X1,X2,⋯,Xs},其中
X
i
=
{
X
i
1
,
X
i
2
,
⋯
,
X
i
n
i
}
X_i=\{X_{i1},X_{i2},\cdots,X_{in_i}\}
Xi={Xi1,Xi2,⋯,Xini},
i
=
1
,
2
⋯
,
s
i=1,2\cdots,s
i=1,2⋯,s(诸
n
i
n_i
ni未必相等),表示来自对应水平
A
i
A_i
Ai的试验指标
N
(
μ
i
,
σ
2
)
N(\mu_i,\sigma^2)
N(μi,σ2)的样本数据。调用平方和分解函数sfeDecompose(X)可以算得数据
n
n
n,
s
s
s,
{
n
1
,
n
2
,
⋯
,
n
s
}
\{n_1,n_2,\cdots,n_s\}
{n1,n2,⋯,ns},
{
X
‾
1
,
X
‾
2
,
⋯
,
X
‾
s
}
\{\overline{X}_1,\overline{X}_2,\cdots,\overline{X}_s\}
{X1,X2,⋯,Xs},
X
‾
\overline{X}
X,
S
T
S_T
ST,
S
E
S_E
SE和
S
A
S_A
SA。利用其中的
n
n
n,
s
s
s,
S
A
S_A
SA和
S
E
S_E
SE,调用假设检验函数sfeTest可以算得假设
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
s
H_0:\mu_1=\mu_2=\cdots=\mu_s
H0:μ1=μ2=⋯=μs在显著水平
α
\alpha
α下的检验。无论检验结果是接受还是拒绝假设
H
0
H_0
H0,我们都用数轴量
S
E
σ
2
\frac{S_E}{\sigma^2}
σ2SE~
χ
2
(
n
−
s
)
\chi^2(n-s)
χ2(n−s)可算得
σ
2
\sigma^2
σ2的置信水平为
1
−
α
1-\alpha
1−α的置信区间。若接受
H
0
H_0
H0,则可利用枢轴量
X
‾
−
μ
S
T
(
n
−
1
)
n
\frac{\overline{X}-\mu}{\sqrt{\frac{S_T}{(n-1)n}}}
(n−1)nSTX−μ~
t
(
n
−
1
)
t(n-1)
t(n−1)算得
μ
\mu
μ的置信区间。若拒绝假设
H
0
H_0
H0,则可利用枢轴量
X
‾
i
−
X
‾
j
−
(
μ
i
−
μ
j
)
S
E
n
−
s
(
1
n
i
+
1
n
j
)
\frac{\overline{X}_i-\overline{X}_j-(\mu_i-\mu_j)}{\sqrt{\frac{S_E}{n-s}\left(\frac{1}{n_i}+\frac{1}{n_j}\right)}}
n−sSE(ni1+nj1)Xi−Xj−(μi−μj)~
t
(
n
−
s
)
t(n-s)
t(n−s)算得
μ
i
−
μ
j
\mu_i-\mu_j
μi−μj的置信区间,
1
≤
i
<
j
≤
s
1\leq i<j\leq s
1≤i<j≤s。下列代码按上述思想定义计算单因素试验参数区间估计的函数。
import numpy as np
def sfeEstimat(accept, n, s, X_bar, Xt_bar, ST, SE, alpha):
ans=[] #初始化返回值
nt=n.sum() #数据总容量
(a, b)=sigma2Bounds(SE, nt-s, 1-alpha) #sigma^2的置信区间
ans.append((a, b))
if accept: #若H0为真
d=np.sqrt(ST/(nt-1)/nt)
(a, b)=muBounds(Xt_bar, d, 1-alpha, nt-1) #计算mu的置信区间
ans.append((a, b))
else: #若H0为假
for i in range(s): #对每个i
for j in range(i+1, s): #对每个j>i
mean=X_bar[i]-X_bar[j] #差mui-muj
S_E=SE/(nt-s) #sigma^2估计值
d=np.sqrt(S_E*(1/n[i]+1/n[j])) #置信区间增量因子
(a, b)=muBounds(mean, d, 1-alpha, nt-s) #置信区间
ans.append((a, b)) #置信区间
return np.array(ans)
函数sfeEstimat的参数accept表示是否接受假设
H
0
H_0
H0,除此之外的其他参数均与由调用函数sfeDecompose算得的同名变量的意义相同,此不赘述。第3行将返回值ans初始化为空的list。第4行计算数据总容量nt。第5行调用计算正态总体
N
(
μ
,
σ
2
)
N(\mu,\sigma^2)
N(μ,σ2)的参数
σ
2
\sigma^2
σ2的函数sigma2Bounds,计算参数
σ
2
\sigma^2
σ2的置信水平为
1
−
α
1-\alpha
1−α的置信区间。第6行将区间数据(a,b)加入ans。第7~18行的if-else语句分别就假设
H
0
H_0
H0为真或假计算
μ
\mu
μ的置信区间或诸
μ
i
−
μ
j
\mu_i-\mu_j
μi−μj,
1
≤
i
<
j
≤
s
1\leq i<j\leq s
1≤i<j≤s的置信区间。其中第8~10行调用计算正态总体参数
μ
\mu
μ的置信区间的函数muBounds,计算参数
μ
\mu
μ的置信水平为
1
−
α
1-\alpha
1−α的置信区间(a,b)。第12~18行的双重for语句,计算诸
μ
i
−
μ
j
\mu_i-\mu_j
μi−μj的置信水平为
1
−
α
1-\alpha
1−α的置信区间。第14行计算差
X
‾
i
−
X
‾
j
\overline{X}_i-\overline{X}_j
Xi−Xj为mean,第15行计算
σ
2
\sigma^2
σ2的无偏估计值
S
E
n
−
s
\frac{S_E}{n-s}
n−sSE为S_E,第16行计算置信区间增量因子
S
E
n
−
s
(
1
n
i
+
1
n
j
)
\sqrt{\frac{S_E}{n-s}\left(\frac{1}{n_i}+\frac{1}{n_j}\right)}
n−sSE(ni1+nj1)为d。第17行调用函数muBounds计算
μ
i
−
μ
j
\mu_i-\mu_j
μi−μj的置信区间。
例1制造某型号计算器要用到某种类型的电路板。电路板由四家工厂提供,分别随机选取使用来自各厂家电路板的计算器,其响应时间(以毫秒计)列表如下:
厂家I:
19
,
22
,
20
,
18
,
15
厂家II:
20
,
21
,
33
,
27
,
40
厂家III:
16
,
15
,
18
,
26
,
17
厂家IV:
18
,
22
,
19
\text{厂家I:}19,22,20,18,15\\ \text{厂家II:}20,21,33,27,40\\ \text{厂家III:}16,15,18,26,17\\ \text{厂家IV:}18,22,19
厂家I:19,22,20,18,15厂家II:20,21,33,27,40厂家III:16,15,18,26,17厂家IV:18,22,19
判断不同厂家的电路是否显著影响计算器的计算响应时间。
解: 本例中,试验指标为计算响应时间。可变因素为使用的不同厂家的电路板,该因素有4个水平。这也是一个单因素试验,设用第
i
i
i个厂家生产的电路计算响应时间为随机变量
X
i
X_i
Xi~
N
(
μ
i
,
σ
2
)
N(\mu_i, \sigma^2)
N(μi,σ2),
i
=
1
,
2
,
3
,
4
i=1, 2, 3, 4
i=1,2,3,4。为判断不同的厂家的电路是否显著影响计算器的计算响应时间,利用试验数据检验假设:
H
0
:
μ
1
=
μ
2
=
μ
3
=
μ
4
(
H
1
:
μ
1
,
μ
2
,
μ
3
,
μ
4
不全相等
)
.
H_0: \mu_1=\mu_2=\mu_3=\mu_4(H_1:\mu_1, \mu_2, \mu_3, \mu_4\text{不全相等}).
H0:μ1=μ2=μ3=μ4(H1:μ1,μ2,μ3,μ4不全相等).
下列代码完成本例计算。
import numpy as np #导入numpy
X=np.array([np.array([19, 22, 20, 18, 15]), #试验数据
np.array([20, 21, 33, 27, 40]),
np.array([16, 15, 18, 26, 17]),
np.array([18, 22, 19])])
alpha=0.05 #显著水平
(n, s, X_bar, Xt_bar, ST, SA, SE)=sfeDecompose(X) #方差分解
accept=sfeTest(n, s, SA, SE, alpha) #假设检验
ans=sfeEstimat(accept, n, s, X_bar, Xt_bar, ST, SE, alpha) #参数估计
print(‘H0 is %s’%accept)
for a,b in ans:
print('(%.3f, %.3f)'%(a,b))
第2~6行按题面设置数据。第7行调用平方和分解函数sfeDecompose(X),算得数据项 n n n, s s s, S A S_A SA和 S E S_E SE等,第8行调用假设检验函数sfeTest传递这些数据和显著水平 α \alpha α,计算对假设 H 0 : μ 1 = μ 2 = μ 3 = μ 4 H_0: \mu_1=\mu_2=\mu_3=\mu_4 H0:μ1=μ2=μ3=μ4的检验,结果存储于accept。第9行调用参数区间估计计算函数sfeEstimat根据假设检验的结果accept,利用数据 n n n, s s s, S T S_T ST和 S E S_E SE和显著水平 α \alpha α计算各参数的置信区间。运行程序,输出
H0 is False
(15.141, 70.259)
(-16.609, -2.191)
(-6.809, 7.609)
(-9.191, 7.458)
(2.591, 17.009)
(0.209, 16.858)
(-9.591, 7.058)
其中,第1行表示拒绝假设
H
0
H_0
H0,第2行表示
σ
2
\sigma^2
σ2的置信区间,由于拒绝假设
H
0
:
μ
1
=
μ
2
=
μ
3
=
μ
4
H_0: \mu_1=\mu_2=\mu_3=\mu_4
H0:μ1=μ2=μ3=μ4,故第3~8行显示
μ
1
−
μ
2
\mu_1-\mu_2
μ1−μ2,
μ
1
−
μ
3
\mu_1-\mu_3
μ1−μ3,
μ
1
−
μ
4
\mu_1-\mu_4
μ1−μ4,
μ
2
−
μ
3
\mu_2-\mu_3
μ2−μ3,
μ
2
−
μ
4
\mu_2-\mu_4
μ2−μ4和
μ
3
−
μ
4
\mu_3-\mu_4
μ3−μ4在0.95的置信水平下的置信区间。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》