Last chance! 50% off unlimited learning
Sale ends in
Density, distribution function, quantile function, and highest density region calculation for the inverse-Gamma distribution with parameters alpha
and beta
.
densigamma(x,alpha,beta)
pigamma(q,alpha,beta)
qigamma(p,alpha,beta)
rigamma(n,alpha,beta)
igammaHDR(alpha,beta,content=.95,debug=FALSE)
densigamma
gives the density, pigamma
the
distribution function, qigamma
the quantile function,
rigamma
generates random samples, and igammaHDR
gives
the lower and upper limits of the HDR, as defined above (NA
s if
the optimization is not successful).
vector of quantiles
vector of probabilities
number of random samples in rigamma
rate and shape parameters of the inverse-Gamma density, both positive
scalar, 0 < content
< 1, volume of
highest density region
logical; if TRUE, debugging information from the search for the HDR is printed
Simon Jackman simon.jackman@sydney.edu.au
The inverse-Gamma density arises frequently in Bayesian
analysis of normal data, as the (marginal) conjugate prior for
the unknown variance parameter. The inverse-Gamma density
for gamma
function
The evaluation of the density,
cumulative distribution function and quantiles is done by
calls to the dgamma
, pgamma
and igamma
functions, with the arguments appropriately transformed. That
is, note
that if
Highest Density Regions. In general, suppose
This function uses numerical methods to solve for the
boundaries of a HDR with content
densigamma
, pigamma
and
qigamma
. In particular, the function uniroot
is used to
find points
alpha <- 4
beta <- 30
summary(rigamma(n=1000,alpha,beta))
xseq <- seq(.1,30,by=.1)
fx <- densigamma(xseq,alpha,beta)
plot(xseq,fx,type="n",
xlab="x",
ylab="f(x)",
ylim=c(0,1.01*max(fx)),
yaxs="i",
axes=FALSE)
axis(1)
title(substitute(list(alpha==a,beta==b),list(a=alpha,b=beta)))
q <- igammaHDR(alpha,beta,debug=TRUE)
xlo <- which.min(abs(q[1]-xseq))
xup <- which.min(abs(q[2]-xseq))
plotZero <- par()$usr[3]
polygon(x=xseq[c(xlo,xlo:xup,xup:xlo)],
y=c(plotZero,
fx[xlo:xup],
rep(plotZero,length(xlo:xup))),
border=FALSE,
col=gray(.45))
lines(xseq,fx,lwd=1.25)
if (FALSE) {
alpha <- beta <- .1
xseq <- exp(seq(-7,30,length=1001))
fx <- densigamma(xseq,alpha,beta)
plot(xseq,fx,
log="xy",
type="l",
ylim=c(min(fx),1.01*max(fx)),
yaxs="i",
xlab="x, log scale",
ylab="f(x), log scale",
axes=FALSE)
axis(1)
title(substitute(list(alpha==a,beta==b),list(a=alpha,b=beta)))
q <- igammaHDR(alpha,beta,debug=TRUE)
xlo <- which.min(abs(q[1]-xseq))
xup <- which.min(abs(q[2]-xseq))
plotZero <- min(fx)
polygon(x=xseq[c(xlo,xlo:xup,xup:xlo)],
y=c(plotZero,
fx[xlo:xup],
rep(plotZero,length(xlo:xup))),
border=FALSE,
col=gray(.45))
lines(xseq,fx,lwd=1.25)
}
Run the code above in your browser using DataLab