You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在bmixture包中为混合Gamma分布添加偏度参数生成样本?

混合右偏Gamma分布样本生成问题

问题描述

原本计划使用bmixture包生成两个混合且严重右偏的Gamma分布样本,但运行以下代码后,生成的分布近似正态而非右偏:

library(bmixture)
set.seed(345)
nn <- 10000
wt <- c(0.85,0.20) #weight2
mu <- c(20,70)
sd <- c(1,1.2)
x <- rmixgamma(n=nn,weight=wt,alpha=mu,beta=sd) 
hist(x, breaks = 40, freq=FALSE)

问题原因

你对rmixgamma函数的参数理解有误:该函数的alpha是Gamma分布的形状参数,beta是速率参数,而非你误以为的均值和标准差。

Gamma分布的核心性质:

  • 均值 = alpha / beta
  • 标准差 = sqrt(alpha) / beta
  • 偏度 = 2 / sqrt(alpha)

你设置的alpha=20和70属于较大的形状参数,此时Gamma分布会因中心极限定理趋近于正态分布,偏度极低(分别约为0.447和0.239),混合后自然呈现近似正态的形态。

解决方法:引入强右偏性

要生成严重右偏的混合Gamma分布,需要减小形状参数alpha(偏度与sqrt(alpha)成反比,alpha越小,偏度越大),同时可通过调整beta来控制均值。

以下是修正后的示例代码,生成两个强右偏的Gamma混合样本:

library(bmixture)
set.seed(345)
nn <- 10000
wt <- c(0.85, 0.15)  # 权重和需为1,原代码0.85+0.20=1.05有误,已修正
# 设置小形状参数以获得强右偏,同时调整beta控制均值
alpha <- c(2, 3)      # 形状参数,偏度分别为2/sqrt(2)≈1.41、2/sqrt(3)≈1.15
beta <- c(0.1, 0.1)   # 速率参数,对应均值为2/0.1=20,3/0.1=30
x <- rmixgamma(n=nn, weight=wt, alpha=alpha, beta=beta)
hist(x, breaks=40, freq=FALSE, main="混合强右偏Gamma分布直方图")

关键说明

  • 若要更极端的右偏,可进一步减小alpha(比如设为0.5,偏度可达2/sqrt(0.5)≈2.83)
  • 注意权重和必须为1,原代码中wt=c(0.85,0.20)的和为1.05,属于非法输入,已修正
  • 可通过公式beta = alpha / 目标均值来计算对应速率参数,确保均值符合预期

内容的提问来源于stack exchange,提问作者iGada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 03:20:14