วิธีการทดสอบ granger causality ใน python
การทดสอบเชิงสาเหตุของเกรนเจอร์ ใช้เพื่อพิจารณาว่าอนุกรมเวลาหนึ่งมีประโยชน์ในการทำนายอนุกรมเวลาอื่นหรือไม่
การทดสอบนี้ใช้สมมติฐานว่างและทางเลือกต่อไปนี้:
สมมติฐานว่าง (H 0 ): อนุกรมเวลา x ไม่ได้ทำให้เกิดอนุกรมเวลา y กับ Granger
สมมติฐานทางเลือก ( HA ): อนุกรมเวลา x อนุกรมเวลาของเกรนเจอร์ทำให้เกิด y
คำว่า “สาเหตุเกรนเจอร์” หมายความว่าการทราบค่าของอนุกรมเวลา x ด้วยความล่าช้าบางอย่างจะเป็นประโยชน์ในการทำนายค่าของอนุกรมเวลา y ในภายหลัง
การทดสอบนี้จะสร้างสถิติการทดสอบ F โดยมี ค่า p ที่สอดคล้องกัน หากค่า p ต่ำกว่า ระดับนัยสำคัญที่กำหนด (เช่น α = 0.05) เราก็สามารถปฏิเสธสมมติฐานว่างและสรุปได้ว่าเรามีหลักฐานเพียงพอที่จะยืนยันว่าอนุกรมเวลา x เกรนเจอร์ทำให้เกิดอนุกรมเวลา y
เราสามารถใช้ฟังก์ชัน grangercausalitytests() จากแพ็คเกจ statsmodels เพื่อทำการทดสอบ Granger-Causality ใน Python:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' column1 ', ' column2 ']], maxlag=[ 3 ])
โปรดทราบว่า maxlag ระบุจำนวนความล่าช้าที่จะใช้ในอนุกรมครั้งแรก
ตัวอย่างทีละขั้นตอนต่อไปนี้แสดงวิธีใช้ฟังก์ชันนี้ในทางปฏิบัติ
ขั้นตอนที่ 1: โหลดข้อมูล
สำหรับตัวอย่างนี้ เราจะใช้ชุดข้อมูลที่ประกอบด้วยค่าจำนวนไข่ที่ผลิตรวมทั้งจำนวนไก่ในสหรัฐอเมริกาตั้งแต่ปี 1930 ถึง 1983:
import pandas as pd #define URL where dataset is located url = "https://raw.githubusercontent.com/Statorials/Miscellaneous/main/chicken_egg.txt" #read in dataset as pandas DataFrame df = pd. read_csv (url, sep=" ") #view first five rows of DataFrame df. head () year chicken egg 0 1930 468491 3581 1 1931 449743 3532 2 1932 436815 3327 3 1933 444523 3255 4 1934 433937 3156
ที่เกี่ยวข้อง: วิธีอ่านไฟล์ CSV ด้วย Pandas
ขั้นตอนที่ 2: ทำการทดสอบสาเหตุของ Granger
ต่อไป เราจะใช้ฟังก์ชัน grangercausalitytests () เพื่อทำการทดสอบ Granger causality เพื่อดูว่าจำนวนไข่ที่ผลิตสามารถทำนายจำนวนแม่ไก่ในอนาคตได้หรือไม่ เราจะทำการทดสอบโดยใช้ออฟเซ็ตสามแบบ:
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' chicken ', ' egg ']], maxlag=[ 3 ]) Granger Causality number of lags (no zero) 3 ssr based F test: F=5.4050, p=0.0030, df_denom=44, df_num=3 ssr based chi2 test: chi2=18.7946, p=0.0003, df=3 likelihood ratio test: chi2=16.0003, p=0.0011, df=3 parameter F test: F=5.4050, p=0.0030, df_denom=44, df_num=3
สถิติการทดสอบ F กลายเป็น 5.405 และค่า p ที่สอดคล้องกันคือ 0.0030
เนื่องจากค่า p น้อยกว่า 0.05 เราจึงสามารถปฏิเสธสมมติฐานว่างของการทดสอบได้ และสรุปได้ว่าการทราบจำนวนไข่จะมีประโยชน์ในการทำนายจำนวนแม่ไก่ในอนาคต
ขั้นตอนที่ 3: ทำการทดสอบ Granger Causality ในแบบย้อนกลับ
แม้ว่าเราจะปฏิเสธสมมติฐานว่างของการทดสอบ แต่ในความเป็นจริงแล้วอาจเป็นไปได้ว่ากรณีของสาเหตุย้อนกลับอาจเกิดขึ้นได้ กล่าวอีกนัยหนึ่งอาจเป็นไปได้ว่าจำนวนแม่ไก่ทำให้จำนวนไข่เปลี่ยนแปลง
เพื่อแยกแยะความเป็นไปได้นี้ เราจำเป็นต้องทำการทดสอบ Granger-Causality ในแบบย้อนกลับ โดยใช้ไก่เป็นตัวแปรทำนาย และใช้ไข่เป็น ตัวแปรตอบสนอง :
from statsmodels. tsa . stattools import grangercausalitytests #perform Granger-Causality test grangercausalitytests(df[[' egg ', ' chicken ']], maxlag=[ 3 ]) Granger Causality number of lags (no zero) 3 ssr based F test: F=0.5916, p=0.6238, df_denom=44, df_num=3 ssr based chi2 test: chi2=2.0572, p=0.5606, df=3 likelihood ratio test: chi2=2.0168, p=0.5689, df=3 parameter F test: F=0.5916, p=0.6238, df_denom=44, df_num=3
สถิติการทดสอบ F กลายเป็น 0.5916 และค่า p ที่สอดคล้องกันคือ 0.6238
เนื่องจากค่า p ไม่น้อยกว่า 0.05 เราจึงไม่สามารถปฏิเสธสมมติฐานว่างได้ กล่าวอีกนัยหนึ่ง จำนวนแม่ไก่ไม่ได้ทำนายจำนวนไข่ในอนาคต
ดังนั้นจึงสามารถสรุปได้ว่าการรู้จำนวนไข่มีประโยชน์ในการทำนายจำนวนแม่ไก่ในอนาคต
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีทำงานทั่วไปอื่นๆ ด้วยอนุกรมเวลาใน Python:
วิธีสร้างพล็อตอนุกรมเวลาใน Seaborn
วิธีสร้างพล็อตอนุกรมเวลาใน Matplotlib