如何在无均值标准差下模拟对数正态分布并计算Lucas模型名义无风险利率?
1. 无均值/标准差时模拟对数正态分布的方法
对数正态变量 ( X ) 满足 ( \ln(X) \sim \mathcal{N}(\mu, \sigma^2) ),若不知道 ( X ) 的均值和标准差,可通过以下方式推进:
- 矩估计反推参数:若能获取 ( X ) 的样本矩(或现实数据的矩),可通过对数正态的矩关系反推 ( \mu ) 和 ( \sigma ):
[
\mu = \ln\left(\frac{E[X]2}{\sqrt{E[X]2 + \text{Var}(X)}}\right), \quad \sigma^2 = \ln\left(1 + \frac{\text{Var}(X)}{E[X]^2}\right)
] - 校准法:匹配现实经济数据的典型矩(比如消费增长的历史均值、波动率)设定参数,或设定参数范围做敏感性分析。
- 贝叶斯先验估计:若完全无数据,可基于经济理论设定参数的先验分布,再通过模拟后验分布生成样本。
2. 带通胀的Lucas禀赋经济中一期名义无风险利率计算
假设采用CRRA效用函数 ( U(C) = \frac{C^{1-\gamma}}{1-\gamma} ),根据Lucas模型的欧拉方程,名义无风险债券的定价满足:
[
\frac{1}{1+i_{t,t+1}} = \mathbb{E}\left[\beta \cdot \left(\frac{C_{t+1}}{C_t}\right)^{-\gamma} \cdot \frac{1}{1+\pi_{t+1}}\right]
]
其中 ( \beta ) 是贴现因子,( \gamma ) 是相对风险厌恶系数,( g_{t+1} = \frac{C_{t+1}}{C_t} ) 是消费增长,( \pi_{t+1} ) 是通胀率(( 1+\pi_{t+1} = \frac{P_{t+1}}{P_t} ))。
已知 ( g_{t+1} \sim \text{LN}(\mu_c, \sigma_c^2) )、( 1+\pi_{t+1} \sim \text{LN}(\mu_\pi, \sigma_\pi^2) ),且二者独立,利用对数正态变量的期望性质 ( \mathbb{E}[Y] = \exp(\mu_Y + \frac{\sigma_Y^2}{2}) ),可拆分期望计算:
[
\mathbb{E}\left[g_{t+1}^{-\gamma}\right] = \exp\left(-\gamma\mu_c + \frac{\gamma2\sigma_c2}{2}\right)
]
[
\mathbb{E}\left[\frac{1}{1+\pi_{t+1}}\right] = \exp\left(-\mu_\pi + \frac{\sigma_\pi^2}{2}\right)
]
代入欧拉方程后整理得:
[
1+i_{t,t+1} = \frac{1}{\beta \cdot \exp\left(-\gamma\mu_c + \frac{\gamma2\sigma_c2}{2} - \mu_\pi + \frac{\sigma_\pi^2}{2}\right)}
]
或对数形式:
[
\ln(1+i_{t,t+1}) = -\ln\beta + \gamma\mu_c - \frac{\gamma2\sigma_c2}{2} + \mu_\pi - \frac{\sigma_\pi^2}{2}
]
3. Matlab实现方案
参数设定(无原始参数时的处理)
若无给定参数,可采用宏观经济中的典型校准值(或从历史数据估算矩),比如:
- 相对风险厌恶系数 ( \gamma = 2 )
- 贴现因子 ( \beta = 0.99 )(对应季度数据)
- 消费增长对数均值 ( \mu_c = 0.0025 ),标准差 ( \sigma_c = 0.01 )
- 通胀(( 1+\pi ))对数均值 ( \mu_\pi = 0.001 ),标准差 ( \sigma_\pi = 0.005 )
生成向量/矩阵样本
使用 lognrnd(mu, sigma, m, n) 可直接生成 ( m \times n ) 的对数正态分布矩阵,示例代码:
% 基准参数设定 gamma = 2; beta = 0.99; mu_c = 0.0025; sg_c = 0.01; mu_pi = 0.001; sg_pi = 0.005; % 生成1000个单期样本向量 num_samples = 1000; g_vec = lognrnd(mu_c, sg_c, num_samples, 1); % 消费增长向量 pi_plus_1_vec = lognrnd(mu_pi, sg_pi, num_samples, 1); % 1+通胀率向量 % 生成50期、100条模拟路径的矩阵 T = 50; % 期数 N = 100; % 路径数 g_matrix = lognrnd(mu_c, sg_c, T, N); % T行N列,每列是一条消费增长路径 pi_matrix = lognrnd(mu_pi, sg_pi, T, N); % 计算名义无风险利率 marginal_term = (g_vec).^(-gamma) ./ pi_plus_1_vec; inv_1_plus_i = beta * mean(marginal_term); one_plus_i = 1 / inv_1_plus_i; nominal_rate = one_plus_i - 1; disp(['一期名义无风险利率: ', num2str(nominal_rate*100), '%']);
无参数时的扩展
若需进一步分析,可遍历不同参数组合(如 ( \gamma ) 取1-5,( \sigma_c ) 取0.005-0.02),做敏感性分析观察利率变化。
内容的提问来源于stack exchange,提问作者Expo0

