用Python/R手把手复现IS-LM模型:从理论公式到动态模拟(附完整代码)
2026/6/11 10:10:58 网站建设 项目流程

用Python/R手把手复现IS-LM模型:从理论公式到动态模拟(附完整代码)

当宏观经济学教材上的IS-LM曲线从静态图表变成屏幕上跳动的动态轨迹时,那些抽象的经济学原理突然有了生命力。本文将为数据科学爱好者打开一扇新窗口——如何用编程语言让经典宏观经济模型"活"起来。不同于教科书上的理论推导,我们将聚焦代码实现,用Python和R两种语言构建可交互的经济系统模拟器。

1. 模型核心与编程框架设计

IS-LM模型本质上是一个两方程联立系统:产品市场均衡由消费函数和投资函数构成,货币市场均衡则由货币需求和供给决定。在代码实现时,我们需要建立四个核心组件:

# Python模型框架示例 class ISLM_Model: def __init__(self, alpha=500, beta=0.5, e=1250, d=250, k=0.5, h=250, A=1000, M=1250, P=1): # 消费函数参数 self.alpha = alpha # 自主消费 self.beta = beta # 边际消费倾向 # 投资函数参数 self.e = e # 自发投资 self.d = d # 投资利率敏感系数 # 货币需求参数 self.k = k # 交易性货币需求系数 self.h = h # 投机性货币需求系数 self.A = A # 货币需求常数项 # 货币供给参数 self.M = M # 名义货币供给 self.P = P # 价格水平

对应的R语言实现采用类似的参数结构:

# R模型参数初始化 params <- list( alpha = 500, beta = 0.5, e = 1250, d = 250, k = 0.5, h = 250, A = 1000, M = 1250, P = 1 )

关键计算逻辑对比

组件Python实现R实现
消费函数C = alpha + beta * YC <- alpha + beta * Y
投资函数I = e - d * rI <- e - d * r
货币市场均衡r = (k*Y + A - M/P)/hr <- (k*Y + A - M/P)/h
产品市场均衡Y_next = C + I + GY_next <- C + I + G

2. 基础模型实现与可视化

让我们从最简单的封闭经济模型开始。以下Python代码实现了100期的动态调整过程:

import numpy as np import matplotlib.pyplot as plt def basic_simulation(T=100, Y0=5000, r0=10, G=0): # 初始化数组 Y = np.zeros(T+1) r = np.zeros(T+1) Y[0], r[0] = Y0, r0 for t in range(T): C = alpha + beta * Y[t] I = e - d * r[t] Y[t+1] = C + I + G r[t+1] = (k * Y[t] + A - M/P) / h # 可视化 plt.figure(figsize=(15,5)) plt.subplot(121) plt.plot(Y, label='国民收入') plt.title('国民收入动态路径') plt.subplot(122) plt.plot(r, color='orange', label='利率') plt.title('利率动态路径') plt.show() return Y, r

R语言用户可以使用以下等效实现:

basic_simulation <- function(T=100, Y0=5000, r0=10, G=0) { Y <- numeric(T+1) r <- numeric(T+1) Y[1] <- Y0; r[1] <- r0 for(t in 1:T) { C <- alpha + beta * Y[t] I <- e - d * r[t] Y[t+1] <- C + I + G r[t+1] <- (k * Y[t] + A - M/P) / h } par(mfrow=c(1,2)) plot(Y, type='l', main='国民收入动态路径') plot(r, type='l', col='orange', main='利率动态路径') return(list(Y=Y, r=r)) }

运行后会观察到系统如何从初始非均衡状态(Y0=5000, r0=10)收敛到均衡点(Y*=2000, r*=3)。这种动态轨迹完美展示了经济学中"失衡-调整-均衡"的过程。

3. 政策模拟实验

3.1 财政政策冲击

政府支出增加是经典的财政政策工具。我们在第20期引入500单位的政府支出冲击:

def fiscal_policy_shock(): Y, r = np.zeros(101), np.zeros(101) Y[0], r[0] = 2000, 3 # 从均衡开始 for t in range(100): G = 500 if t >= 20 else 0 # 第20期政策冲击 C = alpha + beta * Y[t] I = e - d * r[t] Y[t+1] = C + I + G r[t+1] = (k * Y[t] + A - M/P) / h plt.plot(Y, label='国民收入') plt.plot(r, label='利率') plt.axvline(20, color='red', linestyle='--') plt.legend()

关键观察结果:

  • 政府支出乘数效应明显,国民收入增长幅度大于政府支出增加额
  • 利率上升产生"挤出效应",部分抵消了财政政策效果
  • 系统最终会达到新的均衡点

3.2 货币政策调整

中央银行通过调节货币供给影响经济。以下代码模拟货币供给量增加20%的效果:

monetary_policy <- function() { Y <- numeric(101); r <- numeric(101) Y[1] <- 2000; r[1] <- 3 for(t in 1:100) { current_M <- ifelse(t < 30, M, M * 1.2) # 第30期货币政策 C <- alpha + beta * Y[t] I <- e - d * r[t] Y[t+1] <- C + I r[t+1] <- (k * Y[t] + A - current_M/P) / h } plot(Y, type='l', ylim=range(c(Y,r)), col='blue') lines(r, col='red') abline(v=30, lty=2) }

实验发现:

  • 货币供给增加导致利率下降
  • 低利率刺激投资增长,进而提升国民收入
  • 长期中价格水平可能调整,削弱货币政策效果(需扩展模型)

4. 高级扩展与随机模拟

现实经济充满不确定性。我们在基础模型中添加随机扰动项:

def stochastic_simulation(): np.random.seed(42) Y, r = np.zeros(101), np.zeros(101) Y[0], r[0] = 2000, 3 for t in range(100): # 添加随机扰动 C = alpha + beta * Y[t] + np.random.normal(0, 50) I = e - d * r[t] + np.random.normal(0, 30) Y[t+1] = C + I r[t+1] = (k * Y[t] + A - M/P + np.random.normal(0, 20)) / h plt.figure(figsize=(10,6)) plt.plot(Y, label='国民收入') plt.plot(r, label='利率') plt.title('存在随机扰动的动态路径') plt.legend()

关键观察:

  • 系统不再平滑收敛,而是呈现波动收敛特征
  • 大的随机冲击可能导致系统暂时偏离均衡
  • 模型更接近现实经济的不确定性特征

对于希望进一步探索的读者,可以考虑以下扩展方向:

  1. 加入预期形成机制(适应性预期vs理性预期)
  2. 引入开放经济条件下的BP曲线
  3. 实现价格水平内生调整的AD-AS扩展
  4. 构建交互式仪表盘实时调整参数

调试提示:当模拟结果不收敛时,检查参数组合是否满足模型稳定性条件,特别是边际消费倾向β和投资利率敏感系数d的关系。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询