对函数sigma2Bounds(详见博文《单个正态总体方差的双侧区间估计》)稍作修改,就可得到计算总体参数
σ
2
\sigma^2
σ2单侧置信上限或下限的函数。
from scipy.stats import chi2 #导入chi2分布
def sigma2Bound(d, df, confidence, low=True): #定义函数
alpha=1-confidence #计算置信度中的alpha
if low: #若为下限
b=chi2.isf(alpha, df) #chi2的单侧右分位点
else: #若为上限
b=chi2.ppf(alpha, df) #chi2的单侧左分位点
return d/b
与函数sigma2Bounds相比,sigma2Bound的多了一个分辨计算的是下限或上限的参数low,其默认值为True,表示计算置信下限。若传递给它False,则计算置信上限。第3行计算置信度
1
−
α
1-\alpha
1−α中的
α
\alpha
α。第4~7行的if-else语句根据low的取值决定计算
χ
2
(
n
−
1
)
\chi^2(n-1)
χ2(n−1)分布的右分位点(第5行)或左分位点(第7行),详见博文《卡方分布分位点计算》。第8行将计算所得的置信上限或下限作为返回值返回。
例1 某大学数学测验,抽得20个学生的分数的样本均值为72,样本方差为16。假设分数
X
X
X~
N
(
μ
,
σ
2
)
N(\mu,\sigma^2)
N(μ,σ2),分别计算
μ
\mu
μ的置信度为98%的置信下限,
σ
2
\sigma^2
σ2的置信度为98%的置信上限。
解: 下列代码完成本例的计算。
n=20 #样本容量
mean=72 #样本均值
s2=16 #样本方差
confidence=0.98 #置信水平
d=np.sqrt(s2/n) #mu的置信下限因子
b=muBound(mean, d, confidence, df=n-1) #mu的置信下限
print('mu>=%.4f'%b)
d=(n-1)*s2 #sigma^2的置信上限分子
b=sigma2Bound(d, n-1, confidence, low=False) #sigma^2的置信上限
print('sigma^2<=%.4f'%b)
第6行调用计算总体均值 μ \mu μ的单侧区间估计的函数muBound(详见博文《单个正态总体均值的单侧区间估计》),计算 μ \mu μ的置信水平为0.98的置信下限(参数low取缺省值True)。由于总体参数 σ 2 \sigma^2 σ2未知,故传递给参数df的是 t t t分布的自由度n-1。第9行调用函数sigma2Bound,需向参数low传递False,这是因为我们需要计算的是置信上限。运行程序,输出
mu>=70.0281
sigma^2<=35.4849
例2 随机地取某种炮弹9发做试验,得炮口速度的样本标准差
s
=
11
m
/
s
s=11m/s
s=11m/s。设炮口速度
X
X
X~
N
(
μ
,
σ
2
)
N(\mu, \sigma^2)
N(μ,σ2)。求这种炮弹的炮口速度的标准差
σ
\sigma
σ的置信度为0.95的置信下限。
解: 下列代码完成本例的计算。
import numpy as np #导入numpy
n=9 #样本容量
s2=11**2 #样本方差
d=(n-1)*s2 #sigma^2置信下限分子
confidence=0.95 #置信水平
b=sigma2Bound(d, n-1, confidence) #sigma^2的置信下限
b=np.sqrt(b) #sigma的置信下限
print('sigma>=%.2f'%b)
程序的第6行调用sigma2Bound函数计算 σ 2 \sigma^2 σ2的置信下限(参数low取缺省值),第7行计算 σ \sigma σ的置信下限。运行程序,输出
sigma>=7.90
写博不易,敬请支持:
如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!
代码诚可贵,原理价更高。若为AI学,读正版书好。
返回《导引》