การคำนวณค่า p ที่ไม่รู้จัก


9

ฉันเพิ่งแก้ไขจุดบกพร่องสคริปต์ R และพบสิ่งแปลกประหลาดมากผู้เขียนกำหนดฟังก์ชั่นค่า p ของตัวเอง

pval <- function(x, y){
    if (x+y<20) { # x + y is small, requires R.basic
        p1<- nChooseK(x+y,x) * 2^-(x+y+1);
        p2<- nChooseK(x+y,y) * 2^-(x+y+1);
        pvalue = max(p1, p2)
    }
    else { # if x+y is large, use approximation
        log_p1 <- (x+y)*log(x+y) - x*log(x) - y*log(y) - (x+y+1)*log(2);
        pvalue<-exp(log_p1);
    }
    return(pvalue)
}

ที่ X และ Y เป็นค่าบวกมากกว่า 0 กรณี <20 นั้นน่าจะเป็นการคำนวณสำหรับการแจกแจง hypergeometric บางชนิด (สิ่งที่คล้ายกับการทดสอบฟิชเชอร์?) และไม่มีใครรู้ว่าการคำนวณอื่น ๆ คืออะไร? ในฐานะ sidenote ฉันพยายามปรับรหัสนี้ให้ดีที่สุดดังนั้นพยายามหาฟังก์ชัน R ที่เหมาะสมในการโทรและแทนที่ด้วย

แก้ไข: สูตรการแสดงรายละเอียดกระดาษสำหรับการคำนวณค่า p สามารถดูได้ที่นี่ (ต้องคลิก pdf เพื่อดูสูตร) ​​วิธีการเริ่มต้นที่หน้า 8 ของ pdf และสูตรที่เป็นปัญหาสามารถพบได้ในหน้า 9 ภายใต้ (1) การกระจายที่พวกเขาถือว่าเป็นปัวซอง

คำตอบ:


15

สิ่งที่สองที่ดูเหมือนว่ามันเป็นประมาณเพื่อการคำนวณที่ถูกใช้สำหรับx+y < 20กรณี แต่ตามออกประมาณสเตอร์ลิง

โดยปกติเมื่อมันถูกใช้สำหรับการประมาณแบบนี้ผู้คนจะใช้คำเพิ่มเติมเพิ่มเติมอย่างน้อย (ปัจจัยของในการประมาณค่าสำหรับ ) ซึ่งจะปรับปรุงการประมาณสัมพัทธ์อย่างมากสำหรับขนาดเล็ก.2πnn!n

ตัวอย่างเช่นถ้าและทั้ง 10 การคำนวณครั้งแรกให้ประมาณ 0.088 ในขณะที่การประมาณเมื่อปัจจัยของรวมอยู่ในเงื่อนไขทั้งหมดประมาณ 0.089 ใกล้เพียงพอสำหรับจุดประสงค์ส่วนใหญ่ ... แต่การละเว้นคำนั้นในการประมาณจะให้ 0.5 - ซึ่งไม่ใกล้พอจริง ๆ ! ผู้เขียนของฟังก์ชั่นนั้นอย่างชัดเจนไม่ได้ใส่ใจที่จะตรวจสอบความถูกต้องของการประมาณค่าของเขาในกรณีขอบเขตxy2πn

เพื่อจุดประสงค์นี้ผู้เขียนอาจเรียกง่ายๆว่าlgammaฟังก์ชั่นบิวด์อินโดยเฉพาะโดยใช้สิ่งนี้แทนสิ่งที่เขามีเพื่อlog_p1:

log_p1 <- lgamma(x+y+1)-lgamma(x+1)-lgamma(y+1)-(x+y+1)*log(2)

ซึ่งส่งผลให้คำตอบที่เขาพยายามประมาณ (เนื่องจากlgamma(x+1)จริง ๆ แล้วคืนสิ่งที่เขาพยายามที่จะประมาณ - ไม่ดี - ผ่านการประมาณ Stirling)log(x!)

ในทำนองเดียวกันฉันไม่แน่ใจว่าทำไมผู้เขียนไม่ได้ใช้chooseฟังก์ชั่นในตัวในส่วนแรกฟังก์ชั่นที่มาในการกระจายมาตรฐานของอาร์สำหรับเรื่องนั้นฟังก์ชั่นการกระจายที่เกี่ยวข้องอาจมีอยู่ในตัวด้วย

