单因素试验模型
X
X
X是一个数组的数组:
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)的样本数据。记
X
‾
i
=
1
n
i
∑
j
=
1
n
i
X
i
j
\overline{X}_i=\frac{1}{n_i}\sum\limits_{j=1}^{n_i}X_{ij}
Xi=ni1j=1∑niXij,
n
=
n
1
+
n
2
+
⋯
+
n
s
n=n_1+n_2+\cdots+n_s
n=n1+n2+⋯+ns,
X
‾
=
1
n
∑
i
=
1
s
∑
j
=
1
n
i
X
i
j
\overline{X}=\frac{1}{n}\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{n_i}X_{ij}
X=n1i=1∑sj=1∑niXij。
S
T
=
∑
i
=
1
s
∑
j
=
1
n
i
(
X
i
j
−
X
‾
)
2
S_T=\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{n_i}(X_{ij}-\overline{X})^2
ST=i=1∑sj=1∑ni(Xij−X)2,则
S
T
S_T
ST可分解成误差平方和
S
E
=
∑
i
=
1
s
∑
j
=
1
n
i
(
X
i
j
−
X
‾
i
)
2
S_E=\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{n_i}(X_{ij}-\overline{X}_i)^2
SE=i=1∑sj=1∑ni(Xij−Xi)2与效应平方和
S
A
=
∑
i
=
1
s
∑
j
=
1
n
i
(
X
‾
i
−
X
‾
)
2
S_A=\sum\limits_{i=1}^{s}\sum\limits_{j=1}^{n_i}(\overline{X}_i-\overline{X})^2
SA=i=1∑sj=1∑ni(Xi−X)2之和,即
S
T
=
S
E
+
S
A
.
S_T=S_E+S_A.
ST=SE+SA.
X
X
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是单因素试验方差分析的基础数据。下列代码,定义了根据单因素试验模型数据
X
X
X,计算并分解
S
T
S_T
ST的函数。
import numpy as np #导入numpy
def sfeDecompose(X): #X为试验样本数据
s=X.shape[0] #水平数s
n=np.array([X[i].size for i in range(s)]) #各水平样本容量
nt=n.sum() #样本数据总容量
X_bar=np.array([X[i].mean() for i in range(s)]) #各水平样本均值
Xt_bar=(X_bar*n).sum()/nt #样本数据总均值
ST=np.sum([((X[i]-Xt_bar)**2).sum() for i in range(s)]) #总平方和ST
SA=(n*(X_bar**2)).sum()-nt*(Xt_bar**2) #效应平方和SA
SE=ST-SA #误差平方和
return (n, s, X_bar, Xt_bar, ST, SA, SE)
函数sfeDecompose(sfe是单因素试验single-factor experiment的缩写)的参数X表示单因素试验的样本数据。第3行计算因素个数
s
s
s——它是X的行数。第4行计算对应每个水平的样本容量
n
i
n_i
ni,存于数组n。第5行计算数据总容量
n
=
∑
i
=
1
s
n
i
n=\sum_{i=1}^sn_i
n=∑i=1sni为nt。第6行计算对应每个水平的样本均值
X
‾
i
\overline{X}_i
Xi,存于数组X_bar。第7行计算数据总均值
X
‾
=
1
n
∑
i
=
1
2
n
i
X
‾
i
\overline{X}=\frac{1}{n}\sum_{i=1}^2n_i\overline{X}_i
X=n1∑i=12niXi为Xt_bar。第8行计算总平方和
S
T
=
∑
i
=
1
s
∑
j
=
1
n
i
(
X
i
j
−
X
‾
)
2
S_T=\sum_{i=1}^{s}\sum_{j=1}^{n_i}(X_{ij}-\overline{X})^2
ST=∑i=1s∑j=1ni(Xij−X)2为ST。第9行计算效应平方和
S
A
=
∑
i
=
1
s
n
i
X
‾
i
2
−
n
X
‾
2
S_A=\sum_{i=1}^{s}n_i\overline{X}_i^2-n\overline{X}^2
SA=∑i=1sniXi2−nX2为SA。第10行计算误差平方和
S
E
=
S
T
−
S
A
S_E=S_T-S_A
SE=ST−SA为SE。第11行将所有计算结果作为一个元组返回。
利用函数sfeDecompose算得的数据
n
n
n,
s
s
s,
S
A
S_A
SA和
S
E
S_E
SE,可以计算显著水平
α
\alpha
α下假设
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
s
.
H_0:\mu_1=\mu_2=\cdots=\mu_s.
H0:μ1=μ2=⋯=μs.
的检验,下列代码定义计算该假设检验。
def sfeTest(n, s, SA, SE, alpha):
nt=n.sum() #数据总容量
F=(nt-s)/(s-1)*SA/SE #检验统计量值
accept=ftestR(F, s-1, nt-s, alpha) #F分布的分位点
return accept
函数sfeTest的参数n,s,SA,SE和alpha中除了alpha表示的是显著水平
α
\alpha
α外,其余的均与函数sfeDecompose函数中所算得的同名变量意义相同,此不赘述。第2行计算数据总容量
n
=
∑
i
=
1
s
n
i
n=\sum_{i=1}^{s}n_i
n=∑i=1sni,第3行计算检验统计量值
S
A
/
(
s
−
1
)
S
E
/
(
n
−
s
)
\frac{S_A/(s-1)}{S_E/(n-s)}
SE/(n−s)SA/(s−1)为F。第4行调用ftestR函数用p值法计算假设
H
0
:
μ
1
=
μ
2
=
⋯
=
μ
s
=
μ
H_0:\mu_1=\mu_2=\cdots=\mu_s=\mu
H0:μ1=μ2=⋯=μs=μ的检验,结果为accept。第6行的返回值accept若为True,则接受假设
H
0
H_0
H0,否则拒绝。
例1设有三台机器,用来生产规格相同铝合金薄板。取样,测量薄板的厚度(精确至千分之一厘米)。得到如下结果:
机器I:
0.236
,
0.238
,
0.248
,
0.245
,
0.243
机器II:
0.257
,
0.253
,
0.255
,
0.254
,
0.261
机器III:
0.258
,
0.264
,
0.259
,
0.267
,
0.262
\text{机器I:}0.236,0.238,0.248,0.245,0.243\\ \text{机器II:}0.257,0.253,0.255,0.254,0.261\\ \text{机器III:}0.258,0.264,0.259,0.267,0.262
机器I:0.236,0.238,0.248,0.245,0.243机器II:0.257,0.253,0.255,0.254,0.261机器III:0.258,0.264,0.259,0.267,0.262
对于第
i
i
i台机器,所生产的薄板厚度为随机变量
X
i
X_i
Xi~
N
(
μ
i
,
σ
2
)
N(\mu_i,\sigma^2)
N(μi,σ2)。目标是,利用试验数据检验假设
H
0
:
μ
1
=
μ
2
=
μ
3
(
H
1
:
μ
1
,
μ
2
,
μ
3
不全相等
)
.
H_0: \mu_1=\mu_2=\mu_3(H_1:\mu_1, \mu_2, \mu_3\text{不全相等}).
H0:μ1=μ2=μ3(H1:μ1,μ2,μ3不全相等).
即判断不同的机器是否显著影响所生产的铝合金薄板的厚度。
解: 本例中,试验指标为薄板厚度。试验中诸如材料、操作人员等条件均视为不变的因素。唯一可变因素是所用的机器。不同的三台机器就是该因素的三个不同水平。因此,这是一个单因素试验。下列代码完成本例计算。
import numpy as np #导入numpy
alpha=0.05 #显著水平
X=np.array([np.array([0.236, 0.238, 0.248, 0.245, 0.243]), #试验数据
np.array([0.257, 0.253, 0.255, 0.254, 0.261]),
np.array([0.258, 0.264, 0.259, 0.267, 0.262])])
(n, s, X_bar, Xt_bar, ST, SA, SE)=sfeDecompose(X) #平方和分解
accept=sfeTest(n, s, SA, SE, alpha) #假设检验
print('显著水平%.2f下H0为%s'%(alpha,accept))
第2~5行根据题面设置试验数据X和显著水平alpha。第6行调用函数sfeDecompose(X)计算平方和分解。第7行调用函数sfeTest(n, s, SA, SE, alpha)计算假设 H 0 : μ 1 = μ 2 = μ 3 H_0: \mu_1=\mu_2=\mu_3 H0:μ1=μ2=μ3的检验。运行程序,输出:
显著水平0.05下H0为False
表示拒绝假设
H
0
H_0
H0,即认为不同的机器显著影响所生产的铝合金薄板的厚度。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》