Python:自动为ARMA模型选择参数

时间:2015-07-14 09:26:13

标签: python pandas time-series

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

有人可以就如何:

给我一​​些想法
  1. 在双循环上执行矢量化
  2. 更快速地选择参数
  3. 非常感谢。

        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
    

2 个答案:

答案 0 :(得分:1)

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

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

另外,请注意,如果要返回具有可能尝试的最低残差的模型的模型参数,则带有轴=无的np.argmin将返回展平数组的索引:

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

答案 1 :(得分:0)

你可以使用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 = ...