วิธีทำการทดสอบ kolmogorov-smirnov ใน python
การทดสอบ Kolmogorov-Smirnov ใช้เพื่อทดสอบว่าตัวอย่างมาจากการกระจายตัวที่แน่นอนหรือไม่
หากต้องการทำการทดสอบ Kolmogorov-Smirnov ใน Python เราสามารถใช้ scipy.stats.kstest() สำหรับการทดสอบแบบหนึ่งตัวอย่างหรือ scipy.stats.ks_2samp() สำหรับการทดสอบแบบสองตัวอย่าง
บทช่วยสอนนี้แสดงตัวอย่างวิธีใช้งานแต่ละฟังก์ชันในทางปฏิบัติ
ตัวอย่างที่ 1: ตัวอย่างการทดสอบ Kolmogorov-Smirnov
สมมติว่าเรามีข้อมูลตัวอย่างต่อไปนี้:
from numpy.random import seed from numpy.random import fish #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 values that follows a Poisson distribution with mean=5 data = fish(5, 100)
รหัสต่อไปนี้แสดงวิธีดำเนินการทดสอบ Kolmogorov-Smirnov กับตัวอย่างค่าข้อมูล 100 ค่านี้เพื่อตรวจสอบว่ามาจากการแจกแจงแบบปกติหรือไม่:
from scipy.stats import kstest #perform Kolmogorov-Smirnov test kstest(data, ' norm ') KstestResult(statistic=0.9072498680518208, pvalue=1.0908062873170218e-103)
จากผลลัพธ์เราจะเห็นว่าสถิติการทดสอบคือ 0.9072 และค่า p ที่สอดคล้องกันคือ 1.0908e-103 เนื่องจากค่า p น้อยกว่า 0.05 เราจึงปฏิเสธสมมติฐานว่าง เรามีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่างไม่ได้มาจากการแจกแจงแบบปกติ
ผลลัพธ์นี้ก็ไม่น่าแปลกใจเนื่องจากเราสร้างข้อมูลตัวอย่างโดยใช้ฟังก์ชัน Poisson() ซึ่งสร้างค่าสุ่มตาม การแจกแจงแบบปัวซอง
ตัวอย่างที่ 2: การทดสอบ Kolmogorov-Smirnov สองตัวอย่าง
สมมติว่าเรามีชุดข้อมูลตัวอย่างสองชุดต่อไปนี้:
from numpy.random import seed from numpy.random import randn from numpy.random import lognormal #set seed (eg make this example reproducible) seed(0) #generate two datasets data1 = randn(100) data2 = lognormal(3, 1, 100)
รหัสต่อไปนี้แสดงวิธีดำเนินการทดสอบ Kolmogorov-Smirnov กับตัวอย่างทั้งสองนี้เพื่อตรวจสอบว่ามาจากการแจกแจงแบบเดียวกันหรือไม่:
from scipy.stats import ks_2samp #perform Kolmogorov-Smirnov test ks_2samp(data1, data2) KstestResult(statistic=0.99, pvalue=4.417521386399011e-57)
จากผลลัพธ์เราจะเห็นว่าสถิติการทดสอบคือ 0.99 และค่า p ที่สอดคล้องกันคือ 4.4175e-57 เนื่องจากค่า p น้อยกว่า 0.05 เราจึงปฏิเสธสมมติฐานว่าง เรามีหลักฐานเพียงพอที่จะบอกว่าชุดข้อมูลตัวอย่างทั้งสองชุดไม่ได้มาจากการแจกแจงแบบเดียวกัน
ผลลัพธ์นี้ไม่น่าแปลกใจเนื่องจากเราสร้างค่าสำหรับตัวอย่างแรกโดยใช้การแจกแจงแบบปกติมาตรฐานและค่าสำหรับตัวอย่างที่สองโดยใช้การแจกแจงแบบล็อกนอร์มอล
แหล่งข้อมูลเพิ่มเติม
วิธีทำการทดสอบ Shapiro-Wilk ใน Python
วิธีทำการทดสอบ Anderson-Darling ใน Python