使用十六进制binning对QQ图进行下采样

时间:2014-09-09 19:48:15

标签: r plot ggplot2 data-visualization hexagonal-tiles

我的数据集非常大,渲染生成的 QQ图很慢,有时甚至会冻结我的浏览器。我知道我有一个选项就是下采样数据向量。但是,我想尝试 hex binning 技术而不是下采样。不幸的是,我无法使它工作(我的几次尝试中有两次显示如下)。如果下采样可以实现使用十六进制分箱(我怀疑是,因为它类似于直方图),我很感激,如果有人可以告诉我如何做到这一点。我使用ggplot2。谢谢!

g <- ggplot(df, aes(x=var)) + stat_qq(aes(x = var), geom = "hex")

g <- ggplot(df, aes(x = var, y = ..density..)) + 
    geom_hex(aes(sample = var), stat = "qq")

print (g)

第一次调用会导致以下错误消息:

Error: stat_qq requires the following missing aesthetics: sample

第二次调用会产生以下消息:

Error in eval(expr, envir, enclos) : object 'density' not found

更新:我认为更正确的变体是这个,但我不确定应该是什么参数:

g <- ggplot(df, aes(??, ??)) +  stat_binhex()

1 个答案:

答案 0 :(得分:1)

不确定这是否正是您正在寻找的,但我提供了几种方法来进行六边形分级。首先使用ggplot,因为你正在尝试使用ggplot,第二个使用包hexbin,这看起来对我来说更好,但只是我的偏好。

    library(ggplot2)

    x <- rgamma(1000,8,2)
    y <- rnorm(1000,4,1.5)
    binFrame <- data.frame(x,y)

    qplot(x,y,data=binFrame, geom='bin2d') # with ggplot...rectangular binning actually

    library(hexbin)
    hexbinplot(y~x, data=binFrame) # with hexbin...actually hexagonal binning

编辑:

所以我在午餐时想到了这个问题,我认为基本问题是hexbining是一种多维数据缩减技术,看起来你试图在真正大样本上做单变量的QQ图,但是用hexbin在ggplot中。无论如何,我可以想到用ggplot做一个hex bin图的方法,但我想出的最好的方法是从头开始并手动构造理论分位数(x)和样本分位数(y)。所以这就是我想出来的。

手动基本QQ图

# setting up manual QQ plot used to plot with and with out hexbins

    xSamp <- rgamma(1000,8,.5) # sample data
    len <- 1000
    i <- seq(1,len,by=1)
    probSeq <- (i-.5)/len # probability grid
    invCDF <- qnorm(probSeq,0,1) # theoretical quantiles for standard normal, but you could compare your sample to any distribution
    orderGam <- xSamp[order(xSamp)] # ordered sampe
    df <- data.frame(invCDF,orderGam)

    plot(invCDF,orderGam,xlab="Standard Normal Theoretical Quantiles",ylab="Standardized Data Quantiles",main="QQ-Plot")
    abline(lm(orderGam~invCDF),col="red",lwd=2)

Regular QQ Plot

ggplot中使用Hexbins的QQ图:

 ggplot(df, aes(invCDF, orderGam)) + stat_binhex() + geom_smooth(method="lm")
![QQ情节与ggplot] [2]

因此,在一天结束时,这可能无法轻易扩大,但如果您希望对正态性进行真正的多维测试,您可能会考虑多元正态性的卡方图。欢呼声