R语言绘制伽马分布PDF叠加直方图出现报错如何解决
报错原因
curve()函数要求输入的计算表达式必须包含自变量x,你直接传入裸函数名pdf1时,函数没有接收到输入向量,无法生成对应长度的计算结果,就会触发该报错。该问题和函数是否向量化无关,dgamma本身就是支持向量输入的向量化函数,不需要额外调用Vectorize处理。
解决步骤
要实现伽马PDF叠加直方图,需要注意两个要点:一是直方图要切换为密度尺度(默认是频数控尺,和PDF的y轴尺度不匹配);二是curve函数要传入包含自变量x的表达式,叠加时指定add=TRUE。
完整可运行代码如下:
# 1. 准备样本数据 x <- c(200,79,102,60,120,81,34,21,127,98,60,34,50,38,101,31,58,50,52,85,69,47,88,85,120,40,70,80,75,91,14,50,20,45,51,63,65,49,85,20,56,45,54,50,48,104,69,87,76,63,84,60,21,30,28,14,58,200,69,75,28,83,102,104,98,40,56,74,45,40,57,105,75,16,243,63,30,45,70,31,30,107,50,30,75,63,124,69,73,26,131,65,80,26,30,40,165,10,90,46,21,23,80,31,90,120,60,43,145,30,40,18,150,30,45,127) # 2. 拟合伽马分布,提取参数 gamma.fit <- MASS::fitdistr(x,densfun="gamma") shape_est <- gamma.fit$estimate[["shape"]] rate_est <- gamma.fit$estimate[["rate"]] # 3. 绘制密度直方图 hist(x, freq = FALSE, breaks = 15, col = "lightblue", main = "样本分布与伽马拟合结果", xlab = "观测值", ylab = "密度") # 4. 叠加伽马分布PDF curve(dgamma(x, shape = shape_est, rate = rate_est), add = TRUE, col = "red", lwd = 2)
如果你要使用自定义的pdf1函数,只需要把第4步的代码改成如下形式即可(重点是给函数传入自变量x):
pdf1 <- function(x) dgamma(x,shape=shape_est,rate=rate_est) curve(pdf1(x), add = TRUE, col = "red", lwd = 2)
内容的提问来源于stack exchange,提问作者mikaelaa
相关产品推荐
相关产品推荐

