## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(echo = TRUE)
library(TKApprox)

## -----------------------------------------------------------------------------
# Define exponential distribution
pdf_exp <- function(x, param) dexp(x, rate = param)
cdf_exp <- function(x, param) pexp(x, rate = param)

# Gamma prior
prior_spec <- list(rate = list(family = "gamma", hyperparameters = list(shape = 2, rate = 1)))

# Generate data
set.seed(123)
data <- rexp(20, rate = 1.5)

# Construct log-posterior
log_post <- tk_posterior(data, "complete", pdf_exp, cdf_exp, prior_spec)

# Find posterior mode
mode_result <- tk_mode(log_post, initial_values = c(rate = 1))

# Compute Hessian and covariance
hessian_result <- tk_hessian(log_post, mode_result$mode)

# Compute posterior mean using TK approximation
g_fn <- function(param) param[1]  # g(θ) = θ for posterior mean
tk_result <- tk_expectation(log_post, g_fn, mode_result, hessian_result)

# Compare with direct fit
fit <- tk_fit(data, "complete", pdf_exp, cdf_exp, prior_spec,
              initial_values = c(rate = 1), loss_function = "sel")

data.frame(
  TK_approximation = tk_result$expectation,
  Direct_fit = coef(fit),
  Posterior_mode = mode_result$mode
)

