knitr::opts_chunk$set(echo = TRUE, cache=TRUE) library(bayeskurs)
Beispiele:
Der Datensatz {\texttt coal.txt} enthält die jährliche Anzahl von Unfällen in englischen Kohlebergwerken wärend der Jahre 1851-1962 (insgesamt 112 Jahre). Ein Plot der Daten zeigt einen deutlichen Rückgang der Unfälle ab etwa 1900.
data("coal",package="bayeskurs")
plot(coal$year, coal$disasters, type = "h", xlab = "Jahr", ylab = "Anzahl Unfälle")
Ein Bruchpunktmodell für diese Daten $\mathbf{y}=(y_1,\ldots, y_{112})$ hat folgende Form: \begin{align} Y_i \sim \left{ \begin{array}{ll} Po(\lambda_1), & i=1,\ldots,\theta,\ Po(\lambda_2), & i=\theta+1,\ldots, 112, \end{array} \right. \end{align}
Prioris:
Die gemeinsame Posteriori-Dichte ist gegeben durch:
\begin{align} p(\lambda_1, \lambda_2, \alpha, \theta \mid \mathbf{y}) &\propto p(\mathbf{y} \mid \lambda_1, \lambda_2, \alpha, \theta)\, p(\lambda_1, \lambda_2, \alpha, \theta) \ &= p(\mathbf{y} \mid \lambda_1, \lambda_2, \alpha, \theta)\, p(\lambda_1 \mid \lambda_2, \alpha, \theta) \ & \qquad\cdot p(\lambda_2 \mid \alpha, \theta)\, p(\alpha\mid\theta)\, p(\theta) \ &= p(\mathbf{y} \mid \lambda_1, \lambda_2, \theta)\, p(\lambda_1 \mid \alpha)\, p(\lambda_2 \mid \alpha)\, p(\alpha) p\, (\theta) \ &\propto \left( \prod_{i = 1}^\theta \lambda_1^{y_i} \exp(-\lambda_1) \right) \left( \prod_{i = \theta+1}^n \lambda_2^{y_i} \exp(-\lambda_2) \right) \ &\qquad\cdot \underbrace{\alpha^3 \lambda_1^{3-1} \exp(-\alpha\lambda_1)}{\lambda_1\mid\alpha \sim Ga(3,\alpha)} \, \underbrace{\alpha^3 \lambda_2^{3-1} \exp(-\alpha\lambda_2)}{\lambda_2\mid\alpha \sim Ga(3,\alpha)} \ &\qquad\cdot \underbrace{\alpha^{10-1} \exp(-10\alpha)}{\alpha \sim Ga(10,10)} \, \underbrace{\text{I}(1\leq \theta \leq 112)}{\theta \sim \text{U}{1,\ldots, 112}}\,. \end{align}
\begin{align} \lambda_1 \mid \lambda_2, \alpha, \theta, \mathbf{y} &\propto \left( \prod_{i = 1}^\theta \lambda_1^{y_i} \exp(-\lambda_1) \right) \lambda_1^{3-1} \exp(-\alpha\lambda_1)\ &= \lambda_1^{3+\sum_{i=1}^\theta y_i - 1} \exp\big(-\lambda_1(\theta+\alpha)\big) \end{align} Dies ist der Kern einer $Ga(3+\sum_{i=1}^\theta y_i, \theta+\alpha)$-Verteilung.
\begin{align} \lambda_2 \mid \lambda_1, \alpha, \theta, \mathbf{y} &\propto \left( \prod_{i = \theta+1}^n \lambda_2^{y_i} \exp(-\lambda_2) \right) \lambda_2^{3-1} \exp(-\alpha\lambda_2)\ &= \lambda_2^{3+(\sum_{i=\theta+1}^n y_i) - 1} \exp\big(-\lambda_2(\alpha + [n - \theta])\big) \end{align} Dies ist der Kern einer $Ga(3+\sum_{\theta+1}^{112} y_i, \alpha + 112 - \theta)$, da $n=112$.
\begin{align} \alpha \mid \lambda_1, \lambda_2, \theta, \mathbf{y} &\propto \alpha^3 \exp(-\alpha \lambda_1) \alpha^3 \exp(-\alpha \lambda_2) \alpha^{10-1} \exp(-10\alpha) \ &= \alpha^{16-1} \exp\big(-\alpha(10+\lambda_1+\lambda_2)\big) \end{align} Dies ist der Kern einer $Ga(16,10+\lambda_1+\lambda_2)$.
\begin{align} \theta \mid \lambda_1, \lambda_2, \alpha, \mathbf{y} &\propto \left( \prod_{i=1}^\theta \lambda_1^{y_i} \exp(-\lambda_1) \right) \left( \prod_{i=\theta+1}^n \lambda_2^{y_i} \exp(-\lambda_2) \right) \ & \quad\cdot \text{I}(1\leq \theta \leq 112) \ &\propto \left( \prod_{i=1}^\theta \lambda_1^{y_i} \exp(-\lambda_1) \right) \left( \prod_{i=\theta+1}^n \lambda_2^{y_i} \exp(-\lambda_2) \right) \ & \quad\cdot \frac{\left( \prod_{i=1}^\theta \lambda_2^{y_i} \exp(-\lambda_2) \right)} {\left( \prod_{i=1}^\theta \lambda_2^{y_i} \exp(-\lambda_2) \right)} \, \text{I}(1\leq \theta \leq 112) \ &\propto \left( \prod_{i=1}^\theta \lambda_1^{y_i} \lambda_2^{-y_i} \exp(-\lambda_1) \exp(\lambda_2)\right) \text{I}(1\leq \theta \leq 112) \ &= \exp\big(\theta(\lambda_2-\lambda_1)\big) \left( \frac{\lambda_1}{\lambda_2} \right)^{\sum_{i=1}^\theta y_i} \text{I}(1\leq \theta \leq 112) \end{align}
\begin{align} \theta \mid \lambda_1, \lambda_2, \alpha, \mathbf{y} &= \exp\big(\theta(\lambda_2-\lambda_1)\big) \exp\left{\left( \sum_{i=1}^\theta y_i\right) \log\left(\frac{\lambda_1}{\lambda_2}\right)\right} \ & \quad\cdot \text{I}(1\leq \theta \leq 112) \end{align}
samples <- breakpoint.gibbs(1000, y = coal$disaster) # plots par(mfrow = c(2,2)) plot(samples[,"lambda1"], type = "l", ylab = expression(lambda[1]), ylim = c(min(samples[,1:2]), max(samples[,1:2]))) plot(samples[,"lambda2"], type = "l", ylab = expression(lambda[2]), ylim = c(min(samples[,1:2]), max(samples[,1:2]))) acf(samples[,"lambda1"]) acf(samples[,"lambda2"])
Betrachtung der Pfade: 1000 Realisationen reichen aus, fast kein Burn-in notwendig, kaum Autokorrelation.
burnin <- 1:100 # hier großzügiger burn-in angewendet par(mfrow = c(2,2)) # theta plot(samples[-burnin, "theta"], type = "S", ylab = expression(theta)) hist(samples[-burnin, "theta"], xlab = expression(theta), breaks = ((min(samples[-burnin, "theta"])-1): (max(samples[-burnin, "theta"])))+0.5, main = "" ) # lambda_1 plot(density(samples[-burnin, "lambda1"]), main = expression(lambda[1])) # lambda_2 plot(density(samples[-burnin, "lambda2"]), main = expression(lambda[2]))
apply(samples[-burnin,], MAR = 2, mean) apply(samples[-burnin,], MAR = 2, median)
Median-Modell im Histogramm:
plot(coal$year, coal$disasters, type = "h", xlab = "Jahr", ylab = "Anzahl Unfälle") medianmodel <- apply(samples[-burnin,], MAR = 2, median) jahr1 <- min(coal$year) lines(c(jahr1, jahr1 + medianmodel["theta"]), rep(medianmodel["lambda1"], 2), col=2, lwd = 2) lines(c(jahr1 + medianmodel["theta"], max(coal$year)), rep(medianmodel["lambda2"], 2), col=2, lwd = 2)
library(coda) samples2 <- as.mcmc(samples) summary(samples2) plot(samples2)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.