qqline连接第一和第三四分位数。如何在不同的分位数(即30%和70%)之间画一条线?

时间:2012-10-07 05:04:03

标签: r plot

我有一个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()绘制线。但是,相当耗时的方式。

3 个答案:

答案 0 :(得分:2)

我认为你只需要

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

编辑:我从R: qqline connects the first and third quartiles. How do I draw a line between different quantiles (ie 30% and 70%)?的评论中看到,区别在于我正在使用R-devel,并且(正如@caracal指出的那样)此功能是新的,因为R 2.15.1修补(见http://developer.r-project.org/blosxom.cgi/R-2-15-branch/NEWS,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()

enter image description here

答案 1 :(得分:2)

修改

以下信息对R(和stats包)版本2.15.1有效 - 显然更高版本将包含绘制任意分位数的内置功能。<​​/ p>


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))  

enter image description here

没有检查以确保只向probs参数提供两个分位数,但如果需要,可以添加它。

答案 2 :(得分:1)

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

来创建新功能
x <- qnorm(c(0.30, 0.70))