Last chance! 50% off unlimited learning
Sale ends in
Maximum likelihood estimation for fitting the extreme value mixture model with normal for bulk distribution between thresholds and conditional GPDs beyond thresholds. With options for profile likelihood estimation for both thresholds and fixed threshold approach.
fgng(x, phiul = TRUE, phiur = TRUE, ulseq = NULL, urseq = NULL,
fixedu = FALSE, pvector = NULL, std.err = TRUE, method = "BFGS",
control = list(maxit = 10000), finitelik = TRUE, ...)lgng(x, nmean = 0, nsd = 1, ul = 0, sigmaul = 1, xil = 0,
phiul = TRUE, ur = 0, sigmaur = 1, xir = 0, phiur = TRUE,
log = TRUE)
nlgng(pvector, x, phiul = TRUE, phiur = TRUE, finitelik = FALSE)
proflugng(ulr, pvector, x, phiul = TRUE, phiur = TRUE,
method = "BFGS", control = list(maxit = 10000), finitelik = TRUE,
...)
nlugng(pvector, ul, ur, x, phiul = TRUE, phiur = TRUE,
finitelik = FALSE)
vector of sample data
probability of being below lower threshold fgng
probability of being above upper threshold fgng
vector of lower thresholds (or scalar) to be considered in profile likelihood or
NULL for no profile likelihood
vector of upper thresholds (or scalar) to be considered in profile likelihood or
NULL for no profile likelihood
logical, should threshold be fixed (at either scalar value in ulseq/urseq,
or estimated from maximum of profile likelihood evaluated at
sequence of thresholds in ulseq/urseq)
vector of initial values of parameters or NULL for default
values, see below
logical, should standard errors be calculated
optimisation method (see optim)
optimisation control list (see optim)
logical, should log-likelihood return finite value for invalid parameters
optional inputs passed to optim
scalar normal mean
scalar normal standard deviation (positive)
scalar lower tail threshold
scalar lower tail GPD scale parameter (positive)
scalar lower tail GPD shape parameter
scalar upper tail threshold
scalar upper tail GPD scale parameter (positive)
scalar upper tail GPD shape parameter
logical, if TRUE then log-likelihood rather than likelihood is output
vector of length 2 giving lower and upper tail thresholds or
NULL for default values
Log-likelihood is given by lgng and it's
wrappers for negative log-likelihood from nlgng
and nlugng. Profile likelihood for both
thresholds given by proflugng. Fitting function
fgng returns a simple list with the
following elements
call: |
optim call |
x: |
data vector x |
init: |
pvector |
fixedu: |
fixed thresholds, logical |
ulseq: |
lower threshold vector for profile likelihood or scalar for fixed threshold |
urseq: |
upper threshold vector for profile likelihood or scalar for fixed threshold |
nllhuseq: |
profile negative log-likelihood at each threshold pair in (ulseq, urseq) |
optim: |
complete optim output |
mle: |
vector of MLE of parameters |
cov: |
variance-covariance matrix of MLE of parameters |
se: |
vector of standard errors of MLE of parameters |
rate: |
phiu to be consistent with evd |
nllh: |
minimum negative log-likelihood |
n: |
total sample size |
nmean: |
MLE of normal mean |
nsd: |
MLE of normal standard deviation |
ul: |
lower threshold (fixed or MLE) |
sigmaul: |
MLE of lower tail GPD scale |
xil: |
MLE of lower tail GPD shape |
phiul: |
MLE of lower tail fraction (bulk model or parameterised approach) |
se.phiul: |
standard error of MLE of lower tail fraction |
ur: |
upper threshold (fixed or MLE) |
sigmaur: |
MLE of upper tail GPD scale |
xir: |
MLE of upper tail GPD shape |
phiur: |
MLE of upper tail fraction (bulk model or parameterised approach) |
se.phiur: |
standard error of MLE of upper tail fraction |
See Acknowledgments in
fnormgpd, type help fnormgpd. Based on code
by Xin Zhao produced for MATLAB.
The extreme value mixture model with normal bulk and GPD for both tails is fitted to the entire dataset using maximum likelihood estimation. The estimated parameters, variance-covariance matrix and their standard errors are automatically output.
See help for fnormgpd for details, type help fnormgpd.
Only the different features are outlined below for brevity.
The full parameter vector is
(nmean, nsd, ul, sigmaul, xil, ur, sigmaur, xir)
if thresholds are also estimated and
(nmean, nsd, sigmaul, xil, sigmaur, xir)
for profile likelihood or fixed threshold approach.
The tail fractions phiul and phiur are treated separately to the other parameters,
to allow for all their representations. In the fitting functions
fgng and
proflugng they are logical:
default values phiul=TRUE and phiur=TRUE - tail fractions specified by
normal distribution pnorm(ul, nmean, nsd) and survivior functions
1-pnorm(ur, nmean, nsd) respectively and standard error is output as NA.
phiul=FALSE and phiur=FALSE - treated as extra parameters estimated using
the MLE which is the sample proportion beyond the thresholds and
standard error is output.
In the likelihood functions lgng,
nlgng and nlugng
it can be logical or numeric:
logical - same as for fitting functions with default values phiul=TRUE and phiur=TRUE.
numeric - any value over range phiul+phiur<1 as bulk must contribute.
If the profile likelihood approach is used, then a grid search over all combinations of both thresholds is carried out. The combinations which lead to less than 5 in any datapoints beyond the thresholds are not considered.
http://www.math.canterbury.ac.nz/~c.scarrott/evmix
http://en.wikipedia.org/wiki/Normal_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
Hu, Y. (2013). Extreme value mixture modelling: An R package and simulation study. MSc (Hons) thesis, University of Canterbury, New Zealand. http://ir.canterbury.ac.nz/simple-search?query=extreme&submit=Go
Zhao, X., Scarrott, C.J. Reale, M. and Oxley, L. (2010). Extreme value modelling for forecasting the market crisis. Applied Financial Econometrics 20(1), 63-72.
Mendes, B. and H. F. Lopes (2004). Data driven estimates for mixtures. Computational Statistics and Data Analysis 47(3), 583-598.
Other normgpd: fhpd,
fitmnormgpd, flognormgpd,
fnormgpdcon, fnormgpd,
gngcon, gng,
hpdcon, hpd,
itmnormgpd, lognormgpdcon,
lognormgpd, normgpdcon,
normgpd
Other gng: fgngcon, fitmgng,
fnormgpd, gngcon,
gng, itmgng,
normgpd
Other gngcon: fgngcon,
fnormgpdcon, gngcon,
gng, normgpdcon
Other fgng: gng
# NOT RUN {
set.seed(1)
par(mfrow = c(2, 1))
x = rnorm(1000)
xx = seq(-4, 4, 0.01)
y = dnorm(xx)
# Bulk model based tail fraction
fit = fgng(x)
hist(x, breaks = 100, freq = FALSE, xlim = c(-4, 4))
lines(xx, y)
with(fit, lines(xx, dgng(xx, nmean, nsd, ul, sigmaul, xil, phiul,
ur, sigmaur, xir, phiur), col="red"))
abline(v = c(fit$ul, fit$ur), col = "red")
# Parameterised tail fraction
fit2 = fgng(x, phiul = FALSE, phiur = FALSE)
with(fit2, lines(xx, dgng(xx, nmean, nsd, ul, sigmaul, xil, phiul,
ur, sigmaur, xir, phiur), col="blue"))
abline(v = c(fit2$ul, fit2$ur), col = "blue")
legend("topright", c("True Density","Bulk Tail Fraction","Parameterised Tail Fraction"),
col=c("black", "red", "blue"), lty = 1)
# Profile likelihood for initial value of threshold and fixed threshold approach
fitu = fgng(x, ulseq = seq(-2, -0.2, length = 10),
urseq = seq(0.2, 2, length = 10))
fitfix = fgng(x, ulseq = seq(-2, -0.2, length = 10),
urseq = seq(0.2, 2, length = 10), fixedu = TRUE)
hist(x, breaks = 100, freq = FALSE, xlim = c(-4, 4))
lines(xx, y)
with(fit, lines(xx, dgng(xx, nmean, nsd, ul, sigmaul, xil, phiul,
ur, sigmaur, xir, phiur), col="red"))
abline(v = c(fit$ul, fit$ur), col = "red")
with(fitu, lines(xx, dgng(xx, nmean, nsd, ul, sigmaul, xil, phiul,
ur, sigmaur, xir, phiur), col="purple"))
abline(v = c(fitu$ul, fitu$ur), col = "purple")
with(fitfix, lines(xx, dgng(xx, nmean, nsd, ul, sigmaul, xil, phiul,
ur, sigmaur, xir, phiur), col="darkgreen"))
abline(v = c(fitfix$ul, fitfix$ur), col = "darkgreen")
legend("topright", c("True Density","Default initial value (90% quantile)",
"Prof. lik. for initial value", "Prof. lik. for fixed threshold"),
col=c("black", "red", "purple", "darkgreen"), lty = 1)
# }
# NOT RUN {
# }
Run the code above in your browser using DataLab