model_fn: A character or name coercible into a fun_cpt function. See, for example, fit_meanshift_norm().
penalty_fn: A function that evaluates the changepoint set returned by model_fn. We provide AIC(), BIC(), MBIC(), MDL(), and BMDL().
model_fn_args: A list() of parameters passed to model_fn
...: arguments passed to GA::ga()
Returns
A tidyga object. This is just a GA::ga() object with an additional slot for data (the original time series) and model_fn_args (captures the model_fn and penalty_fn arguments).
Details
segment_ga() uses the genetic algorithm in GA::ga() to "evolve" a random set of candidate changepoint sets, using the penalized objective function specified by penalty_fn. By default, the normal meanshift model is fit (see fit_meanshift_norm()) and the BIC penalty is applied.
segment_ga_shi(): Shi's algorithm is the algorithm used in tools:::Rd_expr_doi("10.1175/JCLI-D-21-0489.1") . Note that in order to achieve the reported results you have to run the algorithm for a really long time. Pass the values maxiter = 50000 and run = 10000 to GA::ga() using the dots.
segment_ga_coen(): Coen's algorithm is the one used in tools:::Rd_expr_doi("10.1007/978-3-031-47372-2_20") . Note that the speed of the algorithm is highly sensitive to the size of the changepoint sets under consideration, with large changepoint sets being slow. Consider setting the population argument to GA::ga() to improve performance. Coen's algorithm uses the build_gabin_population() function for this purpose by default.
segment_ga_random(): Randomly select candidate changepoint sets. This is implemented as a genetic algorithm with only one generation (i.e., maxiter = 1). Note that this function uses log_gabin_population() by default.
Examples
res <- segment_ga(CET, maxiter =5)summary(res)str(res)plot(res)# Segment a time series using Shi's algorithmx <- segment(CET, method ="ga-shi", maxiter =5)str(x)# Segment a time series using Coen's algorithmy <- segment(CET, method ="ga-coen", maxiter =5)changepoints(y)# Segment a time series using Coen's algorithm and an arbitrary thresholdz <- segment(CET, method ="ga-coen", maxiter =5, model_fn_args = list(threshold =2))changepoints(z)## Not run:# This will take a really long time!x <- segment(CET, method ="ga-shi", maxiter =500, run =100)changepoints(x)# This will also take a really long time!y <- segment(CET, method ="ga", model_fn = fit_lmshift, penalty_fn = BIC, popSize =200, maxiter =5000, run =1000, model_fn_args = list(trends =TRUE), population = build_gabin_population(CET))## End(Not run)## Not run:x <- segment(method ="ga-coen", maxiter =50)## End(Not run)x <- segment(CET, method ="random")
References
Shi, et al. (2022, tools:::Rd_expr_doi("10.1175/JCLI-D-21-0489.1") )
Taimal, et al. (2023, tools:::Rd_expr_doi("10.1007/978-3-031-47372-2_20") )