You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中不借助arch库实现MLE估计Vasicek模型参数?

Vasicek模型极大似然估计(MLE)的Python实现修正

原代码核心问题

  • 似然函数逻辑错误:误将参数b(params[1])作为正态分布标准差,实际应使用$\sigma$(params[2])
  • 数据构造不符合模型定义:data的计算未正确对应Vasicek模型的残差形式
  • 缺失参数约束:Vasicek模型中均值回复系数$a>0$、波动率$\sigma>0$,无约束优化可能得到无意义结果
  • 冗余无效代码:手动计算的mr、dr_mr等未被后续似然函数调用

修正后的实现方案

1. Vasicek模型离散形式说明

Vasicek模型的离散时间表达式为:
$$r_t - r_{t-1} = a(b - r_{t-1}) + \epsilon_t, \quad \epsilon_t \sim \mathcal{N}(0, \sigma^2)$$
其中:

  • $a$:均值回复速率(需大于0)
  • $b$:利率长期均值
  • $\sigma$:波动率(需大于0)

我们需要最大化所有残差$\epsilon_t$的正态对数密度之和,等价于最小化负对数似然函数。

2. 修正后代码

import numpy as np
from scipy.stats import norm
from scipy.optimize import minimize

# 原始利率数据
r = np.array([0.0025, 0.0025, 0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001,
              0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 ,
              0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 , 0.001 ,
              0.001 , 0.001 , 0.0035, 0.0075, 0.0075, 0.0125, 0.02  , 0.02  ,
              0.0275, 0.0325, 0.0325, 0.0375])

# 构造滞后一期利率和利率差分序列
r_lag = r[:-1]  # 对应r_{t-1}
dr = r[1:] - r_lag  # 对应r_t - r_{t-1}

def neg_log_likelihood(params, dr, r_lag):
    a, b, sigma = params
    # 计算Vasicek模型残差
    epsilon = dr - a * (b - r_lag)
    # 返回负对数似然(适配minimize求最小值)
    return -norm.logpdf(epsilon, loc=0, scale=sigma).sum()

# 参数初始值(与Excel Solver保持一致)
initial_guess = [0.2, 0.2, 0.2]

# 添加参数约束:a>0、sigma>0,保证参数经济意义
constraints = (
    {'type': 'ineq', 'fun': lambda x: x[0]},  # a ≥ 0
    {'type': 'ineq', 'fun': lambda x: x[2]}   # sigma ≥ 0
)

# 执行带约束的优化
result = minimize(neg_log_likelihood, initial_guess, args=(dr, r_lag),
                  constraints=constraints, method='SLSQP')

# 输出结果
print("优化结果:")
print(f"均值回复速率a: {result.x[0]:.4f}")
print(f"长期均值b: {result.x[1]:.4f}")
print(f"波动率sigma: {result.x[2]:.4f}")
print(f"负对数似然值: {result.fun:.4f}")
print(f"优化是否成功: {result.success}")

关键优化点

  • 简洁数据构造:直接通过切片生成滞后序列和差分序列,避免原代码中繁琐易出错的删除/插入操作
  • 精准似然计算:严格按照Vasicek模型定义计算残差,使用参数中的sigma作为正态分布标准差
  • 参数约束:通过constraints限制$a$和$\sigma$非负,确保参数符合经济逻辑
  • 稳定优化方法:选用SLSQP方法适配带约束的优化场景,比无约束方法更可靠

内容的提问来源于stack exchange,提问作者Roi Polanitzer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 13:15:24