การทดสอบที่แม่นยำของฟิชเชอร์ให้ค่า p ที่ไม่สม่ำเสมอ


12

ฉันกำลังพยายามใช้การทดสอบที่แน่นอนของฟิชเชอร์ในปัญหาพันธุศาสตร์จำลอง แต่ค่า p ดูเหมือนจะเอียงไปทางขวา ในฐานะนักชีววิทยาฉันคิดว่าฉันขาดอะไรบางอย่างที่ชัดเจนกับนักสถิติทุกคนดังนั้นฉันจะขอขอบคุณสำหรับความช่วยเหลือของคุณ

การตั้งค่าของฉันคือ: (การตั้งค่า 1, ระยะขอบคงที่)
สองตัวอย่างของ 0s และ 1s ถูกสร้างแบบสุ่มใน R แต่ละตัวอย่าง n = 500 ความน่าจะเป็นของการสุ่มตัวอย่าง 0 และ 1 จะเท่ากัน จากนั้นฉันจะเปรียบเทียบสัดส่วน 0/1 ในแต่ละตัวอย่างด้วยการทดสอบที่แน่นอนของฟิชเชอร์ (เพียงแค่fisher.testลองซอฟต์แวร์อื่นที่มีผลลัพธ์คล้ายกัน) การสุ่มตัวอย่างและการทดสอบซ้ำแล้วซ้ำอีก 30,000 ครั้ง ผลลัพธ์ค่า p จะถูกกระจายดังนี้: การแจกแจงค่า p

ค่าเฉลี่ยของค่า p ทั้งหมดอยู่ที่ประมาณ 0.55, 5 เปอร์เซนต์ที่ 0.0577 แม้การกระจายจะปรากฏขึ้นทางด้านขวา

ฉันได้อ่านทุกอย่างที่ทำได้ แต่ฉันไม่พบสิ่งบ่งชี้ว่าพฤติกรรมนี้เป็นเรื่องปกติ - ในทางกลับกันมันเป็นเพียงข้อมูลจำลองดังนั้นฉันจึงไม่เห็นแหล่งที่มาสำหรับอคติใด ๆ มีการปรับเปลี่ยนที่ฉันพลาดหรือไม่? ขนาดตัวอย่างเล็กเกินไปหรือไม่ หรือบางทีมันไม่ควรจะกระจายอย่างสม่ำเสมอและค่า p ถูกตีความแตกต่างกันอย่างไร
หรือฉันควรทำซ้ำล้านครั้งนี้หาควอนไทล์ 0.05 และใช้มันเป็นทางลัดที่สำคัญเมื่อฉันใช้สิ่งนี้กับข้อมูลจริง

ขอบคุณ!


ปรับปรุง:

Michael M แนะนำให้แก้ไขค่าส่วนต่างของ 0 และ 1 ตอนนี้ค่า p ให้การกระจายที่ดีกว่ามาก แต่น่าเสียดายที่มันไม่เหมือนกันหรือรูปทรงอื่นที่ฉันจำได้:

p-vals กับระยะขอบคงที่

การเพิ่มรหัส R จริง: (การตั้งค่า 2, ระยะขอบคงที่)

samples=c(rep(1,500),rep(2,500))
alleles=c(rep(0,500),rep(1,500))
p=NULL
for(i in 1:30000){
  alleles=sample(alleles)
  p[i]=fisher.test(samples,alleles)$p.value
}
hist(p,breaks=50,col="grey",xlab="p-values",main="")

การแก้ไขครั้งสุดท้าย:
เมื่อเสียงชี้ไปที่ความคิดเห็นพื้นที่ก็ดูบิดเบี้ยวเนื่องจากการใช้คำพูด ฉันกำลังแนบ QQ-plots สำหรับการตั้งค่า 1 (ฟรีมาร์จิ้น) และการตั้งค่า 2 (ระยะขอบคงที่) แผนการที่คล้ายกันนี้มีให้เห็นในการจำลองของ Glen ด้านล่างและผลลัพธ์เหล่านี้ในความเป็นจริงดูเหมือนจะค่อนข้างสม่ำเสมอ ขอบคุณสำหรับความช่วยเหลือ!

PVal-qqplot


2
ลองทำซ้ำการจำลองของคุณในขณะที่ถือขนาดกลุ่ม (500 แต่ละ) แต่ยังรวมผลรวมของค่าคงที่ "1" (มากกว่าตัวอย่าง pooled) ค่า p ของการทดสอบที่แน่นอนของฟิชเชอร์นั้นได้มาภายใต้การตั้งค่า ภาพดูดีขึ้นไหม Btw คุณไม่สามารถคาดหวังได้ว่าการแจกแจงค่า p จะเหมือนกันอย่างแน่นอนโดยธรรมชาติที่ไม่ต่อเนื่องของการแจกแจงตัวอย่าง (เช่น hypergeometric)
Michael M

