概率统计Python计算:单因素试验总偏差平方和的分解

在这里插入图片描述
单因素试验模型 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=1niXij 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=1sj=1niXij 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=1sj=1ni(XijX)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=1sj=1ni(XijXi)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=1sj=1ni(XiX)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=n1i=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=1sj=1ni(XijX)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=1sniXi2nX2为SA。第10行计算误差平方和 S E = S T − S A S_E=S_T-S_A SE=STSA为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/(ns)SA/(s1)为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 机器I0.236,0.238,0.248,0.245,0.243机器II0.257,0.253,0.255,0.254,0.261机器III0.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学,读正版书好
返回《导引》

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值