在R中用分位数绘图

Xod*_*rap 1 r ggplot2

我想绘图foo ~ bar.但是,我不想查看确切的数据,我宁愿分解bar为分位数,并绘制mean(foo)每个分位数(因此我的最终绘图将有5个数据点).这可能吗?

42-*_*42- 6

 foo <- rnorm(100)
 bar <- rnorm(100)

  mn.foo.byQ10bar <- tapply(foo, cut(bar, quantile(bar, (0:5)/5, na.rm=TRUE)), mean)

> mn.foo.byQ5bar
 (-3.31,-0.972] (-0.972,-0.343]  (-0.343,0.317]   (0.317,0.792]    (0.792,2.71] 
     0.13977839      0.03281258     -0.18243804     -0.14242885     -0.01696712 

 plot(mn.foo.byQ5bar)
Run Code Online (Sandbox Code Playgroud)

这是一个相当标准的任务,Harrell的Hmisc包的cut2函数有一个很好的gr =参数,你可以通过为组数指定一个整数来实现.我也喜欢它,因为切割操作的间隔是左关闭而不是R默认为右关闭.

  • 有些人似乎比散点图更喜欢条形图.(我不在那个类别中,如果观测数量超过几百个,则使用六边形图或二维密度图连续比较连续.)这个条形图方法可能支持可视化4自由度卡方GOF测试(再次不是我建议的),其中自变量按五分位数分组,相应的foo-means为高度. (4认同)

Ric*_*rta 5

您可以将许多这些行组合成更简洁的代码,但在这里它已被分解

# Sample Data: 
x <- 1:100;   y <- rnorm(x)

# Number Of Groups
N <- 5

# quantiles
Q.y <- quantile(y, probs=seq(0, 1, length=(N+1)))
Q.x <- quantile(x, probs=seq(0, 1, length=N))

# means of y by quantile
means.y <- c(by(y, cut(y, Q.y), mean))

# plot them 
qplot(Q.x, means.y)
Run Code Online (Sandbox Code Playgroud)