【问题标题】:Monte Carlo integration using importance sampling given a proposal function给定建议函数,使用重要性采样的蒙特卡洛积分
【发布时间】:2016-12-05 22:49:14
【问题描述】:

给定一个拉普拉斯分布提案:

g(x) = 1/2*e^(-|x|)

和样本量n = 1000,我想进行蒙特卡罗(MC)积分以估计θ:

通过重要性抽样。最终我想在我到达那里后计算 R 中这个 MC 估计的平均值和标准差。


编辑(在下面的答案之后迟到)

这就是我目前的 R 代码:

library(VGAM)
n = 1000
x = rexp(n,0.5)
hx = mean(2*exp(-sqrt(x))*(sin(x))^2)
gx = rlaplace(n, location = 0, scale = 1)

【问题讨论】:

  • 我使用 VGAM 包来实现 rlaplace 功能。
  • 非常感谢您对迟到的编辑感到抱歉!

标签: r sampling montecarlo integral numerical-integration


【解决方案1】:

现在我们可以编写一个简单的 R 函数来从拉普拉斯分布中采样:

## `n` is sample size
rlaplace <- function (n) {
  u <- runif(n, 0, 1)
  ifelse(u < 0.5, log(2 * u), -log(2* (1 - u)))
  }

另外写一个拉普拉斯分布密度函数:

g <- function (x) ifelse(x < 0, 0.5 * exp(x), 0.5 * exp(-x))

现在,你的被积函数是:

f <- function (x) {
  ifelse(x > 0, exp(-sqrt(x) - 0.5 * x) * sin(x) ^ 2, 0)
  }

现在我们使用 1000 个样本来估计积分(set.seed 用于重现性):

set.seed(0)
x <- rlaplace(1000)
mean(f(x) / g(x))
# [1] 0.2648853

还可以与使用求积的数值积分进行比较:

integrate(f, lower = 0, upper = Inf)
# 0.2617744 with absolute error < 1.6e-05

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2012-12-11
    • 2014-03-26
    • 1970-01-01
    • 2016-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多