You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

如何在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

火山引擎 最新活动