前置条件与学习依赖 / PREREQUISITES
① 数学 / 统计基础
Bayes 定理、共轭分布族(Normal–Inverse-Gamma、Beta–Binomial)、马尔可夫链平稳分布、Metropolis–Hastings 接受率。
② 经济学理论前置
先验如何反映经济理论(DSGE 里先验均值锚定校准值);后验预测分布用于模型比较。
③ 软件 / 计算前置
Stata 16+(bayesmhbayes);Python(pymcarviz)。GPU 非必需。
⑤ 难度分级
进阶 · 计算密集

01 是什么:贝叶斯推断 vs 频率派

频率派的世界观:参数 $\theta$ 是固定未知常数;数据 $Y$ 是随机的;我们用 $\hat\theta$(MLE 或 OLS)估计它,用置信区间表达"重复抽样 100 次、有 95 次会覆盖真实 $\theta$"。贝叶斯派的世界观:参数 $\theta$ 也是随机变量;在看到数据之前,你对它有先验信念 $p(\theta)$;看到数据后,用 Bayes 定理把先验更新成后验 $p(\theta|Y)$。后验是一个完整分布,你可以读它的均值、中位数、95% 可信区间(credible interval)、以及"$\theta>0$ 的概率"。对政策讨论而言,"参数大于零的后验概率"比"p 值等于 0.03"更贴近决策者真正想问的问题。

在实证经济学里,贝叶斯推断最常见的三种用途:

  1. DSGE / 结构模型估计:样本短、参数多、似然面崎岖。先验把经济理论锚进来,后验用 MCMC 采样。本知识库 DSGE 贝叶斯估计页有完整讲解。
  2. 贝叶斯 VAR / BVAR:宏观变量维度高,VAR 容易过拟合;明尼苏达先验收缩系数,后验更稳。
  3. 小样本 / 随机效应 / 因果推断:Imbens & Rubin (2015) 把潜在结果框架贝叶斯化,对处理效应做后验推断。

贝叶斯 vs 频率派速查表

维度频率派(MLE/OLS)贝叶斯
参数性质未知常数随机变量,有分布
不确定性来源数据重复抽样参数本身不确定
输出点估计 + 置信区间完整后验分布
小样本依赖渐近近似后验精确(有限样本)
先验信息不能正式纳入先验分布显式表达
概率语言"95% 重复抽样覆盖""$\theta$ 有 95% 概率在区间内"
大样本无信息先验下两者趋同(Bernstein–von Mises 定理)

关键直觉:大样本下贝叶斯与频率派渐近等价(Bernstein–von Mises 定理);贝叶斯的真正优势在小样本、高维、结构模型——此时频率派的渐近近似本身就不可靠。

02 假设与原理:Bayes 定理与 MCMC

核心公式只有一行:

Eq. 2.1 — Bayes 定理
$$ p(\theta|Y) = \frac{p(Y|\theta)\, p(\theta)}{p(Y)} = \frac{p(Y|\theta)\, p(\theta)}{\int p(Y|\theta)\,p(\theta)\,d\theta} $$

分子 = 似然 × 先验;分母 = 证据 marginal likelihood,归一化用。实务中我们只关心分子的形状(后验正比于似然×先验),因为归一化常数往往没有解析解。用文字复述:后验 ∝ 似然 × 先验——数据告诉你的似然形状,与你事前的信念先验,按精度加权融合成后验。

先验的选择

  • 无信息先验(Jeffreys / flat prior):让数据自己说话,先验在参数空间上近似均匀。小样本下不稳定。
  • 共轭先验(conjugate prior):先验与似然同分布族,后验有解析解。例如正态似然 + 正态先验 ⇒ 后验仍是正态。
  • 层次先验(hierarchical prior):随机效应 $\alpha_i \sim N(\mu, \sigma_\alpha^2)$,$\mu,\sigma_\alpha$ 再有超先验。多层数据标配。

MCMC 三大算法

