【问题标题】:Importance Sampling - Monte Carlo Integration重要性抽样 - 蒙特卡洛积分
【发布时间】:2012-12-11 02:39:36
【问题描述】:

我正在尝试使用重要性采样实现蒙特卡洛积分。我创建了一个简单的例子 - 我希望整合 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

【问题讨论】:

  • 什么是IS? pdf?请去掉首字母缩略词。
  • 我冒昧地猜测一下,IS 表示 Importance Sampling,pdf 表示概率密度函数。
  • 编辑完成,pdf = 概率密度函数,IS = 重要性抽样
  • 我建议花一点时间阅读 C 语言中的数字食谱。有 pdf 版本可供下载。您不必使用 c 代码,因为算法本身非常详细。

标签: r integration simulation probability montecarlo


【解决方案1】:

由于您是从 截断 正态分布中采样,因此不应使用正态分布的概率密度函数(在您的示例中为 dnorm),而应使用 截断正态分布 em> 分布(例如,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

【讨论】:

    猜你喜欢
    • 2014-03-30
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2018-10-20
    相关资源
    最近更新 更多