1

我正在尝试使用重要性采样来实现蒙特卡洛积分。我创建了一个简单的示例 - 我希望整合 h(x),它具有学生 t 分布(mu = 1,sigma = 1,df = 100),但我们放大了 4 倍 - 我想在区间 [-2,2] 上积分 - f(x),我的 h(x) 的 pdf,然后是 t(1,1,100) - 我的建议分布是 g(x),正常 (0,1)

我无法完成这项工作......我对如何实现重要性采样以及如何使用 h(x) 的概率密度函数和建议分布 g(x) 感到困惑。我确定我的实现是错误的。我希望有人可以帮助我吗?

xtemp<-rnorm(100000) 
x<-xtemp[which(xtemp>=-2 & xtemp<=2)] 
hx<-dt(x,100)*4
fx<-dt(x,100) 
gx<-dnorm(x) 

IntMC<-sum(hx*fx/gx)/length(hx) 
IntAn <-(pt(2,100)-pt(-2,100))*4
4

1 回答 1

2

由于您是从截断的正态分布中采样,因此不应使用正态分布的概率密度函数(dnorm在您的示例中),而是使用截断的正态分布(例如,dtnorm来自包msm)来计算权重。

尝试以下操作,它会为您提供预期的结果:

library(msm)  # provides the pdf of the truncated normal distribution

xtemp <- rnorm(100000) 
x <- xtemp[which(xtemp>=-2 & xtemp<=2)] 

hx <- dt(x,100)*4
gx <- dtnorm(x, lower=-2, upper=2) 

IntMC <- mean(hx/gx) 
IntAn <- (pt(2,100)-pt(-2,100))*4
于 2012-12-25T21:24:33.007 回答