Campionamento di importanza
Mi trovo a svolgere il seguente esercizio:
In un appello passato avevo chiesto agli studenti di scrivere una funzione del tipo
> mio.integrale <- function(f, B = 1000) {
+ ....
+ }]
che calcoli una approssimazione di $ I = \int_{+infty}^{-infty} f(x) dx $. Gli argomenti della funzione indicano
la funzione di cui si vuole l’integrale e il numero di simulazioni su cui basare la stima. Nel
testo era scritto che la funzione doveva utilizzare un approccio basato sul campionamento di importanza campionando x da una normale standard.
Uno studente ha risposto con la seguente funzione
> mio.integrale <- function(f, B = 1000) {
+ mean(f(rnorm(B))/dnorm(rnorm(B)))
+ }
Spiegare perchè è sbagliato.
Sapreste aiutarmi, in teoria avrei già la soluzione, ma vorrei capire
. Grazie
In un appello passato avevo chiesto agli studenti di scrivere una funzione del tipo
> mio.integrale <- function(f, B = 1000) {
+ ....
+ }]
che calcoli una approssimazione di $ I = \int_{+infty}^{-infty} f(x) dx $. Gli argomenti della funzione indicano
la funzione di cui si vuole l’integrale e il numero di simulazioni su cui basare la stima. Nel
testo era scritto che la funzione doveva utilizzare un approccio basato sul campionamento di importanza campionando x da una normale standard.
Uno studente ha risposto con la seguente funzione
> mio.integrale <- function(f, B = 1000) {
+ mean(f(rnorm(B))/dnorm(rnorm(B)))
+ }
Spiegare perchè è sbagliato.
Sapreste aiutarmi, in teoria avrei già la soluzione, ma vorrei capire

Risposte
Interessante la tua risposta.
Allora direi che seguendo il ragionamento che mi hai fatto sul seguente post viewtopic.php?f=34&t=129969 direi che:
1) rnom(B) genero B valori da una normale standard
2) f(rnorm(B)) calcolo il valore di $f(x)$
Perchè divido per la densità della normale standard in x? Stiamo applicando $E(f(x)/g(x))$?
Allora direi che seguendo il ragionamento che mi hai fatto sul seguente post viewtopic.php?f=34&t=129969 direi che:
mio.integrale <- function(f, B = 1000) { x <- rnorm(B) return ( mean(f(x) / dnorm(x)) ) }
1) rnom(B) genero B valori da una normale standard
2) f(rnorm(B)) calcolo il valore di $f(x)$
Perchè divido per la densità della normale standard in x? Stiamo applicando $E(f(x)/g(x))$?
Ok ho capito, ma quindi se banalmente genero da una variabile casuale esponenziale il risultato sarà il seguente:
Grazie comunque !!!
mio.integrale <- function(f, B = 1000) { x <- rexp(B) return ( mean(f(x) / dexp(x)) ) }
Grazie comunque !!!

