检查硬币是否公平


9

一位朋友问我以下问题。我不能帮她,但我希望有人可以向我解释。我找不到类似的示例。感谢您的帮助和解释。

问:100次抛硬币实验的结果记录为0 =“ Tail”和1 =“ Head”。输出x是0的字符串,长度为100的1。计算x中得到1-0-0的次数,它是20(例如:如果x =(001001110100),1-0-0发生2次)。您认为这是一个公平的硬币吗?


1
这个问题听起来不像是一个真实的现实问题。这是作业吗?
Sextus Empiricus

1
我不确定。正如我指出的那样,它是一个朋友问我的。我无法帮助她,但我仍然想学习如何解决或回答此类问题。@ MartijnWeterings
Jimmy Dur

2
stats.stackexchange.com/questions/158490/…包含了相当完整的情况说明。如需更多信息,请参阅stats.stackexchange.com/...
whuber

1
@JimmyDur您对问题的解释或含义不了解。例如。您将问题表达为“您认为这是一个公平的硬币吗?”。这听起来像一个技巧问题。
Sextus Empiricus

1
...但是,从某些角度来看,这可能不是解决该问题的正确方法,并且可能希望使用贝叶斯方法,例如,如果人们知道某种类似硬币公平性的先验概率分布。在没有任何背景和情况知识的情况下,任何计算都只是数学练习,而不是对您的明确问题“您认为这是一个公平的硬币?”的答案。
Sextus Empiricus

Answers:


14

通过仿真解决问题

我的第一个尝试是在计算机上对此进行仿真,该计算机可以非常快速地翻转许多公平的硬币。以下是一百万次试用的示例。事件“ 在硬币翻转中模式'1-0-0'发生的次数是20或更多”大约每三千次试验发生一次,因此观察到的可能性很小(为了公平起见硬币)。Xñ=100

请注意,直方图用于模拟,直线是下面进一步说明的精确计算。

直方图

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'所需的次数的分布可以计算如下:FñX=1个ñ

让我们分析一下获得“ 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” :ññ-1个

FñCX=1个ñ=Fñ-22ñ-1个

其中是第个斐波那契数。非条件概率是和F一世一世

FñX=1个ñ=ķ=1个ñ-20.5ķFñCX=1个1个+ñ-ķ=0.5ñķ=1个ñ-2Fķ

等待时间翻转次'1-0-0'的概率ķ

您可以通过卷积计算。

FñX=ķñ==1个ñFñX=1个FñX=1个ñ-

您将有可能观察到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'的概率为并且翻转是独立的时,我们可以概括上述计算翻转中图案的概率的计算。Xñp

现在,我们使用斐波那契数的概括:

FñX={1个如果 ñ=1个X如果 ñ=2XFñ-1个+Fñ-2如果 ñ>2

现在的概率为:

FñCX=1个pñ=1个-pñ-1个Fñ-21个-p-1个-1个

FñX=1个pñ=ķ=1个ñ-2p1个-pķ-1个FñCX=1个p1个+ñ-ķ=p1个-pñ-1个ķ=1个ñ-2Fķ1个-p-1个-1个

当我们绘制此图时,您将得到:

不同的p

因此,尽管对于普通硬币0.0003247的p值很小,但我们必须注意,对于不同的不普通硬币,p值并不太好(仅单个订单)。当将原假设()与替代假设进行比较时,似然比或贝叶斯因子约为11 。这意味着后验几率仅比先验几率高十倍。p=0.5p=0.33

因此,如果您在实验之前认为硬币不太可能不公平,那么现在您仍然应该认为硬币不太可能不公平。


一枚硬币的但对于“ 1-0-0”出现不公平pHË一个ds=pŤ一个一世s

通过计数正面和反面的数目,并使用二项式分布对这些观察进行建模并检验该观察是否特殊,可以更容易地测试公平硬币的概率。

但是,平均而言,硬币可能会翻转相同数量的正反面,但就某些模式而言并不公平。例如,硬币可能与后续的硬币翻转具有某种相关性(我想象某种机制,在硬币金属内部的空腔中充满沙子,沙子会像沙漏一样流向上次硬币翻转的另一端,后者正在加载硬币更有可能落在与前一面相同的一面)。

让第一硬币倒装等于概率头部和尾部和后翻转与概率的同一侧前翻转。然后,类似于本文开头的模拟,对于模式“ 1-0-0”超过20的次数,将给出以下概率:p

相关硬币

您可以看到有可能使人们更容易地观察到“ 1-0-0”模式(在左右某个硬币具有负相关性的情况下),但是更具戏剧性的是,它可以使它变得更少可能会遵循“ 1-0-0”模式。对于低您会在一个头之后获得很多尾巴,这是“ 1-0-0”模式的第一个“ 1-0”部分,但是您不会经常在“ 0-0”中连续出现两个尾巴模式的一部分。高值则相反。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-0-0”。

  • 例如,这种模式可能不是目标,而是在进行调查之前确定的。也许这只是在数据中“脱颖而出”,并且在实验引起了人们的注意。在这种情况下,需要考虑一个人正在有效地进行多个比较
  • 另一个问题是,上面计算的概率是p值。必须仔细考虑p值的含义。这不是硬币公平的可能性。相反,如果硬币是公平的,则是观察到特定结果的概率。如果人们所处的环境知道硬币的公平性分布,或者可以做出合理的假设,则可以考虑这一点并使用贝叶斯表达式
  • 什么是公平的,什么是不公平的。最终,经过足够的试验,人们可能会发现一点点不公平。但这是否相关,这样的搜索是否有偏见?当我们坚持一种常客主义的方法时,那么应该描述一些类似边界的东西,在此之上我们认为硬币是公平的(一些相关的影响大小)。然后,可以使用类似于两侧t检验的方法来确定硬币是否公平(关于“ 1-0-0”模式)。

1
为什么不通过MLE寻求封闭式解决方案?
Digio

p^中号大号=一个[RG一个Xp[PX1个Xñ|pñ]X一世ñØ一世一个ñpp^中号大号
Digio

pp

X={001个001个1个1个01个00}p^=Xñ=512=0.421.96p^1个-p^ñ=0.280.42+0.28<0.50

3
@FrankHarrell在问题设置中也没有任何东西使我们认为翻转不相关。问题设置相对缺乏信息。我涉及翻转相关性的示例只是为了涵盖问题的广泛性。我并不是说这是解决问题的方法。但是,如果说有人(可能是OP)正在研究DNA序列或其他问题的设置,而相关性的可能性就更有意义了,那么他们就举一个例子来证明这一点。
Sextus Empiricus
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.