Aku mencoba untuk menjawab pertanyaan Evaluasi terpisahkan dengan Pentingnya sampel metode dalam R . Pada dasarnya, pengguna perlu menghitung
menggunakan distribusi eksponensial sebagai distribusi kepentingan
dan temukan nilai yang memberikan perkiraan yang lebih baik untuk integral (itu ). Saya menyusun kembali masalah sebagai evaluasi nilai rata-rata dari atas : integralnya kemudian hanya . self-study
Jadi, misalkan menjadi pdf dari , dan biarkan : tujuannya sekarang adalah memperkirakan
menggunakan sampel penting. Saya melakukan simulasi di R:
# clear the environment and set the seed for reproducibility
rm(list=ls())
gc()
graphics.off()
set.seed(1)
# function to be integrated
f <- function(x){
1 / (cos(x)^2+x^2)
}
# importance sampling
importance.sampling <- function(lambda, f, B){
x <- rexp(B, lambda)
f(x) / dexp(x, lambda)*dunif(x, 0, pi)
}
# mean value of f
mu.num <- integrate(f,0,pi)$value/pi
# initialize code
means <- 0
sigmas <- 0
error <- 0
CI.min <- 0
CI.max <- 0
CI.covers.parameter <- FALSE
# set a value for lambda: we will repeat importance sampling N times to verify
# coverage
N <- 100
lambda <- rep(20,N)
# set the sample size for importance sampling
B <- 10^4
# - estimate the mean value of f using importance sampling, N times
# - compute a confidence interval for the mean each time
# - CI.covers.parameter is set to TRUE if the estimated confidence
# interval contains the mean value computed by integrate, otherwise
# is set to FALSE
j <- 0
for(i in lambda){
I <- importance.sampling(i, f, B)
j <- j + 1
mu <- mean(I)
std <- sd(I)
lower.CB <- mu - 1.96*std/sqrt(B)
upper.CB <- mu + 1.96*std/sqrt(B)
means[j] <- mu
sigmas[j] <- std
error[j] <- abs(mu-mu.num)
CI.min[j] <- lower.CB
CI.max[j] <- upper.CB
CI.covers.parameter[j] <- lower.CB < mu.num & mu.num < upper.CB
}
# build a dataframe in case you want to have a look at the results for each run
df <- data.frame(lambda, means, sigmas, error, CI.min, CI.max, CI.covers.parameter)
# so, what's the coverage?
mean(CI.covers.parameter)
# [1] 0.19
Kode ini pada dasarnya adalah implementasi langsung dari pentingnya pengambilan sampel, mengikuti notasi yang digunakan di sini . Sampling kepentingan kemudian diulang kali untuk mendapatkan beberapa perkiraan , dan setiap kali pemeriksaan dilakukan pada apakah interval 95% mencakup rata-rata aktual atau tidak.
Seperti yang Anda lihat, untuk cakupan sebenarnya hanya 0,19. Dan meningkatkan ke nilai-nilai seperti tidak membantu (cakupannya bahkan lebih kecil, 0,15). Mengapa ini terjadi?