欢迎光临寒舍

结构估计──GMM法

2775 字

广义矩估计与模拟矩方法详解

广义矩估计与模拟矩方法详解


第一章:从 MLE 到 GMM 的转变

1.1 为什么需要超越 MLE

前面讲了 NFXP 方法的计算挑战。让我们重新审视这个问题。

NFXP 面临的核心困境:

1
2
3
4
参数 θ → 求解动态规划 → 价值函数V(x;θ) → 理论CCP → 似然函数 → 优化θ
                    ↑                                           ↓
                    └─────────────────────────────────────────┘
                             循环嵌套:内层完全求解!

每次参数更新,都要完全求解贝尔曼方程到收敛。这是计算的瓶颈。

一个激进的想法:

何必用似然函数这种"硬约束"?能不能用更宽松的约束,比如说"模型应该匹配数据的某些矩(moments)"?

这就是矩估计的思想。

1.2 矩估计的基本思想

核心原理很简单:

模型有参数$\theta$,模型暗示数据应该有某些统计特征(矩)。

如果我们能写出:

$$\mathbb{E}_\theta[\text{某个函数}] = \text{数据中的对应统计量}$$

那么,使等式成立的$\theta$,就是我们要的估计量。

最简单的例子:

数据$\{x_1, x_2, \ldots, x_N\}$来自分布$N(\mu, \sigma^2)$。

模型说:$\mathbb{E}_\theta[X] = \mu$。

数据说:样本均值是$\bar{x} = \frac{1}{N}\sum x_i$。

令两者相等:$\mu = \bar{x}$,得到参数估计。

这就是矩估计。

1.3 从简单矩估计到 GMM

局限: 如果参数数量$k$大于矩条件数,就无法精确匹配所有矩。

扩展: 使用多个矩条件,比如均值、方差、偏度等。

如果有$m$个矩条件和$k$个参数,其中$m > k$(超识别),则:

无法同时精确满足所有条件。

GMM 的解决方案:

找参数$\theta$,使所有矩条件的加权平方偏差最小:

$$\hat{\theta}_{GMM} = \arg\min_\theta \left[ \bar{g}_N(\theta) \right]' W_N \left[ \bar{g}_N(\theta) \right]$$

其中:

  • $\bar{g}_N(\theta) = \frac{1}{N} \sum_{i=1}^N g_i(\theta)$ = 样本矩条件(“矩差距”)
  • $g_i(\theta)$ = 个体$i$的矩条件
  • $W_N$ = 权重矩阵(通常是某个协方差矩阵的逆)

这就是广义矩估计(GMM)。


第二章:GMM 的数学框架

2.1 矩条件的定义

设模型由参数$\theta \in \mathbb{R}^k$描述。

定义矩条件函数:

$$g(Z_i; \theta): \mathbb{R}^d \times \mathbb{R}^k \to \mathbb{R}^m$$

其中:

  • $Z_i$ = 个体$i$的观测数据(可以是多个变量)
  • $\theta$ = 参数向量
  • $g(\cdot;\theta)$ = 向量函数,有$m$个分量($m$个矩条件)

关键性质: 在真实参数$\theta_0$下,矩条件的期望为零:

$$\mathbb{E}_{\theta_0}[g(Z_i;\theta_0)] = 0_{m \times 1}$$

这是矩条件的定义性质。

2.2 样本矩条件

给定数据样本$\{Z_1, Z_2, \ldots, Z_N\}$,定义:

$$\bar{g}_N(\theta) = \frac{1}{N} \sum_{i=1}^N g(Z_i;\theta)$$

这是矩条件的样本对应物。

在真实参数处:

由大数律,当$N \to \infty$时:

$$\bar{g}_N(\theta_0) \xrightarrow{p} \mathbb{E}[g(Z;\theta_0)] = 0$$

即样本矩条件应该接近零。

在错误参数处:

如果$\theta \neq \theta_0$,则$\bar{g}_N(\theta)$通常不接近零。

2.3 GMM 估计量的定义

详见GMM 法

GMM 估计量:

$$\hat{\theta}_{GMM} = \arg\min_{\theta} J_N(\theta)$$

其中目标函数为:

$$J_N(\theta) = \left[ \bar{g}_N(\theta) \right]' W_N \left[ \bar{g}_N(\theta) \right]$$

这是一个二次型,$W_N$是$m \times m$的权重矩阵。

权重矩阵的选择:

最优的权重矩阵是矩条件的协方差矩阵的逆:

$$W_N = \left[ \widehat{Var}(g(Z_i;\theta_0)) \right]^{-1} = S_0^{-1}$$

其中:

