如何用R语言基于Dirichlet Multinomial分布生成1000行91列整数矩阵
生成1000行91列的Dirichlet Multinomial分布矩阵(R实现)
简化并批量生成的代码实现
library(extraDistr) # 定义Dirichlet Multinomial分布的参数 mypar <- c(0.1,0.1,0.2,0.3,0.1,0.2) # 封装单行91列数据的生成逻辑 generate_single_row <- function() { # 生成91个size=1的Dirichlet Multinomial样本 mysim <- rdirmnom(n = 91, size = 1, alpha = mypar) # 直接提取每行中1对应的类别编号(替代原代码中逐列替换的繁琐操作) mychoice.sim <- apply(mysim, 1, function(x) which(x == 1)) # 转为单行矩阵格式 t(matrix(mychoice.sim)) } # 批量生成1000行并合并为最终矩阵 result_matrix <- do.call(rbind, replicate(1000, generate_single_row(), simplify = FALSE)) # 验证矩阵维度(输出应为 1000 91) dim(result_matrix)
关键优化说明
- 简化了原代码中逐列替换的操作:通过
apply逐行查找1的位置,直接得到对应的类别编号,代码更简洁高效。 - 批量生成逻辑:将单行生成逻辑封装为函数后,用
replicate重复调用1000次,再通过do.call(rbind)合并所有行,快速得到1000×91的目标矩阵。 - 注意:当
size=1时,Dirichlet Multinomial分布与Multinomial分布等价,生成逻辑完全成立。
内容的提问来源于stack exchange,提问作者stefano
相关产品推荐
相关产品推荐

