在New York Times yesterday中,有人提到一篇论文,主要是说“头”出现后'头'的概率不是0.5(假设一个公平的硬币),挑战“热手”神话。我想向自己证明一下。
因此,我正在编写7个硬币投掷的模拟,并计算第一个头后的头数,自然地提供了第一个头。
我提出了以下R代码行,但我仍然获得NA值,并希望得到一些帮助:
n <- 7 # number of tosses
p <- 0.5 # probability of heads
sims <- 100 # number of simulations
Freq_post_H <- 0 # frequency of 'head'-s after first 'head'
for(i in 1:sims){
z <- rbinom(n, 1, p)
if(sum(z==1)!=0){
y <- which(z==1)[1]
Freq_post_H[i] <- sum(z[(y+1):n])/length((y+1):n)
}else{
next()
}
Freq_post_H
}
Freq_post_H
我错过了什么?
结论:在不匹配的变量名称的初始打嗝之后,两个响应都解决了这个问题。其中一个答案通过引入(i + 1)
来纠正初始代码中与上次折腾min(y + 1, n)
相关的问题,并纠正生成next
的循环中NA
的基本误解。用于跳过迭代。谢谢(+1)。
重要的是,这个附加“结论”的原因是第二个响应解决了一个更基本或概念性的问题:我们想要计算H前面的H的分数,而不是p(H)
。头部出现后仍然存在投掷的数量,对于一个公平的硬币,这将是0.5。
答案 0 :(得分:2)
这是他们在报纸上所做的模拟:
nsims <- 10000
k <- 4
set.seed(42)
sims <- replicate(nsims, {
x <- sample(0:1, k, TRUE)
#print(x)
sum( # sum logical values, i.e. 0/1
diff(x) == 0L & # is difference between consecutive values 0?
x[-1] == 1L ) / # and are these values heads?
sum(head(x, -1) == 1L) #divide by number of heads (without last toss)
})
mean(sims, na.rm = TRUE) #NaN cases are samples without heads, i.e. 0/0
#[1] 0.4054715
k <- 7
sims <- replicate(nsims, {
x <- sample(0:1, k, TRUE)
#print(x)
sum(diff(x) == 0L & x[-1] == 1L) / sum(head(x, -1) == 1L)
})
mean(sims, na.rm = TRUE)
#[1] 0.4289402
答案 1 :(得分:1)
n <- 7 # number of tosses
p <- 0.5 # probability of heads
sims <- 100 # number of simulations
Prob_post_H <- 0 # frequency of 'head'-s after first 'head'
for(i in 1:sims){
z <- rbinom(n, 1, p)
if(sum(z==1) != 0){
y <- which(z==1)[1]
Prob_post_H[i] <- mean(z[min(y+1, n):n], na.rm=TRUE)
}else{
next()
}
}
mean(Prob_post_H,na.rm=TRUE)
#[1] 0.495068
看起来好像是50%左右。我们可以扩展以查看更多模拟。
sims <- 10000
mean(Prob_post_H,na.rm=TRUE)
#[1] 0.5057866
仍然约为50%。
答案 2 :(得分:0)
这是模拟100次公平投币30,000次
counter <- 1
coin <- sum(rbinom(100,1,0.5))
while(counter<30000){
coin <- c(coin, sum(rbinom(100,1,0.5)))
counter <- counter+1
}
在变量
上面运行后尝试这些 hist(coin)
str(coin)
mean(coin)
sd(coin)
答案 3 :(得分:0)
下面是R中的一些示例代码,以使用示例函数来模拟R中的公平投币。您可以根据需要进行修改,以模拟任意数量的翻转。由于掷硬币的结果与每次掷硬币无关,因此对于任何给定的掷硬币而言,正面或反面的概率始终为0.5。在许多硬币翻转中,至少有一半翻转的概率为正面(或反面)收敛到0.5。正好有一半的头和一半的尾巴的概率接近0。
n <- 7
count_heads <- 0
coin_flip <- sample(c(0,1), n, replace = TRUE)
for(flip_i in 1:n)
{
if(coin_flip[flip_i] == 1)
{
count_heads = count_heads + 1
}
}
count_heads/n