步骤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()