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

RStudio中Bootstrap模拟:获取单试验观测总和而非整体聚合

问题修正:获取每次硬币抛掷试验的正面数统计

问题出在你对replicate返回结果的处理上——让我一步步帮你修正:

1. 生成正确的试验结果向量

你原来的代码中,replicate(50, sample(0:1,4,TRUE))会生成一个4行50列的矩阵(每列代表一次抛4次硬币的结果),直接调用sum()会把矩阵里所有元素加总,得到一个单一的总正面数,这显然不是你要的。

你需要的是每个试验(每列)的正面数总和,有两种简单的实现方法:

  • 方法一:在replicate内部就计算每次试验的总和(最直接):
heads50 <- replicate(50, sum(sample(0:1, 4, replace = TRUE)))

这样heads50会是一个长度为50的向量,每个元素对应一次试验抛4次硬币的正面数。

  • 方法二:先生成矩阵,再对每一列求和:
# 先生成所有试验的原始结果矩阵
coin_matrix <- replicate(50, sample(0:1, 4, replace = TRUE))
# 对每一列(单个试验)计算正面数总和
heads50 <- colSums(coin_matrix)

2. 重新统计概率并绘图

有了正确的heads50向量后,你的分组统计和绘图代码就能正常工作了。这里还补充了一步补全缺失结果的逻辑,确保即使某些正面数(比如0次)在50次试验中没出现,图表也能完整展示所有可能的结果:

library(tidyverse)

# 生成正确的试验结果
heads50 <- replicate(50, sum(sample(0:1, 4, replace = TRUE)))

# 分组统计各结果的频率/概率
data50 <- tibble(heads = heads50) %>% 
  group_by(heads) %>% 
  summarise(n = n(), p = n/50) %>%
  # 补全0-4所有可能的正面数,缺失的结果频率设为0
  complete(heads = 0:4, fill = list(n=0, p=0))

# 绘制概率直方图
ggplot(data50, aes(x = heads, y = p)) +
  geom_bar(stat = "identity", fill = "green") +
  labs(x = "Number of Heads", y = "Probability of Heads in 4 flips(p)") +
  theme_minimal()

运行后你会看到直方图上出现对应0、1、2、3、4次正面的柱子,每个柱子高度代表该结果在50次试验中的频率,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:57:33