ความน่าจะเป็นที่จะประสบความสำเร็จในลำดับ k ของการทดลอง n ของเบอร์นูลลี


13

ฉันพยายามที่จะหาความน่าจะเป็นที่จะได้ 8 การทดลองในแถวที่ถูกต้องในบล็อก 25 การทดลองคุณมี 8 บล็อกทั้งหมด (25 การทดลอง) เพื่อให้ได้การทดลอง 8 ครั้งที่ถูกต้องในแถว ความน่าจะเป็นของการทดลองใช้ถูกต้องตามการคาดเดาคือ 1/3 หลังจากได้ 8 ในแถวที่ถูกต้องบล็อกจะสิ้นสุด (ดังนั้นการได้รับมากกว่า 8 ในแถวที่ถูกต้องนั้นเป็นไปไม่ได้ในทางเทคนิค) ฉันจะค้นหาความน่าจะเป็นที่จะเกิดขึ้นได้อย่างไร ฉันคิดตามลำดับการใช้งาน (1/3) ^ 8 เนื่องจากความน่าจะเป็นที่จะได้ 8 ในแถวที่ถูกต้องมีโอกาส 17 ที่เป็นไปได้ที่จะได้ 8 ต่อเนื่องเป็นแถวในบล็อก 25 การทดลองถ้าฉันคูณ 17 ความเป็นไปได้ * 8 บล็อกที่ฉันได้รับ 136 จะเป็น 1- (1- (1/3) ^ 8) ^ 136 ให้โอกาสฉันที่จะได้ 8 ในแถวที่ถูกต้องในสถานการณ์นี้หรือฉันขาดพื้นฐานบางอย่างที่นี่


1
ฉันเชื่อว่าปัญหาเกี่ยวกับการโต้แย้งที่กำหนดคือเหตุการณ์ที่พิจารณาไม่เป็นอิสระ ตัวอย่างเช่นพิจารณาบล็อกเดียว ถ้าฉันบอกคุณว่า (ก) มีการทำงานไม่มีแปดที่เริ่มต้นที่ตำแหน่ง 6 (ข) มีคือการทำงานเริ่มต้นที่อันดับที่ 7 และ (ค) มีการทำงานไม่มีการเริ่มต้นที่ตำแหน่ง 8 สิ่งที่จะบอกคุณเกี่ยวกับ ความน่าจะเป็นของการวิ่งเริ่มต้นที่ตำแหน่งพูดว่า 9 ถึง 15 หรือไม่
พระคาร์ดินัล

คำตอบ:


14

โดยการติดตามของสิ่งที่คุณจะได้รับสูตรที่แน่นอน

ให้เป็นความน่าจะเป็นของความสำเร็จและคือจำนวนความสำเร็จในแถวที่คุณต้องการนับ สิ่งเหล่านี้ได้รับการแก้ไขสำหรับปัญหา ค่าตัวแปรคือจำนวนการทดลองที่เหลืออยู่ในบล็อก และ , จำนวนความสำเร็จต่อเนื่องที่สังเกตได้แล้ว ให้โอกาสในการประสบความสำเร็จในที่สุดประสบความสำเร็จในแถวก่อนการทดลองจะหมดเขียน(เจม) เราพยายามที่(0,25)k = 8 ม. เจk เมตรP , K ( J , ม. ) 1 / 3 , 8 ( 0 , 25 )p=1/3k=8mjkmfp,k(j,m)f1/3,8(0,25)

สมมติว่าเราเพิ่งเห็นความสำเร็จของติดต่อกันด้วยการทดลองการทดลองครั้งต่อไปอาจเป็นความสำเร็จโดยมีความน่าจะเป็น - ในกรณีที่เพิ่มขึ้นเป็น -; หรืออื่น ๆ มันคือความล้มเหลวกับความน่าจะเป็น --in กรณีที่จะถูกรีเซ็ตเป็น0ในทั้งสองกรณีลดลง1จากไหน m > 0 p j j + 1 1 - p j 0 m 1jthm>0pjj+11pj0m1

fp,k(j,m)=pfp,k(j+1,m1)+(1p)fp,k(0,m1).

