3

步骤1。加载所需的包。

library(ggplot2)
library(MASS)

第2步。生成 10,000 个适合 gamma 分布的数字。

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

步骤 3。绘制 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()

在此处输入图像描述

第4步。从图中我们可以看出 的分布x很像 gamma 分布,所以我们使用fitdistr()in packageMASS来获取 gamma 分布的shape和的参数rate

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

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

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=2, rate=0.2,我用函数fitdistr()获取的参数是shape=2.01, rate=0.20。这两个几乎一样,但是为什么拟合图不能很好地拟合实际点,肯定是拟合图有问题,或者我绘制拟合图和实际点的方式完全错误,我该怎么办?

问题2:在我得到我建立的模型的参数后,我以哪种方式评估模型,比如线性RSS(residual square sum)模型,或者p-value其他测试?我统计知识贫乏,请大家帮我解答一下,谢谢!(ps:我在google和stackoverflow上搜索过很多次,但都没有用,所以不要投这个问题没用,谢谢! )shapiro.test()ks.test()

4

1 回答 1

1

出于某种原因,您的拟合线似乎正好是 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 所说,这是由在这种情况下为 0.1 的每 dx 密度引起的。

于 2016-01-12T09:09:02.580 回答