การเปรียบเทียบหลายกลุ่มทำได้ง่ายเมื่อข้อมูลมีการแจกแจงแบบปกติ ปัญหาคือ ข้อมูลในโลกความเป็นจริงส่วนใหญ่ไม่ได้เป็นเช่นนั้น
หากใช้ ANOVA เป็นค่าเริ่มต้น คุณอาจสรุปผิดพลาดได้ เพราะ ANOVA สมมติว่าข้อมูลมีการแจกแจงแบบปกติ เมื่อไม่เป็นไปตามนั้น — นึกถึงข้อมูลที่มีการเบ้หรือขนาดตัวอย่างเล็ก — จำเป็นต้องใช้วิธีอื่น
การทดสอบ Kruskal-Wallis คือวิธีทางเลือกนั้น เป็นทางเลือกแบบนอนพาราเมตริกของ ANOVA และทำงานกับลำดับอันดับ (ranks) แทนค่าดิบ ดังนั้นจึงไม่ต้องอาศัยการแจกแจงแบบปกติ
บทความนี้จะครอบคลุมแนวคิด คณิตศาสตร์เบื้องหลัง วิธีรันด้วย Python และ R และวิธีตีความผลลัพธ์
การทดสอบ Kruskal-Wallis คืออะไร?
การทดสอบ Kruskal-Wallis เป็นวิธีแบบนอนพาราเมตริกสำหรับเปรียบเทียบสามกลุ่มขึ้นไปที่เป็นอิสระต่อกัน โดยจะแปลงการสังเกตทั้งหมดเป็นอันดับ แล้วเปรียบเทียบอันดับเหล่านั้นระหว่างกลุ่มแทนการใช้ค่าดิบ
อาจมองว่าเป็นการขยายของ การทดสอบ Mann-Whitney U ซึ่งผู้เขียนเคยอธิบายไว้แล้ว
Mann-Whitney U ทำการเปรียบเทียบแบบใช้ลำดับอันดับเช่นเดียวกัน แต่ใช้ได้กับสองกลุ่มเท่านั้น Kruskal-Wallis ขยายไปยังสามกลุ่มขึ้นไป ดังนั้นเมื่อมีหลายกลุ่มและใช้ ANOVA ไม่ได้ ก็ควรใช้วิธีนี้
เพราะทำงานกับอันดับแทนค่าดิบ จึงไม่สมมติว่าข้อมูลมีการแจกแจงแบบใดแบบหนึ่ง นั่นทำให้มีประโยชน์กับข้อมูลในโลกจริงที่มักไม่เป็นไปตามการแจกแจงเดียวอย่างสมบูรณ์
ควรใช้การทดสอบ Kruskal-Wallis เมื่อใด
การทดสอบ Kruskal-Wallis เหมาะอย่างยิ่งเมื่อกำลังจัดการกับ:
สามกลุ่มหรือมากกว่าที่เป็นอิสระจากกัน และต้องการเปรียบเทียบ
ข้อมูลแบบอันดับหรือแบบต่อเนื่อง เช่น ค่าประเมินแบบ Likert หรือข้อมูลการวัด
การแจกแจงที่ไม่เป็นปกติ ด้วยข้อมูลที่เบ้ ค่าผิดปกติ ตัวอย่างเล็ก หรือกรณีอื่นที่ ANOVA จัดการไม่ได้
ขนาดตัวอย่างเล็ก ที่ยากจะตรวจสอบความเป็นปกติ
ตัวอย่างง่าย ๆ มีดังนี้
สมมติว่าต้องการเปรียบเทียบคะแนนสอบระหว่างสามห้องเรียน คะแนนมีการเบ้และตัวอย่างเล็ก จึงไม่เหมาะกับ ANOVA การทดสอบ Kruskal-Wallis ไม่ต้องการความเป็นปกติ จึงใช้ได้ในกรณีนี้ มันจะบอกได้ว่าอย่างน้อยหนึ่งห้องมีคะแนนต่างจากห้องอื่น โดยไม่ต้องตั้งสมมติฐานที่ข้อมูลรองรับไม่ได้
Kruskal-Wallis เทียบกับ ANOVA
ทั้งสองการทดสอบเปรียบเทียบกลุ่ม แต่ทำงานต่างกัน
ANOVA เปรียบเทียบ ค่าเฉลี่ย ของกลุ่ม และสมมติว่าข้อมูลมีการแจกแจงแบบปกติและมีความแปรปรวนใกล้เคียงกัน เมื่อสมมติฐานเหล่านี้เป็นจริง ANOVA จะดีกว่า — มีอำนาจทางสถิติสูงกว่าและผลลัพธ์ตีความได้ง่ายกว่า
Kruskal-Wallis เปรียบเทียบ การแจกแจง ของกลุ่มโดยใช้อันดับ ไม่สนใจความเป็นปกติหรือความแปรปรวนเท่ากัน จึงยืดหยุ่นกว่า แต่ต้องแลกด้วยอำนาจทางสถิติที่ลดลงบ้าง
ตารางเปรียบเทียบโดยย่อมีดังนี้:
ANOVA เทียบกับการทดสอบ Kruskal-Wallis
ถ้าข้อมูลมีการแจกแจงแบบปกติ ให้ใช้ ANOVA ถ้าไม่ใช่ — หรือไม่สามารถยืนยันได้ — ให้ใช้ Kruskal-Wallis
สูตรของการทดสอบ Kruskal-Wallis
การทดสอบ Kruskal-Wallis สรุปเป็นสถิติการทดสอบเดียวคือ H โดยมีสูตรดังนี้:
สูตร Kruskal-Wallis
คำอธิบายองค์ประกอบมีดังนี้:
N - จำนวนการสังเกตทั้งหมดจากทุกกลุ่ม
k - จำนวนกลุ่ม
n_i - จำนวนการสังเกตในกลุ่มที่ i
R_i - ผลรวมอันดับของกลุ่มที่ i
สูตรนี้วัดว่าผลรวมอันดับของแต่ละกลุ่มเบี่ยงเบนจากค่าที่คาดว่าจะเป็น หากทุกกลุ่มเหมือนกันมากน้อยเพียงใด ค่า H ขนาดใหญ่หมายถึงกลุ่มต่างกัน ขนาดเล็กหมายถึงกลุ่มไม่ได้ต่างกันมาก
เมื่อได้ค่า H แล้ว ให้นำไปเปรียบเทียบกับการแจกแจงไคสแควร์ที่มีองศาเสรี k - 1 เพื่อหาค่า p-value
การทำงานของการทดสอบ Kruskal-Wallis
มีสี่ขั้นตอนในการทำการทดสอบ Kruskal-Wallis:
รวมทุกกลุ่ม: นำการสังเกตจากทุกกลุ่มมารวมกันเป็นชุดข้อมูลเดียว
จัดอันดับการสังเกตทั้งหมด: เรียงข้อมูลรวมจากน้อยไปมากและกำหนดอันดับ ค่าที่น้อยที่สุดได้อันดับ 1 ถัดไปอันดับ 2 และต่อไปเรื่อย ๆ หากมีค่าสองค่าเท่ากัน ให้ใช้อันดับเฉลี่ยของตำแหน่งที่ควรได้
คำนวณผลรวมอันดับ: แยกอันดับกลับไปยังกลุ่มเดิม บวกอันดับของแต่ละกลุ่ม นี่คือผลรวมอันดับของคุณ — R_i ในสูตร
คำนวณค่าสถิติการทดสอบ: ใส่ผลรวมอันดับลงในสูตร H หากกลุ่มคล้ายกัน ผลรวมอันดับจะใกล้เคียงกันและค่า H จะมีค่าน้อย หากมีกลุ่มหนึ่งได้อันดับสูงหรือต่ำกว่าอย่างสม่ำเสมอ ค่า H จะเพิ่มขึ้น
เพียงเท่านี้เอง!
จะเห็นว่าการทดสอบไม่สนใจค่าจริง แต่สนใจเพียงตำแหน่งสัมพัทธ์เมื่อเทียบกับค่าทั้งหมด
การทดสอบ Kruskal-Wallis ใน Python
ไลบรารี scipy ของ Python มีฟังก์ชันสำเร็จรูปสำหรับการทดสอบ Kruskal-Wallis จึงไม่ต้องลงมือคำนวณสูตรเอง มาดูตัวอย่างกัน
สมมติว่ากำลังเปรียบเทียบคะแนนสอบระหว่างสามห้องเรียน วิธีรันการทดสอบมีดังนี้:
from scipy import stats
class_a = [ 78 , 85 , 90 , 72 , 88 ]
class_b = [ 65 , 70 , 68 , 74 , 60 ]
class_c = [ 88 , 92 , 95 , 85 , 91 ]
statistic, p_value = stats. kruskal( class_a, class_b, class_c)
print ( f"H statistic: { statistic: .4f } " )
print ( f"P-value: { p_value: .4f } " ) ขับเคลื่อนโดย
ผลลัพธ์ Python
ค่า p-value ต่ำกว่า 0.05 ซึ่งหมายความว่าอย่างน้อยหนึ่งห้องมีคะแนนต่างจากห้องอื่น โปรดจำไว้ว่าการทดสอบนี้จะไม่บอกว่าห้องใดต่าง — ต้องใช้การทดสอบหลังการวิเคราะห์ (post hoc) ซึ่งจะกล่าวถึงในหัวข้อถัดไป
การทดสอบ Kruskal-Wallis ใน R
เช่นเดียวกับ Python, R ก็มีฟังก์ชันสำเร็จรูปสำหรับการทดสอบนี้ ใช้สถานการณ์คะแนนสอบเดิม
class_a <- c( 78 , 85 , 90 , 72 , 88 )
class_b <- c( 65 , 70 , 68 , 74 , 60 )
class_c <- c( 88 , 92 , 95 , 85 , 91 )
scores <- c( class_a, class_b, class_c)
groups <- factor( rep( c( "A" , "B" , "C" ) , each = 5 ) )
kruskal.test( scores ~ groups) ขับเคลื่อนโดย
ผลลัพธ์ R
ผลลัพธ์เหมือนกับที่ได้ใน Python — ค่า H และ p-value เท่ากัน เมื่อ p < 0.05 ให้ปฏิเสธสมมติฐานว่างและสรุปว่าอย่างน้อยหนึ่งกลุ่มแตกต่าง
วิธีตีความผลการทดสอบ Kruskal-Wallis
สมมติฐานว่างของการทดสอบ Kruskal-Wallis คือทุกกลุ่มมีการแจกแจงเดียวกัน ค่า p-value จะบอกว่าควรปฏิเสธหรือไม่ ต่อไปนี้คือแนวทางตีความ:
p < 0.05: อย่างน้อยหนึ่งกลุ่มต่างจากกลุ่มอื่น ๆ ให้ปฏิเสธสมมติฐานว่าง
p >= 0.05: ไม่มีหลักฐานชัดเจนว่ากลุ่มต่างกัน จึงไม่ปฏิเสธสมมติฐานว่าง
เกณฑ์ 0.05 เป็นธรรมเนียม ปรับเข้มงวดเป็น 0.01 หรือผ่อนคลายเป็น 0.10 ได้ตามสาขาหรือความสำคัญของการวิเคราะห์
โปรดทราบว่าการทดสอบนี้จะไม่บอกว่ากลุ่มใดต่าง ผลลัพธ์ที่มีนัยสำคัญเพียงชี้ว่ากลุ่มไม่เหมือนกันทั้งหมด ทราบว่าเกิดความต่าง แต่ยังไม่รู้ว่าที่ใด เพื่อหาว่าคู่ใดเป็นตัวขับความแตกต่าง จำเป็นต้องใช้การทดสอบหลังการวิเคราะห์
การทดสอบ Post Hoc หลัง Kruskal-Wallis
การทดสอบบอกว่าอย่างน้อยหนึ่งกลุ่มต่าง แต่ไม่บอกว่ากลุ่มใดต่าง หากมีสามกลุ่มและ p < 0.05 อาจเป็น A เทียบ B, A เทียบ C, B เทียบ C หรือหลายคู่รวมกัน จำเป็นต้องทำการทดสอบหลังการวิเคราะห์เพื่อได้การเปรียบเทียบแบบจับคู่
การทดสอบของ Dunn เป็นตัวเลือกที่ใช้บ่อยที่สุด จะทำการเปรียบเทียบแบบจับคู่ระหว่างทุกกลุ่มและปรับค่า p เพื่อลดโอกาสบวกลวง หากไม่มีการปรับ ยิ่งเปรียบเทียบหลายคู่ ยิ่งเสี่ยงพบผล "มีนัยสำคัญ" โดยบังเอิญ
การทดสอบของ Dunn ใน Python
ต้องใช้ไลบรารี scikit_posthocs หากยังไม่มี ให้ติดตั้งด้วย pip install scikit-posthocs.
จากนั้นการคำนวณก็ง่ายมาก:
import scikit_posthocs as sp
import pandas as pd
class_a = [ 78 , 85 , 90 , 72 , 88 ]
class_b = [ 65 , 70 , 68 , 74 , 60 ]
class_c = [ 88 , 92 , 95 , 85 , 91 ]
scores = class_a + class_b + class_c
groups = [ "A" ] * 5 + [ "B" ] * 5 + [ "C" ] * 5
df = pd. DataFrame( { "score" : scores, "group" : groups} )
result = sp. posthoc_dunn( df, val_col= "score" , group_col= "group" , p_adjust= "bonferroni" )
print ( result) ขับเคลื่อนโดย
การทดสอบของ Dunn ใน Python
แต่ละช่องแสดงค่า p ที่ปรับแล้วของคู่นั้น ๆ ที่นี่เฉพาะ B เทียบ C (p = 0.004) ที่ต่ำกว่าเกณฑ์ 0.05 จึงแตกต่างกัน ส่วน A เทียบ B (p = 0.167) และ A เทียบ C (p = 0.607) ไม่แตกต่าง หมายความว่าห้อง A ไม่ได้ต่างเชิงสถิติกับอีกสองห้อง
การทดสอบของ Dunn ใน R
เริ่มต้นด้วยการติดตั้งไลบรารีเมื่อจำเป็นด้วยคำสั่ง install.packages("dunn.test"):
library( dunn.test)
class_a <- c( 78 , 85 , 90 , 72 , 88 )
class_b <- c( 65 , 70 , 68 , 74 , 60 )
class_c <- c( 88 , 92 , 95 , 85 , 91 )
scores <- c( class_a, class_b, class_c)
groups <- factor( rep( c( "A" , "B" , "C" ) , each = 5 ) )
dunn.test( scores, groups, method = "bonferroni" ) ขับเคลื่อนโดย
การทดสอบของ Dunn ใน R
ผลสอดคล้องกับ Python ตามคาด มีเฉพาะ B เทียบ C ที่มีนัยสำคัญ ขณะที่ A เทียบ B และ A เทียบ C ไม่มี ห้อง B และห้อง C คือคู่ที่อยู่เบื้องหลังความแตกต่างที่ Kruskal-Wallis ตรวจพบ
สมมติฐานของการทดสอบ Kruskal-Wallis
Kruskal-Wallis ยืดหยุ่นกว่า ANOVA แต่ยังมีสมมติฐาน 3 ข้อที่ควรตรวจสอบก่อนใช้งาน:
ตัวอย่างเป็นอิสระต่อกัน: การสังเกตในกลุ่มหนึ่งไม่ส่งอิทธิพลต่ออีกกลุ่ม หากข้อมูลเป็นแบบจับคู่หรือวัดซ้ำ การทดสอบนี้ไม่เหมาะ
ข้อมูลแบบอันดับหรือแบบต่อเนื่อง: ต้องเป็นข้อมูลที่จัดอันดับได้ หมวดหมู่เชิงนามธรรม (เช่น สีหรือฉลาก) จัดอันดับไม่ได้ จึงใช้ไม่ได้ที่นี่
รูปทรงการแจกแจงใกล้เคียงกัน: หากต้องการตีความว่าเป็นการเปรียบเทียบค่ามัธยฐานแทนที่จะเป็นการแจกแจงโดยรวม รูปร่างของการแจกแจงระหว่างกลุ่มควรใกล้เคียงกัน หากต่างกันมาก ยังเปรียบเทียบการแจกแจงได้ แต่การตีความเชิงมัธยฐานจะใช้ไม่ได้
หากละเมิดสองข้อแรก ผลการทดสอบจะไม่ถูกต้อง ข้อที่สามยืดหยุ่นกว่า เพราะมีผลต่อการตีความ ไม่ได้ห้ามการรันทดสอบ
เมื่อไม่ควรใช้การทดสอบ Kruskal-Wallis
มีสามกรณีที่ควรใช้การทดสอบอื่นแทน:
ข้อมูลเป็นแบบจับคู่หรือวัดซ้ำ: หากมีผู้เข้าร่วมคนเดิมปรากฏในหลายกลุ่ม ให้ใช้การทดสอบ Friedman แทน ซึ่งเป็นแบบนอนพาราเมตริกสำหรับตัวอย่างที่พึ่งพากัน การใช้ Kruskal-Wallis กับข้อมูลจับคู่จะเมินความสัมพันธ์ของการสังเกตและอาจสรุปผิด
ข้อมูลเป็นไปตามสมมติฐานของ ANOVA: ถ้าข้อมูลแจกแจงแบบปกติและมีความแปรปรวนใกล้เคียงกัน ANOVA จะดีกว่า มีอำนาจทางสถิติมากกว่า จึงตรวจจับความแตกต่างจริงได้ดีกว่าเมื่อมีอยู่
ขนาดตัวอย่างใหญ่: เมื่อมีตัวอย่างจำนวนมาก วิธีแบบพาราเมตริกมักใช้ได้ดีแม้ข้อมูลไม่ปกติสมบูรณ์ กฎขีดจำกัดส่วนกลางช่วยไว้ และ ANOVA จะให้ผลที่เชื่อถือได้กว่าวิธีใช้อันดับ หากทำงานกับหลายร้อยหรือหลายพันตัวอย่างต่อกลุ่ม Kruskal-Wallis ไม่ใช่ตัวเลือกที่เหมาะ
สรุป
การทดสอบ Kruskal-Wallis ใช้เปรียบเทียบสามกลุ่มขึ้นไปที่เป็นอิสระต่อกันเมื่อข้อมูลไม่เป็นไปตามการแจกแจงแบบปกติที่การทดสอบอย่าง ANOVA ต้องการ ทำได้เพราะทำงานกับอันดับแทนค่าดิบ
อย่างไรก็ตาม มันไม่ได้มาแทนที่ ANOVA หากข้อมูลเป็นปกติ ANOVA จะดีกว่าเพราะมีนัยสำคัญทางสถิติมากกว่า ในทางกลับกัน หากข้อมูลเป็นแบบจับคู่ ให้ใช้การทดสอบ Friedman เช่นเคย การเลือกการทดสอบที่ถูกต้องขึ้นอยู่กับข้อมูล
เมื่อเงื่อนไขเหมาะสม การทดสอบ Kruskal-Wallis เป็นตัวเลือกที่เชื่อถือได้และตรงไปตรงมา เพียงรันทดสอบ ตรวจสอบค่า p และทำการทดสอบของ Dunn ต่อ หากต้องการทราบว่ากลุ่มใดอยู่เบื้องหลังความแตกต่าง
ความรู้สถิติเริ่มฝืดหรือไม่? เรียนคอร์ส Introduction to Statistics ของเรา แล้วกลับมาแม่นอีกครั้งได้ในบ่ายเดียว
การเปรียบเทียบหลายกลุ่มทำได้ง่ายเมื่อข้อมูลมีการแจกแจงแบบปกติ ปัญหาคือ ข้อมูลในโลกความเป็นจริงส่วนใหญ่ไม่ได้เป็นเช่นนั้น
หากใช้ ANOVA เป็นค่าเริ่มต้น คุณอาจสรุปผิดพลาดได้ เพราะ ANOVA สมมติว่าข้อมูลมีการแจกแจงแบบปกติ เมื่อไม่เป็นไปตามนั้น — นึกถึงข้อมูลที่มีการเบ้หรือขนาดตัวอย่างเล็ก — จำเป็นต้องใช้วิธีอื่น
การทดสอบ Kruskal-Wallis คือวิธีทางเลือกนั้น เป็นทางเลือกแบบนอนพาราเมตริกของ ANOVA และทำงานกับลำดับอันดับ (ranks) แทนค่าดิบ ดังนั้นจึงไม่ต้องอาศัยการแจกแจงแบบปกติ
บทความนี้จะครอบคลุมแนวคิด คณิตศาสตร์เบื้องหลัง วิธีรันด้วย Python และ R และวิธีตีความผลลัพธ์
การทดสอบ Kruskal-Wallis คืออะไร?
การทดสอบ Kruskal-Wallis เป็นวิธีแบบนอนพาราเมตริกสำหรับเปรียบเทียบสามกลุ่มขึ้นไปที่เป็นอิสระต่อกัน โดยจะแปลงการสังเกตทั้งหมดเป็นอันดับ แล้วเปรียบเทียบอันดับเหล่านั้นระหว่างกลุ่มแทนการใช้ค่าดิบ
อาจมองว่าเป็นการขยายของ การทดสอบ Mann-Whitney U ซึ่งผู้เขียนเคยอธิบายไว้แล้ว
Mann-Whitney U ทำการเปรียบเทียบแบบใช้ลำดับอันดับเช่นเดียวกัน แต่ใช้ได้กับสองกลุ่มเท่านั้น Kruskal-Wallis ขยายไปยังสามกลุ่มขึ้นไป ดังนั้นเมื่อมีหลายกลุ่มและใช้ ANOVA ไม่ได้ ก็ควรใช้วิธีนี้
เพราะทำงานกับอันดับแทนค่าดิบ จึงไม่สมมติว่าข้อมูลมีการแจกแจงแบบใดแบบหนึ่ง นั่นทำให้มีประโยชน์กับข้อมูลในโลกจริงที่มักไม่เป็นไปตามการแจกแจงเดียวอย่างสมบูรณ์
ควรใช้การทดสอบ Kruskal-Wallis เมื่อใด
การทดสอบ Kruskal-Wallis เหมาะอย่างยิ่งเมื่อกำลังจัดการกับ:
ตัวอย่างง่าย ๆ มีดังนี้
สมมติว่าต้องการเปรียบเทียบคะแนนสอบระหว่างสามห้องเรียน คะแนนมีการเบ้และตัวอย่างเล็ก จึงไม่เหมาะกับ ANOVA การทดสอบ Kruskal-Wallis ไม่ต้องการความเป็นปกติ จึงใช้ได้ในกรณีนี้ มันจะบอกได้ว่าอย่างน้อยหนึ่งห้องมีคะแนนต่างจากห้องอื่น โดยไม่ต้องตั้งสมมติฐานที่ข้อมูลรองรับไม่ได้
Kruskal-Wallis เทียบกับ ANOVA
ทั้งสองการทดสอบเปรียบเทียบกลุ่ม แต่ทำงานต่างกัน
ANOVA เปรียบเทียบค่าเฉลี่ยของกลุ่ม และสมมติว่าข้อมูลมีการแจกแจงแบบปกติและมีความแปรปรวนใกล้เคียงกัน เมื่อสมมติฐานเหล่านี้เป็นจริง ANOVA จะดีกว่า — มีอำนาจทางสถิติสูงกว่าและผลลัพธ์ตีความได้ง่ายกว่า
Kruskal-Wallis เปรียบเทียบการแจกแจงของกลุ่มโดยใช้อันดับ ไม่สนใจความเป็นปกติหรือความแปรปรวนเท่ากัน จึงยืดหยุ่นกว่า แต่ต้องแลกด้วยอำนาจทางสถิติที่ลดลงบ้าง
ตารางเปรียบเทียบโดยย่อมีดังนี้:
ANOVA เทียบกับการทดสอบ Kruskal-Wallis
ถ้าข้อมูลมีการแจกแจงแบบปกติ ให้ใช้ ANOVA ถ้าไม่ใช่ — หรือไม่สามารถยืนยันได้ — ให้ใช้ Kruskal-Wallis
สูตรของการทดสอบ Kruskal-Wallis
การทดสอบ Kruskal-Wallis สรุปเป็นสถิติการทดสอบเดียวคือ
Hโดยมีสูตรดังนี้:สูตร Kruskal-Wallis
คำอธิบายองค์ประกอบมีดังนี้:
N- จำนวนการสังเกตทั้งหมดจากทุกกลุ่มk- จำนวนกลุ่มn_i- จำนวนการสังเกตในกลุ่มที่iR_i- ผลรวมอันดับของกลุ่มที่iสูตรนี้วัดว่าผลรวมอันดับของแต่ละกลุ่มเบี่ยงเบนจากค่าที่คาดว่าจะเป็น หากทุกกลุ่มเหมือนกันมากน้อยเพียงใด ค่าH ขนาดใหญ่หมายถึงกลุ่มต่างกัน ขนาดเล็กหมายถึงกลุ่มไม่ได้ต่างกันมาก
เมื่อได้ค่า
Hแล้ว ให้นำไปเปรียบเทียบกับการแจกแจงไคสแควร์ที่มีองศาเสรีk - 1เพื่อหาค่า p-valueการทำงานของการทดสอบ Kruskal-Wallis
มีสี่ขั้นตอนในการทำการทดสอบ Kruskal-Wallis:
R_iในสูตรHหากกลุ่มคล้ายกัน ผลรวมอันดับจะใกล้เคียงกันและค่าHจะมีค่าน้อย หากมีกลุ่มหนึ่งได้อันดับสูงหรือต่ำกว่าอย่างสม่ำเสมอ ค่าHจะเพิ่มขึ้นเพียงเท่านี้เอง!
จะเห็นว่าการทดสอบไม่สนใจค่าจริง แต่สนใจเพียงตำแหน่งสัมพัทธ์เมื่อเทียบกับค่าทั้งหมด
การทดสอบ Kruskal-Wallis ใน Python
ไลบรารี
scipyของ Python มีฟังก์ชันสำเร็จรูปสำหรับการทดสอบ Kruskal-Wallis จึงไม่ต้องลงมือคำนวณสูตรเอง มาดูตัวอย่างกันสมมติว่ากำลังเปรียบเทียบคะแนนสอบระหว่างสามห้องเรียน วิธีรันการทดสอบมีดังนี้:
ผลลัพธ์ Python
ค่า p-value ต่ำกว่า 0.05 ซึ่งหมายความว่าอย่างน้อยหนึ่งห้องมีคะแนนต่างจากห้องอื่น โปรดจำไว้ว่าการทดสอบนี้จะไม่บอกว่าห้องใดต่าง — ต้องใช้การทดสอบหลังการวิเคราะห์ (post hoc) ซึ่งจะกล่าวถึงในหัวข้อถัดไป
การทดสอบ Kruskal-Wallis ใน R
เช่นเดียวกับ Python, R ก็มีฟังก์ชันสำเร็จรูปสำหรับการทดสอบนี้ ใช้สถานการณ์คะแนนสอบเดิม
ผลลัพธ์ R
ผลลัพธ์เหมือนกับที่ได้ใน Python — ค่า
Hและ p-value เท่ากัน เมื่อ p < 0.05 ให้ปฏิเสธสมมติฐานว่างและสรุปว่าอย่างน้อยหนึ่งกลุ่มแตกต่างวิธีตีความผลการทดสอบ Kruskal-Wallis
สมมติฐานว่างของการทดสอบ Kruskal-Wallis คือทุกกลุ่มมีการแจกแจงเดียวกัน ค่า p-value จะบอกว่าควรปฏิเสธหรือไม่ ต่อไปนี้คือแนวทางตีความ:
เกณฑ์ 0.05 เป็นธรรมเนียม ปรับเข้มงวดเป็น 0.01 หรือผ่อนคลายเป็น 0.10 ได้ตามสาขาหรือความสำคัญของการวิเคราะห์
โปรดทราบว่าการทดสอบนี้จะไม่บอกว่ากลุ่มใดต่าง ผลลัพธ์ที่มีนัยสำคัญเพียงชี้ว่ากลุ่มไม่เหมือนกันทั้งหมด ทราบว่าเกิดความต่าง แต่ยังไม่รู้ว่าที่ใด เพื่อหาว่าคู่ใดเป็นตัวขับความแตกต่าง จำเป็นต้องใช้การทดสอบหลังการวิเคราะห์
การทดสอบ Post Hoc หลัง Kruskal-Wallis
การทดสอบบอกว่าอย่างน้อยหนึ่งกลุ่มต่าง แต่ไม่บอกว่ากลุ่มใดต่าง หากมีสามกลุ่มและ p < 0.05 อาจเป็น A เทียบ B, A เทียบ C, B เทียบ C หรือหลายคู่รวมกัน จำเป็นต้องทำการทดสอบหลังการวิเคราะห์เพื่อได้การเปรียบเทียบแบบจับคู่
การทดสอบของ Dunn เป็นตัวเลือกที่ใช้บ่อยที่สุด จะทำการเปรียบเทียบแบบจับคู่ระหว่างทุกกลุ่มและปรับค่า p เพื่อลดโอกาสบวกลวง หากไม่มีการปรับ ยิ่งเปรียบเทียบหลายคู่ ยิ่งเสี่ยงพบผล "มีนัยสำคัญ" โดยบังเอิญ
การทดสอบของ Dunn ใน Python
ต้องใช้ไลบรารี
scikit_posthocsหากยังไม่มี ให้ติดตั้งด้วยpip install scikit-posthocs.จากนั้นการคำนวณก็ง่ายมาก:
การทดสอบของ Dunn ใน Python
แต่ละช่องแสดงค่า p ที่ปรับแล้วของคู่นั้น ๆ ที่นี่เฉพาะ B เทียบ C (p = 0.004) ที่ต่ำกว่าเกณฑ์ 0.05 จึงแตกต่างกัน ส่วน A เทียบ B (p = 0.167) และ A เทียบ C (p = 0.607) ไม่แตกต่าง หมายความว่าห้อง A ไม่ได้ต่างเชิงสถิติกับอีกสองห้อง
การทดสอบของ Dunn ใน R
เริ่มต้นด้วยการติดตั้งไลบรารีเมื่อจำเป็นด้วยคำสั่ง
install.packages("dunn.test"):การทดสอบของ Dunn ใน R
ผลสอดคล้องกับ Python ตามคาด มีเฉพาะ B เทียบ C ที่มีนัยสำคัญ ขณะที่ A เทียบ B และ A เทียบ C ไม่มี ห้อง B และห้อง C คือคู่ที่อยู่เบื้องหลังความแตกต่างที่ Kruskal-Wallis ตรวจพบ
สมมติฐานของการทดสอบ Kruskal-Wallis
Kruskal-Wallis ยืดหยุ่นกว่า ANOVA แต่ยังมีสมมติฐาน 3 ข้อที่ควรตรวจสอบก่อนใช้งาน:
หากละเมิดสองข้อแรก ผลการทดสอบจะไม่ถูกต้อง ข้อที่สามยืดหยุ่นกว่า เพราะมีผลต่อการตีความ ไม่ได้ห้ามการรันทดสอบ
เมื่อไม่ควรใช้การทดสอบ Kruskal-Wallis
มีสามกรณีที่ควรใช้การทดสอบอื่นแทน:
สรุป
การทดสอบ Kruskal-Wallis ใช้เปรียบเทียบสามกลุ่มขึ้นไปที่เป็นอิสระต่อกันเมื่อข้อมูลไม่เป็นไปตามการแจกแจงแบบปกติที่การทดสอบอย่าง ANOVA ต้องการ ทำได้เพราะทำงานกับอันดับแทนค่าดิบ
อย่างไรก็ตาม มันไม่ได้มาแทนที่ ANOVA หากข้อมูลเป็นปกติ ANOVA จะดีกว่าเพราะมีนัยสำคัญทางสถิติมากกว่า ในทางกลับกัน หากข้อมูลเป็นแบบจับคู่ ให้ใช้การทดสอบ Friedman เช่นเคย การเลือกการทดสอบที่ถูกต้องขึ้นอยู่กับข้อมูล
เมื่อเงื่อนไขเหมาะสม การทดสอบ Kruskal-Wallis เป็นตัวเลือกที่เชื่อถือได้และตรงไปตรงมา เพียงรันทดสอบ ตรวจสอบค่า p และทำการทดสอบของ Dunn ต่อ หากต้องการทราบว่ากลุ่มใดอยู่เบื้องหลังความแตกต่าง
ความรู้สถิติเริ่มฝืดหรือไม่? เรียนคอร์ส Introduction to Statistics ของเรา แล้วกลับมาแม่นอีกครั้งได้ในบ่ายเดียว