コインが公正かどうかの確認


9

友人から次の質問をされました。私は彼女を助けることができませんでしたが、誰かがそれを私に説明してくれることを願っています。同様の例は見つかりませんでした。ヘルプと説明をありがとうございます。

Q:100コイントス実験の結果が0 = "Tail"および1 = "Head"として記録されます。出力xは、0と長さ100の1の文字列です。xで1-0-0を取得する回数が計算され、20になります(例:if x =(001001110100)、1-0-0 2回発生します)。これは公正なコインだと思いますか?


1
この質問は正確な現実の問題のようには聞こえません。これは宿題ですか?
Sextus Empiricus

1
私はわかりません。私が示したように、それは友人から私に尋ねられました。私は彼女を助けることができませんでしたが、私はまだこの種の質問を解決または回答する方法を学びたいと思っています。@ MartijnWeterings
Jimmy Dur

2
stats.stackexchange.com/questions/158490/…には、状況のかなり完全な説明が含まれています。詳細については、stats.stackexchange.com
…を

1
@JimmyDurあなたは質問の解釈や意味について何の考えも持っていません。例えば。質問は「これは公正なコインだと思いますか?」と言います。これはトリックの質問のように聞こえます。
Sextus Empiricus

1
...しかし、特定の観点から、これはそれに取り組むための正しい方法ではないかもしれません。たとえば、コインの公平性の事前確率分布のようなものを知っている場合は、ベイズのアプローチを望むかもしれません。背景や状況についての知識がなければ、計算は単なる数学の演習であり、「これは公正なコインだと思いますか?」という明確な質問に対する答えではありません。
Sextus Empiricus

回答:


14

シミュレーションで問題を解決する

私の最初の試みは、コンピューターでこれをシミュレートすることでした。以下は、1件のミリオン裁判の例です。「パターンXのパターン1-0-0がn=100回発生する回数X = 100のコインフリップが20回以上である」というイベントは、およそ3000回の試行ごとに1回発生するため、観察したことはあまりありません(フェアコイン)。

ヒストリグラムはシミュレーション用であり、線は以下でさらに説明される正確な計算であることに注意してください。

ヒストグラム

set.seed(1)

# number of trials
n <- 10^6

# flip coins
q <- matrix(rbinom(100*n, 1, 0.5),n)

# function to compute number of 100 patterns
npattern <- function(x) {
  sum((1-x[-c(99,100)])*(1-x[-c(1,100)])*x[-c(1,2)])
}

# apply function on data 
counts <- sapply(1:n, function(x) npattern(q[x,]))
hist(counts, freq = 0) 

# estimated probability
sum(counts>=20)/10^6
10^6/sum(counts>=20)

正確な計算で問題を解決する

分析的アプローチでは、「100コインフリップで20以上のシーケンス '1-0-0'を観察する確率は、1から20シーケンスを作成するために100フリップ以上かかる確率を引いたものに等しい」という事実を使用できます。。これは、次の手順で解決されます。

「1-0-0」をめくる確率の待機時間

fN,x=1(n)

マルコフ連鎖として「1-0-0」に到達する方法を分析しましょう。フリップの文字列のサフィックス「1」、「1-0」、または「1-0-0」によって記述される状態に従います。たとえば、次の8つのフリップ10101100がある場合、「1」、「1-0」、「1」、「1-0」、「1」、「1」、 「1-0」、「1-0-0」、「1-0-0」に到達するまでに8回のフリップが必要でした。すべてのフリップで状態「1-0-0」に到達する確率は同じではないことに注意してください。したがって、これを二項分布としてモデル化することはできません。代わりに、確率のツリーに従う必要があります。状態「1」は「1」と「1-0」に入ることができ、状態「1-0」は「1」と「1-0-0」に入ることができます、状態「1-0-0」は吸収状態です。次のように書き留めることができます。

           number of flips
           1   2   3   4   5   6   7   8   9   ....   n

'1'        1   1   2   3   5   8  13  21  34   ....   F_n
'1-0'      0   1   1   2   3   5   8  13  21          F_{n-1}
'1-0-0'    0   0   1   2   4   7   12 20  33          sum_{x=1}^{n-2} F_{x}

nn1

fNc,x=1(n)=Fn22n1

Fii

fN,x=1(n)=k=1n20.5kfNc,x=1(1+(nk))=0.5nk=1n2Fk

フリップする確率の待機時間k

これは畳み込みによって計算できます。

fN,x=k(n)=l=1nfN,x=1(l)fN,x=1(nl)

20以上の「1-0-0」パターンを観察する確率が得られます(コインが公正であるという仮説に基づく)

> # exact computation
> 1-Fx[20]
[1] 0.0003247105
> # estimated from simulation
> sum(counts>=20)/10^6
[1] 0.000337

これを計算するRコードは次のとおりです。

# fibonacci numbers
fn <- c(1,1)
for (i in 3:99) {
  fn <- c(fn,fn[i-1]+fn[i-2])
}

# matrix to contain the probabilities
ps <- matrix(rep(0,101*33),33)

# waiting time probabilities to flip one pattern
ps[1,] <- c(0,0,cumsum(fn))/2^(c(1:101))

#convoluting to get the others
for (i in 2:33) {
  for (n in 3:101) {
     for (l in c(1:(n-2))) {
       ps[i,n] = ps[i,n] + ps[1,l]*ps[i-1,n-l]
     }  
  }
}

