ถ้าฉันต้องการได้ความน่าจะเป็น 9 ครั้งในการทดลอง 16 ครั้งต่อการทดลองแต่ละครั้งมีความน่าจะเป็น 0.6 ฉันสามารถใช้การแจกแจงทวินาม ฉันจะใช้อะไรได้ถ้าการทดลอง 16 ครั้งแต่ละครั้งมีความน่าจะเป็นที่แตกต่างกัน
ถ้าฉันต้องการได้ความน่าจะเป็น 9 ครั้งในการทดลอง 16 ครั้งต่อการทดลองแต่ละครั้งมีความน่าจะเป็น 0.6 ฉันสามารถใช้การแจกแจงทวินาม ฉันจะใช้อะไรได้ถ้าการทดลอง 16 ครั้งแต่ละครั้งมีความน่าจะเป็นที่แตกต่างกัน
คำตอบ:
นี่คือผลรวมของการทดลองแบบทวินาม 16 ครั้ง สมมติฐานของความเป็นอิสระทำให้เราสามารถคูณความน่าจะเป็นได้ ดังนั้นหลังจากการทดลองสองครั้งที่มีความน่าจะเป็นและของความสำเร็จโอกาสของความสำเร็จในการทดลองทั้งสองคือโอกาสของการไม่ประสบความสำเร็จคือและโอกาสของความสำเร็จหนึ่งคือ(1 การแสดงออกครั้งสุดท้ายนั้นเป็นไปตามความจริงที่ว่าทั้งสองวิธีของการได้รับความสำเร็จเพียงอย่างเดียวนั้นไม่เกิดขึ้นพร้อมกัน: ในที่สุดพวกเขาก็สามารถเกิดขึ้นได้ นั่นหมายถึงความน่าจะเป็นของพวกเขาเพิ่ม
โดยใช้วิธีการเหล่านี้สองกฎ - ความน่าจะเป็นอิสระคูณและร่วมกันคนพิเศษเพิ่ม - คุณสามารถทำงานได้คำตอบสำหรับการพูด, 16 การทดลองที่มีความน่าจะเป็น{16} ในการทำเช่นนั้นคุณต้องคำนึงถึงวิธีการทั้งหมดในการรับจำนวนความสำเร็จที่กำหนดแต่ละครั้ง (เช่น 9) มีวิธีที่จะทำให้สำเร็จ 9 ครั้ง ยกตัวอย่างเช่นหนึ่งในนั้นเกิดขึ้นเมื่อการทดลองที่ 1, 2, 4, 5, 6, 11, 12, 14 และ 15 ประสบความสำเร็จและคนอื่น ๆ ล้มเหลว ความสำเร็จมีความน่าจะเป็นและและความล้มเหลวมีความน่าจะเป็น{16} การคูณตัวเลข 16 ตัวเหล่านี้ทำให้มีโอกาส( 16)ของลำดับผลลัพธ์เฉพาะนี้ การบวกตัวเลขนี้กับจำนวนที่เหลืออีก 11,439 ตัวให้คำตอบ
แน่นอนว่าคุณจะใช้คอมพิวเตอร์
ด้วยการทดลองมากกว่า 16 ครั้งมีความจำเป็นที่จะต้องประมาณการกระจายตัว หากไม่มีความน่าจะเป็นที่และเล็กเกินไปการประมาณปกติมีแนวโน้มที่จะทำงานได้ดี ด้วยวิธีนี้คุณจะทราบว่าความคาดหวังของผลรวมของการทดลองคือและ (เนื่องจากการทดลองนั้นเป็นอิสระ) ความแปรปรวนคือ(1-p_n) จากนั้นคุณหลอกกระจายของผลรวมเป็นเรื่องปกติที่มีค่าเฉลี่ยและส่วนเบี่ยงเบนมาตรฐาน\คำตอบมีแนวโน้มที่จะดีสำหรับการคำนวณความน่าจะเป็นที่สอดคล้องกับสัดส่วนของความสำเร็จที่แตกต่างจากไม่เกินหลายเท่า ในฐานะที่เป็นเติบโตขนาดใหญ่ประมาณนี้ได้รับเคยถูกต้องมากขึ้นและการทำงานสำหรับหลายขนาดใหญ่ของห่างจาก\
ทางเลือกอีกทางหนึ่งสำหรับการประมาณค่าปกติของ @ whuber คือการใช้ความน่าจะเป็น "การผสม" หรือโมเดลเชิงลำดับชั้น นี้จะมีผลบังคับใช้เมื่อจะคล้ายกันในทางใดทางหนึ่งและคุณสามารถจำลองนี้โดยการกระจายความน่าจะเป็นที่มีฟังก์ชั่นความหนาแน่นของการจัดทำดัชนีโดยบางพารามิเตอร์\คุณได้สมการอินทิกรัล:หน้าฉัน ~ D ฉันs T ( θ ) กรัม( P | θ ) θ
ความน่าจะเป็นทวินามมาจากการตั้งค่าการประมาณปกติมาจาก (ฉันคิดว่า) การตั้งค่า (ด้วยและตามที่กำหนดไว้ในคำตอบของ @ whuber) และจากนั้นสังเกต " ก้อย "ของ PDF นี้ลดลงอย่างรวดเร็วรอบจุดสูงสุดg ( p | θ ) = g ( p | μ , σ ) = 1μσ
คุณสามารถใช้การแจกแจงแบบเบต้าซึ่งจะนำไปสู่รูปแบบการวิเคราะห์อย่างง่ายและไม่จำเป็นต้องมีปัญหาจาก "p เล็ก ๆ " ที่การประมาณปกติทำได้ - เนื่องจากเบต้านั้นค่อนข้างยืดหยุ่น การใช้การแจกแจงแบบกับกำหนดโดยวิธีแก้ไขปัญหาของสมการต่อไปนี้ (นี่คือค่าประมาณ "mimimum KL divergence"):
โดยที่เป็นฟังก์ชั่น digamma - เกี่ยวข้องกับอนุกรมฮาร์โมนิกอย่างใกล้ชิด
เราได้รับการกระจายแบบ "เบต้า - ทวินาม"
การกระจายนี้ลู่ไปสู่การกระจายปกติในกรณีที่จุด @whuber ออก - แต่ควรจะให้คำตอบที่เหมาะสมสำหรับธุรกิจขนาดเล็กและเบ้ - แต่ไม่ต่อเนื่อง , การกระจายเบต้ามีเพียงหนึ่งจุดสูงสุด แต่คุณสามารถแก้ไขปัญหานี้ได้อย่างง่ายดายเพียงใช้การแจกแจงเบต้าสำหรับโหมดคุณแยกอินทิกรัลจากเป็นชิ้นเพื่อให้แต่ละชิ้นมีโหมดที่ไม่ซ้ำกัน (และข้อมูลเพียงพอที่จะประเมินพารามิเตอร์) และพอดีกับการกระจายเบต้าภายในแต่ละชิ้น จากนั้นเพิ่มผลลัพธ์โดยสังเกตว่าการเปลี่ยนแปลงของตัวแปรสำหรับp i p i M M 0 < p < 1 M p = x - L L<x<U เบต้าอินทิกรัลเปลี่ยนเป็น:
ให้ ~ด้วยฟังก์ชันสร้างความน่าจะเป็น (pgf): B e r n o u l l i ( p i )
ให้แสดงผลรวมของตัวแปรสุ่มอิสระดังกล่าว จากนั้น pgf สำหรับผลรวมของตัวแปรดังกล่าวคือ: n S n = 16
เราหาซึ่งก็คือ:
เสร็จเรียบร้อย. นี้ก่อให้เกิดการแก้ปัญหาที่เป็นสัญลักษณ์ที่แน่นอนเป็นหน้าที่ของที่p_iคำตอบนั้นค่อนข้างยาวในการพิมพ์บนหน้าจอ แต่เป็นเวไนยได้ทั้งหมดและใช้เวลาน้อยกว่า th ของวินาทีในการประเมินโดยใช้Mathematicaบนคอมพิวเตอร์ของฉัน1
ตัวอย่าง
ถ้าดังนั้น: P(S=9)=9647941854334808184
หากดังนั้น: P(S=9)=0.000228613...
มากกว่า 16 การทดลอง?
ด้วยการทดลองมากกว่า 16 ครั้งไม่จำเป็นต้องประเมินการกระจายตัว วิธีการดังกล่าวข้างต้นที่แน่นอนการทำงานได้อย่างง่ายดายเพียงตัวอย่างที่มีการพูดหรือ100 ตัวอย่างเช่นเมื่อจะใช้เวลาน้อยกว่า th ของวินาทีเพื่อประเมิน PMF ทั้งหมด ( เช่นที่ทุกค่า ) โดยใช้รหัสด้านล่าง
รหัส Mathematica
รับเวกเตอร์ของค่าให้พูดว่า:
n = 16; pvals = Table[Subscript[p, i] -> i/(n+1), {i, n}];
... นี่คือรหัสMathematica ที่จะทำทุกสิ่งที่ต้องการ:
pgfS = Expand[ Product[1-(1-t)Subscript[p,i], {i, n}] /. pvals];
D[pgfS, {t, 9}]/9! /. t -> 0 // N
0.198268
วิธีหา PMF ทั้งหมด:
Table[D[pgfS, {t,s}]/s! /. t -> 0 // N, {s, 0, n}]
... หรือใช้ผู้เข้าชมสม่ำเสมอและเร็วกว่า (ขอบคุณคำแนะนำจาก Ray Koopman ด้านล่าง):
CoefficientList[pgfS, t] // N
สำหรับตัวอย่างที่มีจะใช้เวลาในการคำนวณเพียง 1 วินาทีจากนั้น 0.002 วินาทีเพื่อหา PMF ทั้งหมดที่ใช้ดังนั้นจึงมีประสิทธิภาพมากpgfS
CoefficientList
With[{p = Range@16/17}, N@Coefficient[Times@@(1-p+p*t),t,9]]
ให้โอกาสในการสำเร็จ 9 ครั้งและWith[{p = Range@16/17}, N@CoefficientList[Times@@(1-p+p*t),t]]
ให้ความน่าจะเป็นที่ 0, ... , 16 ครั้ง
Table
สำหรับ -values เป็นเจตนาเพื่อให้รูปแบบทั่วไปมากขึ้นไม่เหมาะกับ การใช้งานของเป็นอย่างมากที่ดี! ฉันได้เพิ่มโค้ดข้างต้นซึ่งเพิ่มความเร็วในการเข้าถึงโดยตรงอย่างมหาศาล ดังนั้นแม้แม้จะเร็วกว่า มันไม่ได้สร้างความแตกต่างมากนักสำหรับต่ำกว่า 50 (ทั้งสองวิธีใช้เวลาเพียงเสี้ยววินาทีในการสร้าง PMF ทั้งหมด) แต่คุณจะได้เปรียบในทางปฏิบัติจริงเมื่อnมีขนาดใหญ่มาก Range
CoefficientList
Expand
CoefficientList
ParallelTable
CoefficientList
@wolfies แสดงความคิดเห็นและความพยายามของฉันในการตอบสนองมันเปิดเผยปัญหาสำคัญกับคำตอบอื่น ๆ ของฉันซึ่งฉันจะหารือในภายหลัง
กรณีเฉพาะ (n = 16)
มีวิธีที่ค่อนข้างมีประสิทธิภาพในการเขียนโค้ดการแจกแจงแบบเต็มโดยใช้ "เคล็ดลับ" ในการใช้หมายเลขฐาน 2 (ไบนารี) ในการคำนวณ แต่จะต้อง 4 บรรทัดของรหัส R ที่จะได้รับการกระจายเต็มรูปแบบของที่Prโดยทั่วไปมีตัวเลือกเวกเตอร์ทั้งหมดตัวเลือกที่ตัวแปรไบนารีสามารถทำได้ ตอนนี้สมมติว่าเราแต่ละหมายเลขทางเลือกที่แตกต่างไปจากถึง n สิ่งนี้ด้วยตัวเองไม่มีอะไรพิเศษ แต่ตอนนี้สมมติว่าเราเป็นตัวแทน "หมายเลขตัวเลือก" โดยใช้เลขฐาน 2 ตอนนี้ใช้เพื่อให้ฉันสามารถเขียนตัวเลือกทั้งหมดดังนั้นจึงมีตัวเลือก จากนั้นใน "หมายเลขสามัญ" จะกลายเป็นใน "เลขฐานสอง" ตอนนี้สมมติว่าเราเขียนเหล่านี้เป็นตัวเลขสี่หลักแล้วเรามี0001,0010,0011,0100,0101,0110,0111,1000ตอนนี้ดูตัวเลขสุดท้ายของแต่ละตัวเลข -สามารถคิดได้ว่าเป็น , ฯลฯ การนับในรูปแบบไบนารีให้วิธีที่มีประสิทธิภาพในการจัดระเบียบผลรวม . โชคดีที่มีฟังก์ชั่น R ซึ่งสามารถทำการแปลงแบบไบนารี่ให้เราเรียกและเราแปลงรูปแบบไบนารีดิบให้เป็นตัวเลขผ่านทางแล้วเราจะได้เวกเตอร์intToBits(x)
as.numeric(intToBits(x))
องค์ประกอบแต่ละองค์ประกอบเป็นตัวเลขของเวอร์ชันฐาน 2 ของหมายเลขของเรา (อ่านจากขวาไปซ้ายไม่ใช่จากซ้ายไปขวา) การใช้เคล็ดลับนี้รวมกับ vectorisations R อื่น ๆ เราสามารถคำนวณความน่าจะเป็นที่ในรหัส R 4 บรรทัด:
exact_calc <- function(y,p){
n <- length(p)
z <- t(matrix(as.numeric(intToBits(1:2^n)),ncol=2^n))[,1:n] #don't need columns n+1,...,32 as these are always 0
pz <- z%*%log(p/(1-p))+sum(log(1-p))
ydist <- rowsum(exp(pz),rowSums(z))
return(ydist[y+1])
}
เสียบปลั๊กในกรณีที่เหมือนกันและรูทกรณี sqrtให้การกระจายเต็มรูปแบบ สำหรับ y เป็น:
ดังนั้นสำหรับปัญหาเฉพาะของประสบความสำเร็จในการทดลองครั้งการคำนวณที่แน่นอนนั้นตรงไปตรงมา นอกจากนี้ยังสามารถใช้งานได้กับความน่าจะเป็นจำนวนมากจนถึงประมาณซึ่งเกินกว่าที่คุณน่าจะเริ่มประสบปัญหาหน่วยความจำและจำเป็นต้องใช้เทคนิคการคำนวณที่แตกต่างกัน
โปรดทราบว่าด้วยการใช้ "การแจกแจงแบบเบต้า" ที่แนะนำของฉันเราจะได้รับการประมาณค่าพารามิเตอร์ของและสิ่งนี้ให้การประมาณความน่าจะเป็นที่เกือบจะเหมือนกันในให้ค่าประมาณ{17} ดูเหมือนว่าแปลกเนื่องจากความหนาแน่นของการแจกแจงแบบเบต้าด้วยใกล้เคียงกับฮิสโตแกรมของค่าอย่างใกล้ชิด เกิดอะไรขึ้น
กรณีทั่วไป
ตอนนี้ฉันจะหารือเกี่ยวกับกรณีทั่วไปมากขึ้นและทำไมการประมาณเบต้าอย่างง่ายของฉันจึงล้มเหลว โดยพื้นฐานแล้วการเขียนจากนั้นกับการแจกแจงแบบอื่นจริง ๆ แล้วทำให้สมมติฐานที่สำคัญ - เราสามารถประมาณความน่าจะเป็นจริงด้วย ความน่าจะเป็นทวินามเดียว - ปัญหาเดียวที่ยังคงอยู่คือค่าจะใช้ วิธีการหนึ่งที่เห็นนี้คือการใช้ความหนาแน่นของการผสมซึ่งเป็นชุดที่ไม่ต่อเนื่องในช่วงที่เกิดขึ้นจริงp_iดังนั้นเราจึงแทนที่การแจกแจงเบต้าด้วยความหนาแน่นแบบไม่ต่อเนื่องของ. จากนั้นใช้การประมาณการผสมสามารถแสดงเป็นคำได้โดยเลือกค่ามีความน่าจะเป็นและสมมติว่าการทดลอง bernoulli ทั้งหมดมีความน่าจะเป็นนี้ เห็นได้ชัดว่าการประมาณเช่นนี้จะทำงานได้ดีค่าส่วนใหญ่ควรจะคล้ายกัน นี่หมายความว่าโดยทั่วไปแล้วสำหรับการกระจายค่าของชุด @wolfies อย่างสม่ำเสมอส่งผลให้การประมาณค่าไม่ดีอย่างน่าประหลาดใจเมื่อใช้การกระจายการผสมเบตา สิ่งนี้ยังอธิบายว่าเหตุใดการประมาณจึงดีกว่าสำหรับ - มันแพร่กระจายน้อยกว่า
ผสมแล้วใช้สังเกตเฉลี่ยมากกว่าทางเลือกที่เป็นไปได้ทั้งหมดในครั้งเดียว Pเพราะตอนนี้ "ผสม" เป็นเหมือนถัวเฉลี่ยถ่วงน้ำหนักก็ไม่อาจทำสิ่งใดดีกว่าการใช้ที่ดีที่สุดเดียวPดังนั้นหากกระจายออกไปอย่างเพียงพอจะไม่มีเดี่ยวที่สามารถประมาณค่าทั้งหมดได้ดี
สิ่งหนึ่งที่ผมได้พูดในคำตอบอื่น ๆ ของฉันก็คือว่ามันอาจจะดีกว่าที่จะใช้เป็นส่วนผสมของการกระจายเบต้าในช่วงที่ถูก จำกัด - แต่นี้ยังจะไม่ช่วยนี่เพราะนี้จะยังคงผสมมากกว่าหนึ่งเดียว Pสิ่งที่สมเหตุสมผลคือการแบ่งช่วงเวลาออกเป็นชิ้น ๆ และมีทวินามภายในแต่ละชิ้น ตัวอย่างเช่นเราสามารถเลือกเป็นตัวแยกของเราและใส่สองชื่อให้ได้เก้า Binomials ภายในแต่ละช่วงความน่าจะเป็นโดยทั่วไปภายในแต่ละการแยกเราจะพอดีกับการประมาณอย่างง่ายเช่นการใช้ทวินามที่มีความน่าจะเป็นเท่ากับค่าเฉลี่ยของในช่วงนั้น ถ้าเราทำให้ช่วงเวลามีขนาดเล็กพอการประมาณจะดีขึ้นโดยพลการ แต่โปรดทราบว่าสิ่งทั้งหมดนี้ทำให้เราต้องจัดการกับการทดลองทวินามแบบอิสระที่มีความน่าจะเป็นต่างกันแทนที่จะเป็นการทดลองแบบBernoulli อย่างไรก็ตามส่วนก่อนหน้าของคำตอบนี้แสดงให้เห็นว่าเราสามารถทำการคำนวณที่แน่นอนได้หากจำนวนทวินามมีขนาดเล็กพอเพียงประมาณ 10-15 หรือมากกว่านั้น
ในการขยายคำตอบจากเบอเนลลีไปยังคำตอบทวินามเราเพียงแค่ "ตีความใหม่" ว่าตัวแปรคืออะไร เราเพียงแค่ระบุว่า - สิ่งนี้จะลดลงไปเป็นใช้ Bernoulli ดั้งเดิมแต่ตอนนี้บอกว่า binomials ที่ประสบความสำเร็จมาจากไหน ดังนั้นกรณีตอนนี้หมายความว่า "ความสำเร็จ" ทั้งหมดมาจากทวินามที่สามและไม่มีจากสองครั้งแรก
โปรดทราบว่านี่ยังคงเป็น "เลขชี้กำลัง" ซึ่งจำนวนการคำนวณเป็นเช่นโดยที่คือจำนวนทวินามและคือขนาดกลุ่ม - ดังนั้นคุณจึงมีที่p_j) แต่นี่จะดีกว่าที่คุณจะต้องจัดการด้วยการใช้ตัวแปรสุ่มแบบเบอเนลลี ตัวอย่างเช่นสมมติว่าเราแบ่งความน่าจะเป็นเป็นกลุ่มด้วยความน่าจะเป็นในแต่ละกลุ่ม สิ่งนี้ให้การคำนวณเมื่อเปรียบเทียบกับ
โดยการเลือกกลุ่มและสังเกตว่าขีด จำกัด ได้เกี่ยวกับซึ่งเป็นเรื่องเกี่ยวกับเซลล์เราได้อย่างมีประสิทธิภาพสามารถใช้วิธีนี้เพื่อเพิ่มสูงสุดเพื่อn
ถ้าเราทำให้ประมาณขัดเกลาโดยลดเราจะเพิ่มขนาด "เป็นไปได้" สำหรับn หมายความว่าคุณสามารถมีประสิทธิภาพประมาณ125นอกเหนือจากนี้การประมาณปกติควรแม่นยำอย่างยิ่ง
R
ที่มีประสิทธิภาพมากและจับมากค่าขนาดใหญ่กว่าของโปรดดูstats.stackexchange.com/a/41263 ตัวอย่างเช่นมันแก้ปัญหานี้สำหรับให้การกระจายเต็มรูปแบบภายในไม่กี่วินาที (A เทียบเคียงMathematica 9วิธีการแก้ปัญหา - ดู @wolfies' คำตอบ - นอกจากนี้ยังมีประสิทธิภาพดีสำหรับขนาดเล็กแต่ไม่สามารถดำเนินการการดำเนินการด้วยเช่นค่าขนาดใหญ่ของ .)n = 10 4 n n
(โดยทั่วไปว่ายาก) pmf คือ รหัส R:
p <- seq(1, 16) / 17
cat(p, "\n")
n <- length(p)
k <- 9
S <- seq(1, n)
A <- combn(S, k)
pr <- 0
for (i in 1:choose(n, k)) {
pr <- pr + exp(sum(log(p[A[,i]])) + sum(log(1 - p[setdiff(S, A[,i])])))
}
cat("Pr(S = ", k, ") = ", pr, "\n", sep = "")
สำหรับที่ใช้ในการตอบหมาป่าเรามี:
Pr(S = 9) = 0.1982677
R
รหัสในวิธีการแก้ปัญหาเดียวกัน (มีค่าที่แตกต่างของ ) ที่stats.stackexchange.com/a/41263 ปัญหาที่นี่แก้ไขได้ในเวลาการคำนวณทั้งหมด 0.00012 วินาที (ประมาณโดยแก้ไข 1,000 ครั้ง) เทียบกับ 0.53 วินาที (ประมาณโดยแก้ปัญหาหนึ่งครั้ง) สำหรับรหัสนี้และ 0.00058 วินาทีโดยใช้รหัสMathematicaของ Wolfies (ประมาณโดยแก้ 1,000 ครั้ง) R