การทดสอบแบบไม่อิงพารามิเตอร์หากดึงตัวอย่างสองตัวอย่างจากการแจกแจงแบบเดียวกัน


19

ฉันต้องการทดสอบสมมติฐานว่ามีตัวอย่างสองตัวอย่างมาจากประชากรเดียวกันโดยไม่มีการตั้งสมมติฐานใด ๆ เกี่ยวกับการกระจายตัวของกลุ่มตัวอย่างหรือประชากร ฉันจะทำสิ่งนี้ได้อย่างไร

จากวิกิพีเดียความประทับใจของฉันคือการทดสอบ Mann Whitney U ควรเหมาะสม แต่ดูเหมือนจะไม่เหมาะสำหรับฉันในทางปฏิบัติ

สำหรับ concreteness ฉันได้สร้างชุดข้อมูลที่มีสองตัวอย่าง (a, b) ที่มีขนาดใหญ่ (n = 10,000) และดึงมาจากประชากรสองกลุ่มที่ไม่ปกติ (bimodal) มีความคล้ายคลึงกัน (ค่าเฉลี่ยเดียวกัน) แตกต่างกัน (ค่าเบี่ยงเบนมาตรฐาน รอบ "humps.") ฉันกำลังมองหาการทดสอบที่จะรับรู้ว่าตัวอย่างเหล่านี้ไม่ได้มาจากประชากรเดียวกัน

มุมมองฮิสโตแกรม:

ตัวอย่าง bimodal

รหัส R:

a <- tibble(group = "a",
            n = c(rnorm(1e4, mean=50, sd=10),
                  rnorm(1e4, mean=100, sd=10)))
b <- tibble(group = "b",
            n = c(rnorm(1e4, mean=50, sd=3),
                  rnorm(1e4, mean=100, sd=3)))
ggplot(rbind(a,b), aes(x=n, fill=group)) +
  geom_histogram(position='dodge', bins=100)

นี่คือการทดสอบ Mann Whitney อย่างน่าประหลาดใจ (?) ล้มเหลวในการปฏิเสธสมมติฐานว่าง ๆ ว่ากลุ่มตัวอย่างมาจากประชากรเดียวกัน:

> wilcox.test(n ~ group, rbind(a,b))

        Wilcoxon rank sum test with continuity correction

data:  n by group
W = 199990000, p-value = 0.9932
alternative hypothesis: true location shift is not equal to 0

ช่วยด้วย! ฉันจะอัปเดตรหัสเพื่อตรวจหาการแจกแจงต่าง ๆ (โดยเฉพาะอย่างยิ่งฉันต้องการวิธีการที่ใช้การสุ่มแบบทั่วไป / การสุ่มใหม่หากมี)

แก้ไข:

ขอบคุณทุกคนสำหรับคำตอบ! ฉันตื่นเต้นที่ได้เรียนรู้เพิ่มเติมเกี่ยวกับ Kolmogorov – Smirnov ซึ่งดูเหมือนจะเหมาะสมมากสำหรับวัตถุประสงค์ของฉัน

ฉันเข้าใจว่าการทดสอบ KS กำลังเปรียบเทียบ ECDFs ของสองตัวอย่างนี้:

ECDFs

ที่นี่ฉันสามารถมองเห็นสามคุณสมบัติที่น่าสนใจ (1) ตัวอย่างมาจากการแจกแจงที่ต่างกัน (2) A อยู่เหนือ B อย่างเห็นได้ชัดในบางจุด (3) A อยู่ต่ำกว่า B อย่างชัดเจนที่จุดอื่น ๆ

การทดสอบ KS ดูเหมือนว่าจะสามารถตรวจสอบสมมติฐานได้จากคุณสมบัติเหล่านี้:

> ks.test(a$n, b$n)

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D = 0.1364, p-value < 2.2e-16
alternative hypothesis: two-sided

> ks.test(a$n, b$n, alternative="greater")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^+ = 0.1364, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies above that of y

> ks.test(a$n, b$n, alternative="less")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^- = 0.1322, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies below that of y

นั่นมันเรียบร้อยจริงๆ! ฉันมีความสนใจจริง ๆ ในคุณสมบัติเหล่านี้และดังนั้นจึงเป็นการดีที่การทดสอบ KS สามารถตรวจสอบแต่ละคุณสมบัติได้


ไม่น่าแปลกใจที่ MW จะไม่ปฏิเสธ สำหรับการทดสอบด้านเดียวนั้นจะทดสอบว่า Pr (a> b) <0.05 โดยที่ a และ b ถูกสุ่มเลือกสมาชิกของประชากรของคุณหรือไม่
mdewey

1
สมมติฐานของแมนน์ - วิทนีย์บางครั้งถูกกล่าวถึงความกังวลว่า "สถานที่" ของทั้งสองกลุ่มหรือบางสิ่งบางอย่างตามแนวของความแตกต่างสุ่มระบบ ในกรณีของข้อมูลของคุณทั้งสองกลุ่มมีการกระจายแบบสมมาตรประมาณ 75 ดังนั้น MW ไม่ควรพบความแตกต่างอย่างแน่นอน
Sal Mangiafico