1
มันอาจมีประโยชน์ที่จะดูรหัส R ของคุณ
conjugateprior

1
@Glen ดูเหมือนว่าฉันจากรหัสที่ในแต่ละการทำซ้ำทั้งสองตัวอย่างมีจำนวน 0s และ 1s (เช่นสมมติฐานว่างควรถือ) หรือฉันผิด?
bdeonovic

5
ฮิสโทแกรมเหล่านี้มีลักษณะเหมือนกันกับฉัน คุณต้องจำไว้ว่า histograms น่าจะเป็นจอแสดงผล (หรือความถี่) โดยวิธีการของพื้นที่ ช่องว่างที่เพิ่มขึ้นทางด้านขวา (เนื่องจากความไม่สามารถหลีกเลี่ยงได้ของการกระจาย p-value ของการทดสอบแบบไม่ต่อเนื่องใด ๆ ของข้อมูลที่ไม่ต่อเนื่อง) ทำให้ความสูงของแท่งเพิ่มขึ้นแต่พื้นที่ของพวกมันดูเหมือนจะคงที่ แทนที่จะใช้ฮิสโตแกรมเพื่อประเมินความสม่ำเสมอให้ทำกราฟ CDF เชิงประจักษ์
whuber

2
นอกเหนือจากการกระจายเฉพาะคำถามนี้ดูเหมือนจะตอบอย่างสมบูรณ์ที่นี่
Glen_b

คำตอบ:


10

ปัญหาคือข้อมูลไม่ต่อเนื่องเพื่อให้ฮิสโทแกรมสามารถหลอกลวงได้ ฉันเขียนโปรแกรมจำลองด้วย qqplots ที่แสดงการกระจายตัวแบบประมาณ

library(lattice)
set.seed(5545)
TotalNo=300
TotalYes=450

pvalueChi=rep(NA,10000)
pvalueFish=rep(NA,10000)

for(i in 1:10000){
  MaleAndNo=rbinom(1,TotalNo,.3)
  FemaleAndNo=TotalNo-MaleAndNo
  MaleAndYes=rbinom(1,TotalYes,.3)
  FemaleAndYes=TotalYes-MaleAndYes
  x=matrix(c(MaleAndNo,FemaleAndNo,MaleAndYes,FemaleAndYes),nrow=2,ncol=2)
  pvalueChi[i]=chisq.test(x)$p.value
  pvalueFish[i]=fisher.test(x)$p.value
}

dat=data.frame(pvalue=c(pvalueChi,pvalueFish),type=rep(c('Chi-Squared','Fishers'),each=10000))
histogram(~pvalue|type,data=dat,breaks=10)
qqmath(~pvalue|type,data=dat,distribution=qunif,
       panel = function(x, ...) {
         panel.qqmathline(x, ...)
         panel.qqmath(x, ...)
       })

ป้อนคำอธิบายรูปภาพที่นี่

ป้อนคำอธิบายรูปภาพที่นี่


5
spikes และ dips ดังกล่าวในฮิสโทแกรมหรือแผนภูมิแท่งของข้อมูลไม่ต่อเนื่องมักเป็นส่วนของขั้นตอนการ binning อย่าไว้ใจพวกเขา: ใช้แผนการที่ชาญฉลาดมากขึ้นของการแจกแจงเช่นแผนการ QQ หรือกราฟของ ECDF แม้ว่าจะเป็นจริง แต่ก็ไม่มีใครสนใจหากการแจกแจงค่า p มีความสม่ำเสมอและมีความหนาแน่นที่เหมาะสมสำหรับการตัดสินใจ: ในช่วงเวลาใกล้กับศูนย์ (และน้อยกว่า 0.5)
whuber

จุดยอดเยี่ยม @whuber ฉันจะอัปเดตด้วย qqplots
เกลน

2
@ โฮเบอร์เกลนขอบคุณมาก! ในความเป็นจริงการ binning นั้นเป็นการหลอกลวงเพียงแค่แบ่งฮิสโทแกรมของ Glen เป็นตัวแบ่งเพิ่มเติม และฉันยังได้รับ CDF / QQ เชิงเส้นเชิงเส้นด้วยการจำลองของฉันดังนั้นปัญหาดูเหมือนว่าจะได้รับการแก้ไข
juod

@juod: มันจะได้รับการชื่นชมอย่างมากถ้าคุณสามารถเพิ่ม qqplot สำหรับภาพประกอบบางทีแม้แต่การจำลองทั้งสอง?
Michael M

แผนการ qq ช่วยได้จริงๆ - ขอบคุณ คุณไม่ต้องการเปลี่ยนย่อหน้าแรกของคำตอบใช่ไหม คุณยังคงมีปัญหากับการจำลองและมี "ขัดขวาง" ในการกระจาย p-value หรือไม่?
whuber
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.