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赋值给prob
,sample
函数将采用简单随机抽样,其中每个可能的结果都有相同的概率权重,因此每个结果都有相同的概率被选中,这公平条件。
例如:
# 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。
我的任务是使用 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赋值给prob
,sample
函数将采用简单随机抽样,其中每个可能的结果都有相同的概率权重,因此每个结果都有相同的概率被选中,这公平条件。
例如:
# 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。