## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4
)

## ----message=FALSE, warning=FALSE---------------------------------------------
library(RegimeChange)

# Generate data with multiple changepoints
set.seed(42)
data <- c(
  rnorm(100, 0, 1),   # Regime 1
  rnorm(100, 3, 1),   # Regime 2
  rnorm(100, 1, 2),   # Regime 3
  rnorm(100, 4, 0.5)  # Regime 4
)
true_cps <- c(100, 200, 300)

# Detect with PELT
result_pelt <- detect_regimes(data, method = "pelt", penalty = "BIC")
print(result_pelt)

## -----------------------------------------------------------------------------
# Different penalties
result_bic <- detect_regimes(data, method = "pelt", penalty = "BIC")
result_aic <- detect_regimes(data, method = "pelt", penalty = "AIC")
result_mbic <- detect_regimes(data, method = "pelt", penalty = "MBIC")

cat("BIC:", result_bic$n_changepoints, "changepoints\n")
cat("AIC:", result_aic$n_changepoints, "changepoints\n")
cat("MBIC:", result_mbic$n_changepoints, "changepoints\n")

## -----------------------------------------------------------------------------
result <- detect_regimes(data, method = "pelt", min_segment = 30)

## -----------------------------------------------------------------------------
result_binseg <- detect_regimes(data, method = "binseg", n_changepoints = 5)
print(result_binseg)

## -----------------------------------------------------------------------------
result_wbs <- detect_regimes(data, method = "wbs", M = 100)
print(result_wbs)

## -----------------------------------------------------------------------------
result_mean <- detect_regimes(data, type = "mean")

## -----------------------------------------------------------------------------
# Data with variance change
set.seed(123)
var_data <- c(rnorm(100, 0, 1), rnorm(100, 0, 3))

result_var <- detect_regimes(var_data, type = "variance")
print(result_var)

## -----------------------------------------------------------------------------
result_both <- detect_regimes(data, type = "both")

## -----------------------------------------------------------------------------
# Basic plot with changepoints
plot(result_pelt, type = "data")

## -----------------------------------------------------------------------------
# Segment-colored plot
plot(result_pelt, type = "segments")

## -----------------------------------------------------------------------------
# Get segment details
for (i in seq_along(result_pelt$segments)) {
  seg <- result_pelt$segments[[i]]
  cat(sprintf("Segment %d: [%d, %d] - Mean: %.2f, SD: %.2f\n", 
              i, seg$start, seg$end, seg$params$mean, seg$params$sd))
}

## -----------------------------------------------------------------------------
result_ci <- detect_regimes(data, method = "pelt", 
                            uncertainty = TRUE, bootstrap_reps = 100)

if (length(result_ci$confidence_intervals) > 0) {
  print(result_ci$confidence_intervals[[1]])
}

## -----------------------------------------------------------------------------
eval_result <- evaluate(result_pelt, true_changepoints = true_cps)
print(eval_result)

## -----------------------------------------------------------------------------
comparison <- compare_methods(
  data = data,
  methods = c("pelt", "binseg", "wbs"),
  true_changepoints = true_cps
)
print(comparison)

## ----eval=FALSE---------------------------------------------------------------
# detect_regimes(data, method = "wbs", M = 200)

## ----eval=FALSE---------------------------------------------------------------
# detect_regimes(data, method = "pelt", penalty = "AIC")

## ----eval=FALSE---------------------------------------------------------------
# detect_regimes(data, method = "ensemble",
#                methods = c("pelt", "wbs", "binseg"))

