使用模拟计算概率

时间:2019-05-24 02:05:41

标签: r random statistics simulation probability

让Xi〜U(0,30)为随机变量。如果有人对n = 12进行抽样,那么我们有兴趣知道该比例大于18的概率,即$ P(\ overline X_ {12}> 18)$

如果不使用仿真并应用CLT,答案为.1150

这是我使用仿真在R中实现此目标的方法:

SimProb<-function(N)
{
n=12

M<-matrix(runif(1,0,30),N,n)
rowMeann<-rowMeans(M)

for(i in 1:N)
{
  if(rowMeann[i]>18)
    c=cumsum(rowMeann[i])
    c

}
prob<-1-c
return(prob)
}

该代码未显示任何错误,但无法正常工作。

当我检查时,发现c= 6.083532不能。

对于N的不同值,SimProb仅返回负值,我不明白为什么。

有人可以帮我吗?

1 个答案:

答案 0 :(得分:2)

这是分步解决方案。

  1. 要生成单个样本,我们可以使用runif(12, 0, 30)
  2. 相应的样本均值就是mean(runif(12, 0, 30))
  3. 要估算真实概率,我们需要模拟许多类似的实例,例如,可以使用

replicate(mean(runif(12, 0, 30)), n = 10000)
  1. 然后我们要查找(mean(runif(12, 0, 30))大于18的次数)/ 10000,可以用

set.seed(1)
mean(replicate(mean(runif(12, 0, 30)), n = 10000) > 18)
# [1] 0.1163

这确实非常接近您提供的价值。