Redding-Rossi-Hansberg 空间一般均衡:通勤、贸易与土地市场
本页自包含:经济环境与假设 → Fréchet 通勤概率推导 → 土地市场出清与工资方程 → 5 步嵌套迭代算法 → 参数估计 → 精确帽子代数 → 反事实求解 + 福利计算 → 论文案例。
01 经济环境与假设
传统新经济地理(Krugman 1991)与跨区贸易模型(Eaton-Kortum 2002)把"地区"当作无内部结构的点。Redding & Rossi-Hansberg (2017, Econometrica 工作母机版 / Annual Review of Economics 综述) 把城市内部空间结构、跨区贸易、通勤选择与土地市场出清统一到一个可量化、可估计、可反事实的一般均衡框架。
核心假设清单(每条附设定理由 / 参数含义 / 经济直觉):
- 假设 A1:$N$ 个区位、外生土地供给 $H_n$、总人口 $\bar L$。经济由 $N$ 个离散区位(census tract / 城市 / 省)组成。理由:离散区位是"量化"的前提——若区位连续则无法用矩阵代数求数值解;外生 $H_n$ 把地理约束(河流、海岸线、坡度)固化为供给侧刚性。参数含义:$H_n$ 是 $n$ 地有效住房/土地存量,$\bar L$ 是总人口(封闭经济)。直觉:土地是唯一不可贸易的"固定因子",一切集聚力最终都被地价对冲。
- 假设 A2:居住地与工作地分离(commuting)。工人住在 $n$,可到任意 $i$ 工作,产生通勤成本 $\kappa_{ni}$。理由:这是 RRH 相对经典 EK(人随岗走)的核心新增——把"住哪"与"在哪上班"分开,模型才能回答地铁、学区、产业园的空间溢出。参数含义:$\kappa_{ni}\geq 1$ 是 $n\to i$ 的通勤摩擦(时间+货币+心理),$\kappa_{nn}=1$(在家上班)。直觉:北京国贸上班、燕郊居住正是 $B_{n,\text{国贸}}>0$ 的现实写照。
- 假设 A3:Fréchet 双重冲击。生产率 $z_i(\omega)\sim \text{Fréchet}(T_i,\theta)$、通勤偏好 $b_{j,ni}\sim \text{Fréchet}(B_{ni},\kappa)$。理由:极值分布的"独立最大值仍同分布"性质(Gnedenko 极值定理)使贸易份额、通勤概率都有闭式,避免模拟大量企业/个人。参数含义:$\theta$ 是贸易弹性(生产率离散度,越大→生产率越同质→贸易越敏感),$\kappa$ 是通勤偏好异质性(越大→工人对工资差越敏感)。直觉:每个工人对"住燕郊去国贸"有专属偏好(有人受不了通勤、有人无所谓),Fréchet 把这种异质聚合成宏观通勤流。
- 假设 A4:Cobb-Douglas 偏好,消费份额 $\beta$、住房份额 $1-\beta$。理由:CD 函数支出份额固定,使住房支出占收入比例恒为 $1-\beta$,住房出清方程可直接写成 $Q_n H_n=(1-\beta)\cdot\text{收入}$。参数含义:$\beta\approx 0.75\sim 0.8$(美国消费支出中住房约占 20–25%,故 $1-\beta\approx 0.2\sim 0.25$)。直觉:房价直接进间接效用 $V\propto w/(P^\beta Q^{1-\beta})$,这是房价资本化(capitalization)的源头。
- 假设 A5:iceberg 贸易成本 $d_{ni}\geq 1$,$d_{nn}=1$。理由:iceberg 形式省去运输部门建模,1 单位货物从 $i$ 出发只有 $1/d_{ni}$ 到达 $n$;与 EK 兼容。参数含义:$d_{ni}$ 可从 GIS 最短路径时间/运费/关税构造,是政策(高铁、关税)的直接作用对象。直觉:$d_{ni}\downarrow$ → 到岸价 $\downarrow$ → $n$ 地从 $i$ 进口份额 $\pi_{ni}\uparrow$ → $i$ 地产品市场扩大 → $w_i\uparrow$。
符号与参数总表
| 符号 | 含义 | 典型取值/来源 |
|---|---|---|
| $N$ | 区位个数 | 中国 285 地级市 / 美国 3000+ 县 |
| $w_n$ | $n$ 地名义工资(内生化) | — |
| $Q_n$ | $n$ 地房价/地价(内生化) | — |
| $L_n$ | $n$ 地居住人口(内生化) | $\sum_n L_n=\bar L$ |
| $L_n^w$ | $n$ 地工作人口(内生化) | $L_i^w=\sum_n\lambda_{ni}L_n$ |
| $P_n$ | $n$ 地复合消费品价格指数 | EK 闭式 |
| $\pi_{ni}$ | $n$ 地从 $i$ 进口的支出份额 | 引力形式 |
| $\lambda_{ni}$ | 住 $n$ 去 $i$ 上班的通勤概率 | 行和=1 |
| $T_i$ | $i$ 地生产率水平(外生/反推) | inversion |
| $B_{ni}$ | $n\to i$ 通勤便利度 $=\kappa_{ni}^{-\alpha}$ | 从通勤 OD 估计 |
| $H_n$ | $n$ 地外生住房存量 | 住房普查/卫星灯光 |
| $\theta$ | 贸易弹性(Fréchet 形状) | $\approx 4\sim 5$(Caliendo-Parro 2015) |
| $\kappa$ | 通勤偏好异质性 | $\approx 4\sim 8$(Ahlfeldt et al. 2015) |
| $\beta$ | 消费份额(住房 $1-\beta$) | $\approx 0.75\sim 0.8$ |
| $\alpha$ | 通勤成本弹性 $B_{ni}=\kappa_{ni}^{-\alpha}$ | $\approx 0.1\sim 0.3$ |
三条线在一般均衡中相互反馈:工资高的工作区位吸引通勤者;通勤者多的居住区位推高地价;高地价降低实际收入,反过来抑制居住需求;贸易成本下降提升市场准入,改变工资与人口分布。RRH 证明在合理参数条件下该高维不动点系统存在唯一均衡,可用"迭代—收缩"算法高效求解。这正是它成为当代量化空间经济学(QSE)工作母机的原因。
与上一页结构引力的"单一均衡方程"不同,RRH 的复杂度来自内生变量的数量:工资向量 $\{w_n\}$、房价向量 $\{Q_n\}$、居住人口向量 $\{L_n\}$、工作人口向量 $\{L_n^w\}$、通勤矩阵 $\{\lambda_{ni}\}$、贸易矩阵 $\{\pi_{ni}\}$,它们两两耦合。初学者最容易犯的错,就是把这些变量当成独立方程单独求解,忽略反馈环。本页后面的 5 步迭代算法与 Python 求解器,本质上是把这一高维耦合系统按"贸易 → 通勤 → 房价 → 工资"的顺序拆开,用阻尼更新保证收敛。
若把都会区当一个点,无法回答"地铁修到 A 区后 B 区房价涨多少""某区建工业园对周边居住地价溢出"。RRH 把区位粒度细化到 census tract,使政策评估落到空间单元上。
02 偏好、技术与贸易
2.1 偏好
$C_n$ 是 CES/EK 复合消费品,$H_n$ 是住房消费,$z_{j,n}$ 是工人 $j$ 居住在 $n$ 的区位偏好冲击,服从 Fréchet:$F_n(z)=\exp(-B_n z^{-\epsilon})$。$B_n$ 是平均宜居度,$\epsilon$ 是偏好异质性(越大流动性越高)。
2.2 生产与贸易(EK 变体)
$\theta$ 是贸易弹性(Fréchet 形状参数),$T_i$ 是 $i$ 地生产率水平。iceberg 成本 $d_{ni}\geq 1$,到岸价 $p_{ni}(\omega)=(w_i/(z_i(\omega)A_i))d_{ni}$。
这套 EK 技术模块与上一页结构引力完全一致——贸易份额 $\pi_{ni}$ 就是引力方程在 EK 下的闭式。RRH 并没有改写贸易理论,而是把 EK 嵌入到一个更丰富的空间结构中:$n$ 与 $i$ 现在同时是"消费地"与"居住/工作地",价格指数 $P_n$ 既决定消费品成本,也通过间接效用影响居住选择。这种"同一组方程服务多个市场"的设计,是量化空间模型可解的关键——避免了为每个市场单独设定一个独立的需求系统。
03 通勤选择的 Fréchet 分布
这是 RRH 相对经典 EK 的核心新增模块。工人住在 $n$,可选任意 $i$ 工作。从 $n$ 到 $i$ 的通勤成本 $\kappa_{ni}$ 以效用损失表示,工人 $j$ 对通勤路径 $n\to i$ 有 idiosyncratic 偏好冲击 $b_{j,ni}$:$G_{ni}(b)=\exp(-B_{ni} b^{-\kappa})$,$\kappa>1$。
居住在 $n$、工作在 $i$ 的间接效用为:
其中 $w_i$ 是 $i$ 地名义工资,$Q_n$ 是居住在 $n$ 的房价,$P_n$ 是 $n$ 地复合消费品价格指数,$b_{j,ni}$ 是工人 $j$ 对通勤路径 $n\to i$ 的 idiosyncratic 偏好冲击。记区位 $n$ 的市场实际收入指数为 $R_n\equiv Q_n^{1-\beta}P_n^\beta$(居住成本+消费成本),则 $V_{ni}=(w_i/R_n)\,b_{j,ni}$。
3.1 完整逐步推导(禁止跳步)
Step 0 · 分布假设。偏好冲击 $b_{j,ni}$ 独立同 Fréchet,尺度参数 $B_{ni}$、形状参数 $\kappa$:
Step 1 · 单一选项效用的 CDF。把 $V_{ni}=(w_i/R_n)b_{j,ni}$ 代入,$V_{ni}\le v$ 等价于 $b_{j,ni}\le vR_n/w_i$:
记 $A_{ni}\equiv B_{ni}\,(w_i/R_n)^{\kappa}$,则 $F_{V_{ni}}(v)=\exp(-A_{ni}v^{-\kappa})$,密度 $f_{V_{ni}}(v)=\kappa A_{ni}v^{-\kappa-1}\exp(-A_{ni}v^{-\kappa})$。
Step 2 · 最大值事件。工人选 $i$ 当且仅当 $V_{ni}\ge V_{nk}\;\forall k$。对所有 $k\ne i$ 同时积分:
解释:以 $V_{ni}=v$ 为条件(密度 $f_{V_{ni}}(v)$),要求其余所有 $V_{nk}\le v$(独立故连乘 CDF)。
Step 3 · 代入 CDF 与密度,合并指数。把 Step 1 的 $f$ 与 $F$ 代入:
其中 $S_n\equiv\sum_{k=1}^N A_{nk}=\sum_k B_{nk}(w_k/R_n)^\kappa$。
Step 4 · 变量替换 $u=S_n v^{-\kappa}$。由 $u=S_n v^{-\kappa}$ 得 $v=(S_n/u)^{1/\kappa}$,微分 $du=-\kappa S_n v^{-\kappa-1}dv$,即 $dv=-\dfrac{v^{\kappa+1}}{\kappa S_n}du=-\dfrac{1}{\kappa S_n}\left(\dfrac{S_n}{u}\right)^{(\kappa+1)/\kappa}du$。换上下限:$v:0\to\infty$ 对应 $u:\infty\to 0$:
Step 5 · 代回 $A_{ni}$ 得闭式。
其中 $B_{ni}$ 与通勤成本矩阵对应:$B_{ni}=\kappa_{ni}^{-\alpha}=\exp(-\alpha\ln\kappa_{ni})$,$\alpha$ 是通勤成本弹性,$\kappa$ 是通勤偏好异质性。解读:$w_i$ 越高、$B_{ni}$ 越大,通勤概率越高;$Q_n$ 越高,居住在 $n$ 的吸引力下降。
(i) $\kappa>1$ 是 well-defined 的必要条件,否则期望效用发散;(ii) $B_{ni}$ 可不对称(北京到燕郊 vs 燕郊到北京的通勤便利度不同);(iii) $B_{nn}$ 通常最大(在家上班最便利);(iv) 这套推导与 multinomial logit(Type-I 极值)的 logit 闭式在数学上同构——把 Fréchet 换成 Gumbel 即得 $\exp(w_i^\kappa)/\sum_k\exp(w_k^\kappa)$。
由此 $n$ 地居住人口、$i$ 地工作人口为(由工人对居住地的 Fréchet 选择,与上面 Step 4 同法可推出居住份额正比于 $n$ 地"可通勤机会总和"$\sum_i B_{ni}(w_i/R_n)^\kappa$):
04 土地市场出清与工资方程
4.1 住房市场出清
每个工人把 $(1-\beta)$ 份额收入花在住房上。$n$ 地居住者的总工资收入为 $\sum_i \lambda_{ni} L_n w_i$,住房需求等于住房供给 $H_n$:
直觉:居住人口越多、平均工资越高,$Q_n$ 越高;土地供给 $H_n$ 越大,$Q_n$ 越低。注意住房需求方是居住者 $L_n$ 的收入,不是工作岗位 $L_i^w$ 的工资——初学者最常混淆 $n$ 与 $i$。
4.2 工资方程(贸易平衡 + 零利润)
右边是 $i$ 地产品在所有市场的销售额(消费品支出 $\beta$ 份额),左边是 $i$ 地工资总额。企业零利润条件 + 产品市场出清联合决定 $w_i$。
4.3 均衡条件汇总
| 市场 | 出清条件 | 内生变量 |
|---|---|---|
| 居住人口 | $\sum_n L_n=\bar L$ | $L_n$ |
| 工作岗位 | $L_i^w=\sum_n \lambda_{ni}L_n$ | $L_i^w$ |
| 住房市场 | $Q_n H_n=(1-\beta)\sum_i\lambda_{ni}w_i L_n$ | $Q_n$ |
| 产品市场 | $w_i L_i^w=\sum_n\pi_{ni}\beta\sum_k\lambda_{nk}w_kL_n$ | $w_i$ |
| 价格指数 | $P_n=\gamma[\sum_k T_k(w_k d_{nk})^{-\theta}]^{-1/\theta}$ | $P_n$ |
05 均衡求解:5 步嵌套迭代
5.1 存在性与唯一性
RRH (2017) 证明:当 $d_{ni}\geq 1$、$d_{nn}=1$、$B_{ni}$ 不可约、$\theta,\kappa>1$ 时,不动点系统存在唯一(可归一化的)均衡。证明思路是把系统写成关于 $\{w_i\}$ 的 contraction mapping(Alvarez-Lucas 2007 与 Redding 2016 的 Gronwall 不等式)。模型齐次,必须归一化工资(如 $\sum_i w_i=1$),否则数值解无意义。
唯一性的政策含义很重要:模型不会出现 Krugman 新经济地理那种"多重均衡+自实现预期"的不确定性。给定外生参数 $\{d_{ni}, B_{ni}, T_i, H_n\}$,均衡的 $(\hat w_n, \hat Q_n, \hat L_n)$ 是唯一确定的,反事实不需要做均衡选择,也不需要讨论"预期协调失败"。这把 RRH 与早期 NEG 文献的主要区别点了出来:RRH 放弃了"不完全竞争+需求侧规模报酬递增",换取了一个干净、可计算、唯一的反事实工作母机。
实际求解用嵌套不动点迭代:外循环工资,内循环房价+人口。
06 Python 求解器(numpy 嵌套迭代)
# ============================================================
# Redding-Rossi-Hansberg (2017) 空间一般均衡求解器
# 模块:贸易(EK) + 通勤(Frechet) + 土地市场出清
# ============================================================
import numpy as np
def solve_rrh(N=10, theta=4.0, kappa=6.0, beta=0.75,
tol=1e-7, maxiter=5000, damp=0.5, seed=42,
B_shock=None):
"""
求解 RRH 均衡。
B_shock: 可选 (N,N) 数组,对 B_ni 做外生冲击(反事实用)
"""
rng = np.random.default_rng(seed)
T = rng.uniform(0.8, 1.2, size=N) # 生产率
H = rng.uniform(0.8, 1.2, size=N) # 住房供给
Lbar = 1.0
dist = rng.uniform(0.5, 2.0, size=(N, N))
d = np.exp(0.3 * dist) # 贸易成本
np.fill_diagonal(d, 1.0)
B = np.exp(-0.2 * dist) # 通勤便利度
np.fill_diagonal(B, 2.0)
if B_shock is not None:
B = B * B_shock # 反事实:降低通勤成本
w = np.ones(N) / N
Q = np.ones(N)
for it in range(maxiter):
# Step 1: 价格指数 + 贸易份额
A = T[None, :] * (w[None, :] * d) ** (-theta)
P = np.sum(A, axis=1) ** (-1.0 / theta)
pi = A / np.sum(A, axis=1, keepdims=True)
# Step 2-3: 内循环 房价+人口 不动点
for inner in range(200):
real_inc = w[None, :] / (Q[:, None] ** (1 - beta)
* P[:, None] ** beta)
attr = np.sum(B * real_inc ** kappa, axis=1)
lam = B * real_inc ** kappa / attr[:, None]
L = Lbar * attr / attr.sum()
Lw = np.sum(lam * L[:, None], axis=0)
wage_inc = np.sum(lam * w[None, :], axis=1) * L
Q_new = (1 - beta) * wage_inc / H
if np.max(np.abs(Q_new - Q)) < 1e-9:
Q = Q_new; break
Q = 0.5 * Q_new + 0.5 * Q
# Step 4: 工资更新
cons_exp = beta * np.sum(lam * w[None, :], axis=1) * L
sales_i = np.sum(pi * cons_exp[:, None], axis=0)
w_tilde = sales_i / Lw
w_tilde = w_tilde / w_tilde.sum()
w_new = damp * w_tilde + (1 - damp) * w
w_new = w_new / w_new.sum()
err = np.max(np.abs(w_new - w))
w = w_new
if err < tol:
print(f"收敛于第 {it} 轮, err={err:.2e}"); break
return dict(w=w, Q=Q, L=L, Lw=Lw, P=P, pi=pi, lam=lam)
if __name__ == "__main__":
sol = solve_rrh(N=8)
print("均衡工资:", np.round(sol["w"], 3))
print("均衡房价:", np.round(sol["Q"], 3))
print("通勤矩阵行和=1:",
np.allclose(sol["lam"].sum(axis=1), 1.0))
- 外循环工资 $w$,内循环房价 $Q$;
- $N>50$ 时建议
damp=0.2~0.3防震荡; - 归一化 $\sum_i w_i=1$,模型只识别相对工资。
6.1 结构反推(inversion):从观测均衡恢复 $T_i$ 与 $B_{ni}$
实际估计时,我们观测到的是基准均衡 $\{w_n^0,Q_n^0,P_n^0,L_n^0,\lambda_{ni}^0,\pi_{ni}^0\}$,而不是外生的 $T_i,B_{ni}$。RRH 方法的妙处在于:把观测均衡代回均衡方程,可逐行反解出使模型恰好拟合数据的 $T_i$ 与 $B_{ni}$。
- 反推 $T_i$:由 $\pi_{ni}=T_i(w_i d_{ni})^{-\theta}/\sum_k T_k(w_k d_{nk})^{-\theta}$,对固定 $i$ 取 $n=i$ 一行:$\pi_{ii}=T_i(w_i d_{ii})^{-\theta}/\sum_k T_k(w_k d_{ik})^{-\theta}$。归一化 $\sum_i T_i=1$ 后,$T_i\propto \pi_{ii}(w_i d_{ii})^\theta$。
- 反推 $B_{ni}$:由 $\lambda_{ni}=B_{ni}(w_i/R_n)^\kappa/\sum_k B_{nk}(w_k/R_n)^\kappa$,对固定 $n$ 取 $i=n$ 一行:$\lambda_{nn}=B_{nn}(w_n/R_n)^\kappa/\sum_k B_{nk}(w_k/R_n)^\kappa$。结合观测的 $\lambda_{ni}$,可逐比例恢复 $B_{ni}$ 的相对值(尺度自由度用 $B_{nn}=1$ 归一化)。
# ============================================================
# 结构反推:从观测均衡恢复 T_i 与 B_ni(RRH inversion)
# 输入:观测到的基准均衡 w0, Q0, P0, lam0, pi0, d, theta, kappa, beta
# 输出:结构外生对象 T_i, B_ni 的相对值(尺度已归一化)
# ============================================================
import numpy as np
def invert_rrh(w0, Q0, P0, lam0, pi0, d, theta, kappa, beta):
N = len(w0)
# --- 1. 反推 T_i:用对角份额 pi_ii ---
# pi_ii = T_i (w_i d_ii)^(-theta) / sum_k T_k(w_k d_ik)^(-theta)
# 对 i 求和:sum_i pi_ii = 1 仅给归一化;用 i 行等式取比
# T_i ∝ pi_ii * (w_i * d_ii)^theta / (sum_k T_k(w_k d_ik)^(-theta))
# 迭代不动点求解(因为分母仍含 T)
T = np.ones(N) / N
for _ in range(2000):
A = T[None, :] * (w0[None, :] * d) ** (-theta) # (n,i)
denom = A.sum(axis=1) # 每行分母
T_new = np.array([pi0[i, i] * denom[i]
for i in range(N)])
T_new = T_new / T_new.sum()
if np.max(np.abs(T_new - T)) < 1e-12:
T = T_new; break
T = 0.5 * T_new + 0.5 * T
# --- 2. 反推 B_ni:固定 n 行,lam_ni = B_ni*a_ni / sum_k B_nk*a_nk ---
# a_ni = (w_i / R_n)^kappa, R_n = Q_n^(1-beta) P_n^beta
R = Q0 ** (1 - beta) * P0 ** beta
a = (w0[None, :] / R[:, None]) ** kappa # (n,i)
# 对固定 n:B_ni 未知,但 lam_nn = B_nn*a_nn / sum_k B_nk*a_nk
# 令 b_nk = B_nk*a_nk,则 lam_nk = b_nk / b_n·;故 b_nk = lam_nk * b_n·
# 再除 a_nk 得 B_nk:B_nk = lam_nk * b_n· / a_nk
# 自由度 b_n· 未知:归一化 B_nn = 1
B = np.zeros((N, N))
for n in range(N):
b_dot = a[n, n] / lam0[n, n] # 由 B_nn=1 反推
B[n, :] = lam0[n, :] * b_dot / a[n, :]
return T, B
# 用法:先跑 solve_rrh 得到基准解,再用观测份额做 inversion;
# 反事实只需要帽子冲击(hat d, hat B),不需要 T、B 的水平值。
帽子代数只需基准份额 $\pi_{ni}^0,\lambda_{ni}^0$ 与外生冲击 $\hat d_{ni},\hat B_{ni}$,不需要知道 $T_i,B_{ni}$ 的水平值。inversion 的作用是:当我们想做"绝对水平"的福利比较(而非变化率)、或想校准 $B_{ni}=\exp(-\alpha\ln\kappa_{ni})$ 中的 $\alpha$ 时,才有必要恢复外生对象。
07 参数估计
7.1 通勤弹性 $\kappa$ 的估计
对通勤概率取对数:
用观测到的通勤 OD 矩阵 $\lambda_{ni}^{\text{data}}$、观测工资 $w_i^{\text{data}}$、观测房价 $Q_n^{\text{data}}$,以"在家通勤" $\lambda_{nn}$ 为基准取 ratio,加 pair 固定效应吸收 $B_{ni}/B_{nn}$,即可 OLS/IV 估计 $\kappa$。典型值 $\kappa\approx 4\sim 8$(Ahlfeldt et al. 2015 柏林墙案例估得约 6)。
7.2 通勤成本弹性 $\alpha$
把 $B_{ni}=\kappa_{ni}^{-\alpha}=\exp(-\alpha\ln\kappa_{ni})$ 代入:$B_{ni}$ 随通勤时间 $\kappa_{ni}$ 指数下降。$\alpha$ 可从"通勤时间变化对通勤概率的影响"识别(如地铁开通前后的 OD 变化)。
7.3 数据要求与具体来源
RRH 估计需要四类微观数据,缺一不可。下表给出中美两套可直接落地的数据源:
| 数据 | 美国来源 | 中国来源 | 用途 |
|---|---|---|---|
| 通勤 OD 矩阵 $\lambda_{ni}$ | LEHD Origin-Destination Employment Statistics (LODES, US Census Bureau);ACS 5-year PUMS 通勤长表 | 人口普查长表(2000/2010/2020 居住地-工作地匹配);年度流动人口动态监测调查(CMDS,卫健委) | 估计 $\kappa$、反推 $B_{ni}$ |
| 工资 $w_i$(就业地) | QCEW(BLS 就业工资普查);ACS PUMS 按工作地 wage | 经济普查就业地工资;人口普查长表从业地月收入;城镇单位就业人员平均工资(NBS) | $\lambda$ 回归的解释变量 |
| 房价/租金 $Q_n$ | Zillow ZHVI / ZRI;Case-Shiller;American Housing Survey | 国家统计局 70 个大中城市住宅销售价格指数;中国房价行情网(CREIS);贝壳/链家挂牌成交微观数据;人口普查住房长表 | 居住成本、住房出清 |
| 通勤成本 $\kappa_{ni}$ | Google/Bing Maps Distance Matrix API;Census LEHD 的 LODES 通勤时间 | 百度/高德路径规划 API(驾车+公共交通最短时间);OpenStreetMap + OSRM | 构造 $B_{ni}=\exp(-\alpha\ln\kappa_{ni})$ |
| 住房存量 $H_n$ | American Housing Survey 单元数;Zillow 库存 | 人口普查住房长表(间数);城市建成区面积(NBS 城市建设统计年鉴);夜间灯光 VIIRS 反演 | 住房出清分母 |
| 贸易成本 $d_{ni}$ | GIS 路网距离+货运费率;Zip-code 引力估计 | 铁路/公路最短里程;中国海关跨境贸易;省间铁路货运量 | EK 贸易份额 |
实操提醒:(i) 中国 2010 与 2020 人口普查长表已公开"居住地—工作地"匹配样本,可直接构造地级市内部/跨市通勤矩阵;(ii) CMDS(流动人口动态监测)是中国唯一的个体级迁移面板,可同时识别迁移成本与通勤成本;(iii) 房价用挂牌价会系统性高估,必须用成交价或指数化环比;(iv) GIS 通勤时间要用公共交通方式(地铁/公交),不能用驾车时间——否则低估地铁开通的处理效应。
7.4 校准与结构反推
除了从回归估出 $\kappa$ 与 $\alpha$,剩下的结构未观测变量(生产率 $T_i$、宜居度 $B_n$、通勤便利度残差 $\tilde B_{ni}$)需要用基准均衡反推(inversion):把观测到的均衡 $\{w_n^0, Q_n^0, L_n^0, \lambda_{ni}^0\}$ 代回均衡方程,反解出使模型恰好拟合数据的 $\{T_i, B_n, \tilde B_{ni}\}$。这一步是"帽子代数"的前提——反事实只需要这些外生对象的相对变化,不需要水平值。校准顺序上,务必先固定 $\theta,\kappa,\alpha,\beta$ 再反推,否则参数与未观测便利度会同时漂移,识别不唯一。
08 福利分析与帽子代数
RRH 的福利公式 $\hat U_n = \hat\lambda_{nn}^{-1/\theta}\times$(土地/通勤项) 是 ACR 的空间扩展。ACR 充分统计量的包络定理推导、成立条件、多部门扩展、与 Armington/EK/Melitz 的弹性对应 → 先学 基础知识库 · 福利分解 (ACR)
8.1 工人平均福利
完整推导:最大值 $V_n^{\max}=\max_i V_{ni}$ 服从 Fréchet 分布,尺度参数为 $\sum_i B_{ni}(V_n^*)^\kappa$。Fréchet 分布的期望为 $E[X]=\Gamma(1-1/\kappa)\cdot(\text{scale})^{1/\kappa}$(由 Gamma 函数定义 $\Gamma(s)=\int_0^\infty t^{s-1}e^{-t}dt$,对 $E[X]=\int_0^\infty[1-F(x)]dx$ 做变量替换 $u=(\text{scale})x^{-\kappa}$ 即得):
全经济平均福利 $\bar U=\sum_n L_n\bar U_n/\bar L$。
8.2 福利变化的三分解
对数线性化 $\ln\bar U_n$,可把反事实 $\hat U_n$ 分解为三条渠道:
- (a) 市场准入效应:价格指数 $P_n$ 下降(贸易成本↓ → 进口品种多 → 价格低),实际工资↑;
- (b) 土地价格效应:人口流入 → $Q_n$↑,侵蚀实际工资;
- (c) 选址效应:通勤便利度 $B_{ni}$ 改善 → 工人可去更高 $w_i$ 工作地,期望效用↑。
三者相互反馈,不可单独估计——这正是联合建模的价值。
8.3 精确帽子代数 · 完整方程组
反事实只需基准均衡份额。把每个原方程两边取帽子 $\hat x=x'/x$,整理如下:
(i) 贸易份额帽子(EK 模块):
$$\hat\pi_{ni}=\frac{(\hat w_i\hat d_{ni})^{-\theta}}{\sum_k\pi_{nk}(\hat w_k\hat d_{nk})^{-\theta}}$$(ii) 价格指数帽子:
$$\hat P_n=\left[\sum_k\pi_{nk}(\hat w_k\hat d_{nk})^{-\theta}\right]^{-1/\theta}$$(iii) 通勤概率帽子:
$$\hat\lambda_{ni}=\frac{\hat B_{ni}\,\hat w_i^\kappa/(\hat Q_n^{\beta(1-\beta)}\hat P_n^{\beta\kappa})}{\sum_k\lambda_{nk}\hat B_{nk}\hat w_k^\kappa/(\hat Q_n^{\beta(1-\beta)}\hat P_n^{\beta\kappa})}$$(iv) 住房出清帽子(由 $Q_n H_n=(1-\beta)w_n L_n^w$ 两边取帽子):
$$\hat Q_n=\hat w_n\hat L_n^w\qquad(\hat H_n=1)$$(v) 工资不动点帽子:
$$\hat w_i=\frac{1}{L_i^w}\sum_n\pi_{ni}\hat\pi_{ni}\hat w_n L_n^w$$(vi) 福利帽子:
$$\hat U_n=\left[\frac{\sum_i\lambda_{ni}\hat B_{ni}(\hat w_i/\hat Q_n^{1-\beta}\hat P_n^\beta)^\kappa}{\sum_i\lambda_{ni}}\right]^{1/\kappa}$$帽子代数在 RRH 中的优势特别明显:基准校准只需要观测到的份额 $\pi_{ni}^0$ 与 $\lambda_{ni}^0$,不需要把未观测的 $B_{ni}$、$T_i$ 水平值算出来。给定冲击 $\hat d_{ni}$ 或 $\hat B_{ni}$,迭代 $\hat w_n$ 与 $\hat Q_n$ 即可。这把"校准"与"反事实"解耦,是量化空间模型能在 50+ 区位规模上快速重算政策的关键。
09 反事实:通勤基础设施改善
RRH 的帽代数是"双层嵌套":外层迭代劳动分布 $\hat L_i$,内层跑贸易帽代数。通用求解器骨架、阻尼 / Anderson 加速、从 EK 迁到 RRH 的差异 → 先学 基础知识库 · 帽代数反事实求解
考虑"修地铁"使某条廊道的通勤便利度 $B_{ni}$ 上升 20%(即 $\hat B_{ni}=1.2$,其他不变)。用上面的 solve_rrh(B_shock=...) 重解,对比 $\hat U_n$。
# ============================================================
# 反事实:通勤廊道改善 + 福利计算
# ============================================================
import numpy as np
# 1. 基准均衡
base = solve_rrh(N=8, theta=4.0, kappa=5.0, beta=0.75)
# 2. 反事实:假设 n=0 到 i=1 的通勤便利度 +20%
B_shock = np.ones((8, 8))
B_shock[0, 1] = 1.2 # 从 0 居住、1 工作
B_shock[1, 0] = 1.2 # 反向对称
cf = solve_rrh(N=8, theta=4.0, kappa=5.0, beta=0.75,
B_shock=B_shock)
# 3. 福利变化(平均效用帽子)
# 简化:用实际工资 U_n = w_n / (P_n^beta Q_n^(1-beta))
def real_welfare(sol, beta=0.75):
return sol["w"] / (sol["P"]**beta * sol["Q"]**(1-beta))
U0 = real_welfare(base); U1 = real_welfare(cf)
U_hat = U1 / U0
print("福利变化 U_hat_n (按区位):")
print(np.round(U_hat, 4))
print("加权平均福利变化:",
np.round(np.sum(base["L"] * U_hat) / base["L"].sum(), 4))
# 直觉:廊道两端区位福利↑,远端区位变化小
典型结果
- 廊道两端区位 $L_n$ 重新分配(居住向 0、就业向 1 集中);
- 市中心房价 $Q_n$ 上升,远郊相对下降;
- 总福利 $\hat U>1$,但分布不均——土地所有者获益多于工人。
政策含义:交通基础设施投资的收益并不均匀落在廊道两端,而是通过房价资本化(capitalization)部分转移给存量房主。如果评估者只看工资变化,会高估工人实际福利;如果只看总福利,会低估分配不平等。RRH 框架的优势是能同时输出 $\hat w_n, \hat Q_n, \hat L_n, \hat U_n$ 四张分布图,让政策制定者看到"谁受益、谁受损"。此外,通勤成本下降的福利效应高度依赖 $\kappa$ 的校准——$\kappa$ 越大(工人对工资差越敏感),地铁开通引发的居住—工作分离越剧烈,房价空间分化越显著;$\kappa$ 越小,福利主要被通勤时间节省直接吸收,空间重组有限。
10 论文案例与常见错误
难度与前置
| 维度 | 要求 |
|---|---|
| 数学 | Fréchet 极值分布、积分换元、不动点定理(压缩映射/Perron-Frobenius)、Gamma 函数 |
| 计量 | 结构引力 PPML(见本目录 03 页)、MLE/IV(见结构估计 01–04 页) |
| 编程 | numpy 矩阵运算、嵌套不动点迭代、阻尼更新;建议熟练 02 页 EK 求解器后再学本页 |
| 前置阅读 | 本目录 01 Armington → 02 Eaton-Kortum → 03 结构引力 → 04 福利分解(ACR) → 05 帽代数反事实 → 本页 |
| 工作量估计 | 从零复现 N=30 区位 RRH 求解器 ≈ 1–2 周;加 inversion + 反事实 ≈ +1 周;中国地级市 N≈285 版本 ≈ 1–2 个月数据清洗 |
| 常见坑 | 见下方 5 条;最坑的是把居住者收入与工作地工资混淆 |
常见错误(5 条)
RRH 是齐次系统,所有 $w_i$ 同乘常数均衡不变。不显式归一化(如 $\sum w_i=1$),迭代会发散到任意常数倍。
Fréchet 通勤概率要求 $\kappa>1$;若参数校准误设为 $\kappa=0.5$,期望效用积分发散,模型不 well-defined。
住房需求方是居住者 $L_n$ 的工资 $\sum_i\lambda_{ni}w_i$,不是 $i$ 地工作岗位工资总额 $w_i L_i^w$。这是初学者最常见 bug。
$N>50$ 或 $d_{ni}$ 近奇异时,外循环用 $\eta=1.0$ 会震荡发散。应从 $\eta=0.2\sim0.3$ 起步。
$B_{ni}$ 是结构未观测便利度,需用基准均衡反推(inversion),不能直接用距离 $\exp(-\alpha\text{dist})$ 代入——否则反事实的"通勤成本变化"与基准校准混淆。
进阶资料
- Redding (2020), "Workhorse Tools in QSE", Handbook of Regional and Urban Economics Vol.5。
- Desmet & Rossi-Hansberg (2013), "Urban Accounting and Welfare", AER。
- EDX/CEPR "Quantitative Spatial Economics"(Stephen Redding 主讲)。
∑ 方程总清单 · Equation Summary
本模型共 12 个核心方程 + 帽代数方程组 (RRH12),按推导顺序编号如下。
| 编号 | 名称 | 公式 | 所在节 |
|---|---|---|---|
| (RRH1) | Cobb-Douglas 效用 | $U_{ni}=z_i^\beta h_{ni}^{1-\beta}$ | 01 |
| (RRH2) | E K 贸易份额 | $\pi_{ni}=T_i(w_i d_{ni})^{-\theta}/\sum_k T_k(w_k d_{nk})^{-\theta}$ | 02 |
| (RRH3) | E K 价格指数 | $P_n=\gamma[\sum_k T_k(w_k d_{nk})^{-\theta}]^{-1/\theta}$ | 02 |
| (RRH4) | 间接效用 | $V_{ni}=B_{ni}^{1/\kappa}w_i/(Q_n^{1-\beta}P_n^\beta)$ | 02 |
| (RRH5) | $V_{ni}$ 的 CDF | $\Pr(V_{ni}\le v)=\exp[-B_{ni}(V_n^*)^{-\kappa}v^{-\kappa}]$ | 03 |
| (RRH6) | ★ 通勤概率 | $\lambda_{ni}=B_{ni}(w_i/(Q_n^{1-\beta}P_n^\beta))^\kappa/\sum_k B_{nk}(\cdot)^\kappa$ | 03 |
| (RRH7) | 居住/工作人口 | $L_n^R=\sum_i L_n^R\lambda_{ni}$;$L_i^W=\sum_n L_n^R\lambda_{ni}$ | 03 |
| (RRH8) | 住房出清 | $Q_n H_n=(1-\beta)w_n L_n^W$ | 04 |
| (RRH9) | 工资不动点 | $w_n L_n^W=\sum_i\pi_{ni}w_iL_i^W$ | 04 |
| (RRH10) | 对数线性化 | $\ln\lambda_{ni}=\ln B_{ni}+\kappa\ln w_i-\kappa(1-\beta)\ln Q_n-\kappa\beta\ln P_n$ | 07 |
| (RRH11) | ★ 平均福利 | $\bar U_n=\Gamma(1-1/\kappa)[\sum_i B_{ni}(\cdot)^\kappa]^{1/\kappa}$ | 08 |
| (RRH12) | ★ 帽代数方程组 | $\hat\pi_{ni},\hat P_n,\hat\lambda_{ni},\hat Q_n,\hat w_i,\hat U_n$(六个帽子方程) | 08 |