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

如何使用SciPy的least_squares实现ARCH模型参数估计

问题原因与解决方法

你遇到的报错和逻辑偏差主要来自两个问题,对应修正方案如下:

1. 解决参数传递报错

scipy.optimize.least_squares的残差函数第一个参数为待优化的参数向量,其他固定参数需要通过args关键字传入,格式为元组。同时注意bounds参数的格式需要分别指定每个参数的上下界,为([参数1下界, 参数2下界...], [参数1上界, 参数2上界...])。

2. 修正残差函数逻辑对齐Matlab实现

你给出的公式存在笔误,实际Matlab代码实现的是一阶自回归逻辑:用t-1期的对数收益率预测t期的取值,即logR_t = u + theta_1 * logR_{t-1} + \epsilon_t,你的Python初始残差函数直接用当期值计算预测值,和实际逻辑不符。


完整可运行代码

import numpy as np
from scipy.optimize import least_squares

def residuals_ARCH(param, logreturns):
    u = param[0]
    theta1 = param[1]
    # 对齐Matlab逻辑:初始化预测值全为0
    y_hat = np.zeros_like(logreturns)
    # 从第2个样本开始,用前一期收益率计算当期预测值
    y_hat[1:] = u + theta1 * logreturns[:-1]
    # 返回残差,least_squares会自动最小化残差的平方和
    return logreturns - y_hat

# 假设你的对数收益率数据存储在变量logR中
logR = # 替换为你实际的对数收益率数组
guess = [1, 1]
# 传入额外参数logR,指定正确的上下界
result = least_squares(
    residuals_ARCH, 
    x0=guess, 
    args=(logR,), 
    verbose=1, 
    bounds=([-10, -10], [10, 10])
)

# 提取最优参数、残差、误差值,和Matlab输出对齐
ARCH = {}
ARCH['param'] = result.x
ARCH['Residuals'] = residuals_ARCH(result.x, logR)
ARCH['Error'] = np.abs(ARCH['Residuals'])

内容的提问来源于stack exchange,提问作者Angelo Manna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:27:01