# cumulative probabilities to get x patterns in n flips
Fx <- 1-rowSums(ps[,1:100])

# probabilities to get x patterns in n flips
fx <- Fx[-1]-Fx[-33]

#plot in the previous histogram
lines(c(1:32)-0.5,fx)

不公平なコインの計算

xnp

ここで、フィボナッチ数列の一般化を使用します。

Fn(x)={1if n=1xif n=2x(Fn1+Fn2)if n>2

確率は次のとおりです。

fNc,x=1,p(n)=(1p)n1Fn2((1p)11)

そして

fN,x=1,p(n)=k=1n2p(1p)k1fNc,x=1,p(1+nk)=p(1p)n1k=1n2Fk((1p)11)

これをプロットすると、次のようになります。

異なるp

p=0.5p=0.33

したがって、実験前にコインが不公平である可能性は低いと考えていた場合は、今でもコインは不公平である可能性は低いと考えるべきです。


pheads=ptails

表と裏の数を数えることで公正なコインの確率をテストし、二項分布を使用してこれらの観測をモデル化し、その観測が特定のものであるかどうかをテストする方がはるかに簡単です。

ただし、コインは平均して表と裏の数は同じですが、特定のパターンに関しては公平ではない可能性があります。たとえば、コインは後続のコインフリップとある程度の相関関係があるかもしれません(私は、コインをロードしている前のコインフリップの反対側の端に向かって砂時計のように流れる砂で満たされた、コインの金属内部に空洞があるメカニズムを想像します前の側と同じ側に落ちる可能性が高くなります)。

p

相関コイン

p=0.45pp

# number of trials
set.seed(1)
n <- 10^6

p <- seq(0.3,0.6,0.02)
np <- length(p)
mcounts <- matrix(rep(0,33*np),33)

pb <- txtProgressBar(title = "progress bar", min = 0,
                     max = np, style=3)
for (i in 1:np) {
  # flip first coins
  qfirst <- matrix(rbinom(n, 1, 0.5),n)*2-1
  # flip the changes of the sign of the coin
  qrest <- matrix(rbinom(99*n, 1, p[i]),n)*2-1
  # determining the sign of the coins
  qprod <- t(sapply(1:n, function(x) qfirst[x]*cumprod(qrest[x,])))
  # representing in terms of 1s and 0s
  qcoins <- cbind(qfirst,qprod)*0.5+0.5
  counts <- sapply(1:n, function(x) npattern(qcoins[x,]))

  mcounts[,i] <- sapply(1:33, function(x) sum(counts==x))
  setTxtProgressBar(pb, i)
}
close(pb)

plot(p,colSums(mcounts[c(20:33),]),
     type="l", xlab="p same flip", ylab="counts/million trials", 
     main="observation of 20 or more times '1-0-0' pattern \n for coin with correlated flips")
points(p,colSums(mcounts[c(20:33),]))

統計での数学の使用

上記はすべて問題ありませんが、質問に対する直接の回答ではありません

「これは公正なコインだと思いますか?」

その質問に答えるには、上記の数学を使用できますが、最初に状況、目標、公平性の定義などを非常によく説明する必要があります。背景や状況についての知識がなければ、計算は単なる数学の練習であり、明確な質問。

未解決の問題の1つは、「1-0-0」のパターンをなぜ、どのように探しているかです。

  • たとえば、このパターンはターゲットではなかった可能性があります。これは調査を行うに決定されました。多分それはデータで「際立った」もので、実験に注目さたものだったのかもしれません。その場合、複数の比較を効果的に行っていると考える必要があります。
  • 別の問題は、上記で計算された確率がp値であることです。p値の意味は慎重に検討する必要があります。コインが公正である確率ではありません。代わりに、コインが公正である場合に特定の結果を観察する確率です。コインの公平性の分布を知っている環境がある場合、または合理的な仮定を立てることができる場合、これを考慮してベイジアン式を使用できます。
  • 公正なもの、不公平なもの。結局のところ、十分な試練が与えられれば、ごくわずかな不公平を見つけるかもしれません。しかし、それは関連性があり、そのような検索は偏っていませんか?頻出主義のアプローチに固執するときは、コインフェアと見なす境界のようなものを説明する必要があります(関連するエフェクトサイズ)。次に、コインが公正かどうかを判断するために、2つの片側t検定に似たものを使用できます(「1-0-0」パターンに関して)。

1
MLEを介して閉じた形式のソリューションを追求しないのはなぜですか?
Digio 2019

p^ML=argmaxp[P(X1,...,Xn|p,n)]XBinomial(n,p)p^ML
Digio

pp

X={0,0,1,0,0,1,1,1,0,1,0,0}p^=xn=512=0.421.96p^(1p^)n=0.280.42+0.28<0.50

3
@FrankHarrellも、フリップが無相関であると私たちに思わせる問題設定には何もありません。問題の設定は、情報に関しては比較的貧弱です。フリップの相関関係に入る私の例は、質問の広さをカバーするためだけのものです。これそれに答える方法だとは言っていません。しかし、誰か(おそらくOP)が、DNAシーケンスや、相関の可能性がより理にかなっている他の問題のセットアップについて調査を行っているとしたら、彼らはそれがどうなるかという例を持っています。
Sextus Empiricus
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.