[英]Interpreting Density Plot in R
我有一個以天為單位的年齡列表,我希望在密度圖中以年為單位顯示它們。
我有兩種方法-將x軸上的標簽更改為年,然后將數據除以365。這些方法為我提供了不同的密度估計:
df <- data.frame(id = 1:80000, age = rnorm(80000, 46, 5) * 365)
使用以下方法生成第一個圖:
breaks <- seq(from = min(df$age), to = max(df$age), by = 10*365)
ggplot(data = df, aes(x = age)) +
geom_density(aes(y = ..density..)) +
scale_x_continuous(breaks= breaks, labels = floor(breaks/365))
y軸上顯示的密度范圍是0到0.0002
但是,當我執行此操作時(將年齡除以365以得到年份-不僅要像上面那樣更改x標簽):
ggplot(data = df, aes(x = age/365)) +
geom_density(aes(y = ..density..))
該圖看起來相同,但密度范圍為0到0.08,我正在努力了解發生了什么-為什么兩個圖之間的密度不同?
在兩個圖中,密度是不同的,因為在一種情況下,水平單位是365倍,因此,考慮到概率密度函數(這些曲線下的面積),垂直單位將是其他圖中的1/365。必須加一。
就容器而不是密度曲線而言,這更容易考慮。 如果您有一個垃圾箱替換了365個垃圾箱,則降落在一個垃圾箱中的概率將大大高於單個垃圾箱中降落的平均概率。
對於您提供的特定樣本數據,通過查看兩個函數的峰值,我們可以看到垂直單位之間的轉換:
> max(density(df$age)$y) # max of density in days, more horizontal units
[1] 0.0002178977
> df$ageinyears <- df$age/365 # create an age-in-years variable
> max(density(df$ageinyears)$y) # max density in years, fewer horizontals
[1] 0.07953267
> max(density(df$age)$y)*365
[1] 0.07953267
實際原因(在繪制中是一個問題)(可能是您問題的主旨)是用於估算ggplot密度的函數正在繼承父aes()的x參數。 因此,它對您使用的自定義x軸一無所知。 您可以顯式地告訴geom_density不要使用繼承的x值,而不僅僅是在第一個圖中更改x軸:
ggplot(data = df, aes(x = age)) +
geom_density(aes(x = age/365, y = ..density..))
最好的建議是僅忽略y軸上的刻度標簽,它們完全無法解釋密度圖,而且正如您所看到的,它更容易造成混淆而不是有所幫助。
我更喜歡密度圖,直方圖和任何類似圖的默認行為,以不標記y軸刻度線,因為它們通常不表示任何含義,只會分散注意力於圖的重要部分,並且經常導致混亂。 即使將其縮放為有意義的值,它們也無助於繪圖的主要目的,並且仍會引起混亂(我更改了直方圖中的bin數量,現在我的y-tick標簽非常不同,驚慌!恐慌!)。 不幸的是,繪制它們的慣性太大,以至於我一個人不可能改變這種情況。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.