เนื่องจากเงื่อนไขเริ่มต้นเรามีผลลัพธ์ที่เห็นได้ชัดสำหรับ ( กล่าวคือเราได้เห็นในแถว) และสำหรับ ( กล่าวคือมีการทดลองไม่เพียงพอที่จะรับในแถว) ตอนนี้มันรวดเร็วและตรงไปตรงมา (โดยใช้การเขียนโปรแกรมแบบไดนามิกหรือเนื่องจากพารามิเตอร์ของปัญหานี้มีขนาดเล็กมากการเรียกซ้ำ) เพื่อคำนวณm 0 k f p , kfp,k(k,m)=1m0kk - j > m kfp,k(j,m)=0kj>mk

fp,8(0,25)=18p817p945p16+81p1736p18.

เมื่ออัตราผลตอบแทนนี้0.001879380897 / 43046721 0.0018793p=1/380897/430467210.0018793

Rรหัสที่ค่อนข้างเร็วในการจำลองนี้คือ

hits8 <- function() {
    x <- rbinom(26, 1, 1/3)                # 25 Binomial trials
    x[1] <- 0                              # ... and a 0 to get started with `diff`
    if(sum(x) >= 8) {                      # Are there at least 8 successes?
        max(diff(cumsum(x), lag=8)) >= 8   # Are there 8 successes in a row anywhere?
    } else {
        FALSE                              # Not enough successes for 8 in a row
    }
}
set.seed(17)
mean(replicate(10^5, hits8()))

หลังจาก 3 วินาทีของการคำนวณผลลัพธ์คือ0.00213แม้ว่าสิ่งนี้จะดูสูง แต่ก็มีข้อผิดพลาดมาตรฐาน 1.7 ข้อเท่านั้น ฉันทำซ้ำอีกซึ่งให้ผล : ข้อผิดพลาดมาตรฐานเพียงน้อยกว่าที่คาดไว้ (เป็นการตรวจสอบอีกครั้งเนื่องจากรหัสรุ่นก่อนหน้านี้มีข้อบกพร่องเล็กน้อยฉันจึงวิ่งซ้ำ 400,000 ครั้งในMathematica เพื่อรับประมาณ )0.00213 0.001867 0.3 0.00184751060.0018670.30.0018475

ผลลัพธ์นี้น้อยกว่าหนึ่งในสิบของค่าประมาณในคำถาม แต่บางทีฉันยังไม่เข้าใจอย่างเต็มที่: การตีความอีกครั้งของ "คุณมี 8 บล็อกทั้งหมด ... เพื่อให้ได้ 8 การทดลองที่ถูกต้องในหนึ่งแถว" คือคำตอบที่ถูกค้นหาเท่ากับ...1 - ( 1 - 1 / 3 , 8 ( 0 , 25 ) ) 8 ) = 0.0149358 ...1(1(1/3)8)1360.02051(1f1/3,8(0,25))8)=0.0149358...


13

ในขณะที่ @ whuber ของการแก้ปัญหาการเขียนโปรแกรมแบบไดนามิกที่ยอดเยี่ยมมีมูลค่าการอ่านรันไทม์ของมันคือเทียบกับจำนวนทั้งหมดของการทดลองและความยาวการทดลองที่ต้องการในขณะที่วิธีการยกกำลังเมทริกซ์คือ(M)) หากมีขนาดใหญ่กว่าวิธีการต่อไปนี้จะเร็วกว่าm kO(k2m)mkm kO(k3log(m))mk

วิธีแก้ปัญหาทั้งสองพิจารณาปัญหาเป็นสายโซ่มาร์คอฟที่มีสถานะเป็นตัวแทนของจำนวนการทดลองที่ถูกต้องที่ส่วนท้ายของสตริงจนถึงขณะนี้และสถานะสำหรับการบรรลุการทดลองที่ถูกต้องที่ต้องการในแถว เมทริกซ์การเปลี่ยนแปลงเป็นเช่นนั้นที่เห็นความล้มเหลวด้วยความน่าจะเป็นส่งคุณกลับสู่สถานะ 0 และมิฉะนั้นความน่าจะเป็นที่จะเลื่อนคุณไปสู่สถานะถัดไป (สถานะสุดท้ายคือสถานะที่น่าสนใจ) ด้วยการเพิ่มเมทริกซ์นี้ให้แก่พลังงานที่ค่าในแถวแรกและคอลัมน์สุดท้ายคือความน่าจะเป็นที่จะเห็นหัวในแถว ใน Python:1 - p n k = 8p1pnk=8

