我们知道,计算单个总体
X
X
X~
N
(
μ
,
σ
2
)
N(\mu,\sigma^2)
N(μ,σ2)的参数
μ
\mu
μ对给定置信水平
1
−
α
1-\alpha
1−α的置信区间,除了置信水平外,还需要如下几个要素:样本均值
x
‾
\overline{x}
x,样本方差
s
2
s^2
s2或总体方差
σ
2
\sigma^2
σ2,样本容量n。虽然要根据总体
σ
2
\sigma^2
σ2是否已知分两种情况计算,但计算步骤几乎是一样的:
- 计算枢轴量分布(已知 σ 2 \sigma^2 σ2为 N ( 0 , 1 ) N(0,1) N(0,1),未知 σ 2 \sigma^2 σ2为 t ( n − 1 ) t(n-1) t(n−1))概率为置信度 1 − α 1-\alpha 1−α的双侧分位数 a a a, b b b;
- 计算增量因子 d d d(已知 σ 2 \sigma^2 σ2为 σ 2 n \sqrt{\frac{\sigma^2}{n}} nσ2,未知 σ 2 \sigma^2 σ2为 s 2 n \sqrt{\frac{s^2}{n}} ns2);
- 计算置信下限 x ‾ − a × d \overline{x}-a\times d x−a×d和置信上限 x ‾ + a × d \overline{x}+a\times d x+a×d。
根据这些计算步骤(算法),我们定义以下Python函数
from scipy.stats import norm, t #导入norm和t分布
import numpy as np #导入numpy
def muBounds(mean, d, confidence, df=0): #函数定义
if df==0: #已知总体方差
a, b=norm.interval(confidence) #计算正态双侧分位点
else: #未知总体方差
a, b=t.interval(confidence, df) #计算t分布双侧分位点
return mean+a*d, mean+b*d #计算置信上下限
程序的第3~8行定义的函数muBounds计算正态总体位置参数
μ
\mu
μ对给定置信度的双侧置信区间。参数mean,d, 和confidence分别表示样本均值
x
‾
\overline{x}
x,置信区间增量因子(
σ
/
n
\sigma/\sqrt{n}
σ/n或
s
/
n
s/\sqrt{n}
s/n),和置信水平
1
−
α
1-\alpha
1−α。参数df为缺省值0表示为已知总体方差
σ
2
\sigma^2
σ2,无自由度。而当总体方差
σ
2
\sigma^2
σ2未知时,df传递表示
t
t
t分布的自由度。
程序的第4~7行的if-else语句,根据参数df的值,计算枢轴量分布相对置信度
1
−
α
1-\alpha
1−α的分位点a和b:df为0则计算
N
(
0
,
1
)
N(0,1)
N(0,1)的分位点,否则计算
t
(
n
−
1
)
t(n-1)
t(n−1)的分位点(详见博文《标准正态分布分位点计算》和《学生分布分位点计算》)。第8行计算
μ
\mu
μ的置信水平为
1
−
α
1-\alpha
1−α的双侧置信下限和上限,并作为返回值返回。
例1 某饲料厂用自动打包机包装一种混合饲料,设每包的质量
X
X
X服从标准差为
σ
=
1.5
\sigma=1.5
σ=1.5(kg)的正态分布。某日开工后随即抽取9包,测得质量如下:
99.3
,
104.7
,
100.5
,
101.2
,
99.7
,
98.5
,
102.8
,
103.3
,
100.0
99.3, 104.7, 100.5, 101.2, 99.7, 98.5, 102.8, 103.3, 100.0
99.3,104.7,100.5,101.2,99.7,98.5,102.8,103.3,100.0
计算总体
X
X
X的均值
μ
\mu
μ的置信度为
1
−
α
=
0.95
1-\alpha=0.95
1−α=0.95的双侧置信区间。
解: 下列代码完成本例的计算。
import numpy as np #导入numpy
x=np.array([99.3, 104.7, 100.5, 101.2, #样本观测值
99.7, 98.5, 102.8, 103.3, 100.0])
mean=x.mean() #样本均值
sigma=1.5 #已知总体均方差
n=x.size #样本容量
d=sigma/np.sqrt(n) #置信区间增量因子
confidence=0.95 #置信水平
a, b=muBounds(mean, d, confidence) #计算总体均值的置信区间
print('(%.3f, %.3f)'%(a, b))
程序的第2~3行,设置样本观测值数组x,第4~8行设置样本均值mean( x ‾ \overline{x} x),总体均方差sigma( σ \sigma σ),样本容量n( n n n),置信水平confidence( 1 − α 1-\alpha 1−α)和置信区间增量因子d( σ / n \sigma/\sqrt{n} σ/n)。第9行调用上列程序定义的函数muBounds,传递参数mean、d和confidence,计算总体均值 μ \mu μ置信度为0.95的双侧置信区间。注意,由于总体方差 σ 2 \sigma^2 σ2已知为 1. 5 2 1.5^2 1.52,故调用muBounds函数时,使用df参数的默认值0。运行程序,输出
(100.131, 102.091)
为本例中总体均值
μ
\mu
μ的置信水平为0.95的双侧置信区间。
例2 从某厂生产的滚珠中随机抽取10个,测得滚珠的直径(单位:mm)如下:
14.6
,
15.0
,
14.7
,
15.1
,
14.9
,
14.8
,
15.0
,
15.1
,
15.2
,
14.8
14.6, 15.0, 14.7, 15.1, 14.9, 14.8, 15.0, 15.1, 15.2, 14.8
14.6,15.0,14.7,15.1,14.9,14.8,15.0,15.1,15.2,14.8
若滚珠直径服
X
X
X~
N
(
μ
,
σ
2
)
N(\mu,\sigma^2)
N(μ,σ2),其中
σ
2
\sigma^2
σ2未知。试计算滚珠直径均值
μ
\mu
μ的置信水平为
95
%
95\%
95%的置信区间。
解: 下列代码完成本例计算。
import numpy as np #导入numpy
x=np.array([14.6, 15.0, 14.7, 15.1, 14.9, #样本观测值
14.8, 15.0, 15.1, 15.2, 14.8])
mean=x.mean() #样本均值
s=x.std(ddof=1) #样本均方差
n=x.size #样本容量
d=s/np.sqrt(n) #置信区间增量因子
confidence=0.95 #置信度
a, b=muBounds(mean, d, confidence, df=n-1) #计算置信区间
print('(%.3f, %.3f)'%(a, b))
由于本例中计算的是总体方差 σ 2 \sigma^2 σ2未知情形下的 μ \mu μ的置信区间,故第5行计算样本均方差 s s s。第8行计算置信区间增量因子 s / n s/\sqrt{n} s/n。注意,第9行调用函数muBounds时,向参数df传递 t t t分布的自由度n-1,对应未知总体方差的情形。运行程序,输出
(14.782, 15.058)
为本例中总体均值
μ
\mu
μ的置信水平为0.95的双侧置信区间。
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》