4
นี่เป็นตัวอย่างที่ดีของความสับสนที่เราหว่านเมื่อเราไม่ชัดเจนเกี่ยวกับสมมติฐานสำหรับการทดสอบ น่าเสียดายที่ผู้คนถูกสอนให้ใช้แบบทดสอบt -test เพื่อเปรียบเทียบสองกลุ่มโดยไม่คิดจริง ๆ ว่าการทดสอบนี้เปรียบเทียบสองวิธีในขณะที่มีการทดสอบค่ามัธยฐานเพื่อเปรียบเทียบค่าเฉลี่ยสองค่าคือ Mann-Whitney ที่เปรียบเทียบอย่างอื่น การทดสอบเพื่อเปรียบเทียบความแปรปรวน Kolmogorov-Smirnov เพื่อเปรียบเทียบการแจกแจงและอื่น ๆ ... บางครั้งเราแค่บอกว่าเราต้องการเปรียบเทียบ "ประชากร" สองคนโดยไม่ชัดเจนว่าเราต้องการทดสอบสมมติฐานใด
Sal Mangiafico

จากการไตร่ตรองดูเหมือนว่าหน้า Wikipedia สำหรับการทดสอบ MW ระบุสมมติฐานไว้อย่างชัดเจนและเป็นความเข้าใจผิด (การกระโดดที่ไม่มีมูล) ในส่วนของฉันที่จะคิดว่าสมมติฐานนี้ยังแสดงถึงตัวอย่างที่มาจากการแจกแจงแบบเดียวกัน แท้จริงแล้วปัญหาจะชัดเจนเมื่อเปรียบเทียบการแจกแจงสองแบบที่แตกต่างกันซึ่งสมมาตรรอบจุดศูนย์กลางเดียวกัน
ลุคกอร์รี่

คำตอบ:


17

การทดสอบ Kolmogorov-Smirnov เป็นวิธีที่พบได้บ่อยที่สุด แต่ก็มีตัวเลือกอื่น ๆ

การทดสอบจะขึ้นอยู่กับฟังก์ชันการแจกแจงสะสมเชิงประจักษ์ ขั้นตอนพื้นฐานคือ:

  • Lp
  • หาการกระจายตัวของสถิติการทดสอบภายใต้สมมติฐานว่าง ๆ ว่ากลุ่มตัวอย่างมาจากการแจกแจงแบบเดียวกัน (คนโชคดีที่ทำสิ่งนี้ไปแล้วในระยะทางที่ธรรมดาที่สุด!)
  • αα%

L

ks.test(a,b)

p

L2dgofcvm.test()

แก้ไข:

nm

ในการเปลี่ยนให้เป็นขั้นตอนการสุ่มตัวอย่างเราสามารถทำสิ่งต่อไปนี้

  1. nmnm
  2. คำนวณระยะทางของคุณสำหรับตัวอย่าง สำหรับการทดสอบ KS นี่เป็นเพียงค่าสูงสุด ความแตกต่างระหว่าง CDF เชิงประจักษ์
  3. เก็บผลลัพธ์และกลับไปที่ขั้นตอนที่ 1

ในที่สุดคุณจะสร้างตัวอย่างจำนวนมากจากการกระจายของสถิติทดสอบภายใต้สมมติฐานว่างซึ่งคุณสามารถใช้ quantiles เพื่อทำการทดสอบสมมติฐานของคุณในระดับความสำคัญที่คุณต้องการ สำหรับสถิติการทดสอบ KS การแจกแจงนี้เรียกว่าการแจกแจง Kolmogorov

โปรดทราบว่าสำหรับการทดสอบแคนซัสนี่เป็นเพียงความสูญเสียความพยายามในการคำนวณเพราะควอนไทล์นั้นมีลักษณะทางทฤษฎีอย่างง่าย ๆ แต่โดยทั่วไปแล้วขั้นตอนนี้ใช้กับการทดสอบสมมติฐานใด ๆ


ขอขอบคุณ! การทดสอบ Kolmogorov-Smirnov นั้นปฏิเสธสมมติฐานว่าง ๆ ที่ตัวอย่างเหล่านี้มาจากประชากรเดียวกัน และโดยสังหรณ์ใจมันก็สมเหตุสมผลที่จะเปรียบเทียบ ECDF เพราะนั่นเป็นสิ่งที่ฉันทำกับฮิสโตแกรมมากขึ้นหรือน้อยลง คำถาม: สมมติว่าฉันต้องการใช้การทดสอบนี้ตั้งแต่ต้นโดยไม่มีเครื่องมือใด ๆ เช่นอาร์มีวิธีง่าย ๆ ที่พอเพียงหรือไม่? (อาจขึ้นอยู่กับ bootstrapping?) ฉันถามเพราะพื้นหลังของฉันคือการเขียนโปรแกรมคอมพิวเตอร์และฉันพบว่าวิธีการจำลองแบบง่ายกว่าที่จะเข้าใจจริงๆ
ลุคกอร์รี่

คุณควรพิจารณาการสุ่มหรือการเรียงสับเปลี่ยน ฉันชอบสิ่งเหล่านี้สำหรับการทดสอบที่ไม่ปกติ พวกเขายังมีคุณสมบัติตรงตามเกณฑ์การจำลองสถานการณ์มากกว่าสถิติ
RTbecard

2
@JamesAdamCampbell คุณสามารถขยายคำตอบที่ต่างออกไปหน่อยได้ไหม?
Will

1
L

1
ฉันไม่เห็นปัญหาใด ๆ ฉันสนใจที่จะเห็นผลลัพธ์หากคุณลองสิ่งนี้! คงจะเจ๋งที่จะเห็นว่าวิธีการ CI และการทดสอบ KS โดยตรงให้คำตอบเดียวกันกับคุณหรือไม่ ฉันสงสัยว่าพวกเขาทำ :)
จะ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.