import numpy as np

def heads_in_a_row(flips, p, want):
    a = np.zeros((want + 1, want + 1))
    for i in range(want):
        a[i, 0] = 1 - p
        a[i, i + 1] = p
    a[want, want] = 1.0
    return np.linalg.matrix_power(a, flips)[0, want]

print(heads_in_a_row(flips=25, p=1.0 / 3.0, want=8))

ให้ผลตอบแทน 0.00187928367413 ตามต้องการ


10

ตามคำตอบนี้ผมจะอธิบายวิธีการมาร์คอฟ-Chain โดย @Neil G Rอีกเล็กน้อยและให้การแก้ปัญหาทั่วไปในการแก้ไขปัญหาดังกล่าวใน ลองแสดงถึงจำนวนที่ต้องการของการทดลองที่ถูกต้องในแต่ละแถวด้วย , จำนวนการทดลองเป็นและการทดลองที่ถูกต้องโดย (ชนะ) และการทดลองที่ไม่ถูกต้องโดย (ล้มเหลว) ในกระบวนการติดตามการทดลองคุณต้องการทราบว่าคุณมีการทดลองที่ถูกต้อง 8 รายการและจำนวนการทดลองที่ถูกต้องในตอนท้ายของลำดับปัจจุบันของคุณหรือไม่ มี 9 สถานะ ( ):n W F k + 1knWFk+1

8 เอA: เราไม่ได้มีทดลองที่ถูกต้องในแถวยังและการพิจารณาคดีที่ผ่านมาเรนไฮน์8F

8 F WB : เราไม่ได้มีทดลองที่ถูกต้องในแถว ๆ และทั้งสองการทดลองที่ผ่านมาเป็นFW8FW

8 F W WC : เราไม่ได้มีทดลองที่ถูกต้องในแถวยังและช่วงสามทดลองเป็นFWW8FWW

8 F W W W W W W W WH : เราไม่ได้มีทดลองที่ถูกต้องในแถวยังและที่ผ่านมาแปดทดลองเป็นFWWWWWWW8FWWWWWWW

8I : เรามีการทดลองที่ถูกต้องติดต่อกัน!8

ความน่าจะเป็นในการเคลื่อนย้ายไปยังรัฐจากรัฐเป็นและมีความน่าจะเป็นเราอยู่ในรัฐ จากรัฐน่าจะเป็นของการย้ายไปยังรัฐเป็นและมีความน่าจะเป็นเราย้ายกลับไป และอื่น ๆ หากเราอยู่ในสถานะเราอยู่ที่นั่นP = 1 / 3 1 - P = 2 / 3 B C 1 /BAp=1/31p=2/3ABC1/32/3AI

จากนี้เราสามารถสร้างเมทริกซ์การเปลี่ยนแปลง (เนื่องจากแต่ละคอลัมน์ของบวกกับและรายการทั้งหมดเป็นค่าบวกเรียกว่าเมทริกซ์สุ่มซ้าย ):9×9 MM1M

M=(2/32/32/32/32/32/32/32/301/30000000001/30000000001/30000000001/30000000001/30000000001/30000000001/30000000001/31)

