Spline ML example

library(circularEV)
plotly_installed <- requireNamespace("plotly", quietly = TRUE)
if (!plotly_installed) {
    message("Skipping plotly-based figures because the 'plotly' package is not installed.")
}

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)

if (plotly_installed) {
    PolarPlotData(Data = Data, drc = drc, thr = NULL, pointSize = 4, fontSize = 14,
        thrWidth = 4, ylim = c(0, max(Data)))
} else {
    message("plotly not installed: skipping PolarPlotData output")
}

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 = TRUE, concent = 10, bw = 30, numCores = 2)$thr
PlotData(Data = Data, drc = drc, thr = thrResultML, pointSize = 1, cex.axis = 15,
    cex.lab = 2, thrWidth = 2)

if (plotly_installed) {
    PolarPlotData(Data = Data, drc = drc, thr = thrResultML, pointSize = 4,
        fontSize = 12, thrWidth = 4, ylim = c(0, max(Data)))
} else {
    message("plotly not installed: skipping PolarPlotData output")
}

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)

if (plotly_installed) {
    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)
} else {
    message("plotly not installed: skipping PolarPlotRL output")
}
# 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)

if (plotly_installed) {
    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)
} else {
    message("plotly not installed: skipping PolarPlotRL output")
}