我有一个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()
绘制线。但是,相当耗时的方式。
答案 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()
答案 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))
没有检查以确保只向probs
参数提供两个分位数,但如果需要,可以添加它。
答案 2 :(得分:1)
通过复制代码并将第二行更改为:
来创建新功能x <- qnorm(c(0.30, 0.70))