Theo câu hỏi này How to get constant term in AR Model with statsmodels and Python?. Tôi hiện đang cố gắng sử dụng mô hình ARMA để phù hợp với dữ liệu nhưng một lần nữa tôi không thể tìm ra cách để giải thích kết quả của mô hình. Dưới đây là những gì tôi đã thực hiện theo ARMA out-of-sample prediction with statsmodels và ARMAResults.predict API document.Cách đúng để sử dụng hàm ARMAResult.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()
Đây là kết quả rất lạ vì nó gần giống với kết quả từ câu hỏi cuối cùng của tôi như tôi đã đề cập trong liên kết ở trên. Ngoài ra tôi không hoàn toàn hiểu tại sao có một số kết quả cho một vài điểm dữ liệu đầu tiên vì nó không nên hợp lệ (không có giá trị trước đó để tính toán).
tôi cố gắng viết mã dự đoán của riêng tôi mà được hiển thị bên dưới (bỏ qua phần trên giống hệt các mã trên)
# 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()
Đây là kết quả tốt nhất mà tôi đã
Cảm ơn. Có, tôi chỉ muốn một giá trị được trang bị ngoài mẫu. Mã của tôi có đúng là câu lệnh 'value = 0' phải là' value = result.params [0] '? Nếu mã của tôi được sửa, 200 điểm dữ liệu đầu tiên phải bằng với kết quả từ 'result.fittedvalues' phải không? Nhưng trong trường hợp này thì không. Nêu tôi sai vui long chân chỉnh tôi. – PalmRobotZ
Có vẻ như tôi đang bỏ qua hằng số. Xem mã của tôi và nhận xét về giá trị trung bình so với hằng số trong câu hỏi cuối cùng của bạn. – jseabold
Tôi đã thử nhưng không biết làm thế nào để có được thời hạn liên tục. Sử dụng 'value = result.params [0]' thích câu hỏi trước của tôi không hoạt động ở đây. – PalmRobotZ