geom_density() сгруппированный график с дискретной осью x не является гладким

Я работал с набором данных, который состоит из двух разных групп наблюдений, где значение является целым числом. Я хотел построить их плотность, чтобы понять, как различные группы распределены по значениям.

Случилось так, что одна группа имела "гладкую" плотность, в то время как другая имела "волнистую" плотность. Я знаю, что это как-то связано с пропускной способностью и тем фактом, что мои данные в основном привязаны к дискретным наблюдениям, но я был бы рад, если бы кто-то смог объяснить, почему именно.

Вот пример:

data2 <- rbind(
    data.frame(group=rep('poisson1', 1000), value = rpois(1000, 5)),
    data.frame(group=rep('poisson2', 1000), value = rpois(1000, 45)))

library(ggplot2)
ggplot(data2, aes(x=value, fill=group)) +
  geom_density()

И как ни странно, я могу снова создать этот фрейм данных, чтобы получить новый образец, и график иногда бывает плавным:

1 ответ

Наблюдаемая гладкость (или отсутствие гладкости) "вызвана" rpois() функция. lambda аргумент в rpois() функция должна быть неотрицательным средним значением желаемого случайного распределения. Поэтому, когда вы проходите lambda это ближе к нулю (rpois(1000, 5)) он будет генерировать менее уникальные значения (так как он ограничен нулем).

Рассмотрим этот пример:

nValue <- 1e3
nLambda <- c(1:9, seq(10, 100, 10))

foo <- lapply(nLambda, function(lambda) {
    data.frame(value = rpois(nValue, lambda), lambda)
})
data <- do.call(rbind, foo)
ggplot(data, aes(value, group = lambda, color = lambda)) +
    geom_density()

Мы это видим lambda ближе к нулю будут пики, а при удалении от нуля получатся более плавные линии.

Вы также можете проверить это, глядя на дисперсию в каждом lambda группа:

ggplot(aggregate(data$value, list(data$lambda), var), aes(Group.1, x)) +
    geom_line() +
    geom_point() +
    labs(x = "Lambda",
         y = "Variance")

Другие вопросы по тегам