抽样与经验分布

数据科学的一个重要部分是依据随机样本中的数据得出结论。为了正确解读他们的结果,数据科学家必须首先准确理解什么是随机样本。

在本章中,我们将更仔细地研究抽样,特别关注大随机样本的性质。

让我们从抽取一些样本开始。我们的示例基于 top_movies_2017.csv 数据集。

[In ]:
from datascience import *
path_data = '../../assets/data/'
import numpy as np
import matplotlib.pyplot as plots
plots.style.use('fivethirtyeight')
%matplotlib inline
[In ]:
top1 = Table.read_table(path_data + 'top_movies_2017.csv')
top2 = top1.with_column('Row Index', np.arange(top1.num_rows))
top = top2.move_to_start('Row Index')

top.set_format(make_array(3, 4), NumberFormatter)
Row Index | Title                            | Studio          | Gross       | Gross (Adjusted) | Year
0         | Gone with the Wind               | MGM             | 198,676,459 | 1,796,176,700    | 1939
1         | Star Wars                        | Fox             | 460,998,007 | 1,583,483,200    | 1977
2         | The Sound of Music               | Fox             | 158,671,368 | 1,266,072,700    | 1965
3         | E.T.: The Extra-Terrestrial      | Universal       | 435,110,554 | 1,261,085,000    | 1982
4         | Titanic                          | Paramount       | 658,672,302 | 1,204,368,000    | 1997
5         | The Ten Commandments             | Paramount       | 65,500,000  | 1,164,590,000    | 1956
6         | Jaws                             | Universal       | 260,000,000 | 1,138,620,700    | 1975
7         | Doctor Zhivago                   | MGM             | 111,721,910 | 1,103,564,200    | 1965
8         | The Exorcist                     | Warner Brothers | 232,906,145 | 983,226,600      | 1973
9         | Snow White and the Seven Dwarves | Disney          | 184,925,486 | 969,010,000      | 1937
... (190 rows omitted)

抽样表格的行

数据表格的每一行代表一个个体;在 top 中,每个个体是一部电影。因此,抽样个体可以通过抽样表格的行来实现。

一行的内容是在同一个个体上测量的不同变量的值。因此,被抽样行的内容形成了每个变量值的样本。

确定性样本

当你简单地指定要选择集合中的哪些元素,而不涉及任何概率时,你创建的是一个“确定性样本”。

你已经做过很多次了,例如使用 take

[In ]:
top.take(make_array(3, 18, 100))
Row Index | Title                       | Studio      | Gross       | Gross (Adjusted) | Year
3         | E.T.: The Extra-Terrestrial | Universal   | 435,110,554 | 1,261,085,000    | 1982
18        | The Lion King               | Buena Vista | 422,783,777 | 792,511,700      | 1994
100       | The Hunger Games            | Lionsgate   | 408,010,692 | 452,174,400      | 2012

你也使用过 where

[In ]:
top.where('Title', are.containing('Harry Potter'))
Row Index | Title                                       | Studio          | Gross       | Gross (Adjusted) | Year
74        | Harry Potter and the Sorcerer's Stone       | Warner Brothers | 317,575,550 | 497,066,400      | 2001
114       | Harry Potter and the Deathly Hallows Part 2 | Warner Brothers | 381,011,219 | 426,630,300      | 2011
131       | Harry Potter and the Goblet of Fire         | Warner Brothers | 290,013,036 | 401,608,200      | 2005
133       | Harry Potter and the Chamber of Secrets     | Warner Brothers | 261,988,482 | 399,302,200      | 2002
154       | Harry Potter and the Order of the Phoenix   | Warner Brothers | 292,004,738 | 377,314,200      | 2007
175       | Harry Potter and the Half-Blood Prince      | Warner Brothers | 301,959,197 | 359,788,300      | 2009
177       | Harry Potter and the Prisoner of Azkaban    | Warner Brothers | 249,541,069 | 357,233,500      | 2004

虽然这些是样本,但它们不是随机样本。它们不涉及随机性。

概率样本

为了描述随机样本,一些术语将很有帮助。

“总体”是从中抽取样本的所有元素的集合。