$$S_0 = \mathbb{E}[g(Z_i;\theta_0) g(Z_i;\theta_0)']$$

(假设$\mathbb{E}[g(Z_i;\theta_0)] = 0$,则这就是协方差)

为什么这个权重最优? 因为它使得不同的矩条件按其精度比例被加权——方差大的条件权重小,方差小的条件权重大。

实践中的权重选择:

通常分两步:

  1. 第一步: 用恒等权重$W_N^{(1)} = I_m$,得到初步估计$\hat{\theta}_1$
  2. 第二步: 用$\hat{\theta}_1$估计$S_0$,设$W_N^{(2)} = \hat{S}_0^{-1}$,重新优化得到$\hat{\theta}_{GMM}$

这叫两步 GMM(Two-Step GMM)。

2.4 GMM 的渐近分布

定理: 在标准正则性条件下,

$$\sqrt{N}(\hat{\theta}_{GMM} - \theta_0) \xrightarrow{d} N(0, V_{GMM})$$

其中渐近方差为:

$$V_{GMM} = (G' S_0^{-1} G)^{-1}$$

其中:

$$G = \frac{\partial \mathbb{E}[g(Z_i;\theta)]}{\partial \theta'}\Big|_{\theta=\theta_0} = \mathbb{E}\left[\frac{\partial g(Z_i;\theta_0)}{\partial \theta'}\right]$$

是矩条件关于参数的导数矩阵。

对比 MLE:

MLE 的渐近方差是:$V_{MLE} = \mathcal{I}(\theta_0)^{-1}$

当矩条件来自似然函数的 score 时,$G = \mathcal{I}(\theta_0)$,所以$V_{GMM} = V_{MLE}$。

但当矩条件不来自似然函数时,$V_{GMM}$通常比$V_{MLE}$大(效率更低)。

这是 GMM 相比 MLE 的"成本"——在交换计算便利性的同时,损失了点估计的效率。

2.5 过度识别与 J 检验

定义:

  • 恰当识别(Just Identified):$m = k$(矩条件数 = 参数数)
  • 过度识别(Over-Identified):$m > k$
  • 识别不足(Under-Identified):$m < k$

恰当识别的情形:

如果$m = k$且$\text{rank}(G) = k$,则 GMM 估计量由以下线性系统唯一确定:

$$\bar{g}_N(\hat{\theta}) = 0_m$$

即:使所有矩条件精确满足。

过度识别的情形:

无法同时精确满足所有矩条件,但可以最小化加权偏差。

此时,$\bar{g}_N(\hat{\theta})$通常不为零。

J 检验(Sargan-Hansen Test):

检验模型是否正确的直观想法:

如果模型正确,应有$\bar{g}_N(\hat{\theta}) \approx 0$。

定义检验统计量:

$$J_N = N \left[ \bar{g}_N(\hat{\theta}_{GMM}) \right]' W_N \left[ \bar{g}_N(\hat{\theta}_{GMM}) \right]$$

在模型正确的原假设下,

$$J_N \xrightarrow{d} \chi^2_{m-k}$$

即自由度为$m-k$(超额识别约束数)的卡方分布。

使用: 如果$J_N$的$p$值很小,拒绝原假设,说明模型不太合适。


第三章:动态模型中的 GMM 应用

3.1 动态模型中的矩条件

回到动态离散选择模型。

状态$x_t$,决策$d_t$,由贝尔曼方程驱动:

$$V(x_t) = \max_d \{ u(x_t, d; \theta) + \beta \mathbb{E}_t[V(x_{t+1})] \}$$

问题: 如何写出矩条件?

思路: 利用模型的理论含义。

例如,如果模型正确,那么:

  • 特定状态下的平均选择频率应该与模型预测一致
  • 状态转移的过程应该与模型的转移函数一致
  • 等等

3.2 具体矩条件的构造

矩条件 1:选择概率的矩条件

定义:对于状态$x_j$和选择$d_k$,

$$g_{jk}(Z_i; \theta) = \mathbb{1}(x_i = x_j, d_i = d_k) - P_\theta(d_k | x_j)$$

其期望是:

$$\mathbb{E}[g_{jk}(Z_i; \theta_0)] = Pr(x_i = x_j, d_i = d_k) - Pr(d_k = 1 | x_j) \cdot Pr(x_i = x_j) = 0$$

只有在模型正确时才成立。

释义: 这说的是,在每个状态,选择的比例应该与模型的 CCP 一致。

矩条件 2:状态转移的矩条件

定义:

$$g_{trans}(Z_i; \theta) = [x_{i,t+1} - \mathbb{E}_\theta(x_{i,t+1} | x_{i,t}, d_{i,t})]$$

期望为零(按定义,条件期望的误差)。

释义: 实际的状态转移应该围绕模型预测的转移均值波动。

矩条件 3:贝尔曼差距(Euler Equation 型)

更巧妙的方法:利用贝尔曼方程本身。

定义:

$$g_{bellman}(Z_i; \theta) = d_{i,t} - P_\theta(x_{i,t})$$

这就是说: 在每个观测,实际决策与模型预测的选择概率的差,期望为零。

3.3 矩条件的直观理解

这些矩条件都有一个共同的思想:

“模型预测的某个量与数据中的对应量应该匹配”

比如:

  • 预测的 CCP 与实际选择频率匹配
  • 预测的状态转移与实际转移匹配
  • 预测的决策与实际决策匹配

这与 MLE 的思想完全不同:

  • MLE 说:“参数应该最大化观测到这个数据的概率”
  • GMM 说:“参数应该使模型的预测与数据的统计特征匹配”

比喻:

  • MLE = “我的模型应该’解释’这个数据”(概率意义)
  • GMM = “我的模型应该’拟合’这个数据”(统计特征意义)

第四章:模拟矩方法(SMM)

4.1 为什么需要模拟?

前面讨论的 GMM 中,矩条件$g(Z_i;\theta)$有闭式表达。

但在复杂的动态模型中,经常无法写出闭式的矩条件。

例子: 假设我们有一个包含两个连续状态变量的模型,状态转移方程很复杂。

我们想说:“模型中,给定今年状态$(x_1, x_2)$,明年的期望状态应该是某个值”。

但期望$\mathbb{E}[x'|x]$没有闭式,只能通过贝尔曼方程的求解、再加上转移过程的蒙特卡洛抽样才能计算。

SMM 的思路: 用模拟数据来计算无法用闭式表达的矩。

4.2 SMM 的基本框架

一般思路:

1
2
3
4
5
6
给定参数θ:
  1. 模拟N_sim条虚拟的代理人序列(每个T期)
  2. 对这些虚拟数据计算样本矩
  3. 与实际数据的样本矩比较

优化θ,使模拟矩与实际矩尽可能接近

具体步骤:

步骤 1:模拟数据生成

给定参数$\theta$和初始状态分布:

1
2
3
4
5
6
7
for s = 1 to N_sim:  (模拟N_sim个代理人)
  for t = 1 to T:    (每个T期)
    x_s,t ~ 初始分布或上期转移分布
    计算CCP: P_s,t = P_θ(x_s,t)
    从伯努利抽样: d_s,t ~ Bernoulli(P_s,t)
    根据转移函数: x_s,t+1 = f(x_s,t, d_s,t, ε_s,t)
           其中ε_s,t ~ 状态转移的随机项

结果:得到虚拟的数据集$\{(x^{sim}_s,t, d^{sim}_s,t)\}$

步骤 2:计算模拟矩

对虚拟数据计算样本矩:

$$\bar{g}^{sim}_N(\theta) = \frac{1}{N_{sim} \cdot T} \sum_s \sum_t g(Z^{sim}_{s,t}; \theta)$$

比如,选择概率的矩条件的模拟值是:

$$\bar{g}^{sim}_{jk}(\theta) = \frac{1}{N_{sim} \cdot T} \sum_s \sum_t \mathbb{1}(x^{sim}_{s,t} = x_j, d^{sim}_{s,t} = d_k) - P_\theta(d_k|x_j)$$

步骤 3:计算实际矩

对真实数据计算样本矩:

$$\bar{g}^{real}_N(\theta) = \frac{1}{N} \sum_{i=1}^N g(Z_i; \theta)$$

步骤 4:定义目标函数

$$J_N(\theta) = \left[ \bar{g}^{sim}_N(\theta) - \bar{g}^{real}_N(\theta) \right]' W_N \left[ \bar{g}^{sim}_N(\theta) - \bar{g}^{real}_N(\theta) \right]$$

SMM 估计量:

$$\hat{\theta}_{SMM} = \arg\min_\theta J_N(\theta)$$

4.3 SMM 与标准 GMM 的关系

标准 GMM 的目标函数:

$$J_N^{GMM}(\theta) = \left[ \bar{g}^{real}_N(\theta) \right]' W_N \left[ \bar{g}^{real}_N(\theta) \right]$$

(令样本矩条件尽可能接近零)

SMM 的目标函数:

$$J_N^{SMM}(\theta) = \left[ \bar{g}^{sim}_N(\theta) - \bar{g}^{real}_N(\theta) \right]' W_N \left[ \bar{g}^{sim}_N(\theta) - \bar{g}^{real}_N(\theta) \right]$$

(令模拟矩与实际矩相等)

关键差异:

在标准 GMM 中,矩条件$g(Z_i;\theta)$的期望在$\theta_0$处为零。

在 SMM 中,没有这个性质!矩条件是$(g^{sim} - g^{real})$,这不一定有任何特殊的期望。

这意味着 SMM 的理论更复杂,因为目标函数的结构不同。

4.4 SMM 的渐近分布

定理(在适当条件下):

$$\sqrt{N}(\hat{\theta}_{SMM} - \theta_0) \xrightarrow{d} N(0, V_{SMM})$$

其中渐近方差涉及:

  1. 实际数据矩的方差
  2. 模拟误差(来自有限的模拟样本$N_{sim}$)

关键发现: SMM 的渐近方差包含两部分:

$$V_{SMM} = V_{\text{sampling}} + V_{\text{simulation}}$$
  • $V_{\text{sampling}}$:来自真实数据的采样误差
  • $V_{\text{simulation}}$:来自模拟数据的蒙特卡洛误差

权衡:

如果增加$N_{sim}$(更多模拟),$V_{\text{simulation}}$减小,但计算成本增加。

在实践中,通常选择$N_{sim}$使得$V_{\text{simulation}} \approx V_{\text{sampling}}$(平衡两个误差)。

4.5 模拟样本规模的选择

规则 1:平衡误差

设真实数据样本$N$,模拟样本$N_{sim}$。

对于矩条件的精度:

  • 实际矩的标准误:$O(1/\sqrt{N})$
  • 模拟矩的标准误:$O(1/\sqrt{N_{sim}})$

为了平衡,选择$N_{sim} \approx N$。

规则 2:计算考虑

如果$N_{sim}$太大,模拟成本会压倒优化成本。

实际中,常见的选择是$N_{sim} = N/10$到$N$。

规则 3:经验法则

  • 小项目($N \sim 1000$):$N_{sim} \approx 500-1000$
  • 中等项目($N \sim 10000$):$N_{sim} \approx 5000-10000$
  • 大项目($N \sim 100000$):$N_{sim}$可以相对小一些(如$N_{sim} = N/10$)

第五章:GMM 与 SMM 的实际应用

5.1 矩条件的选择与构造

关键问题: 选择哪些矩条件?

一般原则:

  1. 参数的识别:矩条件应该能够识别(唯一确定)要估计的参数
  2. 数据可计:矩条件的样本对应物应该能从数据容易计算
  3. 信息量:矩条件应该包含关于参数的足够信息

常见的矩条件来源:

来源 1:模型的一阶条件

如果模型来自代理人的最优化(价值函数最大化),则代理人的决策规则(CCP)本身就提供了矩条件。

例如,假设我们能观测到的矩是:

$$m_j = Pr(\text{在状态}x_j \text{选择} d=1 | x_j)$$

模型预测这应该是 CCP:$P_\theta(x_j)$。

矩条件:$m_j = P_\theta(x_j)$

来源 2:结构假设

如果模型对过程进行了特定假设(如状态转移的函数形式),这些假设本身就给出矩条件。

例如,如果模型说状态转移是:

$$x_{t+1} = \rho x_t + \sigma \epsilon_{t+1}, \quad \epsilon \sim N(0,1)$$

则矩条件可以是:

$$\mathbb{E}[x_{t+1} - \rho x_t] = 0$$

$$\mathbb{E}[(x_{t+1} - \rho x_t)^2] = \sigma^2$$

等等。

来源 3:Euler 方程(金融与宏观)

在很多经济学模型中,代理人在时间上优化,导致Euler 方程:

$$\mathbb{E}_t\left[\frac{\partial u(c_t)}{\partial c_t} = \beta (1+r) \mathbb{E}_t\left[\frac{\partial u(c_{t+1})}{\partial c_{t+1}}\right]\right] = 0$$

这本身就是一个矩条件。

5.2 矩条件数量与参数识别

规则:

要估计$k$个参数,至少需要$k$个线性独立的矩条件(使得矩条件的 Jacobian 秩为$k$)。

计数例子:

假设汽车维修模型中:

  • 参数:$\theta = (\text{维护成本系数}, \text{维修成本})$,共 2 个参数

选择矩条件:

  1. “里程在 100-110 万的车,维修率应该是…(模型预测的维修率)”
  2. “里程在 150-160 万的车,维修率应该是…(模型预测的维修率)”

这两个矩条件可以唯一识别两个参数。

更好的做法: 使用多个里程区间(如 5 个)得到 5 个矩条件,形成过度识别。

5.3 权重矩阵与两步估计

第一步:恒等权重

$$W^{(1)} = I_m$$

得到初步估计:$\hat{\theta}_1$

第二步:最优权重

用$\hat{\theta}_1$估计矩条件的协方差:

$$\hat{S} = \frac{1}{N}\sum_i g(Z_i;\hat{\theta}_1) g(Z_i;\hat{\theta}_1)'$$

设权重为:$W^{(2)} = \hat{S}^{-1}$

重新优化得到$\hat{\theta}_{GMM}$

为什么两步?

  • 第一步得到一个$\sqrt{N}$-相容的估计
  • 第二步使用最优权重,提高渐近效率
  • 如果直接用最优权重(但没有初步估计),权重矩阵在真实参数处也依赖于$\theta_0$,形成循环

第六章:GMM 与 SMM 的优势与局限

6.1 相比 NFXP/MLE 的优势

方面 NFXP/MLE GMM/SMM
计算复杂性 高(需完全求解 DP) 相对低(无需优化贝尔曼方程)
维数诅咒 严重(状态数$N_x^3$) 缓解(依赖矩条件的选择)
稳健性 对模型假设敏感 相对稳健(矩条件不用完全刻画分布)
反事实 自然支持 需要额外工作
效率 最优(充分利用似然信息) 次优(可能低效)
模型检验 间接(收敛性等) 直接(J 检验)

6.2 GMM 相比 NFXP 的主要优势

优势 1:计算成本显著降低

NFXP 每次评估似然,都需$O(I_{bellman} \times N_x)$的计算来求解贝尔曼方程。

GMM/SMM 不需要完全求解贝尔曼方程!

只需:

  • 计算 CCP(从某个来源,可以是非参数估计的)
  • 计算矩条件($O(N_x)$或更低)

成本对比:

假设参数维数$k=5$,状态数$N_x=100$,观测$N=10,000$。

  • NFXP:$O(k \times N_x^3 \times N_{iter})$ = $O(5 \times 10^6 \times 500)$ ≈ 25 亿次操作
  • GMM:$O(N \times m + k \times m^2)$ = $O(10,000 \times 10 + 5 \times 100)$ ≈ 100,000 次操作

差距: 5 个数量级!

优势 2:维数诅咒缓解

如果模型有 3 个连续状态变量:

  • NFXP:$N_x = 50^3 = 125,000$,梯度计算成本$O(k N_x^3)$不可行
  • GMM:选择$m=20$个矩条件(比$N_x$小得多),成本$O(N \times 20 + k \times 20^2)$仍然可行

优势 3:稳健性更高

NFXP 假设:

  • 离散化精度足够
  • 数值优化精确
  • 私人冲击分布完全正确(通常假设 logit)

GMM 假设:

  • 矩条件的期望为零(通常更弱)
  • 不需要假设完整的分布

因此,当模型有误设时,GMM 的偏差通常更小。

6.3 GMM/SMM 的主要局限

局限 1:效率损失

当模型完全正确时,MLE 是最优渐近效率的估计量。

GMM 使用的矩条件通常不是似然函数的 score,所以方差更大。

数值例子:

假设 MLE 的标准误是$\hat{\theta}$的 0.1,GMM 可能是 0.15。

这意味着置信区间更宽,假设检验功效更低。

局限 2:反事实分析困难

GMM 估计的是参数,但没有直接给出完整的模型结构。

如果要做反事实分析(“如果维修成本降低 50%会怎样”),需要:

  1. 估计参数
  2. 指定完整的模型(成本函数、状态转移等)
  3. 求解动态规划

第 2 步不总是直接的。

相比之下,NFXP 估计过程已经完全求解了动态规划,反事实分析是"免费的"。

局限 3:矩条件的选择与检验

问题 1: 选择哪些矩条件?

通常有多种可能的选择(里程区间的粗细程度、是否包含二阶矩等),没有唯一的"正确答案"。

结果可能对这个选择敏感。

问题 2: 即使用 J 检验,也不知道模型的哪个部分有问题。

J 检验只说"模型不匹配",但不说是成本函数有误、状态转移有误,还是其他。

局限 4:SMM 的额外复杂性

SMM 引入了模拟误差。如果模拟样本$N_{sim}$太小,模拟不精确,导致目标函数有噪声,优化困难。

需要仔细选择$N_{sim}$来平衡计算成本和精度。


第七章:GMM 与 SMM 的详细对比

7.1 矩条件的三种类型

类型 1:显式矩条件(Explicit Moments)

矩条件有闭式表达,不需要模拟。

例子:

$$g_1(Z_i;\theta) = d_i - P_\theta(x_i)$$

$$g_2(Z_i;\theta) = x_{i,t+1} - \mathbb{E}_\theta(x_{i,t+1}|x_{i,t}, d_{i,t})$$

特点:

  • 计算快(直接)
  • 精确(无模拟误差)
  • 需要 CCP 或期望值的闭式形式

类型 2:可以部分模拟的矩条件(Partially Simulated)

矩条件的形式明确,但某些期望值需要模拟。

例子: 假设成本函数包含一个难以直接计算的项。

用蒙特卡洛近似这个期望,然后代入矩条件。

特点:

  • 中等复杂度
  • 可控制的模拟误差
  • 实际应用中常见

类型 3:完全模拟的矩条件(Fully Simulated,SMM)

整个矩条件都通过模拟虚拟数据来计算。

例子: 对虚拟数据计算平均维修率,与实际平均维修率比较。

特点:

  • 非常灵活
  • 可处理极复杂的模型
  • 计算成本大,且含模拟误差

7.2 何时用 GMM vs SMM

优先使用 GMM 的情形:

  1. 矩条件有闭式表达(至少大部分)
  2. CCP 可以从非参数方法直接估计
  3. 计算资源有限
  4. 模型不太复杂

必须用 SMM 的情形:

  1. 矩条件没有闭式表达
  2. 需要通过完整的动态规划解来定义矩条件
  3. 状态维数高($\geq 3$),离散化不可行
  4. 有计算资源(或能并行化)

混合使用: 在许多现代应用中,既不是"纯 GMM"也不是"纯 SMM",而是混合:

  • 用非参数 CCP 的矩条件(GMM 的一部分)
  • 加上某些需要模拟的补充条件(SMM 的一部分)

第八章:实际应用案例

8.1 案例 1:汽车维修的简化 GMM

模型: 简化的一维状态模型(里程)

参数: $\theta = (\rho, RC)$

  • $\rho$:维护成本系数
  • $RC$:维修成本

矩条件:

将里程区间分成 5 档:

里程区间 平均维修率(数据) 模型预测的 CCP
0-80 万 $\bar{d}_1 = 0.05$ $P_\theta(x_1)$
80-120 万 $\bar{d}_2 = 0.15$ $P_\theta(x_2)$
120-160 万 $\bar{d}_3 = 0.30$ $P_\theta(x_3)$
160-200 万 $\bar{d}_4 = 0.50$ $P_\theta(x_4)$
200+万 $\bar{d}_5 = 0.70$ $P_\theta(x_5)$

矩条件:

$$g_j(\theta) = \bar{d}_j - P_\theta(x_j), \quad j=1,\ldots,5$$

GMM 目标函数:

$$\hat{\theta}_{GMM} = \arg\min_\theta \sum_{j=1}^5 g_j(\theta)^2$$

(用恒等权重,简化表达)

为什么这行得通?

  • 如果$\rho$太大(维护成本太贵),模型预测所有维修率都会高
  • 如果$RC$太小(维修成本太便宜),模型预测即使在低里程也会维修
  • 调整$\rho$和$RC$,使 5 个预测的维修率都与数据匹配

计算成本:

与 NFXP 相比:

  • 不需要求解贝尔曼方程(计算 CCP 的方式待定)
  • 每次评估目标函数,只需计算 5 个矩条件
  • 可能优化只需几十次迭代

总成本: 秒级(对比 NFXP 的分钟级)

8.2 案例 2:多维状态的 SMM

模型: 设备替换决策,有两个状态变量:

  • $x_1$:主设备年龄
  • $x_2$:附加设备年龄

参数: $\theta = (\theta_1, \theta_2, \theta_3)$

矩条件(需要模拟):

  1. “不同$(x_1, x_2)$的替换率应该与模型预测一致”
  2. “主设备年龄的自相关系数应该是…"(如果有转移过程)
  3. “设备年龄的联合分布应该…(某些分位数)”

为什么需要 SMM?

  • 完全离散化:$50 \times 50$状态,贝尔曼方程很大
  • NFXP 计算成本过高
  • SMM 中,只需模拟虚拟数据,计算对应矩,无需完全求解 DP

步骤:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
对于每个参数候选θ:
  模拟10000个虚拟企业,每个运营20年
  对虚拟数据计算:
    - 各(x1,x2)组合的替换率
    - 年龄的自相关
    - 其他统计量
  与真实数据比较
  计算目标函数J(θ)

优化θ最小化J(θ)

第九章:GMM 与 SMM 的计算实现

9.1 矩条件的精确计算

假设已经估计了 CCP(从非参数方法或其他)。

计算矩条件的步骤:

对于显式矩条件(GMM)

矩条件: $g_j(\theta) = \bar{d}_j - P_\theta(x_j)$

计算:

  1. 从数据中统计:在状态$x_j$附近,维修的比例$\bar{d}_j$
  2. 根据参数$\theta$,计算模型预测的 CCP:$P_\theta(x_j)$
  3. 差值即为矩条件

代码框架(伪代码):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
function compute_moments_GMM(theta, data, CCP)
  moments = []
  for j in 1:num_states
    # 数据中的维修率
    data_mean = mean(data[state==j].repair)

    # 模型预测的CCP
    model_pred = CCP[j](theta)

    # 矩条件
    moment = data_mean - model_pred
    moments.append(moment)

  return moments

计算复杂度: O($N + N_x$),非常快。

对于模拟矩条件(SMM)

步骤 1:参数确定下的模拟

1
2
3
4
5
6
7
8
9
function simulate_data(theta, N_sim, T_periods)
  for i in 1:N_sim
    x[i,1] = 初始状态
    for t in 1:T_periods
      P = CCP(x[i,t], theta)  # 根据θ计算CCP
      d[i,t] ~ Bernoulli(P)
      x[i,t+1] = transition(x[i,t], d[i,t], noise)

  return {x, d}

步骤 2:计算模拟矩

对虚拟数据$\{x^{sim}, d^{sim}\}$计算样本矩,与实际数据的样本矩比较。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
function compute_moments_SMM(theta, real_data, N_sim)
  sim_data = simulate_data(theta, N_sim, T)

  # 实际矩
  real_moments = compute_statistics(real_data)

  # 模拟矩
  sim_moments = compute_statistics(sim_data)

  # 差异
  diff = sim_moments - real_moments

  return diff

计算复杂度: O($N_{sim} \times T + N \times m$)

如果$N_{sim} \times T$很大,这可能成为瓶颈。

9.2 目标函数的优化

目标函数:

$$J(\theta) = [g(\theta)]' W [g(\theta)]$$

其中$g(\theta)$是矩条件(向量),$W$是权重矩阵。

一阶条件:

$$\frac{\partial J}{\partial \theta} = 2 G(\theta)' W [g(\theta)] = 0$$

其中$G(\theta) = \partial g / \partial \theta'$。

优化算法:

方法 1:梯度下降

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
theta_0 = 初始值
for iter in 1:max_iter
  g = compute_moments(theta_0)
  G = numerical_gradient(compute_moments, theta_0)

  grad = 2 * G' * W * g

  # 线搜索
  step_size = line_search(J, theta_0, -grad)

  theta_1 = theta_0 - step_size * grad

  if ||theta_1 - theta_0|| < tol:
    break

  theta_0 = theta_1

return theta_0

优点: 简单

缺点: 收敛慢,特别是在接近最优时

方法 2:拟牛顿法(BFGS)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
theta_0 = 初始值
B_0 = I  # 初始的Hessian近似

for iter in 1:max_iter
  g = compute_moments(theta_0)
  G = numerical_gradient(compute_moments, theta_0)

  grad = 2 * G' * W * g

  # 搜索方向
  direction = -inv(B) * grad

  # 线搜索
  step_size = line_search(J, theta_0, direction)

  theta_1 = theta_0 + step_size * direction

  # 更新Hessian近似
  B_1 = update_B_BFGS(B_0, theta_1 - theta_0, grad_1 - grad_0)

  if ||theta_1 - theta_0|| < tol:
    break

  theta_0 = theta_1
  B_0 = B_1

return theta_0

优点: 快速收敛,适度计算

缺点: 需要更新 Hessian 近似

方法 3:数值梯度的计算

由于矩条件的形式复杂,有限差分通常是可行的:

$$\frac{\partial g_j}{\partial \theta_k} \approx \frac{g_j(\theta + \epsilon e_k) - g_j(\theta - \epsilon e_k)}{2\epsilon}$$

对$m$个矩条件和$k$个参数,需要$2k$次矩条件评估。

成本权衡:

  • 如果矩条件评估很快(GMM),数值梯度可行
  • 如果矩条件评估很慢(SMM),需要考虑解析梯度或其他技巧

9.3 收敛诊断

诊断 1:梯度的大小

在最优点处,梯度应该接近零。

1
2
3
grad_norm = ||∂J/∂θ||
if grad_norm > 1e-4:
  警告:可能未收敛

诊断 2:参数变化

连续迭代的参数变化应该减小:

1
2
3
param_change = ||theta_k - theta_{k-1}||
if param_change 在振荡:
  可能步长太大,或函数有多个局部最小值

诊断 3:目标函数值

1
2
3
4
if J 在减少但减速:
  正常的收敛行为
if J 突然增加:
  可能数值问题,或步长过大

诊断 4:J 检验

在最优$\hat{\theta}$处,计算:

$$J_N = N [g(\hat{\theta})]' W [g(\hat{\theta})]$$

检查其是否来自$\chi^2_{m-k}$分布。

1
2
3
p_value = 1 - cdf_chi2(J_N, m-k)
if p_value < 0.05:
  模型可能有误设

第十章:GMM 与 SMM 的高级话题

10.1 Continuous Updating GMM

前面讨论的两步 GMM 有个缺陷:

第一步用恒等权重$I_m$估计的$\hat{\theta}_1$可能不在目标函数$J^{(2)}(\theta)$的临界点上。

连续更新 GMM(Continuous Updating Estimator,CUE):

直接优化:

$$\hat{\theta}_{CUE} = \arg\min_\theta [g_N(\theta)]' [\widehat{Var}(g_N(\theta))]^{-1} [g_N(\theta)]$$

其中权重矩阵$W(\theta) = [\widehat{Var}(g_N(\theta))]^{-1}$也随$\theta$变化。

优点: 渐近一阶有效,不需要两步

缺点: 优化困难(目标函数非光滑),计算成本高

10.2 多目标函数的处理

有时候有多个"竞争的"目标,比如:

  • 拟合 CCP
  • 拟合状态分布
  • 拟合某个转移过程

可以构造多个矩条件集合,组合成一个总的目标函数:

$$J(\theta) = \sum_k \lambda_k J_k(\theta)$$

其中$\lambda_k$是权重(可以反映不同目标的相对重要性)。

关键问题: $\lambda_k$如何选择?

通常:

  • 从先验知识或文献
  • 敏感性分析:显示结果对$\lambda$的依赖程度
  • 后处理的不确定性量化

10.3 蒙特卡洛误差的修正

在 SMM 中,模拟引入了额外的噪声。

这导致估计量的方差比标准 GMM 大。

修正方法 1:增加模拟样本

选择$N_{sim}$足够大使$V_{simulation} \ll V_{sampling}$。

修正方法 2:使用近似方差公式

GMM 方差公式适应改为:

$$V_{SMM} = V_{sampling} \times \left(1 + \frac{N}{N_{sim} \times T}\right)$$

这个"修正因子"说明了模拟如何增加方差。

修正方法 3:Antithetic Variates 与其他方差减少技巧

蒙特卡洛模拟中,有多种技巧可减少噪声:

  • 对偶变量(Antithetic Variates)
  • 控制变量(Control Variates)
  • 分层抽样(Stratified Sampling)

使用这些可显著减少$N_{sim}$的需求。

10.4 动态面板模型的 GMM(Arellano-Bond)

在时间序列数据上应用 GMM 时,常面临动态内生性问题。

Arellano-Bond 估计器: 使用滞后变量作为工具变量

$$g_i(Z_i; \theta) = [\text{模型残差}] \times [\text{滞后值}]$$

这利用了"滞后值与当期误差正交"的假设。

虽然经典动态面板文献不直接关于动态离散选择,但相同思想可应用:用过去的决策状态作为矩条件。


第十一章:GMM 与 NFXP 的深入对比

11.1 识别论的视角

两种方法在参数识别上的差异。

NFXP(完全信息最大似然):

  • 依赖完整的模型 specification
  • CCP 的形状完全由参数$\theta$确定
  • 参数识别通过似然函数的形状(一般很强)

GMM(矩方程):

  • 只依赖选定的矩条件
  • 参数识别通过矩条件的独立性(可能较弱)
  • 可能存在多个$\theta$给出相同的矩

识别强度对比:

情形 NFXP 识别 GMM 识别
矩条件数 < 参数数 无(无法估计) 无(识别不足)
矩条件数 = 参数数 通常强 取决于条件的独立性
矩条件数 > 参数数 非常强 中等(取决于冗余性)

11.2 误设(Misspecification)下的表现

场景: 假设真实模型有某个特征(如不同的成本函数形式),但估计时用错了假设。

NFXP 的反应:

  • 所有参数估计都会有系统性偏差
  • 偏差的方向和大小难以预测
  • 反事实分析会继承这个偏差

GMM 的反应:

  • 只有参与矩条件的参数会有明显偏差
  • 其他参数可能"幸存”
  • 通过 J 检验可以(有时)检测误设

例子:

假设维修成本实际上不是常数$RC$,而是随里程变化的:$RC(x) = RC_0 + RC_1 \times x$。

  • NFXP 用常数 RC 估计,会给出有偏的参数(无法检测到这个误设)
  • GMM 如果矩条件包含"不同里程的维修率",J 检验会显示不拟合,可能提示有问题

11.3 样本量的影响

小样本表现:

NFXP:

  • 最大似然估计在小样本中仍然相对稳健
  • 但数值优化可能困难(噪声大)

GMM:

  • 样本矩条件的波动大,目标函数有噪声
  • 但仍可用(矩估计的性质)

大样本效率:

NFXP:

  • 渐近有效,标准误随$N^{-1/2}$缩放(最优)

GMM:

  • 非完全有效,标准误可能更大
  • 但在维数高时,渐近优于 NFXP(计算考虑)

第十二章:实用指南与决策树

12.1 选择方法的决策流程

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
问题分析:参数数,状态维数,计算资源

    ├─ 计算资源充足?计算成本不是瓶颈?
    │  ├─ 是 → NFXP(最优效率)
    │  └─ 否 → 考虑GMM/SMM
    │
    ├─ 完整的模型specification已知且相信?
    │  ├─ 是 → NFXP or GMM都可
    │  └─ 否 → GMM(更稳健)
    │
    ├─ 需要反事实分析?
    │  ├─ 是 → NFXP(自然支持)
    │  └─ 否 → GMM足够
    │
    ├─ 状态维数?
    │  ├─ 1-2维 → NFXP or GMM都可
    │  ├─ 3维 → NFXP困难,用GMM/SMM
    │  └─ 4+维 → SMM(或特殊结构)
    │
    └─ 是否需要进行假设检验(J检验)?
       ├─ 是 → GMM(直接)
       └─ 否 → NFXP也可

12.2 GMM/SMM 的实施检查清单

在正式估计前,检查以下事项:

  • 矩条件清晰 - 能否用一句话描述每个矩条件的经济含义?
  • 参数识别 - 每个参数是否由某个矩条件唯一识别?
  • 数据可计 - 是否能从数据容易计算所有矩条件的样本对应物?
  • 初值合理 - 初始参数值是否在可信范围内?
  • 样本大小 - $N$是否足够使矩条件的方差可估计?
  • 模拟规模(如用 SMM)- $N_{sim}$与$N$的比例是否合理?
  • 权重矩阵 - 是否考虑两步估计或 CUE?
  • 收敛诊断 - 是否检查梯度、参数变化、目标函数趋势?
  • 敏感性分析 - 结果对矩条件选择、初值、权重的依赖?
  • 外部验证 - 估计的参数是否与现有文献、行业知识一致?

12.3 实际代码框架(概念伪代码)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# GMM估计的整体框架

class GMMEstimator:
  def __init__(self, data, moment_functions, param_dim):
    self.data = data
    self.g = moment_functions  # 矩条件函数列表
    self.k = param_dim

  def compute_moments(self, theta):
    """计算样本矩条件"""
    moments = []
    for g_i in self.g:
      m = mean([g_i(z, theta) for z in self.data])
      moments.append(m)
    return np.array(moments)

  def compute_var_matrix(self, theta):
    """估计矩条件的协方差矩阵"""
    gvals = np.array([
      [g_i(z, theta) for g_i in self.g]
      for z in self.data
    ])
    return gvals.T @ gvals / len(self.data)

  def objective(self, theta, W=None):
    """GMM目标函数"""
    g = self.compute_moments(theta)
    if W is None:
      W = np.eye(len(g))
    return g @ W @ g

  def estimate_twostep(self, theta_init):
    """两步GMM估计"""
    # 第一步:恒等权重
    res1 = minimize(
      lambda t: self.objective(t, W=np.eye(len(self.g))),
      theta_init
    )
    theta1 = res1.x

    # 第二步:最优权重
    S = self.compute_var_matrix(theta1)
    W2 = np.linalg.inv(S)

    res2 = minimize(
      lambda t: self.objective(t, W=W2),
      theta1
    )
    theta_hat = res2.x

    return theta_hat

  def j_test(self, theta_hat):
    """Sargan-Hansen J检验"""
    g = self.compute_moments(theta_hat)
    S = self.compute_var_matrix(theta_hat)
    W = np.linalg.inv(S)

    J = len(self.data) * (g @ W @ g)
    df = len(self.g) - self.k  # 超额识别自由度
    p_value = 1 - chi2.cdf(J, df)

    return J, df, p_value

  def bootstrap_se(self, theta_hat, nboot=100):
    """Bootstrap标准误"""
    ses = np.zeros(self.k)
    thetas = []

    for b in range(nboot):
      idx = np.random.choice(len(self.data), len(self.data))
      boot_data = [self.data[i] for i in idx]

      # 用bootstrap样本重新估计
      ... # 用self.data = boot_data重新估计

      thetas.append(theta_b)

    return np.std(thetas, axis=0)

第十三章:GMM 与 SMM 的文献进展

13.1 重要里程碑

GMM 的起源:

  • 1982: Hansen - “GMM 理论与应用”(Econometrica)
  • 成为计量经济学标准方法

动态离散选择中的应用:

  • 1994: Pakes & Olley - 用 GMM 估计动态模型
  • 2000s: Bajari, Benkard, Levin 等 - SMM 在复杂模型中的应用

与 NFXP 的对比:

  • 2000: Aguirregabiria & Mira - CCP 方法,介于 GMM 和 NFXP 之间
  • 2010: 综述性论文,总结三种方法的优劣

13.2 当代应用的趋势

趋势 1:混合方法

  • 不是"纯粹"的 GMM 或 SMM
  • 而是结合两者的优势:用非参数 CCP 的简单矩条件+少量模拟矩条件

趋势 2:高维动态模型

  • 面对 3 维或更高的状态空间
  • SMM 成为必选(NFXP 不可行)

趋势 3:贝叶斯方法

  • 不仅是频率派的 GMM
  • 贝叶斯 GMM(用 MCMC)也越来越常见

趋势 4:机器学习融合

  • 用神经网络等学习 CCP 或 policy 函数
  • 再用 GMM 估计参数(避免求解 DP)

第十四章:总结与对比表

14.1 三种方法的综合对比

方面 NFXP CCP 半参数 GMM/SMM
计算难度 高 中 低
所需的 DP 求解 完整 部分反演 无
维数诅咒影响 严重 中等 轻微
参数效率 最优 次优 次优
误设下表现 有偏 相对稳健 相对稳健
反事实支持 自然 需额外工作 需额外工作
模型检验 间接 通过 CCP 比较 直接(J 检验)
适用问题范围 中等 广 最广
学习曲线 陡 中 平缓

14.2 选择建议速查表

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
低维(状态≤2维),小参数(k≤5)
└─ 计算充足 → NFXP
└─ 计算有限 → CCP or GMM

中维(状态3维),中等参数(5≤k≤10)
└─ 需反事实 → NFXP(如可行)or CCP
└─ 只需参数 → GMM/SMM

高维(状态≥4维),多参数(k>10)
└─ SMM is necessary (NFXP infeasible)

模型不确定
└─ GMM/SMM (稳健性)

需要假设检验
└─ GMM/SMM (J检验)

时间紧张
└─ GMM/SMM (快速粗略估计)
     或 CCP(折衷)

14.3 各方法的计算复杂性(Big-O 记号)

假设参数$k$个,状态$N_x$个,观测$N$个。

方法 单次评估成本 优化迭代数 总成本
NFXP $O(k N_x^3)$或$O(k N_x^2)$ 500-1000 $O(k N_x^3 \times 1000)$
CCP $O(N + N_x^2)$ 300-500 $O(k N_x^2 \times 500)$
GMM $O(N \times m)$ 50-200 $O(N \times m \times 200)$
SMM $O(N_{sim} \times T + N \times m)$ 100-500 取决于$N_{sim}$

其中$m$是矩条件数(通常$m \ll N_x$)。


第十五章:高级应用与拓展

15.1 不完全信息下的 GMM

真实经济中,代理人的信息可能不完全。比如,一个公司不知道竞争对手未来的策略。

处理方法:

  • 用信念函数(belief function)代替完全前瞻的 CCP
  • GMM 中的矩条件变成"给定其信念的最优决策应该与观测一致"
  • 同时估计参数和信念的演化

这导致更复杂的 GMM 问题,但计算上仍比 NFXP 可行。

15.2 异质性与混合分布

如果代理人有未观测的异质性(比如,不同驾驶员对可靠性的价值评估不同)。

处理方法:

  • 用混合分布模型(Mixture Models)
  • GMM 中增加矩条件来刻画分布的特征(如二阶矩)
  • SMM 中在模拟时对不同类型的代理人分别抽样

15.3 多代理人博弈(产业组织)

如果决策不仅由自己的状态驱动,还由竞争对手的决策驱动(Markov Perfect Equilibrium)。

计算挑战: 求解均衡远比单代理问题复杂

GMM/SMM 的优势:

  • 可以避免显式求解均衡
  • 直接用矩条件"均衡 action 应该与 CCP 一致"

例子: 进退市决策受竞争对手进退决策影响

  • NFXP 需要求解所有可能的均衡
  • GMM 可直接用矩条件估计

第十六章:最终总结

16.1 三种估计方法的精髓

NFXP(嵌套固定点)

$$\text{核心:} \max_\theta \ell(\theta) = \max_\theta \sum_i \log P_\theta(d_i | x_i)$$

$$\text{其中} P_\theta = \text{由完整求解的动态规划确定}$$
  • 充分利用模型结构
  • 渐近最优效率
  • 计算密集

CCP 半参数方法

$$\text{核心:} \text{非参数估计CCP} \to \text{反演价值函数} \to \text{估计参数}$$
  • 折衷方案
  • 相对快速且稳健
  • 理论相对复杂

GMM/SMM(矩方法)

$$\text{核心:} \min_\theta ||g^{sim}(\theta) - g^{real}(\theta)||_W^2$$

$$\text{其中} g = \text{选定的统计矩}$$
  • 最灵活,适用范围最广
  • 计算相对快(特别高维)
  • 效率可能次优

16.2 实践指导原则

  1. 从简单开始

    • 先用非参数方法理解数据
    • 然后逐步增加模型复杂度
  2. 多方法验证

    • 不要仅用一种方法
    • 如果条件允许,用多种方法估计,比较结果
    • 差异很大时,说明有问题(模型、实施还是数据)
  3. 充分诊断

    • 检验模型假设(用 J 检验等)
    • 敏感性分析(对初值、矩条件选择、权重等)
    • Bootstrap 或其他方法估计标准误
  4. 透明报告

    • 清晰说明矩条件定义
    • 报告诊断统计量
    • 讨论局限与假设
  5. 质重于速

    • 花时间在问题理解和模型设定上
    • 不要盲目追求最快的估计方法
    • 一个可信的参数估计比快速的粗糙估计值钱得多

16.3 学习路径与参考资源

基础阶段: 理论与基本应用

  • 教科书:Cameron & Trivedi《Microeconometrics》(GMM 章节)
  • 论文:Hansen 1982(开创性)

进阶阶段: 动态模型

  • 论文:Rust 1987(NFXP)
  • 论文:Aguirregabiria & Mira 2010(综述)

高级阶段: 应用与拓展

  • 产业组织应用:Pakes & McGuire 系列
  • 复杂模型:Nevo & Whinston 等

实现阶段: 编程与实验

  • 从简单的玩具模型开始
  • 逐步增加复杂度
  • 多用蒙特卡洛模拟验证(你的估计能否恢复已知参数)

最后:快速参考卡

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
┌─────────────────────────────────────────────┐
│        方法选择的快速决策树                 │
├─────────────────────────────────────────────┤
│                                             │
│  状态维数?                                 │
│  ├─ 1维:  NFXP or GMM                      │
│  ├─ 2维:  NFXP or GMM or CCP               │
│  ├─ 3维:  GMM/SMM (NFXP hard)              │
│  └─ 4+:   SMM only                         │
│                                             │
│  计算资源?                                 │
│  ├─ 充足:   NFXP (best efficiency)        │
│  ├─ 中等:   CCP (compromise)              │
│  └─ 有限:   GMM/SMM (fast)                │
│                                             │
│  反事实需求?                              │
│  ├─ 是:     prefer NFXP                    │
│  └─ 否:     GMM/SMM 足够                   │
│                                             │
│  模型确定性?                              │
│  ├─ 高:     NFXP (gain efficiency)        │
│  └─ 低:     GMM/SMM (more robust)         │
│                                             │
└─────────────────────────────────────────────┘

三种方法的"黄金法则":

  1. 如果能用 NFXP,就用它(最优效率)
  2. 如果 NFXP 太慢,用 CCP(折衷)
  3. 如果 CCP 都不行,用 GMM/SMM(最后手段,但往往足够好)
使用 Hugo 构建
主题 Stack 由 Jimmy 设计