单个正态总体均值的区间估计
一. 预备知识
该实验涉及Numpy库和scipy库的使用,下面仅就这两个库中使用到的函数或方法加以介绍。
1.1 numpy库
numpy库是一个多维数组库,这里涉及数组对象的初始化,求均值,标准差的方法。
- import numpy as np 导入numpy,并且起名为np
- data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2]) 使用列表初始化一个一维数组
- xb=np.mean(data) 求一组数据的平均值
- s=np.std(data,ddof=1) 求一组数据的标准差
1.2 scipy库
scipy.stats库包含了各种离散型和连续性随机变量的分布。各种分布公共的函数如下:
- rvs: Random Variates
- pdf: Probability Density Function
- cdf: Cumulative Distribution Function
- sf: Survival Function (1-CDF)
- ppf: Percent Point Function (Inverse of CDF)
- isf: Inverse Survival Function (Inverse of SF)
使用各种分布时,通常先要冻结该分布,比如:
- Z=stats.norm(loc=0,scale=1) 冻结一个正态分布为标准正态
- T=stats.t(df=3) 冻结一个自由度为3的T分布。
二. 区间估计
单个正态总体的均值的区间估计可以分为两类:方差已知和方差未知。
2.1 方差已知
- 枢轴量为 x ‾ − μ σ / n ∼ N ( 0 , 1 ) \frac{\overline x - \mu}{\sigma / \sqrt{n}} \sim N(0, 1) σ/nx−μ∼N(0,1)
- 其置信水平为
1
−
α
1-\alpha
1−α的双侧置信区间为:
( x ‾ − σ n Z α 2 , x ‾ + σ n Z α 2 ) (\overline x - \frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}}, \overline x + \frac{\sigma}{\sqrt{n}}Z_{\frac{\alpha}{2}}) (x−nσZ2α,x+nσZ2α) - 其置信水平为
1
−
α
1-\alpha
1−α的单侧置信下限为:
x ‾ − σ n Z α \overline x - \frac{\sigma}{\sqrt{n}}Z_{\alpha} x−nσZα - 其置信水平为
1
−
α
1-\alpha
1−α的单侧置信上限为:
x ‾ + σ n Z α \overline x + \frac{\sigma}{\sqrt{n}}Z_{\alpha} x+nσZα
2.2 方差未知
- 枢轴量为 x ‾ − μ s / n ∼ T ( n − 1 ) \frac{\overline x - \mu}{s / \sqrt{n}} \sim T(n-1) s/nx−μ∼T(n−1)
- 其置信水平为
1
−
α
1-\alpha
1−α的双侧置信区间为:
( x ‾ − σ n T α 2 , x ‾ + σ n T α 2 ) (\overline x - \frac{\sigma}{\sqrt{n}}T_{\frac{\alpha}{2}}, \overline x + \frac{\sigma}{\sqrt{n}}T_{\frac{\alpha}{2}}) (x−nσT2α,x+nσT2α) - 其置信水平为
1
−
α
1-\alpha
1−α的单侧置信下限为:
x ‾ − σ n T α \overline x - \frac{\sigma}{\sqrt{n}}T_{\alpha} x−nσTα - 其置信水平为
1
−
α
1-\alpha
1−α的单侧置信上限为:
x ‾ + σ n T α \overline x + \frac{\sigma}{\sqrt{n}}T_{\alpha} x+nσTα
三. Python实现求解
import numpy as np
from scipy import stats
def confidence_interval_u(data, sigma=-1, alpha=0.05, side_both=True):
xb = np.mean(data)
s = np.std(data, ddof=1)
if sigma > 0: # sigma已知,枢轴量服从标准正态分布
Z = stats.norm(loc=0, scale=1.)
if side_both: # 求双侧置信区间
tmp = sigma/np.sqrt(len(data))*Z.ppf(1-alpha/2)
return (xb-tmp, xb+tmp)
else: # 单侧置信下限或单侧置信上限
tmp= sigma/np.sqrt(len(data))*Z.ppf(1-alpha)
return {'bottom_limit': xb-tmp, 'top_limit': xb+tmp}
else: # sigma未知,枢轴量服从自由度为n-1的t分布
T = stats.t(df=len(data)-1)
if side_both:
tmp = s/np.sqrt(len(data))* T.ppf(1-alpha/2)
return (xb-tmp, xb+tmp)
else:
tmp = s/np.sqrt(len(data))* T.ppf(1-alpha)
return {'bottom_limit': xb-tmp, 'top_limit': xb+tmp}
例题
- 某袋装食品重量(单位:克)
X
∼
N
(
μ
,
σ
2
)
X\sim N(\mu, \sigma^2)
X∼N(μ,σ2) . 现从一大批该产品中随机抽取10件,称的重量为:
101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2
(1) σ = 3 \sigma =3 σ=3, (2) σ \sigma σ未知, 求(1)(2)两种情况下 μ \mu μ的置信水平为95%的双侧置信区间.
解:(1) σ = 3 \sigma=3 σ=3
data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2])
confidence_interval_u(data,3)
结果为:
(
98.160614903086312
,
101.87938509691368
)
(98.160614903086312, 101.87938509691368)
(98.160614903086312,101.87938509691368)
(2)
σ
\sigma
σ 未知
data = np.array([101.3, 96.6, 100.4, 98.8, 94.6, 103.1, 102.3, 97.5, 105.4, 100.2])
confidence_interval_u(data)
结果为:
(
97.703745477642599
,
102.33625452235739
)
(97.703745477642599, 102.33625452235739)
(97.703745477642599,102.33625452235739)
参考文献
- 《概率论与数理统计》浙大
- python scipy document