วิธีการทดสอบ 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

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *