Campionamento di importanza

valentinax89
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 :cry: . Grazie

Risposte
valentinax89
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:


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))$?

valentinax89
Ok ho capito, ma quindi se banalmente genero da una variabile casuale esponenziale il risultato sarà il seguente:

mio.integrale <- function(f, B = 1000) {
  x <- rexp(B)
  return ( mean(f(x) / dexp(x)) )
}


Grazie comunque !!! :smt043 :smt043

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.