วิธีทำการทดสอบ anderson-darling ใน python


การทดสอบ Anderson-Darling คือการทดสอบความพอดีที่จะวัดว่าข้อมูลของคุณสอดคล้องกับการกระจายที่ระบุได้ดีเพียงใด

การทดสอบนี้มักใช้เพื่อพิจารณาว่าข้อมูลของคุณเป็นไปตาม การแจกแจงแบบปกติ หรือไม่

การทดสอบประเภทนี้มีประโยชน์สำหรับการทดสอบภาวะปกติ ซึ่งเป็นสมมติฐานที่ใช้กันทั่วไปในการทดสอบทางสถิติหลายอย่าง รวมถึง การถดถอย การวิเคราะห์ ความแปรปรวน การทดสอบที และอื่นๆ อีกมากมาย

ตัวอย่าง: การทดสอบ Anderson-Darling ใน Python

ในการทำการทดสอบ Anderson-Darling ใน Python เราสามารถใช้ ฟังก์ชัน anderson() จากไลบรารี scipy.stats ซึ่งใช้ไวยากรณ์ต่อไปนี้:

แอนเดอร์สัน(x, dist=’norm’)

ทอง:

  • x : ตารางข้อมูลตัวอย่าง
  • dist : ประเภทของการกระจายที่จะทดสอบ ค่าเริ่มต้นคือ “มาตรฐาน” แต่คุณสามารถระบุ “expon” หรือ “logistics” ได้เช่นกัน

ตัวอย่างเช่น ต่อไปนี้เป็นวิธีดำเนินการทดสอบ Anderson-Darling กับตัวอย่างที่มีตัวแปรสุ่มแบบกระจายแบบปกติ 50 ตัว:

 import numpy as np

#create data
np.random.seed(0)
data = np.random.normal(size=50)

#perform Anderson-Darling Test 
from scipy.stats import anderson
anderson(data)

AndersonResult( statistic =0.15006999533388665,
               critical_values =array([0.538, 0.613, 0.736, 0.858, 1.021]),
               significance_level =array([15. , 10. , 5. , 2.5, 1. ]))

สถิติการทดสอบคือ 0.150 เราสามารถเปรียบเทียบค่านี้กับค่าวิกฤตแต่ละค่าที่สอดคล้องกับระดับนัยสำคัญแต่ละระดับเพื่อดูว่าผลการทดสอบมีนัยสำคัญหรือไม่ ตัวอย่างเช่น:

  • ค่าวิกฤตสำหรับ α = 0.01 คือ 1.021 เนื่องจากสถิติการทดสอบ (0.150) ไม่มากกว่าค่าวิกฤตนี้ ผลลัพธ์จึงไม่มีนัยสำคัญที่ระดับนัยสำคัญ 0.01
  • ค่าวิกฤตสำหรับ α = 0.025 คือ 0.858 เนื่องจากสถิติการทดสอบ (0.150) ไม่มากกว่าค่าวิกฤตนี้ ผลลัพธ์จึงไม่มีนัยสำคัญที่ระดับนัยสำคัญ 0.025

และอื่นๆ

เราจะเห็นว่าผลการทดสอบไม่มีนัยสำคัญในระดับนัยสำคัญใดๆ ซึ่งหมายความว่าเราจะไม่ปฏิเสธสมมติฐานว่างของการทดสอบ ดังนั้นเราจึงไม่มีหลักฐานเพียงพอที่จะอ้างว่าข้อมูลตัวอย่างไม่ได้กระจายตามปกติ

ผลลัพธ์นี้ไม่ควรน่าแปลกใจเนื่องจากเราใช้ฟังก์ชัน np.rand.normal() เพื่อสร้างตัวอย่างค่าที่แจกแจงแบบปกติ 50 ค่า

ให้พิจารณาว่าเราทำการทดสอบแอนเดอร์สัน-ดาร์ลิ่งกับตัวอย่างจำนวนเต็มสุ่ม 50 จำนวนระหว่าง 0 ถึง 10 หรือไม่:

 import numpy as np

#create data
np.random.seed(0)
data = np.random.randint(0, 10, size=50)

#perform Anderson-Darling Test 
from scipy.stats import anderson
anderson(data)

AndersonResult( statistic =1.1926463985076836,
               critical_values =array([0.538, 0.613, 0.736, 0.858, 1.021]),
               significance_level =array([15. , 10. , 5. , 2.5, 1. ]))

สถิติการทดสอบคือ 1.1926 เราสามารถเปรียบเทียบค่านี้กับค่าวิกฤตแต่ละค่าที่สอดคล้องกับระดับนัยสำคัญแต่ละระดับเพื่อดูว่าผลการทดสอบมีนัยสำคัญหรือไม่ ตัวอย่างเช่น:

  • ค่าวิกฤตสำหรับ α = 0.01 คือ 1.021 เนื่องจากสถิติการทดสอบ (1.1926) มากกว่าค่าวิกฤตนี้ ผลลัพธ์จึงมีนัยสำคัญที่ระดับนัยสำคัญ 0.01
  • ค่าวิกฤตสำหรับ α = 0.025 คือ 0.858 เนื่องจากสถิติการทดสอบ (1.1926) มากกว่าค่าวิกฤตนี้ ผลลัพธ์จึงมีนัยสำคัญที่ระดับนัยสำคัญ 0.025

และอื่นๆ

เราจะเห็นว่าผลการทดสอบมีนัยสำคัญในแต่ละระดับนัยสำคัญ ซึ่งหมายความว่าเราจะปฏิเสธสมมติฐานว่างของการทดสอบไม่ว่าเราจะเลือกใช้ระดับนัยสำคัญใดก็ตาม ดังนั้นเราจึงมีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่างไม่ได้กระจายตามปกติ

ผลลัพธ์นี้ก็ไม่น่าแปลกใจเช่นกัน เนื่องจากเราใช้ฟังก์ชัน np.rand.randint() เพื่อสร้างตัวอย่างจำนวนเต็มสุ่ม 50 จำนวนระหว่าง 0 ถึง 10 ซึ่งไม่น่าจะเป็นไปตามการแจกแจงแบบปกติ

คุณสามารถค้นหาบทช่วยสอน Python เพิ่มเติมได้ ที่นี่

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

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