【问题标题】:Calculate expected value of variance using monte carlo simulation使用蒙特卡罗模拟计算方差的期望值
【发布时间】:2021-01-06 01:38:38
【问题描述】:

所以我有这个概率分布

X = {0      概率 7/8}
{1/60 概率 1/8}

James 他的车一年坏了 N 次,其中 N ~ Pois(2) 和 X 是维修成本,Y 是 James 在一年内造成的总成本。

我想计算 E[Y] 和 V(Y),这应该给我 E[X]=15 和 V(Y) = 1800

我有这个蒙特卡罗模拟:

expon_dis <- rexp(200, 1/60)

result_matrix2 <- rep(0, 200)
expected_matrix <- rep(0, runs)

for (u in 1:runs){
  expon_dis <- rexp(200, 1/60)
  N <- rpois(200, 2)
  for (l in 1:200){
    result_matrix2[l] <- (expon_dis[l] * (1/8)) * (N[l])
  }
  expected_matrix[u] <- mean(result_matrix2)
}

此代码给出的期望值为 15,但方差不正确。那么这个模拟有什么问题呢?

【问题讨论】:

    标签: r statistics montecarlo stochastic


    【解决方案1】:

    没有足够的时间阅读您的代码,但我认为错误来自于乘法。

    下面是一个非常粗略的实现,首先你编写一个函数来模拟成本,给定 x 次故障:

    sim_cost = function(x){
    cost = rexp(x,1/60)
    prob = sample(c(0,1/60),x,prob=c(7/8,1/8),replace=TRUE)
    sum(cost[prob>0])
    }
    

    然后生成每年的故障次数:

    set.seed(111)
    N <- rpois(500000, 2)
    

    多年来迭代,如果为0,我们返回0:

    set.seed(111)
    sim = sapply(N,function(i)if(i==0){0}else{sum(sim_cost(i))})
    
    mean(sim)
    [1] 14.98248
    var(sim)
    [1] 1797.549
    

    您需要进行大量模拟,但上面应该是您可以开始优化以使其更接近的代码。

    【讨论】:

      猜你喜欢
      • 2023-01-24
      • 2021-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多