Spline ML example

library(circularEV)
require(plotly)

Reading Data

data(HsSP)
data(drc)
timeRange <- 54.5

idx <- order(drc)
drc <- drc[idx]
Data <- HsSP[idx]
set.seed(1234)
Data <- Data + runif(length(Data), -0.0001, 0.0001)
PlotData(Data = Data, drc = drc, thr = NULL, pointSize = 1, cex.axis = 15, cex.lab = 2, 
    thrWidth = 2)

PolarPlotData(Data = Data, drc = drc, thr = NULL, pointSize = 4, fontSize = 14, 
    thrWidth = 4, ylim = c(0, max(Data)))

Threshold selection

Grid values at which the estimation is performed:

thetaVec <- 1:360
thrResultML <- ThrSelection(Data = Data, drc = drc, h = 60, b = 0.35, thetaGrid = thetaVec, 
    EVIestimator = "ML", useKernel = T, concent = 10, bw = 30, numCores = 2)$thr
PlotData(Data = Data, drc = drc, thr = thrResultML, pointSize = 1, cex.axis = 15, 
    cex.lab = 2, thrWidth = 2)


PolarPlotData(Data = Data, drc = drc, thr = thrResultML, pointSize = 4, fontSize = 12, 
    thrWidth = 4, ylim = c(0, max(Data)))

Estimation of spline ML model

The code below performs optimisation for a unique pair of lambda and kappa.

lambda <- 100
kappa <- 40

thrPerObs <- thrResultML[drc]
excess <- Data - thrPerObs
drcExcess <- drc[excess > 0]
excess <- excess[excess > 0]

splineFit <- SplineML(excesses = excess, drc = drcExcess, nBoot = 30, numIntKnots = 16, 
    lambda = lambda, kappa = kappa, numCores = 2)
xiBoot <- splineFit$xi
sigBoot <- splineFit$sig

PlotParamEstim(bootEstimates = xiBoot, thetaGrid = 0:360, ylab = bquote(hat(xi)), 
    alpha = 0.05, ylim = NULL, cex.axis = 15, cex.lab = 2, thrWidth = 2)


PlotParamEstim(bootEstimates = sigBoot, thetaGrid = 0:360, ylab = bquote(hat(sigma)), 
    alpha = 0.05, ylim = NULL, cex.axis = 15, cex.lab = 2, thrWidth = 2)

High Quantiles

h <- 60  # needed for calculating local probability of exceedances
RLBoot <- CalcRLsplineML(Data = Data, drc = drc, xiBoot = xiBoot, sigBoot = sigBoot, 
    h = h, TTs = c(100, 10000), thetaGrid = thetaVec, timeRange = timeRange, 
    thr = thrResultML)
# 100-year level

PlotRL(RLBootList = RLBoot, thetaGrid = thetaVec, Data = Data, drc = drc, TTs = c(100, 
    10000), whichPlot = 1, alpha = 0.05, ylim = NULL, pointSize = 1, cex.axis = 15, 
    cex.lab = 2, thrWidth = 2)


PolarPlotRL(RLBootList = RLBoot, thetaGrid = thetaVec, Data = Data, drc = drc, 
    TTs = c(100, 10000), whichPlot = 1, alpha = 0.05, ylim = c(0, 25), pointSize = 4, 
    fontSize = 12, lineWidth = 2)
# 10000-year level
PlotRL(RLBootList = RLBoot, thetaGrid = thetaVec, Data = Data, drc = drc, TTs = c(100, 
    10000), whichPlot = 2, alpha = 0.05, ylim = NULL, pointSize = 1, cex.axis = 15, 
    cex.lab = 2, thrWidth = 2)


PolarPlotRL(RLBootList = RLBoot, thetaGrid = thetaVec, Data = Data, drc = drc, 
    TTs = c(100, 10000), whichPlot = 2, alpha = 0.05, ylim = c(0, 25), pointSize = 4, 
    fontSize = 12, lineWidth = 2)