3

我有一个包含 1000 多个点的数据集的 qqnorm 图。我想一次在两个分位数之间画一条线(比如 30% 和 70%),就像 qqline 对 25% 和 75% 所做的那样,但可以自由选择要使用的分位数。我已经对 ggplot 进行了一些研究,但似乎无法得到有效的东西。最好的方法是什么?

编辑:我的数据是 Ecdat 的 Garch 数据集中美元兑英镑汇率的变化:

diffbp = diff(Garch[,5])

在那之后,我所做的就是

qqnorm(diffbp)

qqline(diffbp)

但我还需要qqline可以通过不同分位数的图,以进行比较。

编辑2:我尝试了以下方法:

> qqnorm(diffbp)

> quantile(diffbp,probs=c(0.01,0.99))
       1%       99% 
-0.029850  0.032675 

> qqline(c(-0.029850,0.032675))

我不认为结果线正是我想要的。也就是说,当我希望它通过适当的分位数时,我相信这条线总是通过 x 轴上的 -1 和 1。

编辑3:想通了!手动计算样本和理论分位数,计算通过它们的直线方程,然后使用 绘制直线abline()。不过,这样做相当耗时。

4

3 回答 3

2

编辑:

以下信息适用于 R(和stats包)版本 2.15.1 - 显然更高版本将包含绘制任意分位数的内置功能。


qqline似乎是硬编码来绘制 .25 和 .75 分位数的。但是,如果您不介意创建自己的函数,则可能会这样做:

myQqplot <- function(data, probs){
  qqnorm(data)
  theQuants <- quantile(data, probs = probs)
  lm1 <- lm(theQuants~qnorm(probs))
  abline(lm1)
  invisible()
}

myQqplot(diffbp, c(.5,.99))  

在此处输入图像描述

没有检查以确保您只为probs参数提供两个分位数,但您可以根据需要添加它。

于 2012-10-07T18:36:55.160 回答
2

我想你只需要

qqline(diffbp,probs=c(0.3,0.7))

编辑:我从 R 的评论中看到:qqline 连接第一和第三四分位数。如何在不同的分位数(即 30% 和 70%)之间画一条线?区别在于我使用的是 R-devel,并且(正如@caracal 指出的那样)这个功能是自 R 2.15.1 修补以来的新功能(参见http://developer.r-project.org/blosxom.cgi/R -2-15-分支/新闻,2012 年 7 月 7 日)

这是一个似乎表明qqline()有效的示例(我使用 0.1、0.9 以获得更大的对比度):

set.seed(101)
z <- rgamma(1000,shape=1)
newprobs <- c(0.1,0.9)
## png("qq.png")
qqnorm(z,pch=".")
qqline(z,col="red")
qqline(z,col="blue",probs=newprobs)
## add reference lines
abline(h=quantile(z,c(0.25,0.75)),col="red",lty=2)
abline(h=quantile(z,newprobs),col="blue",lty=2)
abline(v=qnorm(c(0.25,0.75)),col="red",lty=2)
abline(v=qnorm(newprobs),col="blue",lty=2)
## dev.off()

在此处输入图像描述

于 2012-10-07T17:36:54.617 回答
1

通过复制代码并将第二行更改为:

x <- qnorm(c(0.30, 0.70))
于 2012-10-07T06:25:44.900 回答