当后验没有解析解时,用 MCMC(Markov Chain Monte Carlo)从 $p(\theta|Y)$ 采样:

  • Metropolis–Hastings (MH):提议 $\theta' \sim q(\theta'|\theta)$,按接受率 $\alpha = \min\big(1, \frac{p(\theta'|Y)q(\theta|\theta')}{p(\theta|Y)q(\theta'|\theta)}\big)$ 接受。最通用,但高维效率低。
  • Gibbs 采样:每次只更新一个参数,条件后验 $p(\theta_j|\theta_{-j}, Y)$。当条件后验是共轭族时极快。
  • NUTS (No-U-Turn Sampler):HMC 的自动版本,PyMC 与 Stan 默认。能自适应步长,高维收敛快。

实际选择:PyMC / Stan 默认 NUTS 即可,不要自己写 MH。Stata bayesmh 内部也是 MH/Gibbs 混合,但对用户屏蔽。判断采样质量的核心指标:

  • R-hat(Gelman–Rubin 统计量):比较四条链的组间方差与组内方差。$R-hat < 1.01$ 才算收敛。
  • Trace plot:四条链应混在一起、无明显趋势或周期性。
  • Effective Sample Size (ESS):扣除自相关后的有效样本量。$ESS > 400$ 才能算后验均值的标准误。
  • Monte Carlo standard error (MCSE):采样本身带来的误差,应远小于后验标准差。

03 完整推导:线性模型共轭先验与 Probit 数据增广

正态线性模型:共轭后验解析解

模型:$Y_i = x_i^\top\beta + \varepsilon_i$,$\varepsilon_i \sim N(0, \sigma^2)$。给定 $\sigma^2$,对 $\beta$ 取正态先验 $\beta \sim N(\beta_0, \Sigma_0)$,则后验:

Eq. 3.1 — 正态似然 + 正态先验 ⇒ 正态后验
$$ \beta|Y,\sigma^2 \sim N\big( m_n, V_n \big), \qquad V_n = (\Sigma_0^{-1} + \sigma^{-2} X^\top X)^{-1}, \;\; m_n = V_n(\Sigma_0^{-1}\beta_0 + \sigma^{-2}X^\top Y) $$

注意 $m_n$ 是先验均值与 OLS 估计的精度加权平均。当先验方差 $\Sigma_0 \to \infty$(无信息),$m_n \to \hat\beta_{OLS}$,后验方差 $V_n \to \sigma^2(X^\top X)^{-1}$——贝叶斯退化为频率派。

Probit 模型:Albert–Chib (1993) 数据增广

Probit:$Y_i^* = x_i^\top\beta + \varepsilon_i$,$\varepsilon_i \sim N(0,1)$,观测到 $Y_i = 1(Y_i^*>0)$。Probit 的似然是 $\Phi(x_i^\top\beta)^{y_i}(1-\Phi(x_i^\top\beta))^{1-y_i}$,没有共轭先验。数据增广(data augmentation)技巧:把潜变量 $Y_i^*$ 也当作待估参数,Gibbs 交替采样:

Eq. 3.2 — Albert–Chib 1993 两步 Gibbs
$$ \beta | Y^*, X \sim N(m_n, V_n) \;\;\text{(共轭)},\qquad Y_i^* | \beta, Y_i \sim \text{TruncNormal}(x_i^\top\beta, 1, \text{lower}=0\text{ if }Y_i=1,\text{upper}=0\text{ if }Y_i=0) $$

把一个没有解析解的 Probit 估计,变成两步交替采样——每一步都是共轭/截断正态,极快。这是贝叶斯离散选择模型的基石。

层次模型(随机效应)

$y_{ij} = \alpha_j + x_{ij}^\top\beta + \varepsilon_{ij}$,$\alpha_j \sim N(\mu_\alpha, \sigma_\alpha^2)$。$\alpha_j$ 是"组级随机效应",$\mu_\alpha, \sigma_\alpha$ 是超参数。Gibbs 交替更新:$\alpha_j|\cdot$、$\beta|\cdot$、$\mu_\alpha|\cdot$、$\sigma_\alpha|\cdot$。比频率派 REML 更灵活,因为后验完整分布可用于预测。

04 逐步操作流程

① 设定先验
无信息先验 $N(0, 10^2)$ 作 baseline;再试一组有信息先验(均值锚定文献估计值),比较后验是否稳定。论文必须报告先验选择。
② 选择 MCMC 方法
简单模型用 MH/Gibbs;PyMC/Stata 默认 NUTS 即可。跑 4 条链,每条 2000 迭代,前 1000 作 warmup。
③ 运行采样
用 PyMC 或 Stata bayesmh 跑。注意收敛前 warmup 样本不要用。
④ 收敛诊断(必做)
R-hat < 1.01(Gelman–Rubin);trace plot 四条链混在一起、无明显趋势;effective sample size (ESS) > 400;不能有极端自相关。
⑤ 后验推断
报告后验均值/中位数、95% 可信区间、$P(\theta>0|Y)$。用后验预测检验(posterior predictive check)画 replicate data 与真实数据对比。

后验预测检验(Posterior Predictive Check, PPC)

后验推断做完后,标准动作是后验预测检验:从 $p(\theta|Y)$ 抽 $\theta^{(s)}$,再从似然 $p(Y^{rep}|\theta^{(s)})$ 生成复制数据 $Y^{rep}$。把 $Y^{rep}$ 的分布与真实 $Y$ 画在一起——如果模型对,$Y^{rep}$ 应该能"覆盖" $Y$;如果模型系统性偏(例如尾部太轻),PPC 图一眼可见。这是贝叶斯模型诊断的核心工具,比频率派的残差分析更直接。

模型比较:DIC / WAIC / LOO

贝叶斯模型比较不靠 p 值,而靠信息准则:DIC(Deviance Information Criterion)、WAIC(Widely Applicable IC)、LOO(留一交叉验证)。数值越小模型越好。ArviZ 的 az.loo()az.waic() 直接出结果。报告时与"只用先验"的空模型对比,看模型是否真的提供了增量信息。

05 完整代码(Stata + Python,含收敛诊断)

stata · bayes_ols_probit.do
*==============================================================*
* 贝叶斯 OLS + 贝叶斯 Probit:bayesmh 完整流程 + 收敛诊断
*==============================================================*
clear all
set more off
set seed 20260911

* --- 1. 模拟数据:Y = 1 + 0.5*X + eps ---
set obs 500
gen X = rnormal()
gen eps = rnormal()
gen Y = 1 + 0.5*X + eps
gen D = (1 + 0.5*X + eps > 0)        // Probit 的二值结果

* --- 2. 贝叶斯 OLS:bayesmh ---
* 语法:bayesmh 似然, likelihood(...) prior(...)
* 无信息正态先验 beta ~ N(0, 100);sigma ~ Half-Normal
bayesmh Y, likelihood(regress({y} {beta:X _cons}, var({var}))) ///
    prior({beta:X _cons}:, flat)            ///  无信息先验
    prior({var}:, igamma(1e-3,1e-3))        ///  方差逆伽马
    chains(4)                                ///  4 条链
    montecarlo(saving("bayes_ols.ster", replace) seed(20260911)) ///
    nchains(4) burnin(1000) mcmcsize(2000)
* 收敛诊断:bayesstats 内置
bayesstats summary {beta:X _cons}
bayesstats ic                            // DIC / WAIC 模型比较
* trace plot
bayesgraph diagnostics {beta:X}

* --- 3. 贝叶斯 Probit:Albert-Chib 数据增广 ---
* bayesmh 自动处理 probit 似然
bayesmh D, likelihood(probit({y} {b:X _cons})) ///
    prior({b:X _cons}:, flat) ///
    chains(4) burnin(1000) mcmcsize(2000)
bayesstats summary {b:X}
* 解释:后验 P(b_X > 0 | data) 直接可读,无需 p 值

* --- 4. 收敛诊断(必做) ---
* R-hat < 1.01;ESS > 400;trace plot 平稳
* bayesstats ess  输出 effective sample size
* bayesstats grubin  Gelman-Rubin R-hat
bayesstats ess {beta:X _cons}
bayesstats grubin, estimates("bayes_ols.ster")
python · bayes_probit.py(PyMC + ArviZ)
# ==============================================================
# 贝叶斯 Probit:PyMC + NUTS + ArviZ 收敛诊断
# ==============================================================
import numpy as np
import pymc as pm
import arviz as az
import matplotlib.pyplot as plt

rng = np.random.default_rng(20260911)

# --- 1. 模拟数据:与 Stata 一致 ---
n = 500
X = rng.normal(size=n)
eps = rng.normal(size=n)
Y_latent = 1 + 0.5*X + eps
D = (Y_latent > 0).astype(int)

# --- 2. 定义贝叶斯 Probit 模型 ---
with pm.Model() as probit_model:
    # 先验:无信息正态
    beta_0 = pm.Normal('beta_0', mu=0, sigma=10)
    beta_X = pm.Normal('beta_X', mu=0, sigma=10)
    # 潜变量与观测(PyMC 内置 Bernoulli + probit link)
    p = pm.math.invprobit(beta_0 + beta_X*X)
    Y_obs = pm.Bernoulli('Y_obs', p=p, observed=D)

# --- 3. NUTS 采样:4 链,2000 迭代,1000 warmup ---
with probit_model:
    trace = pm.sample(draws=2000, tune=1000, chains=4,
                      random_seed=20260911, target_accept=0.9)

# --- 4. 收敛诊断 ---
print(az.summary(trace, var_names=['beta_0', 'beta_X']))
# 关键指标:
#   r_hat < 1.01  ✓
#   ess_bulk > 400 ✓
#   ess_tail > 400 ✓
az.plot_trace(trace, var_names=['beta_0', 'beta_X']); plt.tight_layout()
az.plot_posterior(trace, var_names=['beta_X'], ref_val=0); plt.show()

# --- 5. 后验推断:P(beta_X > 0 | data) ---
post_beta_X = trace.posterior['beta_X'].values.flatten()
p_positive = (post_beta_X > 0).mean()
print(f"P(beta_X > 0 | data) = {p_positive:.3f}  (true = 0.5)")
print(f"95% 可信区间: {np.percentile(post_beta_X, [2.5, 97.5])}")
python · bayes_hierarchical.py(层次模型 / 随机效应)
# ==============================================================
# 贝叶斯层次模型:组级随机效应
# ==============================================================
import numpy as np, pymc as pm, arviz as az
rng = np.random.default_rng(20260911)

J, n_j = 8, 50
alpha_true = rng.normal(0, 1.5, J)                # 组级截距
X = rng.normal(size=J*n_j)
group = np.repeat(np.arange(J), n_j)
Y = alpha_true[group] + 0.5*X + rng.normal(scale=0.5, size=J*n_j)

with pm.Model() as hier:
    mu_a   = pm.Normal('mu_a', 0, 5)
    sigma_a = pm.HalfNormal('sigma_a', 1)
    alpha_j = pm.Normal('alpha_j', mu=mu_a, sigma=sigma_a, shape=J)
    beta   = pm.Normal('beta', 0, 5)
    sigma  = pm.HalfNormal('sigma', 1)
    pm.Normal('Y_obs', mu=alpha_j[group] + beta*X, sigma=sigma, observed=Y)

with hier:
    trace_h = pm.sample(draws=2000, tune=1000, chains=4,
                        random_seed=20260911, target_accept=0.9)
print(az.summary(trace_h, var_names=['mu_a','sigma_a','beta']))

06 论文案例

English · 专著
Bayesian Data Analysis (BDA3)
Andrew Gelman, John Carlin, Hal Stern, David Dunson, Aki Vehtari, Donald Rubin · CRC Press, 3rd ed. 2014
贝叶斯统计的圣经。从"为什么贝叶斯"讲到层次模型、MCMC、模型比较。任何做贝叶斯实证的学者必读。
English · 专著
Statistical Rethinking: A Bayesian Course with Examples in R and Stan
Richard McElreath · CRC Press, 2nd ed. 2020
最友好的贝叶斯入门书。用生动例子讲清先验、后验、多层模型、HMC。配套视频课免费。
English · JASA
Bayesian Analysis of Binary and Polychotomous Response Data
James H. Albert & Siddhartha Chib · JASA, 1993
Probit 数据增广(data augmentation)的开山之作。把离散选择模型变成两步 Gibbs,是贝叶斯微观计量的基石。
English · 专著
Causal Inference for Statistics, Social, and Biomedical Sciences
Guido W. Imbens & Donald B. Rubin · Cambridge UP, 2015
把潜在结果框架贝叶斯化。对处理效应、IV、RDD 给出后验推断视角,是因果推断与贝叶斯结合的标准引用。
中文 · 《金融研究》
基于混频向量自回归模型的宏观经济预测(MF-BVAR)
《金融研究》系列论文
用贝叶斯估计的混合频率 VAR(MF-BVAR)对中国 CPI、RPI、GDP 等核心宏观指标做预测,证明贝叶斯收缩先验能在多变量、不同频数据共存时提升预测精度。是中文顶刊里贝叶斯 VAR 的代表应用。
中文 · 贝叶斯结构估计
中国货币政策冲击预期效应的实证研究——基于贝叶斯推断的 BVAR、BSVAR、BVECM 与 BDSGE 模型
厦门大学系列工作论文 / 中文核心期刊
系统用贝叶斯推断下的 VAR、SVAR、VECM、DSGE 模型估计中国货币政策冲击的预期效应,结论包括:货币供应量传导滞后 6–15 个月、利率传导几乎无滞后。是中文宏观贝叶斯应用的范式。
中文 · DSGE 贝叶斯
中国新房总量生产函数与土地供给政策变化效应 / 中国环境污染的波动性研究(基于 RBC 模型的贝叶斯估计)
《财经研究》2020;《北京理工大学学报(社会科学版)》2021
中文期刊里用贝叶斯估计 DSGE/RBC 结构参数的代表:先验均值锚定校准值,用季度数据估计政策与污染波动参数,报告后验均值与 90% 区间。与本知识库 DSGE 贝叶斯估计页 互链。

07 常见错误

错误 1:先验敏感不报告

贝叶斯结论对先验可能高度敏感。必须报告"无信息先验 vs 有信息先验"两组后验;如果两组后验天差地别,说明数据信息量不足,结论不可信。

错误 2:MCMC 不收敛就报结果

R-hat > 1.01、trace plot 有趋势、ESS < 400,都说明采样没收敛。此时后验均值/区间毫无意义。必须延长 warmup、增加链长、或换 NUTS。

错误 3:把可信区间当置信区间解释

95% 可信区间的意思是"参数落在这个区间的后验概率是 95%"——这是频率派置信区间给不了的解释。但反过来,也不要把它等同于"参数以 95% 概率在区间内"的频率派语言——两者的概率对象不同。写论文时用"后验概率"语言。

错误 4:多重比较不校正

贝叶斯做几百个后验检验,"P(θ_j > 0 | data) > 0.95"的个数会膨胀。应使用层次收缩先验(partial pooling)或明确报告探索性分析。

错误 5:把先验均值当结论

如果后验均值与先验均值几乎相同,说明数据没有更新信念——结论不是来自数据,是来自你自己的先验。要画 prior vs posterior 对比图。

错误 6:忽略 warmup 样本

NUTS 前 1000 步是自适应调参,不是平稳分布。报告时只用 tune 之后的样本;trace plot 也要看完整链,不要截短。

08 交叉链接

  • DSGE 贝叶斯估计(05):DSGE 是贝叶斯推断在宏观结构模型中的主战场。本页讲一般原理,DSGE 页讲具体模型实现(Dynare 的先验、MCMC、IRF)。
  • 11 显著性诊断实务:贝叶斯后验概率 $P(\theta>0|Y)$ 是 p 值的贝叶斯替代。读那一页的 p 值批判部分,再回到本页看贝叶斯如何解决同一问题。
  • 04 基准回归05 IV:贝叶斯 OLS 在无信息先验下退化为频率 OLS,是贝叶斯与频率派的"桥梁"。
  • 15 潜在结果与因果图:Imbens–Rubin (2015) 把因果推断贝叶斯化,与潜在结果框架天然衔接。

实务建议:如果你的研究样本量超过 1000、模型是标准 OLS/IV/DID,不必上贝叶斯——频率派方法已经足够,贝叶斯只会增加审稿人对"先验选择"的质询。贝叶斯真正适合三类场景:① 小样本结构模型(DSGE、RBC 用 100–200 个季度数据估 30+ 参数);② 层次/多层数据(跨学校、跨地区随机效应,频率派 REML 不报告分布);③ 需要完整不确定性表达的政策分析(后验分布直接喂给福利计算)。中文顶刊里,贝叶斯推断目前主要出现在宏观(BVAR、DSGE)与金融(随机波动率、信用风险)领域;微观实证论文用得少。如果你是微观实证方向,把本页当作"理解 BVAR/DSGE 论文"的工具即可。