Как интерпретировать различные плотности ggplot2?
Я запутался в значении следующих вариантов geom_density
в ggplot:
Кто-нибудь может объяснить разницу между этими четырьмя вызовами:
- geom_density (aes_string (x = 'myvar')) VS
- geom_density (aes_string (x = 'myvar', y = '.. плотность..')) VS
- geom_density (aes_string (x = 'myvar', y = '.. scaled..')) VS
- geom_density (aes_string (x = 'myvar', y = '.. count../sum (.. count..)'))?
Я понимаю, что:
-
geom_density
будет производить плотность, площадь которой под кривой суммируется до 1
-
geom_density
с ..density..
в основном делает то же самое...?
-
..count../sum(..count..)
будет нормализовать высоту пика, чтобы быть больше похожей на нормированную гистограмму, гарантируя, что все высоты суммируются до 1
-
..count..
сам по себе без знаменателя будет просто умножать каждый бит на # элементов в нем
- параметр
..scaled..
сделает так, чтобы максимальное значение плотности было равно 1.
Я нахожу ..scaled..
очень противоречивым и никогда не видел, чтобы он использовался, если моя интерпретация его верна, поэтому я хотел бы проигнорировать это. Я в основном ищут разъяснения различий между geom_density
и своего рода нормализованным графиком плотности, который, как я предполагаю, требует аргумента ...count../...
. спасибо.
(Связано: Ошибка с переменной ggplot2 для преобразования в y и с использованием stat = "bin" )
Ответы
Ответ 1
Эстетика по умолчанию для stat_density
равна ..density..
, поэтому вызов geom_density
, который использует stat_density
по умолчанию, по умолчанию будет строить y = ..density..
.
Вы можете видеть, как различные столбцы оцифровываются, просматривая исходный код
..scaled..
определяется как
densdf$scaled <- densdf$y / max(densdf$y, na.rm = TRUE)
Не стесняйтесь игнорировать его, если хотите.
Глядя на исходный код для stat_bin
Результаты вычисляются как таковые
res <- within(results, {
count[is.na(count)] <- 0
density <- count / width / sum(abs(count), na.rm=TRUE)
ncount <- count / max(abs(count), na.rm=TRUE)
ndensity <- density / max(abs(density), na.rm=TRUE)
})
Итак, если вы хотите сравнить результаты geom_histogram
(используя значение по умолчанию stat = 'bin'
), вы можете установить y = ..density..
и он рассчитает count / sum(count)
для вас (с учетом ширины бункеров)
Если вы хотите сравнить geom_density(aes(y=..scaled..))
с stat_bin
, вы должны использовать geom_histogram(aes(y = ..ndensity..))
Вы можете получить их в том же масштабе, используя ..count..
в обоих случаях, однако вам нужно будет отрегулировать параметр adjust
в stat_density
, чтобы получить надлежащим подробное приближение кривой.