จำลอง AR(1) Time Series
ในแบบฝึกหัดนี้ จะได้จำลองและพล็อต AR(1) time series หลายรูปแบบ โดยแต่ละรูปแบบมีค่าพารามิเตอร์ \(\small \phi\) ที่แตกต่างกัน โดยใช้โมดูล arima_process จาก statsmodels จะได้ทดลองกับโมเดล AR(1) ที่มีค่า \(\small \phi\) บวกมาก และค่า \(\small \phi\) ลบมาก แต่สามารถทดลองใช้พารามิเตอร์ค่าอื่น ๆ ได้ตามต้องการ
มีข้อตกลงบางประการในการใช้โมดูล arima_process ที่ควรทำความเข้าใจก่อน ประการแรก ฟังก์ชันเหล่านี้ถูกออกแบบมาให้รองรับทั้งโมเดล AR และ MA ดังนั้น ในตอนนี้ให้ละเว้นส่วนของ MA ไปก่อน ประการที่สอง เมื่อระบุค่าสัมประสิทธิ์ ต้องรวมค่าสัมประสิทธิ์ที่ lag-zero ซึ่งมีค่าเป็น 1 เสมอ และเครื่องหมายของสัมประสิทธิ์อื่น ๆ จะตรงข้ามกับที่ใช้ในหนังสือเรียน (เพื่อให้สอดคล้องกับแนวปฏิบัติในวรรณกรรมด้าน signal processing) ตัวอย่างเช่น สำหรับ AR(1) process ที่มี \(\small \phi=0.9\) อาร์เรย์ของพารามิเตอร์ AR จะเขียนเป็น ar = np.array([1, -0.9])
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
การวิเคราะห์อนุกรมเวลาด้วย Python
คำแนะนำการฝึกหัด
- นำเข้าคลาส
ArmaProcessจากโมดูลarima_process - พล็อต AR process ที่จำลองขึ้น:
- ให้
ar1แทนอาร์เรย์ของพารามิเตอร์ AR รูปแบบ [1, \(\small -\phi\)] ตามที่อธิบายไว้ข้างต้น สำหรับพารามิเตอร์ MA ให้ma1มีเพียงค่าสัมประสิทธิ์ที่ lag-zero ซึ่งมีค่าเป็น 1 - สร้าง instance ของคลาส
ArmaProcess(ar,ma)โดยใช้พารามิเตอร์ar1และma1แล้วตั้งชื่อว่าAR_object1 - จำลองข้อมูล 1000 จุดจากออบเจกต์
AR_object1ที่สร้างขึ้น โดยใช้เมธอด.generate_sample()จากนั้นพล็อตข้อมูลที่ได้ในแบบ subplot
- ให้
- ทำซ้ำขั้นตอนเดิมสำหรับพารามิเตอร์ AR ตัวที่สอง
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
# 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()