2012-02-12 41 views
2

我有兩個相關的問題。R直方圖和密度圖中的軸標記;密度圖的多重疊加

問題1:我目前使用下面的代碼來生成與密度圖重疊的直方圖:

hist(x,prob=T,col="gray") 
axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20)) 
lines(density(x)) 

我已經粘貼的數據(即x上文)here

我有代碼的兩個問題,因爲它代表:

  • 的最後一跳和x軸的標籤(100)不會出現在直方圖/陰謀。我怎麼能把這些?
  • 我想Y軸是數量或頻率而不是密度,但我想保留密度圖作爲覆蓋在直方圖上。我怎樣才能做到這一點?

問題2:使用類似的問題的解決方案1,我現在想與在y軸,而不是密度頻率疊加3個密度圖(未直方圖),一次。這三個數據集在:

  1. http://pastebin.com/z5X7yTLS

  2. http://pastebin.com/Qg8mHg6D

  3. http://pastebin.com/aqfC42fL

+1

如果你讓y軸爲計數(你可以在花費時間閱讀'?hist'後進行計數),那麼'密度'可能會縮小到幾乎沒有註冊。您需要將其乘以觀測的總數,才能使其與計數相同。 – 2012-02-12 04:22:14

回答

5

這是你的第一個2個問題:

myhist <- hist(x,prob=FALSE,col="gray",xlim=c(0,100)) 
    dens <- density(x) 
    axis(side=1, at=seq(0,100, 20), labels=seq(0,100,20)) 
    lines(dens$x,dens$y*(1/sum(myhist$density))*length(x)) 

直方圖的寬度爲5,也等於1/sum(myhist$density),而density(x)$x處於小跳躍狀態,在您的情況下爲約0.2(即使步長爲512)。 sum(density(x)$y)是一些奇怪的數字,絕對不是1,但那是因爲它在小步驟中進行劃分,除以x間隔大約爲1:sum(density(x)$y)/(1/diff(density(x)$x)[1])。之後你不需要這樣做,因爲它已經與它自己的奇數x值匹配了。按照DWin的說法,對於hist()的bin寬度和2)對於x length(x)的頻率的比例1)。在設置xlim參數後,最後一個座標軸刻度變爲可見。

做你的問題2,設置了正確的尺寸(xlimylim)情節,與type = "n",再畫3條線的密度,使用與上述密度線東西縮放。然而,想想你是否想要那些半連續的線條來反映帶有寬度爲5的虛擬條的高度......你會發現這可能會使密度線誇大任何特定點的計數嗎?

enter image description here

+0

謝謝。我決定不使用頻率在y軸上的密度疊加圖。 – user1202664 2012-02-12 17:07:00

+0

@ user1202664可能是一個好主意 – 2012-02-12 17:11:18

0

雖然這是一個年齡線,如果有人抓住這一點。我認爲這是一個'好主意',可以放棄基於用戶試圖做的事情來轉換y密度來計算尺度。

使用頻率作爲y值有很好的理由。特別想到的一個想法是,如果混合分佈模型不能合理或直觀地應用,那麼使用計數來計算y比例值可以給分析人員一個好的想法,即從何處開始對異構數據進行分層的'數據搜索'。

實際上,在觀察的直方圖上覆蓋密度估計對於數據質量檢查非常有用。例如,在上面,如果我將上述圖形看作是單個數據源,並假設它描述了「1事件」,並且我希望將此模型設爲「1事件」,我有一個問題。也就是說,我有不同的數據可能需要一定程度的分層。然後,密度疊加變成檢測異質性的簡單可視工具(除了使用對數變換來平滑區間變化之外)和用於分層數據的方向(混合分佈的位置)。