## ----setup, include=FALSE-----------------------------------------------------
knitr::opts_chunk$set(
  echo = TRUE, message = FALSE, warning = FALSE, fig.width = 16,
  fig.height = 8,
  out.width = "100%",
  dpi = 150
)

## ----srr-tags, eval = FALSE, echo = FALSE-------------------------------------
# #' srr tags for the kardl package
# #'
# #' This package follows structured statistical reporting rules using the
# #' \code{srrstats} framework. The standards governing implementation and
# #' documentation are summarized below.
# #'
# #' @srrstats {G1.0} The package documentation and accompanying materials cite
# #'           the ARDL bounds-testing and nonlinear ARDL literature on which the
# #'           implemented estimators, asymmetry decomposition, bounds tests, and
# #'           dynamic multipliers are based.
# #' @srrstats {G1.1} The package is described as an implementation and extension
# #'           of ARDL and NARDL workflows, supporting mixed symmetric and
# #'           asymmetric regressors, flexible lag selection, and dynamic
# #'           multiplier methods.
# #' @srrstats {G1.2} The README, NEWS file, and package website describe the
# #'           development status, recent changes, and future maintenance plans
# #'           of the package.
# #' @srrstats {G1.3} Key statistical concepts such as ARDL, NARDL, ECM, bounds
# #'           testing, short-run asymmetry, long-run asymmetry, and dynamic
# #'           multipliers are defined in function documentation and vignettes.
# #' @srrstats {G1.4} All user-facing functions and S3 methods are documented
# #'           using \code{roxygen2}, and the generated Rd files are maintained
# #'           as part of the package documentation workflow.
# #' @srrstats {G1.4a} Internal helper functions are documented where necessary
# #'           and are excluded from the public help index using \code{@noRd}
# #'           or marked as internal.

## ----install-cran, eval=FALSE-------------------------------------------------
# install.packages("kardl")
# library(kardl)

## ----install, eval=FALSE------------------------------------------------------
# # Install required packages
# install.packages(c(
#   "stats", "msm", "lmtest", "nlWaldTest", "car", "strucchange",
#   "utils", "ggplot2"
# ))
# # Install kardl from GitHub
# install.packages("devtools")
# devtools::install_github("karamelikli/kardl")

## ----load---------------------------------------------------------------------
library(kardl)

## ----data-prepare-------------------------------------------------------------
# Define the model formula
my_formula <- DriversKilled ~ PetrolPrice + drivers +
  asymmetric(PetrolPrice + drivers) + deterministic(law) + trend

## ----eval=FALSE---------------------------------------------------------------
# same_formula <- y ~ asymmetric(x1) +
#   sasymmetric(x2 + x3) +
#   lasymmetric(x4 + x5) +
#   deterministic(dummy1) + trend
# same_formula <- y ~ asymmetric(x1) +
#   sasymmetric(x2 + x3) +
#   lasymmetric(x4 + x5) +
#   deterministic(dummy1) + trend
# same_formula <- y ~ asym(x1) + sasym(x2 + x3) + lasym(x4 + x5) +
#   det(dummy1) + trend
# same_formula <- y ~ a(x1) + s(x2 + x3) + l(x4 + x5) + d(dummy1) + trend

## ----model-grid---------------------------------------------------------------
# Set model options
kardl_set(criterion = "BIC", different_asym_lag = TRUE, data = Seatbelts)
# Estimate model with grid mode
kardl_model <- kardl(
  data = Seatbelts, formula = my_formula,
  maxlag = 4, mode = "grid"
)
# View results
kardl_model

## ----model-grid-custom-summary------------------------------------------------
# Display model summary
summary(kardl_model)

## ----model-user-defined-------------------------------------------------------
kardl_model2 <- kardl(
  data = Seatbelts, my_formula,
  mode = c(2, 1, 1, 3, 0)
)
# View results
kardl_extract(kardl_model2, "opt_lag")

## ----model-user-defined-summary-----------------------------------------------
# Display model summary
summary(kardl_model2)

## ----model-all-vars-----------------------------------------------------------
kardl_set(data = Seatbelts)
kardl(formula = DriversKilled ~ . + deterministic(law), maxlag = 2)

