Functions and functionals
Introduction
Function arguments represented by
e can be
expressions, those by
s must be scalar-valued nodes in the graph and those represented by
v must be vector-valued nodes in a graph. Some function arguments must be stochastic nodes. Functionals are described using a similar notation to functions, the special notation
F(x) is used to describe the function on which the functional acts. See example
Functionals for details.
Systems of ordinary differential equations and their solution can be described in the BUGS language by using the special
D(x[1:n], t) notation. See example
ode for details.
Scalar functions
abs(e) absolute value of e, |e|
arccos(e) inverse cosine of e
arccosh(e) inverse hyperbolic cosine of e
arcsin(e) inverse sine of e
arcsinh(e) inverse hyperbolic sine of e
arctan(e) inverse tangent of e
arctanh(e) inverse hyperbolic tangent of e
cloglog(e) complementary log log of e, ln(-ln(1 -
e))
cos(e) cosine of e
cosh(e) hyperbolic cosine of e
cut(e) cuts edges in the graph - see
Tip and tricks page for details.
equals(e1, e2) 1 if
value of e1 equals value of
e2; 0 otherwise
exp(e) exp(
e)
gammap(s1, s2) partial (incomplete) gamma function, value of standard gamma density with parameter s1 integrated up to s2
ilogit(e) exp(
e) / (1 + exp(
e))
icloglog(e) 1 - exp( - exp(
e))
integral(F(s), s1, s2, s3) definite integral of function F(s) between s = s1 and s = s2 to accuracy s3
log(e) natural logarithm of e
logfact(e) ln(
e!)
loggam(e) logarithm of gamma function of e
logit(e) ln(
e / (1 -
e))
max(e1, e2) e1 if e1 > e2; e2 otherwise
min(e1, e2)e1 if e1 < e2; e2 otherwise
phi(e) standard normal cdf
post.p.value(s) s must be a stochastic node, returns one if a sample from the prior is less than the value of s
pow(e1, e2) e1
e2 prior.p.value(s) s must be a stochastic node, returns one if a sample from the prior after resampling its stochastic parents is less than value of s.
probit(e) inverse of
phi(e)replicate.post(s) replicate from distribution of s, s must be stochastic node
replicate.prior.(s) replicate from distribution of s after replicating from it parents if they are stochastic, s must be stochastic node
round(e)nearest integer to e
sin(e) sine of e
sinh(e) hyperbolic sine of e
solution(F(s), s1, s2, s3) a solution of equation F(s) = 0 lying between s = s1 and s = s2 to accuracy s3, s1 and s2 must bracket a solution
sqrt(e)e
1/2
step(e)1 if
e >= 0; 0 otherwise
tan(e) tangent of e
tanh(e) hyperbolic tangent of e
trunc(e)greatest integer less than or equal to e
Vector functions
inprod(v1, v2) inner product
Σi v
1i v
2i of v1 and v2
interp.lin(e, v1, v2) Given function values in the vector v2 evaluated at the points in v1, this estimates the function value at a new point e by simple linear interpolation using the closest bounding pair of points. For example, given the population in 1991,2001 and 2011, we might want to estimate the population in 2004. Specifically, v
2p + (v
2p + 1 - v
2p) * (e - v
1p) / (v
1p + 1 - v
1p), where p is such that
v1p < e < v1p + 1 and the elements of v1 are in ascending order
inverse(v) inverse of symmetric positive-definite matrix v
logdet(v) log of determinant of v for symmetric positive-definite
vmean(v) Σi v
i / n, where n = dim(v)
eigen.vals(v) eigenvalues of matrix v
ode(v1, v2, D(v3, s1), s2, s3) solution of system of ordinary differential equations at grid of points v2 given initial values v1 at time s2 solved to accuracy s3. v3 is a vector of components of the system of ode and s1 is the time variable. See the PDF files in the Diff/Docu directory of the BUGS installation for further details.
prod(v) Πi v
i p.valueM(v) v must be a multivariate stochastic node, returns a vector of ones and zeros depending on if a sample from the prior is less than value of the corresponding component of v
rank(v, s)number of components of vless than or equal to s
ranked(v, s)the
sthsmallest component of v
replicate.postM(v) replicate from multivariate distribution of v, v must be stochastic and multivariate
sd(v) standard deviation of components of
v (n - 1 in denominator)
sort(v) vector v sorted in ascending order
sum(v) Σi v
i
Properties of distributions
The cumulative distribution function (CDF), probability density function (PDF) and deviance for the distributions available in BUGS can be calculated using the
cdf.dist,
pdf.dist and
dev.dist family of functions, where
dist corresponds to one of the distributions listed above. The first argument of each function is the value at which to evaluate the function. The other arguments are the parameters of the distribution itself. For example, for the normal distribution:
cdf.norm(s, mu, tau) cumulative distribution function at the value of
s for a normal distribution with parameters
mu and
taupdf.norm(s, mu, tau) probability density of distribution at value of s for a normal distribution with parameters
mu and
taudev.norm(s, mu tau) deviance of distribution at value of s for a normal distribution with parameters
mu and
tauThe following cumulative distribution functions are available:
cdf.bern,
cdf.beta,
cdf.bin,
cdf.cat,
cdf.chisqr,
cdf.dexp,
cdf.exp,
cdf.f,
cdf.gamma,
cdf.ggamma,
cdf.geom0,
cdf.geom1,
cdf.hyper,
cdf.lnorm,
cdf.logis,
cdf.negbin,
cdf.norm,
cdf.par,
cdf.pois,
cdf.polygene,
cdf.t,
cdf.trap,
cdf.triang,
cdf.unif,
cdf.weib,
cdf.weib3,
cdf.gev,
cdf.gpar. No cumulative distribution function is available for flat (
dflat), generic (
dloglik), stable (
dstable) or Zipf (
dzipf) distributions.
The following probability density functions are available for univariate distributions:
pdf.bern,
pdf.beta,
pdf.bin,
pdf.cat,
pdf.chisqr,
pdf.dexp,
pdf.exp,
pdf.f,
pdf.flat,
pdf.gamma,
pdf.ggamma,
pdf.geom0,
pdf.geom1,
pdf.hyper,
pdf.lnorm,
pdf.logis,
pdf.negbin,
pdf.norm,
pdf.par,
pdf.pois,
pdf.polygene,
pdf.t,
pdf.trap,
pdf.triang,
pdf.unif,
pdf.weib,
pdf.weib3,
pdf.gev,
pdf.gpar,
pdf.zipf. No probability distribution function is available for generic (
dloglik) or stable (
dstable) distributions.
For multivariate distributions the following probability density functions are available:
pdf.dirich,
pdf.multi,
pdf.mnorm,
pdf.mt,
pdf.wishThe following functions calculate the deviance of the corresponding distribution:
dev.bern,
dev.beta,
dev.bin,
dev.cat,
dev.chisqr,
dev.dexp,
dev.exp,
dev.f,
dev.flat,
dev.gamma,
dev.ggamma,
dev.geom0,
dev.geom1,
dev.hyper,
dev.lnorm,
dev.logis,
dev.negbin,
dev.norm,
dev.par,
dev.pois,
dev.polygene,
dev.t,
dev.trap,
dev.triang,
dev.unif,
dev.weib,
dev.weib3,
dev.gev,
dev.gpar,
dev.zipf. No deviance function is available for generic (
dloglik) or stable (
dstable) distributions.
For multivariate distributions, the following functions calculate deviance:
dev.dirich,
dev.multi,
dev.mnorm,
dev.mt,
dev.wish