上由于点估计值只是估计量的一个近似值, 因而点估计本身既没有反映出这种近似值的精度, 即指出用估计值去估计的误差范围有多大, 也没有指出这个误差范围以多大的概率包括末知参数, 这正是区间估计要解决的问题。本文讨论单正态总体均 值的区间估计问题。
设来自正态总体 $N\left(\mu, \sigma^2\right)$ 的随机样本和样本值记为 $X_1, X_2, \cdots, X_n$, 样本均值 $\bar{X}$ 是总体 均值 $\mu$ 的一个很好的估计量, 利用 $\bar{X}$ 的分布, 可以得出总体均值 $\mu$ 的置信度为 $1-\alpha$ 的置信 区间 (通常取 $\alpha=0.05$ )。
由于 $\bar{X} \sim N\left(\mu, \sigma^2\right)$, 因此有 $Z=\frac{\bar{X}-\mu}{\sigma / \sqrt{n}} \sim N(0,1)$ 。 由 $P\left(-z_{1-\alpha / 2}<Z<z_{1-\alpha / 2}\right)=1-\alpha$ 即得
$$
P\left(\bar{X}-\frac{\sigma}{\sqrt{n}} z_{1-\alpha / 2}<\mu<\bar{X}+\frac{\sigma}{\sqrt{n}} z_{1-\alpha / 2}\right)=1-\alpha
$$
所以对于单个正态总体 $N\left(\mu, \sigma^2\right)$, 当 $\sigma_0=\sigma$ 已知时, $\mu$ 的置信区间为 $1-\alpha$ 的置信区间 为 $\left(\bar{X}-\frac{\sigma}{\sqrt{n}} z_{1-\alpha / 2}, \bar{X}+\frac{\sigma}{\sqrt{n}} z_{1-\alpha / 2}\right)$ 。
同理可求得 $\mu$ 的置信度为 $1-\alpha$ 的置信上限为 $\bar{X}+\frac{\sigma}{\sqrt{n}} z_{1-\alpha}$ 。 $\mu$ 的置信度为 $1-\alpha$ 的置信下限为 $\bar{X}-\frac{\sigma}{\sqrt{n}} z_{1-\alpha}$ 。
某车间生产的滚珠直径 $X$ 服从正态分布 $N(\mu, 0.6)$ 。现从某天的产品中抽取 6 个, 测得直径如下 (单位: $\mathrm{mm}$ )。 $$ \text { 14.6 } 615.1,14.9,14.8,15.2,15.1 $$ 试求平均直径置信度为 $95 \%$ 的置信区间。
解: 置信度 $1-\alpha=0.95, \alpha=0.05 。 \alpha / 2=0.025$, 查表可得 $Z_{0.025}=1.96$, 又由样本值得 $\bar{x}=14.95, n=6, \sigma=\sqrt{0.6}$ 。由上式有解:
置信度 $1-\alpha=0.95, \alpha=0.05$ 。 $\alpha / 2=0.025$, 查表可得 $Z_{0.025}=1.96$, 又由样本值得 $\bar{x}=14.95, n=6, \sigma=\sqrt{0.6}$ 。由上式有 置信下限 $\quad \bar{x}-Z_{1-\alpha / 2} \frac{\sigma_0}{\sqrt{n}}=14.95-1.96 \times \sqrt{\frac{0.6}{6}}=14.3302$ 置信上限 $\quad \bar{x}+Z_{1-\alpha / 2} \frac{\sigma_0}{\sqrt{n}}=14.95+1.96 \times \sqrt{\frac{0.6}{6}}=15.5698$ 所以均值的置信区间为 (14.3302,15.5698)。
为此, 我们编写的 Pyhton 程序如下:
import numpy as np
import scipy.stats as ss
n=6
p=0.025
sigma=np.sqrt(0.6)
x=[14.6,15.1,14.9,14.8,15.2,15.1]
xbar =np.mean(x)
low= xbar - ss.norm.ppf(q=1-p) *(sigma / np.sqrt(n))
up = xbar + ss.norm.ppf(q=1-p) *(sigma / np.sqrt(n))
print('low = ', low)
print('up = ', up)
low = 14.330204967695439
up = 15.569795032304564
由于 $Z=\frac{\bar{X}-\mu}{\sigma / \sqrt{n}} \sim N(0,1), \frac{(n-1) S^2}{\sigma^2} \sim \chi^2(n-1)$ 且二者独立, 所以有 $$ T=\frac{\bar{X}-\mu}{S / \sqrt{n}} \sim t(n-1) $$ 同样由 $P\left(-t_{1-\alpha / 2}(n-1)<T<t_{1-\sigma / 2}(n-1)\right)=1-\alpha$ 得到 $$ P\left(\bar{X}-\frac{S}{\sqrt{n}} t_{1-\alpha / 2}(n-1)<\mu<\bar{X}+\frac{S}{\sqrt{n}} t_{1-\alpha / 2}(n-1)\right)=1-\alpha $$ 所以方差 $\sigma^2$ 末知时 $\mu$ 的置信度为 $1-\alpha$ 的置信区间为 $$ \left(\bar{X}-\frac{S}{\sqrt{n}} t_{1-\alpha / 2}(n-1), \bar{X}+\frac{S}{\sqrt{n}} t_{1-\alpha / 2}(n-1)\right) $$ 其中 $t_p(n)$ 为自由度为 $n$ 的 $t$ 分布的下侧 $p$ 分位数。 同理可求得 $\mu$ 的置信度为 $1-\alpha$ 的置信上限为 $\bar{X}+\frac{S}{\sqrt{n}} t_{1-\alpha}(n-1)$ $\mu$ 的置信度为 $1-\alpha$ 的置信下限为 $\bar{X}-\frac{S}{\sqrt{n}} t_{1-\alpha}(n-1)$ $$ S=\sqrt{\frac{1}{n-1} \sum_{i=1}^n\left(X_i-\bar{X}\right)^2} $$
某糖厂用自动包装机装糖, 设各包重量服从正态分布 $N\left(\mu, \sigma^2\right)$ 。某日开工后测 得 9 包重量为 (单位: $\mathrm{kg}$ ): $99.3,98.7,100.5,101.2,98.3,99.7,99.5,102.1,100.5$ 。 试求 $\mu$ 的置信度为 $95 \%$ 的置信区间。
解: 置信度 $1-\mu=0.95$, 查表得 $t_{1-\alpha / 2}(n-1)=t_{0.025}(8)=2.306$ 。由样本值算 $\bar{x}=$ 99. $978, s^2=1.47$, 故
置信下限 $\quad \bar{x}-t_{1-\alpha / 2}(n-1) \frac{s}{\sqrt{n}}=99.978-2.306 \times \sqrt{\frac{1.47}{9}}=99.046$
置信上限 $\quad \bar{x}+t_{1-\alpha / 2}(n-1) \frac{s}{\sqrt{n}}=99.978+2.306 \times \sqrt{\frac{1.47}{9}}=100.91$
所以 $\mu$ 的置信度为 $95 \%$ 的置信区间为 $(99.046,100.91)$ 。
为此, 我们编制 Python 程序如下:
import numpy as np
import scipy.stats as ss
n=6
p=0.025
sigma=np.sqrt(1.47)
x=[99.3,98.7,100.5,101.2,98.3,99.7,99.5,102.1,100.5]
n = len(x)
xbar =np.mean(x)
low= xbar - ss.t.ppf(1-p,n-1) *(sigma / np.sqrt(n))
up = xbar + ss.t.ppf(1-p,n-1) *(sigma / np.sqrt(n))
print('low = ', low)
print('up = ', up)
low = 99.04581730209804
up = 100.9097382534575
参考资料:
import numpy as np
import scipy.stats as ss
n=6
p=0.025
sigma=np.sqrt(0.6)
x=[14.6,15.1,14.9,14.8,15.2,15.1]
xbar =np.mean(x)
low= xbar - ss.norm.ppf(q=1-p) *(sigma / np.sqrt(n))
up = xbar + ss.norm.ppf(q=1-p) *(sigma / np.sqrt(n))
print('low = ', low)
print('up = ', up)
low = 14.330204967695439 up = 15.569795032304564
import numpy as np
import scipy.stats as ss
n=6
p=0.025
sigma=np.sqrt(1.47)
x=[99.3,98.7,100.5,101.2,98.3,99.7,99.5,102.1,100.5]
n = len(x)
xbar =np.mean(x)
low= xbar - ss.t.ppf(1-p,n-1) *(sigma / np.sqrt(n))
up = xbar + ss.t.ppf(1-p,n-1) *(sigma / np.sqrt(n))
print('low = ', low)
print('up = ', up)
low = 99.04581730209804 up = 100.9097382534575