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

Gamma分布疑问:dgamma与rgamma结果为何存在差异?

Gamma分布样本与密度图不符的问题排查

你运行以下R代码绘制Gamma分布密度图后,后续用相同参数调用rgamma生成样本时,出现分布与密度图差异极大、样本均值不符的问题:

x <- seq(0.00001, 0.0008, 0.000001)
a = 2
b = 0.000187
set.seed(123) 
plot(x, dgamma(x, shape = a, scale = b), 
   type="l", lwd=2, ylab="Density", 
   xlab="probability of infection")

sample_size <- 10000
set.seed(123)
v <- rgamma(sample_size, shape = a, scale = b)
summary(v)
hist(v)

问题根源:Gamma分布参数定义混淆

R中Gamma分布相关函数(dgamma/rgamma)支持两种参数组合:

  • shape(形状参数) + scale(尺度参数):理论均值 = shape * scale
  • shape(形状参数) + rate(率参数):理论均值 = shape / rate,且rate = 1/scale

你的代码中使用scale = 0.000187,对应理论均值为2 * 0.000187 = 0.000374,密度图的x轴范围(0.00001~0.0008)完全匹配该分布的取值区间。

如果后续调用rgamma时,误将scale参数写成rate(比如代码写成rgamma(sample_size, shape = a, rate = b)),会导致:

  • 实际尺度参数变为1/0.000187 ≈ 5347.6
  • 样本均值骤升至2 / 0.000187 ≈ 10695,与原分布的均值相差数个数量级,最终出现样本分布和密度图完全不符的情况。

验证与修复步骤

  1. 核对参数一致性:确保所有Gamma分布函数的参数写法统一,要么全用scale,要么全用rate。若要保持原密度图的分布,生成样本的代码必须为:
    v <- rgamma(sample_size, shape = a, scale = b)
    
  2. 验证样本均值:运行mean(v),若结果接近0.000374,说明参数正确;若结果远大于该值,可确认是参数混用(scale写成rate)导致的问题。
  3. 匹配直方图显示范围:若参数正确但直方图视觉上与密度图不符,可手动指定x轴范围对齐密度图:
    hist(v, xlim = c(0.00001, 0.0008))
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 14:37:16