คุณไม่จำเป็นต้องแยกเป็นสองกรณีจริงๆ lgammaหนึ่งทำงานลงเพียงแค่ปรับสิทธิที่จะได้ค่าที่เล็กที่สุด ในทางกลับกันchooseฟังก์ชั่นใช้งานได้กับค่าที่ค่อนข้างใหญ่ (เช่นใช้choose(1000,500)งานได้ดี) ปลอดภัยมากขึ้นตัวเลือกที่น่าจะเป็นlgammaแต่คุณจะต้องมีขนาดค่อนข้างใหญ่และก่อนที่มันจะเป็นปัญหาxy

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

เมื่อคุณพูดว่า 'เพิ่มประสิทธิภาพ' คุณหมายถึงทำให้เร็วขึ้นสั้นลงบำรุงรักษาได้มากขึ้นหรืออย่างอื่น


แก้ไขหลังจากอ่านกระดาษอย่างรวดเร็ว:

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

[พวกเขาดำเนินการต่อจาก 'การทดสอบฟิชเชอร์อยู่เสมออนุรักษ์นิยมมากขึ้นว่าเรา' เพื่อยืนยันว่าการทดสอบฟิชเชอร์เป็นอนุรักษ์นิยมเกินไป ... ซึ่งไม่จำเป็นต้องทำตามเว้นแต่จะเป็นสิ่งที่ผิดเงื่อนไข พวกเขาต้องสร้างมันขึ้นมา แต่เนื่องจากนักสถิติบางคนโต้เถียงกันมาประมาณ 80 ปีแล้วและผู้เขียนเหล่านี้ดูเหมือนจะไม่รู้ว่าทำไมการปรับสภาพผมจึงไม่คิดว่าพวกเขาจะต้องอยู่ด้านล่างสุดของปัญหานั้น .]

อย่างน้อยผู้เขียนบทความก็ดูเหมือนจะเข้าใจว่าความน่าจะเป็นที่พวกเขาให้ต้องถูกสะสมเพื่อให้ค่า p; ตัวอย่างเช่นใกล้กึ่งกลางของคอลัมน์แรกของหน้า 5 (การเน้นของฉัน):

นัยสำคัญทางสถิติตามการทดสอบที่แม่นยำของฟิชเชอร์สำหรับผลดังกล่าวคือ 4.6% (ค่า P สองหางกล่าวคือความน่าจะเป็นสำหรับตารางดังกล่าวที่จะเกิดขึ้นในสมมติฐานที่ความถี่ actin EST เป็นอิสระจากห้องสมุด cDNA) ในการเปรียบเทียบค่า P- คำนวณจากรูปแบบสะสม (สมการที่ 9 ดูวิธีการ) ของสมการที่ 2 (เช่นสำหรับความถี่สัมพัทธ์ของ actin ESTs จะเท่ากันในห้องสมุดทั้งสองเนื่องจากอย่างน้อย 11 cognate ESTs ใน ห้องสมุดตับหลังจากที่ทั้งสองถูกพบในห้องสมุดสมอง) คือ 1.6%

(แม้ว่าฉันไม่แน่ใจว่าฉันเห็นด้วยกับการคำนวณค่าของพวกเขาที่นั่นฉันต้องตรวจสอบอย่างรอบคอบเพื่อดูว่าพวกเขากำลังทำอะไรกับหางอีกอัน)

ฉันไม่คิดว่าโปรแกรมทำเช่นนั้น

อย่างไรก็ตามระวังว่าการวิเคราะห์ของพวกเขาไม่ใช่การทดสอบทวินามมาตรฐาน พวกเขาใช้อาร์กิวเมนต์ Bayesian เพื่อรับค่า p ในการทดสอบเป็นประจำ พวกเขายังดูเหมือน - ค่อนข้างแปลกใจของฉัน - เงื่อนไขในมากกว่า y ที่ ซึ่งหมายความว่าพวกเขาจะต้องจบลงด้วยบางสิ่งบางอย่างเช่นลบทวินามแทนที่จะเป็นทวินาม แต่ฉันพบว่ากระดาษมีการจัดระเบียบอย่างไม่ดีและอธิบายได้แย่มาก (และฉันคุ้นเคยกับสิ่งที่เกิดขึ้นในเอกสารสถิติ) ดังนั้นฉันจึง จะไม่มั่นใจถ้าฉันผ่านไปอย่างระมัดระวังxx+y

ฉันไม่เชื่อด้วยซ้ำว่าผลรวมของความน่าจะเป็นที่ 1 ณ จุดนี้

