根據子序列出現的頻率檢查硬幣是否公平
100 次拋硬幣實驗的結果記錄為“尾巴”為 0,“正面”為 1。輸出 $ x $ 是一串長度為 100 的 0 和 1。序列 1-0-0 出現的次數 $ x $ 是計算出來的。例如,如果 $ x=(00\underline{100}1110\underline{100}) $ , 1-0-0 出現 2 次。鑑於 1-0-0 發生了 20 次,你認為這是一枚公平的硬幣嗎?
有朋友問我前面的問題。我無法幫助她,但我希望有人可以向我解釋。我找不到任何類似的例子。
通過模擬解決問題
我的第一次嘗試是在計算機上模擬這個,它可以非常快速地翻轉許多公平的硬幣。以下是一百萬次試驗的示例。事件’表示次數 $ X $ 模式“1-0-0”出現在 $ n=100 $ 硬幣翻轉是 20 次或更多' 大約每三千次試驗發生一次,所以你觀察到的可能性不大(對於一枚公平的硬幣)。
請注意,直方圖用於模擬,而線是下面進一步解釋的精確計算。
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)
用精確計算解決問題
對於分析方法,您可以使用*“在一百次擲硬幣中觀察到 20 個或更多序列“1-0-0”的概率等於 1 減去需要超過一百次翻轉才能完成其中 20 次的概率。序列'*。(有關計數和等待時間之間的這種對應關係,另請參見:https ://stats.stackexchange.com/a/450135 )
這通過以下步驟解決:
翻轉“1-0-0”概率的等待時間
分佈, $ f_{N,x=1}(n) $ ,你需要翻轉的次數直到你得到一個序列 ‘1-0-0’ 可以計算如下:
讓我們分析一下馬爾可夫鏈如何到達“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’。請注意,您在每次翻轉中達到狀態“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}
以及在擲出第一個“1”後達到模式“1-0-0”的概率(您從狀態“0”開始,還沒有翻轉正面),在 $ n $ 翻轉是處於狀態“1-0”的概率的一半 $ n-1 $ 翻轉:
$$ f_{N_c,x=1}(n) = \frac{F_{n-2}}{2^{n-1}} $$
在哪裡 $ F_i $ 是個 $ i $ -th 斐波那契數。非條件概率是一個和
$$ f_{N,x=1}(n) = \sum_{k=1}^{n-2} 0.5^{k} f_{N_c,x=1}(1+(n-k)) = 0.5^{n} \sum_{k=1}^{n-2} F_{k} $$
翻轉概率的等待時間 $ k $ 時間“1-0-0”
這可以通過卷積計算。
$$ f_{N,x=k}(n) = \sum_{l=1}^{n} f_{N,x=1}(l)f_{N,x=1}(n-l) $$
您將獲得觀察 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)
計算不公平硬幣
我們可以概括上述觀察概率的計算 $ x $ 中的模式 $ n $ 翻轉,當 ‘1=head’ 的概率為 $ p $ 並且翻轉是獨立的。
我們現在使用斐波那契數的推廣:
$$ F_{n}(x) = \begin{cases} 1 & \quad \text{if $n=1$} \ x & \quad \text{if $n=2$} \ x(F_{n-1}+ F_{n-2}) & \quad \text{if $n>2$} \end{cases} $$
現在的概率為:
$$ f_{N_c,x=1,p}(n) = (1-p)^{n-1} F_{n-2}((1-p)^{-1}-1) $$
和
$$ f_{N,x=1,p}(n) = \sum_{k=1}^{n-2} p(1-p)^{k-1} f_{N_c,x=1,p}(1+n-k) = p(1-p)^{n-1}\sum_{k=1}^{n-2} F_{k}((1-p)^{-1}-1) $$
當我們繪製此圖時,您會得到:
因此,雖然公平硬幣 0.0003247 的 p 值很小,但我們必須注意,對於不同的不公平硬幣,它並沒有好多少(只有一個訂單)。當零假設( $ p=0.5 $ ) 與備擇假設進行比較 $ p=0.33 $ . 這意味著後驗優勢比僅比先驗優勢比高十倍。
因此,如果您在實驗之前認為硬幣不太可能不公平,那麼現在您仍然應該認為硬幣不太可能不公平。
一枚硬幣與 $ p_{heads} = p_{tails} $ 但是關於“1-0-0”事件的不公平
通過計算正面和反面的數量並使用二項分佈對這些觀察結果建模並測試觀察結果是否特殊,可以更容易地測試硬幣公平的概率。
然而,平均而言,硬幣可能會翻轉相同數量的正面和反面,但對於某些模式是不公平的。例如,硬幣可能與隨後的硬幣翻轉有一些相關性(我想像硬幣金屬內部有一些空腔充滿沙子的機制,沙子會像沙漏一樣流向前一個硬幣翻轉的另一端,它正在加載硬幣更有可能落在與前一側相同的一側)。
讓第一次擲硬幣的正面和反面概率相等,隨後的擲硬幣概率相同 $ p $ 與之前的翻轉相同的一面。然後,與本文開頭類似的模擬將給出模式“1-0-0”超過 20 次的以下概率:
你可以看到有可能讓它更容易觀察到“1-0-0”模式(大約在 $ p=0.45 $ 一枚具有某種負相關性的硬幣),但更引人注目的是,它可以使其不太可能遵守“1-0-0”模式。對於低 $ p $ 你在一個正面之後得到很多次尾巴,‘1-0-0’模式的第一個'1-0’部分,但是你不會經常得到連續兩個尾巴的'0-0’部分圖案。高位則相反 $ p $ 價值觀。
# 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-0-0”。
- 例如,也許這種模式不是目標,這是在進行調查之前決定的。也許這只是數據中“突出”的東西,是實驗後引起關注的東西。在那種情況下,需要考慮到實際上是在進行多重比較。
- 另一個問題是上面計算的概率是 p 值。需要仔細考慮 p 值的含義。這不是硬幣公平的概率。相反,如果硬幣是公平的,則觀察到特定結果的概率。如果一個人有一個知道硬幣公平性分佈的環境,或者可以做出合理的假設,那麼可以考慮到這一點並使用貝葉斯表達式。
- 什麼是公平的,什麼是不公平的。最終,經過足夠的試驗,人們可能會發現一些微小的不公平。但它是否相關,這樣的搜索沒有偏見嗎?當我們堅持使用常客的方法時,應該描述類似於我們認為硬幣公平的邊界之類的東西(一些相關的效應大小)。然後可以使用類似於兩個單邊 t 檢驗的方法來確定硬幣是否公平(關於“1-0-0”模式)。