R:使用 Monte Carlo 方法抛硬币不公平。目标是出现 N 个正面朝上的概率

R: Unfair Coin Toss with Monte Carlo Method. Goal is Probability of N Exact Heads

我的任务是使用 Monte Carlo 方法评估一次不公平的抛硬币,并确定在 n 次模拟中抛出 n 次正面朝上的概率。我的教授提供的指南(在底部)对于如何针对不公平的硬币进行调整没有意义。我已经包含了我开始编码的内容,但还远未完成。我如何调整 Monte Carlo 来为不公平的硬币工作?

问题:

假设你有一个不公平的硬币,正面朝上的概率是 p。我们感兴趣的是在总共 nflips 次翻转中准确看到 nheads 正面的概率。编写一个函数,采用这些参数来评估 nsim 模拟(总共四个参数)的概率,并在几个不同的值上对其进行测试。提示:在示例函数中使用 prob 参数。

nsim <- 10000
nheads <-
nflips <- 
p <- NULL
unfairfunc <- function(x){
  for(nheads in 1:nsim)
  nheads <-
  nflips <-
    }

下面是我的教授为公平抛硬币的 Monte Carlo 概率提供的基本代码。

 flip_function <- function(n) {
  flips <- sample(c("heads", "tails"), n, replace=TRUE) 
  percent_heads <- length(which(flips== "heads")) / n
  return(percent_heads)
}

sample 函数有 prob 参数,可用于为每个可能的结果分配一个概率权重值。如果none赋值给probsample函数将采用简单随机抽样,其中每个可能的结果都有相同的概率权重,因此每个结果都有相同的概率被选中,这公平条件。

例如:

# Case 1:
sample(c("a", "b"), 1) 

#Case 2:
sample(c("a", "b"), 1, prob = c(0.2, 0.8)) 

在案例#1 中,“a”被采样的概率等于“b”被采样的概率,即 1/2 = 50%。

在案例#2 中,“a”被采样的概率为 20%,但“b”被采样的概率为 80%。

如果您重复样本函数 N 次,可以预期“a”在案例 #1 中将被选择大约 50% N 次,在案例 #2 中大约选择 20% N 次。

多次尝试:

Case #1 
s <- numeric(10)
for(k in 1:10) s[k] <- sample(c("a", "b"), 1)
table(s)

Case #2 
s <- numeric(10)
for(k in 1:10) s[k] <- sample(c("a", "b"), 1, prob = c(0.2, 0.8))
table(s)

注意:

  • 如果要设置prob,则必须为每个可能的结果分配一个权重值,并且
  • 分配给 prob 的权重总和必须等于 1。