使用模拟计算概率

Calculating probability using simulation

设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 returns只有负值,我不明白为什么。

有人可以帮我吗?

这是一个 step-by-step 解决方案。

  1. 要生成单个样本,我们可以使用 runif(12, 0, 30)
  2. 那么对应的样本均值就是mean(runif(12, 0, 30)).
  3. 关于估计真实概率,我们需要模拟很多这样的实例,这可以通过例如
  4. 来完成

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

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