Statistische Informationsverarbeitung - Projekt
From StatWiki
Contents |
Nuclear pump failures
Gaver and O'Muircheartaigh (1987) introduced a model that is frequently used (or even overused) in the Gibbs sampling literature to illustrate various properties (see, for instance, Gelfand and Smith 1990, Tanner 1996, or Guihenneuc-Jouyaux and Robert 1998).
| Pump 1 | Pump 2 | Pump 3 | Pump 4 | Pump 5 | Pump 6 | Pump 7 | Pump 8 | Pump 9 | Pump 10 | |
|---|---|---|---|---|---|---|---|---|---|---|
| Failures | 5.00 | 1.00 | 5.00 | 14.00 | 3.00 | 19.00 | 1.00 | 1.00 | 14.00 | 22.00 |
| Time | 94.32 | 15.72 | 62.88 | 125.76 | 5.24 | 31.44 | 1.05 | 1.05 | 2.10 | 10.48 |
This model describes multiple failures of pumps in a nuclear plant, with the data given in the table above.
The modeling is based on the assumption that the failures of the i-th pump follow a Poisson process with parameters
.
For an observed time
, the number of failures
is thus a Poisson
random variable.
The associated prior distributions are
with
Beispiel (a)
Berechnen Sie den Posterior
, wobei
und
ist.
sind fix.
Laut Angabe:![]()
![]()
Satz der bedingten Wahrscheinlichkeit und weili.i.d. sind
![]()
![]()
![]()
Hier werden die Daten eingesetzt, d.h.
sind die Failures und
die jeweiligen Zeiten. Die sind Konstant und können daher im nächsten Schritt vernachlässigt werden.
![]()
Beispiel (b)
Berechnen Sie die bedingten Verteilung für
und
.
Dichte einer Gamma-Verteilung![]()
Alles, was nach dem Produktzeichen steht, ist ja nur eine Konstante. Der Zusammenhang zur Dichte der Gammaverteilung ist nun durch
gegeben, wobei links immer die Variablen der Dichte und rechts die Variablen aus der Posterior stehen.
Daraus kann man ablesen (einfach die Funktion so umschreiben wie oben), dass die bedingte Dichte vonist:
![]()
Beispiel (c)
Berechnen Sie die bedingten Verteilung für
und
.
Beispiel (d)
Programmieren Sie einen Gibbs Sampler für die oben angegeben Werte von
library(coda)
alpha = 1.8
gamma = 0.01
delta = 1
r.lambda.i = function(beta, i) rgamma(1, alpha + pumps[1,i], beta + pumps[2,i])
r.beta = function(lambda) rgamma(1, length(lambda) * alpha + delta, delta + sum(lambda))
gibbs = function(beta,n=1000) {
d = matrix(0, nrow=n, ncol=11)
colnames(d) = c("beta",sprintf("lambda[%d]", 1:10))
for(i in 1:n) {
for(j in 1:10)
d[i,j+1] = r.lambda.i(beta,j)
d[i,1] = beta = r.beta(d[i,-1])
}
mcmc(d)
}
mc = mcmc.list(sapply(0:8, gibbs, simplify=F))
#
Beispiel (e)
Betracten Sie die fortlaufenden Mittel und den Gelman-Rubion Plot von
,
um eine geeignete Anzahl von Iterationen festzulegen.
pdf(rpdf,height=12, width=12) library(coda) gelman.plot(mc[,c(1,3,9)]) #
pdf(rpdf,height=12,width=12)
library(coda)
# matrix an fortlaufenden mittel
plot.mean = function(var.index) {
fm = matrix(unlist(lapply(mc[,var.index], function(x) cumsum(x)/(1:length(x)))), ncol=9)
var.name = varnames(mc)[var.index]
matplot(fm, type="l",xlab="Iterationen",ylab=paste("Fortlaufendes Mittel ",var.name))
title(paste("Fortlaufendes Mittel von",var.name))
}
par(mfrow=c(2,2))
plot.mean(1)
plot.mean(3)
plot.mean(9)
#
Aus den oben angführten Plots ist zu erkennen, dass ab 400 Iterationen ein recht gutes Ergebnis erzielt werden kann.
Beispiel (f)
Plotten Sie 95% Konfidenzbänder für
und
, zusammen mit den entsprechenden fortlaufenden Mitteln.
pdf(rpdf,width=12)
library(coda)
plot.glob.mean = function(var.index) {
r = matrix(unlist(mc[,var.index]), nrow=length(mc))
r = apply(r, 2, mean)
fm = cumsum(r)/(1:length(r))
co = t(sapply(1:length(r), function(t) quantile(r[1:t], c(0.025,0.975))))
# mean
var.name = varnames(mc)[var.index]
plot(fm, type="l",xlab="Iterationen",ylab=paste("Gesamt fortlaufendes Mittel ",var.name), ylim=range(co))
title(paste("Gesamt fortlaufendes Mittel von",var.name))
# confidence interval
matlines(co, type="l", col=2, lty=2)
}
par(mfrow=c(1,2))
plot.glob.mean(3)
plot.glob.mean(9)
#
Alternativ auch direkt mit Funktionen aus dem coda Package
Achtung: hier wird nur die erste Kette verwendet und nicht wie oben, über alle Ketten gemittelt.
Hier sieht man auch recht gut, dass durch das mitteln über alle Ketten die Konfidenzbänder um einiges enger werden.
pdf(rpdf) library(coda) cumuplot(mc[[1]][,c(3)],ylab="lambda[2]",col=c(2,1)) cumuplot(mc[[1]][,c(9)],ylab="lambda[8]",col=c(2,1)) #

Beispiel (g)
Geben Sie Ihren MCMC-Schätzer für
und
(also die Störungsrate für den Poisson Prozess
der 2. und 8. Pumpe) jeweils mit einem 90% und 95% Konfidenzintervall, an.
library(coda) summary(mc[,c(3,9)],quantiles=c(0.025,0.05,.95,.975)) #
Iterations = 1:1000 Thinning interval = 1 Number of chains = 9 Sample size per chain = 1000
1. Empirical mean and standard deviation for each variable,
plus standard error of the mean:Mean SD Naive SE Time-series SElambda[2] 0.1587 0.09526 0.001004 0.001059 lambda[8] 1.0164 0.63624 0.006707 0.007542
2. Quantiles for each variable:
2.5% 5% 95% 97.5%lambda[2] 0.03045 0.03996 0.3416 0.3951 lambda[8] 0.18610 0.25169 2.2315 2.6026
i.i.d. sind
Hier werden die Daten eingesetzt,
d.h.
Alles, was nach dem Produktzeichen steht, ist ja nur eine Konstante.
Der Zusammenhang zur Dichte der Gammaverteilung ist nun durch
gegeben, wobei
links immer die Variablen der Dichte und rechts die Variablen aus der Posterior stehen.
