使用模拟计算概率
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 解决方案。
- 要生成单个样本,我们可以使用
runif(12, 0, 30)
。
- 那么对应的样本均值就是
mean(runif(12, 0, 30))
.
- 关于估计真实概率,我们需要模拟很多这样的实例,这可以通过例如
来完成
replicate(mean(runif(12, 0, 30)), n = 10000)
- 然后我们要求(
mean(runif(12, 0, 30))
的次数大于18)/10000,可以用
set.seed(1)
mean(replicate(mean(runif(12, 0, 30)), n = 10000) > 18)
# [1] 0.1163
这确实非常接近您提供的值。
设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 解决方案。
- 要生成单个样本,我们可以使用
runif(12, 0, 30)
。 - 那么对应的样本均值就是
mean(runif(12, 0, 30))
. - 关于估计真实概率,我们需要模拟很多这样的实例,这可以通过例如 来完成
replicate(mean(runif(12, 0, 30)), n = 10000)
- 然后我们要求(
mean(runif(12, 0, 30))
的次数大于18)/10000,可以用
set.seed(1)
mean(replicate(mean(runif(12, 0, 30)), n = 10000) > 18)
# [1] 0.1163
这确实非常接近您提供的值。