我正在处理一个数据集,该数据集由两组不同的观察值组成,其中值为整数。我想绘制这些密度以了解不同组如何分布在值上。
发生了什么事情是一组具有'平滑'密度而另一组具有'波浪'密度。我知道这与带宽有关,而且我的数据基本上与离散观察有关,但如果有人可以解释原因,我会很高兴。
以下是一个例子:
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()
答案 0 :(得分: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")