热手谬误:R代码重现模拟

时间:2015-10-19 21:03:47

标签: r simulation probability

背景:

作为preceding question的后续跟进,我想请求帮助在original paper引用的opinion column in The New York Times yesterday上复制更复杂的结果。在那篇起源于米兰和阿利坎特的论文中,提出了一个有趣的减少头部跟随另一个头部(约40%)的频率。在@Roland解决后,今天早上SO问题的模拟是一致的。

问题"

问题是如何在R中模拟一个模拟来重现硬币投掷中的成功部分("头部"),这些投掷遵循一系列成功(k成功)的短硬币折腾实验(n投掷),如下面的情节所示,属于在"背景"中链接的文章。问题的一部分。

enter image description here

1 个答案:

答案 0 :(得分:1)

这是一个简单的解决方案:

#' @param n An integer giving the number of trials
#' @param k An integer giving the prior-streak size.
#' @examples 
#' repeat_success(10,2)
#' repeat_success(100, 5)

repeat_success <- function(n,k) {
  path <- sample(c(1,0), size= n, replace= TRUE)
  successes <- which(path == 1)

  streaks <- rep(0, length(successes))
  for (i in 1:length(successes)) {
    j <- successes[i]
    if (j > k)
      streaks[i] <- ifelse(sum(path[(j-k):(j-1)]) == k, 1, 0)
  }
  return(list(successes= successes, frac_streaks= sum(streaks) / sum(path)))
}

R> repeat_success(10,2)
$successes
[1] 1 3 5 8 9

$frac_streaks
[1] 0

显然,您可以设置种子以获得可重复性。显然,我没有在参数上包含错误检查。