## ----lag-criteria-------------------------------------------------------------
library(dplyr)
library(tidyr)
library(ggplot2)
# Convert lag_criteria to a data frame
lag_criteria <- as.data.frame(kardl_extract(kardl_model, "lag_criteria"))
lag_criteria <- lag_criteria |> mutate(across(c(AIC, BIC, HQ), as.numeric))

# Pivot to long format
lag_criteria_long <- lag_criteria |>
  select(-c(AICc, AdjR2)) |>
  pivot_longer(
    cols = c(AIC, BIC, HQ),
    names_to = "Criteria",
    values_to = "Value"
  )

# Find minimum values
min_values <- lag_criteria_long |>
  group_by(Criteria) |>
  slice_min(order_by = Value) |>
  ungroup()

# Plot
ggplot(
  lag_criteria_long,
  aes(x = lag, y = Value, color = Criteria, group = Criteria)
) +
  geom_line() +
  geom_point(
    data = min_values, aes(x = lag, y = Value),
    color = "red", size = 3, shape = 8
  ) +
  geom_text(
    data = min_values, aes(x = lag, y = Value, label = lag),
    vjust = 1.5, color = "black", size = 3.5
  ) +
  scale_x_discrete(
    breaks = lag_criteria$lag[seq(1, nrow(lag_criteria), by = 20)]
  ) +
  labs(
    title = "Lag Criteria Comparison",
    x = "Lag Configuration",
    y = "Criteria Value"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

## ----ecm-estimation-----------------------------------------------------------
ecm_model <- ecm(
  data = Seatbelts, formula = my_formula,
  maxlag = 4, mode = "grid_custom"
)
# View results
summary(ecm_model)

## ----long-run-----------------------------------------------------------------
# Long-run coefficients
my_long <- kardl_longrun(kardl_model)
my_long

## ----long-run-summary---------------------------------------------------------
# Summary of long-run coefficients
summary(my_long)

## ----asymmetry-test-----------------------------------------------------------
ast <- Seatbelts |>
  kardl(
    DriversKilled ~ PetrolPrice + drivers + asymmetric(PetrolPrice + drivers) +
      deterministic(law) + trend,
    mode = c(1, 2, 3, 0, 1),
    data = _
  ) |>
  symmetrytest()
ast

## ----asymmetry-test-summary---------------------------------------------------
# Summary of symmetry test
summary(ast)

## ----pssf---------------------------------------------------------------------
test_result <- kardl_model |> pssf(case = 3, signif_level = "0.05")
test_result

## ----pssf-summary-------------------------------------------------------------
summary(test_result)

## ----psst---------------------------------------------------------------------
test_result <- kardl_model |> psst(case = 3, signif_level = "0.05")
test_result

## ----psst-summary-------------------------------------------------------------
summary(test_result)

## ----narayan------------------------------------------------------------------
test_result <- kardl_model |> narayan(case = 3, signif_level = "0.05")
test_result

## ----narayan-summary----------------------------------------------------------
summary(test_result)

## ----dynamic-multipliers------------------------------------------------------
multipliers <- kardl_model |> mplier()
# View multipliers of the model
head(kardl_extract(multipliers, "multipliers"))
# View long-run multipliers
kardl_extract(multipliers, "omega")
# View short-run multipliers
head(kardl_extract(multipliers, "lambda"))

## ----plot-multipliers---------------------------------------------------------
plot(multipliers, variables = c("PetrolPrice", "drivers"))

## ----bootstrap-multipliers----------------------------------------------------
bootstrap_results <- kardl_model |>
  bootstrap(horizon = 12, replications = 10)
# View bootstrap summary
summary(bootstrap_results)

## ----plot-bootstrap-multipliers-----------------------------------------------
plot(bootstrap_results, variables = "drivers")

## ----asym-custom--------------------------------------------------------------
# Set custom prefixes and suffixes
kardl_reset()
kardl_set(asym_prefix = c("asyP_", "asyN_"), asym_suffix = c("_PP", "_NN"))
kardl_custom <- kardl(data = Seatbelts, my_formula)
kardl_custom

