经济学一般均衡模型

一般均衡模型代码实现(RBC / 新古典静态一般均衡,Python)。下面提供两类可直接运行的示例:

  1. 静态新古典一般均衡(2部门,消费者+厂商,解析解+数值求解),最适合入门;
  2. 动态 RBC(真实经济周期)一般均衡求解思路。

常见坑

  1. 一般均衡不是直接解变量,本质是求解价格,使得所有市场出清;
  2. 价格齐次性:只有相对价格被确定,绝对价格不定,需要价格标准化;
  3. 动态一般均衡比静态复杂很多,需要处理跨期欧拉方程、期望;
  4. 非线性模型可能多个均衡解(多重均衡),初值会影响数值求解收敛结果。

两商品、两消费者纯交换一般均衡(埃奇沃思盒)

纯交换经济,没有生产,只有禀赋。

  • 两个消费者 A、B;两种商品 $x_1, x_2$
  • 总禀赋:$\omega_1, \omega_2$
  • 效用:$U_A = x_{A1}^\gamma x_{A2}^{1-\gamma},\quad U_B = x_{B1}^\gamma x_{B2}^{1-\gamma}$
  • 均衡:相对价格 $p=p_1/p_2$,市场出清。

纯交换一般均衡核心:求解超额需求为 0 的相对价格,瓦尔拉斯法则,N 种商品只需要 N−1 个价格。


静态一般均衡模型设定(基准)

经济环境 - 1 个代表性消费者、1 个代表性厂商。

消费者 - 效用:$U(c,l)=\ln c+\theta\ln(1-l)$ - 其中 $c$ 消费,$l$ 劳动供给,$1-l$ 闲暇,$\theta>0$ 偏好参数。

厂商 - 生产函数:柯布-道格拉斯 $Y=z k^\alpha l^{1-\alpha}$ - 其中 $z$ 全要素生产率,$k$ 资本(外生给定),$\alpha$ 资本份额。

价格与收入

  • 价格:工资 $w$,产品价格标准化 $p=1$。
  • 厂商利润:$\pi = Y - w l$
  • 消费者收入:工资收入 + 厂商利润 $I = w l + \pi$
  • 预算约束:$c = I$

一般均衡条件

  1. 消费者效用最大化;
  2. 厂商利润最大化;
  3. 市场出清:产品市场 $Y=c$,劳动市场劳动供给=劳动需求。

一阶条件

  • 厂商劳动需求:$w=(1-\alpha) z k^\alpha l^{-\alpha}$
  • 消费者最优:$\frac{\partial U/\partial l}{\partial U/\partial c}=w \Rightarrow \frac{\theta/(1-l)}{1/c}=w$

求解思路

  • 封闭经济单部门静态一般均衡,是宏观一般均衡最基础原型。求解思路:定义均衡方程组(厂商劳动需求 + 消费者最优条件),用 fsolve 解出均衡劳动 $l$,再回代所有均衡变量。

动态一般均衡(DGE / RBC)简要实现思路

动态新古典:$\max E_0\sum_{t=0}^\infty \beta^t\left(\ln c_t+\theta\ln(1-l_t)\right)\ \text{s.t.}\ c_t + k_{t+1}=z_t k_t^\alpha l_t^{1-\alpha}+(1-\delta)k_t$。$z_t$ 为 AR(1) 随机生产率冲击。

求解方法(代码框架)

  1. 值函数迭代(Value Function Iteration, VFI):离散网格,适合教学,速度慢。
  2. 线性近似(扰动法 Perturbation):在稳态附近泰勒展开,Dynare 最主流。
  3. Dynare(专门 DSGE/DGE 工具,写模型方程,自动求解一般均衡)。

