如何在R语言中不借助特殊包抽取Erlang分布随机样本
在R中无需特殊包生成Erlang分布随机样本
嘿,其实不用额外安装任何包就能搞定这个问题——关键是要抓住Erlang分布的核心定义:Erlang(k, λ)分布等价于k个独立同分布的速率参数为λ的指数分布(Exp(λ))随机变量的和。R的基础包本身就提供了生成指数分布样本的rexp()函数,我们完全可以基于这个来构建Erlang样本。
实现思路
- 先生成
n*k个Exp(λ)的随机样本(n是你要的样本规模,k是形状参数) - 将这些样本整理成一个n行k列的矩阵,每行对应k个独立的指数分布样本
- 对矩阵的每一行求和,得到的结果就是n个符合Erlang(k, λ)分布的随机样本
自定义函数示例
你可以写一个简单的自定义函数来封装这个逻辑,方便重复调用:
# 生成Erlang分布随机样本的函数 # 参数说明: # n: 样本规模 # k: 形状参数(自然数) # lambda: 速率参数(正实数) erlang_sample <- function(n, k, lambda) { # 生成n*k个指数分布样本 exp_samples <- rexp(n * k, rate = lambda) # 转换为n行k列的矩阵 exp_matrix <- matrix(exp_samples, nrow = n) # 每行求和得到Erlang样本 erlang_samples <- rowSums(exp_matrix) return(erlang_samples) }
使用示例
比如我们要生成1000个形状参数k=3、速率参数λ=2的Erlang样本,然后画直方图看看分布形态:
# 生成样本 my_sample <- erlang_sample(n = 1000, k = 3, lambda = 2) # 绘制直方图验证 hist(my_sample, breaks = 30, col = "lightblue", main = "Erlang(3, 2)分布样本直方图", xlab = "样本值")
这个方法完全依赖R基础包的函数,不需要安装任何额外工具,而且逻辑清晰,符合Erlang分布的数学定义,结果也很可靠。
内容的提问来源于stack exchange,提问作者JJJ




