我最近在 Julia Evans 的博客上看到了一篇有趣的文章,展示了如何通过使用 引导程序 对我们实际拥有的 少量数据点进行采样来生成更大的数据点集 。 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%ile,看看我们是否想出更好的方法:
我们将使用带有替换的 示例 函数来生成我们的重采样:
> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
5%
0.35
现在让我们编写一个函数来多次执行此操作:
> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
5%
0.35
所以这个可视化告诉我们,我们可以超卖 0-2 人,但我们不知道确切的数字。
让我们尝试相同的练习,但使用包含 1,000 个值的更大初始数据集,而不是仅仅 8 个。首先,我们将生成一个分布(均值为 5,标准差为 2)并将其可视化:
> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
5%
0.35
我们的分布似乎在 4 和 5 附近有更多的值,而 Python 版本的分布更平坦——我不确定为什么会这样,如果你有任何想法请告诉我。无论如何,让我们检查一下这个数据集的 5%ile:
> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
5%
0.35
凉爽的!现在至少我们有一个整数值而不是我们之前得到的 0.35。最后,让我们对我们的新发行版进行一些引导,看看我们得出了什么 5%ile:
> data = c(0, 1, 3, 2, 8, 2, 3, 4)
> quantile(data, 0.05)
5%
0.35
“2”是迄今为止最受欢迎的 5%ile,尽管它似乎比 Julia 的 Python 版本更倾向于该值,我想这是因为我们似乎从稍微不同的分布中采样。