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

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

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

Вот пример:

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()

enter image description here

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

1 Ответ

0 голосов
/ 06 июня 2018

Наблюдаемая гладкость (или отсутствие гладкости) «вызывается» функцией 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()

enter image description here

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

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

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

enter image description here

...