我有一组观察来测量从初始事件开始的时间延迟,例如从发送电子邮件到打开电子邮件的时间。
给定一组100个观测值,我怎样才能知道90%的开放发生在什么时间点。我希望能够说“90%的开放时间是在发送时间的4小时内发生的。”
我可以生成延迟的直方图,这表明大多数打开都发生得很早,但我不知道如何获得垃圾箱中所有计数的累积度量。 (我不是很好地解释自己,不是统计数据)
因此,对于这个样本数据,我有10次观察,延迟1小时,5次延迟2小时,3次延迟3小时,2次延迟4小时。这意味着90%的开放时间不到4小时。如何确定实际观察结果的90%限制?
使用更紧凑的样本数据编辑进行编辑,并在累积百分比图中添加第一个剪切。欢迎更好的解决方案。
library(tidyverse)
library(ggplot2)
all_delays <- tibble(delay = rep(1:4, c(10, 5, 3, 2)))
all_delays
#> # A tibble: 20 x 1
#> delay
#> <int>
#> 1 1
#> 2 1
#> 3 1
#> 4 1
#> 5 1
#> 6 1
#> 7 1
#> 8 1
#> 9 1
#> 10 1
#> 11 2
#> 12 2
#> 13 2
#> 14 2
#> 15 2
#> 16 3
#> 17 3
#> 18 3
#> 19 4
#> 20 4
# histogram of data
ggplot(all_delays) + aes(delay) +
geom_histogram() +
scale_y_continuous(breaks = seq(0,10,1))
#> `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
# newbie incorrect way to get plot of cumulative percentage.
# would welcome better way to do this.
all_delays <- all_delays %>% mutate(cnt = 1) %>%
arrange(delay) %>%
mutate(cs = cumsum(cnt))
ggplot(all_delays) + aes(cs/nrow(all_delays),delay) +
geom_line() +
scale_x_continuous(breaks = c(0,.25,.50,.75,.90,1),
labels=c("0","25%","50%","75%","90%","100%")) +
geom_vline(xintercept =.9) +
xlab("Cumulative Percentage of opens") +
ylab("hours since open")
由reprex package创建于2019-04-27(v0.2.1)
我想我的预期结果是“90%限制= 3”,或某种累积曲线,它将从最短的开放延迟开始,然后增加值,直到达到100%,勾选为90%。
感谢quantile()
的回答!
电子邮件开放费率通常有一个很长的尾巴,其中mot活动在电子邮件发送的一两天内发生,然后在电子邮件发送后几周甚至几个月人们浏览他们的电子邮件收件箱时的长尾。
你描述的是一个分位数。以下代码消除了超过第90个百分点的所有延迟;即,剩余的延迟为您提供了90%的事件发生的点数。
> all_delays %>% filter(delay <= quantile(delay, 0.9))
# A tibble: 18 x 1
delay
<dbl>
1 1
2 1
3 1
4 1
5 1
6 1
7 1
8 1
9 1
10 1
11 2
12 2
13 2
14 2
15 2
16 3
17 3
18 3