3.8 随机数

在生成服从给定分布的随机数时,CDF是很有用的。

  • 在0到1的范围内选择一个随机的概率。
  • 用Cdf.Value找到你所选的概率在分布中对应的值。

这其中的原理似乎不太直观,但这容易实现,让我们动手试试。

习题3-9

编写一个Sample函数,参数是一个Cdf和一个整数n,返回n个来自该Cdf的随机数。提示:用random.random。在Cdf.py中有本练习的解答。

用来自NSFG的出生体重分布生成一个1000个元素的随机样本。计算该样本的CDF。画出原始的CDF和随机样本的CDF。如果n足够大,两个分布应该是一样的。

这个根据已有的样本生成随机样本的过程就称为再抽样(resampling)。

从总体获得样本的方法有两种:有放回和无放回。假设是从小桶子里面取玻璃球〔1〕,“有放回”就是在下次取球之前将之前取的球放回桶中(并搅动),所以每次取球后的总体都是不变的。“无放回”就是每个球只能取一次,这样每次取球的总体都不一样。

〔1〕取球问题是随机抽样过程的标准模型(参见http://wikipedia.org/wiki/Urn_problem)。

在Python中,可以用random.random选择百分等级或者用random.choice从序列中选择元素来实现有放回抽样,而用random.sample实现无放回抽样。

习题3-10

random.random生成的数字介于0到1之间,也就是说该范围内的每个值被选中的概率是一样的。

用random.random生成1000个数字,画出它们的PMF和CDF。是否能判断它们是均匀分布?

关于均匀分布,详见http://wikipedia.org/wiki/Uniformdistribution(discrete)