“概率样本”是指可以在抽取样本之前计算任何元素子集进入样本的概率的样本。

在概率样本中,并非所有元素被选中的概率都必须相同。

一个随机抽样方案

例如,假设你根据以下方案从由 A、B、C 三人组成的总体中选择两个人:

  • 人员 A 以概率 1 被选中。
  • 人员 B 或 C 之一根据抛硬币结果选择:如果硬币正面朝上,你选择 B;如果反面朝上,你选择 C。

这是一个容量为 2 的概率样本。以下是所有非空子集的入选概率:

A: 1
B: 1/2
C: 1/2
AB: 1/2
AC: 1/2
BC: 0
ABC: 0

人员 A 被选中的概率高于人员 B 或 C;实际上,人员 A 肯定会被选中。由于这些差异是已知且量化的,它们可以在处理样本时被考虑在内。

系统样本

想象总体中的所有元素按序列排列。一种抽样方法是从列表早期随机选择一个位置,然后之后每隔固定位置选择一个。样本由这些位置上的元素组成。这样的样本称为“系统样本”。

这里我们将选择 top 的行的一个系统样本。我们将首先随机选择前 10 行中的一行,然后之后每 10 行选择一行。

[In ]:
"""Choose a random start among rows 0 through 9;
then take every 10th row."""

start = np.random.choice(np.arange(10))
top.take(np.arange(start, top.num_rows, 10))
Row Index | Title                               | Studio               | Gross       | Gross (Adjusted) | Year
6         | Jaws                                | Universal            | 260,000,000 | 1,138,620,700    | 1975
16        | Jurassic Park                       | Universal            | 402,453,882 | 817,186,200      | 1993
26        | Mary Poppins                        | Disney               | 102,272,727 | 695,036,400      | 1964
36        | Love Story                          | Paramount            | 106,397,186 | 622,283,500      | 1970
46        | The Robe                            | Fox                  | 36,000,000  | 581,890,900      | 1953
56        | Rogue One: A Star Wars Story        | Buena Vista          | 532,177,324 | 537,326,000      | 2016
66        | The Dark Knight Rises               | Warner Brothers      | 448,139,099 | 511,902,300      | 2012
76        | Close Encounters of the Third Kind  | Columbia             | 132,088,635 | 494,066,600      | 1977
86        | Transformers: Revenge of the Fallen | Paramount/Dreamworks | 402,111,870 | 479,179,200      | 2009
96        | Toy Story 3                         | Buena Vista          | 415,004,880 | 464,074,600      | 2010
... (10 rows omitted)

多次运行该单元格以查看输出如何变化。

这个系统样本是一个概率样本。在此方案中,所有行被选中的概率为 $1/10$。例如,第 23 行被选中当且仅当第 3 行被选中,其概率为 $1/10$。

但并非所有子集被选中的概率都相同。因为所选行是等间距的,大多数行的子集没有机会被选中。唯一可能的是由行间隔为 10 的整数倍组成的子集。这些子集中的任何一个被选中的概率为 1/10。其他子集,例如同时包含表格第 15 行和第 16 行的子集,或任何大小超过 10 的子集,被选中的概率为 0。

有放回或无放回地抽取随机样本

在本课程中,我们将主要处理两种最直接的抽样方法。

第一种是随机有放回抽样,正如我们之前所见,这是 np.random.choice 从数组中抽样时的默认行为。

另一种称为“简单随机样本”,是随机“无”放回地抽取的样本。在抽取下一个个体之前,被抽样的个体不会被放回总体中。例如,当你从一副牌中发一手牌时,就是这种抽样。要使用 np.random.choice 进行简单随机抽样,你必须包含参数 replace=False

在本章中,我们将使用模拟来研究随机有放回或无放回抽取的大样本的行为。

便利样本

抽取随机样本需要谨慎和精确。它不是随随便便的,尽管这是“随机”一词的口语含义。如果你站在街角,将前十个路过的人作为你的样本,你可能认为自己是在随机抽样,因为你没有选择谁走过。但这不是一个随机样本——这是一个“便利样本”。你事先不知道每个人进入样本的概率;也许你甚至没有明确指定总体中到底有谁。

[In ]: