График плотности ggplot для нескольких групп - PullRequest
3 голосов
/ 14 января 2020

Использование R ggplot для построения графика плотности для нескольких графиков.

Использование следующего data.frame:

set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("F", "M"), each=5)),
  weight=round(c(rnorm(5, mean=0, sd=0),
                 rnorm(5, mean=2, sd=5)))
)

Давайте сначала построим только женскую группу:

library(dplyr)
ggplot(df %>% filter(sex=="F"), aes(x=weight, color=sex)) + geom_density()

График плотности только для женщин

enter image description here

Но, если мы попытаемся построить как мужчин, так и женщин:

ggplot(df, aes(x=weight, color=sex)) + geom_density()

плотность график для женщин и мужчин

enter image description here

Мы получаем совершенно другой график плотности для женщин

Я предполагал, что плотность рассчитано для населения. Таким образом, добавление другой группы населения (в данном случае мужчин) не должно изменять плотность женщин.

1 Ответ

2 голосов
/ 14 января 2020

Все женщины имеют вес 0, поэтому from и to в density() равны 0, поэтому вы получаете вертикальную линию. Когда мужчины добавляются, вы получаете другие from и to (-10 и 7, диапазон weight сейчас), а затем он делает оценку плотности с полосой пропускания, определенной алгоритмом nrd0. (См. ?bw.nrd0; в данном случае это около 4 для мужчин и 0,65 для женщин.) Сглаживание (по умолчанию гауссово) создает остроконечную форму.

Чтобы лучше понять, что происходит, попробуйте несколько другие аргументы для параметров density(), например

ggplot(df, aes(x=weight, color=sex)) + geom_density(kernel = 'triangular', bw = 0.5)

triangular with longer bandwidth

...