Как интерпретировать различные плотности 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, чтобы получить надлежащим подробное приближение кривой.