Mô phỏng chuỗi thời gian AR(1)
Bạn sẽ mô phỏng và vẽ một vài chuỗi thời gian AR(1), mỗi chuỗi với một tham số \(\small \phi\) khác nhau, bằng mô-đun arima_process trong statsmodels. Trong bài này, bạn sẽ xem xét mô hình AR(1) với \(\small \phi\) dương lớn và \(\small \phi\) âm lớn; bạn cũng có thể thử các tham số khác theo ý muốn.
Có một vài quy ước khi dùng mô-đun arima_process cần được giải thích. Thứ nhất, các hàm này được thiết kế khá tổng quát để xử lý cả mô hình AR và MA. Chúng ta sẽ học mô hình MA ở phần tiếp theo, nên hiện tại hãy bỏ qua phần MA. Thứ hai, khi nhập các hệ số, bạn phải bao gồm hệ số ở độ trễ 0 bằng 1, và dấu của các hệ số còn lại sẽ ngược với cách chúng ta đã dùng (để nhất quán với tài liệu chuỗi thời gian trong xử lý tín hiệu). Ví dụ, với quá trình AR(1) có \(\small \phi=0.9\), mảng biểu diễn các tham số AR sẽ là ar = np.array([1, -0.9])
Bài tập này là một phần của khóa học
Phân tích chuỗi thời gian với Python
Hướng dẫn bài tập
- Import lớp
ArmaProcesstrong mô-đunarima_process. - Vẽ các quá trình AR được mô phỏng:
- Đặt
ar1là mảng tham số AR [1, \(\small -\phi\)] như đã giải thích ở trên. Tạm thời, mảng tham số MA,ma1, chỉ chứa hệ số ở độ trễ 0 bằng 1. - Với các tham số
ar1vàma1, tạo một thể hiện của lớpArmaProcess(ar,ma)đặt tên làAR_object1. - Mô phỏng 1000 điểm dữ liệu từ đối tượng bạn vừa tạo,
AR_object1, bằng phương thức.generate_sample(). Vẽ dữ liệu mô phỏng trong một subplot.
- Đặt
- Lặp lại cho tham số AR còn lại.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
# import the module for simulating data
from statsmodels.tsa.arima_process import ArmaProcess
# Plot 1: AR parameter = +0.9
plt.subplot(2,1,1)
ar1 = np.array([1, ____])
ma1 = np.array([1])
AR_object1 = ArmaProcess(____, ____)
simulated_data_1 = AR_object1.generate_sample(nsample=1000)
plt.plot(simulated_data_1)
# Plot 2: AR parameter = -0.9
plt.subplot(2,1,2)
ar2 = np.array([1, ____])
ma2 = np.array([1])
AR_object2 = ArmaProcess(____, ____)
simulated_data_2 = AR_object2.generate_sample(nsample=1000)
plt.plot(simulated_data_2)
plt.show()