(1)如果你投掷一枚硬币4次,得到4次正面的概率是(0.5)^4=0.0625。假设我们投掷一枚硬币20次,那么得到连续4次正面的概率是多少?编写一个程序估计这个概率。你的程序应该有以下结构:
(a)函数four.n.twenty()模拟投掷20次硬币,然后检查是否有连续4次正面。
(b)函数four.n.twenty.prob(N)计算four.n.twenty()N次并且返回有连续4次正面次数的比例。
(2)考虑下面简单的遗传模型。一个总体中包含相同数量的两种性别:男性和女性。在每一代中,假设男女随机凑对,并生育一男一女两个。这里我们对前一代到后一代的身高高度分布感兴趣。假设男生和女生的身高为其父母高度的平均值,那么身高如何随上一代到下一代而变化。
假设当前年代人的身高包含两个变量,m和f,分别表示两种性别。命令rnorm(100,160,20)产生100个以160为均值,20为方差的正态随机变量样本。我们用该命令产生第一代总体身高如下:
pop <- data.frame(m=rnorm(100,160,20), f=rnorm(100,160,20))
命令sample(x, size=length(x))表示从向量x 中无重复地获得一个随机样本量size(当然这里也可以进行重复抽样,只要将参数replace改为TRUE)。下面函数使用数据框pop,并随机对男必数据排序。我们将对应男性和女性行向量数据进行配对,进而通过求均值得到下一代的身高。该函数返回具有相同结构,表示下一代身高的数据框。
next.gen <- function(pop) {
pop$m <- sample(pop$m)
pop$m <- apply(pop, 1, mean)
pop$f <- pop$m
return(pop)
}