格尔曼和希尔在R中解释模拟 . 在第139页,他们说:
美国52%的成年人是女性,48%是男性 . 人的高度大致正常分布,平均69.1英寸,标准差2.9英寸;女性,平均63.7,标准差2.7 . 假设我们随机选择了10个成年人 . 我们对他们的平均身高有什么看法?
sex <- rbinom (10, 1, .52) R code
height <- ifelse (sex==0, rnorm (***10***, 69.1, 2.9), rnorm (***10***, 64.5, 2.7)) #"***"s added for emphasis.
avg.height <- mean (height)
print (avg.height)
我不明白两个10在rnorm函数中做了什么 .
性是一个10矢量 . 如果性别[1]为0,则ifelse从正态分布中选择10个高度值,平均值为69.1 ...,如果性别[2]为1,则ifelse从正常值选择10个高度值,平均值为64.5,依此类推,且仅为值性[10]将确定最终分配到高度的东西 .
显然我的理解是不正确的,它是从正确的分布中挑选十个值 . 我将第一次正态分布的均值改为669.1以理解它是如何将值赋值给高度的,而上面的代码正在做它应该做的事情 . 我仍然不明白两个10是什么东西在rnorm函数 . 当我将两个10改为两个时,一切都按预期工作 . 有人可以向我解释在上面的代码中如何分配10个高度值 .
1 回答
实际上,在定义正确的观测数量时存在差异 . 那是因为显然
ifelse
函数首先"completes"两个选项的数据,如data.frame,然后对每一行应用if选择 . 由于sex
是10个元素向量,因此在rnorm
函数中需要10个才能得到正确的答案 . 您可以看到用10s代替10s,将一个或十个元素向量传递给ifelse
并为每个随机代重置seed
. 见下文: