R/priors.R
set_prior.Rd
Constructs a prior distribution for use as the argument prior
in
rpost
and rpost_rcpp
. The user can either
specify their own prior function, returning the log of the prior
density, (using an R function or an external pointer to a compiled C++
function) and arguments for hyperparameters or choose from a list of
in-built model-specific priors. Note that the arguments
model = "gev"
, model = "pp"
and model =="os"
are
equivalent because a prior is specified is the GEV parameterisation in each
of these cases.
Note also that for model = "pp"
the prior GEV parameterisation
relates to the value of noy
subsequently supplied to
rpost
or rpost_rcpp
.
The argument model
is used for consistency with rpost
.
Either
An R function, or a pointer to a user-supplied compiled C++ function, that returns the value of the log of the prior density (see Examples), or
A character string giving the name of the prior. See Details for a list of priors available for each model.
A character string. If prior
is a character string
then model
gives the extreme value model to be used. Using
either model = "gev"
, model = "pp"
or
model = "os"
will result in the same (GEV) parameterisation.
If prior
is a function then the value of model
is stored
so that in the subsequent call to rpost
, consistency of the
prior and extreme value model parameterisations can be checked.
Further arguments to be passed to the user-supplied or
in-built prior function. For details of the latter see Details
and/or the relevant underlying function: gp_norm
,
gp_mdi
, gp_flat
, gp_flatflat
,
gp_jeffreys
, gp_beta
,
gev_norm
, gev_loglognorm
,
gev_mdi
, gev_flat
, gev_flatflat
,
gev_beta
, gev_prob
, gev_quant
.
All these priors have the arguments min_xi
(prior lower bound on
ξ) and max_xi
(prior upper bound on ξ).
A list with class "evprior"
. The first component is the
input prior, i.e. either the name of the prior or a user-supplied
function. The remaining components contain the numeric values of any
hyperparameters in the prior.
Of the in-built named priors available in revdbayes only
those specified using prior = "prob"
(gev_prob
),
prior = "quant"
(gev_quant
)
prior = "norm"
(gev_norm
) or
prior = "loglognorm"
(gev_loglognorm
) are proper.
If model = "gev"
these priors are equivalent to priors available
in the evdbayes package, namely prior.prob
,
prior.quant
, prior.norm
and prior.loglognorm
.
The other in-built priors are improper, that is, the integral of the prior function over its support is not finite. Such priors do not necessarily result in a proper posterior distribution. Northrop and Attalides (2016) consider the issue of posterior propriety in Bayesian extreme value analyses. In most of improper priors below the prior for the scale parameter σ is taken to be 1/σ, i.e. a flat prior for logσ. Here we denote the scale parameter of the GP distribution by σ, whereas we use σu in the revdbayes vignette.
For all in-built priors the arguments min_xi
and max_xi
may
be supplied by the user. The prior density is set to zero for any value
of the shape parameter ξ that is outside
(min_xi
, max_xi
). This will override the default values
of min_xi
and max_xi
in the named priors detailed above.
Extreme value priors. It is typical to use either
prior = "prob"
(gev_prob
) or
prior = "quant"
(gev_quant
) to set an informative
prior and one of the other prior (or a user-supplied function) otherwise.
The names of the in-built extreme value priors set using prior
and details of hyperparameters are:
"prob"
. A prior for GEV parameters (μ,σ,ξ)
based on Crowder (1992). See gev_prob
for details.
See also Northrop et al. (2017) and Stephenson (2016).
"quant"
. A prior for GEV parameters (μ,σ,ξ)
based on Coles and Tawn (1996). See gev_quant
for details.
"norm"
.
For model = "gp"
:
(logσ,ξ), is bivariate normal
with mean mean
(a numeric vector of length 2) and covariance
matrix cov
(a symmetric positive definite 2 by 2 matrix).
For model = "gev"
:
(μ,logσ,ξ), is trivariate
normal with mean mean
(a numeric vector of length 3) and
covariance matrix cov
(a symmetric positive definite 3 by 3
matrix).
"loglognorm"
. For model = "gev"
only:
(logμ,logσ,ξ), is
trivariate normal with mean mean
(a numeric vector of length 3)
and covariance matrix cov
(a symmetric positive definite 3 by 3
matrix).
"mdi"
.
For model = "gp"
: (an extended version
of) the maximal data information (MDI) prior, that is,
π(σ,ξ)=σ−1exp[−a(ξ+1)], for σ>0,ξ≥−1,a≥0.
The value of a is set using the argument a
. The default
value is a=1, which gives the MDI prior.
For model = "gev"
: (an extended version
of) the maximal data information (MDI) prior, that is,
π(μ,σ,ξ)=σ−1exp[−a(ξ+1)], for σ>0,ξ≥−1,a≥0.
The value of a is set using the argument a
. The default
value is a=γ, where γ=0.57721 is Euler's
constant, which gives the MDI prior.
For each of these cases ξ must be is bounded below a priori for the posterior to be proper (Northrop and Attalides, 2016). An argument for the bound ξ≥−1 is that for ξ<−1 the GP (GEV) likelihood is unbounded above as −σ/ξ (μ−σ/ξ)) approaches the sample maximum. In maximum likelihood estimation of GP parameters (Grimshaw, 1993) and GEV parameters a local maximum of the likelihood is sought on the region σ>0,ξ≥−1.
"flat"
.
For model = "gp"
: a flat prior for
ξ (and for logσ):
π(σ,ξ)=σ−1, for σ>0.
For model = "gev"
: a flat prior for
ξ (and for μ and logσ):
π(μ,σ,ξ)=σ−1, for σ>0.
"flatflat"
.
For model = "gp"
: flat priors for
σ and ξ:
π(σ,ξ)=1, for σ>0.
For model = "gev"
: flat priors for μ, σ
and ξ:
π(μ,σ,ξ)=1, for σ>0.
Therefore, the posterior is proportional to the likelihood.
"jeffreys"
. For model = "gp"
only: the Jeffreys
prior (Castellanos and Cabras, 2007):
π(σ,ξ)=σ−1(1+ξ)−1(1+2ξ)−1/2, for σ>0,ξ>−1/2.
In the GEV case the Jeffreys prior doesn't yield a proper posterior for any sample size. See Northrop and Attalides (2016) for details.
"beta"
.
For model = "gp"
: a beta-type(p, q)
prior is used for xi on the interval (min_xi
, max_xi
):
π(σ,ξ)=σ−1(ξ−min
For model = "gev"
: similarly ...
\pi(\mu, \sigma, \xi) = \sigma^{-1} (\xi - {\min}_{\xi}) ^ {p-1}
({\max}_{\xi} - \xi) ^ {q-1}, {\rm ~for~}
{\min}_{\xi} < \xi < {\max}_{\xi}.
The argument pq
is a vector containing c(p,q)
.
The default settings for this prior are p = 6, q = 9
and
min_xi = -1/2, max_xi = 1/2
, which corresponds to the
prior for \xi proposed in Martins and Stedinger (2000, 2001).
Castellanos, E. M. and Cabras, S. (2007) A default Bayesian procedure for the generalized Pareto distribution. Journal of Statistical Planning and Inference 137(2), 473-483. doi:10.1016/j.jspi.2006.01.006 .
Coles, S. G. and Tawn, J. A. (1996) A Bayesian analysis of extreme rainfall data. Appl. Statist., 45, 463-478.
Crowder, M. (1992) Bayesian priors based on parameter transformation using the distribution function Ann. Inst. Statist. Math., 44, 405-416. https://link.springer.com/article/10.1007/BF00050695.
Grimshaw, S. D. (1993) Computing Maximum Likelihood Estimates for the Generalized Pareto Distribution. Technometrics, 35(2), 185-191. doi:10.1080/00401706.1993.10485040 .
Hosking, J. R. M. and Wallis, J. R. (1987) Parameter and Quantile Estimation for the Generalized Pareto Distribution. Technometrics, 29(3), 339-349. doi:10.2307/1269343 .
Martins, E. S. and Stedinger, J. R. (2000) Generalized maximum likelihood generalized extreme value quantile estimators for hydrologic data, Water Resources Research, 36(3), 737-744. doi:10.1029/1999WR900330 .
Martins, E. S. and Stedinger, J. R. (2001) Generalized maximum likelihood Pareto-Poisson estimators for partial duration series, Water Resources Research, 37(10), 2551-2557. doi:10.1029/2001WR000367 .
Northrop, P.J. and Attalides, N. (2016) Posterior propriety in Bayesian extreme value analyses using reference priors Statistica Sinica, 26(2), 721--743 doi:10.5705/ss.2014.034 .
Northrop, P. J., Attalides, N. and Jonathan, P. (2017) Cross-validatory extreme value threshold selection and uncertainty with application to ocean storm severity. Journal of the Royal Statistical Society Series C: Applied Statistics, 66(1), 93-120. doi:10.1111/rssc.12159
Stephenson, A. (2016) Bayesian inference for extreme value modelling. In Extreme Value Modeling and Risk Analysis: Methods and Applications (eds D. K. Dey and J. Yan), 257-280, Chapman and Hall, London. doi:10.1201/b19721 .
rpost
and rpost_rcpp
for sampling
from an extreme value posterior distribution.
create_prior_xptr
for creating an external
pointer to a C++ function to evaluate the log-prior density.
rprior_prob
and rprior_quant
for
sampling from informative prior distributions for GEV parameters.
gp_norm
, gp_mdi
,
gp_flat
, gp_flatflat
,
gp_jeffreys
, gp_beta
to see the arguments
for priors for GP parameters.
gev_norm
, gev_loglognorm
,
gev_mdi
, gev_flat
, gev_flatflat
,
gev_beta
, gev_prob
, gev_quant
to see the arguments for priors for GEV parameters.
# Normal prior for GEV parameters (mu, log(sigma), xi).
mat <- diag(c(10000, 10000, 100))
pn <- set_prior(prior = "norm", model = "gev", mean = c(0,0,0), cov = mat)
pn
#> $prior
#> [1] "gev_norm"
#>
#> $mean
#> [1] 0 0 0
#>
#> $min_xi
#> [1] -Inf
#>
#> $max_xi
#> [1] Inf
#>
#> $icov
#> [1] 1e-04 0e+00 0e+00 1e-04 0e+00 1e-02
#>
#> $trendsd
#> [1] 0
#>
#> attr(,"class")
#> [1] "evprior"
#> attr(,"model")
#> [1] "gev"
# Prior for GP parameters with flat prior for xi on (-1, infinity).
fp <- set_prior(prior = "flat", model = "gp", min_xi = -1)
fp
#> $prior
#> [1] "gp_flat"
#>
#> $min_xi
#> [1] -1
#>
#> $max_xi
#> [1] Inf
#>
#> $trendsd
#> [1] 0
#>
#> attr(,"class")
#> [1] "evprior"
#> attr(,"model")
#> [1] "gp"
# A user-defined prior (see the vignette for details).
u_prior_fn <- function(x, ab) {
if (x[1] <= 0 | x[2] <= -1 | x[2] >= 1) {
return(-Inf)
}
return(-log(x[1]) + (ab[1] - 1) * log(1 + x[2]) +
(ab[2] - 1) * log(1 - x[2]))
}
up <- set_prior(prior = u_prior_fn, ab = c(2, 2), model = "gp")
# A user-defined prior using a pointer to a C++ function
ptr_gp_flat <- create_prior_xptr("gp_flat")
u_prior_ptr <- set_prior(prior = ptr_gp_flat, model = "gp")