count/value ("binned") 数据的概率密度图
Probability density plots from count/value ("binned") data
我有一个包含 2700 万个样本的数据集每天。我可以使用 count()
将其减少到每天 1500 个样本,而不会丢失。
例如,当我绘制直方图时,我可以使用 stat="identity"
比原始数据更快地处理计数数据。
有没有类似的方法,利用ggridges::geom_density_ridges()
处理计数数据得到脊线,或者类似的方法,不用处理原始数据集就可以得到概率密度?
听起来您当前的 set-up 是这样的(显然有更多的情况):一个包含大量数值测量向量的数据框,至少有一个分组变量来指定不同的脊线。
出于演示目的,我们将坚持使用 2000 个样本而不是 2700 万个样本:
set.seed(1)
df <- data.frame(x = round(c(rnorm(1000, 35, 5), rnorm(1000, 60, 12))),
group = rep(c('A', 'B', 'C'), len = 2000))
我们可以使用 count
将这 2000 个观察值减少到 ~200 个,并使用 stat = 'identity'
绘制 geom_histogram
:
df %>%
group_by(x, group) %>%
count() %>%
ggplot(aes(x, y = n, fill = group)) +
geom_histogram(stat = 'identity', color = 'black')
但我们想根据这 200 行计数而不是原始数据创建密度脊线。当然,我们可以 uncount 它们并正常创建密度脊线,但这会非常低效。我们可以做的是使用计数作为密度计算的权重。似乎 geom_density_ridges
不接受 weight
参数,但 stat_density
接受,你可以告诉 it 使用 density_ridges
几何。这允许我们将我们的计数作为密度计算的权重。
library(ggridges)
df %>%
group_by(x, group) %>%
count() %>%
ggplot(aes(x, fill = group)) +
stat_density(aes(weight = n, y = group, height = after_stat(density)),
geom = 'density_ridges', position = 'identity')
请注意,这应该给我们与在计数之前从我们的整个数据集中创建一个 ridgleine 相同的结果,因为我们的 'bins' 是唯一的间隔值。如果您的真实数据在计数之前对连续数据进行分箱,则在使用计数数据时,您的核密度估计会稍微不准确,具体取决于 'thin' 您的分箱情况。
我有一个包含 2700 万个样本的数据集每天。我可以使用 count()
将其减少到每天 1500 个样本,而不会丢失。
例如,当我绘制直方图时,我可以使用 stat="identity"
比原始数据更快地处理计数数据。
有没有类似的方法,利用ggridges::geom_density_ridges()
处理计数数据得到脊线,或者类似的方法,不用处理原始数据集就可以得到概率密度?
听起来您当前的 set-up 是这样的(显然有更多的情况):一个包含大量数值测量向量的数据框,至少有一个分组变量来指定不同的脊线。
出于演示目的,我们将坚持使用 2000 个样本而不是 2700 万个样本:
set.seed(1)
df <- data.frame(x = round(c(rnorm(1000, 35, 5), rnorm(1000, 60, 12))),
group = rep(c('A', 'B', 'C'), len = 2000))
我们可以使用 count
将这 2000 个观察值减少到 ~200 个,并使用 stat = 'identity'
绘制 geom_histogram
:
df %>%
group_by(x, group) %>%
count() %>%
ggplot(aes(x, y = n, fill = group)) +
geom_histogram(stat = 'identity', color = 'black')
但我们想根据这 200 行计数而不是原始数据创建密度脊线。当然,我们可以 uncount 它们并正常创建密度脊线,但这会非常低效。我们可以做的是使用计数作为密度计算的权重。似乎 geom_density_ridges
不接受 weight
参数,但 stat_density
接受,你可以告诉 it 使用 density_ridges
几何。这允许我们将我们的计数作为密度计算的权重。
library(ggridges)
df %>%
group_by(x, group) %>%
count() %>%
ggplot(aes(x, fill = group)) +
stat_density(aes(weight = n, y = group, height = after_stat(density)),
geom = 'density_ridges', position = 'identity')
请注意,这应该给我们与在计数之前从我们的整个数据集中创建一个 ridgleine 相同的结果,因为我们的 'bins' 是唯一的间隔值。如果您的真实数据在计数之前对连续数据进行分箱,则在使用计数数据时,您的核密度估计会稍微不准确,具体取决于 'thin' 您的分箱情况。