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