วิธีการทดสอบ shapiro-wilk ใน r (พร้อมตัวอย่าง)


การทดสอบชาปิโร-วิลค์ เป็นการทดสอบภาวะปกติ ใช้เพื่อพิจารณาว่าตัวอย่างมาจาก การแจกแจงแบบปกติ หรือไม่

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

เราสามารถทำการทดสอบ Shapiro-Wilk บนชุดข้อมูลที่กำหนดได้อย่างง่ายดายโดยใช้ฟังก์ชันในตัวต่อไปนี้ใน R:

ชาปิโร.ทดสอบ(x)

ทอง:

  • x: เวกเตอร์ตัวเลขของค่าข้อมูล

ฟังก์ชันนี้สร้างสถิติการทดสอบ W พร้อมกับค่า p ที่สอดคล้องกัน หากค่า p น้อยกว่า α = 0.05 ก็มีหลักฐานเพียงพอที่จะบอกว่ากลุ่มตัวอย่างไม่ได้มาจากประชากรที่มีการกระจายแบบปกติ

หมายเหตุ: ขนาดตัวอย่างต้องอยู่ระหว่าง 3 ถึง 5,000 เพื่อใช้ฟังก์ชัน shapiro.test()

บทช่วยสอนนี้แสดงตัวอย่างการใช้งานฟังก์ชันนี้ในทางปฏิบัติหลายตัวอย่าง

ตัวอย่างที่ 1: การทดสอบชาปิโร-วิลค์กับข้อมูลปกติ

รหัสต่อไปนี้แสดงวิธีดำเนินการทดสอบ Shapiro-Wilk บนชุดข้อมูลที่มีขนาดตัวอย่าง n=100:

 #make this example reproducible
set.seed(0)

#create dataset of 100 random values generated from a normal distribution
data <- rnorm(100)

#perform Shapiro-Wilk test for normality
shapiro.test(data)

	Shapiro-Wilk normality test

data:data
W = 0.98957, p-value = 0.6303

ค่า p ของการทดสอบกลายเป็น 0.6303 . เนื่องจากค่านี้ไม่น้อยกว่า 0.05 เราจึงสามารถสรุปได้ว่าข้อมูลตัวอย่างมาจากประชากรที่มีการกระจายแบบปกติ

ผลลัพธ์นี้ไม่น่าประหลาดใจเนื่องจากเราสร้างข้อมูลตัวอย่างโดยใช้ฟังก์ชัน rnorm() ซึ่งสร้างค่าสุ่มจากการแจกแจงแบบปกติโดยมีค่าเฉลี่ย = 0 และส่วนเบี่ยงเบนมาตรฐาน = 1

ที่เกี่ยวข้อง: คำแนะนำเกี่ยวกับ dnorm, pnorm, qnorm และ rnorm ใน R

นอกจากนี้เรายังสามารถสร้างฮิสโตแกรมเพื่อตรวจสอบด้วยสายตาว่าข้อมูลตัวอย่างมีการกระจายตามปกติ:

 hist(data, col=' steelblue ') 

การทดสอบ Shapiro-Wilk เพื่อความปกติใน R

เราจะเห็นได้ว่าการแจกแจงนั้นค่อนข้างเป็นรูประฆังโดยมียอดอยู่ตรงกลางของการแจกแจง ซึ่งเป็นเรื่องปกติของข้อมูลที่แจกแจงแบบปกติ

ตัวอย่างที่ 2: การทดสอบชาปิโร-วิลค์กับข้อมูลที่ไม่ปกติ

รหัสต่อไปนี้แสดงวิธีดำเนินการทดสอบ Shapiro-Wilk บนชุดข้อมูลที่มีขนาดตัวอย่าง n=100 โดยค่าจะถูกสร้างขึ้นแบบสุ่มจาก การแจกแจงปัวซอง :

 #make this example reproducible
set.seed(0)

#create dataset of 100 random values generated from a Poisson distribution
data <- rpois(n=100, lambda=3)

#perform Shapiro-Wilk test for normality
shapiro.test(data)

	Shapiro-Wilk normality test

data:data
W = 0.94397, p-value = 0.0003393

ค่า p ของการทดสอบกลายเป็น 0.0003393 เนื่องจากค่านี้น้อยกว่า 0.05 เราจึงมีหลักฐานเพียงพอที่จะบอกว่าข้อมูลตัวอย่าง ไม่ได้ มาจากประชากรที่แจกแจงแบบปกติ

ผลลัพธ์นี้ไม่น่าประหลาดใจเนื่องจากเราสร้างข้อมูลตัวอย่างโดยใช้ฟังก์ชัน rpois() ซึ่งสร้างค่าสุ่มจากการแจกแจงแบบปัวซอง

ที่เกี่ยวข้อง: คำแนะนำเกี่ยวกับ dpois, ppois, qpois และ rpois ใน R

นอกจากนี้เรายังสามารถสร้างฮิสโตแกรมเพื่อให้เห็นว่าข้อมูลตัวอย่างไม่ได้กระจายตามปกติ:

 hist(data, col=' coral2 ') 

ฮิสโตแกรมทดสอบชาปิโร-วิลค์ใน R

เราจะเห็นได้ว่าการแจกแจงนั้นเบ้ขวา และไม่มี “รูปทรงระฆัง” ทั่วไปที่เกี่ยวข้องกับการแจกแจงแบบปกติ ดังนั้น ฮิสโตแกรมของเราจึงตรงกับผลลัพธ์ของการทดสอบชาปิโร-วิลค์ และยืนยันว่าข้อมูลตัวอย่างของเราไม่ได้มาจากการแจกแจงแบบปกติ

จะทำอย่างไรกับข้อมูลที่ไม่ปกติ

หากชุดข้อมูลที่กำหนด ไม่ได้ รับการแจกแจงตามปกติ เรามักจะดำเนินการแปลงอย่างใดอย่างหนึ่งต่อไปนี้เพื่อให้เป็นเรื่องปกติมากขึ้นได้:

1. การแปลงบันทึก: แปลงตัวแปรการตอบสนองจาก y เป็น log(y)

2. การแปลงรากที่สอง: แปลงตัวแปรตอบสนองจาก y เป็น √y

3. การแปลงรากที่สาม: แปลงตัวแปรการตอบสนองจาก y เป็น y 1/3

โดยการดำเนินการแปลงเหล่านี้ โดยทั่วไปแล้วตัวแปรการตอบสนองจะประมาณค่าการแจกแจงแบบปกติ

ลองอ่าน บทช่วยสอนนี้ เพื่อดูวิธีดำเนินการแปลงเหล่านี้ในทางปฏิบัติ

แหล่งข้อมูลเพิ่มเติม

วิธีทำการทดสอบ Anderson-Darling ใน R
วิธีทำการทดสอบ Kolmogorov-Smirnov ใน R
วิธีทำการทดสอบ Shapiro-Wilk ใน Python

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

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