Skip to content

R - 二项分布

二项分布是一种基本的离散概率分布。它模拟在固定次数的独立试验中成功的次数,其中每次试验只有两种可能的结果(例如,成功/失败,正面/反面)。例如,我们可以用它来计算在 10 次掷硬币中恰好获得 7 次正面的概率。

R 提供了一套用于处理二项分布的四个函数。这些函数是进行计算和模拟的强大工具。

# R 中的二项分布函数
dbinom(x, size, prob) # 密度函数(PDF)- P(X = x)
pbinom(q, size, prob) # 累积分布函数(CDF)- P(X ≤ q)
qbinom(p, size, prob) # 分位数函数(逆 CDF)
rbinom(n, size, prob) # 随机数生成

以下是参数的细分说明:

  • x, q:分位数向量(成功的次数)。
  • p:概率向量。
  • n:要生成的随机值数量。
  • size:试验次数(例如,10 次掷硬币)。
  • prob:单次试验成功的概率(例如,公平硬币为 0.5)。

此函数计算在 size 次试验中观察到恰好 x 次成功的概率。让我们以 50 次试验和 0.5 的成功概率(例如 50 次掷硬币)为例,可视化其概率分布。

对于现代、出版质量的图形,我们将使用 tidyverse 中的 ggplot2 包。

# 确保您已安装 tidyverse: install.packages("tidyverse")
library(ggplot2)
library(dplyr)
# 定义参数
num_trials <- 50
prob_success <- 0.5
# 创建用于绘图的数据框
binom_data <- tibble(
successes = 0:num_trials,
probability = dbinom(x = successes, size = num_trials, prob = prob_success)
)
# 使用 ggplot2 创建图表
binom_plot <- ggplot(binom_data, aes(x = successes, y = probability)) +
geom_col(fill = "#0072B2", alpha = 0.8) + # 使用柱状图表示离散分布
labs(
title = "二项概率分布",
subtitle = paste("n = ", num_trials, ", p = ", prob_success),
x = "成功次数",
y = "概率"
) +
theme_minimal() # 使用简洁主题
# 显示图表
print(binom_plot)
# 将图表保存到文件:
# ggsave("binomial_distribution.png", plot = binom_plot, width = 8, height = 5)

执行此代码后,它会生成一个条形图。x 轴显示成功次数(从 0 到 50),y 轴显示每个结果的概率。图表将呈钟形,在 25 次成功处达到峰值,这是最可能的结果。

此函数计算事件的累积概率,即获得 q 次或更少成功的概率。这对于回答“在 51 次掷硬币中,获得 26 次或更少正面的概率是多少?”这类问题非常有用。

# 计算从 51 次掷公平硬币中获得 26 次或更少正面的概率。
prob_leq_26 <- pbinom(q = 26, size = 51, prob = 0.5)
print(prob_leq_26)

当我们执行上述代码时,它会产生以下结果:

[1] 0.610116

这是 pbinom() 的逆函数。它接受一个概率 p,并返回成功次数 x,使得 pbinom(x, ...) 等于 p。它回答诸如“当硬币掷 51 次时,多少次正面会标志着结果的第 25 百分位数?”这类问题。

# 查找当硬币掷 51 次时,25% 的结果低于多少次正面。
quantile_val <- qbinom(p = 0.25, size = 51, prob = 0.5)
print(quantile_val)

当我们执行上述代码时,它会产生以下结果:

[1] 23

此函数用于模拟。它从具有指定参数的二项分布中生成 n 个随机值。这对于模拟实验非常有用。

# 从一个包含 150 次试验、成功概率为 0.4 的实验中生成 8 个随机结果。
set.seed(42) # 设置随机种子以保证可重现性
random_outcomes <- rbinom(n = 8, size = 150, prob = 0.4)
print(random_outcomes)

由于输出是随机的,除非您使用 set.seed(),否则您的结果会有所不同。将种子设置为 42 后,结果如下:

[1] 61 67 56 61 64 61 58 59