Maneira correta de usar a função ARMAResult.predict ()

De acordo com esta perguntaComo obter termo constante no AR Model com statsmodels e Python?. Agora estou tentando usar o modelo ARMA para ajustar os dados, mas novamente não consegui encontrar uma maneira de interpretar o resultado do modelo. Aqui o que eu fiz de acordo comPrevisão ARMA fora da amostra com modelos de estatísticas eDocumento da API ARMAResults.predict.

# Parameter

INPUT_DATA_POINT = 200
P = 5
Q = 0

# Read Data

data = []

f = open('stock_all.csv', 'r')
for line in f:
    data.append(float(line.split(',')[5]))
f.close()

# Fit ARMA-model using the first piece of data

result = arma_model(data[:INPUT_DATA_POINT], P, Q)

# Predict using model (fit dimension is len(data) + 1 why?)

fit = result.predict(0, len(data))

# Plot

plt.figure(facecolor='white')
plt.title('ARMA Model Fitted Using ' + str(INPUT_DATA_POINT) + ' Data Points, P=' + str(P) +  ' Q=' + str(Q) + '\n')
plt.plot(data, 'b-', label='data')
plt.plot(range(INPUT_DATA_POINT), result.fittedvalues, 'g--', label='fit')
plt.plot(range(len(data)), fit[:len(data)], 'r-', label='predict')
plt.legend(loc=4)
plt.show()

Aqui o resultado é muito estranho, porque deve ser quase idêntico ao resultado da minha última pergunta, como mencionei no link acima. Também não entendo muito bem por que existem alguns resultados para alguns primeiros pontos de dados, pois isso não deve ser válido (nenhum valor anterior a ser calculado).

Eu tento escrever meu próprio código de previsão que é mostrado abaixo (omitiu a parte superior que é idêntica ao código acima)

# Predict using model

start_pos = max(result.k_ar, result.k_ma)

fit = []
for t in range(start_pos, len(data)):
    value = 0
    for i in range(1, result.k_ar + 1):
        value += result.arparams[i - 1] * data[t - i]
    for i in range(1, result.k_ma + 1):
        value += result.maparams[i - 1] * data[t - i]
    fit.append(value)

# Plot

plt.figure(facecolor='white')
plt.title('ARMA Model Fitted Using ' + str(INPUT_DATA_POINT) + ' Data Points, P=' + str(P) +  ' Q=' + str(Q) + '\n')
plt.plot(data, 'b-', label='data')
plt.plot(range(INPUT_DATA_POINT), result.fittedvalues, 'r+', label='fit')
plt.plot(range(start_pos, len(data)), fit, 'r-', label='predict')
plt.legend(loc=4)
plt.show()

Este é o melhor resultado que obtive

questionAnswers(2)

yourAnswerToTheQuestion