经济学一般均衡模型
经济学一般均衡模型
一般均衡模型代码实现(RBC / 新古典静态一般均衡,Python)。下面提供两类可直接运行的示例:
- 静态新古典一般均衡(2部门,消费者+厂商,解析解+数值求解),最适合入门;
- 动态 RBC(真实经济周期)一般均衡求解思路。
常见坑
- 一般均衡不是直接解变量,本质是求解价格,使得所有市场出清;
- 价格齐次性:只有相对价格被确定,绝对价格不定,需要价格标准化;
- 动态一般均衡比静态复杂很多,需要处理跨期欧拉方程、期望;
- 非线性模型可能多个均衡解(多重均衡),初值会影响数值求解收敛结果。
两商品、两消费者纯交换一般均衡(埃奇沃思盒)
纯交换经济,没有生产,只有禀赋。
- 两个消费者 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$
一般均衡条件
- 消费者效用最大化;
- 厂商利润最大化;
- 市场出清:产品市场 $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) 随机生产率冲击。
求解方法(代码框架)
- 值函数迭代(Value Function Iteration, VFI):离散网格,适合教学,速度慢。
- 线性近似(扰动法 Perturbation):在稳态附近泰勒展开,Dynare 最主流。
- Dynare(专门 DSGE/DGE 工具,写模型方程,自动求解一般均衡)。
Dynare 示例代码(.mod 文件,RBC) 见[[#代码实现]]。
Dynare 自动:求解稳态一般均衡 + 对数线性化 + 脉冲响应。
一般均衡模型:纯交换经济 + 生产经济 简明推导案例
关键是解出数量均衡条件下的价格。
- 纯交换均衡:外生商品禀赋,仅消费者优化,求解商品相对价格,实现消费最优配置。
- 生产一般均衡:外生要素禀赋,厂商生产最优 + 消费者消费最优,同时结清商品市场+要素市场,求解商品、要素双重相对价格。
- 共同核心是瓦尔拉斯法则,n个市场仅n-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$
- 个体最优需求
- 消费者根据预算约束最大化效用,得到需求函数:
- $x_{1A}=0.5\frac{2p+1}{p},\ x_{1B}=0.5\frac{p+2}{p}$
- 市场出清与均衡解
- 商品1市场出清:$x_{1A}+x_{1B}=3$
- 代入求解得均衡相对价格:$p^*=1$
- 均衡配置:$A(1.5,1.5),\ B(1.5,1.5)$
- 结论:两人禀赋完全均等化,两商品市场同时出清,满足瓦尔拉斯法则。
生产一般均衡
二、引入生产的一般均衡(2商品+2要素)
- 模型设定
- 两商品 $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$
- 厂商最优条件
- 完全竞争下,要素边际产值=要素价格:
- $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$。
- 消费者最优与市场出清
- 消费者要素收入:$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)。
工具
- Python(Scipy, fsolve 求解):适合静态、小规模一般均衡,自己控制方程,学习原理。
- GAMS / MPSGE:可计算一般均衡 CGE,多部门、多地区、税收贸易政策。
- 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、行业产出、就业、福利、碳排放变化。
核心构成
- 基准均衡数据:SAM / 投入产出表提供基准年份各部门、收入分配、流向的平衡数据。
- 参数校准(Calibration):从基准均衡反推参数(如 C-D 份额 $\alpha$、替代弹性),使模型在基准点复现 SAM。
- 模型方程:各部门生产/消费一阶条件 + 市场出清 + 收入均衡,构成非线性方程组。
- 求解:用 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
- 数理经济学
- 高级经济学
- 计量经济学
排版约定
- 全文公式均用单行行内
$...$书写。