一位朋友问我以下问题。我不能帮她,但我希望有人可以向我解释。我找不到类似的示例。感谢您的帮助和解释。
问:100次抛硬币实验的结果记录为0 =“ Tail”和1 =“ Head”。输出x是0的字符串,长度为100的1。计算x中得到1-0-0的次数,它是20(例如:如果x =(001001110100),1-0-0发生2次)。您认为这是一个公平的硬币吗?
一位朋友问我以下问题。我不能帮她,但我希望有人可以向我解释。我找不到类似的示例。感谢您的帮助和解释。
问:100次抛硬币实验的结果记录为0 =“ Tail”和1 =“ Head”。输出x是0的字符串,长度为100的1。计算x中得到1-0-0的次数,它是20(例如:如果x =(001001110100),1-0-0发生2次)。您认为这是一个公平的硬币吗?
Answers:
我的第一个尝试是在计算机上对此进行仿真,该计算机可以非常快速地翻转许多公平的硬币。以下是一百万次试用的示例。事件“ 在硬币翻转中模式'1-0-0'发生的次数是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)
对于分析方法,您可以使用以下事实:“在100次硬币翻转中观察20个或更多序列'1-0-0'的概率等于1减去在100次硬币翻转中产生20个序列的概率”。。这可以通过以下步骤解决:
您可以翻转直到获得一个序列'1-0-0'所需的次数的分布可以计算如下:
让我们分析一下获得“ 1-0-0”作为马尔可夫链的方法。我们遵循翻转字符串后缀描述的状态:“ 1”,“ 1-0”或“ 1-0-0”。例如,如果您具有以下八个翻转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”(您从状态“ 0”开始,还没有翻转过头)后达到模式“ 1-0-0”的概率,在翻转中是概率的一半在翻转中处于状态“ 1-0” :
其中是第个斐波那契数。非条件概率是和
您可以通过卷积计算。
您将有可能观察到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)
当'1 = head'的概率为并且翻转是独立的时,我们可以概括上述计算翻转中图案的概率的计算。
现在,我们使用斐波那契数的概括:
现在的概率为:
和
当我们绘制此图时,您将得到:
因此,尽管对于普通硬币0.0003247的p值很小,但我们必须注意,对于不同的不普通硬币,p值并不太好(仅单个订单)。当将原假设()与替代假设进行比较时,似然比或贝叶斯因子约为11 。这意味着后验几率仅比先验几率高十倍。
因此,如果您在实验之前认为硬币不太可能不公平,那么现在您仍然应该认为硬币不太可能不公平。
通过计数正面和反面的数目,并使用二项式分布对这些观察进行建模并检验该观察是否特殊,可以更容易地测试公平硬币的概率。
但是,平均而言,硬币可能会翻转相同数量的正反面,但就某些模式而言并不公平。例如,硬币可能与后续的硬币翻转具有某种相关性(我想象某种机制,在硬币金属内部的空腔中充满沙子,沙子会像沙漏一样流向上次硬币翻转的另一端,后者正在加载硬币更有可能落在与前一面相同的一面)。
让第一硬币倒装等于概率头部和尾部和后翻转与概率的同一侧前翻转。然后,类似于本文开头的模拟,对于模式“ 1-0-0”超过20的次数,将给出以下概率:
您可以看到有可能使人们更容易地观察到“ 1-0-0”模式(在左右某个硬币具有负相关性的情况下),但是更具戏剧性的是,它可以使它变得更少可能会遵循“ 1-0-0”模式。对于低您会在一个头之后获得很多尾巴,这是“ 1-0-0”模式的第一个“ 1-0”部分,但是您不会经常在“ 0-0”中连续出现两个尾巴模式的一部分。高值则相反。
# 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”。