【问题标题】:Calculating probability using simulation使用模拟计算概率
【发布时间】:2019-10-10 14:29:20
【问题描述】:

设 Xi~U(0,30) 为随机变量。如果取一个 n=12 的样本,那么我们有兴趣知道该比例大于 18 的概率,即 $P(\overline X_{12}>18)$

不使用模拟并应用 CLT,答案是 0.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只返回负值,我不明白为什么。

有人可以帮帮我吗?

【问题讨论】:

    标签: r random statistics simulation probability


    【解决方案1】:

    这是一个分步解决方案。

    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
    

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

    【讨论】:

    • 为什么将统一分布更改为 beta 分布不再起作用?我试过replicate(mean(rbeta(12,2,5)), n = 10000) set.seed(1) mean(replicate(mean(rbeta(12,2,5)), n = 10000) &gt; 18),输出是0
    • @Isa,因为 beta 分布的值在 [0,1] 中。那么平均 12 个值永远不会超过 18。
    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    相关资源
    最近更新 更多