แต่ละคอลัมน์และแถวสอดคล้องกับหนึ่งรัฐ หลังจากการทดลองรายการของให้ความน่าจะเป็นที่จะได้รับจากสถานะ (คอลัมน์) ถึงสถานะ (แถว) ในการทดลองคอลัมน์ขวาสุดสอดคล้องกับสถานะและรายการเดียวคือที่มุมล่างขวา ซึ่งหมายความว่าเมื่อเราอยู่ในสถานะน่าจะเป็นที่จะอยู่ในคือ1เรามีความสนใจในความน่าจะเป็นในการเข้าสู่สถานะจากสถานะในขั้นตอนซึ่งสอดคล้องกับรายการด้านล่างซ้ายของM n j ฉันn ฉัน1 ฉันฉัน1 ฉันA n = 25 M 25 M 25nMnjinI1II1IAn=25M25(เช่น ) ทั้งหมดที่เราต้องทำตอนนี้คือการคำนวณ{25} เราสามารถทำได้ด้วยฟังก์ชั่นเพาเวอร์เมทริกซ์จากแพ็คเกจ : M25M9125M25Rexpm

library(expm)

k <- 8   # desired number of correct trials in a row
p <- 1/3 # probability of getting a correct trial
n <- 25  # Total number of trials 

# Set up the transition matrix M

M <- matrix(0, k+1, k+1)

M[ 1, 1:k ] <- (1-p)

M[ k+1, k+1 ] <- 1

for( i in 2:(k+1) ) {

  M[i, i-1] <- p

}

# Name the columns and rows according to the states (A-I)

colnames(M) <- rownames(M) <- LETTERS[ 1:(k+1) ]

round(M,2)

     A    B    C    D    E    F    G    H I
A 0.67 0.67 0.67 0.67 0.67 0.67 0.67 0.67 0
B 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0
C 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0.00 0
D 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0.00 0
E 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0.00 0
F 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0.00 0
G 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0.00 0
H 0.00 0.00 0.00 0.00 0.00 0.00 0.33 0.00 0
I 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.33 1

# Calculate M^25

Mn <- M%^%n
Mn[ (k+1), 1 ]
[1] 0.001879284

ความน่าจะเป็นที่จะได้รับจากสถานะไปยังสถานะใน 25 ขั้นตอนคือตามที่กำหนดโดยคำตอบอื่น ๆฉัน0.001879284AI0.001879284


3

นี่คือรหัส R ที่ฉันเขียนเพื่อจำลองสิ่งนี้:

tmpfun <- function() {
     x <- rbinom(25, 1, 1/3)  
     rx <- rle(x)
     any( rx$lengths[ rx$values==1 ] >= 8 )
}

tmpfun2 <- function() {
    any( replicate(8, tmpfun()) )
}

mean(replicate(100000, tmpfun2()))

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


ฟังก์ชั่นของคุณรวมถึงการทดลองที่เป็นไปไม่ได้ที่จะได้ 8 ในแถวที่ถูกต้องหรือไม่ตัวอย่างเช่น "run" เริ่มต้นที่ Trial 20 หรือไม่?
มิเชล

ส่วนใหญ่แล้วฉันการจำลอง R ของฉันก็ให้คุณค่าที่น้อยลงเช่นกัน ฉันแค่อยากรู้ว่าถ้ามีวิธีแก้ปัญหาพีชคณิตเพื่อแก้ปัญหานี้เป็นปัญหาความน่าจะเป็นง่ายๆในกรณีที่มีคนโต้แย้งการจำลอง
AcidNynex

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

3

นี่คือการจำลองแบบMathematicaสำหรับแนวทางลูกโซ่มาร์คอฟโปรดทราบว่าMathematicaจัดทำดัชนีโดยไม่ใช่ :010

M = Table[e[i, j] /. {
    e[9, 1] :> 0,
    e[9, 9] :> 1,
    e[_, 1] :> (1 - p),
    e[_, _] /; j == i + 1 :> p,
    e[_, _] :> 0
  }, {i, 1, 9}, {j, 1, 9}];

x = MatrixPower[M, 25][[1, 9]] // Expand

18p817p945p16+81p1736p18

p=1.03.0

x /. p -> 1/3 // N

0.00187928

สิ่งนี้สามารถประเมินได้โดยตรงโดยใช้ฟังก์ชัน builtin ProbabilityและDiscreteMarkovProcess Mathematica :

Probability[k[25] == 9, Distributed[k, DiscreteMarkovProcess[1, M /. p -> 1/3]]] // N

0.00187928

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