Title: | Statistics of Extremes |
---|---|
Description: | Conducts inference in statistical models for extreme values (de Carvalho et al (2012), <doi:10.1080/03610926.2012.709905>; de Carvalho and Davison (2014), <doi:10.1080/01621459.2013.872651>; Einmahl et al (2016), <doi:10.1111/rssb.12099>). |
Authors: | Miguel de Carvalho [aut, cre], Rodrigo Rubio [aut], Vianey Palacios [aut], Alejandro Jara [ctb], Tim Hanson [ctb] |
Maintainer: | Miguel de Carvalho <[email protected]> |
License: | GPL (>= 3) |
Version: | 1.21 |
Built: | 2025-01-17 04:37:11 UTC |
Source: | https://github.com/extremestats/extremis |
This function computes empirical-likelihood based estimators for the angular distribution function of a bivariate extreme value distribution.
angcdf(Y, tau = 0.95, method = "euclidean", raw = TRUE)
angcdf(Y, tau = 0.95, method = "euclidean", raw = TRUE)
Y |
data frame with two columns from which the estimate is to be computed. |
tau |
value used to threshold the data; by default it is set as
the 0.95 quantile of the pseudo-radius |
method |
a character string setting the method to be used. By
default |
raw |
logical; if |
method = "euclidean"
implements the maximum Euclidean
likelihood spectral distribution function as introduced by de
Carvalho et al (2013). method = "empirical"
implements the
maximum Empirical likelihood spectral distribution function as
introduced by Einmahl and Segers (2009).
H |
angular distribution function. |
w |
pseudo-angles. |
Y |
data. |
The plot
method depicts the empirical likelihood-based
angular distribution function.
Miguel de Carvalho
de Carvalho, M., Oumow, B., Segers, J. and Warchol, M. (2013) A Euclidean likelihood estimator for bivariate tail dependence. Communications in Statistics—Theory and Methods, 42, 1176–1192.
Einmahl, J. H. J., and Segers, J. (2009) Maximum empirical likelihood estimation of the spectral measure of an extreme-value distribution. The Annals of Statistics, 37, 2953–2989.
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angcdf(beatenberg, tau = 0.98, raw = FALSE) plot(fit) rug(fit$w)
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angcdf(beatenberg, tau = 0.98, raw = FALSE) plot(fit) rug(fit$w)
This function computes empirical-likelihood based estimators for the angular distribution function of a bivariate extreme value distribution.
angdensity(Y, tau = 0.95, nu, grid = seq(0.01, 0.99, length = 2^8), method = "euclidean", raw = TRUE)
angdensity(Y, tau = 0.95, nu, grid = seq(0.01, 0.99, length = 2^8), method = "euclidean", raw = TRUE)
Y |
data frame with two columns from which the estimate is to be computed. |
tau |
value used to threshold the data; by default it is set as the 0.95 quantile of the pseudo-radius. |
nu |
concentration parameter of beta distribution which controls the amount of smoothing. |
grid |
grid with coordinates of the points where the angular
density is estimated; by default |
method |
a character string setting the method to be used. By
default |
raw |
logical; if |
The smooth angular density was introduced in by de Carvalho et al
(2013). method = "euclidean"
implements the version of the
method based on Euclidean likelihood weights, whereas method =
"empirical"
uses Empirical likelihood weights.
h |
the estimate angular density values. |
grid |
grid with coordinates of the points where the angular density is estimated. |
w |
pseudo-angles. |
nu |
concentration parameter of the Beta-kernel. |
Y |
raw data. |
The plot
method depicts the smooth angular density.
Miguel de Carvalho
de Carvalho, M., Oumow, B., Segers, J. and Warchol, M. (2013) A Euclidean likelihood estimator for bivariate tail dependence. Communications in Statistics—Theory and Methods, 42, 1176–1192.
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angdensity(beatenberg, tau = 0.98, nu = 163, raw = FALSE) plot(fit) rug(fit$w)
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angdensity(beatenberg, tau = 0.98, nu = 163, raw = FALSE) plot(fit) rug(fit$w)
This function computes smooth empirical-likelihood based estimators for the angular distribution function of a bivariate extreme value distribution.
angscdf(Y, tau = 0.95, nu, grid = seq(0.01, 0.99, length = 2^8), method = "euclidean", raw = TRUE)
angscdf(Y, tau = 0.95, nu, grid = seq(0.01, 0.99, length = 2^8), method = "euclidean", raw = TRUE)
Y |
data frame with two columns from which the estimate is to be computed. |
tau |
value used to threshold the data; by default it is set as
the 0.95 quantile of the pseudo-radius |
nu |
concentration parameter of beta distribution which controls the amount of smoothing. |
grid |
grid with coordinates of the points where the angular
measure is estimated; by default |
method |
a character string setting the method to be used. By
default |
raw |
logical; if |
method = "euclidean"
implements the maximum Euclidean
likelihood spectral distribution function as introduced by de
Carvalho et al (2013). method = "empirical"
implements the
maximum Empirical likelihood spectral distribution function as
introduced by Einmahl and Segers (2009).
H |
the estimated angular distribution function values. |
grid |
grid with coordinates of the points where the angular measure is estimated. |
w |
pseudo-angles. |
nu |
concentration parameter of the Beta-kernel. |
Y |
raw data. |
The plot
method depicts the empirical likelihood-based
angular distribution function.
Miguel de Carvalho
de Carvalho, M., Oumow, B., Segers, J. and Warchol, M. (2013) A Euclidean likelihood estimator for bivariate tail dependence. Communications in Statistics—Theory and Methods, 42, 1176–1192.
Einmahl, J. H. J., and Segers, J. (2009) Maximum empirical likelihood estimation of the spectral measure of an extreme-value distribution. The Annals of Statistics, 37, 2953–2989.
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angscdf(beatenberg, tau = 0.98, nu = 163, raw = FALSE) plot(fit) rug(fit$w)
## de Carvalho et al (2013, Fig. 7) data(beatenberg) attach(beatenberg) fit <- angscdf(beatenberg, tau = 0.98, nu = 163, raw = FALSE) plot(fit) rug(fit$w)
Preprocessed pairs of temperatures in unit Fréchet scale from Beatenberg forest, registered under forest cover and in the open field. Preprocessing is conducted as described in Ferrez et al (2011).
beatenberg
beatenberg
The beatenberg
data frame has 2839 rows and 2 columns.
Ferrez, J., A. C. Davison, and Rebetez., M. (2011) Extreme temperature analysis under forest cover compared to an open field. Agricultural and Forest Meteorology, 151, 992–1001.
This function computes a kernel joint scedasis density estimate.
cdensity(XY, tau = 0.95, raw = TRUE, structure = "min", ...)
cdensity(XY, tau = 0.95, raw = TRUE, structure = "min", ...)
XY |
data frame from which the estimate is to be computed; first
column corresponds to time, the second and third columns correspond
to the variables of interest |
tau |
value used to threshold the data |
raw |
logical; if |
structure |
the structure scedasis option: "min","max","sum". The default will compute the minimum. |
... |
further arguments for |
This function learns about the joint scedasis function using kernel methods as discussed in Palacios and de Carvalho (2020). In the particular case where XY contains no third column, the function learns about the scedasis function of Einmahl et al (2016).
c |
scedasis density estimator. |
k |
number of exceedances above the threshold. |
w |
standardized indices of exceedances. |
XY |
raw data. |
The plot
method depicts the smooth scedasis density.
Miguel de Carvalho and Vianey Palacios
Einmahl, J. H., Haan, L., and Zhou, C. (2016) Statistics of heteroscedastic extremes. Journal of the Royal Statistical Society: Ser. B, 78(1), 31–51.
Palacios, V. and de Carvalho, M. (2020) Bayesian semiparametric modeling of jointly heteroscedastic extremes. Preprint.
data(lse) attach(lse) XY <- data.frame(DATE[-1], -diff(log(ROYAL.DUTCH.SHELL.B))) T <- dim(XY)[1] k <- floor((0.4258597) * T / (log(T))) fit <- cdensity(XY, kernel = "biweight", bw = 0.1 / sqrt(7)) plot(fit) plot(fit, original = FALSE) ## Example from Palacios and de Carvalho (2020, submitted) library(evd) T <- 5000 time <- seq(1/T, 1, by = 1/T) set.seed(1263) aux <- matrix(0,T,2) for(i in 1:T) { aux[i,] <- rbvevd(1,dep=sin(time[i]*pi),model="log", mar1 = c(1, 1, 1), mar2 = c(1,1,1))} XY <- cbind(time,aux) fit <- cdensity(XY, kernel = "biweight", bw = 0.1) plot(fit)
data(lse) attach(lse) XY <- data.frame(DATE[-1], -diff(log(ROYAL.DUTCH.SHELL.B))) T <- dim(XY)[1] k <- floor((0.4258597) * T / (log(T))) fit <- cdensity(XY, kernel = "biweight", bw = 0.1 / sqrt(7)) plot(fit) plot(fit, original = FALSE) ## Example from Palacios and de Carvalho (2020, submitted) library(evd) T <- 5000 time <- seq(1/T, 1, by = 1/T) set.seed(1263) aux <- matrix(0,T,2) for(i in 1:T) { aux[i,] <- rbvevd(1,dep=sin(time[i]*pi),model="log", mar1 = c(1, 1, 1), mar2 = c(1,1,1))} XY <- cbind(time,aux) fit <- cdensity(XY, kernel = "biweight", bw = 0.1) plot(fit)
This function computes the empirical scedasis distribution function.
cdf(Y, threshold = quantile(Y[, 2], 0.95))
cdf(Y, threshold = quantile(Y[, 2], 0.95))
Y |
data frame from which the estimate is to be computed; first column corresponds to time and the second to the variable of interest. |
threshold |
value used to threshold the data |
The empirical scedasis distribution function was introduced by Einmahl et al (2016).
C |
empirical scedasis distribution function. |
w |
standardized indices of exceedances. |
k |
number of exceedances above a threshold. |
Y |
raw data. |
The plot
method depicts the empirical cumulative scedasis
function, and the reference line for the case of constant frequency of
extremes over time (if uniform = TRUE
).
Miguel de Carvalho
Einmahl, J. H., Haan, L., and Zhou, C. (2016) Statistics of heteroscedastic extremes. Journal of the Royal Statistical Society: Ser. B, 78(1), 31–51.
data(sp500) attach(sp500) Y <- data.frame(date[-1], -diff(log(close))) fit <- cdf(Y) plot(fit) plot(fit, original = FALSE)
data(sp500) attach(sp500) Y <- data.frame(date[-1], -diff(log(close))) fit <- cdf(Y) plot(fit) plot(fit, original = FALSE)
This function computes the mode mass function.
cmodes(Y, thresholds = apply(Y[, -1], 2, quantile, probs = 0.95), nu = 100, ...)
cmodes(Y, thresholds = apply(Y[, -1], 2, quantile, probs = 0.95), nu = 100, ...)
Y |
data frame from which the estimate is to be computed; first column corresponds to time and the second to the variable of interest. |
thresholds |
values used to threshold the data |
nu |
concentration parameter of beta kernel used to smooth mode mass function. |
... |
further arguments for |
The scedasis functions on which the mode mass function is based are
computed using the default "nrd0"
option for bandwidth.
c |
scedasis density estimators. |
k |
number of exceedances above the threshold. |
w |
standardized indices of exceedances. |
Y |
raw data. |
The plot
method depicts the smooth mode mass function along
with the smooth scedasis densities.
Miguel de Carvalho
Rubio, R., de Carvalho, M., and Huser, R. (2018) Similarity-Based Clustering of Extreme Losses from the London Stock Exchange. Submitted.
data(lse) attach(lse) nlr <- -apply(log(lse[, -1]), 2, diff) Y <- data.frame(DATE[-1], nlr) T <- dim(Y)[1] k <- floor((0.4258597) * T / (log(T))) fit <- cmodes(Y, thresholds = as.numeric(apply(nlr, 2, sort)[T - k, ]), kernel = "biweight", bw = 0.1 / sqrt(7), nu = 100) plot(fit)
data(lse) attach(lse) nlr <- -apply(log(lse[, -1]), 2, diff) Y <- data.frame(DATE[-1], nlr) T <- dim(Y)[1] k <- floor((0.4258597) * T / (log(T))) fit <- cmodes(Y, thresholds = as.numeric(apply(nlr, 2, sort)[T - k, ]), kernel = "biweight", bw = 0.1 / sqrt(7), nu = 100) plot(fit)
This function computes a Bayesian structure scedasis density estimate generating a posterior sample of a finite Mixture of Polya trees.
cPTdensity(XY, tau = 0.95, raw = TRUE, structure = "min", prior, mcmc, state, status, data = sys.frame(sys.parent()), na.action = na.fail)
cPTdensity(XY, tau = 0.95, raw = TRUE, structure = "min", prior, mcmc, state, status, data = sys.frame(sys.parent()), na.action = na.fail)
XY |
data frame from which the estimate is to be computed; first
column corresponds to time, the second and third columns correspond
to the variables of interest |
tau |
value used to threshold the data |
raw |
logical; if |
structure |
the structure scedasis option: "min","max","sum". The default will compute the minimum. |
prior |
a list giving the prior information. The list includes the
following parameter: |
mcmc |
a list giving the MCMC parameters. The list must include
the following integers: |
state |
a list giving the current value of the parameters. This list is used if the current analysis is the continuation of a previous analysis. |
status |
a logical variable indicating whether this run is new
( |
data |
data frame. |
na.action |
a function that indicates what should happen when the data
contain |
This function learns about the structure scedasis function using a Mixture of Polya Trees (MPT) prior as proposed in Palacios and de Carvalho (2020). In the particular case where XY contains no third column, the function learns about the scedasis function of Einmahl et al (2016) using an MPT prior. The details are as follows. Let
. The model is given by:
where, the the PT is centered around a distribution, by taking each
level of the partition
to coincide
with the
quantile of the
distribution.
The family
,
where
and
is the
-fold product of
,
was specified as
.
In the univariate case,the following proper priors can be assigned:
To complete the model specification, independent hyperpriors are assumed,
The precision parameter, , of the
PT
prior
can be considered as random, having a gamma
distribution, ,
or fixed at some particular value. To let
to be fixed at a particular
value, set
to NULL in the prior specification.
In the computational implementation of the model, Metropolis–Hastings steps are used to sample the posterior distribution of the baseline and precision parameters.
c |
Structure scedasis density estimator. |
k |
number of exceedances above the threshold. |
w |
standardized indices of exceedances. |
Y |
raw data. |
al |
giving the value of the baseline shape parameter. |
be |
giving the value of the baseline scale parameter. |
alpha |
giving the value of the precision parameter. |
The plot
method depicts the estimated structure scedasis density.
Miguel de Carvalho and Vianey Palacios
Palacios, V., de Carvalho, M. (2020) Bayesian semiparametric modeling of jointly heteroscedastic extremes. Preprint.
## Not run: ## Example from Palacios and de Carvalho (2020, submitted) library(evd) ## Initial state state <- NULL ## MCMC parameters nburn <- 2000 nsave <- 1000 nskip <- 0 ndisplay <- 500 mcmc <- list(nburn=nburn,nsave=nsave,nskip=nskip,ndisplay=ndisplay, tune1=1.1,tune2=1.1,tune3=1.1) ## Prior information prior<-list(a0=1,b0=1,M=8,m0=.01,S0=.01,tau1=.01,tau2=.01); T <- 5000 time <- seq(1/T, 1, by = 1/T) set.seed(12333) aux <- matrix(0, T, 2) for (i in 1:T) { aux[i,]<-rbvevd(1, dep =.5, asy=c(sin(pi*time[i]),time[i]), model="alog",mar1 = c(1, 1, 1), mar2 = c(1, 1, 1)) } XY <- cbind(time, aux) fit <- cPTdensity(XY, prior = prior, mcmc = mcmc, state = state, status = TRUE) plot(fit) ## End(Not run)
## Not run: ## Example from Palacios and de Carvalho (2020, submitted) library(evd) ## Initial state state <- NULL ## MCMC parameters nburn <- 2000 nsave <- 1000 nskip <- 0 ndisplay <- 500 mcmc <- list(nburn=nburn,nsave=nsave,nskip=nskip,ndisplay=ndisplay, tune1=1.1,tune2=1.1,tune3=1.1) ## Prior information prior<-list(a0=1,b0=1,M=8,m0=.01,S0=.01,tau1=.01,tau2=.01); T <- 5000 time <- seq(1/T, 1, by = 1/T) set.seed(12333) aux <- matrix(0, T, 2) for (i in 1:T) { aux[i,]<-rbvevd(1, dep =.5, asy=c(sin(pi*time[i]),time[i]), model="alog",mar1 = c(1, 1, 1), mar2 = c(1, 1, 1)) } XY <- cbind(time, aux) fit <- cPTdensity(XY, prior = prior, mcmc = mcmc, state = state, status = TRUE) plot(fit) ## End(Not run)
This function performs k-geometric means for time-varying value-at-risk.
kgvar(y, centers, iter.max = 10, conf.level = 0.95)
kgvar(y, centers, iter.max = 10, conf.level = 0.95)
y |
data frame from which the estimate is to be computed; first column corresponds to time and the second to the remainder of interest. |
centers |
the number of clusters or a set of initial
(distinct) cluster centres. If a number, a random set of (distinct)
rows in |
iter.max |
the maximum number of iterations allowed. The default is 10. |
conf.level |
the confidence level. The default is 0.95. |
The intermediate sequence is chosen
proportional to
.
kgvar returns an object of class "kgvar"
which has a
fitted method. It is a list with at least the following components:
var.new |
cluster center value-at-risk function. |
clusters |
cluster allocation. |
Y |
raw data. |
n.clust |
number of clusters. |
scale.param |
the scale parameters in the Pareto-like tail specification. |
conf.level |
the confidence level. |
hill |
hill estimator of extreme value index. |
The plot
method depicts the k-geometric means algorithm for
time-varying value-at-risk. If c.c
is TRUE
, the method displays the
cluster means.
Miguel de Carvalho, Rodrigo Rubio.
Rubio, R., de Carvalho, M. and Huser, R. (2018) Similarity-Based Clustering of Extreme Losses from the London Stock Exchange. Submitted.
## Not run: ## Example (Overlapping version of Fig. 8 in Supplementary Materials) data(lse) attach(lse) y <- -apply(log(lse[, -1]), 2, diff) fit <- kgvar(y, centers = 3) plot(fit, c.c = TRUE, ylim = c(0, 0.1)) ## End(Not run)
## Not run: ## Example (Overlapping version of Fig. 8 in Supplementary Materials) data(lse) attach(lse) y <- -apply(log(lse[, -1]), 2, diff) fit <- kgvar(y, centers = 3) plot(fit, c.c = TRUE, ylim = c(0, 0.1)) ## End(Not run)
This function performs k-means clustering for heteroscedastic extremes.
khetmeans(y, centers, iter.max = 10, alpha = 0.5)
khetmeans(y, centers, iter.max = 10, alpha = 0.5)
y |
data frame from which the estimate is to be computed; first column corresponds to time and the second to the remainder of interest. |
centers |
the number of clusters or a set of initial (distinct)
cluster centres. If a number, a random set of (distinct) rows in
|
iter.max |
the maximum number of iterations allowed. The default is 10. |
alpha |
the tuning parameter. The default is 0.5. |
The intermediate sequence is chosen
proportional to
.
khetmeans returns an object of class "khetmeans
" which has a
fitted method. It is a list with at least the following components:
mus.new |
cluster center scedasis density. |
mugamma.new |
cluster center extreme value index. |
clusters |
cluster allocation. |
Y |
raw data. |
n.clust |
number of clusters. |
The plot
method depicts the k-means clustering for
heteroscedastic extremes. If c.c
is TRUE
, the method
displays the cluster means.
Miguel de Carvalho, Rodrigo Rubio.
Rubio, R., de Carvalho, M. and Huser, R. (2018) Similarity-Based Clustering of Extreme Losses from the London Stock Exchange. Submitted.
## Not run: ## Example 1 (Scenario B, T = 5000) ## This example requires package evd require(evd) set.seed(12) T <- 5000 n <- 30 b <- 0.1 gamma1 <- 0.7 gamma2 <- 1 grid <- seq(0, 1, length = 100) c2 <- function(s) dbeta(s, 2, 5) c3 <- function(s) dbeta(s, 5, 2) X <- matrix(0, ncol = T, nrow = n) for(i in 1:5) for(j in 1:T) X[i, j] <- rgev(1, c2(j / T), c2(j / T), gamma1) for(i in 6:15) for(j in 1:T) X[i, j] <- rgev(1, c2(j / T), c2(j / T), gamma2) for(i in 16:20) for(j in 1:T) X[i, j] <- rgev(1, c3(j / T), c3(j / T), gamma1) for(i in 21:30) for(j in 1:T) X[i, j] <- rgev(1, c3(j / T), c3(j / T), gamma2) Y <- t(X) fit <- khetmeans(Y, centers = 4) plot(fit, c.c = TRUE) lines(grid, c2(grid), type = 'l', lwd = 8, col = 'black') lines(grid, c3(grid), type = 'l', lwd = 8, col = 'black') ## End(Not run) ## Not run: ## Example 2 (Overlapping version of Fig. 5 in Supplementary Materials) data(lse) attach(lse) y <- -apply(log(lse[, -1]), 2, diff) fit <- khetmeans(y, centers = 3) plot(fit, c.c = TRUE, ylim = c(0, 3)) ## End(Not run)
## Not run: ## Example 1 (Scenario B, T = 5000) ## This example requires package evd require(evd) set.seed(12) T <- 5000 n <- 30 b <- 0.1 gamma1 <- 0.7 gamma2 <- 1 grid <- seq(0, 1, length = 100) c2 <- function(s) dbeta(s, 2, 5) c3 <- function(s) dbeta(s, 5, 2) X <- matrix(0, ncol = T, nrow = n) for(i in 1:5) for(j in 1:T) X[i, j] <- rgev(1, c2(j / T), c2(j / T), gamma1) for(i in 6:15) for(j in 1:T) X[i, j] <- rgev(1, c2(j / T), c2(j / T), gamma2) for(i in 16:20) for(j in 1:T) X[i, j] <- rgev(1, c3(j / T), c3(j / T), gamma1) for(i in 21:30) for(j in 1:T) X[i, j] <- rgev(1, c3(j / T), c3(j / T), gamma2) Y <- t(X) fit <- khetmeans(Y, centers = 4) plot(fit, c.c = TRUE) lines(grid, c2(grid), type = 'l', lwd = 8, col = 'black') lines(grid, c3(grid), type = 'l', lwd = 8, col = 'black') ## End(Not run) ## Not run: ## Example 2 (Overlapping version of Fig. 5 in Supplementary Materials) data(lse) attach(lse) y <- -apply(log(lse[, -1]), 2, diff) fit <- khetmeans(y, centers = 3) plot(fit, c.c = TRUE, ylim = c(0, 3)) ## End(Not run)
Prices at close from 26 selected stocks from the London stock exchange from 1989 till 2016.
lse
lse
The lse
data frame has 6894 rows and 27 columns.
Rubio, R., de Carvalho, M., and Huser (2018) Similarity-based clustering of extreme losses from the London stock exchange.
This function depicts a scatterplot of bivariate data transformed to unit Fréchet scale.
plotFrechet(Y, tau = 0.95, raw = TRUE, ...)
plotFrechet(Y, tau = 0.95, raw = TRUE, ...)
Y |
list with data from which the estimates are to be computed. |
tau |
value used to threshold the data |
raw |
logical; if |
... |
other arguments to be passed to |
The solid line corresponds to the boundary threshold in the log-log scale, with both axes being logarithmic.
Miguel de Carvalho
## de Carvalho et al (2013, Fig. 5) data(beatenberg) plotFrechet(beatenberg, xlab = "Forest Cover", ylab = "Open Field", raw = FALSE)
## de Carvalho et al (2013, Fig. 5) data(beatenberg) plotFrechet(beatenberg, xlab = "Forest Cover", ylab = "Open Field", raw = FALSE)
Daily Standard and Poor’s index at close from 1988 till 2007.
sp500
sp500
The sp500
data frame has 5043 rows and 2 columns.
de Carvalho, M. (2016) Statistics of extremes: Challenges and opportunities. In: Handbook of EVT and its Applications to Finance and Insurance. Eds F. Longin. Hoboken: Wiley.
Einmahl, J. H., Haan, L., and Zhou, C. (2016) Statistics of heteroscedastic extremes. Journal of the Royal Statistical Society: Ser. B, 78(1), 31–51.