You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于特定条件使用R语言expand.grid()实现硬币抛掷概率计算

R代码实现双硬币两次抛掷的似然计算

步骤说明

  1. 生成参数组合:创建p1、q1、q2的渐变网格,覆盖从(coin1=1, coin2=0)到(coin1=0, coin2=1)的所有情况。
  2. 定义12种抛掷结果:分为三类场景(两次coin1、各抛一次、两次coin2),每类4种结果。
  3. 批量计算似然:对每组参数,计算每种结果的似然值(场景选择概率 × 结果出现概率)。

完整代码

# 安装并加载所需包(首次运行需执行install.packages)
# install.packages("tidyverse")
library(tidyverse)

# 1. 生成参数组合:p1、q1、q2从0到1渐变,步长0.2可自定义
params <- expand.grid(
  p1 = seq(0, 1, by = 0.2),
  q1 = seq(0, 1, by = 0.2),
  q2 = seq(0, 1, by = 0.2)
) %>% mutate(p2 = 1 - p1)  # 添加1-p1列

# 2. 定义所有12种抛掷结果及对应正面次数
scenario1 <- data.frame(
  scenario = "两次抛coin1",
  result = c("HH", "HT", "TH", "TT"),
  h_coin1 = c(2, 1, 1, 0),
  h_coin2 = 0
)

scenario2 <- data.frame(
  scenario = "coin1和coin2各抛一次",
  result = c("HH", "HT", "TH", "TT"),
  h_coin1 = c(1, 1, 0, 0),
  h_coin2 = c(1, 0, 1, 0)
)

scenario3 <- data.frame(
  scenario = "两次抛coin2",
  result = c("HH", "HT", "TH", "TT"),
  h_coin1 = 0,
  h_coin2 = c(2, 1, 1, 0)
)

all_results <- rbind(scenario1, scenario2, scenario3) %>%
  mutate(full_result = paste(scenario, result, sep = "_"))

# 3. 编写似然计算函数
calc_likelihood <- function(p1, q1, q2) {
  p2 <- 1 - p1
  
  all_results %>% mutate(
    likelihood = case_when(
      # 两次coin1:场景概率p1² × 结果概率
      scenario == "两次抛coin1" ~ 
        p1^2 * (q1^h_coin1) * ((1 - q1)^(2 - h_coin1)),
      # 各抛一次:场景概率2*p1*p2 × 结果概率(两种顺序)
      scenario == "coin1和coin2各抛一次" ~ 
        2 * p1 * p2 * (q1^h_coin1) * ((1 - q1)^(1 - h_coin1)) *
        (q2^h_coin2) * ((1 - q2)^(1 - h_coin2)),
      # 两次coin2:场景概率p2² × 结果概率
      scenario == "两次抛coin2" ~ 
        p2^2 * (q2^h_coin2) * ((1 - q2)^(2 - h_coin2))
    )
  ) %>% select(full_result, likelihood)
}

# 4. 批量计算所有参数组合的似然
final_output <- params %>%
  mutate(likelihood_data = pmap(list(p1, q1, q2), calc_likelihood)) %>%
  unnest(likelihood_data)

# 可选:转换为宽表格式,方便查看单组参数下的所有结果似然
final_wide <- final_output %>%
  pivot_wider(names_from = full_result, values_from = likelihood)

# 查看前5行结果
head(final_wide)

代码解释

  • 参数组合:用expand.grid生成所有p1、q1、q2的笛卡尔积,步长by可按需调整(比如改成0.1会生成更密集的参数点)。
  • 结果定义:明确三类场景的12种结果,记录每种结果中两枚硬币的正面次数,简化概率计算。
  • 似然计算:
    • 两次抛同一硬币:场景概率为对应硬币选择概率的平方,结果概率为二项分布概率。
    • 各抛一次:场景概率为两种顺序的概率之和(2p1p2),结果概率为两枚硬币各自结果概率的乘积。
  • 批量处理:用pmap遍历所有参数组合,自动完成似然计算,最后可转成宽表直观查看每组参数的12种结果似然。

内容的提问来源于stack exchange,提问作者stats_noob

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 07:15:10