ggplot2和QQ图用于非高斯分布

时间:2010-08-18 16:16:16

标签: r ggplot2

我生成一个QQ图来比较我的ranom数字生成器与beta分布的分布。我可以使用R via

中的常用绘图命令来完成此操作
samples1 <- read.csv("test1-clean.dat")
qqplot( samples1$p0, qbeta(seq(0,1,length=length(samples1$p0)),1,3) )
abline( 0, 1 )

但我想使用ggplot2库,我只是无法理解文档(对于R来说,我是n00b)

我试过

qplot( sample = p0, data = samples1 ) + stat_qq( distribution = qbeta, seq(0,1,length=length(samples1$p0)), 1, 3 )

但是这会导致格式错误

Error: ggplot2 doesn't know how to deal with data of class numeric

有什么建议吗?另外,关于学习R的好参考会很棒(我熟悉C,C ++,Matlab等,但R现在对我来说有点奇怪)

更新

如下所示,我试过

params = list(shape1 = 1, shape2 = 3, lower.tail = TRUE, log.p = FALSE)

qplot( sample = p0, data = samples3 ) + stat_qq( distribution = qbeta, dparams = params )

这仍然似乎不起作用。我得到的错误是

Error in function (p, shape1, shape2, ncp = 0, lower.tail = TRUE, log.p = FALSE)  : 
  element 2 is empty;
   the part of the args list of '.Internal' being evaluated was:
   (p, shape1, shape2, lower.tail, log.p)

我尝试将lower.tail和log.p添加到params以及概率列表p中,但这并没有改变错误消息。

2 个答案:

答案 0 :(得分:5)

我想我已经解决了。您需要将分发参数作为命名值列表传递到dparams中的stat_qq()。对于您的数据,这将是(如果我理解您的qbeta()电话)

params = list(shape1 = 1, shape2 = 3)

ggplot(samples1, aes(sample = p0))+
   stat_qq(distribution = qbeta, dparams = params)

答案 1 :(得分:1)

在Stack Overflow上有很多关于学习R. Here's a few的好建议。

您可以在搜索字符串中添加r来搜索Stack Overflow中标记为[r]的所有问题。因此,对于上面的链接,我搜索了[r] learning

我会让一个使用ggplot2的人比我更回答你的ggplot问题。