如何基于自定义非标准概率分布生成10个随机数(R语言实现)
基于自定义离散概率分布生成随机数(R语言实现)
你场景中的分布属于自定义离散概率分布,直接使用R内置的sample()函数即可完成随机数生成,无需手动实现抽样逻辑,操作如下:
实现代码
library(data.table) # 构造你提供的概率分布表 distribution <- data.table( x = c(1,2,3,4,5,6,7,8,9,10), p = c(0.1,0.1,0.2,0.05,0.05,0.1,0.1,0.2,0.05,0.05) ) # 生成10个符合该分布的随机数 generated_samples <- sample( x = distribution$x, size = 10, replace = TRUE, prob = distribution$p ) # 查看生成结果 print(generated_samples)
注意事项
- 参数
replace=TRUE为必填项,代表有放回抽样,符合离散随机变量重复抽样的逻辑,若设为FALSE最多只能生成10个不重复的样本,且分布拟合度会大幅下降 prob参数支持未归一化的概率向量,R会自动对输入的概率值做归一化处理,你提供的概率向量总和为1,可直接使用- 若需要验证生成的样本是否符合预期,可增大生成样本量后统计各取值的出现频率,会与给定的概率值基本匹配
如果你需要处理的是自定义连续概率分布,可通过逆变换采样方法实现:先生成均匀分布随机数,再通过累积分布函数的逆函数映射得到目标分布的随机数,你当前的离散场景无需用到该方法。
内容的提问来源于stack exchange,提问作者Jantje Houten
相关产品推荐
相关产品推荐

