有没有一种方法可以使用R从大样本蒙特卡罗模拟中确定精确分数?

有没有一种方法可以使用R从大样本蒙特卡罗模拟中确定精确分数?,r,R,上周末,我参加了一年一度的麻省理工学院智力竞赛。我们要解决12个概率问题。虽然我们没有及时完成它,但我决定自己尝试解决它(所以没有破坏者) 问题8目前让我绊倒了。上面写着:爱丽丝从tips那里得到了16枚硬币,鲍勃得到了3枚。他们决定玩下面的游戏。每个玩家从自己的硬币中选择一枚。他们翻转硬币,直到一个是正面,另一个是反面。两枚硬币都由有头的人保管。重复此操作,直到一名玩家获得所有硬币。艾丽丝把小费丢给鲍勃的可能性有多大 我不擅长统计,我相信有一种方法可以用公式计算(这里的任何指导也会很感激),但

上周末,我参加了一年一度的麻省理工学院智力竞赛。我们要解决12个概率问题。虽然我们没有及时完成它,但我决定自己尝试解决它(所以没有破坏者)

问题8目前让我绊倒了。上面写着:爱丽丝从tips那里得到了16枚硬币,鲍勃得到了3枚。他们决定玩下面的游戏。每个玩家从自己的硬币中选择一枚。他们翻转硬币,直到一个是正面,另一个是反面。两枚硬币都由有头的人保管。重复此操作,直到一名玩家获得所有硬币。艾丽丝把小费丢给鲍勃的可能性有多大

我不擅长统计,我相信有一种方法可以用公式计算(这里的任何指导也会很感激),但我意识到我可以通过模拟R中的结果来计算答案

以下是我为模拟运行的代码(警告,我是R的新手,因此对这些刺耳和糟糕的格式表示歉意):


coin\u-battle我想不出一个直接的方法来估计精确的分数。但是你有一个大的模拟,所以你可以在真实概率周围放置一个置信区间。在此基础上,您可以假设分母小于任意值,并检查所有符合该标准的分数,以查看它们是否落在置信区间内。我写了一些代码来实现这一点,因为这个问题引起了我的兴趣。请注意——这是一个非常糟糕的代码,因为我有点不舒服,思维不清晰

ps <- prop.test(1579339,10000000)

# arbitrarily assume the denominator is <= 100
denominators <- 1:100
# numerators
num <- lapply(denominators, function(x){sequence(x)})
# the decimal values
vals <- lapply(denominators, function(x){sequence(x)/x})

# helper function to pluck the values that fall between the interval
between <- function(x, a, b){
  a <= x & x <= b
}

# find the values that fall in the interval
btw <- lapply(vals, between, a = ps$conf.int[1], b = ps$conf.int[2])
# not too proud of this.  it's ugly and there is a better way
output <- data.frame(percs = unlist(vals),
                     num = unlist(num), 
                     den = rep(denominators, denominators), 
                     between = unlist(btw))
# only grab the output that meets our criteria
possible <- output[output$between,]
possible

所有这些都减少到了3/19。我想不出一个直接的方法来估计精确的分数。但是你有一个大的模拟,所以你可以在真实概率周围放置一个置信区间。在此基础上,您可以假设分母小于任意值,并检查所有符合该标准的分数,以查看它们是否落在置信区间内。我写了一些代码来实现这一点,因为这个问题引起了我的兴趣。请注意——这是一个非常糟糕的代码,因为我有点不舒服,思维不清晰

ps <- prop.test(1579339,10000000)

# arbitrarily assume the denominator is <= 100
denominators <- 1:100
# numerators
num <- lapply(denominators, function(x){sequence(x)})
# the decimal values
vals <- lapply(denominators, function(x){sequence(x)/x})

# helper function to pluck the values that fall between the interval
between <- function(x, a, b){
  a <= x & x <= b
}

# find the values that fall in the interval
btw <- lapply(vals, between, a = ps$conf.int[1], b = ps$conf.int[2])
# not too proud of this.  it's ugly and there is a better way
output <- data.frame(percs = unlist(vals),
                     num = unlist(num), 
                     den = rep(denominators, denominators), 
                     between = unlist(btw))
# only grab the output that meets our criteria
possible <- output[output$between,]
possible

所有这些都减少到了3/19。

我喜欢使用假设检验将分数归零。超级聪明!现在我只需要弄清楚如何理解这个代码我喜欢使用假设检验来关注分数。超级聪明!现在我只需要弄清楚如何理解这段代码
> possible
         percs num den between
174  0.1578947   3  19    TRUE
709  0.1578947   6  38    TRUE
1605 0.1578947   9  57    TRUE
2862 0.1578947  12  76    TRUE
4480 0.1578947  15  95    TRUE