【问题标题】:Python: Automatically choose parameters for ARMA modelPython:自动为 ARMA 模型选择参数
【发布时间】:2016-02-14 01:41:26
【问题描述】:

我正在尝试将 ARMA 模型拟合到时间序列数据。我还没有找到任何可以自动选择参数的功能。以下是我编写的代码,因为我是 Python 的初学者,因此我相信可以优化此代码。

谁能给我一些关于如何做的想法:

  1. 对双循环进行矢量化
  2. 参数选择的快捷方式

非常感谢。

    parameter_bound = 3

    # Creating a 2-D array, storing the residuals of two different parameters of ARMA model
    residuals = [[0 for x in range(parameter_bound)] for x in range(parameter_bound)]

    model = [[0 for x in range(parameter_bound)] for x in range(parameter_bound)]

    # Calculate residuals for each parameter combinations
    for i in range(parameter_bound):

        for j in range(parameter_bound):

            model[i][j] = sm.tsa.ARMA(input_data, (i,j)).fit()

            residuals[i][j] = sum(abs(model[i][j].resid))

    # Find the parameters with lowest residuals
    parameters = np.argmin(residuals)

    parameter1 = parameters/parameter_bound

    parameter2 = parameters - parameters/parameter_bound*parameter_bound

    # Use the model with lowest residuals to get prediction data
    prediction = model[parameter1][parameter2].resid + input_data

【问题讨论】:

    标签: python pandas time-series


    【解决方案1】:

    我不确定你的期望是什么,但你可以用 numpy 数组替换你的列表(我认为它不会改进你的特定代码):

    import numpy as np
    residuals = np.zeros((parameter_bound, parameter_bound))
    model = np.zeros((parameter_bound, parameter_bound), np.object)
    

    另外,请注意,如果您想返回具有最低残差的模型的模型参数,则带有 axis=None 的 np.argmin 会返回一个扁平数组的索引:

    prediction = model.ravel()[np.argmin(residuals)].resid + input_data
    

    【讨论】:

    • 感谢您的建议!他们很有帮助!
    【解决方案2】:

    您可以使用 Ljung-Box 测试:

    __, pvalue  = sm.diagnostic.acorr_ljungbox(model[i][j].resid)
    # if p-value higher than confidence interval 0.95, reject H
    if pvalue > 0.05:
        use_parameters = ...
    

    【讨论】:

      猜你喜欢
      • 2013-01-21
      • 2018-10-27
      • 2020-11-12
      • 2018-08-23
      • 2018-08-22
      • 1970-01-01
      • 2011-03-26
      • 2023-03-05
      • 2017-05-19
      相关资源
      最近更新 更多