मैं इस सवाल का जवाब देने की कोशिश कर रहा था कि आर में महत्व नमूनाकरण विधि के साथ अभिन्न मूल्यांकन करें । मूल रूप से, उपयोगकर्ता की गणना करने की आवश्यकता है
महत्व वितरण के रूप में घातीय वितरण का उपयोग करना
और का मान ज्ञात जो अभिन्न (यह करने के लिए बेहतर सन्निकटन देता है )। मैं [0, \ pi] पर के माध्य मान के मूल्यांकन के रूप में समस्या का पुनरावर्तन करता हूं : अभिन्न तो सिर्फ \ pi \ mu है । self-study
इस प्रकार, p (x) X \ sim \ mathcal {U} (0, \ pi) का pdf हो , और Y \ sim f (X) को जाने दें : लक्ष्य अब अनुमान लगाना है
महत्व के नमूने का उपयोग करना। मैंने 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
कोड मूल रूप से महत्व नमूना का एक सीधा कार्यान्वयन है, यहां उपयोग किए गए संकेतन के बाद । महत्त्व का नमूना तब \ N म्यू के कई अनुमान प्राप्त करने के लिए बार दोहराया जाता है , और हर बार 95% अंतराल वास्तविक माध्य को कवर करता है या नहीं इस पर एक जांच की जाती है।
जैसा कि आप देख सकते हैं, लिए वास्तविक कवरेज सिर्फ 0.19 है। और बढ़ती जैसे मूल्यों के लिए मदद नहीं करता है (कवरेज भी छोटे, 0.15 है)। ये क्यों हो रहा है?