วิธีทำการทดสอบ shapiro-wilk ใน python
การทดสอบชาปิโร-วิลค์ เป็นการทดสอบภาวะปกติ ใช้เพื่อพิจารณาว่าตัวอย่างมาจาก การแจกแจงแบบปกติ หรือไม่
ในการทำการทดสอบ Shapiro-Wilk ใน Python เราสามารถใช้ฟังก์ชัน scipy.stats.shapiro() ซึ่งใช้ไวยากรณ์ต่อไปนี้:
scipy.stats.shapiro(x)
ทอง:
- x: ตารางข้อมูลตัวอย่าง
ฟังก์ชันนี้ส่งคืนสถิติการทดสอบและค่า p ที่สอดคล้องกัน
หากค่า p ต่ำกว่าระดับนัยสำคัญที่กำหนด เราก็มีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่างไม่ได้มาจากการแจกแจงแบบปกติ
บทช่วยสอนนี้แสดงตัวอย่างวิธีใช้คุณสมบัตินี้ในทางปฏิบัติ
ตัวอย่างที่ 1: การทดสอบชาปิโร-วิลค์กับข้อมูลที่แจกแจงแบบปกติ
สมมติว่าเรามีข้อมูลตัวอย่างต่อไปนี้:
from numpy.random import seed from numpy.random import randn #set seed (eg make this example reproducible) seed(0) #generate dataset of 100 random values that follow a standard normal distribution data = randn(100)
รหัสต่อไปนี้แสดงวิธีการทดสอบ Shapiro-Wilk กับตัวอย่างค่าข้อมูล 100 ค่านี้เพื่อตรวจสอบว่ามาจากการแจกแจงแบบปกติหรือไม่:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9926937818527222, pvalue=0.8689165711402893)
จากผลลัพธ์เราจะเห็นว่าสถิติการทดสอบคือ 0.9927 และค่า p ที่สอดคล้องกันคือ 0.8689
เนื่องจากค่า p ไม่น้อยกว่า 0.05 เราจึงไม่สามารถปฏิเสธสมมติฐานว่างได้ เราไม่มีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่างไม่ได้มาจากการแจกแจงแบบปกติ
ผลลัพธ์นี้ไม่น่าประหลาดใจเนื่องจากเราสร้างข้อมูลตัวอย่างโดยใช้ฟังก์ชัน randn() ซึ่งสร้างค่าสุ่มที่เป็นไปตามการแจกแจงแบบปกติมาตรฐาน
ตัวอย่างที่ 2: การทดสอบชาปิโร-วิลค์กับข้อมูลที่ไม่กระจายตามปกติ
ตอนนี้ สมมติว่าเรามีข้อมูลตัวอย่างต่อไปนี้:
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)
รหัสต่อไปนี้แสดงวิธีการทดสอบ Shapiro-Wilk กับตัวอย่างค่าข้อมูล 100 ค่านี้เพื่อตรวจสอบว่ามาจากการแจกแจงแบบปกติหรือไม่:
from scipy.stats import shapiro #perform Shapiro-Wilk test shapiro(data) ShapiroResult(statistic=0.9581913948059082, pvalue=0.002994443289935589)
จากผลลัพธ์เราจะเห็นว่าสถิติการทดสอบคือ 0.9582 และค่า p ที่สอดคล้องกันคือ 0.00299
เนื่องจากค่า p น้อยกว่า 0.05 เราจึงปฏิเสธสมมติฐานว่าง เรามีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่างไม่ได้มาจากการแจกแจงแบบปกติ
ผลลัพธ์นี้ก็ไม่น่าแปลกใจเนื่องจากเราสร้างข้อมูลตัวอย่างโดยใช้ฟังก์ชัน Poisson() ซึ่งสร้างค่าสุ่มตาม การแจกแจงแบบปัวซอง
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการทดสอบภาวะปกติอื่นๆ ในซอฟต์แวร์ทางสถิติต่างๆ:
วิธีทำการทดสอบ Shapiro-Wilk ใน R
วิธีทำการทดสอบ Anderson-Darling ใน Python
วิธีทำการทดสอบ Kolmogorov-Smirnov ใน Python