置信区间的置信区间
最近,我在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)
因此,该可视化告诉我们,我们可以以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)
我们的发行版似乎具有更多的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 9995ggplot(aes(x = value, y = n), data = byValue) + geom_bar(stat = "identity")
“ 2”是迄今为止最受欢迎的5%ile,尽管它似乎比使用Julia的Python版本更重视该值,这是因为我们似乎是从略有不同的分布中取样的。
翻译自: https://www.javacodegeeks.com/2015/07/r-bootstrap-confidence-intervals.html
置信区间的置信区间