我在R中使用
生成了n个元素的样本sim.geometric <- function(n)
{
u <- runif(n)
10*u/log(0.5)
}
我想测试它的分布,特别是如果它确实遵循几何分布。我想生成一个QQ PLOT但不知道如何。你能帮忙吗?
提前致谢。
答案 0 :(得分:2)
与从具有相同概率参数的几何分布绘制的“真实”样本相比,QQ图应该是一条直线。一个给出函数的两个向量,它们基本上比较了它们在每个分位数处的逆ECDF。这个特定的采样不是完全笔直的事实并不是一个存在问题的好信号。一方面,重复点没有给予足够的重量,因为它们是重叠的。这意味着右尾点的重要性是他们不配得到的。
sim.res <- sim.geometric(100)
sim.rgeom <- rgeom(100, 0.3)
qqplot(sim.res, sim.rgeom)
在这里,我跟随qqplot帮助页面作者的主角(导致翻转身份线周围的上方曲线):
png("QQ.png")
qqplot(qgeom(ppoints(100),prob=0.3), sim.res,
main = expression("Q-Q plot for" ~~ {G}[n == 100]))
dev.off()
您可以通过绘制每条分布的第25和第75百分位数的线来添加“良好拟合线”。 (我为此添加了一个抖动功能,以便更好地了解“概率质量”所在的位置:)
sim.res <- sim.geometric(500)
qqplot(jitter(qgeom(ppoints(500),prob=0.3)), jitter(sim.res),
main = expression("Q-Q plot for" ~~ {G}[n == 100]), ylim=c(0,max( qgeom(ppoints(500),prob=0.3),sim.res )),
xlim=c(0,max( qgeom(ppoints(500),prob=0.3),sim.res )))
qqline(sim.res, distribution = function(p) qgeom(p, 0.3),
prob = c(0.25, 0.75), col = "red")