Skip to Tutorial Content

Metropolis-Hastings-Algorithmus.

Eine Idee, eine sinnvolle Vorschlagsverteilung zu konstruieren ist, die full conditional möglichst gut zu approximieren. Ist \(q\left(\theta^{*}|\theta^{(k-1)}\right)\approx f\left(\theta^{*}\right)\), dann wird die Akzeptanzwahrscheinlichkeit fast 1, wir sind also “fast” beim Gibbs-Sampler.

Gleichzeitig müssen wir gut aus der Vorschlagsverteilung ziehen können.

Im vorliegenden Fall ist die full conditional

\[ p(\eta_t|\alpha,\beta,\eta_{-t},y) \propto \exp(\eta_t y_t)\exp\left(-\exp(\eta_t)\right)\exp\left(-\frac{1}{2\sigma^2}\left(\eta_t-\alpha-\beta x_t\right)^2\right) \]

Der erste und der dritte Term passen zu einer Normalverteilung. Nur der Term \(\exp\left(-\exp(\eta_t)\right)\) passt nicht dazu. Benutzen wir die Taylorreihe

\[ f(x; a) = \sum_{n=0}^\infty \frac{f^{(n)}(a)}{n!} (x-a)^n \]

wobei \(f^{(n)}\) die \(n\)-te Ableitung ist und \(a\) ein Punkt, um den die Reihe entwickelt wird.

Setzen wir \(f(x)=\exp(\eta_t)\), dann bekommen wir

\[ \exp(\eta_t)\approx \frac{\exp(a)}{1}+ \frac{\exp(a)}{1}(\eta_t-a) +\frac{\exp(a)}{2}(\eta_t-a)^2 \]

und brechen nach \(n=2\) ab.

Setzen wir das in die full conditional von \(\eta_t\) ein erhalten (mit \(\underset{\sim}{\propto}\) approxmitativ proportional zu)

\[ \begin{align*} p(\eta_t|\alpha,\beta,y) \underset{\sim}{\propto}\, & \exp\left(\eta_t y_t-\eta_t\exp(a)-\frac{\exp(a)}{2}(\eta_t-a)^2-\frac{1}{2\sigma^2}\left(\eta_t-\alpha-\beta x_t\right)^2\right)\\ =\,&\exp\left(-\frac{1}{2}\eta_t^2(\sigma^{-2}+\exp(a))+\eta_t\left(y_t-\exp(a)+a\exp(a)+\sigma^{-2}(\alpha+\beta x_t)\right)\right) \end{align*} \]

Das ist eine Normalverteilung für \(\eta_t\):

  • \(\eta_t\sim N\left(\frac{m}{v},\frac{1}{v}\right)\)

  • \(m=y_t-\exp(a)+a\exp(a)+\sigma^{-2}(\alpha+\beta x_t)\)

  • \(v=\sigma^{-2}+\exp(a)\)

  • Diese Normalverteilung approximiert uns die full conditional von \(\eta_t|\cdot\)

  • Diese Normalverteilung benutzen wir als Vorschlagsverteilung im Metropolis-Hastings-Schritt

  • Die Verteilung gilt für alle \(t=1,\ldots,T\) und die \(\eta_t\) sind voneinander unabhängig.

\(\eta_t|\cdot=\eta_t|\alpha,\beta,\eta_{-t};y\) meint hier die Verteilung von \(\eta_t\) gegeben aller anderen Parameter und den Daten.

Implementierung

Wir setzen zuerst wieder die Hyperprameter fest:

ma = mb = 0
va = vb = 10^3
sigma2 = 10^{-3}

und Startwerte:

alpha = 10
beta = 1
epsilon = rep(0,T)
eta = alpha + beta*x +epsilon

Vektoren, in denen wir die Ziehungen abspeichern:

nriter=50000
alpha.sample = beta.sample = vector(length=nriter)
eta.sample = matrix(ncol = T, nrow=nriter)
epsilon.sample = matrix(ncol = T, nrow=nriter)

und noch einige Vorberechungen

ysum <- sum(y)
yxsum <- sum(x*y)
x2sum <- sum(x*x)

Algorithmus

for (i in 1:nriter)
{
  # Ziehe beta
  v.beta <- 1/vb+x2sum/sigma2
  m.beta <- mb/vb+sum((eta-alpha)*x)/sigma2
  beta <- rnorm(1, m.beta/v.beta, sqrt(1/v.beta))

  # Ziehe alpha
  v.alpha <- 1/va+T/sigma2
  m.alpha <- ma/va+sum(eta-beta*x)/sigma2
  alpha <- rnorm(1, m.alpha/v.alpha, sqrt(1/v.alpha))
  
  # Vorschlag eta, als Vektor
  v <- 1/sigma2+exp(eta)
  m <- y-exp(eta)+eta*exp(eta)+(alpha+beta*x)/sigma2 
  eta.stern <- rnorm(T, m/v, sqrt(1/v)) 
  
  # Berechnung Log-Akzeptanzwahrscheinlichkeit
  v2 <- 1/sigma2+exp(eta.stern)
  m2 <- y-exp(eta.stern)+eta*exp(eta.stern)+(alpha+beta*x)/sigma2 
  log.akzeptanz <- eta.stern*y-exp(eta.stern)-0.5*(eta.stern-alpha-beta*x)^2/sigma2
  log.akzeptanz <- log.akzeptanz - (eta*y - exp(eta)-0.5*(eta-alpha-beta*x)^2/sigma2)
  log.akzeptanz <- log.akzeptanz - dnorm(eta.stern, m/v, sqrt(1/v), log=TRUE)
  log.akzeptanz <- log.akzeptanz + dnorm(eta, m2/v2, sqrt(1/v2), log=TRUE)

  # Akzeptanz
  ja <- exp(log.akzeptanz)>runif(T)   
  eta[ja] <- eta.stern[ja]
  
  # Abspeichern
  alpha.sample[i] <- alpha
  beta.sample[i] <- beta
  eta.sample[i,] <- eta
  epsilon.sample[i,] <- eta-alpha-beta
}

Wir verwerfen wieder 5000 Iterationen als burn-in.

alpha.sample<-alpha.sample[-(1:5000)]
beta.sample<-beta.sample[-(1:5000)]
epsilon.sample<-epsilon.sample[-(1:5000),]

Zurück

Zurück

Metropolis-Hastings-Sampler