2.10 点估计与区间估计
2.9 节把统计推断的问题设定清楚:总体分布含未知参数
本节先讨论点估计的构造方法,从矩估计与极大似然估计这两条最常用的路径出发,再引入稳健估计、收缩估计与非参数估计;随后转向区间估计,讲清置信区间的定义、枢轴量方法、三大渐近区间与自助法区间;最后说明贝叶斯可信区间、预测区间与容忍区间的区别。估计量的评价标准(无偏性、方差、均方误差、有效性)已在 2.9 节给出,本节直接使用这些标准比较不同方法。
2.10.1 矩估计与极大似然估计
构造估计量的两条基本路径
参数未知,样本已知,估计的任务是把样本中的信息转化为关于参数的数值。信息转化需要一条原则。矩估计法(method of moments)的原则是让样本矩等于总体矩:用样本均值代替总体均值、用样本方差代替总体方差,由此解出参数。极大似然估计(maximum likelihood estimation,MLE)的原则是选择使观测数据出现概率最大的参数值。两种原则都能生成估计量,极大似然估计在大样本下具有更好的性质,是实际使用中最主要的方法。
矩估计法
设总体分布含
令两者相等得到方程组
解出的
均匀分布
矩估计的优点是计算简单,不需要优化。缺点是它只用到了矩的信息,可能浪费样本中的其他信息,得到的估计量往往不是有效估计。
极大似然估计
设样本的联合密度(或概率质量函数)为
似然函数的含义是把数据看作已知、把参数看作变量时,数据在不同参数下的相对可能性。极大似然估计取使
乘积形式不便于求导,通常改为最大化对数似然(log-likelihood)
对数是单调递增函数,最大化
得分方程的解不一定是最大值点,需要验证二阶条件或检查边界,这一点在数值优化中尤其重要。
正态分布的极大似然估计。设
对
代入
指数分布的极大似然估计。设
令
import numpy as np
from scipy import stats, optimize
rng = np.random.default_rng(7)
x = rng.gamma(shape=2.0, scale=3.0, size=500) # 真值:形状 2,尺度 3
# 极大似然:数值最大化对数似然
def neg_loglik(params):
shape, scale = params
if shape <= 0 or scale <= 0:
return np.inf
return -np.sum(stats.gamma.logpdf(x, a=shape, scale=scale))
res = optimize.minimize(neg_loglik, x0=[1.0, 1.0], method="Nelder-Mead")
print(f"形状的 MLE = {res.x[0]:.3f},尺度的 MLE = {res.x[1]:.3f}") # 接近 2 与 3
# 矩估计:用样本均值与样本方差解出形状与尺度
mean, var = x.mean(), x.var()
shape_mom = mean ** 2 / var
scale_mom = var / mean
print(f"形状的矩估计 = {shape_mom:.3f},尺度的矩估计 = {scale_mom:.3f}")估计量的渐近分布
极大似然估计在正则条件下具有渐近正态性,且渐近方差由 Fisher 信息决定:
其中
最大后验估计
把参数视为随机变量并给定先验
MAP 与 MLE 的差别只在于多了一个先验因子。先验起正则化作用:正态先验对应
2.10.2 稳健估计与 M 估计
M 估计的一般形式
前面几种方法可以统一在一个框架下。M 估计(M-estimator)把估计问题写成最小化形式
取
影响函数与崩溃点
衡量稳健性的两个工具是影响函数与崩溃点。影响函数(influence function)描述单个观测值对估计量的影响程度,最小二乘的影响函数随观测值线性增长,一个极端值可以产生任意大的影响;中位数的影响函数有界,单个观测值的影响有限。崩溃点(breakdown point)是使估计量失效所需的异常值比例,样本均值的崩溃点为
修剪均值与温莎化均值
两种常用的稳健位置估计由排序样本定义。把样本排序后去掉两端各
其中
import numpy as np
from scipy import stats
rng = np.random.default_rng(11)
x = rng.normal(50, 5, size=200)
x_out = np.append(x, [200.0, -80.0, 180.0]) # 混入三个异常值
print(f"样本均值 = {x_out.mean():.2f}")
print(f"中位数 = {np.median(x_out):.2f}")
print(f"修剪均值 = {stats.trim_mean(x_out, 0.05):.2f}") # 去掉两端各 5%
print(f"温莎化均值 = {stats.mstats.winsorize(x_out, limits=0.05).mean():.2f}")异常值把样本均值拉偏了接近两个单位,中位数与两种稳健估计几乎不受影响。这一对比说明位置估计的选择要与数据的污染程度一起考虑。
2.10.3 收缩估计与正则化
偏差-方差权衡
2.9 节给出的均方误差分解
最简单的形式是取样本均值与固定值的加权平均
James-Stein 估计
James-Stein 估计给出了一个反直觉的结论:在维数
在平方误差损失下一致优于样本均值向量
岭估计与 Lasso
把收缩思想用到回归系数的估计上,得到两种正则化方法。岭估计(ridge)在残差平方和上加上系数的
岭估计有闭式解
从贝叶斯视角看,岭估计对应系数的高斯先验,Lasso 对应拉普拉斯先验,正则化参数
import numpy as np
rng = np.random.default_rng(3)
n, p = 100, 5
X = rng.normal(size=(n, p))
beta_true = np.array([3.0, -2.0, 0.0, 0.0, 1.5])
y = X @ beta_true + rng.normal(scale=1.0, size=n)
def solve_ridge(X, y, lam):
"""岭回归闭式解:先给设计矩阵补一列常数列"""
Xc = np.column_stack([np.ones(len(X)), X])
A = Xc.T @ Xc + lam * np.eye(Xc.shape[1])
return np.linalg.solve(A, Xc.T @ y)
for lam in [0.0, 1.0, 10.0]:
print(f"lambda = {lam:5.1f},系数 = {np.round(solve_ridge(X, y, lam), 3)}")
# lambda 增大时,各系数被连续压缩向零,但不会恰好等于零压缩感知与稀疏恢复
当参数本身稀疏、观测数少于参数数时,
2.10.4 非参数估计
核密度估计
前面的方法都假设分布属于某个参数族。放弃这一假设,直接从数据估计密度函数,得到非参数密度估计(nonparametric density estimation)。直方图是最简单的形式,它把取值轴分箱后统计频数,缺点是结果依赖分箱边界且不光滑。
核密度估计(kernel density estimation,KDE)用平滑的核函数代替箱:
其中
核密度估计的收敛速度比参数估计慢。参数估计的标准误量级是
import numpy as np
from scipy import stats
rng = np.random.default_rng(5)
x = np.concatenate([rng.normal(-2, 0.8, 300), rng.normal(3, 1.2, 200)]) # 双峰数据
# Silverman 规则选择带宽
h = 1.06 * x.std(ddof=1) * len(x) ** (-1 / 5)
kde = stats.gaussian_kde(x, bw_method=h / x.std(ddof=1))
for xi in [-2.0, 0.5, 3.0]:
print(f"x = {xi:4.1f},核密度估计 = {kde(xi)[0]:.4f}")核回归与局部多项式回归
同一思想可以用在回归上。给定数据
权重由核函数给出:离
样条与惩罚方法
另一条非参数路线是用分段的基函数展开函数,再对粗糙度施加惩罚。样条(spline)把区间分成若干段,每段用低阶多项式,并在结点处保证连续性。惩罚样条(penalized spline)在拟合残差上加上二阶导数的积分惩罚
2.10.5 区间估计的定义与构造
置信区间的定义
点估计给出一个数值,但没有说明精度。置信区间(confidence interval)用一个随机区间来表达精度。设
则称
这个定义需要仔细解读。概率是对随机区间而言的:重复抽样会得到不同的区间,其中比例不少于
枢轴量法
构造置信区间最常用的方法是寻找枢轴量(pivotal quantity):一个既含样本又含参数、但分布不依赖参数的函数
再对不等式两边做关于
正态均值是最标准的例子。设
由
区间的半宽正比于标准误
反转检验法
置信区间与假设检验存在对偶关系。对每个候选值
三种区间在小样本下的表现不同。Wald 区间对称且计算简单,但参数被变换后区间不再保持变换关系,且在似然面不对称时覆盖概率偏低。得分区间在零假设处评估方差,对二项比例这类参数通常比 Wald 区间更稳健。似然比区间由似然面的等高线给出,形状最接近真实的不确定性,通常推荐用于小样本。二项比例
伯努利比例的完整示例
设
得分区间解方程
对
确定,两端点需要用数值方法求解。
import numpy as np
from scipy import stats, optimize
def ci_wald(x, n, alpha=0.05):
p = x / n
z = stats.norm.ppf(1 - alpha / 2)
half = z * np.sqrt(p * (1 - p) / n)
return p - half, p + half
def ci_score(x, n, alpha=0.05):
z = stats.norm.ppf(1 - alpha / 2)
p = x / n
center = (p + z ** 2 / (2 * n)) / (1 + z ** 2 / n)
half = z * np.sqrt(p * (1 - p) / n + z ** 2 / (4 * n ** 2)) / (1 + z ** 2 / n)
return center - half, center + half
def ci_likelihood(x, n, alpha=0.05):
def loglik(p):
if p <= 0 or p >= 1:
return -np.inf
return x * np.log(p) + (n - x) * np.log(1 - p)
p_hat = x / n
crit = loglik(p_hat) - stats.chi2.ppf(1 - alpha, 1) / 2
lo = optimize.brentq(lambda p: loglik(p) - crit, 1e-9, p_hat)
hi = optimize.brentq(lambda p: loglik(p) - crit, p_hat, 1 - 1e-9)
return lo, hi
for x, n in [(1, 10), (5, 10), (2, 100)]:
print(f"x = {x}, n = {n}")
print(f" Wald = {np.round(ci_wald(x, n), 4)}")
print(f" 得分 = {np.round(ci_score(x, n), 4)}")
print(f" 似然比 = {np.round(ci_likelihood(x, n), 4)}")预测区间与容忍区间
置信区间针对参数,另两个区间针对观测与总体比例。预测区间(prediction interval)覆盖未来单个观测值,它需要同时考虑参数的不确定性与观测本身的随机性,因此比置信区间宽。正态总体下未来观测
根号中的
容忍区间(tolerance interval)覆盖总体的给定比例
2.10.6 自助法区间
当枢轴量的分布难以推导时,自助法(bootstrap)用重抽样近似该分布。基本流程是:从原始样本中有放回地抽取
百分位法(percentile method)直接取自助分布的分位数:
其中
基本自助法(basic bootstrap,也称反向百分位法)从偏差角度修正:
它把自助分布的偏离方向翻转后加到原估计上。
学生化自助法(studentized bootstrap)对每个重样本计算
BCa 法(bias-corrected and accelerated)在百分位法基础上加入偏差修正与加速度修正两个参数,前者由自助分布低于原估计的比例决定,后者由刀切法估计的偏度决定。BCa 在多数场景下兼顾精度与计算量,是实践中的常用默认选择。
import numpy as np
from scipy import stats
rng = np.random.default_rng(23)
x = rng.exponential(scale=5.0, size=80) # 右偏数据,均值的抽样分布不对称
B = 5000
boot = np.array([rng.choice(x, size=len(x), replace=True).mean() for _ in range(B)])
theta_hat = x.mean()
lo_p, hi_p = np.percentile(boot, [2.5, 97.5]) # 百分位法
lo_b, hi_b = 2 * theta_hat - hi_p, 2 * theta_hat - lo_p # 基本自助法
print(f"估计值 = {theta_hat:.3f}")
print(f"百分位法区间 = [{lo_p:.3f}, {hi_p:.3f}]")
print(f"基本自助区间 = [{lo_b:.3f}, {hi_b:.3f}]")
# 与基于正态近似的区间对比
se = boot.std(ddof=1)
z = stats.norm.ppf(0.975)
print(f"正态近似区间 = [{theta_hat - z * se:.3f}, {theta_hat + z * se:.3f}]")右偏数据下正态近似区间会略微越界或偏移,百分位法与基本自助法给出的端点不对称,更贴近真实的抽样分布。自助法的适用前提是样本能代表总体,样本量过小或样本本身有严重选择偏差时,重抽样只会复制原有的问题。
2.10.7 贝叶斯可信区间
贝叶斯推断给出后验分布,区间由后验分位数直接得到。等尾可信区间(equal-tailed credible interval)取后验的
可信区间与置信区间的解释不同。可信区间的解释可以直接建立在后验概率上:给定数据与先验,参数落在该区间的后验概率为
2.10.8 本节小结
从估计原则到区间与精度
本节把点估计与区间估计串联为一条完整的流程。矩估计与极大似然估计提供了两条构造路径,后者的渐近正态性与渐近有效性使它成为默认方法。稳健估计用有界影响函数换取对异常值的抵抗力,收缩估计用偏差换取方差下降,非参数方法放弃参数族假设以换取形状上的灵活性,三种取舍针对不同的数据条件。区间估计的核心是枢轴量与反转检验两条构造思路,Wald、得分与似然比三种区间在覆盖精度上依次改善,自助法在分布难以推导时提供了通用的替代方案。预测区间与容忍区间的目标分别是未来观测与总体比例,与置信区间不可互换使用。
区间给出参数的可能范围,但很多研究问题的答案落在关于参数的判断上:两种方案的效果是否有差异、数据是否支持某个理论取值、观测到的差异能否用随机波动解释。下一节讨论假设检验,把区间估计的对偶工具系统化,并处理同时检验多个假设时的错误率控制问题。
练习题
第 1 题 概念推导
设
参考答案
极大似然估计:对数似然为
矩估计:总体均值
渐近方差:单观测的 Fisher 信息为
由极大似然估计的渐近正态性,
近似置信区间:
注意该区间在
第 2 题 计算推理
某工厂生产的零件长度服从正态分布。随机抽取
参考答案
均值的置信区间:
预测区间:宽度因子为
预测区间的半宽约
第 3 题 代码验证
生成一组含异常值的样本,比较样本均值、中位数、
参考答案
import numpy as np
from scipy import stats
rng = np.random.default_rng(31)
# 位置估计的稳健性对比
clean = rng.normal(10, 2, size=100)
contaminated = np.append(clean, rng.normal(40, 1, size=5)) # 5% 污染
for name, data in [("干净样本", clean), ("污染样本", contaminated)]:
print(name)
print(f" 均值 = {data.mean():.3f}")
print(f" 中位数 = {np.median(data):.3f}")
print(f" 修剪均值 = {stats.trim_mean(data, 0.05):.3f}")
print(f" 温莎化均值 = {stats.mstats.winsorize(data, limits=0.05).mean():.3f}")
# 污染后均值偏移约 1.4,另三种估计的偏移小于 0.3
# 自助法区间(右偏数据)
x = rng.exponential(scale=3.0, size=60)
B = 4000
boot = np.array([rng.choice(x, size=len(x), replace=True).mean() for _ in range(B)])
theta = x.mean()
lo_p, hi_p = np.percentile(boot, [2.5, 97.5])
lo_b, hi_b = 2 * theta - hi_p, 2 * theta - lo_p
se = boot.std(ddof=1)
z = stats.norm.ppf(0.975)
print(f"百分位法 = [{lo_p:.3f}, {hi_p:.3f}]")
print(f"基本法 = [{lo_b:.3f}, {hi_b:.3f}]")
print(f"正态近似 = [{theta - z * se:.3f}, {theta + z * se:.3f}]")右偏数据下百分位法与基本法给出的区间不对称,上端偏离估计值更远;正态近似区间对称,会低估上侧的不确定性。修剪均值与温莎化均值在污染样本上的偏移远小于样本均值,说明有界影响函数的实际效果。
第 4 题 综合应用
某电商平台想估计用户对页面的点击率
参考答案
Wald 区间:
得分区间:中心
区间为
似然比区间:由
贝叶斯结果:Jeffreys 先验下后验为
三者数值接近,解释不同。频率派区间的含义是:若重复抽样并每次构造区间,约
常见错误
错误 1 · 把置信水平解释为给定区间覆盖真值的概率
原因:置信区间的定义针对随机区间,
解决:报告时区分两种表述。频率派留给区间本身的说法是构造方法的覆盖率,贝叶斯可信区间才能直接给出参数落入区间的概率,使用前明确所用的推断框架。
错误 2 · 小样本或极端比例下直接用 Wald 区间
原因:Wald 区间基于估计量的正态近似,在小样本、比例接近边界或参数强不对称时近似失效。二项比例
解决:比例参数用得分区间或似然比区间,小样本下的均值用
错误 3 · 把预测区间与置信区间混用
原因:两个区间的目标不同,置信区间描述参数,预测区间描述未来观测。正态总体下预测区间的宽度因子是
解决:涉及单个新观测的波动范围时用预测区间,涉及总体均值的精度时用置信区间。报告时写出区间的类型与对应的目标,避免读者按错误的对象理解数值。
错误 4 · 用均方误差以外的标准比较估计量
原因:无偏性只是评价标准之一。收缩估计一致优于样本均值的例子说明,接受少量偏差可以换来方差的大幅下降,均方误差反而更小。只按无偏性筛选,会排除一批在预测性能上更好的估计量。
解决:按使用目标选择评价标准。需要重复抽样的平均误差时用均方误差;只关心长期平均命中时用无偏性;关心极端情形下的稳定性时考虑最小最大准则或稳健性指标。比较时明确损失函数,再谈哪个估计量更优。