一連のnベルヌーイ試行におけるk回の成功の確率


13

私は25回の試行のブロックで8回の試行が連続して正しい確率を見つけようとしています.8回の試行を連続して取得するには合計8つのブロック(25回の試行のうち)があります。推測に基づいて試行が正解になる確率は1/3で、8行連続で正解になるとブロックが終了します(したがって、8行連続で正解になることは技術的に不可能です)。これが発生する確率を見つけるにはどうすればよいですか?私は(1/3)^ 8を使用して、8を連続で取得する確率として正しいと考えてきました。17を掛けると、25回の試行のブロックで8を連続で取得する可能性が17あります。可能性* 8ブロックで136が得られますが、1-(1-(1/3)^ 8)^ 136はこの状況で8が正しい可能性を与えますか?


1
与えられた議論の問題は、考慮された出来事が独立していないということだと思います。たとえば、単一のブロックを考えます。(a)位置6で始まる8つのランがない、(b)位置7で始まるランある、(c)位置8で始まるランがない位置、たとえば9から15で始まるランの確率?
枢機

回答:


14

物事を追跡することにより、正確な式を得ることができます。

ましょう成功とする確率もK = 8あなたがカウントしたい行の成功数になります。これらは問題のために修正されています。変数値はmで、ブロックに残っている試行回数です。およびj、すでに観測された連続成功の数。m回の試行が使い果たされる前に、最終的にk個の成功を達成する可能性をf p kj m と書く。我々は、シークF 1 / 3 8p=1/3k=8mjkmfp,k(j,m)f1/3,8(0,25)

成功を、m > 0回の試行で続けて見たと仮定します。次の試行は成功であり、確率はpです(この場合、jj + 1に増加します)。または、確率1 - pの失敗です。この場合、j0にリセットされます。どちらの場合でも、m1減少します。ホセjthm>0pjj+11pj0m1

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

条件を出発物質として、我々は明らか結果有するのためのM 0すなわち、すでに見てきたK行のを)と、F 、P KJ M = 0のため、Kを- j > mつまりkを得るのに十分な試行が残っていないfp,k(k,m)=1m0kfp,k(j,m)=0kj>mk行で)。計算が高速かつ簡単になりました(動的プログラミングを使用、またはこの問題のパラメーターが非常に小さいため、再帰)

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

ときに、この利回り80897 / 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秒の計算後、出力はです。これは高いように見えますが、標準エラーはわずか1.7です。さらに10 6回繰り返して0.001867を生成しました。標準エラーは予想よりも0.3少ないだけです。(二重チェックとして、このコードの以前のバージョンには微妙なバグがあったため、Mathematicaで 400,000回の反復を実行し、0.0018475の推定値を得ました。)0.002131060.0018670.30.0018475

この結果は、の1/10未満の推定値である問題です。しかし、おそらく、私は完全にそれを理解していない:「8つの試験が行に修正得るためにあなたが8つの総ブロックを持っている...」の別の解釈は、回答ビーイングが対等に求められていることである1 - 1 - F 1 / 3 80を25 8= 0.0149358 ...1(1(1/3)8)1360.02051(1f1/3,8(0,25))8)=0.0149358...


13

@whuberの優れた動的プログラミングソリューションは一見の価値がありますが、その実行時間は試行の総数mと目的の試行の長さkに対してが、行列の累乗法はOk 3 log m 。場合mがよりはるかに大きいKO(k2m)mkO(k3log(m))mk、以下の方法が速くなります。

どちらのソリューションも、これまでのストリングの最後の正しい試行回数を表す状態と、目的の正しい試行を連続して達成するための状態を持つマルコフ連鎖として問題を考慮します。遷移行列では、確率障害が発生すると状態0に戻り、そうでない場合は確率1 - pで次の状態に進みます(最終状態は吸収状態です)。この行列をn乗することにより、最初の行と最後の列の値は、k = 8行が連続して見える確率です。Pythonの場合:p1pnk=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

この答えに従って、@ Neil Gによるマルコフチェーンアプローチをもう少し説明し、そのような問題の一般的な解決策を提供しRます。行の正しい試行の望ましい数をで、試行の数をnで、正しい試行をW(勝利)で、誤った試行をF(失敗)で示しましょう。試行を追跡するプロセスでは、現在のシーケンスの最後に8つの正しい試行の連続と正しい試行の数が既にあるかどうかを知りたいと思います。9つの状態(k + 1)があります。knWFk+1

:まだ 8つの正しい試行が連続していないため、最後の試行は Fでした。A8F

:まだ 8つの正しい試行が連続していないため、最後の2つの試行は F Wでした。B8FW

:まだ 8つの正しい試行が連続していないため、最後の3つの試行は F W Wでした。C8FWW

:まだ 8つの正しい試行が連続していないため、最後の8つの試行は F W W W W W W W Wでした。H8FWWWWWWW

8つの正しい試行が連続して行われました!I8

状態への移行の確率状態からAはであるP = 1 / 3と確率で1 - P = 2 / 3、我々は状態にとどまるA。状態からB状態への移行の確率Cは、ある1 / 3及び確率で2 / 3我々はバックに移動A。等々。状態がIの場合BAp=1/31p=2/3ABC1/32/3AI場合、そこに留まります。

これから、遷移行列Mを構築できます(Mの各列は1に合計され、すべてのエントリが正であるため、M左確率行列と呼ばれます)。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状態(列)I IN(行)N試験を。右端の列は状態Iに対応し、右下隅のエントリは1のみです。我々は状態にあることをいったんこれが意味I、に滞在する確率私はある1。状態Aから状態Iに到達する確率は、n = 25ステップであり、これは、nMnjinI1II1IAn=25M25M9125M25Rexpm

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

AI0.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つを連続して取得することが不可能なトライアルが含まれていますか?
ミシェル

私の場合は、Rシミュレーションでより小さい値が得られます。誰かがシミュレーションに異議を唱える場合の単純な確率問題としてこれを解決する代数的解決策があるかどうか、私は興味があります。
AcidNynex

1
得られた出力を提供して比較できるようにすることで、この答えが改善されると思います。もちろん、ヒストグラムのようなものを追加することはさらに良いでしょう!このコードは、一見したところ私には正しく見えます。乾杯。:)
枢機

3

ここでMathematicaのマルコフ連鎖のアプローチのためのシミュレーション、ノートそれはMathematicaのインデックスにより、1 じゃない 0

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

これは組み込み関数ProbabilityDiscreteMarkovProcess 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.