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

R语言Gamma分布拟合曲线呈水平直线:问题排查求助

问题根源:Gamma分布参数的类型混淆

你的问题出在对R中dgamma()函数的参数定义理解偏差上。

默认情况下,dgamma(x, shape, rate)的第三个参数是rate(率参数),但你传入的b=30.59584实际上应该是scale(尺度参数)——二者的关系是scale = 1/rate。

为什么会显示水平线?

当你把b作为rate传入时,这个Gamma分布的均值为shape/rate = a/b ≈ 1.286486 / 30.59584 ≈ 0.042,远小于你的样本数据范围(x从2到150)。在x>0.042的区域,该Gamma分布的概率密度几乎为0,因此绘制出来就是紧贴x轴的水平线。

修正后的代码

你只需要明确指定scale参数即可:

x<-c(73,6,77,81,91,120,150,61,65,68,18,20,23,12,14,18,23,26,26,27,2,3,3,40,41,41,6,10,11,12,37,38,38,6,73,6,51)
a<-1.286486;b<-30.59584
hist(x,breaks=c(0,20,40,60,80,100,120,160),probability = T,xaxt="n")
# 明确指定scale参数,匹配你的参数含义
curve(dgamma(x, shape=a, scale=b), from=0, to=160, col="red", lwd=2, add=T)
axis(1) # 补上x轴标签,方便观察拟合效果

逻辑验证

Gamma分布用scale参数时的均值公式是shape * scale,代入你的a和b计算得:1.286486 * 30.59584 ≈ 39.3,和你的样本均值(≈38.1)非常接近,说明参数是匹配的,修正后就能看到正确的拟合曲线了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:31:22