您的位置:首页 > 其它

用R语言模拟掷硬币过程

2016-05-15 10:16 477 查看
  硬币分为Head(正面)和Tail(反面),如果硬币是均匀的,那么出现Head和Tail的概率分别为50%、50%。把一枚硬币掷三次,结果有2*2*2=8种可能,分别为:

  HHH、HHT、HTH、HTT

  TTT、TTH、THT、THH

  那么,样本空间(sample spaces): Ω={HHH、HHT、HTH、HTT、TTT、TTH、THT、THH},令x是Ω里一个的样本,则

  P(x="HHH")=1/8,

  P(x="HHT")=1/8,

  ...

  P(x="THH")=1/8

  统计8个样本中H出现的次数:

    Num(H)=3+2+2+1+0+1+1+2=8+4=12

  那么H出现的频率为:

    Frequency(H)= 12/(3*8)=12/24=0.5

  可以看到P(H) = Frequency(H)

  以上是从理论上分析的结果,在实际操作中,掷硬币三次,Num(H)可能为10,那么Frequent(H) = 10/24=0.41与0.5有较大的偏差。当我们把掷硬币的次数增加时,Frequent(H)会逐步接近0.5。下面,在RStudio中,使用R语言进行掷硬币的仿真实验。

  //coin.R  

# 掷硬币500次
N <- 500
flipsequence <- sample(x=c(0,1), prob=c(0.5,0.5),size = N, replace = TRUE)
r <- cumsum(flipsequence)
n <- 1:N
runprop = r/n

#绘图
plot(n,runprop,type="o",log="x",
xlim=c(1,N), ylim=c(0.0,1.0), cex.axis=1.5,
main="Running Proportion of Heads",cex.axis=1.5)

#添加一条直线y=0.5
lines(c(1,N),c(0.5,0.5),lty=3)

#添加标注
flipletters <- paste(c("T","H")[flipsequence[1:10]+1], collapse = "")
displaystring <- paste("Flip Sequence= ", flipletters,'...',sep="" )
text(5,0.9, displaystring, adj = c(0,1),cex=1.3)
#显示模拟500次得到Head的频率
text(N-100,0.3, paste("End Proportion = ",runprop
),adj=c(1,0), cex=1.3)


  效果如下:


图(1) 掷硬币500次得到Head(正面)的频率

  

  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息