Armington 模型:CES 偏好、贸易份额与多国一般均衡
每个地区专业化生产一种"国产品",消费者在 CES 聚合下按来源国购买。这是 QSGE 家族里最简单、最易上手的模型——把它吃透,后面 EK、Melitz、帽子代数都会顺理成章。
numpy 矩阵迭代)或 MATLAB。本页代码实现帽子代数风格的工资不动点迭代求解器:给定 $\tau_{ni}$ 矩阵,迭代更新 $w_i$ 直到贸易平衡——这是后续所有 GE 求解器的母版。01 模型设定与直觉
Armington (1969) 的核心假设极其简单:产品按来源国差异化。世界有 $N$ 个地区(国家)$i=1,\dots,N$。每个地区只生产一种"国产品"(Armington good),技术规模报酬不变,唯一生产要素是劳动力 $L_i$。地区 $n$ 的消费者把这 $N$ 种国产品放在一个 CES 篮子里消费。
直觉上:法国消费者既要买"法国红酒",也要买"中国白酒",这两种东西在他的效用函数里是不完全替代的——哪怕它们在物理上都是酒精饮料。偏好上的"来源国差异"使得每国企业都面临一条向下倾斜的需求曲线,从而即使技术完全相同,贸易也会发生(这是 Armington 模型与 Ricardian 模型最本质的差别:Ricardo 靠技术差异,Armington 靠偏好差异)。
贸易成本采用 iceberg 形式:从 $i$ 运到 $n$ 要付出 $d_{ni}\geq 1$ 的"融化"——即 $d_{ni}$ 单位货物从 $i$ 出发,只有 1 单位抵达 $n$。因此 CIF 价格为:
其中 $p_i$ 是 $i$ 国国产品在产地 $i$ 的 FOB 价格,$t_{ni}$ 是从价从量关税(若有)。注意 $\tau_{ii}=1$(国内运输无成本,无关税),这是后面构造 $\lambda_{ii}$ 的关键。
冰山成本 $\tau_{ni}\geq 1$ 的含义是:从 $i$ 发运 $\tau_{ni}$ 单位货物,在运输途中"融化"掉 $\tau_{ni}-1$ 单位,只有 1 单位抵达 $n$。这一假设把所有贸易摩擦(运费、关税、非关税壁垒、政策距离)压缩进一个标量,使得 CIF 价格与 FOB 价格成比例——这是后面贸易份额能写成闭式的技术前提。$\tau_{nn}=1$ 是规范化假设:国内贸易不穿越国境,没有额外冰山损耗;如果研究国内市场分割,可以把 $\tau_{nn}$ 放松为大于 1 的省际内耗参数。关税项 $t_{ni}$ 在这里是从价税,且税收假设一次性返还给消费者(或被政府按支出比例花掉),否则预算约束不再闭合。
02 CES 效用与需求函数
$n$ 国代表性消费者的 CES 效用为:
其中 $q_{ni}$ 是 $n$ 国从 $i$ 国购买的数量,$\sigma$ 是替代弹性(elasticity of substitution)。预算约束为 $\sum_i p_{ni} q_{ni} = X_n$,$X_n$ 是 $n$ 国总支出。
Armington 假设:产品按来源国差异化。"法国红酒"和"中国白酒"在物理上相似,但在偏好上是两种不同的 variety——消费者不是在"买酒精",而是在"买法国红酒"和"买中国白酒"。这一假设是整个 Armington 模型的灵魂:它让每国企业都面临一条向下倾斜的需求曲线,从而即使各国技术完全相同,贸易也会因偏好差异而发生(对比 Ricardian 模型:贸易来自技术差异)。
为什么用 CES 聚合:CES(常数替代弹性)是唯一同时满足"同质性、对称性、位似"的加总函数。它有三个不可替代的性质:(1) 替代弹性 $\sigma$ 是常数,不随价格变化,便于做比较静态;(2) 需求系统可由对偶价格指数闭式表示;(3) Dixit-Stiglitz 加总下,支出份额恰好等于相对价格的 $1-\sigma$ 次方,这是引力方程的微观基础。
$\sigma>1$ 的假设:$\sigma$ 是任意两国产品之间的替代弹性。$\sigma=1$ 对应 Cobb-Douglas(支出份额固定,不响应价格);$\sigma\to\infty$ 对应完全替代(一价定律,只有最便宜的品种被购买)。要求 $\sigma>1$ 是为了保证:(a) 需求函数对价格弹性为负且大于 1(奢侈品性质),(b) 价格指数 $P=(\sum p_i^{1-\sigma})^{1/(1-\sigma)}$ 有限且良态。经验上 $\sigma$ 通常取 4–10,下文校准章节会详细讨论。
预算约束 $\sum_i p_{ni} q_{ni}=X_n$ 背后有三个简化假设:(1) 消费者将全部收入用于当期消费,无储蓄、无投资、无资产贸易——这是静态模型,跨期决策被略去;(2) $n$ 国代表性消费者的总支出 $X_n$ 等于其劳动收入 $w_n L_n$(贸易平衡,无贸易顺差/逆差);(3) 政府若征关税,关税收入一次性总额返还给代表性消费者,所以总支出仍等于劳动收入加关税收入。这些假设一旦放松(例如引入贸易赤字),福利公式就需要额外修正项。
第一步:拉格朗日一阶条件(完整推导)
构造拉格朗日函数:$\mathcal{L}=U_n-\lambda_n\left(\sum_i p_{ni}q_{ni}-X_n\right)$。对 $q_{ni}$ 求偏导并令其为零:
对两个不同品种 $i,k$ 分别写出 FOC 并相除,消去 $\lambda_n$ 与 $U_n$,得到边际替代率等于价格比(这是"替代弹性为 $\sigma$"的定义式):
第二步:代入预算约束消去 $\lambda_n$,定义价格指数
把 (A5) 变形 $q_{ni}=q_{nk}(p_{ni}/p_{nk})^{-\sigma}$ 代入预算约束 $\sum_i p_{ni}q_{ni}=X_n$。先解出 $q_{nk}$:
这就是需求函数。为了让它写成更紧凑的对偶形式,定义 Dixit-Stiglitz 价格指数 $P_n$ 为"获得一单位效用所需的最小支出":
由 Shephard / 对偶,最小支出下的需求函数为:
这是 CES 模型里最常被引用的式子:每个 variety 的"支出份额"与其相对价格的 $-\sigma$ 次方成正比。当 $\sigma$ 越大,消费者对价格越敏感,价格下降一点点,需求量爆炸式上升。
需求函数 $q_{ni}=X_n p_{ni}^{-\sigma}/P_n^{1-\sigma}$ 是"效用最大化 + 预算约束"的解。推导链条是:(1) 拉格朗日 $L=U_n-\lambda(\sum p_{ni}q_{ni}-X_n)$ 对 $q_{ni}$ 求一阶导;(2) 两个 variety $i$ 和 $k$ 的边际效用比等于价格比,给出 $q_{ni}/q_{nk}=(p_{ni}/p_{nk})^{-\sigma}$(这就是"替代弹性为 $\sigma$"的定义式);(3) 代入预算约束解出 $\lambda$,再用 Shephard 对偶把 $\lambda$ 解释为支出函数对 $P_n$ 的导数。价格指数 $P_n=(\sum p_{ni}^{1-\sigma})^{1/(1-\sigma)}$ 不是任意假设,而是使 $X_n=P_n U_n$ 成立的最小支出价格——即获得一单位效用所需的最少支出。这一构造保证了支出份额 $\lambda_{ni}=p_{ni}q_{ni}/X_n=(p_{ni}/P_n)^{1-\sigma}$ 恰好对 $i$ 加总为 1。
03 贸易份额与价格指数
贸易份额的完整推导
$n$ 国从 $i$ 国的进口额(trade flow)为 $X_{ni} = p_{ni} q_{ni}$。把需求函数 (A8) 代入:
两边除以总支出 $X_n$:
$$\lambda_{ni}\equiv\frac{X_{ni}}{X_n}=\frac{p_{ni}^{\,1-\sigma}}{\sum_{k=1}^{N}p_{nk}^{\,1-\sigma}}$$在完全竞争 + CRS + 归一化生产率 $A_i=1$ 下,产地 FOB 价格 $p_i=w_i$(单位成本),CIF 价格 $p_{ni}=\tau_{ni}w_i$。代入即得:
最后一步我们把产地价格 $p_i$ 写成劳动成本 $w_i$(因为完全竞争 + CRS,$p_i = w_i / A_i$,归一化生产率 $A_i=1$)。这一形式有三个关键性质:
把 $p_i=w_i$ 直接代入,隐含了四个假设:(1) 完全竞争:价格等于边际成本,没有加成;(2) 规模报酬不变(CRS):单位劳动产出 $A_i$ 不随产量变化,归一化为 1;(3) 劳动是唯一生产要素:没有资本、土地或中间品投入,$w_i L_i$ 就是全部产出价值;(4) 冰山成本已体现在 $\tau_{ni}$ 中,没有其他分配成本。贸易份额对 $\tau_{ni}$ 的弹性为 $1-\sigma$(因为 $\sigma>1$,所以为负):贸易成本上升 1%,从 $i$ 国的进口份额下降约 $\sigma-1$ 个百分点。这一弹性就是后面 ACR 福利公式里的"贸易弹性"。
- $\sum_i \lambda_{ni} = 1$(对每一行 $n$,份额加总为 1);
- 当 $\tau_{ni}\uparrow$(贸易成本上升),$\lambda_{ni}\downarrow$,且弹性为 $1-\sigma$(负的,因为 $\sigma>1$);
- 价格指数也可以用份额表示:$P_n^{1-\sigma} = (w_n \tau_{nn})^{1-\sigma}/\lambda_{nn} = w_n^{1-\sigma}/\lambda_{nn}$,因为 $\tau_{nn}=1$。
这个式子极重要:它把"价格水平"这一不可观测对象,转化为"可观测的国内贸易份额 $\lambda_{nn}$"和一个参数 $\sigma$。这正是 ACR 福利公式的雏形。
04 一般均衡条件
模型的内生变量是工资向量 $\{w_i\}_{i=1}^N$。给定外生禀赋 $\{L_i\}$ 和贸易成本矩阵 $\{\tau_{ni}\}$,均衡由四个方程((A11)–(A14))封闭:
条件 0:收入 = 支出(贸易平衡)
条件 1:产品市场出清(贸易平衡方程)
$i$ 国的工资收入等于其对全世界的销售。$n$ 国花在 $i$ 国产品上的支出为 $\lambda_{ni}X_n$,对所有 $n$ 求和:
条件 2:劳动市场出清
由于 CRS 与完全竞争,$i$ 国对劳动的需求恰好吸纳 $L_i$:$w_i L_i$ 已经是劳动报酬。这一条件与条件 1 重合(Walras's law),所以我们只需要 $N-1$ 个独立的市场出清方程。
条件 3:工资标准化(价格归一)
条件 4:份额加总恒等式(每行归一)
05 福利分解:ACR 充分统计量公式
Armington 的福利公式 $\hat W = \hat\lambda_{nn}^{-1/(\sigma-1)}$ 是 ACR 充分统计量在 $\varepsilon=\sigma-1$ 下的特例。不熟悉 ACR 的推导、成立条件与多部门扩展?先学 → 基础知识库 · 福利分解 (ACR)
实际工资(real wage)是衡量福利的标准统计量。在贸易平衡下,$n$ 国代表性工人的实际收入为:
这个结果极其优美:实际工资只取决于国内贸易份额 $\lambda_{nn}$,且与 $\sigma-1$ 互为倒数。直觉:$\lambda_{nn}$ 越低,说明本国消费越依赖外国产品,外国竞争压低了价格指数,工人实际购买力越高。
Autarky(自给自足)对比
在 autarky 下,$\tau_{ni}=\infty$ 对 $n\neq i$,于是 $\lambda_{nn}^{aut}=1$,实际工资 $=1$。在自由贸易(贸易成本有限)下,$\lambda_{nn}<1$,实际工资 $=\lambda_{nn}^{-1/(\sigma-1)}>1$。贸易利得(gains from trade)为:
例如若 $\lambda_{nn}=0.8$(即 80% 消费自本国),$\sigma=5$,则 $G_n = (1/0.8)^{1/4}-1 \approx 5.7\%$。这就是说:开放贸易让该国实际工资比 autarky 高约 5.7%。
从贸易利得到 ACR 公式:反事实福利变化
上面的公式回答了"从 autarky 到开放"的福利差。但量化贸易经济学家真正关心的问题是:当贸易成本从 $\tau$ 变到 $\tau'$(例如关税调整),福利变化多少?定义帽子(hat)记号 $\hat{x}\equiv x'/x$ 表示反事实相对基准的比率。由 $P_n = w_n \lambda_{nn}^{1/(\sigma-1)}$,两边取帽子:
福利(实际工资)的变化为:
福利变化 $\hat{W}_n$ 只依赖两个对象:(1) 国内支出份额的变化 $\hat{\lambda}_{nn}=\lambda_{nn}'/\lambda_{nn}$;(2) 贸易弹性 $\sigma-1$。你不需要知道 $\tau_{ni}$ 的具体变化路径、不需要知道其他国家工资怎么调、甚至不需要重新解一般均衡——只要观测到(或用帽子代数算出)$\lambda_{nn}'$,福利变化就唯一确定了。这就是 Arkolakis-Costinot-Rodriguez-Clare (2012) 著名的"充分统计量"(sufficient statistic)思想:在一类广泛的量化贸易模型里,福利变化都可以被 $\lambda_{nn}$ 和贸易弹性两个统计量充分概括。
ACR 公式成立的三个假设
- CES 偏好(或等价的 Dixit-Stiglitz 聚合):保证价格指数能写成 $\lambda_{nn}$ 的闭式函数;
- 贸易平衡:$X_n=w_n L_n$,没有外生贸易顺差/逆差。若存在贸易赤字 $D_n$,则福利公式要修正为 $\hat{W}_n=\hat{\lambda}_{nn}^{-1/(\sigma-1)}\cdot \widehat{(X_n/(X_n-D_n))}$;
- 单一生产要素(劳动):没有其他要素市场的一般均衡反馈。若引入资本或中间品,公式需扩展(Caliendo-Parro 多部门版本)。
这三条假设恰恰是本模型一直在做的。所以 Armington 模型本身就是 ACR 公式的最简载体——理解了它,就理解了 ACR 的全部直觉。
$\sigma$ 越大,国产品之间越容易替代,开放的"价格下降"效应越弱,贸易利得越小;$\sigma$ 越接近 1,"多样性"价值越大,贸易利得越大。这与 Dixit-Stiglitz 内生 variety 模型的结论同构。
06 反事实求解:精确帽子代数(Exact Hat Algebra)
本节用的是 EK 帽子代数的 Armington 版本(把 $-\theta$ 换成 $1-\sigma$)。完整的通用求解器代码、阻尼 / Anderson 加速、在各分支间的迁移差异 → 先学 基础知识库 · 帽代数反事实求解
ACR 公式告诉我们:一旦知道反事实的国内份额 $\lambda_{nn}'$,福利就确定了。但 $\lambda_{nn}'$ 本身需要解一个新的一般均衡。精确帽子代数(Dekle-Eaton-Kortum 2007, 2008)的核心洞见是:我们不需要知道 $\tau_{ni}$、$w_i$ 的绝对水平,只需要知道基准的份额矩阵 $\lambda_{ni}$ 和外生冲击 $\hat{\tau}_{ni}$,就能直接解出帽子 $\hat{w}_i$,进而解出 $\hat{\lambda}_{ni}$。
第一步:份额的帽子方程(逐步推导)
基准份额:$\lambda_{ni}=(w_i\tau_{ni})^{1-\sigma}/\sum_k(w_k\tau_{nk})^{1-\sigma}$。反事实份额:$\lambda'_{ni}=(w'_i\tau'_{ni})^{1-\sigma}/\sum_k(w'_k\tau'_{nk})^{1-\sigma}$。两式相除定义 $\hat x\equiv x'/x$:
分子:$\dfrac{(w'_i\tau'_{ni})^{1-\sigma}}{(w_i\tau_{ni})^{1-\sigma}}=(\hat w_i\hat\tau_{ni})^{1-\sigma}$。
分母:$\displaystyle\frac{\sum_k(w'_k\tau'_{nk})^{1-\sigma}}{\sum_k(w_k\tau_{nk})^{1-\sigma}} =\sum_k\frac{(w_k\tau_{nk})^{1-\sigma}}{\sum_j(w_j\tau_{nj})^{1-\sigma}}(\hat w_k\hat\tau_{nk})^{1-\sigma} =\sum_k\lambda_{nk}(\hat w_k\hat\tau_{nk})^{1-\sigma}$。
相除:
$$\hat\lambda_{ni}\equiv\frac{\lambda'_{ni}}{\lambda_{ni}}=\frac{(\hat w_i\hat\tau_{ni})^{1-\sigma}}{\sum_k\lambda_{nk}(\hat w_k\hat\tau_{nk})^{1-\sigma}}$$第二步:贸易平衡的帽子方程(逐步推导)
基准贸易平衡:$w_iL_i=\sum_n\lambda_{ni}w_nL_n$。反事实:$w'_iL_i=\sum_n\lambda'_{ni}w'_nL_n$($L_i$ 不变,故 $\hat L_i=1$)。把 $\lambda'_{ni}=\lambda_{ni}\hat\lambda_{ni}$、$w'_n=\hat w_n w_n$ 代入:
两边除以基准 $w_iL_i$:
$$\hat w_i=\sum_n\frac{\lambda_{ni}\hat\lambda_{ni}\hat w_n(w_nL_n)}{w_iL_i}$$这里 $w_n L_n$ 是基准支出(已知数据),$\lambda_{ni}$ 是基准份额(已知数据),未知的只有 $\hat{w}_i$ 和 $\hat{\lambda}_{ni}$。这是一个关于 $\hat{w}$ 的非线性不动点。
第三步:迭代算法(Jacobi 阻尼)
第四步:福利与反事实份额
收敛后,反事实份额 $\lambda_{ni}'=\lambda_{ni}\hat{\lambda}_{ni}$,福利变化直接由 ACR 公式:
(1) 不需要估 $\tau_{ni}$ 的绝对水平:只要观测到基准贸易份额矩阵(数据里直接有),就能做反事实;(2) 数值稳定:迭代在帽子空间进行,量级在 1 附近,不会出现绝对工资的量级漂移;(3) 可解释:每一步 $\hat{\lambda}_{ni}$ 和 $\hat{w}_i$ 都有直接经济学含义。这是 Dekle-Eaton-Kortum (2007) 以来所有量化贸易/空间模型的标准求解范式。
07 完整 Python 求解与反事实代码
下面代码实现两层求解:(1) 给定绝对 $\tau$ 矩阵求解基准均衡工资 $w$、份额 $\Lambda$;(2) 用精确帽子代数直接在份额空间做反事实(只需基准份额 + 外生 $\hat{\tau}$ 冲击),并验证 ACR 福利公式。直接复制到 .py 文件即可运行(只需 numpy)。
"""
Armington 多国一般均衡求解器 + 精确帽子代数反事实
- 3 国例子:Home, Foreign1, Foreign2
- Part A: 给定 tau 矩阵求解基准均衡 w, P, Lambda
- Part B: 精确帽子代数反事实(只需基准 Lambda + 外生 tau_hat)
- Part C: 验证 ACR 福利公式 W_hat = lambda_nn_hat^(-1/(sigma-1))
"""
import numpy as np
# ---------- 1. 参数 ----------
N = 3 # 国家数
sigma = 5.0 # 替代弹性(常见校准值 4~8)
L = np.array([1.0, 1.0, 1.0]) # 各国劳动力禀赋
tau = np.array([
[1.0, 1.5, 2.0],
[1.5, 1.0, 1.8],
[2.0, 1.8, 1.0],
])
# ---------- 2. 基准均衡求解(绝对空间) ----------
def solve_armington_abs(tau, L, sigma, tol=1e-10, max_iter=20000, damp=0.5):
N = len(L)
w = np.ones(N)
for it in range(max_iter):
p = w[None, :] * tau
a = p ** (1.0 - sigma)
P_row = a.sum(axis=1, keepdims=True)
Lam = a / P_row
sales = Lam.T @ (w * L)
excess = sales / (w * L)
w_new = w * excess ** damp
w_new = w_new / np.sum(w_new * L)
if np.max(np.abs(excess - 1.0)) < tol:
w = w_new; break
w = w_new
p = w[None, :] * tau
a = p ** (1.0 - sigma)
P_row = a.sum(axis=1, keepdims=True)
Lam = a / P_row
P = P_row.flatten() ** (1.0 / (1.0 - sigma))
return w, P, Lam
# ---------- 3. 精确帽子代数反事实 ----------
def solve_armington_hat(Lam0, X0, tau_hat, sigma, tol=1e-10,
max_iter=100000, damp=0.2):
"""
输入:
Lam0 (N,N) 基准贸易份额 (行 n = 进口国)
X0 (N,) 基准总支出 w_n L_n
tau_hat(N,N) 外生冲击的帽子 tau'/tau
输出:
w_hat, lam_hat, Lam1 (反事实份额)
注意: 更新规则用算术阻尼 w_new=(1-damp)*w+damp*impl,
不要用几何阻尼 w*(impl/w)^damp —— 后者在本模型下会
收敛到一个违反 Walras 定律的伪不动点(见"常见错误"节)。
"""
N = len(X0)
w_hat = np.ones(N)
for it in range(max_iter):
# 3.1 份额帽子方程: lam_hat[n,i] = (w_hat[i]*tau_hat[n,i])^(1-sigma)
# / sum_k Lam0[n,k]*(w_hat[k]*tau_hat[n,k])^(1-sigma)
num = (w_hat[None, :] * tau_hat) ** (1.0 - sigma) # (N,N)
den = (Lam0 * num).sum(axis=1, keepdims=True) # (N,1)
lam_hat = num / den
# 3.2 贸易平衡帽子方程: w_hat[i] = sum_n Lam0[n,i]*lam_hat[n,i]*w_hat[n]*X0[n] / X0[i]
sales1 = (Lam0 * lam_hat).T @ (w_hat * X0)
w_hat_implied = sales1 / X0
# 3.3 算术阻尼更新(关键:不要用几何阻尼)
w_hat_new = (1.0 - damp) * w_hat + damp * w_hat_implied
w_hat_new = w_hat_new / np.sum(w_hat_new * X0)
if np.max(np.abs(w_hat_implied / w_hat - 1.0)) < tol:
w_hat = w_hat_new; break
w_hat = w_hat_new
# 反事实份额
Lam1 = Lam0 * lam_hat
return w_hat, lam_hat, Lam1
# ---------- 4. 基准均衡 ----------
w, P, Lam = solve_armington_abs(tau, L, sigma)
X = w * L
print("=" * 55)
print("基准均衡")
print(f" 工资 w = {np.round(w, 4)}")
print(f" 实际工资 w/P = {np.round(w/P, 4)}")
print(f" 国内份额 lambda_nn = {np.round(np.diag(Lam), 3)}")
gains = (1.0 / np.diag(Lam)) ** (1.0 / (sigma - 1.0)) - 1.0
print(f" 贸易利得 vs Autarky = {np.round(gains*100, 2)} %")
# ---------- 5. 反事实:Home 对 Foreign1 加 25% 关税 ----------
tau_hat = np.ones((N, N))
tau_hat[0, 1] = 1.25 # 仅 Home 对 F1 的贸易成本上升 25%
w_hat, lam_hat, Lam1 = solve_armington_hat(Lam, X, tau_hat, sigma)
# ACR 福利公式
W_hat_ACR = np.diag(Lam1) / np.diag(Lam)
W_hat_ACR = W_hat_ACR ** (-1.0 / (sigma - 1.0))
print("\n" + "=" * 55)
print("反事实:Home 对 F1 加 25% 关税(帽子代数)")
print(f" 工资帽子 w_hat = {np.round(w_hat, 4)}")
print(f" 国内份额 lambda_nn: {np.round(np.diag(Lam),3)} -> {np.round(np.diag(Lam1),3)}")
print(f" ACR 福利变化 W_hat = {np.round(W_hat_ACR, 4)}")
print(f" 对应福利变化率 = {np.round((W_hat_ACR-1)*100, 3)} %")
# 对照:用绝对空间重解
tau_cf = tau.copy(); tau_cf[0, 1] *= 1.25
w2, P2, Lam2 = solve_armington_abs(tau_cf, L, sigma)
W_check = (w2/P2) / (w/P)
print(f" 绝对空间重解 W 变化率 = {np.round((W_check-1)*100, 3)} % (应与 ACR 一致)")
你应该会看到:(1) 帽子代数算出的 $\hat{W}_n$ 与绝对空间重解的 $(w'/P')/(w/P)$ 几乎完全一致——这验证了帽子代数的正确性;(2) 对 F1 加关税后,Home 的 $\lambda_{00}$ 上升,$\hat{W}_0<1$(福利下降),而 F1 的实际工资也下降(贸易战损人不利己);(3) ACR 公式只用 $\lambda_{nn}$ 的变化就复现了完整 GE 的福利结果,充分统计量思想得到验证。
08 校准参数与数据来源
$\sigma$(替代弹性 = 贸易弹性 + 1)
Armington 模型里唯一需要外部校准的结构参数就是 $\sigma$。它同时承担两个角色:(1) 需求侧任意两国产品之间的替代弹性;(2) 贸易份额对贸易成本的弹性为 $1-\sigma$,因此"贸易弹性"(trade elasticity,即贸易流对冰山成本变化的弹性)为 $\sigma-1$。经验文献对 $\sigma-1$ 的估计值集中在 4–10 区间:
- Eaton & Kortum (2002):用 OECD 国家引力回归估计 $\theta\approx 8.28$,在 Armington 对应物下即 $\sigma-1\approx 8.28$,$\sigma\approx 9.28$。这是 QSGE 文献最常引用的"基准贸易弹性"。
- Simonovska & Waugh (2014):用结构引力 + 价格数据重新估计,得到 $\theta\approx 4$ 左右,对应 $\sigma\approx 5$。这是更保守、更现代的估计值。
- Feenstra et al. (2014):区分"母国-外国"Armington 弹性与"外国-外国"弹性,发现前者偏小、后者偏大,建议在 4–8 之间做敏感性分析。
- 行业差异:农产品/原材料替代弹性高($\sigma$ 大),差异化制成品 $\sigma$ 小。多部门模型应分行业校准。
福利公式 $\hat{W}_n=\hat{\lambda}_{nn}^{-1/(\sigma-1)}$ 对 $\sigma$ 高度敏感:$\sigma-1$ 从 4 变到 8,同样的 $\hat{\lambda}_{nn}=0.95$,福利变化从 $0.95^{-1/4}-1\approx 1.3\%$ 降到 $0.95^{-1/8}-1\approx 0.6\%$。所以论文里必须做 $\sigma\in\{4,5,8,10\}$ 的敏感性表。
数据来源(具体变量与口径)
下表给出构造基准份额矩阵 $\lambda_{ni}$ 与做反事实时每一步用到的具体数据库与变量名。论文里必须逐一交代,不能只写"来自公开数据库"。
| 用途 | 数据库 | 具体变量 / 口径 |
|---|---|---|
| 双边采购矩阵 $X_{ni}$ | WIOD(World Input-Output, 2016 release)或 OECD ICIO | 国家×国家中间投入 + 最终使用矩阵;行 i 列 n 即 n 国从 i 国采购额。WIOD 覆盖 43 国 56 部门,ICIO 覆盖 60+ 国。 |
| 双边贸易流 $X_{ni}$(行业级) | UN Comtrade / WITS | HS 6 位码双边进出口额(CIF 进口、FOB 出口)。WITS(World Integrated Trade Solution)是 World Bank + UNCTAD 的查询前端,可一次性拉 1988–至今的面板。注意 CIF/FOB 差额本身就是隐含贸易成本的直接度量。 |
| 地理与制度贸易成本变量 | CEPII GeoDist / Gravity | dist(首都/最大城市间大圆距离 km)、distw(人口加权距离)、contig(接壤虚拟变量)、comlang_off(共同官方语言)、comlang_ethno(9% 以上人口说同一语言)、colony(殖民联系)、comcol(1945 后共同殖民者)、legal_orig(法系起源)。Mayer & Zignago (2011) 是官方说明文档。 |
| 关税 / 非关税 | WITS / UNCTAD TRAINS / WTO TAO | MFN 从价关税、有效适用关税(applied rate)、HS 6 位码。反事实 $\hat\tau_{ni}$ 里的关税分量 $1+\hat t_{ni}$ 从这里取。 |
| GDP / 总支出 $X_n$ | Penn World Table (PWT 10.0) 或 World Bank WDI | PWT 变量 cgdpe(支出法 GDP,现价美元)、cgdpo(产出法 GDP)。WDI 对应"GDP (current US$)"。用于归一化与帽子代数权重。 |
| 劳动力 $L_i$ | PWT 10.0 / WDI | PWT 变量 emp(就业人数,百万);WDI"劳动力总数"。注意 PWT 的 emp 自 9.1 起才一致可比。 |
| 工资率 $w_i$(若需) | PWT / ILO STAT | PWT labsh(劳动收入份额)× GDP / emp 近似;ILO 平均实际工资。Armington 帽子代数不需要绝对 $w_i$,只有做技术/生产率反事实时才需要。 |
| 汇率(本币→美元) | IMF IFS(International Financial Statistics) | 年平均官方汇率 rf。把各国本币计价的贸易流、GDP 统一折成美元;反事实若含名义汇率假设需单独声明。 |
| 中国专用:企业/海关微观 | 中国海关数据库(China Customs Import/Export Database)、中国工业企业数据库(ASIF) | HS 8/10 位、企业-月度进出口额与价格;用于分行业 $\sigma_s$ 估计或多部门扩展。加工贸易与一般贸易需拆分(余淼杰 2015 的处理方式)。 |
| 中国专用:宏观与价格 | 国家统计局年度/季度数据库、CEIC、Wind | 分省 GDP、就业、分行业工业品出厂价格指数(PPI)、居民消费价格(CPI);CEIC 提供更长的季度序列与分省面板。 |
冰山成本 $\tau_{ni}$ 的两种构造方法
冰山成本不可直接观测,文献里有两条标准路径:
- 从贸易份额反推(structural inversion,最常用):由份额公式 $\lambda_{ni}/\lambda_{nn}=(\tau_{ni})^{1-\sigma}$(归一化 $w_i=w_n$ 时),得 $$\tau_{ni}=\left(\frac{\lambda_{nn}}{\lambda_{ni}}\right)^{1/(\sigma-1)}$$ 再用国内贸易成本归一 $\tau_{nn}=1$。这一方法不需要估引力方程,直接从数据份额矩阵读出 $\tau$ 的相对水平——是量化贸易论文的默认做法(Head & Mayer 2014 综述)。
- 引力方程残差法:估计结构引力 $\ln X_{ni}=\alpha_i+\beta_n-(1-\sigma)\ln\tau_{ni}$,令 $\ln\tau_{ni}=\beta_1\ln dist_{ni}+\beta_2\,contig_{ni}+\beta_3\,comlang_{ni}+\beta_4\,colony_{ni}+\cdots$,把拟合的 $\ln\tau_{ni}$ 指数化得到 $\tau_{ni}=\exp(\widehat{\ln\tau_{ni}})$,再归一化使 $\tau_{nn}=1$。优点是能分解"距离/语言/殖民"各自的贡献;缺点是要处理多边阻力(Anderson-van Wincoop 2003 提醒:必须用国固定效应或 PPML 估计)。
精确帽子代数只用基准份额矩阵 $\lambda_{ni}$ 与外生冲击 $\hat\tau_{ni}$(例如关税下降 50% 即 $\hat\tau_{ni}=1/1.5$)。基准 $\tau$ 的绝对水平被吸收进 $\lambda_{ni}$,所以做反事实时你甚至不需要"构造 $\tau$"——只要能说出冲击的 $\hat\tau$ 就行。只有当你想做"距离变长"这类反事实时,才需要先用引力残差法估出 $\tau_{ni}$ 的基线。
构造基准份额矩阵的标准流程
- 从 WIOD/ICIO 取 $N$ 国 × $N$ 国双边采购矩阵 $X_{ni}$($n$ 国从 $i$ 国采购的总额);
- 对每一行 $n$ 归一化:$\lambda_{ni}=X_{ni}/\sum_k X_{nk}$;
- 国内份额 $\lambda_{nn}$ 由行内对角元直接读出;
- 基准总支出 $X_n=\sum_k X_{nk}$,用于帽子代数的权重;
- 工资 $w_n L_n$ 在贸易平衡假设下等于 $X_n$,无需单独估 $w_n$ 与 $L_n$。
这一流程的好处是:你不需要观测 $w_n$ 或 $\tau_{ni}$ 的绝对水平,所有基准信息都在 $\lambda_{ni}$ 里。这正是帽子代数在实证上可行的原因。
09 论文案例
10 常见错误与进阶
Armington 模型只有相对工资是被识别的——只乘以一个常数 $\alpha$,所有 $w_i$ 同时缩放,均衡不变。如果不显式归一化(每轮 $\sum w_i L_i = 1$),迭代可能漂移到无穷或零。
$\tau_{ii}=1$ 是国内贸易无成本。如果你误写成 $\tau_{ii}=\bar\tau>1$,模型会把"国内采购"也当成有贸易成本,结果 $\lambda_{ii}$ 会人为偏低,福利公式给出虚假的"巨大贸易利得"。
工资更新步长 damp 取 1.0 在 N 大或 $\sigma$ 大时容易震荡。建议从 damp=0.1 起步,逐步调大;若震荡,用 Anderson 加速或直接 scipy.optimize.fixed_point。
正确方程是 $w_iL_i=\sum_n\lambda_{ni}w_nL_n$——右边是对进口国 $n$ 求和(列方向,$\Lambda^\top$ 乘以支出向量)。如果你写成 $\sum_n\lambda_{in}w_nL_n$(行方向),就把"谁卖给谁"搞反了,迭代永远不收敛。代码里检查:sales = Lam.T @ (w*L),转置 .T 不能丢。
对 $n$ 国从 $i$ 国加关税 $t_{ni}$ 后,消费者预算应为 $X_n=w_nL_n+\sum_i t_{ni}p_{ni}q_{ni}$(关税收入返还)。如果你只把 $\tau_{ni}$ 乘以 $1+t_{ni}$ 而不把关税收入加回预算,$X_n$ 少了一块,贸易平衡方程不闭合,福利计算系统偏低。帽子代数代码里 tau_hat 变化时若同时改了 $X_0$,要同步处理关税返还项。
贸易份额对 $\tau_{ni}$ 的弹性是 $1-\sigma$(因为 $\sigma>1$ 所以为负)。"贸易弹性"(贸易流对冰山成本的弹性绝对值)是 $\sigma-1$。ACR 公式里指数是 $-1/(\sigma-1)$,不是 $-1/(1-\sigma)$。写成后者符号翻转,福利结论完全相反。
常见写法 w_new = w * (impl/w)**damp(几何阻尼)在本模型下会收敛到一个违反 Walras 定律的伪不动点:残差 $\max|impl_i/w_i-1|$ 停在 0.07 附近不再下降,ACR 福利与绝对空间重解差约 1 个百分点。原因是归一化 $\sum w_i X_i=1$ 与几何更新叠加后,$impl_i/w_i=\text{常数}$ 就变成不动点。正确做法:用算术阻尼 w_new = (1-damp)*w + damp*impl(damp≈0.2),残差会收敛到机器精度。本页代码已采用算术阻尼;如果你从别处复制了几何阻尼的 DEK 代码,务必先做"ACR vs 绝对空间重解"的数值核对。
Armington 模型的贸易弹性 $1-\sigma$ 是任意校准的——它来自偏好假设,而非技术。EK 模型(下一页)把弹性内生化到 Fréchet 分布的形状参数上,这才是 QSGE 真正的革命。
进阶资料
- Feenstra, R. C. (2016), Advanced International Trade: Theory and Evidence, Chapter 5。
- Anderson, J. E. (1979), "A Theoretical Foundation for the Gravity Equation", AER——Armington 模型如何自然产生引力方程。
∑ 方程总清单 · Equation Summary
本模型共 20 个方程,按推导顺序编号如下。每个方程都在正文中给出完整推导、变量定义与经济直觉。
| 编号 | 名称 | 公式 | 所在节 |
|---|---|---|---|
| (A1) | CIF 价格 | $p_{ni}=\tau_{ni}p_i$ | 01 |
| (A2) | CES 聚合效用 | $U_n=[\sum_i q_{ni}^{(\sigma-1)/\sigma}]^{\sigma/(\sigma-1)}$ | 02 |
| (A3) | 预算约束 | $\sum_i p_{ni}q_{ni}=X_n$ | 02 |
| (A4) | 拉格朗日 FOC | $\partial U_n/\partial q_{ni}=\lambda_n p_{ni}$ | 02 |
| (A5) | MRS = 价格比 | $q_{ni}/q_{nk}=(p_{ni}/p_{nk})^{-\sigma}$ | 02 |
| (A6) | 需求(预算代入后) | $q_{nk}=X_n p_{nk}^{-\sigma}/\sum_i p_{ni}^{1-\sigma}$ | 02 |
| (A7) | Dixit-Stiglitz 价格指数 | $P_n=[\sum_i p_{ni}^{1-\sigma}]^{1/(1-\sigma)}$ | 02 |
| (A8) | Armington 需求函数 | $q_{ni}=X_n p_{ni}^{-\sigma}/P_n^{1-\sigma}$ | 02 |
| (A9) | 贸易份额推导 | $\lambda_{ni}=p_{ni}^{1-\sigma}/P_n^{1-\sigma}$ | 03 |
| (A10) | ★ 贸易份额 | $\lambda_{ni}=(w_i\tau_{ni})^{1-\sigma}/\sum_k(w_k\tau_{nk})^{1-\sigma}$ | 03 |
| (A11) | 收入=支出 | $X_n=w_nL_n$ | 04 |
| (A12) | 双边贸易平衡 | $w_iL_i=\sum_n\lambda_{ni}w_nL_n$ | 04 |
| (A13) | 工资归一化 | $\sum_i w_iL_i=1$ | 04 |
| (A14) | 份额行归一 | $\sum_i\lambda_{ni}=1$ | 04 |
| (A15) | 用国内份额反推价格 | $P_n=w_n\lambda_{nn}^{1/(\sigma-1)}$ | 03 |
| (A16) | 实际工资 / 福利水平 | $W_n=w_n/P_n=\lambda_{nn}^{-1/(\sigma-1)}$ | 05 |
| (A17) | 贸易利得 vs autarky | $G_n=\lambda_{nn}^{-1/(\sigma-1)}-1$ | 05 |
| (A18) | ★ 份额帽子方程 | $\hat\lambda_{ni}=(\hat w_i\hat\tau_{ni})^{1-\sigma}/\sum_k\lambda_{nk}(\hat w_k\hat\tau_{nk})^{1-\sigma}$ | 06 |
| (A19) | 贸易平衡帽子方程 | $\hat w_i=\sum_n\lambda_{ni}\hat\lambda_{ni}\hat w_n w_nL_n/(w_iL_i)$ | 06 |
| (A20) | ★ ACR 福利公式 | $\hat W_n=\hat\lambda_{nn}^{-1/(\sigma-1)}$ | 05/06 |