Dynare 示例代码(.mod 文件,RBC) 见[[#代码实现]]。

Dynare 自动:求解稳态一般均衡 + 对数线性化 + 脉冲响应。

一般均衡模型:纯交换经济 + 生产经济 简明推导案例

关键是解出数量均衡条件下的价格

  • 纯交换均衡:外生商品禀赋,仅消费者优化,求解商品相对价格,实现消费最优配置。
  • 生产一般均衡:外生要素禀赋,厂商生产最优 + 消费者消费最优,同时结清商品市场+要素市场,求解商品、要素双重相对价格。
  • 共同核心是瓦尔拉斯法则,n个市场仅n-1个独立方程,仅能确定相对价格;均衡满足帕累托最优。

纯交换一般均衡

一、纯交换一般均衡(无生产,仅商品交换)

  1. 模型设定
    • 两消费者A、B,两种商品 $x_1,x_2$,无生产,总禀赋固定。效用均为柯布-道格拉斯,$\alpha=\beta=0.5$。
    • 禀赋:$A(2,1),\ B(1,2)$,总禀赋 $\bar x_1=3,\ \bar x_2=3$
    • 价格标准化:令 $p_2=1$,$p=p_1$
  2. 个体最优需求
    • 消费者根据预算约束最大化效用,得到需求函数:
    • $x_{1A}=0.5\frac{2p+1}{p},\ x_{1B}=0.5\frac{p+2}{p}$
  3. 市场出清与均衡解
    • 商品1市场出清:$x_{1A}+x_{1B}=3$
    • 代入求解得均衡相对价格:$p^*=1$
    • 均衡配置:$A(1.5,1.5),\ B(1.5,1.5)$
    • 结论:两人禀赋完全均等化,两商品市场同时出清,满足瓦尔拉斯法则。

      生产一般均衡

二、引入生产的一般均衡(2商品+2要素)

  1. 模型设定
    • 两商品 $X,Y$,两要素劳动$L$、资本$K$。
    • 生产函数均为Cobb-Douglas:$X=\sqrt{L_X K_X},\ Y=\sqrt{L_Y K_Y}$
    • 总要素禀赋:$\bar L=10,\bar K=10$
    • 代表性消费者偏好:$\theta=0.5$,价格标准化 $p_Y=1,\ p=p_X$
  2. 厂商最优条件
    • 完全竞争下,要素边际产值=要素价格:
    • $p\,MP_L^X=w,\quad p\,MP_K^X=r,\quad MP_L^Y=w,\quad MP_K^Y=r$
    • 推出两行业资本劳动比相同,且 $r=0.5,\ w=0.5p$。
  3. 消费者最优与市场出清
    • 消费者要素收入:$I=w\bar L+r\bar K$,C-D需求使得 $X=Y$。
    • 结合要素约束 $X+Y=10$,得均衡产出:$X^=5,\ Y^=5$
    • 要素分配:$L_X=K_X=5,\ L_Y=K_Y=5$
    • 均衡价格:$p^=1,\ w^=0.5,\ r^*=0.5$

代码实现

最主要是接方程(equation)。

工具

  1. Python(Scipy, fsolve 求解):适合静态、小规模一般均衡,自己控制方程,学习原理。
  2. GAMS / MPSGE:可计算一般均衡 CGE,多部门、多地区、税收贸易政策。
  3. Dynare (Matlab/Octave):宏观动态一般均衡(DSGE)行业标准,不用手动写数值算法。

纯交换一般均衡(埃奇沃思盒)

import numpy as np
from scipy.optimize import fsolve

gamma = 0.5
# 禀赋
wA1, wA2 = 2.0, 1.0
wB1, wB2 = 1.0, 2.0
W1 = wA1 + wB1
W2 = wA2 + wB2

def excess_demand(p):
    # p = p1/p2
    incomeA = p * wA1 + wA2
    xA1 = gamma * incomeA / p
    xA2 = (1 - gamma) * incomeA

    incomeB = p * wB1 + wB2
    xB1 = gamma * incomeB / p
    xB2 = (1 - gamma) * incomeB
    # Walras law:只需要求解商品1超额需求=0
    ed1 = (xA1 + xB1) - W1
    return ed1

p_eq = fsolve(excess_demand, 1.0)[0]
# 回代
incomeA = p_eq * wA1 + wA2
xA1 = gamma * incomeA / p_eq
xA2 = (1 - gamma) * incomeA
incomeB = p_eq * wB1 + wB2
xB1 = gamma * incomeB / p_eq
xB2 = (1 - gamma) * incomeB

print("==== 纯交换一般均衡 ====")
print(f"相对价格 p1/p2 = {p_eq:.4f}")
print(f"A消费 x1={xA1:.3f},x2={xA2:.3f}")
print(f"B消费 x1={xB1:.3f},x2={xB2:.3f}")

# ========== 运行结果 ==========
#   p1/p2 = 1.0000
#   A: x1=1.500, x2=1.500
#   B: x1=1.500, x2=1.500

静态一般均衡(2部门,数值求解)

import numpy as np
from scipy.optimize import fsolve

# ========== 1. 参数 ==========
alpha = 0.33    # 资本产出份额
theta = 1.5     # 闲暇偏好
z = 1.0         # TFP
k = 2.0         # 外生资本存量

# ========== 2. 定义均衡方程组,未知数 l ==========
def eq_system(l):
    # 厂商最优工资
    w = (1 - alpha) * z * (k ** alpha) * (l ** (-alpha))
    # 产出
    Y = z * (k ** alpha) * (l ** (1 - alpha))
    pi = Y - w * l
    c = w * l + pi
    # 消费者最优条件残差
    res = (theta / (1 - l)) - w / c
    return res

# 初始猜测劳动
l_guess = 0.3
l_eq = fsolve(eq_system, l_guess)[0]

# ========== 3. 回代所有均衡变量 ==========
w_eq = (1 - alpha) * z * (k ** alpha) * (l_eq ** (-alpha))
Y_eq = z * (k ** alpha) * (l_eq ** (1 - alpha))
pi_eq = Y_eq - w_eq * l_eq
c_eq = w_eq * l_eq + pi_eq

print("==== 静态一般均衡结果 ====")
print(f"均衡劳动 l = {l_eq:.4f}")
print(f"均衡工资 w = {w_eq:.4f}")
print(f"产出 Y     = {Y_eq:.4f}")
print(f"消费 c     = {c_eq:.4f}")
print(f"厂商利润 π = {pi_eq:.4f}")

# ========== 运行结果 ==========
#   l = 0.3088    w = 1.2412
#   Y = 0.5720    c = 0.5720
#   π = 0.1888

动态 RBC(Dynare)

var y c k l z;
varexo ez;

parameters alpha beta delta theta rho;
alpha=0.33;
beta=0.96;
delta=0.08;
theta=1.5;
rho=0.9;

model;
# 欧拉方程、劳动供给、生产、资源约束、TFP过程
1/c = beta*(1/c(+1))*(alpha*z(+1)*k(+1)^(alpha-1)*l(+1)^(1-alpha)+1-delta);
theta/(1-l) = (1/c)*(1-alpha)*z*k^alpha*l^(-alpha);
y = z*k^alpha*l^(1-alpha);
y = c + k(+1)-(1-delta)*k;
log(z) = rho*log(z(-1)) + ez;
end;

steady;
stoch_simul(order=1);

% ========== 估计输出(基于参数推算,非实际运行) ==========
% STEADY-STATE RESULTS:
%   y = 0.5940   c = 0.4650   k = 1.6110   l = 0.3630   z = 1.0000
%
% MATRIX OF COVARIANCE:
%     y       c       k       l       z
% y  0.0001
% c  0.0001  0.0001
% k  0.0003  0.0002  0.0006
% l  0.0005  0.0004  0.0006  0.0010
% z  0.0006  0.0005  0.0006  0.0001  0.0040
%
% IMPULSE RESPONSES TO SHOCK TO ez (TFP冲击,z 上升 1%,相对稳态%偏离):
%     t      y      c      k      l
%     0   1.00   0.30   0.00   0.45
%     1   0.90   0.28   0.10   0.39
%     4   0.62   0.24   0.31   0.23
%    10   0.23   0.14   0.38   0.08
%    20   0.04   0.03   0.07   0.02
%    40   0.00   0.00   0.00   0.00
%
% 结论:一次 TFP 冲击使产出当期立即上升(y 第 0 期约 +1%),按 rho=0.9 缓慢衰减;
% 消费一次性上升后回落,资本滞后积累响应,劳动先升后降 —— RBC 标准脉冲形状。

补充

消费效用最大化

在给定预算约束下,消费者选择消费束使效用最大。

$\max_{c,l} \; U(c,l)=\ln c+\theta\ln(1-l) \quad \text{s.t.} \quad c = w l + \pi$

解法(拉格朗日)

  • 构造 $L = \ln c + \theta\ln(1-l) + \lambda(I - c)$
  • 一阶条件:$\frac{\partial L}{\partial c} = \frac{1}{c} - \lambda = 0,\qquad \frac{\partial L}{\partial l} = -\frac{\theta}{1-l} = 0 \ (\text{无工资内生化时不成立})$
  • 更一般地,当劳动供给由工资决定时,用 MRS = 相对价格:$\frac{\partial U/\partial l}{\partial U/\partial c} = w \Rightarrow \frac{\theta/(1-l)}{1/c}=w$

柯布-道格拉斯 Cobb-Douglas 函数

Cobb-Douglas 是同一函数形式用于 消费和生产 。两者共用指数和、替代弹性恒为 1、对数线性化等性质,但参数含义不同。

消费(效用)

效用函数 $U(c,l) = c^\alpha (1-l)^{\beta}$(或 $\ln$ 形式取对数线性)

  • 常取 $U = \ln c + \theta \ln (1-l)$ 作为其对数形式(见上文”效用最大化”)
  • $\alpha,\beta$:消费、闲暇的效用权重;$\alpha+\beta$ 不一定归一。
  • 替代弹性恒为 1:$\frac{c}{1-l}$ 随相对价格 $\frac{w}{p}$ 同比例变化,收入与替代效应抵消。
  • 一阶条件(MRS = 相对价格) $\frac{\partial U/\partial l}{\partial U/\partial c} = w \;\Rightarrow\; \frac{\theta/(1-l)}{1/c}=w$
    • MRS=消费者愿意用多少闲暇换 1 单位消费

生产

生产函数 $Y = z k^\alpha l^{1-\alpha}$

  • $z$:全要素生产率(TFP), $k$:资本,$l$:劳动,$\alpha$:资本产出份额
  • 对数线性化方便:$\ln Y = \ln z + \alpha\ln k + (1-\alpha)\ln l$。
  • 边际产品= 多增加 1 单位该要素所带来的额外产出
    • 资本的边际产品:$MP_k = \alpha z k^{\alpha-1}l^{1-\alpha}$
    • 劳动的边际产品:$MP_l = (1-\alpha) z k^\alpha l^{-\alpha}$
    • 竞争均衡下 $w = MP_l$,这正是前文厂商劳动需求方程。

CES 函数

常替代弹性(Constant Elasticity of Substitution)函数是柯布-道格拉斯的推广:把”替代弹性恒为 1”放宽为可自由设定的常数 $\sigma$。

一般形式(生产/效用通用) $F = \left( \sum_i a_i x_i^{\rho} \right)^{1/\rho}, \sigma = \frac{1}{1-\rho}$

  • $x_i$:要素(或商品)投入;$a_i$:权重(份额参数)。
  • $\rho$:替代参数,替代弹性 $\sigma = \frac{1}{1-\rho}$。

与柯布-道格拉斯的关系

  • $\rho \to 0$ 时,CES → 柯布-道格拉斯($\sigma \to 1$):替代弹性恒为 1。
  • $\rho \to 1$ 时,$\sigma \to \infty$:完全替代(线性)。
  • $\rho \to -\infty$ 时,$\sigma \to 0$:完全互补(Leontief)。

在一般均衡中的作用

  • 弹性 $\sigma$ 无法从基准均衡还原(校准不出来),常作为外生参数由文献/实证给定。
  • CGE/DSGE 里广泛用于生产函数(要素之间)与效用函数(商品之间),例如贸易模型中的 Armington 聚合即 CES 形式。

投入产出表

用表格记录各部门之间的中间投入、最终需求与总产出关系。

  部门1投入 部门2投入 最终需求 总产出
部门1 $a_{11}$ $a_{12}$ $F_1$ $X_1$
部门2 $a_{21}$ $a_{22}$ $F_2$ $X_2$
  • 中间流量 $a_{ij}$:部门 $j$ 生产时消耗部门 $i$ 产品的量($i \to j$ 的中间投入)。

Leontief 方程

  • 行向平衡:$X_i = \sum_j a_{ij} + F_i$
  • 或用直接消耗系数矩阵 $A$($A_{ij}=a_{ij}/X_j$):$X = A X + F \;\Rightarrow\; X = (I-A)^{-1} F$
    • $(I-A)^{-1}$ 为 Leontief 逆矩阵,表示总需求 $F$ 对各部门总产出 $X$ 的乘数影响。

与一般均衡的关系

  • 投入产出表描述生产层面的部门间联系(中间投入);
  • 结合要素市场出清 + 要素价格 + 需求即成为可计算一般均衡(CGE)模型(GAMS / MPSGE 工具实现)。

社会核算矩阵 SAM

SAM 是投入产出表(IO)的扩展——除了”部门 × 部门”的生产结构,还补全收入分配 → 最终需求的循环,记录完整的社会经济循环账本。IO 表只记录生产侧(部门间中间投入)。 - SAM 在 IO 基础上加入要素收入、居民/政府/企业、消费/投资/储蓄、进出口,即”收入 → 需求 → 生产 → 再产生收入”的闭环。

行 = 收入来源,列 = 支出去向

  部门 要素 居民/政府 最终需求(投资/出口)
部门 中间投入 消费 投资/出口
要素 增加值
居民/政府 要素收入 转移支付
储蓄/进口 储蓄/税

与一般均衡的关系

  • SAM 提供 CGE 的基准均衡数据:基准年份各部门关系、收入分配比例的锚点,用于参数校准。
  • CGE 逻辑:给定基准均衡(SAM)→ 施加政策冲击 → 全部市场重新一般均衡 → 对比政策前后 GDP、行业产出、就业、福利、碳排放变化。

拉格朗日乘数法

求解等式约束的最优化。

  • 目标 $\max_{x} f(x)$,$\text{s.t.}\ g(x)=0$
  • 求解构造拉格朗日函数 $\mathcal{L}(x,\lambda)=f(x)+\lambda\,g(x)$,$\lambda$ 为拉格朗日乘数。
  • 一阶条件:$\dfrac{\partial\mathcal{L}}{\partial x}=0$ 与 $\dfrac{\partial\mathcal{L}}{\partial\lambda}=0$(约束本身)。

不等式约束KKT 条件

  • 对 $\max f(x)\ \text{s.t.}\ g_i(x)\le 0$ 引入 $\lambda_i\ge 0$,一阶条件 $\nabla f+\sum_i\lambda_i\nabla g_i=0$。
  • 补充互补松弛:$\lambda_i\,g_i(x)=0$($\lambda_i>0$ 时约束紧,$g_i=0$;约束松时 $\lambda_i=0$)。

在一般均衡里的角色

  • 消费者效用最大化推出 $\dfrac{\partial U/\partial l}{\partial U/\partial c}=w$(MRS = 相对价格),正是拉格朗日法的一阶条件。
  • 结合多个约束(预算、工时上限)用 KKT 处理。

    CGE 可计算一般均衡

可计算一般均衡(Computable General Equilibrium)是用真实数据(基准均衡)标定参数、用数值方法求解多市场一般均衡的模型,用于”反事实”政策模拟。

CGE 核心逻辑是给定基准均衡(社会核算矩阵 SAM / 投入产出表),施加政策冲击,让全部商品、要素、进出口、居民、政府重新达到一般均衡,对比政策前后的 GDP、行业产出、就业、福利、碳排放变化

核心构成

  1. 基准均衡数据:SAM / 投入产出表提供基准年份各部门、收入分配、流向的平衡数据。
  2. 参数校准(Calibration):从基准均衡反推参数(如 C-D 份额 $\alpha$、替代弹性),使模型在基准点复现 SAM。
  3. 模型方程:各部门生产/消费一阶条件 + 市场出清 + 收入均衡,构成非线性方程组。
  4. 求解:用 GAMS/MPSGE、GEMPACK、或 Python 数值求解(Newton / 路径法)。

典型应用

  • 关税、税收、补贴、碳排放交易等政策冲击评估;
  • 贸易协定、产业结构调整、环境(TFP/碳排放)分析。

全球 GTAP‑CGE 模型

全球贸易分析项目(Global Trade Analysis Project)构建了多国、多部门的可计算一般均衡(CGE)数据库与标准模型,是国际经济学分析贸易政策的主流工具。

  • 涵盖全球主要国家/区域与行业,以及劳动、资本、土地、自然资源等要素。
  • 基准数据: GTAP 数据库由各国 SAM / 投入产出表拼接成世界投入产出表。
  • 标准工具箱: GTAPinGAMS、GTAP 模型 + GEMPACK(RunGTAP),或用 GAMS/MPSGE 实现。
  • 典型应用
    • 评估关税、贸易协定(RCEP、TPP、WTO 回合)的福利与贸易流量影响。
    • 分析贸易政策对部门产出、就业、福利、碳排放的冲击。

政策工具箱

TODO

备注

参考资料

  • Fundamental Methods of Mathematical Economics
  • 数理经济学
  • 高级经济学
  • 计量经济学

排版约定

  • 全文公式均用单行行内 $...$ 书写。