diff --git a/9.md b/9.md index 7026625011381b0fc90c09527b4e344d07fe5419..d0e3d2176b5bdf42b055dab7100d19363d5b09b7 100644 --- a/9.md +++ b/9.md @@ -1,6 +1,6 @@ # 九、经验分布 -大部分数据科学都涉及来自大量随机样本的数据。 在本节中,我们将研究这些样本的一些属性。 +大部分数据科学都涉及来自大型随机样本的数据。 在本节中,我们将研究这些样本的一些属性。 我们将从一个简单的实验开始:多次掷骰子并跟踪出现的点数。 `die `表包含骰子面上的点数。 所有的数字只出现一次,因为我们假设骰子是平等的。 @@ -40,7 +40,7 @@ die.hist(bins = die_bins) 另一方面,经验分布是观测数据的分布。 他们可以通过经验直方图可视化。 -让我们通过模拟一个骰子的投掷来获得一些数据。 这可以通过 1 到 6 的整数的带放回随机抽样来完成。为了使用 Python 来实现,我们将使用`Table`的`sample`方法,它带放回地随机抽取表中的行。它的参数是样本大小,它返回一个由选定的行组成的表。 `with_replacement=False`的可选参数指定了应该抽取样本而不放回,但不适用于投掷骰子。 +让我们通过模拟一个骰子的投掷来获得一些数据。 这可以通过 1 到 6 的整数的带放回随机抽样来完成。为了使用 Python 来实现,我们将使用`Table`的`sample`方法,它带放回地随机抽取表中的行。它的参数是样本量,它返回一个由选定的行组成的表。 `with_replacement=False`的可选参数指定了应该抽取样本而不放回,但不适用于投掷骰子。 这是一个十次骰子投掷的结果。 @@ -62,7 +62,7 @@ die.sample(10) | 6 | | 6 | -我们可以使用相同的方法来模拟尽可能多的投掷,然后绘制结果的经验直方图。 因为我们要反复这样做,所以我们定义了一个函数`empirical_hist_die`,它以样本大小为参数;该函数根据其参数多次投掷骰子,然后绘制直方图。 +我们可以使用相同的方法来模拟尽可能多的投掷,然后绘制结果的经验直方图。 因为我们要反复这样做,所以我们定义了一个函数`empirical_hist_die`,它以样本量为参数;该函数根据其参数多次投掷骰子,然后绘制直方图。 ```py def empirical_hist_die(n): @@ -161,7 +161,7 @@ united.where('Delay', are.between(0, 10)).num_rows/united.num_rows ### 样本的经验分布 -现在让我们将这 13,825 个航班看做一个总体,并从中带放回地抽取随机样本。 将我们的分析代码打包成一个函数是有帮助的。 函数`empirical_hist_delay`以样本大小为参数,绘制结果的经验直方图。 +现在让我们将这 13,825 个航班看做一个总体,并从中带放回地抽取随机样本。 将我们的分析代码打包成一个函数是有帮助的。 函数`empirical_hist_delay`以样本量为参数,绘制结果的经验直方图。 ```py def empirical_hist_delay(n): @@ -188,9 +188,9 @@ empirical_hist_delay(1000) 我们在本节中观察到的东西,可以总结如下: -对于较大的随机样本,样本的经验直方图类似于总体的直方图,概率很高。 +对于大型随机样本,样本的经验直方图类似于总体的直方图,概率很高。 -这证明了,在统计推断中使用大量随机样本是合理的。 这个想法是,由于较大的随机样本可能类似于从中抽取的总体,从样本中计算出的数量可能接近于总体中相应的数量。 +这证明了,在统计推断中使用大型随机样本是合理的。 这个想法是,由于大型随机样本可能类似于从中抽取的总体,从样本中计算出的数量可能接近于总体中相应的数量。 ## 轮盘赌 @@ -404,7 +404,7 @@ Table().with_columns( 在两个直方图中可以看到相似之处:大型随机样本的经验直方图很可能类似于总体的直方图。 -提醒一下,这里是所有美联航航班延误的直方图,以及这些航班的 1000 个随机样本的经验直方图。 +提醒一下,这里是所有美联航航班延误的直方图,以及这些航班的大小为 1000 的随机样本的经验直方图。 ```py united = Table.read_table('united_summer2015.csv') @@ -452,3 +452,72 @@ united.where('Delay', are.equal_to(2)).num_rows 480 ``` +### 统计 + +在很多情况下,我们会感兴趣的是找出未知参数的值。 为此,我们将依赖来自总体的大型随机样本的数据。 + +统计量(注意是单数!)是使用样本中数据计算的任何数字。 因此,样本中位数是一个统计量。 + +请记住,`sample_1000`包含来自`united`的 1000 个航班的随机样本。 样本中位数的观测值是: + +```py +np.median(sample_1000.column('Delay')) +2.0 +``` + +我们的样本 - 一千个航班 - 给了我们统计量的观测值。 这提出了一个重要的推论问题: + +统计量的数值可能会有所不同。 使用基于随机样本的任何统计量时,首先考虑的事情是,样本可能不同,因此统计量也可能不同。 + +```py +np.median(united.sample(1000).column('Delay')) +3.0 +``` + +运行单元格几次来查看答案的变化。 通常它等于 2,与总体参数值相同。 但有时候不一样。 + +统计量有多么不同? 回答这个问题的一种方法是多次运行单元格,并记下这些值。 这些值的直方图将告诉我们统计量的分布。 + +我们将使用`for`循环来“多次运行单元格”。 在此之前,让我们注意模拟中的主要步骤。 + +### 模拟统计量 + +我们将使用以下步骤来模拟样本中位数。 您可以用任何其他样本量来替换 1000 的样本量,并将样本中位数替换为其他统计量。 + +第一步:生成一个统计量。 抽取大小为 1000 的随机样本,并计算样本的中位数。 注意中位数的值。 + +第二步:生成更多的统计值。 重复步骤 1 多次,每次重新抽样。 + +第三步:结果可视化。 在第二步结束时,您将会记录许多样本中位数,每个中位数来自不同的样本。 您可以在表格中显示所有的中位数。 您也可以使用直方图来显示它们 - 这是统计量的经验直方图。 + +我们现在执行这个计划。 正如在所有的模拟中,我们首先创建一个空数组,我们在其中收集我们的结果。 + ++ 上面的第一步是`for`循环的主体。 ++ 第二步,重复第一步“无数次”,由循环完成。 我们“无数次”是5000次,但是你可以改变这个。 ++ 第三步是显示表格,并在后面的单元格中调用`hist`。 + +该单元格需要大量的时间来运行。 那是因为它正在执行抽取大小为 1000 的样本,并计算其中位数的过程,重复 5000 次。 这是很多抽样和重复! + +```py +medians = make_array() + +for i in np.arange(5000): + new_median = np.median(united.sample(1000).column('Delay')) + medians = np.append(medians, new_median) + +Table().with_column('Sample Median', medians) +``` + + +| Sample Median | +| --- | +| 3 | +| 2 | +| 2 | +| 3 | +| 2 | +| 2 | +| 2 | +| 3 | +| 1 | +| 3 | \ No newline at end of file