## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>", fig.width = 6, fig.height = 3.4)
library(bgev)
set.seed(1)

## ----singularity--------------------------------------------------------------
near_mu <- 10^-(1:4)
rbind(
  `delta<0` = sapply(near_mu, function(e) dbgev(2 + e, mu = 2, sigma = 1, xi = -0.3, delta = -0.3)),
  `delta>0` = sapply(near_mu, function(e) dbgev(2 + e, mu = 2, sigma = 1, xi = -0.3, delta =  0.5))
)

## ----mu-closed-form-----------------------------------------------------------
x <- rbgev(2e5, mu = 5, sigma = 3, xi = -0.4, delta = 0.3)
c(closed_form = unname(quantile(x, exp(-1))), truth = 5)

## ----grouped------------------------------------------------------------------
set.seed(1)
x_cont  <- rbgev(1000, mu = 0, sigma = 8, xi = 0.2, delta = 0.3)
x_obs   <- round(x_cont)                                  # rounded to nearest unit
fit_grp <- bgev_mle(x_obs, likelihood = "grouped_likelihood", h = 1)

rbind(truth    = c(mu = 0, sigma = 8, xi = 0.2, delta = 0.3),
      estimate = round(fit_grp$par, 2))

## ----fit-example--------------------------------------------------------------
x   <- rbgev(300, mu = 0, sigma = 1, xi = 0.2, delta = 1)
fit <- bgev_mle(x)
round(fit$par, 3)
round(fit$se, 3)
c(loglik = fit$loglik, convergence = fit$convergence,
  admissible = fit$admissible, agree = fit$agree)

## ----mc-coverage, echo = FALSE------------------------------------------------
cov <- data.frame(
  xi  = c(-0.4, -0.2, 0.0, 0.2, 0.4),
  n100 = c(0.84, 0.98, 0.92, 0.91, 0.91),
  n250 = c(0.39, 0.97, 0.94, 0.94, 0.93),
  n500 = c(0.08, 0.97, 0.95, 0.93, 0.94)
)
knitr::kable(cov, col.names = c("xi", "n=100", "n=250", "n=500"),
             caption = "Wald 95% coverage of xi (delta = 1). Target 0.95.")

## ----mc-admissible, echo = FALSE----------------------------------------------
adm <- data.frame(
  xi = c(-0.4, -0.2, 0.0, 0.2, 0.4),
  d025 = c(0.46, 0.98, 1.00, 1.00, 1.00),
  d1   = c(0.12, 0.92, 1.00, 1.00, 1.00),
  d3   = c(0.10, 0.89, 1.00, 1.00, 1.00)
)
knitr::kable(adm, col.names = c("xi", "delta=0.25", "delta=1", "delta=3"),
             caption = "Admissible rate (positive-definite-Hessian gate), n = 500.")

