给定一个包含时间延迟的数据帧:如何分辨90%的延迟发生在哪一点

时间:2019-04-27 22:54:31

标签: r percentage

我有一组观察结果,用于衡量从初始事件开始的时间延迟,例如从发送电子邮件到打开电子邮件所经过的时间。

给定一组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(v0.2.1)于2019-04-27创建

我猜我的预期结果是“ 90%极限= 3”,或者某种累积曲线,该曲线将从最短的打开延迟开始,然后增加值,直到90%达到100% %。

感谢quantile()的答案!

电子邮件打开率通常有一条长长的尾巴,在发送电子邮件的一两天之内会发生mot活动,然后随着人们在发送电子邮件几周甚至几个月后浏览他们的电子邮件收件箱,发送一条长长的尾巴。

1 个答案:

答案 0 :(得分:0)

您所描述的称为分位数。下面的代码消除了第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