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 * scaleshape(形状参数) +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,与原分布的均值相差数个数量级,最终出现样本分布和密度图完全不符的情况。
验证与修复步骤
- 核对参数一致性:确保所有Gamma分布函数的参数写法统一,要么全用
scale,要么全用rate。若要保持原密度图的分布,生成样本的代码必须为:v <- rgamma(sample_size, shape = a, scale = b) - 验证样本均值:运行
mean(v),若结果接近0.000374,说明参数正确;若结果远大于该值,可确认是参数混用(scale写成rate)导致的问题。 - 匹配直方图显示范围:若参数正确但直方图视觉上与密度图不符,可手动指定x轴范围对齐密度图:
hist(v, xlim = c(0.00001, 0.0008))
内容的提问来源于stack exchange,提问作者cheezeduckies
相关产品推荐
相关产品推荐

