我正在尝试将ARMA模型与时间序列数据相匹配。我没有找到任何可以自动选择参数的功能。下面是我编写的代码,但因为我是Python的初学者,因此我相信这段代码可以进行优化。
有人可以就如何:
给我一些想法非常感谢。
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
答案 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 = ...