มีอะไรอีกมากมายที่จะพูดที่นี่ แต่คำถามไม่ได้เกี่ยวกับกระดาษมันเกี่ยวกับการใช้งานในโปรแกรม

-

อย่างไรก็ตามผลที่สุดก็คืออย่างน้อยกระดาษอย่างถูกต้องระบุว่าค่า P-ประกอบด้วยผลรวมของความน่าจะเป็นเช่นเดียวกับที่ในสมการ 2 แต่โปรแกรมไม่ได้ (ดู eqn 9a และ 9b ในส่วนวิธีการของกระดาษ)

รหัสนั้นผิดปกติ

[คุณสามารถใช้pbinomเนื่องจากความเห็นของ @ whuber จะบ่งบอกถึงการคำนวณความน่าจะเป็นของแต่ละบุคคล (แต่ไม่ใช่หางเนื่องจากมันไม่ใช่การทดสอบแบบทวินามในขณะที่มันจัดโครงสร้าง) แต่แล้วก็มี 1/2 ปัจจัยพิเศษในสมการที่ 2 ดังนั้น หากคุณต้องการทำซ้ำผลลัพธ์ในกระดาษคุณต้องแก้ไข]

คุณสามารถรับมันได้ด้วยการเล่นซอจากpnbinom-

รูปแบบปกติของการลบทวินามมีทั้งจำนวนของการทดลองเพื่อที่สำเร็จหรือจำนวนของความล้มเหลวกับความสำเร็จ ทั้งสองมีความเท่าเทียมกัน วิกิพีเดียช่วยให้รูปแบบที่สองที่นี่ ฟังก์ชันความน่าจะเป็นคือ:kthkth

(k+r1k)(1p)rpk,

สมการ 2 P4 (และอื่น ๆ นอกจากนี้ยังมีสมการที่ 1 p3) เป็นทวินามลบ แต่ขยับโดย 1. Let ,และ 1p=N1/(N1+N2)k=xr=y+1

สิ่งนี้ทำให้ฉันกังวลว่าเนื่องจากข้อ จำกัด ของไม่ได้เปลี่ยนไปในทำนองเดียวกันความน่าจะเป็นของพวกเขาอาจไม่เพิ่มแม้แต่ 1y

นั่นจะไม่ดี


1
+1 คำอธิบายที่ดี มีปัญหาเพิ่มเติมเกี่ยวกับรหัสนี้ ไม่จำเป็นต้องคำนวณp2เลย ขนาดเล็กp1และp2สอดคล้องกับขนาดเล็กxและyตามลำดับ - นั่นคือความไร้ประสิทธิภาพ ข้อผิดพลาดที่เป็นไปได้ที่สาขาที่สองของเงื่อนไขล้มเหลวในการคำนวณที่ทั้งหมดและใช้เพียงp2 p1ฉันยังสงสัยว่ารหัสอาจผิดพลาดทั้งหมดเพราะมันไม่ได้คำนวณค่า p: มันเป็นเพียงครึ่งหนึ่งของความน่าจะเป็นทวินามและบางทีน่าจะเป็นความน่าจะเป็นหาง ทำไมไม่ใช้เพียงpbinom/ dbinomและทำได้ด้วย?
whuber

ขอบคุณสำหรับการตอบกลับที่ยอดเยี่ยมฉันสามารถติดตามแหล่งที่มาของสูตร: genome.cshlp.org/content/7/10/986.shortฉันต้องการเปลี่ยนให้เร็วขึ้นและง่ายต่อการดูแลรักษา / อ่าน
yingw

ขอบคุณสำหรับกระดาษ มันเป็นประโยชน์ในการหาสิ่งที่เกิดขึ้นในรหัส ช่างเป็นอะไร
Glen_b -Reinstate Monica

1
+1 นี่คือโพสต์ที่ไม่ควรเป็น wiki ชุมชน! ฉันคิดว่ามันเป็นเพราะ 14 revs แต่ในกรณีนี้พวกเขาทั้งหมดโดยคุณ ความขยันของคุณได้รับการลงโทษ!
Darren Cook

ขอขอบคุณที่โหวตความมั่นใจ ใช่ฉันกลับมาและปรับปรุงเมื่อฉันอ่านบทความ แต่ฉันคิดว่ามันเป็นความผิดของตัวเองส่วนหนึ่งที่ไม่บรรลุผลสุดท้ายได้อย่างมีประสิทธิภาพมากขึ้น
Glen_b -Reinstate Monica
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.