如何在R语言中生成指定权重的指数、正态混合分布样本?
R 混合分布抽样与密度计算实现
你提到的dexp()和dnorm()是分布概率密度计算函数,如果目标是生成随机样本,需要使用对应分布的随机数生成函数rexp()和rnorm(),两种场景的实现方法如下:
1. 生成混合分布随机样本
实现逻辑是先按权重给每个样本分配所属分布,再分别生成对应分布的数值:
# 设定总样本量 n <- 10000 # 按2:1的权重生成分组标签:1对应指数分布,2对应正态分布 group <- sample(c(1, 2), size = n, replace = TRUE, prob = c(2/3, 1/3)) # 初始化存储结果的向量 mixed_sample <- numeric(n) # 生成速率为1的指数分布样本 mixed_sample[group == 1] <- rexp(sum(group == 1), rate = 1) # 生成均值为0、标准差为1的正态分布样本 mixed_sample[group == 2] <- rnorm(sum(group == 2), mean = 0, sd = 1)
你可以通过table(group)/n验证分组比例,输出结果会接近2/3和1/3的预期权重。
2. 计算混合分布的概率密度(使用dexp和dnorm)
如果需要计算混合分布的密度值,直接按权重叠加两个分布的密度即可:
# 计算单个点x=0.5的混合密度 x <- 0.5 mixed_density <- 2/3 * dexp(x, rate = 1) + 1/3 * dnorm(x, mean = 0, sd = 1) # 批量计算序列x_vec的混合密度 x_vec <- seq(-3, 5, length.out = 100) mixed_density_vec <- 2/3 * dexp(x_vec, rate = 1) + 1/3 * dnorm(x_vec, mean = 0, sd = 1)
内容的提问来源于stack exchange,提问作者Kristina
相关产品推荐
相关产品推荐

