3.1 选课人数之谜

在大部分美国高校,师生比例都在1:10左右。但学生经常会发现,一门课程的平均选修人数会超过10。这其中有两个原因。

  • 学生每学期通常会上4到5门课程,但一个教授通常只会教一两门课。
  • 喜欢小班(选课人数少)的学生人数往往很少,而参加大班(选课人数多)的学生人数特别多。

第一点很明显(至少我指出后你就能明白),第二点就不是那么直观了。让我们看一个例子。某个学校某学期开设了65门课程,每门课程的选课人数分布如下:

人数 课程数
5~9 8
10~14 8
15~19 14
20~24 4
25~29 6
30~34 12
35~39 8
40~44 3
45~49 2

如果我们问院长,平均每门课程的选课人数是多少?他会构建一个PMF,计算出均值,然后告诉你平均每门课程有24个人选修。

但如果你找学生做调查,询问他们参加的课程有多少学生,然后计算平均值,所得到的每门课程的平均人数就会多不少。

习题3-1

按照院长的方法构建这些数据的PMF,并计算均值。因为数据是分组的,所以可以用每组的中点值。

然后再从学生的角度来构建选课人数的分布,并计算均值。

假设想要得到学校每门课程选课人数的分布情况,但又无法从院长那里得到可信的数据。其中一种解决办法是随机选择一组学生,然后询问他们所选课程的上课人数。然后可以根据调查的结果计算出PMF。

这个结果是有偏差的。因为选修人数多的课程会被过采样,所以在估计选课人数真实分布时要对观察到的分布做一个合适的变换。

编写一个UnbiasPmf函数,参数是观察值的PMF,返回据此估计出的表示选课人数分布的Pmf对象。

答案可以从http://thinkstats.com/class_size.py下载。

习题3-2

在大部分的田径比赛中,选手都是同时出发的。如果跑得快,那么在比赛刚开始的时候会超过很多人,但在跑出几英里后你就会发现,周围都是跟你速度差不多的选手。

我第一次参加长跑(209英里)接力时,注意到一个奇怪的现象:当我超过其他选手时,我会跑得更快;当其他选手超过我时,他们通常也会跑得更快。

一开始,我觉得速度的分布是两级分化的:速度快和速度慢的人都很多,但跟我速度差不多的人应该不多。

但随后我发现我的选择是有偏差的。这个比赛有两个特点:分阶段出发,不同的队伍出发时间也不同;此外,同一个队伍中选手的水平也参差不齐。

因此,选手在比赛道路上所处的位置与其速度和名次没有什么关系。在我开始跑时,我周围的参赛选手基本上是随机的。

那这其中的偏差来自何处?在整个比赛过程中,超过其他选手或者是被其他选手超过的概率跟选手间速度差异的大小是有关的。为什么?想想最极端的情况。如果我跟另外一个比赛选手的速度完全一样,那我们就不可能超过对方,也不可能被对方超过。如果某个选手跑得特别快,在我跑的过程中跑完了全程,那这位选手肯定会在某个地方超过我。

写一个BiasPmf函数,其参数是表示选手速度实际分布的Pmf和观察者的速度,返回值是一个新的Pmf,表示其他选手相对观察者的速度分布。

用一般的道路比赛(不是接力赛)的数据测试函数。我写了一个程序读取马萨诸塞州Dedham的James Joyce Ramble一万米比赛的数据,并将每个选手的速度单位转换成MPH。可以从 http://thinkstats.com/relay.py下载这个程序。运行该程序,看看速度的PMF。

现在假设你以7.5 MPH的速度参加这个比赛,计算你所观察到的选手的速度分布。可以从这里下载答案:http://thinkstats.com/relay_soln.py