# 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)