2013-03-31 36 views
1

我想繪製foo ~ bar。但是,我不想查看確切的數據,我寧願將bar分解爲分位數,並且對於每個分位數計算mean(foo)(因此我的最終分佈圖將有5個數據點)。這可能嗎?按分位數繪製在R

+0

你看過'?quantile'嗎? –

+0

你好!請通過看看[**如何使一個偉大的可重複的例子**],使您的文章可重現(http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-例如)爲我們提供幫助。謝謝。 – Arun

回答

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) 

這是一個相當標準的任務和哈勒爾的Hmisc包的cut2功能有一個很好的GR =這個參數可以讓你通過爲組數指定一個整數來做到這一點。我也喜歡它,因爲剪切操作的間隔是左閉合的,而不是右閉合的R默認值。

+1

丁,你能簡單地告訴(如果你知道)這種情節的想法是什麼?根據每個分位數範圍內的數據平均值繪製分位數。我無法想象它背後的想法...... – Arun

+4

有些人似乎喜歡幽靈般的情節,而不是散佈情節。 (我不屬於這個類別,如果觀察次數超過幾百次,則連續比較將使用hexbin圖或2d密度圖進行連續)。此barplot方法可能支持可視化4自由度卡方GOF測試(再次不是我會建議的),其中自變量按五分組分組,並且相應的foo-means是杆高。 –

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)