如何在一个图中绘制伽马分布的拟合图和实际图?

How to draw fitted graph and actual graph of gamma distribution in one plot?

第一步。加载所需的包。

library(ggplot2)
library(MASS)

第二步。生成符合伽马分布的 10,000 个数字。

x <- round(rgamma(100000,shape = 2,rate = 0.2),1)
x <- x[which(x>0)]

第三步。绘制pdf(概率密度函数),假设我们不知道哪个分布x适合。

t1 <- as.data.frame(table(x))
names(t1) <- c("x","y")
t1 <- transform(t1,x=as.numeric(as.character(x)))
t1$y <- t1$y/sum(t1[,2])
ggplot() + geom_point(data = t1,aes(x = x,y = y)) + theme_classic()

第四步。从图中我们可以看出x的分布很像伽马分布,所以我们使用包MASS中的fitdistr()来得到shape和[=的参数20=] 的伽玛分布。

fitdistr(x,"gamma") 
##       output 
##       shape           rate    
##   2.0108224880   0.2011198260 
##  (0.0083543575) (0.0009483429)

第五步。在同一张图中绘制实际点(黑点)和拟合图(红线),这就是问题,请先看图

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +     
geom_line(aes(x=t1[,1],y=dgamma(t1[,1],2,0.2)),color="red") + 
theme_classic()

问题一:真正的参数是shape=2rate=0.2,而我用函数fitdistr()得到的参数是shape=2.01rate=0.20 .这两个差不多,但是为什么拟合图和实际点拟合不好,一定是拟合图有问题,或者我画拟合图和实际点的方式完全不对,怎么办?

问题2:我得到模型的参数后,我用什么方式来评估模型,比如线性模型的RSS(residual square sum),或者[=28=的p-value ] , ks.test() 等测试?我的统计知识很差,请帮我出出这两个问题,谢谢!(ps: 我在Google和Whosebug中搜索了很多次,但都不行,所以不要投这个问题没用,谢谢!)

出于某种原因,您的拟合线似乎恰好高出 10 倍:

ggplot() + geom_point(data = t1,aes(x = x,y = y)) +     
  geom_line(aes(x=t1[,1],y=(dgamma(t1[,1],2,0.2))/10),color="red") + 
  theme_classic()

非常适合:

正如 jbaums 所说,这是由每个 dx 的密度在这种情况下为 0.1 引起的。