2012-01-10 150 views
1

是否有簡單的方法來繪製兩個概率密度函數之間的差異?兩個密度圖之間的差異

我可以在同一個圖上繪製我的數據集(都是具有大約11000個值的一維向量)的pdf,以獲得重疊/差異的想法,但如果我可以對它更有用看到一個差異的陰謀。

沿東西線以下的(儘管這顯然是不工作):

> plot(density(data1)-density(data2)) 

我是比較新的R和一直無法找到我尋找任何的論壇。

在此先感謝

回答

4

這應該工作:

plot(x =density(data1, from= range(c(data1, data2))[1], 
         to=range(c(data1, data2))[2])$x, 
    y= density(data1, from= range(c(data1, data2))[1], 
        to=range(c(data1, data2))[2])$y- 
     density(data2, from= range(c(data1, data2))[1], 
         to=range(c(data1, data2))[2])$y) 

訣竅是確保密度具有相同的極限。然後你可以在相同的地點繪製他們的差異。我對理解相同限制的需求來自於在回答similar question on Rhelp several years ago時沒有采取這一步驟的錯誤。太糟糕了,我不記得正確的論點。

+0

感謝您的幫助 – 2012-01-10 19:26:15

1

它看起來像你需要花一點時間來學習如何使用R(或任何其他語言,對於這個問題)。幫助文件是你的朋友。 從輸出?density

值[即由該函數返回的數據]

如果give.Rkern爲真,則數R(K),以其他方式與類 ,其基本結構是一個包含 以下組分的列表中的「密度」的對象。

x估計密度點的n個座標。

y估計的密度值。這些都將是不可否定的,但可以 爲零

所以[ 「價值」 爲簡潔起見刪除的剩餘部分],做:

foo<- density(data1) 
bar<- density(data2) 
plot(foo$y-bar$y) 
+0

@Joran - 感謝您的清理。而DWin提供了一個很好的觀點:默認情況下,'density'使用512點,但是如果你使用網格或者data1和data2的範圍不同,你需要確保foo $ x和bar $ x是「對齊「。 – 2012-01-10 19:18:49

+4

我編輯你的答案(非常),以幫助你避免被標記。我也對初學者感到沮喪,但這個縮寫詞可能會以錯誤的方式揉搓人,並且通常在這裏受到折磨。 – joran 2012-01-10 19:19:02

+1

感謝您的洞察力。我讀過密度,但我想我對R語法不夠熟悉,無法正確使用它告訴我的內容。學習過程的所有部分! – 2012-01-10 19:21:14