R:引导置信区间

最近,我在Julia Evans的博客上遇到了一篇有趣的文章,展示了如何通过对我们实际上使用bootstrapping 的一小部分数据点进行采样生成更多的数据点 。 Julia的示例全部使用Python,因此我认为将它们转换为R是一个有趣的练习。

我们正在进行引导,以模拟一次航班的未出现次数,因此我们可以算出可以超额预定飞机的座位数。

我们从一小部分未出现的航班开始,然后假设可以将某人从5%的航班中踢出去是可以的。 让我们算出最初样本中有多少人:

> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
  5% 
0.35

0.35人! 这不是一个特别有用的结果,因此我们将对原始数据集进行10,000次重新采样,每次取5%,以查看是否有更好的结果:

我们将使用带有替换功能的sample函数来生成我们的重采样:

> sample(data, replace = TRUE)
[1] 0 3 2 8 8 0 8 0
> sample(data, replace = TRUE)
[1] 2 2 4 3 4 4 2 2

现在让我们编写一个函数来多次执行此操作:

library(ggplot)
 
bootstrap_5th_percentile = function(data, n_bootstraps) {
  return(sapply(1:n_bootstraps, 
                function(iteration) quantile(sample(data, replace = TRUE), 0.05)))
}
 
values = bootstrap_5th_percentile(data, 10000)
 
ggplot(aes(x = value), data = data.frame(value = values)) + geom_histogram(binwidth=0.25)

2015-07-19_18-05-48

因此,该可视化告诉我们,我们可以以0-2人的价格超额销售,但我们不知道确切的数字。

让我们尝试相同的练习,但是初始数据集包含更大的1,000个值而不是8个值。首先,我们将生成一个分布(平均值为5,标准差为2)并将其可视化:

library(dplyr)
 
df = data.frame(value = rnorm(1000,5, 2))
df = df %>% filter(value >= 0) %>% mutate(value = as.integer(round(value)))
ggplot(aes(x = value), data = df) + geom_histogram(binwidth=1)

2015-07-19_18-09-15

我们的发行版似乎在4和5周围具有更多的值,而Python版本的发行版更扁平–我不确定为什么这样,如果您有任何想法让我知道。 无论如何,让我们检查一下此数据集的5%ile:

> quantile(df$value, 0.05)
5% 
 2

凉! 现在至少我们有一个整数值,而不是我们之前获得的0.35。 最后,让我们对新发行版进行一些引导,看看我们得出的5%ile:

resampled = bootstrap_5th_percentile(df$value, 10000)
byValue = data.frame(value = resampled) %>% count(value)
 
> byValue
Source: local data frame [3 x 2]
 
  value    n
1   1.0    3
2   1.7    2
3   2.0 9995
 
ggplot(aes(x = value, y = n), data = byValue) + geom_bar(stat = "identity")

2015-07-19_18-23-29

“ 2”是迄今为止最受欢迎的5%ile,尽管它似乎比使用Julia的Python版本更重视该值,因为我想这是因为我们似乎是从略有不同的分布中取样的。

翻译自: https://www.javacodegeeks.com/2015/07/r-bootstrap-confidence-intervals.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值