2016-12-05 48 views
1

给定一个拉普拉斯分布提案:使用重要性蒙特卡洛积分抽检给出的提议功能

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

和样本大小n = 1000,我想进行蒙特卡洛(MC)的集成用于估计θ:

enter image description here

通过重要性采样。最终,我想在R达到那个时候,计算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) 
+0

我使用了rlaplace函数的VGAM包。 – Chris95

+0

非常感谢您对后期编辑感到非常抱歉! – Chris95

回答

2

enter image description here

现在我们可以写一个简单的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 

还与使用quad的数值积分rature:

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