1

重要度サンプリングを使用してモンテカルロ統合を実装しようとしています。簡単な例を作成しました-スチューデントt分布(mu = 1、sigma = 1、df = 100)を持つh(x)を統合したいのですが、4倍にスケールアップしました-したい区間 [-2,2] で積分 - 私の h(x) の pdf である f(x) は 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 に答える