
Density, cumulative distribution function, quantile function and
random number generation for the Weibull bulk and GPD tail
interval transition mixture model. The
parameters are the Weibull shape wshape
and scale wscale
,
threshold u
, interval half-width epsilon
, GPD scale
sigmau
and shape xi
.
ditmweibullgpd(x, wshape = 1, wscale = 1, epsilon = sqrt(wscale^2 *
gamma(1 + 2/wshape) - (wscale * gamma(1 + 1/wshape))^2),
u = qweibull(0.9, wshape, wscale), sigmau = sqrt(wscale^2 * gamma(1 +
2/wshape) - (wscale * gamma(1 + 1/wshape))^2), xi = 0, log = FALSE)pitmweibullgpd(q, wshape = 1, wscale = 1, epsilon = sqrt(wscale^2 *
gamma(1 + 2/wshape) - (wscale * gamma(1 + 1/wshape))^2),
u = qweibull(0.9, wshape, wscale), sigmau = sqrt(wscale^2 * gamma(1 +
2/wshape) - (wscale * gamma(1 + 1/wshape))^2), xi = 0,
lower.tail = TRUE)
qitmweibullgpd(p, wshape = 1, wscale = 1, epsilon = sqrt(wscale^2 *
gamma(1 + 2/wshape) - (wscale * gamma(1 + 1/wshape))^2),
u = qweibull(0.9, wshape, wscale), sigmau = sqrt(wscale^2 * gamma(1 +
2/wshape) - (wscale * gamma(1 + 1/wshape))^2), xi = 0,
lower.tail = TRUE)
ritmweibullgpd(n = 1, wshape = 1, wscale = 1,
epsilon = sqrt(wscale^2 * gamma(1 + 2/wshape) - (wscale * gamma(1 +
1/wshape))^2), u = qweibull(0.9, wshape, wscale),
sigmau = sqrt(wscale^2 * gamma(1 + 2/wshape) - (wscale * gamma(1 +
1/wshape))^2), xi = 0)
quantiles
Weibull shape (positive)
Weibull scale (positive)
interval half-width
threshold
scale parameter (positive)
shape parameter
logical, if TRUE then log density
quantiles
logical, if FALSE then upper tail probabilities
cumulative probabilities
sample size (positive integer)
ditmweibullgpd
gives the density,
pitmweibullgpd
gives the cumulative distribution function,
qitmweibullgpd
gives the quantile function and
ritmweibullgpd
gives a random sample.
The interval transition mixture model combines a Weibull for
the bulk model with GPD for the tail model, with a smooth transition
over the interval
The cumulative distribution function is defined by
pweibull(x, wshape, wscale)
and
pgpd(x, u, sigmau, xi)
) respectively. The truncated
Weibull is not renormalised to be proper, so pweibull(u, wshape, wscale)
to the cdf for all 1/(1+pweibull(u, wshape, wscale))
where 1 is from GPD component and
latter is contribution from Weibull component.
The mixing functions qmix
for a given
A minor adaptation of the mixing function has been applied. For the mixture model to
function correctly qmixxprime
, which also it makes clearer that
Weibull does not contribute to the tail above the interval and vice-versa.
The quantile function within the transition interval is not available in closed form, so has to be solved numerically. Outside of the interval, the quantile are obtained from the Weibull and GPD components directly.
http://en.wikipedia.org/wiki/Weibull_distribution
http://en.wikipedia.org/wiki/Generalized_Pareto_distribution
Scarrott, C.J. and MacDonald, A. (2012). A review of extreme value threshold estimation and uncertainty quantification. REVSTAT - Statistical Journal 10(1), 33-59. Available from http://www.ine.pt/revstat/pdf/rs120102.pdf
Holden, L. and Haug, O. (2013). A mixture model for unsupervised tail estimation. arxiv:0902.4137
weibullgpd
, gpd
and dweibull
Other itmweibullgpd: fitmweibullgpd
,
fweibullgpdcon
, fweibullgpd
,
weibullgpdcon
, weibullgpd
Other weibullgpd: fitmweibullgpd
,
fweibullgpdcon
, fweibullgpd
,
weibullgpdcon
, weibullgpd
Other weibullgpdcon: fweibullgpdcon
,
fweibullgpd
, weibullgpdcon
,
weibullgpd
Other fitmweibullgpd: fitmweibullgpd
# NOT RUN {
set.seed(1)
par(mfrow = c(2, 2))
xx = seq(0.001, 5, 0.01)
u = 1.5
epsilon = 0.4
kappa = 1/(1 + pweibull(u, 2, 1))
f = ditmweibullgpd(xx, wshape = 2, wscale = 1, epsilon, u, sigmau = 1, xi = 0.5)
plot(xx, f, ylim = c(0, 1), xlim = c(0, 5), type = 'l', lwd = 2, xlab = "x", ylab = "density")
lines(xx, kappa * dgpd(xx, u, sigmau = 1, xi = 0.5), col = "red", lty = 2, lwd = 2)
lines(xx, kappa * dweibull(xx, 2, 1), col = "blue", lty = 2, lwd = 2)
abline(v = u + epsilon * seq(-1, 1), lty = c(2, 1, 2))
legend('topright', c('Weibull-GPD ITM', 'kappa*Weibull', 'kappa*GPD'),
col = c("black", "blue", "red"), lty = c(1, 2, 2), lwd = 2)
# cdf contributions
F = pitmweibullgpd(xx, wshape = 2, wscale = 1, epsilon, u, sigmau = 1, xi = 0.5)
plot(xx, F, ylim = c(0, 1), xlim = c(0, 5), type = 'l', lwd = 2, xlab = "x", ylab = "cdf")
lines(xx[xx > u], kappa * (pweibull(u, 2, 1) + pgpd(xx[xx > u], u, sigmau = 1, xi = 0.5)),
col = "red", lty = 2, lwd = 2)
lines(xx[xx <= u], kappa * pweibull(xx[xx <= u], 2, 1), col = "blue", lty = 2, lwd = 2)
abline(v = u + epsilon * seq(-1, 1), lty = c(2, 1, 2))
legend('topright', c('Weibull-GPD ITM', 'kappa*Weibull', 'kappa*GPD'),
col = c("black", "blue", "red"), lty = c(1, 2, 2), lwd = 2)
# simulated data density histogram and overlay true density
x = ritmweibullgpd(10000, wshape = 2, wscale = 1, epsilon, u, sigmau = 1, xi = 0.5)
hist(x, freq = FALSE, breaks = seq(0, 1000, 0.1), xlim = c(0, 5))
lines(xx, ditmweibullgpd(xx, wshape = 2, wscale = 1, epsilon, u, sigmau = 1, xi = 0.5),
lwd = 2, col = 'black')
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab