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)。