#-------------------------------------------------------------------
# prova di importance sampling:
#
#  vogliamo stimare il valore medio di exp(-abs(x)/tau)
#  con x distribuito secondo una gaussiana di parametri mu.p e sigma.p
#
# GdA 15 marzo 2012
##-------------------------------------------------------------------- 

n <- 100000 # numero di eventi
s = 1000    # step di controllo intermedio

# parametro di "f(x)"
tau=0.2

# parametri gaussiana "p(x)"
mu.p <- 3
sigma.p <- 1

# parametri gaussiana "q(x)"
mu.q <- 0
sigma.q <- 1

# campionamento normale
x <- rnorm(n, mu.p, sigma.p)
fx <- exp(-abs(x)/tau)
ni <- seq(s, n, s)
Ifx = rep(0, length(ni))
for (i in 1:length(ni)) {
  Ifx[i] = sum(fx[1:ni[i]])/ni[i]
}

# importance sampling
x <- rnorm(n, mu.q, sigma.q)
fx <- exp(-abs(x)/tau)*dnorm(x, mu.p, sigma.p)/dnorm(x, mu.q, sigma.q)
Ifx.IS = rep(0, length(ni))
for (i in 1:length(ni)) {
  Ifx.IS[i] = sum(fx[1:ni[i]])/ni[i]
}

plot(ni,Ifx, ylim=c(min(Ifx,Ifx.IS),max(Ifx,Ifx.IS)), col='blue', ty='l')
points(ni,Ifx.IS, ty='l', col='red')
