From 90bcdbba8eb0ccb6fe7f884b57a39f7f2565ccc3 Mon Sep 17 00:00:00 2001 From: DAPPERstats Date: Wed, 22 Jan 2020 13:58:11 -0800 Subject: [PATCH 01/43] Update _pkgdown.yml fix links on website --- _pkgdown.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_pkgdown.yml b/_pkgdown.yml index f8ed41ce..a60bdd43 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -11,9 +11,9 @@ navbar: text: "Vignettes" menu: - text: "Rodents example" - href: rodents-example.html + href: articles/rodents-example.html - text: "Comparison to Christensen et al." - href: paper-comparison.html + href: articles/paper-comparison.html - text: "LDATS codebase" href: articles/LDATS_codebase.html reference: From 77fea7e2c7cb1ccb55dacda6f607041627fc086c Mon Sep 17 00:00:00 2001 From: DAPPERstats Date: Wed, 22 Jan 2020 15:10:03 -0800 Subject: [PATCH 02/43] building out the structure of meta_LDA_TS basic idea of iterating over multiple LDA_TS and storing the output is present --- R/LDA.R | 2 ++ R/meta_LDA_TS.R | 75 +++++++++++++++++++++++++++++++++++++++++++++++++ _pkgdown.yml | 2 +- working.R | 16 +++++++++++ 4 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 R/meta_LDA_TS.R create mode 100644 working.R diff --git a/R/LDA.R b/R/LDA.R index 55f77fd7..e72a17b0 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -156,6 +156,8 @@ prep_LDA_control <- function(seed, control = list()){ control$selector <- NULL control$iseed <- NULL control$seed <- seed + control$measurer_LDA_TS <- NULL + control$selector_LDA_TS <- NULL control } diff --git a/R/meta_LDA_TS.R b/R/meta_LDA_TS.R new file mode 100644 index 00000000..a8d6167d --- /dev/null +++ b/R/meta_LDA_TS.R @@ -0,0 +1,75 @@ +meta_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, + nchangepoints = 0, niterations = 1, timename = "time", + weights = TRUE, control = list()){ + + check_meta_LDA_TS_inputs(data, topics, nseeds, formulas, nchangepoints, + timename, weights, control) + control <- do.call("meta_LDA_TS_control", control) + data <- conform_LDA_TS_data(data, control$quiet) + + mLDATS <- vector("list", length = niterations) + for(i in 1:niterations){ + +# data selection will happen here + + LDATS_fit <- LDA_TS(data = data, topics = topics, nseeds = nseeds, + formulas = formulas, nchangepoints = nchangepoints, + timename = timename, weights = weights, + control = control) + mLDATS[[i]] <- list(LDA_TS = LDATS_fit, data = data) + } + names(mLDATS) <- paste0("meta_LDA_TS iteration ", 1:niterations) + + + +# we're going to want to measure, select (although not using) and package + mLDATS +} + + + +check_meta_LDA_TS_inputs <- function(data = NULL, + topics = 2, nseeds = 1, formulas = ~ 1, + nchangepoints = 0, + timename = "time", + weights = TRUE, + control = list()){ + check_control(control) + control <- do.call("meta_LDA_TS_control", control) + data <- conform_LDA_TS_data(data) + weights <- iftrue(weights, document_weights(data$document_term_table)) + check_document_covariate_table(data$document_covariate_table, + document_term_table = data$document_term_table) + check_timename(data$document_covariate_table, timename) + ts_control <- TS_control(control) + check_formulas(formulas, data$document_covariate_table, ts_control) + + check_nchangepoints(nchangepoints) + check_weights(weights) + check_document_term_table(data$document_term_table) + check_topics(topics) + check_seeds(nseeds) + +} + + +meta_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = AIC, + selector_LDA = min, iseed = 2, + memoise = TRUE, response = "gamma", + lambda = 0, measurer_TS = AIC, + selector_TS = min, ntemps = 6, + penultimate_temp = 2^6, ultimate_temp = 1e10, + q = 0, nit = 1e4, magnitude = 12, burnin = 0, + thin_frac = 1, summary_prob = 0.95, + seed = NULL, measurer_LDA_TS = logLik, + selector_LDA_TS = NULL, ...){ + + list(quiet = quiet, measurer_LDA = measurer_LDA, + selector_LDA = selector_LDA, + iseed = iseed, memoise = memoise, response = response, lambda = lambda, + measurer_TS = measurer_TS, selector_TS = selector_TS, ntemps = ntemps, + penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, + q = q, nit = nit, magnitude = magnitude, burnin = burnin, + thin_frac = thin_frac, summary_prob = summary_prob, seed = seed, + measurer_LDA_TS = measurer_LDA_TS, selector_LDA_TS = selector_LDA_TS) +} \ No newline at end of file diff --git a/_pkgdown.yml b/_pkgdown.yml index a60bdd43..d0d288db 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -31,7 +31,7 @@ navbar: reference: - title: "Joint LDA and Time Series" - desc: "Functions for top-level LDATS modeling" + desc: "Functions for LDA_TS-level modeling" contents: - LDA_TS - package_LDA_TS diff --git a/working.R b/working.R new file mode 100644 index 00000000..ffe88033 --- /dev/null +++ b/working.R @@ -0,0 +1,16 @@ +# need to remove restrictions on the selection functions: +# if selector is NULL, return the set of models +# if >1 model is selected, return all + +devtools::load_all() +data(rodents) +names(rodents) + + + +mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, + nchangepoints = 0, timename = "newmoon") + +mmod <- meta_LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, + nchangepoints = 0, timename = "newmoon") + From 06276ca1c88fbc701fca2264de46678977213490 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Tue, 4 Feb 2020 22:23:13 -0800 Subject: [PATCH 03/43] in progress work structuring the top level functionality and the simplex ts ideas definitely not working presently --- R/TS.R | 8 ++++++-- R/meta_LDA_TS.R | 43 ++++++++++++++++++++++++++++++++----------- R/multinom_TS.R | 2 +- hold.R | 23 +++++++++++++++++++++++ man/TS_control.Rd | 6 +++++- pseudocode.R | 18 ++++++++++++++++++ working.R | 6 ++++++ 7 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 hold.R create mode 100644 pseudocode.R diff --git a/R/TS.R b/R/TS.R index f963788c..aa08d2b2 100644 --- a/R/TS.R +++ b/R/TS.R @@ -945,6 +945,9 @@ check_formula <- function(data, formula){ #' #' @param seed Input to \code{set.seed} for replication purposes. #' +#' @param model_fun \code{character} name of the model function to be used to +#' fit the multivariate response. +#' #' @return \code{list}, with named elements corresponding to the arguments. #' #' @examples @@ -956,13 +959,14 @@ TS_control <- function(memoise = TRUE, response = "gamma", lambda = 0, measurer = AIC, selector = min, ntemps = 6, penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, nit = 1e4, magnitude = 12, quiet = FALSE, burnin = 0, - thin_frac = 1, summary_prob = 0.95, seed = NULL){ + thin_frac = 1, summary_prob = 0.95, seed = NULL, + model_fun = "multinom"){ list(memoise = memoise, response = response, lambda = lambda, measurer = measurer, selector = selector, ntemps = ntemps, penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, q = q, nit = nit, magnitude = magnitude, quiet = quiet, burnin = burnin, thin_frac = thin_frac, summary_prob = summary_prob, - seed = seed) + seed = seed, model_fun = model_fun) } diff --git a/R/meta_LDA_TS.R b/R/meta_LDA_TS.R index a8d6167d..a44e57b7 100644 --- a/R/meta_LDA_TS.R +++ b/R/meta_LDA_TS.R @@ -1,3 +1,6 @@ +# runs multiple iterations of an LDA_TS model (or model suite) where each time +# a subset of the data are held out + meta_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 0, niterations = 1, timename = "time", weights = TRUE, control = list()){ @@ -10,22 +13,38 @@ meta_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, mLDATS <- vector("list", length = niterations) for(i in 1:niterations){ -# data selection will happen here - - LDATS_fit <- LDA_TS(data = data, topics = topics, nseeds = nseeds, + data_i <- split_LDA_TS_data(data, control, i) + LDATS_fit <- LDA_TS(data = data_i["train"], topics = topics, + nseeds = nseeds, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control) - mLDATS[[i]] <- list(LDA_TS = LDATS_fit, data = data) + test <- test_LDA_TS(LDATS_fit, data_i, control) + mLDATS[[i]] <- list(LDA_TS = LDATS_fit, test = test, data = data_i) } names(mLDATS) <- paste0("meta_LDA_TS iteration ", 1:niterations) + + # measure, select and package + + mLDATS +} +# rule should be a function, yeah? +# working here to flesh this out -# we're going to want to measure, select (although not using) and package - mLDATS -} +split_LDA_TS_data <- function(data = NULL, control, iteration = 1){ + rule <- control$rule + dtt <- data[["document_term_table"]] + dct <- data[["document_covariate_table"]] + test_train <- lapply(dtt, sum) + training <- list(document_term_table = dtt[test_train == "train", ], + document_covariate_table = dct[test_train == "train", ]) + test <- list(document_term_table = dtt[test_train == "test", ], + document_covariate_table = dct[test_train == "test", ]) + list(training = training, test = test, data = data, test_train = test_train) +} check_meta_LDA_TS_inputs <- function(data = NULL, @@ -52,12 +71,14 @@ check_meta_LDA_TS_inputs <- function(data = NULL, } +# note that the controls here override the standard LDA_TS inputs with NULL +# for each of the measurer and selector functions for LDA and TS -meta_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = AIC, - selector_LDA = min, iseed = 2, +meta_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = NULL, + selector_LDA = NULL, iseed = 2, memoise = TRUE, response = "gamma", - lambda = 0, measurer_TS = AIC, - selector_TS = min, ntemps = 6, + lambda = 0, measurer_TS = NULL, + selector_TS = NULL, ntemps = 6, penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, nit = 1e4, magnitude = 12, burnin = 0, thin_frac = 1, summary_prob = 0.95, diff --git a/R/multinom_TS.R b/R/multinom_TS.R index b43b3114..9a41a134 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -87,7 +87,7 @@ multinom_TS <- function(data, formula, changepoints = NULL, return(out) } - TS_chunk_memo <- memoise_fun(multinom_TS_chunk, control$memoise) + TS_chunk_memo <- memoise_fun(multinom_TS_chunk, control) chunks <- prep_chunks(data, changepoints, timename) nchunks <- nrow(chunks) diff --git a/hold.R b/hold.R new file mode 100644 index 00000000..cacf80fd --- /dev/null +++ b/hold.R @@ -0,0 +1,23 @@ + data(rodents) + dtt <- rodents$document_term_table + lda <- LDA_set(dtt, 3, 1, list(quiet = TRUE)) + dct <- rodents$document_covariate_table + dct$gamma <- lda[[1]]@gamma + weights <- document_weights(dtt) + check_multinom_TS_inputs(dct, timename = "newmoon") + mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), + timename = "newmoon", weights = weights) + formula = gamma ~ 1 + data <- dct + fit <- multinom(formula, data, weights, subset = in_chunk, trace = FALSE, + decay = control$lambda) + + basis <- "ilr" + props <- data[ , grepl("gamma", colnames(data))] + data$coords <- coda.base::coordinates(props, basis) + formula <- as.formula(gsub("gamma", "coords", deparse(formula))) + ff <- lm(formula, data, subset = in_chunk, weights) + fv_nrows <- sum(in_chunk) + fv_ncols <- sum(grepl("gamma", colnames(data))) + ff_fv <- as.matrix(ff$fitted.values, nrows = fv_nrows, ncols = fv_ncols) + comps <- coda.base::composition(ff$fitted.values, basis) diff --git a/man/TS_control.Rd b/man/TS_control.Rd index 5f944c88..ea019d55 100644 --- a/man/TS_control.Rd +++ b/man/TS_control.Rd @@ -8,7 +8,8 @@ TS_control(memoise = TRUE, response = "gamma", lambda = 0, measurer = AIC, selector = min, ntemps = 6, penultimate_temp = 2^6, ultimate_temp = 1e+10, q = 0, nit = 10000, magnitude = 12, quiet = FALSE, burnin = 0, - thin_frac = 1, summary_prob = 0.95, seed = NULL) + thin_frac = 1, summary_prob = 0.95, seed = NULL, + model_fun = "multinom") } \arguments{ \item{memoise}{\code{logical} indicator of whether the multinomial @@ -59,6 +60,9 @@ distributions (via the highest posterior density interval, see \code{\link[coda]{HPDinterval}}).} \item{seed}{Input to \code{set.seed} for replication purposes.} + +\item{model_fun}{\code{character} name of the model function to be used to +fit the multivariate response.} } \value{ \code{list}, with named elements corresponding to the arguments. diff --git a/pseudocode.R b/pseudocode.R new file mode 100644 index 00000000..9e5f8615 --- /dev/null +++ b/pseudocode.R @@ -0,0 +1,18 @@ + + +# pipeline + +meta_LDA_TS + for each iteration + - split_LDA_TS_data (divides data into training and test sets) + - LDA_TS (runs on the training set) + - test_LDA_TS (measures the model on the test data) + measure_LDA_TS (combines all the individual iterations' measures) + select_LDA_TS (only used if multiple models are given) + package_meta_LDA_TS + +run meta_LDA_TS for each model +iterates over the subsets of the data for a given model +(or you could give it multiple models and it will run using all of them... + for this you'll want to be able to pass multiple models between the stages) + diff --git a/working.R b/working.R index ffe88033..f34c1a09 100644 --- a/working.R +++ b/working.R @@ -14,3 +14,9 @@ mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, mmod <- meta_LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, nchangepoints = 0, timename = "newmoon") +# blech this destroys our ability to memoise tho +# i think we needed to cut that tie sooner or later tho tbh +# yeah we'll need to set up some of the interface at this level to be +# much more flexed +# create a function that acts like multinom for a basis-based model? +# or do we drop multinom all together and use alr for that? \ No newline at end of file From 13170179ae4186729d78a4c34744ad21e12bcd44 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 17 Feb 2020 19:25:04 -0800 Subject: [PATCH 04/43] ongoing work in multi --- R/LDA.R | 1 + R/meta_LDA_TS.R | 96 ----------------------------- R/multi_LDA_TS.R | 154 +++++++++++++++++++++++++++++++++++++++++++++++ R/multinom_TS.R | 2 +- notes.R | 6 ++ working.R | 8 +++ 6 files changed, 170 insertions(+), 97 deletions(-) delete mode 100644 R/meta_LDA_TS.R create mode 100644 R/multi_LDA_TS.R create mode 100644 notes.R diff --git a/R/LDA.R b/R/LDA.R index e72a17b0..c30f334d 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -158,6 +158,7 @@ prep_LDA_control <- function(seed, control = list()){ control$seed <- seed control$measurer_LDA_TS <- NULL control$selector_LDA_TS <- NULL + control$rule <- NULL control } diff --git a/R/meta_LDA_TS.R b/R/meta_LDA_TS.R deleted file mode 100644 index a44e57b7..00000000 --- a/R/meta_LDA_TS.R +++ /dev/null @@ -1,96 +0,0 @@ -# runs multiple iterations of an LDA_TS model (or model suite) where each time -# a subset of the data are held out - -meta_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, - nchangepoints = 0, niterations = 1, timename = "time", - weights = TRUE, control = list()){ - - check_meta_LDA_TS_inputs(data, topics, nseeds, formulas, nchangepoints, - timename, weights, control) - control <- do.call("meta_LDA_TS_control", control) - data <- conform_LDA_TS_data(data, control$quiet) - - mLDATS <- vector("list", length = niterations) - for(i in 1:niterations){ - - data_i <- split_LDA_TS_data(data, control, i) - LDATS_fit <- LDA_TS(data = data_i["train"], topics = topics, - nseeds = nseeds, - formulas = formulas, nchangepoints = nchangepoints, - timename = timename, weights = weights, - control = control) - test <- test_LDA_TS(LDATS_fit, data_i, control) - mLDATS[[i]] <- list(LDA_TS = LDATS_fit, test = test, data = data_i) - } - names(mLDATS) <- paste0("meta_LDA_TS iteration ", 1:niterations) - - # measure, select and package - - mLDATS -} - -# rule should be a function, yeah? - -# working here to flesh this out - -split_LDA_TS_data <- function(data = NULL, control, iteration = 1){ - rule <- control$rule - dtt <- data[["document_term_table"]] - dct <- data[["document_covariate_table"]] - test_train <- lapply(dtt, sum) - - training <- list(document_term_table = dtt[test_train == "train", ], - document_covariate_table = dct[test_train == "train", ]) - test <- list(document_term_table = dtt[test_train == "test", ], - document_covariate_table = dct[test_train == "test", ]) - list(training = training, test = test, data = data, test_train = test_train) -} - - -check_meta_LDA_TS_inputs <- function(data = NULL, - topics = 2, nseeds = 1, formulas = ~ 1, - nchangepoints = 0, - timename = "time", - weights = TRUE, - control = list()){ - check_control(control) - control <- do.call("meta_LDA_TS_control", control) - data <- conform_LDA_TS_data(data) - weights <- iftrue(weights, document_weights(data$document_term_table)) - check_document_covariate_table(data$document_covariate_table, - document_term_table = data$document_term_table) - check_timename(data$document_covariate_table, timename) - ts_control <- TS_control(control) - check_formulas(formulas, data$document_covariate_table, ts_control) - - check_nchangepoints(nchangepoints) - check_weights(weights) - check_document_term_table(data$document_term_table) - check_topics(topics) - check_seeds(nseeds) - -} - -# note that the controls here override the standard LDA_TS inputs with NULL -# for each of the measurer and selector functions for LDA and TS - -meta_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = NULL, - selector_LDA = NULL, iseed = 2, - memoise = TRUE, response = "gamma", - lambda = 0, measurer_TS = NULL, - selector_TS = NULL, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e10, - q = 0, nit = 1e4, magnitude = 12, burnin = 0, - thin_frac = 1, summary_prob = 0.95, - seed = NULL, measurer_LDA_TS = logLik, - selector_LDA_TS = NULL, ...){ - - list(quiet = quiet, measurer_LDA = measurer_LDA, - selector_LDA = selector_LDA, - iseed = iseed, memoise = memoise, response = response, lambda = lambda, - measurer_TS = measurer_TS, selector_TS = selector_TS, ntemps = ntemps, - penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, - q = q, nit = nit, magnitude = magnitude, burnin = burnin, - thin_frac = thin_frac, summary_prob = summary_prob, seed = seed, - measurer_LDA_TS = measurer_LDA_TS, selector_LDA_TS = selector_LDA_TS) -} \ No newline at end of file diff --git a/R/multi_LDA_TS.R b/R/multi_LDA_TS.R new file mode 100644 index 00000000..5d5c305d --- /dev/null +++ b/R/multi_LDA_TS.R @@ -0,0 +1,154 @@ +# runs multiple iterations of an LDA_TS model (or model suite) where each time +# a subset of the data are held out + +multi_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, + nchangepoints = 0, niterations = 1, + timename = "time", + weights = TRUE, control = list()){ + + check_multi_LDA_TS_inputs(data, topics, nseeds, formulas, nchangepoints, + timename, weights, control) + control <- do.call("multi_LDA_TS_control", control) + data <- conform_LDA_TS_data(data, control$quiet) + + mLDATS <- vector("list", length = niterations) + for(i in 1:niterations){ + + data_i <- split_LDA_TS_data(data, control, i) + LDATS_fit <- LDA_TS(data = data_i[["train"]], topics = topics, + nseeds = nseeds, + formulas = formulas, nchangepoints = nchangepoints, + timename = timename, weights = weights, + control = control) + test <- test_LDA_TS(LDATS_fit, data = data_i[["test"]], control) + mLDATS[[i]] <- list(LDA_TS = LDATS_fit, test = test, data = data_i) + } + names(mLDATS) <- paste0("multi_LDA_TS iteration ", 1:niterations) + + # select and package + + mLDATS +} + +test_LDA_TS <- function(LDATS_fit, data, control = list()){ + # need to make predictions cleanly + # predict method on LDA_TS which combines predict method on TS s + pred_data <- predict(LDATS_fit, newdata = data, control = control) + vapply(TS_models, measurer, 0) +} + +# rule should be a function, yeah? +# yes +# if rule is NULL, nothing is held out, like with a classical ldats +# its really test train out + +split_LDA_TS_data <- function(data = NULL, control = list(), iteration = 1){ + control <- do.call("multi_LDA_TS_control", control) + data <- conform_LDA_TS_data(data, control$quiet) + dtt <- data[["document_term_table"]] + dct <- data[["document_covariate_table"]] + rule <- control$rule + if(is.null(rule)){ + rule <- null_rule + } + arglist <- list(data = dtt, iteration = iteration) + test_train <- do.call(rule, arglist) + + train <- list(document_term_table = dtt[test_train == "train", ], + document_covariate_table = dct[test_train == "train", ]) + test <- list(document_term_table = dtt[test_train == "test", ], + document_covariate_table = dct[test_train == "test", ]) + list(train = train, test = test, test_train = test_train) +} + + +null_rule <- function(data, iteration = 1){ + n <- NROW(data) + rep("train", n) +} + +# simple leave one outs with no buffer + +# for use with exhaustive approach, +# as it assumes 1:1 between iteraction and datum location to drop + +exhaust_loo <- function(data, iteration = 1){ + leave_p_out(data = data, random = FALSE, locations = iteration) +} + +random_loo <- function(data, iteration = 1){ + leave_p_out(data = data) +} + +# fully flexible leave p out function allowing for buffers +# if random the test data are selected randomly, otherwise locations are used +leave_p_out <- function(data, p = 1, pre = 0, post = 0, + random = TRUE, locations = NULL){ + n <- NROW(data) + test_train <- rep("train", n) + + if(random){ + locations <- sample(1:n, p) + } + + for(i in 1:p){ + hold_out <- (locations[i] - pre):(locations[i] + post) + test_train[hold_out] <- "out" + } + test_train[locations] <- "test" + test_train +} + + + + +check_multi_LDA_TS_inputs <- function(data = NULL, + topics = 2, nseeds = 1, formulas = ~ 1, + nchangepoints = 0, + timename = "time", + weights = TRUE, + control = list()){ + check_control(control) + control <- do.call("multi_LDA_TS_control", control) + data <- conform_LDA_TS_data(data) + weights <- iftrue(weights, document_weights(data$document_term_table)) + check_document_covariate_table(data$document_covariate_table, + document_term_table = data$document_term_table) + check_timename(data$document_covariate_table, timename) + ts_control <- TS_control(control) + check_formulas(formulas, data$document_covariate_table, ts_control) + + check_nchangepoints(nchangepoints) + check_weights(weights) + check_document_term_table(data$document_term_table) + check_topics(topics) + check_seeds(nseeds) + +} + +# note that the controls here override the standard LDA_TS inputs with NULL +# for each of the measurer and selector functions for LDA and TS +# default here is I for selector, which just passes along (identity function) +# +multi_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = logLik, + selector_LDA = I, iseed = 2, + memoise = TRUE, response = "gamma", + lambda = 0, measurer_TS = logLik, + selector_TS = I, ntemps = 6, + penultimate_temp = 2^6, ultimate_temp = 1e10, + q = 0, nit = 1e4, magnitude = 12, burnin = 0, + thin_frac = 1, summary_prob = 0.95, + seed = NULL, measurer_LDA_TS = logLik, + selector_LDA_TS = I, + rule = exhaust_loo, ...){ + + list(quiet = quiet, measurer_LDA = measurer_LDA, + selector_LDA = selector_LDA, + iseed = iseed, memoise = memoise, response = response, lambda = lambda, + measurer_TS = measurer_TS, selector_TS = selector_TS, ntemps = ntemps, + penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, + q = q, nit = nit, magnitude = magnitude, burnin = burnin, + thin_frac = thin_frac, summary_prob = summary_prob, seed = seed, + measurer_LDA_TS = measurer_LDA_TS, selector_LDA_TS = selector_LDA_TS, + rule = rule) +} \ No newline at end of file diff --git a/R/multinom_TS.R b/R/multinom_TS.R index 9a41a134..b43b3114 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -87,7 +87,7 @@ multinom_TS <- function(data, formula, changepoints = NULL, return(out) } - TS_chunk_memo <- memoise_fun(multinom_TS_chunk, control) + TS_chunk_memo <- memoise_fun(multinom_TS_chunk, control$memoise) chunks <- prep_chunks(data, changepoints, timename) nchunks <- nrow(chunks) diff --git a/notes.R b/notes.R new file mode 100644 index 00000000..ec6739c4 --- /dev/null +++ b/notes.R @@ -0,0 +1,6 @@ +in the multi_LDA_TS + in test_LDA_TS + requires a predict.LDA_TS + +LDAT_TS + developing predict method \ No newline at end of file diff --git a/working.R b/working.R index f34c1a09..1087e958 100644 --- a/working.R +++ b/working.R @@ -1,3 +1,11 @@ +# have a rough set up for the data splitting, now need to actually +# connect the pieces under the hood...like measurer? and selector? + + + + + + # need to remove restrictions on the selection functions: # if selector is NULL, return the set of models # if >1 model is selected, return all From 85a207c3ab572614015b288abae98c08aec7cd33 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Tue, 25 Feb 2020 19:03:32 -0800 Subject: [PATCH 05/43] very much a workin in progress --- DESCRIPTION | 1 + NAMESPACE | 13 +- R/LDA.R | 263 +++++++++++++++++-------- R/LDATS.R | 2 +- R/LDA_TS.R | 108 +++++----- R/TS.R | 28 ++- R/data_preparation.R | 111 +++++++++++ R/multi_LDA_TS.R | 1 + R/ptMCMC.R | 13 +- R/temper.R | 15 ++ R/utilities.R | 98 ++++++++- eh.R | 16 ++ eh2.R | 25 +++ man/{LDA_set.Rd => LDA.Rd} | 61 ++++-- man/LDA_TS_control.Rd | 4 +- man/LDA_control.Rd | 41 ++++ man/LDA_msg.Rd | 8 +- man/LDA_set_control.Rd | 36 ---- man/{check_seeds.Rd => check_nreps.Rd} | 12 +- man/logLik.LDA_VEM.Rd | 48 ----- man/package_LDA_TS.Rd | 10 +- man/prep_LDA_control.Rd | 27 --- man/print.LDA_TS.Rd | 2 +- man/update_list.Rd | 26 +++ notes.R | 33 +++- tempering.R | 114 +++++++++++ working.R | 43 ++++ 27 files changed, 866 insertions(+), 293 deletions(-) create mode 100644 R/data_preparation.R create mode 100644 R/temper.R create mode 100644 eh.R create mode 100644 eh2.R rename man/{LDA_set.Rd => LDA.Rd} (58%) create mode 100644 man/LDA_control.Rd delete mode 100644 man/LDA_set_control.Rd rename man/{check_seeds.Rd => check_nreps.Rd} (76%) delete mode 100644 man/logLik.LDA_VEM.Rd delete mode 100644 man/prep_LDA_control.Rd create mode 100644 man/update_list.Rd create mode 100644 tempering.R diff --git a/DESCRIPTION b/DESCRIPTION index d25e84a7..eca3eb2b 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -44,6 +44,7 @@ Imports: here, lubridate, magrittr, + mcmc, memoise, methods, mvtnorm, diff --git a/NAMESPACE b/NAMESPACE index ebd8b0ce..aafbad53 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,5 @@ # Generated by roxygen2: do not edit by hand -S3method(logLik,LDA_VEM) S3method(logLik,TS_fit) S3method(logLik,multinom_TS_fit) S3method(plot,LDA_TS) @@ -11,13 +10,13 @@ S3method(print,LDA_TS) S3method(print,TS_fit) S3method(print,TS_on_LDA) export(AICc) +export(LDA) export(LDA_TS) export(LDA_TS_control) +export(LDA_control) export(LDA_msg) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) -export(LDA_set) -export(LDA_set_control) export(TS) export(TS_control) export(TS_diagnostics_plot) @@ -25,8 +24,8 @@ export(TS_on_LDA) export(TS_summary_plot) export(autocorr_plot) export(check_LDA_TS_inputs) +export(check_LDA_inputs) export(check_LDA_models) -export(check_LDA_set_inputs) export(check_TS_inputs) export(check_TS_on_LDA_inputs) export(check_changepoints) @@ -37,7 +36,7 @@ export(check_formula) export(check_formulas) export(check_multinom_TS_inputs) export(check_nchangepoints) -export(check_seeds) +export(check_nreps) export(check_timename) export(check_topics) export(check_weights) @@ -69,7 +68,6 @@ export(package_TS_on_LDA) export(package_chunk_fits) export(posterior_plot) export(pred_gamma_TS_plot) -export(prep_LDA_control) export(prep_TS_data) export(prep_chunks) export(prep_cpts) @@ -105,6 +103,7 @@ export(take_step) export(trace_plot) export(update_cpts) export(update_ids) +export(update_list) export(update_pbar) export(update_saves) export(verify_changepoint_locations) @@ -129,6 +128,7 @@ importFrom(graphics,rect) importFrom(graphics,text) importFrom(lubridate,is.Date) importFrom(magrittr,"%>%") +importFrom(mcmc,temper) importFrom(memoise,memoise) importFrom(methods,is) importFrom(mvtnorm,rmvnorm) @@ -148,5 +148,4 @@ importFrom(stats,sd) importFrom(stats,terms) importFrom(stats,var) importFrom(stats,vcov) -importFrom(topicmodels,LDA) importFrom(viridis,viridis) diff --git a/R/LDA.R b/R/LDA.R index c30f334d..3adfa60c 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -19,9 +19,9 @@ #' as verified by \code{\link{check_document_term_table}}. #' #' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. +#' Must be conformable to \code{integer} values. REDUCED DIMENSIONALITY #' -#' @param nseeds Number of seeds (replicate starts) to use for each +#' @param nreps Number of replicate starts to use for each #' value of \code{topics}. Must be conformable to \code{integer} value. #' #' @param control A \code{list} of parameters to control the running and @@ -49,26 +49,146 @@ #' @examples #' data(rodents) #' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) +#' r_LDA <- LDA(lda_data, topics = 2, nseeds = 2) #' #' @export #' -LDA_set <- function(document_term_table, topics = 2, nseeds = 1, - control = list()){ - check_LDA_set_inputs(document_term_table, topics, nseeds, control) - control <- do.call("LDA_set_control", control) - mod_topics <- rep(topics, each = length(seq(2, nseeds * 2, 2))) - iseed <- control$iseed - mod_seeds <- rep(seq(iseed, iseed + (nseeds - 1)* 2, 2), length(topics)) - nmods <- length(mod_topics) - mods <- vector("list", length = nmods) - for (i in 1:nmods){ - LDA_msg(mod_topics[i], mod_seeds[i], control) - control_i <- prep_LDA_control(seed = mod_seeds[i], control = control) - mods[[i]] <- LDA(document_term_table, k = mod_topics[i], - control = control_i) +LDA <- function(data, topics = 2:3, reps_per_topic = 2, control = list()){ + # check_args() + control <- do.call("LDA_control", control) + + messageq("----Linguistic Decomposition Analyses----", control$quiet) + + LDAs <- prep_LDA_models(data = data, topics = topics, + reps_per_topic = reps_per_topic, + control = control) + nLDA <- length(LDA_models) + + for (i in 1:nLDA){ + LDAs[[i]] <- LDA_call(data = LDAs[[i]]$data, topics = LDAs[[i]]$topics, + rep = LDAs[[i]]$rep, control = control) + } + # eval_LDA + # select_LDA + package_LDA(selected_LDAs = selected_LDAs, + LDAs = LDAs, LDA_topics = LDA_topics, LDA_seeds = LDA_seeds) +} + +prep_LDA_models <- function(data, topics = 2:3, reps_per_topic = 2, + control = list()){ + data <- conform_data(data = data, control = control) + subsets <- names(data) + LDA_topics <- rep(topics, each = length(seq(2, reps_per_topic * 2, 2))) + LDA_reps <- rep(seq(1, 1 + (reps_per_topic - 1), 1), length(topics)) + LDA_subsets <- rep(subsets, each = length(LDA_reps)) + LDA_reps <- rep(LDA_reps, length(subsets)) + LDA_topics <- rep(LDA_topics, length(subsets)) + nLDA <- length(LDA_topics) + LDAs <- vector("list", length = nLDA) + for(i in 1:nLDA){ + LDAs[[i]] <- list(data = data[[LDA_subsets[[i]]]], + topics = LDA_topics[[i]], rep = LDA_reps[[i]]) + } + names(LDAs) <- paste0("model_", 1:nLDA) + + LDAs +} + + +select_LDA <- function(LDAs = list(), control = list()){ + vals <- measure_LDA(LDAs = LDAs, control = control) + +} + +#working in here +#coming along! +#but remember that we'll need to manage passing data around for test/train +# and the multiple versions of data + +measure_LDA <- function(LDAs = list(), control = list()){ + fun <- control$measurer_function + args <- control$measurer_args + nLDAs <- length(LDAs) + vals <- rep(NA, nLDAs) + for(i in 1:nLDAs){ + args <- update_list(args, object = LDAs[[i]]) + vals[i] <- do.call(what = fun, args = args) + } + vals +} + +LDA_call <- function(data, topics = 2, rep = 1, control = list()){ + control <- do.call("LDA_control", control) + LDA_msg(topics = topics, rep = rep, quiet = control$quiet) + fun <- control$LDA_function + args <- update_list(control$LDA_args, data = data, topics = topics, + rep = rep) + if(control$soften){ + tryCatch(do.call(what = fun, args = args), + warning = LDA_call_soft_warning, + error = LDA_call_soft_error) + } else{ + do.call(what = fun, args = args) } - package_LDA_set(mods, mod_topics, mod_seeds) +} + +AIC.LDA <- function(object, ..., k = 2){ + lls <- logLik(object) + -2 * as.numeric(lls) + k * attr(lls, "df") +} + +logLik.LDA <- function(object, ...){ + object$log_likelihood +} + +LDA_call_soft_warning <- function(x){ + eval(x$call) +} + +LDA_call_soft_error <- function(x = list()){ + list(params = list(), document_topic_matrix = data.frame(), + log_likelihood = NA, error = x$message) +} + + +topicmodels_LDA <- function(data, topics = 2, rep = 1, method = "VEM", + seeded = TRUE, ...){ + if(topics == 1){ + identity_LDA(data) + } else{ + fun_control <- list(...) + if(seeded){ + fun_control <- update_list(fun_control, seed = rep * 2) + } + mod <- topicmodels::LDA(x = data$document_term_table, k = topics, + method = method, control = fun_control) + mod_ll <- sum(mod@loglikelihood) + df <- as.integer(mod@control@estimate.alpha) + length(mod@beta) + attr(mod_ll, "df") <- df + attr(mod_ll, "nobs") <- mod@Dim[1] * mod@Dim[2] + class(mod_ll) <- "logLik" + out <- list(params = list(alpha = mod@alpha, beta = mod@beta), + document_topic_matrix = mod@gamma, + log_likelihood = mod_ll, data = data) + class(out) <- c("LDA", "list") + out + } +} + +identity_LDA <- function(data, topics = NULL, rep = 1){ + nterms <- NCOL(data$document_term_table) + if(is.null(topics)){ + nterms <- topics + } else if(topics != nterms){ + stop("number of topics does not equal number of terms") + } + document_topic_table <- data$document_term_table + document_topic_table <- document_topic_table / rowSums(document_topic_table) + colnames(document_topic_table) <- NULL + out <- list(params = list(), document_topic_table = document_topic_table, + log_likelihood = NULL, data = data) + class(out) <- c("LDA", "list") + out } #' @title Calculate the log likelihood of a VEM LDA model fit @@ -110,57 +230,22 @@ LDA_set <- function(document_term_table, topics = 2, nseeds = 1, #' #' @export #' -logLik.LDA_VEM <- function(object, ...){ - val <- sum(object@loglikelihood) - df <- as.integer(object@control@estimate.alpha) + length(object@beta) - attr(val, "df") <- df - attr(val, "nobs") <- object@Dim[1] * object@Dim[2] - class(val) <- "logLik" - val -} -#' @rdname LDA_set + +#' @rdname LDA #' #' @export #' -check_LDA_set_inputs <- function(document_term_table, topics, nseeds, +check_LDA_inputs <- function(data, topics, nreps, control){ - check_document_term_table(document_term_table) - check_topics(topics) - check_seeds(nseeds) - check_control(control) + check_document_term_table(document_term_table = data$document_term_table) + check_topics(topics = topics) + check_nreps(nreps = nreps) + check_control(control = control) } -#' @title Set the control inputs to include the seed -#' -#' @description Update the control list for the LDA model with the specific -#' seed as indicated. And remove controls not used within the LDA itself. -#' -#' @param seed \code{integer} used to set the seed of the specific model. -#' -#' @param control Named list of control parameters to be used in -#' \code{\link[topicmodels]{LDA}} Note that if \code{control} has an -#' element named \code{seed} it will be overwritten by the \code{seed} -#' argument of \code{prep_LDA_control}. -#' -#' @return \code{list} of controls to be used in the LDA. -#' -#' @examples -#' prep_LDA_control(seed = 1) -#' -#' @export -#' -prep_LDA_control <- function(seed, control = list()){ - control$quiet <- NULL - control$measurer <- NULL - control$selector <- NULL - control$iseed <- NULL - control$seed <- seed - control$measurer_LDA_TS <- NULL - control$selector_LDA_TS <- NULL - control$rule <- NULL - control -} + + #' @title Select the best LDA model(s) for use in time series #' @@ -261,11 +346,11 @@ package_LDA_set <- function(mods, mod_topics, mod_seeds){ #' #' @description Produce and print the message for a given LDA model. #' -#' @param mod_topics \code{integer} value corresponding to the number of +#' @param LDA_topics \code{integer} value corresponding to the number of #' topics in the model. #' -#' @param mod_seeds \code{integer} value corresponding to the seed used for -#' the model. +#' @param LDA_rep \code{integer} value corresponding to the replicate number +#' for the run of the model. #' #' @param control Class \code{LDA_controls} list of control parameters to be #' used in \code{LDA} (note that "seed" will be overwritten). @@ -275,21 +360,19 @@ package_LDA_set <- function(mods, mod_topics, mod_seeds){ #' #' @export #' -LDA_msg <- function(mod_topics, mod_seeds, control = list()){ - control <- do.call("LDA_set_control", control) - check_topics(mod_topics) - check_seeds(mod_seeds) - topic_msg <- paste0("Running LDA with ", mod_topics, " topics ") - seed_msg <- paste0("(seed ", mod_seeds, ")") - messageq(paste0(topic_msg, seed_msg), control$quiet) +LDA_msg <- function(topics, rep, quiet = FALSE){ + check_topics(topics) + check_nreps(rep) + topic_msg <- paste0(" ", topics, " topics") + rep_msg <- paste0(", seed ", rep) + messageq(paste0(topic_msg, rep_msg), quiet) } #' @title Create control list for set of LDA models #' #' @description This function provides a simple creation and definition of -#' the list used to control the set of LDA models. It is set up to be easy -#' to work with the existing control capacity of -#' \code{\link[topicmodels]{LDA}}. +#' the list used to control the set of LDA models, regardless of how they +#' are implemented. #' #' @param quiet \code{logical} indicator of whether the model should run #' quietly. @@ -299,10 +382,14 @@ LDA_msg <- function(mod_topics, mod_seeds, control = list()){ #' and \code{selector} operates on the values to choose the model(s) to #' pass on. #' -#' @param iseed \code{integer} initial seed for the model set. +#' @param args \code{list} of arguments to \code{LDA_function}. #' -#' @param ... Additional arguments to be passed to -#' \code{\link[topicmodels]{LDA}} as a \code{control} input. +#' @param LDA_function \code{function} used for the LDA model. Defaults to +#' classical LDA as coded via \code{topicmodels}' +#' \code{\link[topicmodels]{LDA}}. +#' +#' @param ... Arguments to be passed to \code{LDA_function} as a +#' \code{control} input. #' #' @return \code{list} for controlling the LDA model fit. #' @@ -311,8 +398,20 @@ LDA_msg <- function(mod_topics, mod_seeds, control = list()){ #' #' @export #' -LDA_set_control <- function(quiet = FALSE, measurer = AIC, selector = min, - iseed = 2, ...){ - list(quiet = quiet, measurer = measurer, selector = selector, - iseed = iseed, ...) +LDA_control <- function(LDA_function = topicmodels_LDA, + LDA_args = list(method = "VEM", seeded = TRUE), + measurer_function = AIC, + measurer_args = list(), + selector_function = min, + selector_args = list(), + nsubsets = 1, + subset_rule = NULL, + soften = TRUE, + quiet = FALSE){ + list(LDA_function = LDA_function, LDA_args = LDA_args, + measurer_function = measurer_function, measurer_args = measurer_args, + selector_function = selector_function, selector_args = selector_args, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) } + diff --git a/R/LDATS.R b/R/LDATS.R index e43f6e96..9982eb83 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -5,6 +5,7 @@ #' @importFrom grDevices devAskNewPage rgb #' @importFrom lubridate is.Date #' @importFrom magrittr %>% +#' @importFrom mcmc temper #' @importFrom memoise memoise #' @importFrom methods is #' @importFrom mvtnorm rmvnorm @@ -12,7 +13,6 @@ #' @importFrom progress progress_bar #' @importFrom stats acf AIC as.formula coef ecdf logLik median rgeom rnorm #' runif sd terms var vcov -#' @importFrom topicmodels LDA #' @importFrom viridis viridis #' diff --git a/R/LDA_TS.R b/R/LDA_TS.R index d9c7bb17..16c54172 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,3 +1,12 @@ +predict.LDA_TS <- function(object, newdata = NULL, control = list(), ...){ + control <- do.call("LDA_TS_control", control) + TS_mod <- object[["Selected TS model"]] + TS_predict <- predict.TS(object = TS_mod, + newdata = newdata$document_covariate_table, + control = control, ...) +} + + #' @title Run a full set of Latent Dirichlet Allocations and Time #' Series models #' @@ -124,23 +133,27 @@ LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ - check_LDA_TS_inputs(data, topics, nseeds, formulas, nchangepoints, - timename, weights, control) + check_LDA_TS_inputs(data = data, topics = topics, nseeds = nseeds, + formulas = formulas, nchangepoints = nchangepoints, + timename = timename, weights = weights, + control = control) control <- do.call("LDA_TS_control", control) data <- conform_LDA_TS_data(data, control$quiet) - dtt <- data$document_term_table - dct <- data$document_covariate_table - weights <- iftrue(weights, document_weights(dtt)) - messageq("----Latent Dirichlet Allocation----", control$quiet) - LDAs <- LDA_set(dtt, topics, nseeds, control$LDA_set_control) - sel_LDA <- select_LDA(LDAs, control$LDA_set_control) - messageq("----Time Series Models----", control$quiet) - TSs <- TS_on_LDA(sel_LDA, dct, formulas, nchangepoints, timename, weights, - control$TS_control) - sel_TSs <- select_TS(TSs, control$TS_control) - package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs) + + LDAs <- LDA(data = data, topics = topics, nseeds = nseeds, + control = control$LDA_control) + + TSs <- TS(LDAs = ldas, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control$TS_control) + + package_LDA_TS(LDAs = LDAs, TSs = TSs) + } + + + #' @rdname LDA_TS #' #' @export @@ -180,25 +193,28 @@ conform_LDA_TS_data <- function(data, quiet = FALSE){ #' #' @export #' -check_LDA_TS_inputs <- function(data = NULL, - topics = 2, nseeds = 1, formulas = ~ 1, - nchangepoints = 0, - timename = "time", - weights = TRUE, - control = list()){ +check_LDA_TS_inputs <- function(data = NULL, topics = 2, nseeds = 1, + formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = TRUE, + control = list()){ check_control(control) control <- do.call("LDA_TS_control", control) - data <- conform_LDA_TS_data(data) + data <- conform_LDA_TS_data(data = data, quiet = control$quiet) weights <- iftrue(weights, document_weights(data$document_term_table)) - check_document_covariate_table(data$document_covariate_table, - document_term_table = data$document_term_table) - check_timename(data$document_covariate_table, timename) - check_formulas(formulas, data$document_covariate_table, control$TS_control) - check_nchangepoints(nchangepoints) - check_weights(weights) - check_document_term_table(data$document_term_table) - check_topics(topics) - check_seeds(nseeds) + check_document_covariate_table(document_covariate_table = + data$document_covariate_table, + document_term_table = + data$document_term_table) + check_timename(document_covariate_table = data$document_covariate_table, + timename = timename) + check_formulas(formulas = formulas, + document_covariate_table = data$document_covariate_table, + control = control$TS_control) + check_nchangepoints(nchangepoints = nchangepoints) + check_weights(weights = weights) + check_document_term_table(document_term_table = data$document_term_table) + check_topics(topics = topics) + check_nseeds(nseeds = nseeds) } #' @title Print the selected LDA and TS models of LDA_TS object @@ -208,7 +224,7 @@ check_LDA_TS_inputs <- function(data = NULL, #' #' @param x Class \code{LDA_TS} object to be printed. #' -#' @param ... Not used, simply included to maintain method compatibility. +#' @param ... Passed to lower-level print calls. #' #' @return The selected models in \code{x} as a two-element \code{list} with #' the TS component only returning the non-hidden components. @@ -224,8 +240,8 @@ check_LDA_TS_inputs <- function(data = NULL, #' @export #' print.LDA_TS <- function(x, ...){ - print(x[["Selected LDA model"]]) - print(x[["Selected TS model"]]) + print(x[["Selected LDA model"]], ...) + print(x[["Selected TS model"]], ...) list(LDA = x[["Selected LDA model"]], TS = x[["Selected TS model"]]) } @@ -273,27 +289,19 @@ print.LDA_TS <- function(x, ...){ #' #' @export #' -package_LDA_TS <- function(LDAs, sel_LDA, TSs, sel_TSs){ +package_LDA_TS <- function(LDAs, TSs){ if (!("LDA_set" %in% class(LDAs))){ stop("LDAs not of class LDA_set") } - if (!("LDA_set" %in% class(sel_LDA))){ - stop("sel_LDA not of class LDA_set") - } if (!("TS_on_LDA" %in% class(TSs))){ stop("TSs not of class TS_on_LDA") } - if (!("TS_fit" %in% class(sel_TSs))){ - stop("sel_TS not of class TS_fit") - } - - out <- list("LDA models" = LDAs, "Selected LDA model" = sel_LDA, - "TS models" = TSs, "Selected TS model" = sel_TSs) + out <- list("LDA models" = LDAs, "TS models" = TSs) class(out) <- c("LDA_TS", "list") out } -#' @title Create the controls list for the LDATS model +#' @title Create the controls list for an LDATS model set #' #' @description Create and define a list of control options used to run the #' LDATS model, as implemented by \code{\link{LDA_TS}}. @@ -372,10 +380,12 @@ LDA_TS_control <- function(quiet = FALSE, measurer_LDA = AIC, penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, nit = 1e4, magnitude = 12, burnin = 0, thin_frac = 1, summary_prob = 0.95, - seed = NULL, ...){ + seed = NULL, soften = TRUE, ...){ - LDAcontrol <- LDA_set_control(quiet = quiet, measurer = measurer_LDA, - selector = selector_LDA, iseed = iseed, ...) + LDAcontrol <- LDA_control(LDA_function = LDA_function, LDA_args = LDA_args, + measurer_function = measurer_function, measurer_args = measurer_args, + selector_function = selector_function, selector_args = selector_args, + soften = soften, quiet = quiet) TScontrol <- TS_control(memoise = memoise, response = response, lambda = lambda, measurer = measurer_TS, selector = selector_TS, ntemps = ntemps, @@ -383,6 +393,8 @@ LDA_TS_control <- function(quiet = FALSE, measurer_LDA = AIC, ultimate_temp = ultimate_temp, q = q, nit = nit, magnitude = magnitude, quiet = quiet, burnin = burnin, thin_frac = thin_frac, - summary_prob = summary_prob, seed = seed) - list(LDA_set_control = LDAcontrol, TS_control = TScontrol, quiet = quiet) + summary_prob = summary_prob, seed = seed, + soften = soften) + list(LDA_control = LDAcontrol, TS_control = TScontrol, + soften = soften, quiet = quiet) } diff --git a/R/TS.R b/R/TS.R index aa08d2b2..cbf8df68 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,3 +1,21 @@ +predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ + if(is.null(newdata)){ + newdata <- object$data + } + control <- do.call("TS_control", control) + nit <- object$control$nit + rhos <- object$rhos + etas <- object$etas + nnewdata <- NROW(newdata) + formula <- object$formula + out <- matrix(NA, nrow = nit, ncol = nnewdata) + for(i in 1:nit){ + + out[i , ] <- predicts + } + +} + #' @title Conduct a single multinomial Bayesian Time Series analysis #' #' @description This is the main interface function for the LDATS application @@ -150,7 +168,7 @@ TS <- function(data, formula = gamma ~ 1, nchangepoints = 0, check_TS_inputs(data, formula, nchangepoints, timename, weights, control) control <- do.call("TS_control", control) set.seed(control$seed) - data <- data[order(data[,timename]), ] + data <- time_order_data(data, timename = timename) rho_dist <- est_changepoints(data, formula, nchangepoints, timename, weights, control) eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, @@ -741,10 +759,15 @@ est_changepoints <- function(data, formula, nchangepoints, timename, weights, control = list()){ check_TS_inputs(data, formula, nchangepoints, timename, weights, control) control <- do.call("TS_control", control) + data <- time_order_data(data, timename = timename) if (nchangepoints == 0){ return(NULL) } saves <- prep_saves(nchangepoints, control) + +# break this into a "classic" approach or whatever and give it its own +# function that is akin to temper + inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, weights, control) cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) @@ -759,6 +782,9 @@ est_changepoints <- function(data, formula, nchangepoints, timename, weights, cpts <- update_cpts(cpts, swaps) ids <- update_ids(ids, swaps) } +# the separate function runs to here +# and then process the output + process_saves(saves, control) } diff --git a/R/data_preparation.R b/R/data_preparation.R new file mode 100644 index 00000000..99c86fcf --- /dev/null +++ b/R/data_preparation.R @@ -0,0 +1,111 @@ +# still needs to be evolved and adapted with usages! + + +# if the data are a data.frame or matrix, or list of them, or list of lists +# of them, you're good. output is a list of lists of data.frames +# this allows there to be iterations of the same data set, etc. +# or actually one more level of the list because of the data splitting lololz +# data <- rodents +# conform_data(data) +# +# conform_data(data) +conform_data <- function(data, control = list()){ + + depth <- list_depth(data) + if(depth == 0){ + if(inherits(data, "data.frame") | inherits(data, "matrix")){ + msg <- "covariate table not provided, assuming equi-spaced data" + messageq(msg, control$quiet) + nobs <- nrow(data) + covariate <- data.frame(time = 1:nobs) + data <- list(document_term_table = data, + document_covariate_table = covariate) + depth <- list_depth(data) + } else{ + stop("improper data format") + } + } + if(depth == 1){ + which_term <- grep("term", names(data), ignore.case = TRUE) + which_covariate <- grep("covariate", names(data), ignore.case = TRUE) + if(length(which_term) != 1){ + stop("one, and only one, element in `data` can include `term`") + } + if (length(which_covariate) == 0){ + msg <- "covariate table not provided, assuming equi-spaced data" + messageq(msg, control$quiet) + nobs <- nrow(data[[which_term]]) + covariate <- data.frame(time = 1:nobs) + data$document_covariate_table <- covariate + } else if(length(which_covariate) > 1){ + stop("at most one element in `data` can include `covariate`") + } + names(data)[which_term] <- "document_term_table" + names(data)[which_covariate] <- "document_covariate_table" + data <- list(data) + depth <- list_depth(data) + } + if(depth == 2){ + nsubsets_in <- length(data) + nsubsets_out <- control$nsubsets + + if(nsubsets_in != 1 && nsubsets_in != nsubsets_out){ + stop("mimatched request for data subsets") + } + + if(nsubsets_out > 0){ + data_1 <- data[[1]] + for(i in 1:nsubsets_out){ + + rule <- control$rule + if(is.null(rule)){ + rule <- null_rule + } + if(nsubsets_in == 1){ + data_i <- data_1 + } else if (nsubsets_in > 1){ + data_i <- data[[i]] + } + + + if(!all(c("test", "train") %in% names(data_i))){ + which_term <- grep("term", names(data_i), ignore.case = TRUE) + which_covariate <- grep("covariate", names(data_i), + ignore.case = TRUE) + if(length(which_term) != 1){ + stop("one, and only one, element in `data` can include `term`") + } + if (length(which_covariate) == 0){ + msg <- "covariate table not provided, assuming equi-spaced data" + messageq(msg, control$quiet) + nobs <- nrow(data_i[[which_term]]) + covariate <- data.frame(time = 1:nobs) + data_i$document_covariate_table <- covariate + } else if(length(which_covariate) > 1){ + stop("at most one element in `data` can include `covariate`") + } + names(data_i)[which_term] <- "document_term_table" + names(data_i)[which_covariate] <- "document_covariate_table" + } + dtt <- data_i$document_term_table + dct <- data_i$document_covariate_table + args <- list(data = dtt, iteration = i) + test_train <- do.call(what = rule, args = args) + in_train <- test_train == "train" + in_test <- test_train == "test" + train <- list(document_term_table = dtt[in_train, ], + document_covariate_table = dct[in_train, ]) + test <- list(document_term_table = dtt[in_test, ], + document_covariate_table = dct[in_test, ]) + data[[i]] <- list(test = test, train = train) + } + names(data) <- paste0("subset_", 1:nsubsets_out) + } + depth <- list_depth(data) + } + if(depth == 3){ + + } + data + +} diff --git a/R/multi_LDA_TS.R b/R/multi_LDA_TS.R index 5d5c305d..a92b06c7 100644 --- a/R/multi_LDA_TS.R +++ b/R/multi_LDA_TS.R @@ -1,6 +1,7 @@ # runs multiple iterations of an LDA_TS model (or model suite) where each time # a subset of the data are held out + multi_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 0, niterations = 1, timename = "time", diff --git a/R/ptMCMC.R b/R/ptMCMC.R index 6695312a..fdd24375 100644 --- a/R/ptMCMC.R +++ b/R/ptMCMC.R @@ -1,3 +1,8 @@ +TS_fun <- function(control){ + fun <- eval(parse(text = paste0(control$model_fun, "_TS"))) + memoise_fun(fun, control$memoise) +} + #' @title Calculate ptMCMC summary diagnostics #' #' @description Summarize the step and swap acceptance rates as well as trip @@ -434,14 +439,14 @@ proposed_step_mods <- function(prop_changepts, inputs){ data <- inputs$data formula <- inputs$formula weights <- inputs$weights - TS_memo <- inputs$TS_memo + TS_function <- inputs$TS_function ntemps <- length(inputs$temps) control <- inputs$control timename <- inputs$timename out <- vector("list", length = ntemps) for (i in 1:ntemps){ - out[[i]] <- TS_memo(data, formula, prop_changepts[ , i], timename, - weights, control) + out[[i]] <- TS_function(data, formula, prop_changepts[ , i], timename, + weights, control) } out } @@ -594,7 +599,7 @@ prep_ptMCMC_inputs <- function(data, formula, nchangepoints, timename, out <- list(control = control, temps = prep_temp_sequence(control), pdist = prep_proposal_dist(nchangepoints, control), formula = formula, weights = weights, data = data, - TS_memo = memoise_fun(multinom_TS, control$memoise), + TS_function = TS_fun(control), timename = timename) class(out) <- c("ptMCMC_inputs", "list") out diff --git a/R/temper.R b/R/temper.R new file mode 100644 index 00000000..f6b2d461 --- /dev/null +++ b/R/temper.R @@ -0,0 +1,15 @@ + + +# use the existing temperature schematic as a start +# build a template into the temp_fun + +# now need to generalize prep_temp_sequence, but leverages existing control +# list approach exactly how we want + + +temp_fun <- function(chain = 1, control = list()){ + prep_temp_sequence(control = control)[chain] +} + + + diff --git a/R/utilities.R b/R/utilities.R index 667002d6..0c94796a 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -1,3 +1,89 @@ +time_order_data <- function(x, timename = "time"){ + time_order <- order(x[ , timename]) + x[time_order , ] +} + +#' @title Determine the depth of a list +#' +#' @description Evaluate an input for the depth of its nesting. +#' +#' @details If \code{xlist = list()}, then technically the input value is a +#' list, but is empty (of length \code{0}), so depth is returned as \code{0}. +#' +#' @param xlist Focal input \code{list}. +#' +#' @return \code{integer} value of the depth of the list. +#' +#' @examples +#' list_depth("a") +#' list_depth(list()) +#' list_depth(list("a")) +#' list_depth(list(list("a"))) +#' +#' @export +#' +list_depth <- function(xlist){ + xx <- match.call() + xxx <- deparse(xx[[2]]) + if(xxx == "list()"){ + 0L + } else if (inherits(xlist, "data.frame")){ + 0L + } else if (is.list(xlist)){ + 1L + max(sapply(xlist, list_depth)) + } else { + 0L + } +} + + +#' @title Update a list's elements +#' +#' @description Update a list with new values for elements +#' +#' @param orig_list \code{list} to be updated with \code{...}. +#' +#' @param ... Named elements to update in \code{orig_list} +#' +#' @return Updated \code{list}. +#' +#' @examples +#' orig_list <- list(a = 1, b = 3, c = 4) +#' update_list(orig_list) +#' update_list(orig_list, a = "a") +#' update_list(orig_list, a = 10, b = NULL) +#' +#' @export +#' +update_list <- function(orig_list = list(), ...){ + if(!is.list(orig_list)){ + stop("orig_list must be a list", call. = FALSE) + } + update_elems <- list(...) + nupdate_elems <- length(update_elems) + norig_elems <- length(orig_list) + update_list <- vector("list", length = norig_elems) + names(update_list) <- names(orig_list) + if(norig_elems > 0){ + for(i in 1:norig_elems){ + if(!is.null(orig_list[[i]])){ + update_list[[i]] <- orig_list[[i]] + } + } + } + if(nupdate_elems > 0){ + names_update_elems <- names(update_elems) + for(i in 1:nupdate_elems){ + if(!is.null(update_elems[[i]])){ + update_list[[names_update_elems[i]]] <- update_elems[[i]] + } + } + } + update_list +} + + + #' @title Calculate the log-sum-exponential (LSE) of a vector #' #' @description Calculate the exponent of a vector (offset by the max), sum @@ -355,7 +441,7 @@ check_topics <- function(topics){ return() } -#' @title Check that nseeds value or seeds vector is proper +#' @title Check that nseeds value or vector is proper #' #' @description Check that the vector of numbers of seeds is conformable to #' integers greater than 0. @@ -368,14 +454,14 @@ check_topics <- function(topics){ #' \code{NULL}. #' #' @examples -#' check_seeds(1) -#' check_seeds(2) +#' check_nseeds(1) +#' check_nseeds(2) #' #' @export #' -check_seeds <- function(nseeds){ - if (!is.numeric(nseeds) || any(nseeds %% 1 != 0)){ - stop("nseeds vector must be integers") +check_nreps <- function(nreps){ + if (!is.numeric(nreps) || any(nreps %% 1 != 0)){ + stop("nreps must be integer-conformable") } return() } diff --git a/eh.R b/eh.R new file mode 100644 index 00000000..af49290f --- /dev/null +++ b/eh.R @@ -0,0 +1,16 @@ + +select_LDA <- function(LDA_models = NULL, control = list()){ + if("LDA_set" %in% attr(LDA_models, "class") == FALSE){ + stop("LDA_models must be of class LDA_set") + } + control <- do.call("LDA_set_control", control) + measurer <- control$measurer + selector <- control$selector + lda_measured <- vapply(LDA_models, measurer, 0) %>% + matrix(ncol = 1) + lda_selected <- apply(lda_measured, 2, selector) + which_selected <- which(lda_measured %in% lda_selected) + out <- LDA_models[which_selected] + class(out) <- c("LDA_set", "list") + out +} diff --git a/eh2.R b/eh2.R new file mode 100644 index 00000000..7be8adab --- /dev/null +++ b/eh2.R @@ -0,0 +1,25 @@ + +logLik.LDA_VEM <- function(object, ...){ + val <- sum(object@loglikelihood) + df <- as.integer(object@control@estimate.alpha) + length(object@beta) + attr(val, "df") <- df + attr(val, "nobs") <- object@Dim[1] * object@Dim[2] + class(val) <- "logLik" + val +} + + +logLik_topicmodels_LDA <- function(object, method){ + if (method %in% c("VEM", "Gibbs")){ + val <- sum(object@loglikelihood) + df <- as.integer(object@control@estimate.alpha) + length(object@beta) + attr(val, "df") <- df + attr(val, "nobs") <- object@Dim[1] * object@Dim[2] + class(val) <- "logLik" + val + } else if (isnull(method)){ + logLik(object) + } else{ + stop("method not recognized") + } +} diff --git a/man/LDA_set.Rd b/man/LDA.Rd similarity index 58% rename from man/LDA_set.Rd rename to man/LDA.Rd index af15115e..960e1850 100644 --- a/man/LDA_set.Rd +++ b/man/LDA.Rd @@ -1,25 +1,19 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/LDA.R -\name{LDA_set} -\alias{LDA_set} -\alias{check_LDA_set_inputs} +\name{LDA} +\alias{LDA} +\alias{check_LDA_inputs} \title{Run a set of Latent Dirichlet Allocation models} \usage{ -LDA_set(document_term_table, topics = 2, nseeds = 1, - control = list()) +LDA(data, topics = 2:3, nreps = 2, control = list()) -check_LDA_set_inputs(document_term_table, topics, nseeds, control) +check_LDA_inputs(data, topics, nreps, control) } \arguments{ -\item{document_term_table}{Table of observation count data (rows: -documents, columns: terms. May be a class \code{matrix} or -\code{data.frame} but must be conformable to a matrix of integers, -as verified by \code{\link{check_document_term_table}}.} - \item{topics}{Vector of the number of topics to evaluate for each model. -Must be conformable to \code{integer} values.} +Must be conformable to \code{integer} values. REDUCED DIMENSIONALITY} -\item{nseeds}{Number of seeds (replicate starts) to use for each +\item{nreps}{Number of replicate starts to use for each value of \code{topics}. Must be conformable to \code{integer} value.} \item{control}{A \code{list} of parameters to control the running and @@ -27,12 +21,24 @@ selecting of LDA models. Values not input assume default values set by \code{\link{LDA_set_control}}. Values for running the LDAs replace defaults in (\code{LDAcontol}, see \code{\link[topicmodels]{LDA}} (but if \code{seed} is given, it will be overwritten; use \code{iseed} instead).} + +\item{document_term_table}{Table of observation count data (rows: +documents, columns: terms. May be a class \code{matrix} or +\code{data.frame} but must be conformable to a matrix of integers, +as verified by \code{\link{check_document_term_table}}.} + +\item{object}{A \code{LDA_VEM}-class object.} + +\item{...}{Not used, simply included to maintain method compatibility.} } \value{ \code{LDA_set}: \code{list} (class: \code{LDA_set}) of LDA models (class: \code{LDA_VEM}). \code{check_LDA_set_inputs}: an error message is thrown if any input is improper, otherwise \code{NULL}. + +Log likelihood of the model \code{logLik}, also with \code{df} + (degrees of freedom) and \code{nobs} (number of observations) values. } \description{ For a given dataset consisting of counts of words across @@ -47,11 +53,25 @@ For a given dataset consisting of counts of words across are proper for \code{LDA_set} (that the table of observations is conformable to a matrix of integers, the number of topics is an integer, the number of seeds is an integer and the controls list is proper). + +Imported but updated calculations from topicmodels package, as + applied to Latent Dirichlet Allocation fit with Variational Expectation + Maximization via \code{\link[topicmodels]{LDA}}. +} +\details{ +The number of degrees of freedom is 1 (for alpha) plus the number + of entries in the document-topic matrix. The number of observations is + the number of entries in the document-term matrix. } \examples{ data(rodents) lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) + r_LDA <- LDA(lda_data, topics = 2, nseeds = 2) + + data(rodents) + lda_data <- rodents$document_term_table + r_LDA <- LDA_set(lda_data, topics = 2) + logLik(r_LDA[[1]]) } \references{ @@ -63,4 +83,17 @@ Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic Models. \emph{Journal of Statistical Software} \strong{40}:13. \href{https://www.jstatsoft.org/article/view/v040i13}{link}. + +Buntine, W. 2002. Variational extensions to EM and multinomial PCA. + \emph{European Conference on Machine Learning, Lecture Notes in Computer + Science} \strong{2430}:23-34. \href{https://bit.ly/327sltH}{link}. + + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic + Models. \emph{Journal of Statistical Software} \strong{40}:13. + \href{https://www.jstatsoft.org/article/view/v040i13}{link}. + + Hoffman, M. D., D. M. Blei, and F. Bach. 2010. Online learning for + latent Dirichlet allocation. \emph{Advances in Neural Information + Processing Systems} \strong{23}:856-864. + \href{https://bit.ly/2LEr5sb}{link}. } diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd index fee42e29..f10c1af5 100644 --- a/man/LDA_TS_control.Rd +++ b/man/LDA_TS_control.Rd @@ -2,14 +2,14 @@ % Please edit documentation in R/LDA_TS.R \name{LDA_TS_control} \alias{LDA_TS_control} -\title{Create the controls list for the LDATS model} +\title{Create the controls list for an LDATS model set} \usage{ LDA_TS_control(quiet = FALSE, measurer_LDA = AIC, selector_LDA = min, iseed = 2, memoise = TRUE, response = "gamma", lambda = 0, measurer_TS = AIC, selector_TS = min, ntemps = 6, penultimate_temp = 2^6, ultimate_temp = 1e+10, q = 0, nit = 10000, magnitude = 12, burnin = 0, thin_frac = 1, - summary_prob = 0.95, seed = NULL, ...) + summary_prob = 0.95, seed = NULL, soften = TRUE, ...) } \arguments{ \item{quiet}{\code{logical} indicator of whether the model should run diff --git a/man/LDA_control.Rd b/man/LDA_control.Rd new file mode 100644 index 00000000..609214ff --- /dev/null +++ b/man/LDA_control.Rd @@ -0,0 +1,41 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{LDA_control} +\alias{LDA_control} +\title{Create control list for set of LDA models} +\usage{ +LDA_control(LDA_function = topicmodels_LDA, LDA_args = list(method = + "VEM", seeded = TRUE), measurer_function = AIC, + measurer_args = list(), selector_function = min, + selector_args = list(), soften = TRUE, quiet = FALSE) +} +\arguments{ +\item{LDA_function}{\code{function} used for the LDA model. Defaults to +classical LDA as coded via \code{topicmodels}' +\code{\link[topicmodels]{LDA}}.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly.} + +\item{measurer, selector}{Function names for use in evaluation of the LDA +models. \code{measurer} is used to create a value for each model +and \code{selector} operates on the values to choose the model(s) to +pass on.} + +\item{args}{\code{list} of arguments to \code{LDA_function}.} + +\item{...}{Arguments to be passed to \code{LDA_function} as a +\code{control} input.} +} +\value{ +\code{list} for controlling the LDA model fit. +} +\description{ +This function provides a simple creation and definition of + the list used to control the set of LDA models, regardless of how they + are implemented. +} +\examples{ + LDA_set_control() + +} diff --git a/man/LDA_msg.Rd b/man/LDA_msg.Rd index 125195bd..be56a768 100644 --- a/man/LDA_msg.Rd +++ b/man/LDA_msg.Rd @@ -4,14 +4,14 @@ \alias{LDA_msg} \title{Create the model-running-message for an LDA} \usage{ -LDA_msg(mod_topics, mod_seeds, control = list()) +LDA_msg(topics, rep, quiet = FALSE) } \arguments{ -\item{mod_topics}{\code{integer} value corresponding to the number of +\item{LDA_topics}{\code{integer} value corresponding to the number of topics in the model.} -\item{mod_seeds}{\code{integer} value corresponding to the seed used for -the model.} +\item{LDA_rep}{\code{integer} value corresponding to the replicate number +for the run of the model.} \item{control}{Class \code{LDA_controls} list of control parameters to be used in \code{LDA} (note that "seed" will be overwritten).} diff --git a/man/LDA_set_control.Rd b/man/LDA_set_control.Rd deleted file mode 100644 index 9fe5aa11..00000000 --- a/man/LDA_set_control.Rd +++ /dev/null @@ -1,36 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{LDA_set_control} -\alias{LDA_set_control} -\title{Create control list for set of LDA models} -\usage{ -LDA_set_control(quiet = FALSE, measurer = AIC, selector = min, - iseed = 2, ...) -} -\arguments{ -\item{quiet}{\code{logical} indicator of whether the model should run -quietly.} - -\item{measurer, selector}{Function names for use in evaluation of the LDA -models. \code{measurer} is used to create a value for each model -and \code{selector} operates on the values to choose the model(s) to -pass on.} - -\item{iseed}{\code{integer} initial seed for the model set.} - -\item{...}{Additional arguments to be passed to -\code{\link[topicmodels]{LDA}} as a \code{control} input.} -} -\value{ -\code{list} for controlling the LDA model fit. -} -\description{ -This function provides a simple creation and definition of - the list used to control the set of LDA models. It is set up to be easy - to work with the existing control capacity of - \code{\link[topicmodels]{LDA}}. -} -\examples{ - LDA_set_control() - -} diff --git a/man/check_seeds.Rd b/man/check_nreps.Rd similarity index 76% rename from man/check_seeds.Rd rename to man/check_nreps.Rd index 82912be8..2c1886cd 100644 --- a/man/check_seeds.Rd +++ b/man/check_nreps.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.R -\name{check_seeds} -\alias{check_seeds} -\title{Check that nseeds value or seeds vector is proper} +\name{check_nreps} +\alias{check_nreps} +\title{Check that nseeds value or vector is proper} \usage{ -check_seeds(nseeds) +check_nreps(nreps) } \arguments{ \item{nseeds}{\code{integer} number of seeds (replicate starts) to use for @@ -20,7 +20,7 @@ Check that the vector of numbers of seeds is conformable to integers greater than 0. } \examples{ - check_seeds(1) - check_seeds(2) + check_nseeds(1) + check_nseeds(2) } diff --git a/man/logLik.LDA_VEM.Rd b/man/logLik.LDA_VEM.Rd deleted file mode 100644 index a0744fd1..00000000 --- a/man/logLik.LDA_VEM.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{logLik.LDA_VEM} -\alias{logLik.LDA_VEM} -\title{Calculate the log likelihood of a VEM LDA model fit} -\usage{ -\method{logLik}{LDA_VEM}(object, ...) -} -\arguments{ -\item{object}{A \code{LDA_VEM}-class object.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -Log likelihood of the model \code{logLik}, also with \code{df} - (degrees of freedom) and \code{nobs} (number of observations) values. -} -\description{ -Imported but updated calculations from topicmodels package, as - applied to Latent Dirichlet Allocation fit with Variational Expectation - Maximization via \code{\link[topicmodels]{LDA}}. -} -\details{ -The number of degrees of freedom is 1 (for alpha) plus the number - of entries in the document-topic matrix. The number of observations is - the number of entries in the document-term matrix. -} -\examples{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2) - logLik(r_LDA[[1]]) - -} -\references{ -Buntine, W. 2002. Variational extensions to EM and multinomial PCA. - \emph{European Conference on Machine Learning, Lecture Notes in Computer - Science} \strong{2430}:23-34. \href{https://bit.ly/327sltH}{link}. - - Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic - Models. \emph{Journal of Statistical Software} \strong{40}:13. - \href{https://www.jstatsoft.org/article/view/v040i13}{link}. - - Hoffman, M. D., D. M. Blei, and F. Bach. 2010. Online learning for - latent Dirichlet allocation. \emph{Advances in Neural Information - Processing Systems} \strong{23}:856-864. - \href{https://bit.ly/2LEr5sb}{link}. -} diff --git a/man/package_LDA_TS.Rd b/man/package_LDA_TS.Rd index 2cb9418b..bcc9299c 100644 --- a/man/package_LDA_TS.Rd +++ b/man/package_LDA_TS.Rd @@ -4,20 +4,20 @@ \alias{package_LDA_TS} \title{Package the output of LDA_TS} \usage{ -package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs) +package_LDA_TS(LDAs, TSs) } \arguments{ \item{LDAs}{List (class: \code{LDA_set}) of LDA models (class: \code{LDA}), as returned by \code{\link{LDA_set}}.} -\item{sel_LDA}{A reduced version of \code{LDAs} that only includes the -LDA model(s) selected by \code{\link{select_LDA}}. Still should be of -class \code{LDA_set}.} - \item{TSs}{Class \code{TS_on_LDA} list of results from \code{\link{TS}} applied for each model on each LDA model input, as returned by \code{\link{TS_on_LDA}}.} +\item{sel_LDA}{A reduced version of \code{LDAs} that only includes the +LDA model(s) selected by \code{\link{select_LDA}}. Still should be of +class \code{LDA_set}.} + \item{sel_TSs}{A reduced version of \code{TSs} (of class \code{TS_fit}) that only includes the TS model chosen via \code{\link{select_TS}}.} } diff --git a/man/prep_LDA_control.Rd b/man/prep_LDA_control.Rd deleted file mode 100644 index 6fb0080d..00000000 --- a/man/prep_LDA_control.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{prep_LDA_control} -\alias{prep_LDA_control} -\title{Set the control inputs to include the seed} -\usage{ -prep_LDA_control(seed, control = list()) -} -\arguments{ -\item{seed}{\code{integer} used to set the seed of the specific model.} - -\item{control}{Named list of control parameters to be used in -\code{\link[topicmodels]{LDA}} Note that if \code{control} has an -element named \code{seed} it will be overwritten by the \code{seed} -argument of \code{prep_LDA_control}.} -} -\value{ -\code{list} of controls to be used in the LDA. -} -\description{ -Update the control list for the LDA model with the specific - seed as indicated. And remove controls not used within the LDA itself. -} -\examples{ - prep_LDA_control(seed = 1) - -} diff --git a/man/print.LDA_TS.Rd b/man/print.LDA_TS.Rd index 0a879ec2..2be20753 100644 --- a/man/print.LDA_TS.Rd +++ b/man/print.LDA_TS.Rd @@ -9,7 +9,7 @@ \arguments{ \item{x}{Class \code{LDA_TS} object to be printed.} -\item{...}{Not used, simply included to maintain method compatibility.} +\item{...}{Passed to lower-level print calls.} } \value{ The selected models in \code{x} as a two-element \code{list} with diff --git a/man/update_list.Rd b/man/update_list.Rd new file mode 100644 index 00000000..83c2a2e1 --- /dev/null +++ b/man/update_list.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{update_list} +\alias{update_list} +\title{Update a list's elements} +\usage{ +update_list(orig_list = list(), ...) +} +\arguments{ +\item{orig_list}{\code{list} to be updated with \code{...}.} + +\item{...}{Named elements to update in \code{orig_list}} +} +\value{ +Updated \code{list}. +} +\description{ +Update a list with new values for elements +} +\examples{ + orig_list <- list(a = 1, b = 3, c = 4) + update_list(orig_list) + update_list(orig_list, a = "a") + update_list(orig_list, a = 10, b = NULL) + +} diff --git a/notes.R b/notes.R index ec6739c4..b6653bc7 100644 --- a/notes.R +++ b/notes.R @@ -1,6 +1,37 @@ + +standardized output from LDA functions +s3 object with +params (however they're provided, collated into a list) +document_topic_table +log_likelihood as a logLik object +data used to fit the model + +def still in the thick of this +just need to take a solid break +currently working in LDA to get it to work with function args + + +LDA_set is now LDA and TS_on_LDA is now TS + +trying to really streamline the code at each level of the pipeline and such + +now LDA could be any of the linquistic decomposition analyses or whatever +including any of a number of "LDA" functions or models, so i'm revoking +the importing of LDA from topicmodels but keeping topicmodels imported +to allow calling of topicmodels::LDA from inside LDA (the default!) + + +generalizing multinom_TS to be compositional_TS + in the multi_LDA_TS in test_LDA_TS requires a predict.LDA_TS LDAT_TS - developing predict method \ No newline at end of file + developing predict method + +check seeds is now check_nreps +seed is rep + +introduction of soften logical variable +designed to help soften errors in pipelines through wrapping in tryCatch \ No newline at end of file diff --git a/tempering.R b/tempering.R new file mode 100644 index 00000000..9bcf9841 --- /dev/null +++ b/tempering.R @@ -0,0 +1,114 @@ +a work in progress toy example of tempering + +i think the pseudo priors should be inverse temps? +basically how theyre set now +messing around, have the basic idead, i think + +library(mcmc) + +set.seed(1) +xx <- c(rnorm(2e5, 0, 0.5), rnorm(1e5, 4, 0.7)) +plot(density(xx)) +plot(density(xx)$x, log(density(xx)$y), type = "l") + +prixx <- c(rnorm(2e4, 0, 1), rnorm(1e4, 5, 2.5)) +plot(density(prixx)) +plot(density(prixx)$x, log(density(prixx)$y), type = "l") + + +temp_fun <- function(chain){ + c(1, 2, 5)[chain] +} + +lik_fun <- function(params){ + out <- approxfun(density(xx))(params) + out[is.na(out)] <- 1e-100 + out +} + +prior_fun <- function(params){ + out <- approxfun(density(prixx))(params) + out[is.na(out)] <- 1e-100 + out +} + +pseudoprior_fun <- function(chain){ + c(1, 0.5, 0.2)[chain] +} + +eval_fun <- function(inputs, lik_fun, prior_fun, temp_fun, pseudoprior_fun){ + chain <- inputs[1] + params <- inputs[-1] + temp <- temp_fun(chain) + lik <- lik_fun(params) + prior <- prior_fun(params) + pseudoprior <- pseudoprior_fun(chain) + 1/temp * log(lik) + log(prior) + log(pseudoprior) +} + + +xv<-rep(NA,512) +yv1<-rep(NA,512) +yv2<-rep(NA,512) +yv3<-rep(NA,512) + +for(i in 1:512){ + xv[i] <- density(xx)$x[i] + yv1[i] <- eval_fun(c(1, xv[i]), lik_fun, prior_fun, temp_fun, + pseudoprior_fun) + yv2[i] <- eval_fun(c(2, xv[i]), lik_fun, prior_fun, temp_fun, + pseudoprior_fun) + yv3[i] <- eval_fun(c(3, xv[i]), lik_fun, prior_fun, temp_fun, + pseudoprior_fun) +} + +yvs <- c(yv1, yv2, yv3) +plot(xv, yv1, type = "l", + ylim = c(min(yvs, na.rm = TRUE), max(yvs, na.rm = TRUE))) +points(xv, yv2, type = "l", lty = 2) +points(xv, yv3, type = "l", lty = 3) + + + +neighbors <- matrix(FALSE, 3, 3) +neighbors[row(neighbors) == col(neighbors) + 1] <- TRUE +neighbors[row(neighbors) == col(neighbors) - 1] <- TRUE + + +#serial tempering +initial <- c(3, 0) +tout <- temper(eval_fun, initial = initial, neighbors = neighbors, + nbatch = 1000, blen = 1, + temp_fun = temp_fun, lik_fun = lik_fun, prior_fun = prior_fun, + pseudoprior_fun = pseudoprior_fun) + +#parallel tempering +initial <- matrix(c(0,0,0), 3, 1) +ptout <- temper(eval_fun, initial = initial, neighbors = neighbors, + nbatch = 1000, blen = 1, parallel = TRUE, + temp_fun = temp_fun, lik_fun = lik_fun, prior_fun = prior_fun, + pseudoprior_fun = pseudoprior_fun) + + + + +# notes on temper + +so, in looking through the mcmc package's code, the main calculator function +logh takes 3 arguments: the objective function (returns log unnormalized +density), the state, the R environment at the time of the C call within +the temper function + +basically, the temper function creates a function that is an evaluation +of the objective function at the state variable, but it doesn't actually do +the evaluation, it just declares the relationship. this way, the function +(via the relationship) can be used on any state variable value, most +especially the proposal values. +it then creates an object that is the environment (including things passed +into temper via ...). this allows both more global environment variables and +generalized inputs via ... to be passed down to where the execution of the +function actually happens + +this is because mcmc uses R to call C to call R + + diff --git a/working.R b/working.R index 1087e958..08a77224 100644 --- a/working.R +++ b/working.R @@ -1,3 +1,46 @@ +devtools::load_all() +data(rodents) + + +x<-(c(rnorm(1e4, 0,1), rnorm(1e4, 10, 2))) +x +density(x) + + + + +document_term_table <- rodents$document_term_table +document_covariate_table <- rodents$document_covariate_table +LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] +data <- document_covariate_table +data$gamma <- LDA_models@gamma +weights <- document_weights(document_term_table) + + +TSmod <- TS(data, formula = gamma ~ 1, nchangepoints = 1, + timename = "newmoon", weights, control = list()) + + + +oh yeah and "multinom" now needs to be "compositional" :( +or how exactly? +categorical? + + +prob(x)^(1/T) +(1/T)*log(prob(x)) + + + +plot(exp((1*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE))), ylim=c(0,0.4)) +points(exp((20*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE)))) + + +plot(((1*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE))), ylim=c(-4,0.4)) +points(((4*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE)))) + + + # have a rough set up for the data splitting, now need to actually # connect the pieces under the hood...like measurer? and selector? From 242400e7e7d45ce5ec82f94edb996b19cb81bd84 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Wed, 26 Feb 2020 02:11:53 -0800 Subject: [PATCH 06/43] working draftish of full LDA code --- NAMESPACE | 13 +- R/LDA.R | 439 +++++++++-------------------------------- R/LDA_TS.R | 410 +++----------------------------------- R/data_preparation.R | 80 +++++++- R/multi_LDA_TS.R | 155 --------------- man/LDA.Rd | 99 ---------- man/LDA_TS.Rd | 140 ------------- man/LDA_TS_control.Rd | 85 -------- man/LDA_control.Rd | 41 ---- man/LDA_msg.Rd | 25 --- man/list_depth.Rd | 28 +++ man/package_LDA_TS.Rd | 52 ----- man/package_LDA_set.Rd | 47 ----- man/print.LDA_TS.Rd | 30 --- man/select_LDA.Rd | 35 ---- 15 files changed, 228 insertions(+), 1451 deletions(-) delete mode 100644 R/multi_LDA_TS.R delete mode 100644 man/LDA.Rd delete mode 100644 man/LDA_TS.Rd delete mode 100644 man/LDA_TS_control.Rd delete mode 100644 man/LDA_control.Rd delete mode 100644 man/LDA_msg.Rd create mode 100644 man/list_depth.Rd delete mode 100644 man/package_LDA_TS.Rd delete mode 100644 man/package_LDA_set.Rd delete mode 100644 man/print.LDA_TS.Rd delete mode 100644 man/select_LDA.Rd diff --git a/NAMESPACE b/NAMESPACE index aafbad53..eb0e0cb8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,15 +6,9 @@ S3method(plot,LDA_TS) S3method(plot,LDA_VEM) S3method(plot,LDA_set) S3method(plot,TS_fit) -S3method(print,LDA_TS) S3method(print,TS_fit) S3method(print,TS_on_LDA) export(AICc) -export(LDA) -export(LDA_TS) -export(LDA_TS_control) -export(LDA_control) -export(LDA_msg) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) export(TS) @@ -23,8 +17,6 @@ export(TS_diagnostics_plot) export(TS_on_LDA) export(TS_summary_plot) export(autocorr_plot) -export(check_LDA_TS_inputs) -export(check_LDA_inputs) export(check_LDA_models) export(check_TS_inputs) export(check_TS_on_LDA_inputs) @@ -40,7 +32,6 @@ export(check_nreps) export(check_timename) export(check_topics) export(check_weights) -export(conform_LDA_TS_data) export(count_trips) export(diagnose_ptMCMC) export(document_weights) @@ -51,6 +42,7 @@ export(eta_diagnostics_plots) export(eval_step) export(expand_TS) export(iftrue) +export(list_depth) export(logsumexp) export(measure_eta_vcov) export(measure_rho_vcov) @@ -61,8 +53,6 @@ export(modalvalue) export(multinom_TS) export(multinom_TS_chunk) export(normalize) -export(package_LDA_TS) -export(package_LDA_set) export(package_TS) export(package_TS_on_LDA) export(package_chunk_fits) @@ -84,7 +74,6 @@ export(proposed_step_mods) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) -export(select_LDA) export(select_TS) export(set_LDA_TS_plot_cols) export(set_LDA_plot_colors) diff --git a/R/LDA.R b/R/LDA.R index 3adfa60c..045472f5 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -1,85 +1,43 @@ -#' @title Run a set of Latent Dirichlet Allocation models -#' -#' @description For a given dataset consisting of counts of words across -#' multiple documents in a corpus, conduct multiple Latent Dirichlet -#' Allocation (LDA) models (using the Variational Expectation -#' Maximization (VEM) algorithm; Blei \emph{et al.} 2003) to account for [1] -#' uncertainty in the number of latent topics and [2] the impact of initial -#' values in the estimation procedure. \cr \cr -#' \code{LDA_set} is a list wrapper of \code{\link[topicmodels]{LDA}} -#' in the \code{topicmodels} package (Grun and Hornik 2011). \cr \cr -#' \code{check_LDA_set_inputs} checks that all of the inputs -#' are proper for \code{LDA_set} (that the table of observations is -#' conformable to a matrix of integers, the number of topics is an integer, -#' the number of seeds is an integer and the controls list is proper). -#' -#' @param document_term_table Table of observation count data (rows: -#' documents, columns: terms. May be a class \code{matrix} or -#' \code{data.frame} but must be conformable to a matrix of integers, -#' as verified by \code{\link{check_document_term_table}}. -#' -#' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. REDUCED DIMENSIONALITY -#' -#' @param nreps Number of replicate starts to use for each -#' value of \code{topics}. Must be conformable to \code{integer} value. -#' -#' @param control A \code{list} of parameters to control the running and -#' selecting of LDA models. Values not input assume default values set -#' by \code{\link{LDA_set_control}}. Values for running the LDAs replace -#' defaults in (\code{LDAcontol}, see \code{\link[topicmodels]{LDA}} (but if -#' \code{seed} is given, it will be overwritten; use \code{iseed} instead). -#' -#' @return -#' \code{LDA_set}: \code{list} (class: \code{LDA_set}) of LDA models -#' (class: \code{LDA_VEM}). -#' \code{check_LDA_set_inputs}: an error message is thrown if any input is -#' improper, otherwise \code{NULL}. -#' -#' @references -#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet -#' Allocation. \emph{Journal of Machine Learning Research} -#' \strong{3}:993-1022. -#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. -#' -#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic -#' Models. \emph{Journal of Statistical Software} \strong{40}:13. -#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. -#' -#' @examples -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA(lda_data, topics = 2, nseeds = 2) -#' -#' @export -#' -LDA <- function(data, topics = 2:3, reps_per_topic = 2, control = list()){ - # check_args() - control <- do.call("LDA_control", control) +LDA <- function(data, topics = 2, reps = 1, control = list()){ + control <- do.call("LDA_control", control) messageq("----Linguistic Decomposition Analyses----", control$quiet) - - LDAs <- prep_LDA_models(data = data, topics = topics, - reps_per_topic = reps_per_topic, + LDAs <- prep_LDA_models(data = data, topics = topics, reps = reps, control = control) - nLDA <- length(LDA_models) - + nLDA <- length(LDAs) for (i in 1:nLDA){ - LDAs[[i]] <- LDA_call(data = LDAs[[i]]$data, topics = LDAs[[i]]$topics, - rep = LDAs[[i]]$rep, control = control) + LDAs[[i]] <- LDA_call(LDA = LDAs[[i]], control = control) } - # eval_LDA - # select_LDA - package_LDA(selected_LDAs = selected_LDAs, - LDAs = LDAs, LDA_topics = LDA_topics, LDA_seeds = LDA_seeds) + selected_LDAs <- select_LDA(LDAs = LDAs, control = control) + package_LDA(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) } -prep_LDA_models <- function(data, topics = 2:3, reps_per_topic = 2, - control = list()){ + +LDA_control <- function(LDA_function = topicmodels_LDA, + LDA_args = list(method = "VEM", seeded = TRUE), + measurer_function = AIC, + measurer_args = list(), + selector_function = which.min, + selector_args = list(), + nsubsets = 1, + subset_rule = NULL, + soften = TRUE, + quiet = FALSE){ + list(LDA_function = LDA_function, LDA_args = LDA_args, + measurer_function = measurer_function, measurer_args = measurer_args, + selector_function = selector_function, selector_args = selector_args, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) +} + +prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ data <- conform_data(data = data, control = control) subsets <- names(data) - LDA_topics <- rep(topics, each = length(seq(2, reps_per_topic * 2, 2))) - LDA_reps <- rep(seq(1, 1 + (reps_per_topic - 1), 1), length(topics)) + if(length(reps) < length(topics)){ + reps <- rep(reps, length(topics)) + } + LDA_topics <- rep(topics, reps) + LDA_reps <- sequence(reps) LDA_subsets <- rep(subsets, each = length(LDA_reps)) LDA_reps <- rep(LDA_reps, length(subsets)) LDA_topics <- rep(LDA_topics, length(subsets)) @@ -87,331 +45,128 @@ prep_LDA_models <- function(data, topics = 2:3, reps_per_topic = 2, LDAs <- vector("list", length = nLDA) for(i in 1:nLDA){ LDAs[[i]] <- list(data = data[[LDA_subsets[[i]]]], + data_subset = LDA_subsets[[i]], topics = LDA_topics[[i]], rep = LDA_reps[[i]]) } names(LDAs) <- paste0("model_", 1:nLDA) - LDAs } -select_LDA <- function(LDAs = list(), control = list()){ - vals <- measure_LDA(LDAs = LDAs, control = control) - -} - -#working in here -#coming along! -#but remember that we'll need to manage passing data around for test/train -# and the multiple versions of data - -measure_LDA <- function(LDAs = list(), control = list()){ - fun <- control$measurer_function - args <- control$measurer_args - nLDAs <- length(LDAs) - vals <- rep(NA, nLDAs) - for(i in 1:nLDAs){ - args <- update_list(args, object = LDAs[[i]]) - vals[i] <- do.call(what = fun, args = args) - } - vals -} - -LDA_call <- function(data, topics = 2, rep = 1, control = list()){ - control <- do.call("LDA_control", control) - LDA_msg(topics = topics, rep = rep, quiet = control$quiet) +LDA_call <- function(LDA = NULL, control = list()){ + control <- do.call("LDA_control", control) + LDA_msg(LDA = LDA, quiet = control$quiet) fun <- control$LDA_function - args <- update_list(control$LDA_args, data = data, topics = topics, - rep = rep) + args <- update_list(control$LDA_args, LDA = LDA) if(control$soften){ tryCatch(do.call(what = fun, args = args), - warning = LDA_call_soft_warning, - error = LDA_call_soft_error) + warning = function(x){eval(x$call)}, + error = function(x = list()){list(error = x$message)}) } else{ do.call(what = fun, args = args) } } -AIC.LDA <- function(object, ..., k = 2){ - lls <- logLik(object) - -2 * as.numeric(lls) + k * attr(lls, "df") -} -logLik.LDA <- function(object, ...){ - object$log_likelihood -} -LDA_call_soft_warning <- function(x){ - eval(x$call) -} -LDA_call_soft_error <- function(x = list()){ - list(params = list(), document_topic_matrix = data.frame(), - log_likelihood = NA, error = x$message) +LDA_msg <- function(LDA, quiet = FALSE){ + subset_msg <- paste0(" data subset ", LDA$data_subset) + topic_msg <- paste0(", ", LDA$topics, " topics") + rep_msg <- paste0(", replicate ", LDA$rep) + messageq(paste0(subset_msg, topic_msg, rep_msg), quiet) } -topicmodels_LDA <- function(data, topics = 2, rep = 1, method = "VEM", - seeded = TRUE, ...){ +topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ + data <- LDA$data + topics <- LDA$topics + rep <- LDA$rep + data_subset <- LDA$data_subset if(topics == 1){ - identity_LDA(data) + identity_LDA(LDA) } else{ fun_control <- list(...) if(seeded){ fun_control <- update_list(fun_control, seed = rep * 2) } - mod <- topicmodels::LDA(x = data$document_term_table, k = topics, + mod <- topicmodels::LDA(x = data$train$document_term_table, k = topics, method = method, control = fun_control) mod_ll <- sum(mod@loglikelihood) - df <- as.integer(mod@control@estimate.alpha) + length(mod@beta) + alpha <- tryCatch(as.integer(mod@control@estimate.alpha), + error = function(x){0}) + df <- alpha + length(mod@beta) attr(mod_ll, "df") <- df attr(mod_ll, "nobs") <- mod@Dim[1] * mod@Dim[2] class(mod_ll) <- "logLik" out <- list(params = list(alpha = mod@alpha, beta = mod@beta), document_topic_matrix = mod@gamma, - log_likelihood = mod_ll, data = data) + log_likelihood = mod_ll, data = data, + topics = topics, rep = rep, data_subset = data_subset) class(out) <- c("LDA", "list") out } } -identity_LDA <- function(data, topics = NULL, rep = 1){ - nterms <- NCOL(data$document_term_table) - if(is.null(topics)){ - nterms <- topics - } else if(topics != nterms){ - stop("number of topics does not equal number of terms") - } - document_topic_table <- data$document_term_table +identity_LDA <- function(LDA){ + data <- LDA$data + rep <- LDA$rep + data_subset <- LDA$data_subset + document_topic_table <- data$train$document_term_table document_topic_table <- document_topic_table / rowSums(document_topic_table) colnames(document_topic_table) <- NULL out <- list(params = list(), document_topic_table = document_topic_table, - log_likelihood = NULL, data = data) + log_likelihood = NULL, data = data, + topics = 1, rep = rep, data_subset = data_subset) class(out) <- c("LDA", "list") out } -#' @title Calculate the log likelihood of a VEM LDA model fit -#' -#' @description Imported but updated calculations from topicmodels package, as -#' applied to Latent Dirichlet Allocation fit with Variational Expectation -#' Maximization via \code{\link[topicmodels]{LDA}}. -#' -#' @details The number of degrees of freedom is 1 (for alpha) plus the number -#' of entries in the document-topic matrix. The number of observations is -#' the number of entries in the document-term matrix. -#' -#' @param object A \code{LDA_VEM}-class object. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return Log likelihood of the model \code{logLik}, also with \code{df} -#' (degrees of freedom) and \code{nobs} (number of observations) values. -#' -#' @references -#' Buntine, W. 2002. Variational extensions to EM and multinomial PCA. -#' \emph{European Conference on Machine Learning, Lecture Notes in Computer -#' Science} \strong{2430}:23-34. \href{https://bit.ly/327sltH}{link}. -#' -#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic -#' Models. \emph{Journal of Statistical Software} \strong{40}:13. -#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. -#' -#' Hoffman, M. D., D. M. Blei, and F. Bach. 2010. Online learning for -#' latent Dirichlet allocation. \emph{Advances in Neural Information -#' Processing Systems} \strong{23}:856-864. -#' \href{https://bit.ly/2LEr5sb}{link}. -#' -#' @examples -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 2) -#' logLik(r_LDA[[1]]) -#' -#' @export -#' - -#' @rdname LDA -#' -#' @export -#' -check_LDA_inputs <- function(data, topics, nreps, - control){ - check_document_term_table(document_term_table = data$document_term_table) - check_topics(topics = topics) - check_nreps(nreps = nreps) - check_control(control = control) +AIC.LDA <- function(object, ..., k = 2){ + lls <- logLik(object) + -2 * as.numeric(lls) + k * attr(lls, "df") } +logLik.LDA <- function(object, ...){ + object$log_likelihood +} -#' @title Select the best LDA model(s) for use in time series -#' -#' @description Select the best model(s) of interest from an -#' \code{LDA_set} object, based on a set of user-provided functions. The -#' functions default to choosing the model with the lowest AIC value. -#' -#' @param LDA_models An object of class \code{LDA_set} produced by -#' \code{\link{LDA_set}}. -#' -#' @param control A \code{list} of parameters to control the running and -#' selecting of LDA models. Values not input assume default values set -#' by \code{\link{LDA_set_control}}. Values for running the LDAs replace -#' defaults in (\code{LDAcontol}, see \code{\link[topicmodels]{LDA}} (but if -#' \code{seed} is given, it will be overwritten; use \code{iseed} instead). -#' -#' @return A reduced version of \code{LDA_models} that only includes the -#' selected LDA model(s). The returned object is still an object of -#' class \code{LDA_set}. -#' -#' @examples -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) -#' select_LDA(r_LDA) -#' -#' @export -#' -select_LDA <- function(LDA_models = NULL, control = list()){ - if("LDA_set" %in% attr(LDA_models, "class") == FALSE){ - stop("LDA_models must be of class LDA_set") - } - control <- do.call("LDA_set_control", control) - measurer <- control$measurer - selector <- control$selector - lda_measured <- vapply(LDA_models, measurer, 0) %>% - matrix(ncol = 1) - lda_selected <- apply(lda_measured, 2, selector) - which_selected <- which(lda_measured %in% lda_selected) - out <- LDA_models[which_selected] - class(out) <- c("LDA_set", "list") - out -} - -#' @title Package the output from LDA_set -#' -#' @description Name the elements (LDA models) and set the class -#' (\code{LDA_set}) of the models returned by \code{\link{LDA_set}}. -#' -#' @param mods Fitted models returned from \code{\link[topicmodels]{LDA}}. -#' -#' @param mod_topics Vector of \code{integer} values corresponding to the -#' number of topics in each model. -#' -#' @param mod_seeds Vector of \code{integer} values corresponding to the -#' seed used for each model. -#' -#' @return \code{lis} (class: \code{LDA_set}) of LDA models (class: -#' \code{LDA_VEM}). -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' topics <- 2 -#' nseeds <- 2 -#' control <- LDA_set_control() -#' mod_topics <- rep(topics, each = length(seq(2, nseeds * 2, 2))) -#' iseed <- control$iseed -#' mod_seeds <- rep(seq(iseed, iseed + (nseeds - 1)* 2, 2), length(topics)) -#' nmods <- length(mod_topics) -#' mods <- vector("list", length = nmods) -#' for (i in 1:nmods){ -#' LDA_msg(mod_topics[i], mod_seeds[i], control) -#' control_i <- prep_LDA_control(seed = mod_seeds[i], control = control) -#' mods[[i]] <- topicmodels::LDA(document_term_table, k = mod_topics[i], -#' control = control_i) -#' } -#' package_LDA_set(mods, mod_topics, mod_seeds) -#' } -#' -#' @export -#' -package_LDA_set <- function(mods, mod_topics, mod_seeds){ - if (!("LDA_VEM" %in% class(mods[[1]]))){ - stop("mods not of class LDA_VEM") +select_LDA <- function(LDAs = list(), control = list()){ + nLDAs <- length(LDAs) + maxtopics <- 0 + for(i in 1:nLDAs){ + maxtopics <- max(c(maxtopics, LDAs[[i]]$topics)) } - check_topics(mod_topics) - if (!is.numeric(mod_seeds) || any(mod_seeds%% 1 != 0)){ - stop("mod_seeds must be integers") + if(maxtopics == 1){ + return(LDAs) } - names(mods) <- paste0("k: ", mod_topics, ", seed: ", mod_seeds) - class(mods) <- c("LDA_set", "list") - mods + vals <- measure_LDA(LDAs = LDAs, control = control) + fun <- control$selector_function + args <- update_list(control$selector_args, x = vals) + selection <- do.call(what = fun, args = args) + LDAs[[selection]] } -#' @title Create the model-running-message for an LDA -#' -#' @description Produce and print the message for a given LDA model. -#' -#' @param LDA_topics \code{integer} value corresponding to the number of -#' topics in the model. -#' -#' @param LDA_rep \code{integer} value corresponding to the replicate number -#' for the run of the model. -#' -#' @param control Class \code{LDA_controls} list of control parameters to be -#' used in \code{LDA} (note that "seed" will be overwritten). -#' -#' @examples -#' LDA_msg(mod_topics = 4, mod_seeds = 2) -#' -#' @export -#' -LDA_msg <- function(topics, rep, quiet = FALSE){ - check_topics(topics) - check_nreps(rep) - topic_msg <- paste0(" ", topics, " topics") - rep_msg <- paste0(", seed ", rep) - messageq(paste0(topic_msg, rep_msg), quiet) +measure_LDA <- function(LDAs = list(), control = list()){ + fun <- control$measurer_function + args <- control$measurer_args + nLDAs <- length(LDAs) + vals <- rep(NA, nLDAs) + for(i in 1:nLDAs){ + args <- update_list(args, object = LDAs[[i]]) + vals_i <- do.call(what = fun, args = args) + if(length(vals_i) != 0){ + vals[i] <- vals_i + } + } + vals } -#' @title Create control list for set of LDA models -#' -#' @description This function provides a simple creation and definition of -#' the list used to control the set of LDA models, regardless of how they -#' are implemented. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly. -#' -#' @param measurer,selector Function names for use in evaluation of the LDA -#' models. \code{measurer} is used to create a value for each model -#' and \code{selector} operates on the values to choose the model(s) to -#' pass on. -#' -#' @param args \code{list} of arguments to \code{LDA_function}. -#' -#' @param LDA_function \code{function} used for the LDA model. Defaults to -#' classical LDA as coded via \code{topicmodels}' -#' \code{\link[topicmodels]{LDA}}. -#' -#' @param ... Arguments to be passed to \code{LDA_function} as a -#' \code{control} input. -#' -#' @return \code{list} for controlling the LDA model fit. -#' -#' @examples -#' LDA_set_control() -#' -#' @export -#' -LDA_control <- function(LDA_function = topicmodels_LDA, - LDA_args = list(method = "VEM", seeded = TRUE), - measurer_function = AIC, - measurer_args = list(), - selector_function = min, - selector_args = list(), - nsubsets = 1, - subset_rule = NULL, - soften = TRUE, - quiet = FALSE){ - list(LDA_function = LDA_function, LDA_args = LDA_args, - measurer_function = measurer_function, measurer_args = measurer_args, - selector_function = selector_function, selector_args = selector_args, - nsubsets = nsubsets, subset_rule = subset_rule, - soften = soften, quiet = quiet) +package_LDA <- function(selected_LDAs, LDAs, control = list()){ + out <- list(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) + class(out) <- c("LDA_set", "list") + out } - diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 16c54172..67bf475e 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,400 +1,38 @@ -predict.LDA_TS <- function(object, newdata = NULL, control = list(), ...){ - control <- do.call("LDA_TS_control", control) - TS_mod <- object[["Selected TS model"]] - TS_predict <- predict.TS(object = TS_mod, - newdata = newdata$document_covariate_table, - control = control, ...) -} - - -#' @title Run a full set of Latent Dirichlet Allocations and Time -#' Series models -#' -#' @description Conduct a complete LDATS analysis (Christensen -#' \emph{et al.} 2018), including running a suite of Latent Dirichlet -#' Allocation (LDA) models (Blei \emph{et al.} 2003, Grun and Hornik 2011) -#' via \code{\link{LDA_set}}, selecting LDA model(s) via -#' \code{\link{select_LDA}}, running a complete set of Bayesian Time Series -#' (TS) models (Western and Kleykamp 2004) via \code{\link{TS_on_LDA}} on -#' the chosen LDA model(s), and selecting the best TS model via -#' \code{\link{select_TS}}. \cr \cr -#' \code{conform_LDA_TS_data} converts the \code{data} input to -#' match internal and sub-function specifications. \cr \cr -#' \code{check_LDA_TS_inputs} checks that the inputs to -#' \code{LDA_TS} are of proper classes for a full analysis. -#' -#' @param data Either a document term table or a list including at least -#' a document term table (with the word "term" in the name of the element) -#' and optionally also a document covariate table (with the word -#' "covariate" in the name of the element). -#' \cr \cr -#' The document term table is a table of observation count data (rows: -#' documents, columns: terms) that may be a \code{matrix} or -#' \code{data.frame}, but must be conformable to a matrix of integers, -#' as verified by \code{\link{check_document_term_table}}. -#' \cr \cr -#' The document covariate table is a table of associated data (rows: -#' documents, columns: time index and covariate options) that may be a -#' \code{matrix} or \code{data.frame}, but must be a conformable to a data -#' table, as verified by \code{\link{check_document_covariate_table}}. Every -#' model needs a covariate to describe the time value for each document -#' (in whatever units and whose name in the table is input in -#' \code{timename}) that dictates the application of the change points. -#' \strong{\emph{If a covariate table is not provided, the model assumes the -#' observations were equi-spaced in time}}. All covariates named within -#' specific models in \code{formulas} must be included. -#' -#' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. -#' -#' @param nseeds \code{integer} number of seeds (replicate starts) to use for -#' each value of \code{topics} in the LDAs. Must be conformable to -#' \code{integer} value. -#' -#' @param formulas Vector of \code{\link[stats]{formula}}(s) for the -#' continuous (non-change point) component of the time series models. Any -#' predictor variable included in a formula must also be a column in the -#' \code{document_covariate_table}. Each element (formula) in the vector -#' is evaluated for each number of change points and each LDA model. -#' -#' @param nchangepoints Vector of \code{integer}s corresponding to the number -#' of change points to include in the time series models. 0 is a valid input -#' corresponding to no change points (\emph{i.e.}, a singular time series -#' model), and the current implementation can reasonably include up to 6 -#' change points. Each element in the vector is the number of change points -#' used to segment the data for each formula (entry in \code{formulas}) -#' component of the TS model, for each selected LDA model. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional input for overriding standard weighting for -#' documents in the time series. Defaults to \code{TRUE}, -#' translating to an appropriate weighting of the documents -#' based on the size (number of words) each document (the result of -#' \code{\link[topicmodels]{LDA}} is a matrix of proportions, which does not -#' account for size differences among documents. Alternatively can be -#' \code{NULL} for an equal weighting among documents or a \code{numeric} -#' vector. -#' -#' @param control A \code{list} of parameters to control the running and -#' selecting of LDA and TS models. Values not input assume default values -#' set by \code{\link{LDA_TS_control}}. -#' -#' @param quiet \code{logical} indicator for \code{conform_LDA_TS_data} to -#' indicate if messages should be printed. -#' -#' @return -#' \code{LDA_TS}: a class \code{LDA_TS} list object including all -#' fitted LDA and TS models and selected models specifically as elements -#' \code{"LDA models"} (from \code{\link{LDA_set}}), -#' \code{"Selected LDA model"} (from \code{\link{select_LDA}}), -#' \code{"TS models"} (from \code{\link{TS_on_LDA}}), and -#' \code{"Selected TS model"} (from \code{\link{select_TS}}). \cr \cr -#' \code{conform_LDA_TS_data}: a data \code{list} that is ready for analyses -#' using the stage-specific functions. \cr \cr -#' \code{check_LDA_TS_inputs}: an error message is thrown if any input is -#' improper, otherwise \code{NULL}. -#' -#' @references -#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet -#' Allocation. \emph{Journal of Machine Learning Research} -#' \strong{3}:993-1022. -#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. -#' -#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. -#' Long-term community change through multiple rapid transitions in a -#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. -#' \href{https://doi.org/10.1002/ecy.2373}{link}. -#' -#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic -#' Models. \emph{Journal of Statistical Software} \strong{40}:13. -#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. -#' -#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for -#' historical time series analysis. \emph{Political Analysis} -#' \strong{12}:354-374. -#' \href{https://doi.org/10.1093/pan/mph023}{link}. -#' -#' @examples -#' data(rodents) -#' \donttest{ -#' mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, -#' nchangepoints = 1, timename = "newmoon") -#' } -#' conform_LDA_TS_data(rodents) -#' check_LDA_TS_inputs(rodents, timename = "newmoon") -#' -#' @export -#' -LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, +LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ - check_LDA_TS_inputs(data = data, topics = topics, nseeds = nseeds, - formulas = formulas, nchangepoints = nchangepoints, - timename = timename, weights = weights, - control = control) control <- do.call("LDA_TS_control", control) - data <- conform_LDA_TS_data(data, control$quiet) - + data <- conform_data(data = data, control = control) LDAs <- LDA(data = data, topics = topics, nseeds = nseeds, control = control$LDA_control) - TSs <- TS(LDAs = ldas, data = data, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control$TS_control) - - package_LDA_TS(LDAs = LDAs, TSs = TSs) - -} - - - -#' @rdname LDA_TS -#' -#' @export -#' -conform_LDA_TS_data <- function(data, quiet = FALSE){ - if(inherits(data, "data.frame") | inherits(data, "matrix")){ - msg <- "covariate table not provided, assuming equi-spaced data" - messageq(msg, quiet) - nobs <- nrow(data) - covariate <- data.frame(time = 1:nobs) - data <- list(document_term_table = data, - document_covariate_table = covariate) - } else if(inherits(data, "list")){ - which_term <- grep("term", names(data), ignore.case = TRUE) - which_covariate <- grep("covariate", names(data), ignore.case = TRUE) - if(length(which_term) != 1){ - stop("one, and only one, element in `data` can include `term`") - } - if (length(which_covariate) == 0){ - msg <- "covariate table not provided, assuming equi-spaced data" - messageq(msg, quiet) - nobs <- nrow(data[[which_term]]) - covariate <- data.frame(time = 1:nobs) - data$document_covariate_table <- covariate - } else if(length(which_covariate) > 1){ - stop("at most one element in `data` can include `covariate`") - } - names(data)[which_term] <- "document_term_table" - names(data)[which_covariate] <- "document_covariate_table" - } else{ - stop("data must be a data.frame, matrix, or list") - } - data } -#' @rdname LDA_TS -#' -#' @export -#' -check_LDA_TS_inputs <- function(data = NULL, topics = 2, nseeds = 1, - formulas = ~ 1, nchangepoints = 0, - timename = "time", weights = TRUE, - control = list()){ - check_control(control) - control <- do.call("LDA_TS_control", control) - data <- conform_LDA_TS_data(data = data, quiet = control$quiet) - weights <- iftrue(weights, document_weights(data$document_term_table)) - check_document_covariate_table(document_covariate_table = - data$document_covariate_table, - document_term_table = - data$document_term_table) - check_timename(document_covariate_table = data$document_covariate_table, - timename = timename) - check_formulas(formulas = formulas, - document_covariate_table = data$document_covariate_table, - control = control$TS_control) - check_nchangepoints(nchangepoints = nchangepoints) - check_weights(weights = weights) - check_document_term_table(document_term_table = data$document_term_table) - check_topics(topics = topics) - check_nseeds(nseeds = nseeds) -} -#' @title Print the selected LDA and TS models of LDA_TS object -#' -#' @description Convenience function to print only the selected elements of a -#' \code{LDA_TS}-class object returned by \code{\link{LDA_TS}} -#' -#' @param x Class \code{LDA_TS} object to be printed. -#' -#' @param ... Passed to lower-level print calls. -#' -#' @return The selected models in \code{x} as a two-element \code{list} with -#' the TS component only returning the non-hidden components. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, -#' nchangepoints = 1, timename = "newmoon") -#' print(mod) -#' } -#' -#' @export -#' -print.LDA_TS <- function(x, ...){ - print(x[["Selected LDA model"]], ...) - print(x[["Selected TS model"]], ...) - list(LDA = x[["Selected LDA model"]], TS = x[["Selected TS model"]]) -} -#' @title Package the output of LDA_TS -#' -#' @description Combine the objects returned by \code{\link{LDA_set}}, -#' \code{\link{select_LDA}}, \code{\link{TS_on_LDA}}, and -#' \code{\link{select_TS}}, name them as elements of the list, and -#' set the class of the list as \code{LDA_TS}, for the return from -#' \code{\link{LDA_TS}}. -#' -#' @param LDAs List (class: \code{LDA_set}) of LDA models (class: -#' \code{LDA}), as returned by \code{\link{LDA_set}}. -#' -#' @param sel_LDA A reduced version of \code{LDAs} that only includes the -#' LDA model(s) selected by \code{\link{select_LDA}}. Still should be of -#' class \code{LDA_set}. -#' -#' @param TSs Class \code{TS_on_LDA} list of results from \code{\link{TS}} -#' applied for each model on each LDA model input, as returned by -#' \code{\link{TS_on_LDA}}. -#' -#' @param sel_TSs A reduced version of \code{TSs} (of class \code{TS_fit}) -#' that only includes the TS model chosen via \code{\link{select_TS}}. -#' -#' @return Class \code{LDA_TS}-class object including all fitted models and -#' selected models specifically, ready to be returned from -#' \code{\link{LDA_TS}}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' data <- rodents -#' control <- LDA_TS_control() -#' dtt <- data$document_term_table -#' dct <- data$document_covariate_table -#' weights <- document_weights(dtt) -#' LDAs <- LDA_set(dtt, 2, 1, control$LDA_set_control) -#' sel_LDA <- select_LDA(LDAs, control$LDA_set_control) -#' TSs <- TS_on_LDA(sel_LDA, dct, ~1, 1, "newmoon", weights, -#' control$TS_control) -#' sel_TSs <- select_TS(TSs, control$TS_control) -#' package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs) -#' } -#' -#' @export -#' -package_LDA_TS <- function(LDAs, TSs){ - if (!("LDA_set" %in% class(LDAs))){ - stop("LDAs not of class LDA_set") - } - if (!("TS_on_LDA" %in% class(TSs))){ - stop("TSs not of class TS_on_LDA") - } - out <- list("LDA models" = LDAs, "TS models" = TSs) - class(out) <- c("LDA_TS", "list") - out +LDA_TS_control <- function(LDA_function = topicmodels_LDA, + LDA_args = list(method = "VEM", seeded = TRUE), + LDA_measurer_function = AIC, + LDA_measurer_args = list(), + LDA_selector_function = which.min, + LDA_selector_args = list(), + nsubsets = 1, + subset_rule = NULL, + soften = TRUE, + quiet = FALSE){ + + LDA_control <- LDA_control(LDA_function = LDA_function, LDA_args = LDA_args, + measurer_function = LDA_measurer_function, + measurer_args = LDA_measurer_args, + selector_function = LDA_selector_function, + selector_args = LDA_selector_args, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) + TS_control <- TS_control() + list(LDA_control = LDA_control, TS_control = TS_control, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) } -#' @title Create the controls list for an LDATS model set -#' -#' @description Create and define a list of control options used to run the -#' LDATS model, as implemented by \code{\link{LDA_TS}}. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly. -#' -#' @param measurer_LDA,selector_LDA Function names for use in evaluation of -#' the LDA models. \code{measurer_LDA} is used to create a value for each -#' model and \code{selector_LDA} operates on the values to choose the model. -#' -#' @param iseed \code{integer} initial seed for the LDA model set. -#' -#' @param ... Additional arguments to be passed to -#' \code{\link[topicmodels]{LDA}} as a \code{control} input. -#' -#' @param memoise \code{logical} indicator of whether the multinomial -#' functions should be memoised (via \code{\link[memoise]{memoise}}). -#' Memoisation happens to both \code{\link{multinom_TS}} and -#' \code{\link{multinom_TS_chunk}}. -#' -#' @param response \code{character} element indicating the response variable -#' used in the time series. Should be set to \code{"gamma"} for LDATS. -#' -#' @param lambda \code{numeric} "weight" decay term used to set the prior -#' on the regressors within each chunk-level model. Defaults to 0, -#' corresponding to a fully vague prior. -#' -#' @param measurer_TS,selector_TS Function names for use in evaluation of the -#' TS models. \code{measurer_TS} is used to create a value for each model -#' and \code{selector_TS} operates on the values to choose the model. -#' -#' @param ntemps \code{integer} number of temperatures (chains) to use in the -#' ptMCMC algorithm. -#' -#' @param penultimate_temp Penultimate temperature in the ptMCMC sequence. -#' -#' @param ultimate_temp Ultimate temperature in the ptMCMC sequence. -#' -#' @param q Exponent controlling the ptMCMC temperature sequence from the -#' focal chain (reference with temperature = 1) to the penultimate chain. 0 -#' (default) implies a geometric sequence. 1 implies squaring before -#' exponentiating. -#' -#' @param nit \code{integer} number of iterations (steps) used in the ptMCMC -#' algorithm. -#' -#' @param magnitude Average magnitude (defining a geometric distribution) -#' for the proposed step size in the ptMCMC algorithm. -#' -#' @param burnin \code{integer} number of iterations to remove from the -#' beginning of the ptMCMC algorithm. -#' -#' @param thin_frac Fraction of iterations to retain, from the ptMCMC. Must be -#' \eqn{(0, 1]}, and the default value of 1 represents no thinning. -#' -#' @param summary_prob Probability used for summarizing the posterior -#' distributions (via the highest posterior density interval, see -#' \code{\link[coda]{HPDinterval}}) of the TS model. -#' -#' @param seed Input to \code{set.seed} in the time series model for -#' replication purposes. -#' -#' @return \code{list} of control \code{lists}, with named elements -#' \code{LDAcontrol}, \code{TScontrol}, and \code{quiet}. -#' -#' @examples -#' LDA_TS_control() -#' -#' @export -#' -LDA_TS_control <- function(quiet = FALSE, measurer_LDA = AIC, - selector_LDA = min, iseed = 2, - memoise = TRUE, response = "gamma", lambda = 0, - measurer_TS = AIC, selector_TS = min, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e10, - q = 0, nit = 1e4, magnitude = 12, burnin = 0, - thin_frac = 1, summary_prob = 0.95, - seed = NULL, soften = TRUE, ...){ - LDAcontrol <- LDA_control(LDA_function = LDA_function, LDA_args = LDA_args, - measurer_function = measurer_function, measurer_args = measurer_args, - selector_function = selector_function, selector_args = selector_args, - soften = soften, quiet = quiet) - TScontrol <- TS_control(memoise = memoise, response = response, - lambda = lambda, measurer = measurer_TS, - selector = selector_TS, ntemps = ntemps, - penultimate_temp = penultimate_temp, - ultimate_temp = ultimate_temp, q = q, - nit = nit, magnitude = magnitude, quiet = quiet, - burnin = burnin, thin_frac = thin_frac, - summary_prob = summary_prob, seed = seed, - soften = soften) - list(LDA_control = LDAcontrol, TS_control = TScontrol, - soften = soften, quiet = quiet) -} diff --git a/R/data_preparation.R b/R/data_preparation.R index 99c86fcf..521b184b 100644 --- a/R/data_preparation.R +++ b/R/data_preparation.R @@ -99,13 +99,89 @@ conform_data <- function(data, control = list()){ document_covariate_table = dct[in_test, ]) data[[i]] <- list(test = test, train = train) } - names(data) <- paste0("subset_", 1:nsubsets_out) + names(data) <- 1:nsubsets_out } depth <- list_depth(data) } if(depth == 3){ - + + nsubsets_in <- length(data) + nsubsets_out <- control$nsubsets + + if(nsubsets_in != 1 && nsubsets_in != nsubsets_out){ + stop("mimatched request for data subsets") + } + + for(i in 1:nsubsets_out){ + + data_i <- data[[i]] + which_train <- grep("train", names(data_i), ignore.case = TRUE) + which_test <- grep("test", names(data_i), ignore.case = TRUE) + if(length(which_train) != 1){ + stop("only one, element in a `data` subset can include `train`") + } + if(length(which_test) != 1){ + stop("only one, element in a `data` subset can include `test`") + } + for(j in 1:2){ + data_ij <- data[[i]][[j]] + which_term <- grep("term", names(data_ij), ignore.case = TRUE) + which_covariate <- grep("covariate", names(data_ij), + ignore.case = TRUE) + if(length(which_term) != 1){ + stop("one, and only one, element in `data` can include `term`") + } + if (length(which_covariate) == 0){ + stop("covariate table not provided, can't be made from split data") + } else if(length(which_covariate) > 1){ + stop("at most one element in `data` can include `covariate`") + } + } + } } data } + + +# data subsetting rules + +null_rule <- function(data, iteration = 1){ + n <- NROW(data) + rep("train", n) +} + +# simple leave one outs with no buffer + +# assumes 1:1 between iteration and datum location to drop + +systematic_loo <- function(data, iteration = 1){ + leave_p_out(data = data, random = FALSE, locations = iteration) +} + +# randomly selected + +random_loo <- function(data, iteration = 1){ + leave_p_out(data = data) +} + +# fully flexible leave p out function allowing for buffers +# if random the test data are selected randomly, otherwise locations are used + +leave_p_out <- function(data, p = 1, pre = 0, post = 0, + random = TRUE, locations = NULL){ + n <- NROW(data) + test_train <- rep("train", n) + + if(random){ + locations <- sample(1:n, p) + } + + for(i in 1:p){ + hold_out <- (locations[i] - pre):(locations[i] + post) + test_train[hold_out] <- "out" + } + test_train[locations] <- "test" + test_train +} + diff --git a/R/multi_LDA_TS.R b/R/multi_LDA_TS.R deleted file mode 100644 index a92b06c7..00000000 --- a/R/multi_LDA_TS.R +++ /dev/null @@ -1,155 +0,0 @@ -# runs multiple iterations of an LDA_TS model (or model suite) where each time -# a subset of the data are held out - - -multi_LDA_TS <- function(data, topics = 2, nseeds = 1, formulas = ~ 1, - nchangepoints = 0, niterations = 1, - timename = "time", - weights = TRUE, control = list()){ - - check_multi_LDA_TS_inputs(data, topics, nseeds, formulas, nchangepoints, - timename, weights, control) - control <- do.call("multi_LDA_TS_control", control) - data <- conform_LDA_TS_data(data, control$quiet) - - mLDATS <- vector("list", length = niterations) - for(i in 1:niterations){ - - data_i <- split_LDA_TS_data(data, control, i) - LDATS_fit <- LDA_TS(data = data_i[["train"]], topics = topics, - nseeds = nseeds, - formulas = formulas, nchangepoints = nchangepoints, - timename = timename, weights = weights, - control = control) - test <- test_LDA_TS(LDATS_fit, data = data_i[["test"]], control) - mLDATS[[i]] <- list(LDA_TS = LDATS_fit, test = test, data = data_i) - } - names(mLDATS) <- paste0("multi_LDA_TS iteration ", 1:niterations) - - # select and package - - mLDATS -} - -test_LDA_TS <- function(LDATS_fit, data, control = list()){ - # need to make predictions cleanly - # predict method on LDA_TS which combines predict method on TS s - pred_data <- predict(LDATS_fit, newdata = data, control = control) - vapply(TS_models, measurer, 0) -} - -# rule should be a function, yeah? -# yes -# if rule is NULL, nothing is held out, like with a classical ldats -# its really test train out - -split_LDA_TS_data <- function(data = NULL, control = list(), iteration = 1){ - control <- do.call("multi_LDA_TS_control", control) - data <- conform_LDA_TS_data(data, control$quiet) - dtt <- data[["document_term_table"]] - dct <- data[["document_covariate_table"]] - rule <- control$rule - if(is.null(rule)){ - rule <- null_rule - } - arglist <- list(data = dtt, iteration = iteration) - test_train <- do.call(rule, arglist) - - train <- list(document_term_table = dtt[test_train == "train", ], - document_covariate_table = dct[test_train == "train", ]) - test <- list(document_term_table = dtt[test_train == "test", ], - document_covariate_table = dct[test_train == "test", ]) - list(train = train, test = test, test_train = test_train) -} - - -null_rule <- function(data, iteration = 1){ - n <- NROW(data) - rep("train", n) -} - -# simple leave one outs with no buffer - -# for use with exhaustive approach, -# as it assumes 1:1 between iteraction and datum location to drop - -exhaust_loo <- function(data, iteration = 1){ - leave_p_out(data = data, random = FALSE, locations = iteration) -} - -random_loo <- function(data, iteration = 1){ - leave_p_out(data = data) -} - -# fully flexible leave p out function allowing for buffers -# if random the test data are selected randomly, otherwise locations are used -leave_p_out <- function(data, p = 1, pre = 0, post = 0, - random = TRUE, locations = NULL){ - n <- NROW(data) - test_train <- rep("train", n) - - if(random){ - locations <- sample(1:n, p) - } - - for(i in 1:p){ - hold_out <- (locations[i] - pre):(locations[i] + post) - test_train[hold_out] <- "out" - } - test_train[locations] <- "test" - test_train -} - - - - -check_multi_LDA_TS_inputs <- function(data = NULL, - topics = 2, nseeds = 1, formulas = ~ 1, - nchangepoints = 0, - timename = "time", - weights = TRUE, - control = list()){ - check_control(control) - control <- do.call("multi_LDA_TS_control", control) - data <- conform_LDA_TS_data(data) - weights <- iftrue(weights, document_weights(data$document_term_table)) - check_document_covariate_table(data$document_covariate_table, - document_term_table = data$document_term_table) - check_timename(data$document_covariate_table, timename) - ts_control <- TS_control(control) - check_formulas(formulas, data$document_covariate_table, ts_control) - - check_nchangepoints(nchangepoints) - check_weights(weights) - check_document_term_table(data$document_term_table) - check_topics(topics) - check_seeds(nseeds) - -} - -# note that the controls here override the standard LDA_TS inputs with NULL -# for each of the measurer and selector functions for LDA and TS -# default here is I for selector, which just passes along (identity function) -# -multi_LDA_TS_control <- function(quiet = FALSE, measurer_LDA = logLik, - selector_LDA = I, iseed = 2, - memoise = TRUE, response = "gamma", - lambda = 0, measurer_TS = logLik, - selector_TS = I, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e10, - q = 0, nit = 1e4, magnitude = 12, burnin = 0, - thin_frac = 1, summary_prob = 0.95, - seed = NULL, measurer_LDA_TS = logLik, - selector_LDA_TS = I, - rule = exhaust_loo, ...){ - - list(quiet = quiet, measurer_LDA = measurer_LDA, - selector_LDA = selector_LDA, - iseed = iseed, memoise = memoise, response = response, lambda = lambda, - measurer_TS = measurer_TS, selector_TS = selector_TS, ntemps = ntemps, - penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, - q = q, nit = nit, magnitude = magnitude, burnin = burnin, - thin_frac = thin_frac, summary_prob = summary_prob, seed = seed, - measurer_LDA_TS = measurer_LDA_TS, selector_LDA_TS = selector_LDA_TS, - rule = rule) -} \ No newline at end of file diff --git a/man/LDA.Rd b/man/LDA.Rd deleted file mode 100644 index 960e1850..00000000 --- a/man/LDA.Rd +++ /dev/null @@ -1,99 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{LDA} -\alias{LDA} -\alias{check_LDA_inputs} -\title{Run a set of Latent Dirichlet Allocation models} -\usage{ -LDA(data, topics = 2:3, nreps = 2, control = list()) - -check_LDA_inputs(data, topics, nreps, control) -} -\arguments{ -\item{topics}{Vector of the number of topics to evaluate for each model. -Must be conformable to \code{integer} values. REDUCED DIMENSIONALITY} - -\item{nreps}{Number of replicate starts to use for each -value of \code{topics}. Must be conformable to \code{integer} value.} - -\item{control}{A \code{list} of parameters to control the running and -selecting of LDA models. Values not input assume default values set -by \code{\link{LDA_set_control}}. Values for running the LDAs replace -defaults in (\code{LDAcontol}, see \code{\link[topicmodels]{LDA}} (but if - \code{seed} is given, it will be overwritten; use \code{iseed} instead).} - -\item{document_term_table}{Table of observation count data (rows: -documents, columns: terms. May be a class \code{matrix} or -\code{data.frame} but must be conformable to a matrix of integers, -as verified by \code{\link{check_document_term_table}}.} - -\item{object}{A \code{LDA_VEM}-class object.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -\code{LDA_set}: \code{list} (class: \code{LDA_set}) of LDA models - (class: \code{LDA_VEM}). - \code{check_LDA_set_inputs}: an error message is thrown if any input is - improper, otherwise \code{NULL}. - -Log likelihood of the model \code{logLik}, also with \code{df} - (degrees of freedom) and \code{nobs} (number of observations) values. -} -\description{ -For a given dataset consisting of counts of words across - multiple documents in a corpus, conduct multiple Latent Dirichlet - Allocation (LDA) models (using the Variational Expectation - Maximization (VEM) algorithm; Blei \emph{et al.} 2003) to account for [1] - uncertainty in the number of latent topics and [2] the impact of initial - values in the estimation procedure. \cr \cr - \code{LDA_set} is a list wrapper of \code{\link[topicmodels]{LDA}} - in the \code{topicmodels} package (Grun and Hornik 2011). \cr \cr - \code{check_LDA_set_inputs} checks that all of the inputs - are proper for \code{LDA_set} (that the table of observations is - conformable to a matrix of integers, the number of topics is an integer, - the number of seeds is an integer and the controls list is proper). - -Imported but updated calculations from topicmodels package, as - applied to Latent Dirichlet Allocation fit with Variational Expectation - Maximization via \code{\link[topicmodels]{LDA}}. -} -\details{ -The number of degrees of freedom is 1 (for alpha) plus the number - of entries in the document-topic matrix. The number of observations is - the number of entries in the document-term matrix. -} -\examples{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA(lda_data, topics = 2, nseeds = 2) - - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2) - logLik(r_LDA[[1]]) - -} -\references{ -Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet - Allocation. \emph{Journal of Machine Learning Research} - \strong{3}:993-1022. - \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. - - Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic - Models. \emph{Journal of Statistical Software} \strong{40}:13. - \href{https://www.jstatsoft.org/article/view/v040i13}{link}. - -Buntine, W. 2002. Variational extensions to EM and multinomial PCA. - \emph{European Conference on Machine Learning, Lecture Notes in Computer - Science} \strong{2430}:23-34. \href{https://bit.ly/327sltH}{link}. - - Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic - Models. \emph{Journal of Statistical Software} \strong{40}:13. - \href{https://www.jstatsoft.org/article/view/v040i13}{link}. - - Hoffman, M. D., D. M. Blei, and F. Bach. 2010. Online learning for - latent Dirichlet allocation. \emph{Advances in Neural Information - Processing Systems} \strong{23}:856-864. - \href{https://bit.ly/2LEr5sb}{link}. -} diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd deleted file mode 100644 index 21d8c4a0..00000000 --- a/man/LDA_TS.Rd +++ /dev/null @@ -1,140 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{LDA_TS} -\alias{LDA_TS} -\alias{conform_LDA_TS_data} -\alias{check_LDA_TS_inputs} -\title{Run a full set of Latent Dirichlet Allocations and Time - Series models} -\usage{ -LDA_TS(data, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 0, timename = "time", weights = TRUE, - control = list()) - -conform_LDA_TS_data(data, quiet = FALSE) - -check_LDA_TS_inputs(data = NULL, topics = 2, nseeds = 1, - formulas = ~1, nchangepoints = 0, timename = "time", - weights = TRUE, control = list()) -} -\arguments{ -\item{data}{Either a document term table or a list including at least -a document term table (with the word "term" in the name of the element) -and optionally also a document covariate table (with the word -"covariate" in the name of the element). -\cr \cr -The document term table is a table of observation count data (rows: -documents, columns: terms) that may be a \code{matrix} or -\code{data.frame}, but must be conformable to a matrix of integers, -as verified by \code{\link{check_document_term_table}}. -\cr \cr -The document covariate table is a table of associated data (rows: -documents, columns: time index and covariate options) that may be a -\code{matrix} or \code{data.frame}, but must be a conformable to a data -table, as verified by \code{\link{check_document_covariate_table}}. Every -model needs a covariate to describe the time value for each document -(in whatever units and whose name in the table is input in -\code{timename}) that dictates the application of the change points. -\strong{\emph{If a covariate table is not provided, the model assumes the -observations were equi-spaced in time}}. All covariates named within -specific models in \code{formulas} must be included.} - -\item{topics}{Vector of the number of topics to evaluate for each model. -Must be conformable to \code{integer} values.} - -\item{nseeds}{\code{integer} number of seeds (replicate starts) to use for -each value of \code{topics} in the LDAs. Must be conformable to -\code{integer} value.} - -\item{formulas}{Vector of \code{\link[stats]{formula}}(s) for the -continuous (non-change point) component of the time series models. Any -predictor variable included in a formula must also be a column in the -\code{document_covariate_table}. Each element (formula) in the vector -is evaluated for each number of change points and each LDA model.} - -\item{nchangepoints}{Vector of \code{integer}s corresponding to the number -of change points to include in the time series models. 0 is a valid input -corresponding to no change points (\emph{i.e.}, a singular time series -model), and the current implementation can reasonably include up to 6 -change points. Each element in the vector is the number of change points -used to segment the data for each formula (entry in \code{formulas}) -component of the TS model, for each selected LDA model.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional input for overriding standard weighting for -documents in the time series. Defaults to \code{TRUE}, -translating to an appropriate weighting of the documents -based on the size (number of words) each document (the result of -\code{\link[topicmodels]{LDA}} is a matrix of proportions, which does not -account for size differences among documents. Alternatively can be -\code{NULL} for an equal weighting among documents or a \code{numeric} -vector.} - -\item{control}{A \code{list} of parameters to control the running and -selecting of LDA and TS models. Values not input assume default values -set by \code{\link{LDA_TS_control}}.} - -\item{quiet}{\code{logical} indicator for \code{conform_LDA_TS_data} to -indicate if messages should be printed.} -} -\value{ -\code{LDA_TS}: a class \code{LDA_TS} list object including all - fitted LDA and TS models and selected models specifically as elements - \code{"LDA models"} (from \code{\link{LDA_set}}), - \code{"Selected LDA model"} (from \code{\link{select_LDA}}), - \code{"TS models"} (from \code{\link{TS_on_LDA}}), and - \code{"Selected TS model"} (from \code{\link{select_TS}}). \cr \cr - \code{conform_LDA_TS_data}: a data \code{list} that is ready for analyses - using the stage-specific functions. \cr \cr - \code{check_LDA_TS_inputs}: an error message is thrown if any input is - improper, otherwise \code{NULL}. -} -\description{ -Conduct a complete LDATS analysis (Christensen - \emph{et al.} 2018), including running a suite of Latent Dirichlet - Allocation (LDA) models (Blei \emph{et al.} 2003, Grun and Hornik 2011) - via \code{\link{LDA_set}}, selecting LDA model(s) via - \code{\link{select_LDA}}, running a complete set of Bayesian Time Series - (TS) models (Western and Kleykamp 2004) via \code{\link{TS_on_LDA}} on - the chosen LDA model(s), and selecting the best TS model via - \code{\link{select_TS}}. \cr \cr - \code{conform_LDA_TS_data} converts the \code{data} input to - match internal and sub-function specifications. \cr \cr - \code{check_LDA_TS_inputs} checks that the inputs to - \code{LDA_TS} are of proper classes for a full analysis. -} -\examples{ - data(rodents) -\donttest{ - mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 1, timename = "newmoon") -} - conform_LDA_TS_data(rodents) - check_LDA_TS_inputs(rodents, timename = "newmoon") - -} -\references{ -Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet - Allocation. \emph{Journal of Machine Learning Research} - \strong{3}:993-1022. - \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. - - Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. - Long-term community change through multiple rapid transitions in a - desert rodent community. \emph{Ecology} \strong{99}:1523-1529. - \href{https://doi.org/10.1002/ecy.2373}{link}. - - Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic - Models. \emph{Journal of Statistical Software} \strong{40}:13. - \href{https://www.jstatsoft.org/article/view/v040i13}{link}. - - Western, B. and M. Kleykamp. 2004. A Bayesian change point model for - historical time series analysis. \emph{Political Analysis} - \strong{12}:354-374. - \href{https://doi.org/10.1093/pan/mph023}{link}. -} diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd deleted file mode 100644 index f10c1af5..00000000 --- a/man/LDA_TS_control.Rd +++ /dev/null @@ -1,85 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{LDA_TS_control} -\alias{LDA_TS_control} -\title{Create the controls list for an LDATS model set} -\usage{ -LDA_TS_control(quiet = FALSE, measurer_LDA = AIC, selector_LDA = min, - iseed = 2, memoise = TRUE, response = "gamma", lambda = 0, - measurer_TS = AIC, selector_TS = min, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e+10, q = 0, - nit = 10000, magnitude = 12, burnin = 0, thin_frac = 1, - summary_prob = 0.95, seed = NULL, soften = TRUE, ...) -} -\arguments{ -\item{quiet}{\code{logical} indicator of whether the model should run -quietly.} - -\item{measurer_LDA, selector_LDA}{Function names for use in evaluation of -the LDA models. \code{measurer_LDA} is used to create a value for each -model and \code{selector_LDA} operates on the values to choose the model.} - -\item{iseed}{\code{integer} initial seed for the LDA model set.} - -\item{memoise}{\code{logical} indicator of whether the multinomial -functions should be memoised (via \code{\link[memoise]{memoise}}). -Memoisation happens to both \code{\link{multinom_TS}} and -\code{\link{multinom_TS_chunk}}.} - -\item{response}{\code{character} element indicating the response variable -used in the time series. Should be set to \code{"gamma"} for LDATS.} - -\item{lambda}{\code{numeric} "weight" decay term used to set the prior -on the regressors within each chunk-level model. Defaults to 0, -corresponding to a fully vague prior.} - -\item{measurer_TS, selector_TS}{Function names for use in evaluation of the -TS models. \code{measurer_TS} is used to create a value for each model -and \code{selector_TS} operates on the values to choose the model.} - -\item{ntemps}{\code{integer} number of temperatures (chains) to use in the -ptMCMC algorithm.} - -\item{penultimate_temp}{Penultimate temperature in the ptMCMC sequence.} - -\item{ultimate_temp}{Ultimate temperature in the ptMCMC sequence.} - -\item{q}{Exponent controlling the ptMCMC temperature sequence from the -focal chain (reference with temperature = 1) to the penultimate chain. 0 -(default) implies a geometric sequence. 1 implies squaring before -exponentiating.} - -\item{nit}{\code{integer} number of iterations (steps) used in the ptMCMC -algorithm.} - -\item{magnitude}{Average magnitude (defining a geometric distribution) -for the proposed step size in the ptMCMC algorithm.} - -\item{burnin}{\code{integer} number of iterations to remove from the -beginning of the ptMCMC algorithm.} - -\item{thin_frac}{Fraction of iterations to retain, from the ptMCMC. Must be -\eqn{(0, 1]}, and the default value of 1 represents no thinning.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}) of the TS model.} - -\item{seed}{Input to \code{set.seed} in the time series model for -replication purposes.} - -\item{...}{Additional arguments to be passed to -\code{\link[topicmodels]{LDA}} as a \code{control} input.} -} -\value{ -\code{list} of control \code{lists}, with named elements - \code{LDAcontrol}, \code{TScontrol}, and \code{quiet}. -} -\description{ -Create and define a list of control options used to run the - LDATS model, as implemented by \code{\link{LDA_TS}}. -} -\examples{ - LDA_TS_control() - -} diff --git a/man/LDA_control.Rd b/man/LDA_control.Rd deleted file mode 100644 index 609214ff..00000000 --- a/man/LDA_control.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{LDA_control} -\alias{LDA_control} -\title{Create control list for set of LDA models} -\usage{ -LDA_control(LDA_function = topicmodels_LDA, LDA_args = list(method = - "VEM", seeded = TRUE), measurer_function = AIC, - measurer_args = list(), selector_function = min, - selector_args = list(), soften = TRUE, quiet = FALSE) -} -\arguments{ -\item{LDA_function}{\code{function} used for the LDA model. Defaults to -classical LDA as coded via \code{topicmodels}' -\code{\link[topicmodels]{LDA}}.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly.} - -\item{measurer, selector}{Function names for use in evaluation of the LDA -models. \code{measurer} is used to create a value for each model -and \code{selector} operates on the values to choose the model(s) to -pass on.} - -\item{args}{\code{list} of arguments to \code{LDA_function}.} - -\item{...}{Arguments to be passed to \code{LDA_function} as a -\code{control} input.} -} -\value{ -\code{list} for controlling the LDA model fit. -} -\description{ -This function provides a simple creation and definition of - the list used to control the set of LDA models, regardless of how they - are implemented. -} -\examples{ - LDA_set_control() - -} diff --git a/man/LDA_msg.Rd b/man/LDA_msg.Rd deleted file mode 100644 index be56a768..00000000 --- a/man/LDA_msg.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{LDA_msg} -\alias{LDA_msg} -\title{Create the model-running-message for an LDA} -\usage{ -LDA_msg(topics, rep, quiet = FALSE) -} -\arguments{ -\item{LDA_topics}{\code{integer} value corresponding to the number of -topics in the model.} - -\item{LDA_rep}{\code{integer} value corresponding to the replicate number -for the run of the model.} - -\item{control}{Class \code{LDA_controls} list of control parameters to be -used in \code{LDA} (note that "seed" will be overwritten).} -} -\description{ -Produce and print the message for a given LDA model. -} -\examples{ - LDA_msg(mod_topics = 4, mod_seeds = 2) - -} diff --git a/man/list_depth.Rd b/man/list_depth.Rd new file mode 100644 index 00000000..19b052c4 --- /dev/null +++ b/man/list_depth.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{list_depth} +\alias{list_depth} +\title{Determine the depth of a list} +\usage{ +list_depth(xlist) +} +\arguments{ +\item{xlist}{Focal input \code{list}.} +} +\value{ +\code{integer} value of the depth of the list. +} +\description{ +Evaluate an input for the depth of its nesting. +} +\details{ +If \code{xlist = list()}, then technically the input value is a + list, but is empty (of length \code{0}), so depth is returned as \code{0}. +} +\examples{ + list_depth("a") + list_depth(list()) + list_depth(list("a")) + list_depth(list(list("a"))) + +} diff --git a/man/package_LDA_TS.Rd b/man/package_LDA_TS.Rd deleted file mode 100644 index bcc9299c..00000000 --- a/man/package_LDA_TS.Rd +++ /dev/null @@ -1,52 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{package_LDA_TS} -\alias{package_LDA_TS} -\title{Package the output of LDA_TS} -\usage{ -package_LDA_TS(LDAs, TSs) -} -\arguments{ -\item{LDAs}{List (class: \code{LDA_set}) of LDA models (class: -\code{LDA}), as returned by \code{\link{LDA_set}}.} - -\item{TSs}{Class \code{TS_on_LDA} list of results from \code{\link{TS}} -applied for each model on each LDA model input, as returned by -\code{\link{TS_on_LDA}}.} - -\item{sel_LDA}{A reduced version of \code{LDAs} that only includes the -LDA model(s) selected by \code{\link{select_LDA}}. Still should be of -class \code{LDA_set}.} - -\item{sel_TSs}{A reduced version of \code{TSs} (of class \code{TS_fit}) -that only includes the TS model chosen via \code{\link{select_TS}}.} -} -\value{ -Class \code{LDA_TS}-class object including all fitted models and - selected models specifically, ready to be returned from - \code{\link{LDA_TS}}. -} -\description{ -Combine the objects returned by \code{\link{LDA_set}}, - \code{\link{select_LDA}}, \code{\link{TS_on_LDA}}, and - \code{\link{select_TS}}, name them as elements of the list, and - set the class of the list as \code{LDA_TS}, for the return from - \code{\link{LDA_TS}}. -} -\examples{ -\donttest{ - data(rodents) - data <- rodents - control <- LDA_TS_control() - dtt <- data$document_term_table - dct <- data$document_covariate_table - weights <- document_weights(dtt) - LDAs <- LDA_set(dtt, 2, 1, control$LDA_set_control) - sel_LDA <- select_LDA(LDAs, control$LDA_set_control) - TSs <- TS_on_LDA(sel_LDA, dct, ~1, 1, "newmoon", weights, - control$TS_control) - sel_TSs <- select_TS(TSs, control$TS_control) - package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs) -} - -} diff --git a/man/package_LDA_set.Rd b/man/package_LDA_set.Rd deleted file mode 100644 index 5ecf98d2..00000000 --- a/man/package_LDA_set.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{package_LDA_set} -\alias{package_LDA_set} -\title{Package the output from LDA_set} -\usage{ -package_LDA_set(mods, mod_topics, mod_seeds) -} -\arguments{ -\item{mods}{Fitted models returned from \code{\link[topicmodels]{LDA}}.} - -\item{mod_topics}{Vector of \code{integer} values corresponding to the -number of topics in each model.} - -\item{mod_seeds}{Vector of \code{integer} values corresponding to the -seed used for each model.} -} -\value{ -\code{lis} (class: \code{LDA_set}) of LDA models (class: - \code{LDA_VEM}). -} -\description{ -Name the elements (LDA models) and set the class - (\code{LDA_set}) of the models returned by \code{\link{LDA_set}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - topics <- 2 - nseeds <- 2 - control <- LDA_set_control() - mod_topics <- rep(topics, each = length(seq(2, nseeds * 2, 2))) - iseed <- control$iseed - mod_seeds <- rep(seq(iseed, iseed + (nseeds - 1)* 2, 2), length(topics)) - nmods <- length(mod_topics) - mods <- vector("list", length = nmods) - for (i in 1:nmods){ - LDA_msg(mod_topics[i], mod_seeds[i], control) - control_i <- prep_LDA_control(seed = mod_seeds[i], control = control) - mods[[i]] <- topicmodels::LDA(document_term_table, k = mod_topics[i], - control = control_i) - } - package_LDA_set(mods, mod_topics, mod_seeds) -} - -} diff --git a/man/print.LDA_TS.Rd b/man/print.LDA_TS.Rd deleted file mode 100644 index 2be20753..00000000 --- a/man/print.LDA_TS.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{print.LDA_TS} -\alias{print.LDA_TS} -\title{Print the selected LDA and TS models of LDA_TS object} -\usage{ -\method{print}{LDA_TS}(x, ...) -} -\arguments{ -\item{x}{Class \code{LDA_TS} object to be printed.} - -\item{...}{Passed to lower-level print calls.} -} -\value{ -The selected models in \code{x} as a two-element \code{list} with - the TS component only returning the non-hidden components. -} -\description{ -Convenience function to print only the selected elements of a - \code{LDA_TS}-class object returned by \code{\link{LDA_TS}} -} -\examples{ -\donttest{ - data(rodents) - mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 1, timename = "newmoon") - print(mod) -} - -} diff --git a/man/select_LDA.Rd b/man/select_LDA.Rd deleted file mode 100644 index 9400d7ce..00000000 --- a/man/select_LDA.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{select_LDA} -\alias{select_LDA} -\title{Select the best LDA model(s) for use in time series} -\usage{ -select_LDA(LDA_models = NULL, control = list()) -} -\arguments{ -\item{LDA_models}{An object of class \code{LDA_set} produced by -\code{\link{LDA_set}}.} - -\item{control}{A \code{list} of parameters to control the running and -selecting of LDA models. Values not input assume default values set -by \code{\link{LDA_set_control}}. Values for running the LDAs replace -defaults in (\code{LDAcontol}, see \code{\link[topicmodels]{LDA}} (but if - \code{seed} is given, it will be overwritten; use \code{iseed} instead).} -} -\value{ -A reduced version of \code{LDA_models} that only includes the - selected LDA model(s). The returned object is still an object of - class \code{LDA_set}. -} -\description{ -Select the best model(s) of interest from an - \code{LDA_set} object, based on a set of user-provided functions. The - functions default to choosing the model with the lowest AIC value. -} -\examples{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) - select_LDA(r_LDA) - -} From 07ed32f7b09fd8f0af15a6ca7dfcb061d3a5e101 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Wed, 26 Feb 2020 03:53:28 -0800 Subject: [PATCH 07/43] explains and tidies --- R/LDA.R | 18 +++++++++++ R/LDA_TS.R | 4 +++ R/data_preparation.R | 42 ++++++++++++++++++------- eh.R | 16 ---------- eh2.R | 25 --------------- pseudocode.R | 18 ----------- tempering.R | 4 +-- working.R | 73 -------------------------------------------- 8 files changed, 55 insertions(+), 145 deletions(-) delete mode 100644 eh.R delete mode 100644 eh2.R delete mode 100644 pseudocode.R delete mode 100644 working.R diff --git a/R/LDA.R b/R/LDA.R index 045472f5..0b1a9ee9 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -1,3 +1,21 @@ +# LDA is now functionally what LDA_set was before +# "reps" replaces "nseeds" but otherwise things are the same generally at api +# the control list is expanded to now include a base LDA modeling function +# and then arguments for all three functions, it also gets the subset info +# because it may be needed, and in addition to quiet a boolean "soften" +# which softens errors during model running +# prep_LDA_models combines the data (conforming if needed), topics, +# reps, and subsets to prep the list of model inputs, that will actually be +# appended to with the results, which are done at the top with LDA_call. +# LDA_call prints the message, and then preps the input arguments as used +# in a do.call on the function given in the control list. there are +# examples of both a generalized topicmodels LDA function wrapper (works +# with Gibbs sampling approach too!) and an "identity" 1-topic function. +# these functions allow for pre- and post-processing around the main model +# function without having to impact the general LDA_call +# select_LDA does a general measuring and then selecting, which now allows +# for arguments to be passed in! + LDA <- function(data, topics = 2, reps = 1, control = list()){ control <- do.call("LDA_control", control) diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 67bf475e..f77a4f3a 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,3 +1,7 @@ +# pulled back to just what's working so far +# the goal is to have a single LDA_TS function, no need for multi etc +# + LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ diff --git a/R/data_preparation.R b/R/data_preparation.R index 521b184b..b37d66b7 100644 --- a/R/data_preparation.R +++ b/R/data_preparation.R @@ -1,14 +1,34 @@ -# still needs to be evolved and adapted with usages! - - -# if the data are a data.frame or matrix, or list of them, or list of lists -# of them, you're good. output is a list of lists of data.frames -# this allows there to be iterations of the same data set, etc. -# or actually one more level of the list because of the data splitting lololz -# data <- rodents -# conform_data(data) -# -# conform_data(data) +# data can come into LDA_TS LDA TS in a variety of forms, and depending on +# usages, might take a variety of different forms +# the purpose of this function is to generalize and extract the code used +# to shuddle between data formats from functions / replace with a single line +# it's still a work in progress and needs more extensive usage exploration, +# as it's going to be a workhorse function. +# this function makes use of a utility i brought over from portalcasting +# called list_depth that recursively works through an object to tell you +# how nested lists are. its extremely useful when you could have a list or +# a list of multiple lists and need to easily distinguish +# the idea is as follows: working up from the most elemental version +# possible, if it's not a list, but the data are a term table, the covariate +# table is added with assumed equispersed data like before and the data are +# now a list +# then, if it is a list but only a list of depth 1 (a list of two tables) +# we actually need to wrap it in a list to make it depth 2...think of this +# as a 1-subset data set. then, for a list of depth two, we need to +# potentially expand to a multiple-subset data set, to allow for cross valid +# methods, for example. so the list of depth 2 is replicated out to +# create a longer list that is still depth 2 but is now of length +# control$nsubsets. and then the subsetting of the data occurs according to +# the control$subset_rule, and each depth-2 list is actually split to +# a final level of train and test data, making the list depth 3 +# the training and testing data are saved as trimmed versions of the +# two tables. currently its not saving the test/train split explicitly, +# just implicitly via the data encoding that exists. we should probably +# shore this up a bit more for sure. +# also this function is big and modularized a good degree already...it could +# get chunked into subfunctions +# there are functions for basic leave p out cross validation, including +# both systematic and random approaches conform_data <- function(data, control = list()){ depth <- list_depth(data) diff --git a/eh.R b/eh.R deleted file mode 100644 index af49290f..00000000 --- a/eh.R +++ /dev/null @@ -1,16 +0,0 @@ - -select_LDA <- function(LDA_models = NULL, control = list()){ - if("LDA_set" %in% attr(LDA_models, "class") == FALSE){ - stop("LDA_models must be of class LDA_set") - } - control <- do.call("LDA_set_control", control) - measurer <- control$measurer - selector <- control$selector - lda_measured <- vapply(LDA_models, measurer, 0) %>% - matrix(ncol = 1) - lda_selected <- apply(lda_measured, 2, selector) - which_selected <- which(lda_measured %in% lda_selected) - out <- LDA_models[which_selected] - class(out) <- c("LDA_set", "list") - out -} diff --git a/eh2.R b/eh2.R deleted file mode 100644 index 7be8adab..00000000 --- a/eh2.R +++ /dev/null @@ -1,25 +0,0 @@ - -logLik.LDA_VEM <- function(object, ...){ - val <- sum(object@loglikelihood) - df <- as.integer(object@control@estimate.alpha) + length(object@beta) - attr(val, "df") <- df - attr(val, "nobs") <- object@Dim[1] * object@Dim[2] - class(val) <- "logLik" - val -} - - -logLik_topicmodels_LDA <- function(object, method){ - if (method %in% c("VEM", "Gibbs")){ - val <- sum(object@loglikelihood) - df <- as.integer(object@control@estimate.alpha) + length(object@beta) - attr(val, "df") <- df - attr(val, "nobs") <- object@Dim[1] * object@Dim[2] - class(val) <- "logLik" - val - } else if (isnull(method)){ - logLik(object) - } else{ - stop("method not recognized") - } -} diff --git a/pseudocode.R b/pseudocode.R deleted file mode 100644 index 9e5f8615..00000000 --- a/pseudocode.R +++ /dev/null @@ -1,18 +0,0 @@ - - -# pipeline - -meta_LDA_TS - for each iteration - - split_LDA_TS_data (divides data into training and test sets) - - LDA_TS (runs on the training set) - - test_LDA_TS (measures the model on the test data) - measure_LDA_TS (combines all the individual iterations' measures) - select_LDA_TS (only used if multiple models are given) - package_meta_LDA_TS - -run meta_LDA_TS for each model -iterates over the subsets of the data for a given model -(or you could give it multiple models and it will run using all of them... - for this you'll want to be able to pass multiple models between the stages) - diff --git a/tempering.R b/tempering.R index 9bcf9841..84bef4ff 100644 --- a/tempering.R +++ b/tempering.R @@ -2,8 +2,8 @@ a work in progress toy example of tempering i think the pseudo priors should be inverse temps? basically how theyre set now -messing around, have the basic idead, i think - +messing around, have the basic idea, i think +verify the math for the temps and such tho library(mcmc) set.seed(1) diff --git a/working.R b/working.R deleted file mode 100644 index 08a77224..00000000 --- a/working.R +++ /dev/null @@ -1,73 +0,0 @@ -devtools::load_all() -data(rodents) - - -x<-(c(rnorm(1e4, 0,1), rnorm(1e4, 10, 2))) -x -density(x) - - - - -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table -LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -data <- document_covariate_table -data$gamma <- LDA_models@gamma -weights <- document_weights(document_term_table) - - -TSmod <- TS(data, formula = gamma ~ 1, nchangepoints = 1, - timename = "newmoon", weights, control = list()) - - - -oh yeah and "multinom" now needs to be "compositional" :( -or how exactly? -categorical? - - -prob(x)^(1/T) -(1/T)*log(prob(x)) - - - -plot(exp((1*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE))), ylim=c(0,0.4)) -points(exp((20*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE)))) - - -plot(((1*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE))), ylim=c(-4,0.4)) -points(((4*dnorm(seq(-1,1,0.01), 0, 1, log=TRUE)))) - - - -# have a rough set up for the data splitting, now need to actually -# connect the pieces under the hood...like measurer? and selector? - - - - - - -# need to remove restrictions on the selection functions: -# if selector is NULL, return the set of models -# if >1 model is selected, return all - -devtools::load_all() -data(rodents) -names(rodents) - - - -mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 0, timename = "newmoon") - -mmod <- meta_LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 0, timename = "newmoon") - -# blech this destroys our ability to memoise tho -# i think we needed to cut that tie sooner or later tho tbh -# yeah we'll need to set up some of the interface at this level to be -# much more flexed -# create a function that acts like multinom for a basis-based model? -# or do we drop multinom all together and use alr for that? \ No newline at end of file From d7638d83b44db6c033c672d5625b466845a1f7c7 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Tue, 10 Mar 2020 12:54:45 -0700 Subject: [PATCH 08/43] in prog --- NAMESPACE | 29 - R/LDA.R | 2 +- R/LDA_TS.R | 10 +- R/TS.R | 799 ++++---------------------- R/TS_on_LDA.R | 463 +-------------- hold.R | 7 +- man/TS.Rd | 160 ------ man/TS_control.Rd | 78 --- man/TS_on_LDA.Rd | 96 ---- man/check_LDA_models.Rd | 30 - man/check_document_covariate_table.Rd | 33 -- man/check_formula.Rd | 39 -- man/check_formulas.Rd | 34 -- man/check_nchangepoints.Rd | 24 - man/check_timename.Rd | 30 - man/check_weights.Rd | 29 - man/est_changepoints.Rd | 77 --- man/est_regressors.Rd | 108 ---- man/expand_TS.Rd | 52 -- man/logLik.TS_fit.Rd | 35 -- man/package_TS.Rd | 116 ---- man/package_TS_on_LDA.Rd | 51 -- man/prep_TS_data.Rd | 55 -- man/prep_pbar.Rd | 42 -- man/print.TS_fit.Rd | 35 -- man/print.TS_on_LDA.Rd | 35 -- man/print_model_run_message.Rd | 48 -- man/select_TS.Rd | 46 -- man/summarize_etas.Rd | 41 -- man/summarize_rhos.Rd | 42 -- 30 files changed, 136 insertions(+), 2510 deletions(-) delete mode 100644 man/TS.Rd delete mode 100644 man/TS_control.Rd delete mode 100644 man/TS_on_LDA.Rd delete mode 100644 man/check_LDA_models.Rd delete mode 100644 man/check_document_covariate_table.Rd delete mode 100644 man/check_formula.Rd delete mode 100644 man/check_formulas.Rd delete mode 100644 man/check_nchangepoints.Rd delete mode 100644 man/check_timename.Rd delete mode 100644 man/check_weights.Rd delete mode 100644 man/est_changepoints.Rd delete mode 100644 man/est_regressors.Rd delete mode 100644 man/expand_TS.Rd delete mode 100644 man/logLik.TS_fit.Rd delete mode 100644 man/package_TS.Rd delete mode 100644 man/package_TS_on_LDA.Rd delete mode 100644 man/prep_TS_data.Rd delete mode 100644 man/prep_pbar.Rd delete mode 100644 man/print.TS_fit.Rd delete mode 100644 man/print.TS_on_LDA.Rd delete mode 100644 man/print_model_run_message.Rd delete mode 100644 man/select_TS.Rd delete mode 100644 man/summarize_etas.Rd delete mode 100644 man/summarize_rhos.Rd diff --git a/NAMESPACE b/NAMESPACE index eb0e0cb8..f3fb39cc 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,51 +1,31 @@ # Generated by roxygen2: do not edit by hand -S3method(logLik,TS_fit) S3method(logLik,multinom_TS_fit) S3method(plot,LDA_TS) S3method(plot,LDA_VEM) S3method(plot,LDA_set) S3method(plot,TS_fit) -S3method(print,TS_fit) -S3method(print,TS_on_LDA) export(AICc) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) -export(TS) -export(TS_control) export(TS_diagnostics_plot) -export(TS_on_LDA) export(TS_summary_plot) export(autocorr_plot) -export(check_LDA_models) -export(check_TS_inputs) -export(check_TS_on_LDA_inputs) export(check_changepoints) export(check_control) -export(check_document_covariate_table) export(check_document_term_table) -export(check_formula) -export(check_formulas) export(check_multinom_TS_inputs) -export(check_nchangepoints) export(check_nreps) -export(check_timename) export(check_topics) -export(check_weights) export(count_trips) export(diagnose_ptMCMC) export(document_weights) export(ecdf_plot) -export(est_changepoints) -export(est_regressors) export(eta_diagnostics_plots) export(eval_step) -export(expand_TS) export(iftrue) export(list_depth) export(logsumexp) -export(measure_eta_vcov) -export(measure_rho_vcov) export(memoise_fun) export(messageq) export(mirror_vcov) @@ -53,28 +33,22 @@ export(modalvalue) export(multinom_TS) export(multinom_TS_chunk) export(normalize) -export(package_TS) -export(package_TS_on_LDA) export(package_chunk_fits) export(posterior_plot) export(pred_gamma_TS_plot) -export(prep_TS_data) export(prep_chunks) export(prep_cpts) export(prep_ids) -export(prep_pbar) export(prep_proposal_dist) export(prep_ptMCMC_inputs) export(prep_saves) export(prep_temp_sequence) -export(print_model_run_message) export(process_saves) export(propose_step) export(proposed_step_mods) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) -export(select_TS) export(set_LDA_TS_plot_cols) export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) @@ -85,15 +59,12 @@ export(sim_LDA_data) export(sim_TS_data) export(softmax) export(step_chains) -export(summarize_etas) -export(summarize_rhos) export(swap_chains) export(take_step) export(trace_plot) export(update_cpts) export(update_ids) export(update_list) -export(update_pbar) export(update_saves) export(verify_changepoint_locations) importFrom(coda,HPDinterval) diff --git a/R/LDA.R b/R/LDA.R index 0b1a9ee9..fcc53c97 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -165,7 +165,7 @@ select_LDA <- function(LDAs = list(), control = list()){ fun <- control$selector_function args <- update_list(control$selector_args, x = vals) selection <- do.call(what = fun, args = args) - LDAs[[selection]] + LDAs[selection] } measure_LDA <- function(LDAs = list(), control = list()){ diff --git a/R/LDA_TS.R b/R/LDA_TS.R index f77a4f3a..8ba693c2 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -9,8 +9,10 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, data <- conform_data(data = data, control = control) LDAs <- LDA(data = data, topics = topics, nseeds = nseeds, control = control$LDA_control) - - + TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control$TS_control) + } @@ -33,7 +35,9 @@ LDA_TS_control <- function(LDA_function = topicmodels_LDA, selector_args = LDA_selector_args, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) - TS_control <- TS_control() + + TS_control <- TS_control(soften = soften, quiet = quiet) + list(LDA_control = LDA_control, TS_control = TS_control, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) diff --git a/R/TS.R b/R/TS.R index cbf8df68..b5dd6f5a 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,3 +1,116 @@ +TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, control = list()){ + + control <- do.call("TS_control", control) + messageq("----Time Series Analyses----", control$quiet) + TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control) + nTS <- length(TSs) + for (i in 1:nTS){ + TSs[[i]] <- TS_call(TS = TSs[[i]], control = control) + } + selected_TSs <- select_TS(TSs = TSs, control = control) + package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) + + +} + + +compositional_TS <- function(TS, response = "multinomial", fitting = "memo", + ...){ + data <- TS$data + +} + +memoizer <- function(){ + +} + + +prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, + control = list()){ + + if (!is(formulas, "list")) { + if (is(formulas, "formula")) { + formulas <- c(formulas) + } else{ + stop("formulas does not contain formula(s)") + } + } else if (!all(vapply(formulas, is, TRUE, "formula"))) { + stop("formulas does not contain all formula(s)") + } + + nLDAs <- length(LDAs[[2]]) + + out <- formulas + for (i in seq_along(formulas)) { + tformula <- paste(as.character(formulas[[i]]), collapse = "") + out[[i]] <- as.formula(paste("gamma", tformula)) + } + formulas <- out + nmods <- length(LDA_models) + mods <- 1:nmods + out <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) + colnames(out) <- c("LDA", "formula", "nchangepoints") + out + + + + TSs +} + + + +TS_control <- function(TS_response_function = compositional_TS, + TS_response_args = list(family = "multinomial"), + TS_fit_function = memoizer, + TS_fit_args = list(), + soften = TRUE, + quiet = FALSE){ + list(TS_response_function = TS_response_function, + TS_response_args = TS_response_args, + TS_fit_function = TS_fit_function, TS_fit_args = TS_fit_args, + soften = soften, quiet = quiet) +} + + + + +TS_call <- function(TS = NULL, control = list()){ + control <- do.call("TS_control", control) + TS_msg(TS = TS, quiet = control$quiet) + fun <- control$TS_function + args <- update_list(control$TS_args, TS = TS) + if(control$soften){ + tryCatch(do.call(what = fun, args = args), + warning = function(x){eval(x$call)}, + error = function(x = list()){list(error = x$message)}) + } else{ + do.call(what = fun, args = args) + } +} + + +TS_msg <- function(TS, quiet = FALSE){ + messageq("hi how are you?", quiet) +} + + + + + + + + + + + + + + + predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ if(is.null(newdata)){ newdata <- object$data @@ -16,154 +129,7 @@ predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ } -#' @title Conduct a single multinomial Bayesian Time Series analysis -#' -#' @description This is the main interface function for the LDATS application -#' of Bayesian change point Time Series analyses (Christensen \emph{et al.} -#' 2018), which extends the model of Western and Kleykamp (2004; -#' see also Ruggieri 2013) to multinomial (proportional) response data using -#' softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) -#' using a generalized linear modeling approach (McCullagh and Nelder 1989). -#' The models are fit using parallel tempering Markov Chain Monte Carlo -#' (ptMCMC) methods (Earl and Deem 2005) to locate change points and -#' neural networks (Ripley 1996, Venables and Ripley 2002, Bishop 2006) to -#' estimate regressors. \cr \cr -#' \code{check_TS_inputs} checks that the inputs to -#' \code{TS} are of proper classes for a full analysis. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. See \code{Examples}. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. -#' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the -#' time series into chunks fit with separate models dictated by -#' \code{formula}. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{TS}: \code{TS_fit}-class list containing the following -#' elements, many of -#' which are hidden for \code{print}ing, but are accessible: -#' \describe{ -#' \item{data}{\code{data} input to the function.} -#' \item{formula}{\code{\link[stats]{formula}} input to the function.} -#' \item{nchangepoints}{\code{nchangepoints} input to the function.} -#' \item{weights}{\code{weights} input to the function.} -#' \item{control}{\code{control} input to the function.} -#' \item{lls}{Iteration-by-iteration -#' \link[=logLik.multinom_TS_fit]{logLik} values for the -#' full time series fit by \code{\link{multinom_TS}}.} -#' \item{rhos}{Iteration-by-iteration change point estimates from -#' \code{\link{est_changepoints}}.} -#' \item{etas}{Iteration-by-iteration marginal regressor estimates from -#' \code{\link{est_regressors}}, which have been -#' unconditioned with respect to the change point locations.} -#' \item{ptMCMC_diagnostics}{ptMCMC diagnostics, -#' see \code{\link{diagnose_ptMCMC}}} -#' \item{rho_summary}{Summary table describing \code{rhos} (the change -#' point locations), -#' see \code{\link{summarize_rhos}}.} -#' \item{rho_vcov}{Variance-covariance matrix for the estimates of -#' \code{rhos} (the change point locations), see -#' \code{\link{measure_rho_vcov}}.} -#' \item{eta_summary}{Summary table describing \code{ets} (the -#' regressors), -#' see \code{\link{summarize_etas}}.} -#' \item{eta_vcov}{Variance-covariance matrix for the estimates of -#' \code{etas} (the regressors), see -#' \code{\link{measure_eta_vcov}}.} -#' \item{logLik}{Across-iteration average of log-likelihoods -#' (\code{lls}).} -#' \item{nparams}{Total number of parameters in the full model, -#' including the change point locations and regressors.} -#' \item{deviance}{Penalized negative log-likelihood, based on -#' \code{logLik} and \code{nparams}.} -#' } -#' \code{check_TS_inputs}: An error message is thrown if any input -#' is not proper, else \code{NULL}. -#' -#' @references -#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. -#' Springer, New York, NY, USA. -#' -#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. -#' Long-term community change through multiple rapid transitions in a -#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. -#' \href{https://doi.org/10.1002/ecy.2373}{link}. -#' -#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, -#' applications, and new perspectives. \emph{Physical Chemistry Chemical -#' Physics} \strong{7}: 3910-3916. -#' \href{https://doi.org/10.1039/B509983H}{link}. -#' -#' McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. -#' 2nd Edition. Chapman and Hall, New York, NY, USA. -#' -#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. -#' Cambridge University Press, Cambridge, UK. -#' -#' Ruggieri, E. 2013. A Bayesian approach to detecting change points in -#' climactic records. \emph{International Journal of Climatology} -#' \strong{33}:520-528. -#' \href{https://doi.org/10.1002/joc.3447}{link}. -#' -#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied -#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. -#' -#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for -#' historical time series analysis. \emph{Political Analysis} -#' \strong{12}:354-374. -#' \href{https://doi.org/10.1093/pan/mph023}{link}. -#' -#' @examples -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' \donttest{ -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' } -#' check_TS_inputs(data, timename = "newmoon") -#' -#' @export -#' -TS <- function(data, formula = gamma ~ 1, nchangepoints = 0, +TSx <- function(data, formula = gamma ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ check_TS_inputs(data, formula, nchangepoints, timename, weights, control) control <- do.call("TS_control", control) @@ -176,10 +142,6 @@ TS <- function(data, formula = gamma ~ 1, nchangepoints = 0, package_TS(data, formula, timename, weights, control, rho_dist, eta_dist) } -#' @rdname TS -#' -#' @export -#' check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ @@ -191,114 +153,6 @@ check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, return() } -#' @title Summarize the Time Series model -#' -#' @description Calculate relevant summaries for the run of a Time Series -#' model within \code{\link{TS}} and package the output as a -#' \code{TS_fit}-class object. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @param rho_dist List of saved data objects from the ptMCMC estimation of -#' change point locations returned by \code{\link{est_changepoints}} -#' (unless \code{nchangepoints} is 0, then \code{NULL}). -#' -#' @param eta_dist Matrix of draws (rows) from the marginal posteriors of the -#' coefficients across the segments (columns), as estimated by -#' \code{\link{est_regressors}}. -#' -#' @return \code{TS_fit}-class list containing the following elements, many of -#' which are hidden for \code{print}ing, but are accessible: -#' \describe{ -#' \item{data}{\code{data} input to the function.} -#' \item{formula}{\code{\link[stats]{formula}} input to the function.} -#' \item{nchangepoints}{\code{nchangepoints} input to the function.} -#' \item{weights}{\code{weights} input to the function.} -#' \item{timename}{\code{timename} input to the function.} -#' \item{control}{\code{control} input to the function.} -#' \item{lls}{Iteration-by-iteration -#' \link[=logLik.multinom_TS_fit]{logLik} values for the -#' full time series fit by \code{\link{multinom_TS}}.} -#' \item{rhos}{Iteration-by-iteration change point estimates from -#' \code{\link{est_changepoints}}.} -#' \item{etas}{Iteration-by-iteration marginal regressor estimates from -#' \code{\link{est_regressors}}, which have been -#' unconditioned with respect to the change point locations.} -#' \item{ptMCMC_diagnostics}{ptMCMC diagnostics, -#' see \code{\link{diagnose_ptMCMC}}} -#' \item{rho_summary}{Summary table describing \code{rhos} (the change -#' point locations), -#' see \code{\link{summarize_rhos}}.} -#' \item{rho_vcov}{Variance-covariance matrix for the estimates of -#' \code{rhos} (the change point locations), see -#' \code{\link{measure_rho_vcov}}.} -#' \item{eta_summary}{Summary table describing \code{ets} (the -#' regressors), -#' see \code{\link{summarize_etas}}.} -#' \item{eta_vcov}{Variance-covariance matrix for the estimates of -#' \code{etas} (the regressors), see -#' \code{\link{measure_eta_vcov}}.} -#' \item{logLik}{Across-iteration average of log-likelihoods -#' (\code{lls}).} -#' \item{nparams}{Total number of parameters in the full model, -#' including the change point locations and regressors.} -#' \item{AIC}{Penalized negative log-likelihood, based on -#' \code{logLik} and \code{nparams}.} -#' } -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' formula <- gamma ~ 1 -#' nchangepoints <- 1 -#' control <- TS_control() -#' data <- data[order(data[,"newmoon"]), ] -#' rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", -#' weights, control) -#' eta_dist <- est_regressors(rho_dist, data, formula, "newmoon", weights, -#' control) -#' package_TS(data, formula, "newmoon", weights, control, rho_dist, -#' eta_dist) -#' } -#' -#' @export -#' package_TS <- function(data, formula, timename, weights, control, rho_dist, eta_dist){ @@ -347,70 +201,13 @@ package_TS <- function(data, formula, timename, weights, control, rho_dist, attr(out, "hidden") <- to_hide out } - -#' @title Print a Time Series model fit -#' -#' @description Convenience function to print only the most important -#' components of a \code{TS_fit}-class object fit by -#' \code{\link{TS}}. -#' -#' @param x Class \code{TS_fit} object to be printed. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return The non-hidden parts of \code{x} as a \code{list}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' print(TSmod) -#' } -#' -#' @export -#' print.TS_fit <- function(x, ...){ hid <- attr(x, "hidden") notHid <- !names(x) %in% hid print(x[notHid]) } -#' @title Summarize the regressor (eta) distributions -#' -#' @description \code{summarize_etas} calculates summary statistics for each -#' of the chunk-level regressors. -#' \cr \cr -#' \code{measure_ets_vcov} generates the variance-covariance matrix for -#' the regressors. -#' -#' @param etas Matrix of regressors (columns) across iterations of the -#' ptMCMC (rows), as returned from \code{\link{est_regressors}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{summarize_etas}: table of summary statistics for chunk-level -#' regressors including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each regressor. \cr \cr -#' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level -#' regressors. -#' -#' @examples -#' etas <- matrix(rnorm(100), 50, 2) -#' summarize_etas(etas) -#' measure_eta_vcov(etas) -#' -#' @export -#' + summarize_etas <- function(etas, control = list()){ check_control(control) control <- do.call("TS_control", control) @@ -435,10 +232,6 @@ summarize_etas <- function(etas, control = list()){ out } -#' @rdname summarize_etas -#' -#' @export -#' measure_eta_vcov <- function(etas){ if (!is.matrix(etas)){ stop("expecting etas to be a matrix") @@ -448,38 +241,6 @@ measure_eta_vcov <- function(etas){ rownames(out) <- colnames(etas) out } - -#' @title Summarize the rho distributions -#' -#' @description \code{summarize_rho} calculates summary statistics for each -#' of the change point locations. -#' \cr \cr -#' \code{measure_rho_vcov} generates the variance-covariance matrix for the -#' change point locations. -#' -#' @param rhos Matrix of change point locations (columns) across iterations of -#' the ptMCMC (rows) or \code{NULL} if no change points are in the model, -#' as returned from \code{\link{est_changepoints}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{summarize_rhos}: table of summary statistics for change point -#' locations including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each change point location. \cr \cr -#' \code{measure_rho_vcov}: variance-covariance matrix for change -#' point locations. -#' -#' @examples -#' rhos <- matrix(sample(80:100, 100, TRUE), 50, 2) -#' summarize_rhos(rhos) -#' measure_rho_vcov(rhos) -#' -#' @export -#' summarize_rhos <- function(rhos, control = list()){ check_control(control) control <- do.call("TS_control", control) @@ -504,10 +265,6 @@ summarize_rhos <- function(rhos, control = list()){ out } -#' @rdname summarize_rhos -#' -#' @export -#' measure_rho_vcov <- function(rhos){ if (is.null(rhos)) { return() @@ -521,104 +278,6 @@ measure_rho_vcov <- function(rhos){ out } -#' @title Estimate the distribution of regressors, unconditional on the -#' change point locations -#' -#' @description This function uses the marginal posterior distributions of -#' the change point locations (estimated by \code{\link{est_changepoints}}) -#' in combination with the conditional (on the change point locations) -#' posterior distributions of the regressors (estimated by -#' \code{\link{multinom_TS}}) to estimate the marginal posterior -#' distribution of the regressors, unconditional on the change point -#' locations. -#' -#' @details The general approach follows that of Western and Kleykamp -#' (2004), although we note some important differences. Our regression -#' models are fit independently for each chunk (segment of time), and -#' therefore the variance-covariance matrix for the full model -#' has \code{0} entries for covariances between regressors in different -#' chunks of the time series. Further, because the regression model here -#' is a standard (non-hierarchical) softmax (Ripley 1996, Venables and -#' Ripley 2002, Bishop 2006), there is no error term in the regression -#' (as there is in the normal model used by Western and Kleykamp 2004), -#' and so the posterior distribution used here is a multivariate normal, -#' as opposed to a multivariate t, as used by Western and Kleykamp (2004). -#' -#' @param rho_dist List of saved data objects from the ptMCMC estimation of -#' change point locations (unless \code{nchangepoints} is 0, then -#' \code{NULL}) returned from \code{\link{est_changepoints}}. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{matrix} of draws (rows) from the marginal posteriors of the -#' coefficients across the segments (columns). -#' -#' @references -#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. -#' Springer, New York, NY, USA. -#' -#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. -#' Cambridge University Press, Cambridge, UK. -#' -#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied -#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. -#' -#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for -#' historical time series analysis. \emph{Political Analysis} -#' \strong{12}:354-374. -#' \href{https://doi.org/10.1093/pan/mph023}{link}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' formula <- gamma ~ 1 -#' nchangepoints <- 1 -#' control <- TS_control() -#' data <- data[order(data[,"newmoon"]), ] -#' rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", -#' weights, control) -#' eta_dist <- est_regressors(rho_dist, data, formula, "newmoon", weights, -#' control) -#' } -#' -#' @export -#' est_regressors <- function(rho_dist, data, formula, timename, weights, control = list()){ check_formula(data, formula) @@ -687,74 +346,6 @@ est_regressors <- function(rho_dist, data, formula, timename, weights, } -#' @title Use ptMCMC to estimate the distribution of change point locations -#' -#' @description This function executes ptMCMC-based estimation of the -#' change point location distributions for multinomial Time Series analyses. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. -#' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the -#' time series into chunks fit with separate models dictated by -#' \code{formula}. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return List of saved data objects from the ptMCMC estimation of -#' change point locations (unless \code{nchangepoints} is 0, then -#' \code{NULL} is returned). -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' formula <- gamma ~ 1 -#' nchangepoints <- 1 -#' control <- TS_control() -#' data <- data[order(data[,"newmoon"]), ] -#' rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", -#' weights, control) -#' } -#' -#' @export -#' est_changepoints <- function(data, formula, nchangepoints, timename, weights, control = list()){ check_TS_inputs(data, formula, nchangepoints, timename, weights, control) @@ -788,37 +379,6 @@ est_changepoints <- function(data, formula, nchangepoints, timename, weights, process_saves(saves, control) } -#' @title Initialize and tick through the progress bar -#' -#' @description \code{prep_pbar} creates and \code{update_pbar} steps -#' through the progress bars (if desired) in \code{\link{TS}} -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. Of use here is \code{quiet} which is a -#' a \code{logical} indicator of whether there should be information -#' (i.e. the progress bar) printed during the run or not. Default is -#' \code{TRUE}. -#' -#' @param bar_type "rho" (for change point locations) or "eta" (for -#' regressors). -#' -#' @param nr \code{integer} number of unique realizations, needed when -#' \code{bar_type} = "eta". -#' -#' @param pbar The progress bar object returned from \code{prep_pbar}. -#' -#' @return \code{prep_pbar}: the initialized progress bar object. \cr \cr -#' \code{update_pbar}: the ticked-forward \code{pbar}. -#' -#' @examples -#' pb <- prep_pbar(control = list(nit = 2)); pb -#' pb <- update_pbar(pb); pb -#' pb <- update_pbar(pb); pb -#' -#' @export -#' prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ check_control(control) @@ -844,10 +404,6 @@ prep_pbar <- function(control = list(), bar_type = "rho", out } -#' @rdname prep_pbar -#' -#' @export -#' update_pbar <- function(pbar, control = list()){ if (!("progress_bar" %in% class(pbar))){ stop("pbar must be of class progress_bar") @@ -861,37 +417,6 @@ update_pbar <- function(pbar, control = list()){ } -#' @title Check that a formula is proper -#' -#' @description Check that \code{formula} is actually a -#' \code{\link[stats]{formula}} and that the -#' response and predictor variables are all included in \code{data}. -#' -#' @param formula \code{formula} to evaluate. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @return An error message is thrown if \code{formula} is not proper, -#' else \code{NULL}. -#' -#' @examples -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' check_formula(data, gamma ~ 1) -#' -#' @export -#' check_formula <- function(data, formula){ if (!is(formula, "formula")){ @@ -916,72 +441,7 @@ check_formula <- function(data, formula){ return() } -#' @title Create the controls list for the Time Series model -#' -#' @description This function provides a simple creation and definition of a -#' list used to control the time series model fit occurring within -#' \code{\link{TS}}. -#' -#' @param memoise \code{logical} indicator of whether the multinomial -#' functions should be memoised (via \code{\link[memoise]{memoise}}). -#' Memoisation happens to both \code{\link{multinom_TS}} and -#' \code{\link{multinom_TS_chunk}}. -#' -#' @param response \code{character} element indicating the response variable -#' used in the time series. -#' -#' @param lambda \code{numeric} "weight" decay term used to set the prior -#' on the regressors within each chunk-level model. Defaults to 0, -#' corresponding to a fully vague prior. -#' -#' @param measurer,selector Function names for use in evaluation of the TS -#' models. \code{measurer} is used to create a value for each model -#' and \code{selector} operates on the values to choose the model. -#' -#' @param ntemps \code{integer} number of temperatures (chains) to use in the -#' ptMCMC algorithm. -#' -#' @param penultimate_temp Penultimate temperature in the ptMCMC sequence. -#' -#' @param ultimate_temp Ultimate temperature in the ptMCMC sequence. -#' -#' @param q Exponent controlling the ptMCMC temperature sequence from the -#' focal chain (reference with temperature = 1) to the penultimate chain. 0 -#' (default) implies a geometric sequence. 1 implies squaring before -#' exponentiating. -#' -#' @param nit \code{integer} number of iterations (steps) used in the ptMCMC -#' algorithm. -#' -#' @param magnitude Average magnitude (defining a geometric distribution) -#' for the proposed step size in the ptMCMC algorithm. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param burnin \code{integer} number of iterations to remove from the -#' beginning of the ptMCMC algorithm. -#' -#' @param thin_frac Fraction of iterations to retain, must be \eqn{(0, 1]}, -#' and the default value of 1 represents no thinning. -#' -#' @param summary_prob Probability used for summarizing the posterior -#' distributions (via the highest posterior density interval, see -#' \code{\link[coda]{HPDinterval}}). -#' -#' @param seed Input to \code{set.seed} for replication purposes. -#' -#' @param model_fun \code{character} name of the model function to be used to -#' fit the multivariate response. -#' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @examples -#' TS_control() -#' -#' @export -#' -TS_control <- function(memoise = TRUE, response = "gamma", lambda = 0, +TS_controlx <- function(memoise = TRUE, response = "gamma", lambda = 0, measurer = AIC, selector = min, ntemps = 6, penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, nit = 1e4, magnitude = 12, quiet = FALSE, burnin = 0, @@ -996,33 +456,6 @@ TS_control <- function(memoise = TRUE, response = "gamma", lambda = 0, } -#' @title Determine the log likelihood of a Time Series model -#' -#' @description Convenience function to extract and format the log likelihood -#' of a \code{TS_fit}-class object fit by \code{\link{multinom_TS}}. -#' -#' @param object Class \code{TS_fit} object to be evaluated. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return Log likelihood of the model \code{logLik}, also with \code{df} -#' (degrees of freedom) and \code{nobs} (number of observations) values. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' logLik(TSmod) -#' } -#' -#' @export -#' logLik.TS_fit <- function(object, ...){ val <- object$logLik attr(val, "df") <- object$nparams diff --git a/R/TS_on_LDA.R b/R/TS_on_LDA.R index c57712fe..a8a76d61 100644 --- a/R/TS_on_LDA.R +++ b/R/TS_on_LDA.R @@ -1,84 +1,4 @@ -#' @title Conduct a set of Time Series analyses on a set of LDA models -#' -#' @description This is a wrapper function that expands the main Time Series -#' analyses function (\code{\link{TS}}) across the LDA models (estimated -#' using \code{\link[topicmodels]{LDA}} or \code{\link{LDA_set}} and the -#' Time Series models, with respect to both continuous time formulas and the -#' number of discrete changepoints. This function allows direct passage of -#' the control parameters for the parallel tempering MCMC through to the -#' main Time Series function, \code{\link{TS}}, via the -#' \code{ptMCMC_controls} argument. \cr \cr -#' \code{check_TS_on_LDA_inputs} checks that the inputs to -#' \code{TS_on_LDA} are of proper classes for a full analysis. -#' -#' @param LDA_models List of LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param document_covariate_table Document covariate table (rows: documents, -#' columns: time index and covariate options). Every model needs a -#' covariate to describe the time value for each document (in whatever -#' units and whose name in the table is input in \code{timename}) -#' that dictates the application of the change points. -#' In addition, all covariates named within specific models in -#' \code{formula} must be included. Must be a conformable to a data table, -#' as verified by \code{\link{check_document_covariate_table}}. -#' -#' @param formulas Vector of \code{\link[stats]{formula}}(s) for the -#' continuous (non-change point) component of the time series models. Any -#' predictor variable included in a formula must also be a column in the -#' \code{document_covariate_table}. Each element (formula) in the vector -#' is evaluated for each number of change points and each LDA model. -#' -#' @param nchangepoints Vector of \code{integer}s corresponding to the number -#' of change points to include in the time series models. 0 is a valid input -#' corresponding to no change points (\emph{i.e.}, a singular time series -#' model), and the current implementation can reasonably include up to 6 -#' change points. Each element in the vector is the number of change points -#' used to segment the data for each formula (entry in \code{formulas}) -#' component of the TS model, for each selected LDA model. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{TS_on_LDA}: \code{TS_on_LDA}-class \code{list} of results -#' from \code{\link{TS}} applied for each model on each LDA model input. -#' \cr \cr -#' \code{check_TS_inputs}: An error message is thrown if any input -#' is not proper, else \code{NULL}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, -#' nchangepoints = 0:1, timename = "newmoon", weights) -#' } -#' -#' @export -#' + TS_on_LDA <- function(LDA_models, document_covariate_table, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ @@ -100,54 +20,6 @@ TS_on_LDA <- function(LDA_models, document_covariate_table, formulas = ~ 1, package_TS_on_LDA(TSmods, LDA_models, mods) } - -#' @title Prepare the model-specific data to be used in the TS analysis -#' of LDA output -#' -#' @description Append the estimated topic proportions from a fitted LDA model -#' to the document covariate table to create the data structure needed for -#' \code{\link{TS}}. -#' -#' @param document_covariate_table Document covariate table (rows: documents, -#' columns: time index and covariate options). Every model needs a -#' covariate to describe the time value for each document (in whatever -#' units and whose name in the table is input in \code{timename}) -#' that dictates the application of the change points. -#' In addition, all covariates named within specific models in -#' \code{formula} must be included. Must be a conformable to a data table, -#' as verified by \code{\link{check_document_covariate_table}}. -#' -#' @param LDA_models List of LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param mods The \code{data.table} created by \code{\link{expand_TS}} that -#' contains each of the models (defined by the LDA model to use and the and -#' formula number of changepoints for the TS model). Indexed here by -#' \code{i}. -#' -#' @param i \code{integer} index referencing the row in \code{mods} to use. -#' -#' @return Class \code{data.frame} object including [1] the time variable -#' (indicated in \code{control}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated -#' in \code{formula}), ready for input into \code{TS}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' mods <- expand_TS(LDA_models, formulas = ~1, nchangepoints = 0) -#' data1 <- prep_TS_data(document_covariate_table, LDA_models, mods) -#' } -#' -#' @export -#' prep_TS_data <- function(document_covariate_table, LDA_models, mods, i = 1){ check_document_covariate_table(document_covariate_table, LDA_models) check_LDA_models(LDA_models) @@ -160,44 +32,6 @@ prep_TS_data <- function(document_covariate_table, LDA_models, mods, i = 1){ data_i } -#' @title Select the best Time Series model -#' -#' @description Select the best model of interest from an -#' \code{TS_on_LDA} object generated by \code{\link{TS_on_LDA}}, based on -#' a set of user-provided functions. The functions default to choosing the -#' model with the lowest AIC value. \cr \cr -#' Presently, the set of functions should result in a singular selected -#' model. If multiple models are chosen via the selection, only the first -#' is returned. -#' -#' @param TS_models An object of class \code{TS_on_LDA} produced by -#' \code{\link{TS_on_LDA}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return A reduced version of \code{TS_models} that only includes the -#' selected TS model. The returned object is a single TS model object of -#' class \code{TS_fit}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, -#' nchangepoints = 0:1, timename = "newmoon", weights) -#' select_TS(mods) -#' } -#' -#' @export -#' select_TS <- function(TS_models, control = list()){ if (!("TS_on_LDA" %in% class(TS_models))){ stop("TS_models must be of class TS_on_LDA") @@ -219,49 +53,7 @@ select_TS <- function(TS_models, control = list()){ out } -#' @title Package the output of TS_on_LDA -#' -#' @description Set the class and name the elements of the results list -#' returned from applying \code{\link{TS}} to the combination of TS models -#' requested for the LDA model(s) input. -#' -#' @param TSmods list of results from \code{\link{TS}} applied for each model -#' on each LDA model input. -#' -#' @param LDA_models List of LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param models \code{data.frame} object returned from -#' \code{\link{expand_TS}} that contains the combinations of LDA models, -#' and formulas and nchangepoints used in the TS models. -#' -#' @return Class \code{TS_on_LDA} list of results from \code{\link{TS}} -#' applied for each model on each LDA model input. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' mods <- expand_TS(LDA_models, c(~ 1, ~ newmoon), 0:1) -#' nmods <- nrow(mods) -#' TSmods <- vector("list", nmods) -#' for(i in 1:nmods){ -#' formula_i <- mods$formula[[i]] -#' nchangepoints_i <- mods$nchangepoints[i] -#' data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, i) -#' TSmods[[i]] <- TS(data_i, formula_i, nchangepoints_i, "newmoon", -#' weights, TS_control()) -#' } -#' package_TS_on_LDA(TSmods, LDA_models, mods) -#' } -#' -#' @export -#' + package_TS_on_LDA <- function(TSmods, LDA_models, models){ check_LDA_models(LDA_models) if(is(LDA_models, "LDA")){ @@ -281,77 +73,11 @@ package_TS_on_LDA <- function(TSmods, LDA_models, models){ } -#' @title Print a set of Time Series models fit to LDAs -#' -#' @description Convenience function to print only the names of a -#' \code{TS_on_LDA}-class object generated by \code{\link{TS_on_LDA}}. -#' -#' @param x Class \code{TS_on_LDA} object to be printed. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return \code{character} \code{vector} of the names of \code{x}'s models. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, -#' nchangepoints = 0:1, timename = "newmoon", weights) -#' print(mods) -#' } -#' -#' @export -#' print.TS_on_LDA <- function(x, ...){ print(names(x)) } -#' @title Print the message to the console about which combination of the -#' Time Series and LDA models is being run -#' -#' @description If desired, print a message at the beginning of every model -#' combination stating the TS model and the LDA model being evaluated. -#' -#' @param models \code{data.frame} object returned from -#' \code{\link{expand_TS}} that contains the combinations of LDA models, -#' and formulas and nchangepoints used in the TS models. -#' -#' @param i \code{integer} index of the row to use from \code{models}. -#' -#' @param LDA_models List of LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. Of particular importance here is -#' the \code{logical}-class element named \code{quiet}. -#' -#' @return \code{NULL}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' nchangepoints <- 0:1 -#' mods <- expand_TS(LDA_models, formulas, nchangepoints) -#' print_model_run_message(mods, 1, LDA_models, TS_control()) -#' } -#' -#' @export -#' + print_model_run_message <- function(models, i, LDA_models, control){ control <- do.call("TS_control", control) equation <- deparse(models$formula[[i]]) @@ -363,50 +89,6 @@ print_model_run_message <- function(models, i, LDA_models, control){ messageq(msg, control$quiet) } -#' @title Expand the TS models across the factorial combination of -#' LDA models, formulas, and number of change points -#' -#' @description Expand the completely crossed combination of model inputs: -#' LDA model results, formulas, and number of change points. -#' -#' @param LDA_models List of LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param formulas Vector of \code{\link[stats]{formula}}(s) for the -#' continuous (non-change point) component of the time series models. Any -#' predictor variable included in a formula must also be a column in the -#' \code{document_covariate_table}. Each element (formula) in the vector -#' is evaluated for each number of change points and each LDA model. -#' -#' @param nchangepoints Vector of \code{integer}s corresponding to the number -#' of change points to include in the time series models. 0 is a valid input -#' corresponding to no change points (\emph{i.e.}, a singular time series -#' model), and the current implementation can reasonably include up to 6 -#' change points. Each element in the vector is the number of change points -#' used to segment the data for each formula (entry in \code{formulas}) -#' component of the TS model, for each selected LDA model. -#' -#' @return Expanded \code{data.frame} table of the three values (columns) for -#' each unique model run (rows): [1] the LDA model (indicated -#' as a numeric element reference to the \code{LDA_models} object), [2] the -#' regressor formula, and [3] the number of changepoints. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) -#' LDA_models <- select_LDA(LDAs) -#' weights <- document_weights(document_term_table) -#' formulas <- c(~ 1, ~ newmoon) -#' nchangepoints <- 0:1 -#' expand_TS(LDA_models, formulas, nchangepoints) -#' } -#' -#' @export -#' expand_TS <- function(LDA_models, formulas, nchangepoints){ check_LDA_models(LDA_models) check_nchangepoints(nchangepoints) @@ -438,22 +120,6 @@ expand_TS <- function(LDA_models, formulas, nchangepoints){ out } -#' @title Check that nchangepoints vector is proper -#' -#' @description Check that the vector of numbers of changepoints is -#' conformable to integers greater than 1. -#' -#' @param nchangepoints Vector of the number of changepoints to evaluate. -#' -#' @return An error message is thrown if \code{nchangepoints} is not proper, -#' else \code{NULL}. -#' -#' @examples -#' check_nchangepoints(0) -#' check_nchangepoints(2) -#' -#' @export -#' check_nchangepoints <- function(nchangepoints){ if (!is.numeric(nchangepoints) || any(nchangepoints %% 1 != 0)){ stop("nchangepoints must be integer-valued") @@ -464,27 +130,6 @@ check_nchangepoints <- function(nchangepoints){ return() } -#' @title Check that weights vector is proper -#' -#' @description Check that the vector of document weights is numeric and -#' positive and inform the user if the average weight isn't 1. -#' -#' @param weights Vector of the document weights to evaluate, or \code{TRUE} -#' for triggering internal weighting by document sizes. -#' -#' @return An error message is thrown if \code{weights} is not proper, -#' else \code{NULL}. -#' -#' @examples -#' check_weights(1) -#' wts <- runif(100, 0.1, 100) -#' check_weights(wts) -#' wts2 <- wts / mean(wts) -#' check_weights(wts2) -#' check_weights(TRUE) -#' -#' @export -#' check_weights <- function(weights){ if(is.logical(weights)){ if(weights){ @@ -507,28 +152,7 @@ check_weights <- function(weights){ return() } -#' @title Check that LDA model input is proper -#' -#' @description Check that the \code{LDA_models} input is either a set of -#' LDA models (class \code{LDA_set}, produced by -#' \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -#' produced by \code{\link[topicmodels]{LDA}}). -#' -#' @param LDA_models List of LDA models or singular LDA model to evaluate. -#' -#' @return An error message is thrown if \code{LDA_models} is not proper, -#' else \code{NULL}. -#' -#' @examples -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDAs <- LDA_set(document_term_table, topics = 2, nseeds = 1) -#' LDA_models <- select_LDA(LDAs) -#' check_LDA_models(LDA_models) -#' -#' @export -#' + check_LDA_models <- function(LDA_models){ if(("LDA_set" %in% class(LDA_models)) == FALSE){ if(is(LDA_models, "LDA") == FALSE){ @@ -538,30 +162,6 @@ check_LDA_models <- function(LDA_models){ return() } -#' @title Check that the document covariate table is proper -#' -#' @description Check that the table of document-level covariates is -#' conformable to a data frame and of the right size (correct number of -#' documents) for the document-topic output from the LDA models. -#' -#' @param document_covariate_table Document covariate table to evaluate. -#' -#' @param LDA_models Reference LDA model list (class \code{LDA_set}) that -#' includes as its first element a properly fitted \code{LDA} model with -#' a \code{gamma} slot with the document-topic distribution. -#' -#' @param document_term_table Optional input for checking when -#' \code{LDA_models} is \code{NULL} -#' -#' @return An error message is thrown if \code{document_covariate_table} is -#' not proper, else \code{NULL}. -#' -#' @examples -#' data(rodents) -#' check_document_covariate_table(rodents$document_covariate_table) -#' -#' @export -#' check_document_covariate_table <- function(document_covariate_table, LDA_models = NULL, document_term_table = NULL){ @@ -590,28 +190,6 @@ check_document_covariate_table <- function(document_covariate_table, return() } -#' @title Check that the time vector is proper -#' -#' @description Check that the vector of time values is included in the -#' document covariate table and that it is either a integer-conformable or -#' a \code{date}. If it is a \code{date}, the input is converted to an -#' integer, resulting in the timestep being 1 day, which is often not -#' desired behavior. -#' -#' @param document_covariate_table Document covariate table used to query -#' for the time column. -#' -#' @param timename Column name for the time variable to evaluate. -#' -#' @return An error message is thrown if \code{timename} is -#' not proper, else \code{NULL}. -#' -#' @examples -#' data(rodents) -#' check_timename(rodents$document_covariate_table, "newmoon") -#' -#' @export -#' check_timename <- function(document_covariate_table, timename){ if (!("character" %in% class(timename))){ stop("timename is not a character value") @@ -631,32 +209,7 @@ check_timename <- function(document_covariate_table, timename){ return() } -#' @title Check that formulas vector is proper and append the response -#' variable -#' -#' @description Check that the vector of formulas is actually formatted -#' as a vector of \code{\link[stats]{formula}} objects and that the -#' predictor variables are all included in the document covariate table. -#' -#' @param formulas Vector of the formulas to evaluate. -#' -#' @param document_covariate_table Document covariate table used to evaluate -#' the availability of the data required by the formula inputs. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return An error message is thrown if \code{formulas} is -#' not proper, else \code{NULL}. -#' -#' @examples -#' data(rodents) -#' check_formulas(~ 1, rodents$document_covariate_table) -#' -#' @export -#' + check_formulas <- function(formulas, document_covariate_table, control = list()){ check_document_covariate_table(document_covariate_table) @@ -686,10 +239,8 @@ check_formulas <- function(formulas, document_covariate_table, return() } -#' @rdname TS_on_LDA -#' -#' @export -#' + + check_TS_on_LDA_inputs <- function(LDA_models, document_covariate_table, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, diff --git a/hold.R b/hold.R index cacf80fd..b078fce8 100644 --- a/hold.R +++ b/hold.R @@ -1,6 +1,9 @@ data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 3, 1, list(quiet = TRUE)) + + lda <- LDA(rodents, 3, 1, list(quiet = TRUE)) + +lda + dct <- rodents$document_covariate_table dct$gamma <- lda[[1]]@gamma weights <- document_weights(dtt) diff --git a/man/TS.Rd b/man/TS.Rd deleted file mode 100644 index 9fffb18f..00000000 --- a/man/TS.Rd +++ /dev/null @@ -1,160 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{TS} -\alias{TS} -\alias{check_TS_inputs} -\title{Conduct a single multinomial Bayesian Time Series analysis} -\usage{ -TS(data, formula = gamma ~ 1, nchangepoints = 0, timename = "time", - weights = NULL, control = list()) - -check_TS_inputs(data, formula = gamma ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, control = list()) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output. See \code{Examples}.} - -\item{formula}{\code{\link[stats]{formula}} defining the regression between -relationship the change points. Any -predictor variable included must also be a column in -\code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} - -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the -time series into chunks fit with separate models dictated by -\code{formula}.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{TS}: \code{TS_fit}-class list containing the following - elements, many of - which are hidden for \code{print}ing, but are accessible: - \describe{ - \item{data}{\code{data} input to the function.} - \item{formula}{\code{\link[stats]{formula}} input to the function.} - \item{nchangepoints}{\code{nchangepoints} input to the function.} - \item{weights}{\code{weights} input to the function.} - \item{control}{\code{control} input to the function.} - \item{lls}{Iteration-by-iteration - \link[=logLik.multinom_TS_fit]{logLik} values for the - full time series fit by \code{\link{multinom_TS}}.} - \item{rhos}{Iteration-by-iteration change point estimates from - \code{\link{est_changepoints}}.} - \item{etas}{Iteration-by-iteration marginal regressor estimates from - \code{\link{est_regressors}}, which have been - unconditioned with respect to the change point locations.} - \item{ptMCMC_diagnostics}{ptMCMC diagnostics, - see \code{\link{diagnose_ptMCMC}}} - \item{rho_summary}{Summary table describing \code{rhos} (the change - point locations), - see \code{\link{summarize_rhos}}.} - \item{rho_vcov}{Variance-covariance matrix for the estimates of - \code{rhos} (the change point locations), see - \code{\link{measure_rho_vcov}}.} - \item{eta_summary}{Summary table describing \code{ets} (the - regressors), - see \code{\link{summarize_etas}}.} - \item{eta_vcov}{Variance-covariance matrix for the estimates of - \code{etas} (the regressors), see - \code{\link{measure_eta_vcov}}.} - \item{logLik}{Across-iteration average of log-likelihoods - (\code{lls}).} - \item{nparams}{Total number of parameters in the full model, - including the change point locations and regressors.} - \item{deviance}{Penalized negative log-likelihood, based on - \code{logLik} and \code{nparams}.} - } - \code{check_TS_inputs}: An error message is thrown if any input - is not proper, else \code{NULL}. -} -\description{ -This is the main interface function for the LDATS application - of Bayesian change point Time Series analyses (Christensen \emph{et al.} - 2018), which extends the model of Western and Kleykamp (2004; - see also Ruggieri 2013) to multinomial (proportional) response data using - softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) - using a generalized linear modeling approach (McCullagh and Nelder 1989). - The models are fit using parallel tempering Markov Chain Monte Carlo - (ptMCMC) methods (Earl and Deem 2005) to locate change points and - neural networks (Ripley 1996, Venables and Ripley 2002, Bishop 2006) to - estimate regressors. \cr \cr - \code{check_TS_inputs} checks that the inputs to - \code{TS} are of proper classes for a full analysis. -} -\examples{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) -\donttest{ - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -} - check_TS_inputs(data, timename = "newmoon") - -} -\references{ -Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. - Springer, New York, NY, USA. - - Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. - Long-term community change through multiple rapid transitions in a - desert rodent community. \emph{Ecology} \strong{99}:1523-1529. - \href{https://doi.org/10.1002/ecy.2373}{link}. - - Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, - applications, and new perspectives. \emph{Physical Chemistry Chemical - Physics} \strong{7}: 3910-3916. - \href{https://doi.org/10.1039/B509983H}{link}. - - McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. - 2nd Edition. Chapman and Hall, New York, NY, USA. - - Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. - Cambridge University Press, Cambridge, UK. - - Ruggieri, E. 2013. A Bayesian approach to detecting change points in - climactic records. \emph{International Journal of Climatology} - \strong{33}:520-528. - \href{https://doi.org/10.1002/joc.3447}{link}. - - Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied - Statistics with S}. Fourth Edition. Springer, New York, NY, USA. - - Western, B. and M. Kleykamp. 2004. A Bayesian change point model for - historical time series analysis. \emph{Political Analysis} - \strong{12}:354-374. - \href{https://doi.org/10.1093/pan/mph023}{link}. -} diff --git a/man/TS_control.Rd b/man/TS_control.Rd deleted file mode 100644 index ea019d55..00000000 --- a/man/TS_control.Rd +++ /dev/null @@ -1,78 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{TS_control} -\alias{TS_control} -\title{Create the controls list for the Time Series model} -\usage{ -TS_control(memoise = TRUE, response = "gamma", lambda = 0, - measurer = AIC, selector = min, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e+10, q = 0, - nit = 10000, magnitude = 12, quiet = FALSE, burnin = 0, - thin_frac = 1, summary_prob = 0.95, seed = NULL, - model_fun = "multinom") -} -\arguments{ -\item{memoise}{\code{logical} indicator of whether the multinomial -functions should be memoised (via \code{\link[memoise]{memoise}}). -Memoisation happens to both \code{\link{multinom_TS}} and -\code{\link{multinom_TS_chunk}}.} - -\item{response}{\code{character} element indicating the response variable -used in the time series.} - -\item{lambda}{\code{numeric} "weight" decay term used to set the prior -on the regressors within each chunk-level model. Defaults to 0, -corresponding to a fully vague prior.} - -\item{measurer, selector}{Function names for use in evaluation of the TS -models. \code{measurer} is used to create a value for each model -and \code{selector} operates on the values to choose the model.} - -\item{ntemps}{\code{integer} number of temperatures (chains) to use in the -ptMCMC algorithm.} - -\item{penultimate_temp}{Penultimate temperature in the ptMCMC sequence.} - -\item{ultimate_temp}{Ultimate temperature in the ptMCMC sequence.} - -\item{q}{Exponent controlling the ptMCMC temperature sequence from the -focal chain (reference with temperature = 1) to the penultimate chain. 0 -(default) implies a geometric sequence. 1 implies squaring before -exponentiating.} - -\item{nit}{\code{integer} number of iterations (steps) used in the ptMCMC -algorithm.} - -\item{magnitude}{Average magnitude (defining a geometric distribution) -for the proposed step size in the ptMCMC algorithm.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{burnin}{\code{integer} number of iterations to remove from the -beginning of the ptMCMC algorithm.} - -\item{thin_frac}{Fraction of iterations to retain, must be \eqn{(0, 1]}, -and the default value of 1 represents no thinning.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}).} - -\item{seed}{Input to \code{set.seed} for replication purposes.} - -\item{model_fun}{\code{character} name of the model function to be used to -fit the multivariate response.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control the time series model fit occurring within - \code{\link{TS}}. -} -\examples{ - TS_control() - -} diff --git a/man/TS_on_LDA.Rd b/man/TS_on_LDA.Rd deleted file mode 100644 index 205739f2..00000000 --- a/man/TS_on_LDA.Rd +++ /dev/null @@ -1,96 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{TS_on_LDA} -\alias{TS_on_LDA} -\alias{check_TS_on_LDA_inputs} -\title{Conduct a set of Time Series analyses on a set of LDA models} -\usage{ -TS_on_LDA(LDA_models, document_covariate_table, formulas = ~1, - nchangepoints = 0, timename = "time", weights = NULL, - control = list()) - -check_TS_on_LDA_inputs(LDA_models, document_covariate_table, - formulas = ~1, nchangepoints = 0, timename = "time", - weights = NULL, control = list()) -} -\arguments{ -\item{LDA_models}{List of LDA models (class \code{LDA_set}, produced by -\code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -produced by \code{\link[topicmodels]{LDA}}).} - -\item{document_covariate_table}{Document covariate table (rows: documents, -columns: time index and covariate options). Every model needs a -covariate to describe the time value for each document (in whatever -units and whose name in the table is input in \code{timename}) -that dictates the application of the change points. -In addition, all covariates named within specific models in -\code{formula} must be included. Must be a conformable to a data table, -as verified by \code{\link{check_document_covariate_table}}.} - -\item{formulas}{Vector of \code{\link[stats]{formula}}(s) for the -continuous (non-change point) component of the time series models. Any -predictor variable included in a formula must also be a column in the -\code{document_covariate_table}. Each element (formula) in the vector -is evaluated for each number of change points and each LDA model.} - -\item{nchangepoints}{Vector of \code{integer}s corresponding to the number -of change points to include in the time series models. 0 is a valid input -corresponding to no change points (\emph{i.e.}, a singular time series -model), and the current implementation can reasonably include up to 6 -change points. Each element in the vector is the number of change points -used to segment the data for each formula (entry in \code{formulas}) -component of the TS model, for each selected LDA model.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{TS_on_LDA}: \code{TS_on_LDA}-class \code{list} of results - from \code{\link{TS}} applied for each model on each LDA model input. - \cr \cr - \code{check_TS_inputs}: An error message is thrown if any input - is not proper, else \code{NULL}. -} -\description{ -This is a wrapper function that expands the main Time Series - analyses function (\code{\link{TS}}) across the LDA models (estimated - using \code{\link[topicmodels]{LDA}} or \code{\link{LDA_set}} and the - Time Series models, with respect to both continuous time formulas and the - number of discrete changepoints. This function allows direct passage of - the control parameters for the parallel tempering MCMC through to the - main Time Series function, \code{\link{TS}}, via the - \code{ptMCMC_controls} argument. \cr \cr - \code{check_TS_on_LDA_inputs} checks that the inputs to - \code{TS_on_LDA} are of proper classes for a full analysis. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints = 0:1, timename = "newmoon", weights) -} - -} diff --git a/man/check_LDA_models.Rd b/man/check_LDA_models.Rd deleted file mode 100644 index 7f2f700d..00000000 --- a/man/check_LDA_models.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_LDA_models} -\alias{check_LDA_models} -\title{Check that LDA model input is proper} -\usage{ -check_LDA_models(LDA_models) -} -\arguments{ -\item{LDA_models}{List of LDA models or singular LDA model to evaluate.} -} -\value{ -An error message is thrown if \code{LDA_models} is not proper, - else \code{NULL}. -} -\description{ -Check that the \code{LDA_models} input is either a set of - LDA models (class \code{LDA_set}, produced by - \code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, - produced by \code{\link[topicmodels]{LDA}}). -} -\examples{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2, nseeds = 1) - LDA_models <- select_LDA(LDAs) - check_LDA_models(LDA_models) - -} diff --git a/man/check_document_covariate_table.Rd b/man/check_document_covariate_table.Rd deleted file mode 100644 index 59a49bc8..00000000 --- a/man/check_document_covariate_table.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_document_covariate_table} -\alias{check_document_covariate_table} -\title{Check that the document covariate table is proper} -\usage{ -check_document_covariate_table(document_covariate_table, - LDA_models = NULL, document_term_table = NULL) -} -\arguments{ -\item{document_covariate_table}{Document covariate table to evaluate.} - -\item{LDA_models}{Reference LDA model list (class \code{LDA_set}) that -includes as its first element a properly fitted \code{LDA} model with -a \code{gamma} slot with the document-topic distribution.} - -\item{document_term_table}{Optional input for checking when -\code{LDA_models} is \code{NULL}} -} -\value{ -An error message is thrown if \code{document_covariate_table} is - not proper, else \code{NULL}. -} -\description{ -Check that the table of document-level covariates is - conformable to a data frame and of the right size (correct number of - documents) for the document-topic output from the LDA models. -} -\examples{ - data(rodents) - check_document_covariate_table(rodents$document_covariate_table) - -} diff --git a/man/check_formula.Rd b/man/check_formula.Rd deleted file mode 100644 index 4d2aead5..00000000 --- a/man/check_formula.Rd +++ /dev/null @@ -1,39 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{check_formula} -\alias{check_formula} -\title{Check that a formula is proper} -\usage{ -check_formula(data, formula) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{formula} to evaluate.} -} -\value{ -An error message is thrown if \code{formula} is not proper, - else \code{NULL}. -} -\description{ -Check that \code{formula} is actually a - \code{\link[stats]{formula}} and that the - response and predictor variables are all included in \code{data}. -} -\examples{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - check_formula(data, gamma ~ 1) - -} diff --git a/man/check_formulas.Rd b/man/check_formulas.Rd deleted file mode 100644 index 20dc3b7d..00000000 --- a/man/check_formulas.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_formulas} -\alias{check_formulas} -\title{Check that formulas vector is proper and append the response - variable} -\usage{ -check_formulas(formulas, document_covariate_table, control = list()) -} -\arguments{ -\item{formulas}{Vector of the formulas to evaluate.} - -\item{document_covariate_table}{Document covariate table used to evaluate -the availability of the data required by the formula inputs.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -An error message is thrown if \code{formulas} is - not proper, else \code{NULL}. -} -\description{ -Check that the vector of formulas is actually formatted - as a vector of \code{\link[stats]{formula}} objects and that the - predictor variables are all included in the document covariate table. -} -\examples{ - data(rodents) - check_formulas(~ 1, rodents$document_covariate_table) - -} diff --git a/man/check_nchangepoints.Rd b/man/check_nchangepoints.Rd deleted file mode 100644 index 6615f714..00000000 --- a/man/check_nchangepoints.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_nchangepoints} -\alias{check_nchangepoints} -\title{Check that nchangepoints vector is proper} -\usage{ -check_nchangepoints(nchangepoints) -} -\arguments{ -\item{nchangepoints}{Vector of the number of changepoints to evaluate.} -} -\value{ -An error message is thrown if \code{nchangepoints} is not proper, - else \code{NULL}. -} -\description{ -Check that the vector of numbers of changepoints is - conformable to integers greater than 1. -} -\examples{ - check_nchangepoints(0) - check_nchangepoints(2) - -} diff --git a/man/check_timename.Rd b/man/check_timename.Rd deleted file mode 100644 index d04a7763..00000000 --- a/man/check_timename.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_timename} -\alias{check_timename} -\title{Check that the time vector is proper} -\usage{ -check_timename(document_covariate_table, timename) -} -\arguments{ -\item{document_covariate_table}{Document covariate table used to query -for the time column.} - -\item{timename}{Column name for the time variable to evaluate.} -} -\value{ -An error message is thrown if \code{timename} is - not proper, else \code{NULL}. -} -\description{ -Check that the vector of time values is included in the - document covariate table and that it is either a integer-conformable or - a \code{date}. If it is a \code{date}, the input is converted to an - integer, resulting in the timestep being 1 day, which is often not - desired behavior. -} -\examples{ - data(rodents) - check_timename(rodents$document_covariate_table, "newmoon") - -} diff --git a/man/check_weights.Rd b/man/check_weights.Rd deleted file mode 100644 index 3d95c9ce..00000000 --- a/man/check_weights.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{check_weights} -\alias{check_weights} -\title{Check that weights vector is proper} -\usage{ -check_weights(weights) -} -\arguments{ -\item{weights}{Vector of the document weights to evaluate, or \code{TRUE} -for triggering internal weighting by document sizes.} -} -\value{ -An error message is thrown if \code{weights} is not proper, - else \code{NULL}. -} -\description{ -Check that the vector of document weights is numeric and - positive and inform the user if the average weight isn't 1. -} -\examples{ - check_weights(1) - wts <- runif(100, 0.1, 100) - check_weights(wts) - wts2 <- wts / mean(wts) - check_weights(wts2) - check_weights(TRUE) - -} diff --git a/man/est_changepoints.Rd b/man/est_changepoints.Rd deleted file mode 100644 index f1d37798..00000000 --- a/man/est_changepoints.Rd +++ /dev/null @@ -1,77 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{est_changepoints} -\alias{est_changepoints} -\title{Use ptMCMC to estimate the distribution of change point locations} -\usage{ -est_changepoints(data, formula, nchangepoints, timename, weights, - control = list()) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{\link[stats]{formula}} defining the regression between -relationship the change points. Any -predictor variable included must also be a column in -\code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} - -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the -time series into chunks fit with separate models dictated by -\code{formula}.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -List of saved data objects from the ptMCMC estimation of - change point locations (unless \code{nchangepoints} is 0, then - \code{NULL} is returned). -} -\description{ -This function executes ptMCMC-based estimation of the - change point location distributions for multinomial Time Series analyses. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - formula <- gamma ~ 1 - nchangepoints <- 1 - control <- TS_control() - data <- data[order(data[,"newmoon"]), ] - rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", - weights, control) -} - -} diff --git a/man/est_regressors.Rd b/man/est_regressors.Rd deleted file mode 100644 index b394b8e4..00000000 --- a/man/est_regressors.Rd +++ /dev/null @@ -1,108 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{est_regressors} -\alias{est_regressors} -\title{Estimate the distribution of regressors, unconditional on the - change point locations} -\usage{ -est_regressors(rho_dist, data, formula, timename, weights, - control = list()) -} -\arguments{ -\item{rho_dist}{List of saved data objects from the ptMCMC estimation of -change point locations (unless \code{nchangepoints} is 0, then -\code{NULL}) returned from \code{\link{est_changepoints}}.} - -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{\link[stats]{formula}} defining the regression between -relationship the change points. Any -predictor variable included must also be a column in -\code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{matrix} of draws (rows) from the marginal posteriors of the - coefficients across the segments (columns). -} -\description{ -This function uses the marginal posterior distributions of - the change point locations (estimated by \code{\link{est_changepoints}}) - in combination with the conditional (on the change point locations) - posterior distributions of the regressors (estimated by - \code{\link{multinom_TS}}) to estimate the marginal posterior - distribution of the regressors, unconditional on the change point - locations. -} -\details{ -The general approach follows that of Western and Kleykamp - (2004), although we note some important differences. Our regression - models are fit independently for each chunk (segment of time), and - therefore the variance-covariance matrix for the full model - has \code{0} entries for covariances between regressors in different - chunks of the time series. Further, because the regression model here - is a standard (non-hierarchical) softmax (Ripley 1996, Venables and - Ripley 2002, Bishop 2006), there is no error term in the regression - (as there is in the normal model used by Western and Kleykamp 2004), - and so the posterior distribution used here is a multivariate normal, - as opposed to a multivariate t, as used by Western and Kleykamp (2004). -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - formula <- gamma ~ 1 - nchangepoints <- 1 - control <- TS_control() - data <- data[order(data[,"newmoon"]), ] - rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", - weights, control) - eta_dist <- est_regressors(rho_dist, data, formula, "newmoon", weights, - control) -} - -} -\references{ -Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. - Springer, New York, NY, USA. - - Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. - Cambridge University Press, Cambridge, UK. - - Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied - Statistics with S}. Fourth Edition. Springer, New York, NY, USA. - - Western, B. and M. Kleykamp. 2004. A Bayesian change point model for - historical time series analysis. \emph{Political Analysis} - \strong{12}:354-374. - \href{https://doi.org/10.1093/pan/mph023}{link}. -} diff --git a/man/expand_TS.Rd b/man/expand_TS.Rd deleted file mode 100644 index 8a33d62e..00000000 --- a/man/expand_TS.Rd +++ /dev/null @@ -1,52 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{expand_TS} -\alias{expand_TS} -\title{Expand the TS models across the factorial combination of - LDA models, formulas, and number of change points} -\usage{ -expand_TS(LDA_models, formulas, nchangepoints) -} -\arguments{ -\item{LDA_models}{List of LDA models (class \code{LDA_set}, produced by -\code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -produced by \code{\link[topicmodels]{LDA}}).} - -\item{formulas}{Vector of \code{\link[stats]{formula}}(s) for the -continuous (non-change point) component of the time series models. Any -predictor variable included in a formula must also be a column in the -\code{document_covariate_table}. Each element (formula) in the vector -is evaluated for each number of change points and each LDA model.} - -\item{nchangepoints}{Vector of \code{integer}s corresponding to the number -of change points to include in the time series models. 0 is a valid input -corresponding to no change points (\emph{i.e.}, a singular time series -model), and the current implementation can reasonably include up to 6 -change points. Each element in the vector is the number of change points -used to segment the data for each formula (entry in \code{formulas}) -component of the TS model, for each selected LDA model.} -} -\value{ -Expanded \code{data.frame} table of the three values (columns) for - each unique model run (rows): [1] the LDA model (indicated - as a numeric element reference to the \code{LDA_models} object), [2] the - regressor formula, and [3] the number of changepoints. -} -\description{ -Expand the completely crossed combination of model inputs: - LDA model results, formulas, and number of change points. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - nchangepoints <- 0:1 - expand_TS(LDA_models, formulas, nchangepoints) -} - -} diff --git a/man/logLik.TS_fit.Rd b/man/logLik.TS_fit.Rd deleted file mode 100644 index 6eb289c9..00000000 --- a/man/logLik.TS_fit.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{logLik.TS_fit} -\alias{logLik.TS_fit} -\title{Determine the log likelihood of a Time Series model} -\usage{ -\method{logLik}{TS_fit}(object, ...) -} -\arguments{ -\item{object}{Class \code{TS_fit} object to be evaluated.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -Log likelihood of the model \code{logLik}, also with \code{df} - (degrees of freedom) and \code{nobs} (number of observations) values. -} -\description{ -Convenience function to extract and format the log likelihood - of a \code{TS_fit}-class object fit by \code{\link{multinom_TS}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - logLik(TSmod) -} - -} diff --git a/man/package_TS.Rd b/man/package_TS.Rd deleted file mode 100644 index c346fdc1..00000000 --- a/man/package_TS.Rd +++ /dev/null @@ -1,116 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{package_TS} -\alias{package_TS} -\title{Summarize the Time Series model} -\usage{ -package_TS(data, formula, timename, weights, control, rho_dist, eta_dist) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{\link[stats]{formula}} defining the regression between -relationship the change points. Any -predictor variable included must also be a column in -\code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} - -\item{rho_dist}{List of saved data objects from the ptMCMC estimation of -change point locations returned by \code{\link{est_changepoints}} -(unless \code{nchangepoints} is 0, then \code{NULL}).} - -\item{eta_dist}{Matrix of draws (rows) from the marginal posteriors of the -coefficients across the segments (columns), as estimated by -\code{\link{est_regressors}}.} -} -\value{ -\code{TS_fit}-class list containing the following elements, many of - which are hidden for \code{print}ing, but are accessible: - \describe{ - \item{data}{\code{data} input to the function.} - \item{formula}{\code{\link[stats]{formula}} input to the function.} - \item{nchangepoints}{\code{nchangepoints} input to the function.} - \item{weights}{\code{weights} input to the function.} - \item{timename}{\code{timename} input to the function.} - \item{control}{\code{control} input to the function.} - \item{lls}{Iteration-by-iteration - \link[=logLik.multinom_TS_fit]{logLik} values for the - full time series fit by \code{\link{multinom_TS}}.} - \item{rhos}{Iteration-by-iteration change point estimates from - \code{\link{est_changepoints}}.} - \item{etas}{Iteration-by-iteration marginal regressor estimates from - \code{\link{est_regressors}}, which have been - unconditioned with respect to the change point locations.} - \item{ptMCMC_diagnostics}{ptMCMC diagnostics, - see \code{\link{diagnose_ptMCMC}}} - \item{rho_summary}{Summary table describing \code{rhos} (the change - point locations), - see \code{\link{summarize_rhos}}.} - \item{rho_vcov}{Variance-covariance matrix for the estimates of - \code{rhos} (the change point locations), see - \code{\link{measure_rho_vcov}}.} - \item{eta_summary}{Summary table describing \code{ets} (the - regressors), - see \code{\link{summarize_etas}}.} - \item{eta_vcov}{Variance-covariance matrix for the estimates of - \code{etas} (the regressors), see - \code{\link{measure_eta_vcov}}.} - \item{logLik}{Across-iteration average of log-likelihoods - (\code{lls}).} - \item{nparams}{Total number of parameters in the full model, - including the change point locations and regressors.} - \item{AIC}{Penalized negative log-likelihood, based on - \code{logLik} and \code{nparams}.} - } -} -\description{ -Calculate relevant summaries for the run of a Time Series - model within \code{\link{TS}} and package the output as a - \code{TS_fit}-class object. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - formula <- gamma ~ 1 - nchangepoints <- 1 - control <- TS_control() - data <- data[order(data[,"newmoon"]), ] - rho_dist <- est_changepoints(data, formula, nchangepoints, "newmoon", - weights, control) - eta_dist <- est_regressors(rho_dist, data, formula, "newmoon", weights, - control) - package_TS(data, formula, "newmoon", weights, control, rho_dist, - eta_dist) -} - -} diff --git a/man/package_TS_on_LDA.Rd b/man/package_TS_on_LDA.Rd deleted file mode 100644 index a8d92ac8..00000000 --- a/man/package_TS_on_LDA.Rd +++ /dev/null @@ -1,51 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{package_TS_on_LDA} -\alias{package_TS_on_LDA} -\title{Package the output of TS_on_LDA} -\usage{ -package_TS_on_LDA(TSmods, LDA_models, models) -} -\arguments{ -\item{TSmods}{list of results from \code{\link{TS}} applied for each model -on each LDA model input.} - -\item{LDA_models}{List of LDA models (class \code{LDA_set}, produced by -\code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -produced by \code{\link[topicmodels]{LDA}}).} - -\item{models}{\code{data.frame} object returned from -\code{\link{expand_TS}} that contains the combinations of LDA models, -and formulas and nchangepoints used in the TS models.} -} -\value{ -Class \code{TS_on_LDA} list of results from \code{\link{TS}} - applied for each model on each LDA model input. -} -\description{ -Set the class and name the elements of the results list - returned from applying \code{\link{TS}} to the combination of TS models - requested for the LDA model(s) input. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - mods <- expand_TS(LDA_models, c(~ 1, ~ newmoon), 0:1) - nmods <- nrow(mods) - TSmods <- vector("list", nmods) - for(i in 1:nmods){ - formula_i <- mods$formula[[i]] - nchangepoints_i <- mods$nchangepoints[i] - data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, i) - TSmods[[i]] <- TS(data_i, formula_i, nchangepoints_i, "newmoon", - weights, TS_control()) - } - package_TS_on_LDA(TSmods, LDA_models, mods) -} - -} diff --git a/man/prep_TS_data.Rd b/man/prep_TS_data.Rd deleted file mode 100644 index 86b96e34..00000000 --- a/man/prep_TS_data.Rd +++ /dev/null @@ -1,55 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{prep_TS_data} -\alias{prep_TS_data} -\title{Prepare the model-specific data to be used in the TS analysis - of LDA output} -\usage{ -prep_TS_data(document_covariate_table, LDA_models, mods, i = 1) -} -\arguments{ -\item{document_covariate_table}{Document covariate table (rows: documents, -columns: time index and covariate options). Every model needs a -covariate to describe the time value for each document (in whatever -units and whose name in the table is input in \code{timename}) -that dictates the application of the change points. -In addition, all covariates named within specific models in -\code{formula} must be included. Must be a conformable to a data table, -as verified by \code{\link{check_document_covariate_table}}.} - -\item{LDA_models}{List of LDA models (class \code{LDA_set}, produced by -\code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -produced by \code{\link[topicmodels]{LDA}}).} - -\item{mods}{The \code{data.table} created by \code{\link{expand_TS}} that -contains each of the models (defined by the LDA model to use and the and -formula number of changepoints for the TS model). Indexed here by -\code{i}.} - -\item{i}{\code{integer} index referencing the row in \code{mods} to use.} -} -\value{ -Class \code{data.frame} object including [1] the time variable - (indicated in \code{control}), [2] the predictor variables (required by - \code{formula}) and [3], the multinomial response variable (indicated - in \code{formula}), ready for input into \code{TS}. -} -\description{ -Append the estimated topic proportions from a fitted LDA model - to the document covariate table to create the data structure needed for - \code{\link{TS}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - mods <- expand_TS(LDA_models, formulas = ~1, nchangepoints = 0) - data1 <- prep_TS_data(document_covariate_table, LDA_models, mods) -} - -} diff --git a/man/prep_pbar.Rd b/man/prep_pbar.Rd deleted file mode 100644 index e4d9f2f7..00000000 --- a/man/prep_pbar.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{prep_pbar} -\alias{prep_pbar} -\alias{update_pbar} -\title{Initialize and tick through the progress bar} -\usage{ -prep_pbar(control = list(), bar_type = "rho", nr = NULL) - -update_pbar(pbar, control = list()) -} -\arguments{ -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}. Of use here is \code{quiet} which is a -a \code{logical} indicator of whether there should be information -(i.e. the progress bar) printed during the run or not. Default is -\code{TRUE}.} - -\item{bar_type}{"rho" (for change point locations) or "eta" (for -regressors).} - -\item{nr}{\code{integer} number of unique realizations, needed when -\code{bar_type} = "eta".} - -\item{pbar}{The progress bar object returned from \code{prep_pbar}.} -} -\value{ -\code{prep_pbar}: the initialized progress bar object. \cr \cr - \code{update_pbar}: the ticked-forward \code{pbar}. -} -\description{ -\code{prep_pbar} creates and \code{update_pbar} steps - through the progress bars (if desired) in \code{\link{TS}} -} -\examples{ - pb <- prep_pbar(control = list(nit = 2)); pb - pb <- update_pbar(pb); pb - pb <- update_pbar(pb); pb - -} diff --git a/man/print.TS_fit.Rd b/man/print.TS_fit.Rd deleted file mode 100644 index 091d1c66..00000000 --- a/man/print.TS_fit.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{print.TS_fit} -\alias{print.TS_fit} -\title{Print a Time Series model fit} -\usage{ -\method{print}{TS_fit}(x, ...) -} -\arguments{ -\item{x}{Class \code{TS_fit} object to be printed.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -The non-hidden parts of \code{x} as a \code{list}. -} -\description{ -Convenience function to print only the most important - components of a \code{TS_fit}-class object fit by - \code{\link{TS}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - print(TSmod) -} - -} diff --git a/man/print.TS_on_LDA.Rd b/man/print.TS_on_LDA.Rd deleted file mode 100644 index c30fc5c1..00000000 --- a/man/print.TS_on_LDA.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{print.TS_on_LDA} -\alias{print.TS_on_LDA} -\title{Print a set of Time Series models fit to LDAs} -\usage{ -\method{print}{TS_on_LDA}(x, ...) -} -\arguments{ -\item{x}{Class \code{TS_on_LDA} object to be printed.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -\code{character} \code{vector} of the names of \code{x}'s models. -} -\description{ -Convenience function to print only the names of a - \code{TS_on_LDA}-class object generated by \code{\link{TS_on_LDA}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints = 0:1, timename = "newmoon", weights) - print(mods) -} - -} diff --git a/man/print_model_run_message.Rd b/man/print_model_run_message.Rd deleted file mode 100644 index 3241361b..00000000 --- a/man/print_model_run_message.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{print_model_run_message} -\alias{print_model_run_message} -\title{Print the message to the console about which combination of the - Time Series and LDA models is being run} -\usage{ -print_model_run_message(models, i, LDA_models, control) -} -\arguments{ -\item{models}{\code{data.frame} object returned from -\code{\link{expand_TS}} that contains the combinations of LDA models, -and formulas and nchangepoints used in the TS models.} - -\item{i}{\code{integer} index of the row to use from \code{models}.} - -\item{LDA_models}{List of LDA models (class \code{LDA_set}, produced by -\code{\link{LDA_set}}) or a singular LDA model (class \code{LDA}, -produced by \code{\link[topicmodels]{LDA}}).} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}. Of particular importance here is -the \code{logical}-class element named \code{quiet}.} -} -\value{ -\code{NULL}. -} -\description{ -If desired, print a message at the beginning of every model - combination stating the TS model and the LDA model being evaluated. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - nchangepoints <- 0:1 - mods <- expand_TS(LDA_models, formulas, nchangepoints) - print_model_run_message(mods, 1, LDA_models, TS_control()) -} - -} diff --git a/man/select_TS.Rd b/man/select_TS.Rd deleted file mode 100644 index efd691a4..00000000 --- a/man/select_TS.Rd +++ /dev/null @@ -1,46 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_on_LDA.R -\name{select_TS} -\alias{select_TS} -\title{Select the best Time Series model} -\usage{ -select_TS(TS_models, control = list()) -} -\arguments{ -\item{TS_models}{An object of class \code{TS_on_LDA} produced by -\code{\link{TS_on_LDA}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -A reduced version of \code{TS_models} that only includes the - selected TS model. The returned object is a single TS model object of - class \code{TS_fit}. -} -\description{ -Select the best model of interest from an - \code{TS_on_LDA} object generated by \code{\link{TS_on_LDA}}, based on - a set of user-provided functions. The functions default to choosing the - model with the lowest AIC value. \cr \cr - Presently, the set of functions should result in a singular selected - model. If multiple models are chosen via the selection, only the first - is returned. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDAs <- LDA_set(document_term_table, topics = 2:3, nseeds = 2) - LDA_models <- select_LDA(LDAs) - weights <- document_weights(document_term_table) - formulas <- c(~ 1, ~ newmoon) - mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints = 0:1, timename = "newmoon", weights) - select_TS(mods) -} - -} diff --git a/man/summarize_etas.Rd b/man/summarize_etas.Rd deleted file mode 100644 index 9e04bf09..00000000 --- a/man/summarize_etas.Rd +++ /dev/null @@ -1,41 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{summarize_etas} -\alias{summarize_etas} -\alias{measure_eta_vcov} -\title{Summarize the regressor (eta) distributions} -\usage{ -summarize_etas(etas, control = list()) - -measure_eta_vcov(etas) -} -\arguments{ -\item{etas}{Matrix of regressors (columns) across iterations of the -ptMCMC (rows), as returned from \code{\link{est_regressors}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{summarize_etas}: table of summary statistics for chunk-level - regressors including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each regressor. \cr \cr - \code{measure_eta_vcov}: variance-covariance matrix for chunk-level - regressors. -} -\description{ -\code{summarize_etas} calculates summary statistics for each - of the chunk-level regressors. - \cr \cr - \code{measure_ets_vcov} generates the variance-covariance matrix for - the regressors. -} -\examples{ - etas <- matrix(rnorm(100), 50, 2) - summarize_etas(etas) - measure_eta_vcov(etas) - -} diff --git a/man/summarize_rhos.Rd b/man/summarize_rhos.Rd deleted file mode 100644 index 0ac4d1c9..00000000 --- a/man/summarize_rhos.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{summarize_rhos} -\alias{summarize_rhos} -\alias{measure_rho_vcov} -\title{Summarize the rho distributions} -\usage{ -summarize_rhos(rhos, control = list()) - -measure_rho_vcov(rhos) -} -\arguments{ -\item{rhos}{Matrix of change point locations (columns) across iterations of -the ptMCMC (rows) or \code{NULL} if no change points are in the model, -as returned from \code{\link{est_changepoints}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{summarize_rhos}: table of summary statistics for change point - locations including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each change point location. \cr \cr - \code{measure_rho_vcov}: variance-covariance matrix for change - point locations. -} -\description{ -\code{summarize_rho} calculates summary statistics for each - of the change point locations. - \cr \cr - \code{measure_rho_vcov} generates the variance-covariance matrix for the - change point locations. -} -\examples{ - rhos <- matrix(sample(80:100, 100, TRUE), 50, 2) - summarize_rhos(rhos) - measure_rho_vcov(rhos) - -} From 6861802d6a4975a32f3c65cbb134123a2ddbb5a1 Mon Sep 17 00:00:00 2001 From: DAPPERstats Date: Thu, 12 Mar 2020 12:35:19 -0700 Subject: [PATCH 09/43] Create testing_example.R --- testing_example.R | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 testing_example.R diff --git a/testing_example.R b/testing_example.R new file mode 100644 index 00000000..96462e30 --- /dev/null +++ b/testing_example.R @@ -0,0 +1,9 @@ +devtools::load_all() +data(rodents) +length(rodents) +rodents[["metadata"]] <- list(timename = "newmoon") + +rodents[["metadata"]] <- NULL +mod <- LDA(rodents) +mod <- LDA(rodents, topics = 1) +mod <- LDA(rodents, control = LDA_control(LDA_args = list(method = "Gibbs"))) \ No newline at end of file From 7b93bf6c7f1964f758e97797b50640aaccf1a822 Mon Sep 17 00:00:00 2001 From: DAPPERstats Date: Thu, 12 Mar 2020 12:39:23 -0700 Subject: [PATCH 10/43] Update testing_example.R --- testing_example.R | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/testing_example.R b/testing_example.R index 96462e30..5f8c28a2 100644 --- a/testing_example.R +++ b/testing_example.R @@ -1,9 +1,15 @@ devtools::load_all() data(rodents) length(rodents) + rodents[["metadata"]] <- list(timename = "newmoon") +names(rodents) <- c("abundance", "covariates", "metadata") rodents[["metadata"]] <- NULL +names(rodents)[1] <- "term" mod <- LDA(rodents) mod <- LDA(rodents, topics = 1) -mod <- LDA(rodents, control = LDA_control(LDA_args = list(method = "Gibbs"))) \ No newline at end of file +mod <- LDA(rodents, control = LDA_control(LDA_args = list(method = "Gibbs"))) + +mod <- LDA(rodents[[1]]) + From dfdd5eafbda50885995a7848c80660d27c92f5e7 Mon Sep 17 00:00:00 2001 From: DAPPERstats Date: Tue, 17 Mar 2020 09:27:04 -0700 Subject: [PATCH 11/43] in progress --- R/LDA.R | 1 + R/LDA_TS.R | 2 +- R/TS.R | 124 ++++++++++++++++++++++++++++++++++++++++++----------- R/ptMCMC.R | 66 ++++++++++++++++++++++++++-- hold.R | 16 +++++++ notes.R | 2 + 6 files changed, 181 insertions(+), 30 deletions(-) diff --git a/R/LDA.R b/R/LDA.R index fcc53c97..57d873f5 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -119,6 +119,7 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ class(mod_ll) <- "logLik" out <- list(params = list(alpha = mod@alpha, beta = mod@beta), document_topic_matrix = mod@gamma, + test_document_topic_matrix = NULL, #not yet available log_likelihood = mod_ll, data = data, topics = topics, rep = rep, data_subset = data_subset) class(out) <- c("LDA", "list") diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 8ba693c2..0967b9aa 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -7,7 +7,7 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, control = list()){ control <- do.call("LDA_TS_control", control) data <- conform_data(data = data, control = control) - LDAs <- LDA(data = data, topics = topics, nseeds = nseeds, + LDAs <- LDA(data = data, topics = topics, reps = reps, control = control$LDA_control) TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, nchangepoints = nchangepoints, timename = timename, diff --git a/R/TS.R b/R/TS.R index b5dd6f5a..bb709d3a 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,6 +1,12 @@ +## +# +# working in here + + + + TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ - control <- do.call("TS_control", control) messageq("----Time Series Analyses----", control$quiet) TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, @@ -12,22 +18,68 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, } selected_TSs <- select_TS(TSs = TSs, control = control) package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) +} + + +# the defining characteristic here is the sequential +# estimation of rho then eta, ostensibly it could be done together + + +sequential_TS <- function(TS, control = list()){ + rho_dist <- est_changepoints(TS = TS, control = control) + eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) + } +est_changepoints <- function(TS, control = list()){ -compositional_TS <- function(TS, response = "multinomial", fitting = "memo", - ...){ - data <- TS$data + if (nchanTS$nchangepoints == 0){ + return(NULL) + } + +x <- memoizer(TS, control = control$TS_fit_args) + } -memoizer <- function(){ + + + +memoizer <- function(TS, control = list()){ + + data <- TS$data$train$ts_data + nchangepoints <- TS$nchangepoints + formula <- TS$formula + weights <- TS$weights + timename <- TS$timename + + + saves <- prep_saves(nchangepoints, control) + + inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, + weights, control) + cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) + ids <- prep_ids(control) + pbar <- prep_pbar(control, "rho") + + for(i in 1:control$nit){ + update_pbar(pbar, control) + steps <- step_chains(i, cpts, inputs) + swaps <- swap_chains(steps, inputs, ids) + saves <- update_saves(i, saves, steps, swaps) + cpts <- update_cpts(cpts, swaps) + ids <- update_ids(ids, swaps) + } + + process_saves(saves, control) } + + prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ @@ -42,35 +94,57 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, stop("formulas does not contain all formula(s)") } - nLDAs <- length(LDAs[[2]]) - - out <- formulas + formulas2 <- formulas for (i in seq_along(formulas)) { tformula <- paste(as.character(formulas[[i]]), collapse = "") - out[[i]] <- as.formula(paste("gamma", tformula)) + formulas2[[i]] <- as.formula(paste("gamma", tformula)) } - formulas <- out - nmods <- length(LDA_models) + formulas <- formulas2 + nmods <- length(LDAs[[1]]) mods <- 1:nmods - out <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) - colnames(out) <- c("LDA", "formula", "nchangepoints") - out - - - + tab <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) + colnames(tab) <- c("LDA", "formula", "nchangepoints") + + nTSs <- NROW(tab) + TSs <- vector("list", length = nTSs) + for(i in 1:nTSs){ + lda <- LDAs[[1]][[tab$LDA[i]]] + + ts_data <- lda$data + ts_data$train$ts_data <- lda$data$train$document_covariate_table + ts_data$train$ts_data$gamma <- lda$document_topic_matrix + + ts_data$test$ts_data <- lda$data$test$document_covariate_table + ts_data$test$ts_data$gamma <- lda$test_document_topic_matrix + + TSs[[i]] <- list(data = ts_data, + data_subset = lda[["data_subset"]], + formula = tab$formula[[i]], + nchangepoints = tab$nchangepoints[i], + weights = weights, + timename = timename) + } + name_tab <- data.frame(paste("LDA", tab[ , 1]), + paste(",", tab[ , 2]), + paste(",", tab[ , 3], "changepoints")) + names(TSs) <- apply(name_tab, 1, paste0, collapse = "") TSs } -TS_control <- function(TS_response_function = compositional_TS, - TS_response_args = list(family = "multinomial"), +TS_control <- function(TS_function = multinom_TS, + TS_args = list(), TS_fit_function = memoizer, - TS_fit_args = list(), + TS_fit_args = list(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + quiet = FALSE), soften = TRUE, quiet = FALSE){ - list(TS_response_function = TS_response_function, - TS_response_args = TS_response_args, + list(TS_function = TS_function, + TS_args = TS_args, TS_fit_function = TS_fit_function, TS_fit_args = TS_fit_args, soften = soften, quiet = quiet) } @@ -153,7 +227,7 @@ check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, return() } -package_TS <- function(data, formula, timename, weights, control, rho_dist, +package_TSx <- function(data, formula, timename, weights, control, rho_dist, eta_dist){ check_formula(data, formula) @@ -278,7 +352,7 @@ measure_rho_vcov <- function(rhos){ out } -est_regressors <- function(rho_dist, data, formula, timename, weights, +est_regressorsx <- function(rho_dist, data, formula, timename, weights, control = list()){ check_formula(data, formula) check_weights(weights) @@ -346,7 +420,7 @@ est_regressors <- function(rho_dist, data, formula, timename, weights, } -est_changepoints <- function(data, formula, nchangepoints, timename, weights, +est_changepointsx <- function(data, formula, nchangepoints, timename, weights, control = list()){ check_TS_inputs(data, formula, nchangepoints, timename, weights, control) control <- do.call("TS_control", control) diff --git a/R/ptMCMC.R b/R/ptMCMC.R index fdd24375..e7689c02 100644 --- a/R/ptMCMC.R +++ b/R/ptMCMC.R @@ -3,6 +3,64 @@ TS_fun <- function(control){ memoise_fun(fun, control$memoise) } +prep_temp_sequence <- function(control = list()){ + ntemps <- control$ntemps + penultimate_temp <- control$penultimate_temp + ultimate_temp <- control$ultimate_temp + q <- control$q + sequence <- seq(0, log2(penultimate_temp), length.out = ntemps - 1) + log_temps <- sequence^(1 + q) / log2(penultimate_temp)^q + c(2^(log_temps), ultimate_temp) +} + + +prep_saves <- function(nchangepoints, control = list()){ + ntemps <- control$ntemps + nit <- control$nit + cpts <- array(NA, c(nchangepoints, ntemps, nit)) + lls <- matrix(NA, ntemps, nit) + ids <- matrix(NA, ntemps, nit) + step_accepts <- matrix(FALSE, ntemps, nit) + swap_accepts <- matrix(FALSE, ntemps - 1, nit) + list(cpts = cpts, lls = lls, ids = ids, step_accepts = step_accepts, + swap_accepts = swap_accepts) +} + + + +prep_ptMCMC_inputs <- function(data, formula, nchangepoints, timename, + weights = NULL, control = list()){ + control$selector <- NULL + control$measurer <- NULL + out <- list(control = control, temps = prep_temp_sequence(control), + pdist = prep_proposal_dist(nchangepoints, control), + formula = formula, weights = weights, data = data, + TS_function = TS_fun(control), + timename = timename) + class(out) <- c("ptMCMC_inputs", "list") + out +} + + + +prep_proposal_dist <- function(nchangepoints, control = list()){ + ntemps <- control$ntemps + nit <- control$nit + if(nchangepoints == 0){ + steps <- matrix(0, nrow = nit, ncol = ntemps) + which_steps <- matrix(numeric(0), nrow = nit, ncol = ntemps) + } else{ + magnitude <- control$magnitude + step_signs <- sample(c(-1, 1), nit * ntemps, replace = TRUE) + step_magnitudes <- 1 + rgeom(nit * ntemps, 1 / magnitude) + steps <- matrix(step_signs * step_magnitudes, nrow = nit) + which_steps <- sample.int(nchangepoints, nit * ntemps, replace = TRUE) + which_steps <- matrix(which_steps, nrow = nit) + } + list(steps = steps, which_steps = which_steps) +} + + #' @title Calculate ptMCMC summary diagnostics #' #' @description Summarize the step and swap acceptance rates as well as trip @@ -586,7 +644,7 @@ update_ids <- function(ids, swaps){ #' } #' @export #' -prep_ptMCMC_inputs <- function(data, formula, nchangepoints, timename, +prep_ptMCMC_inputsx <- function(data, formula, nchangepoints, timename, weights = NULL, control = list()){ check_timename(data, timename) check_formula(data, formula) @@ -641,7 +699,7 @@ prep_ptMCMC_inputs <- function(data, formula, nchangepoints, timename, #' #' @export #' -prep_proposal_dist <- function(nchangepoints, control = list()){ +prep_proposal_distx <- function(nchangepoints, control = list()){ check_nchangepoints(nchangepoints) check_control(control) control <- do.call("TS_control", control) @@ -725,7 +783,7 @@ prep_proposal_dist <- function(nchangepoints, control = list()){ #' #' @export #' -prep_saves <- function(nchangepoints, control = list()){ +prep_savesx <- function(nchangepoints, control = list()){ check_nchangepoints(nchangepoints) check_control(control) control <- do.call("TS_control", control) @@ -926,7 +984,7 @@ update_cpts <- function(cpts, swaps){ #' #' @export #' -prep_temp_sequence <- function(control = list()){ +prep_temp_sequencex <- function(control = list()){ check_control(control) control <- do.call("TS_control", control) ntemps <- control$ntemps diff --git a/hold.R b/hold.R index b078fce8..4e8ae797 100644 --- a/hold.R +++ b/hold.R @@ -1,5 +1,21 @@ +devtools::load_all() + data(rodents) +data <- rodents +topics = 2 +reps = 2 +formulas = ~ 1 +nchangepoints = 1 +timename = "newmoon" +weights = TRUE +control = list() +control <- do.call("LDA_TS_control", control) +data <- conform_data(data = data, control = control) +LDAs <- LDA(data = data, topics = topics, reps = reps, + control = control$LDA_control) + + lda <- LDA(rodents, 3, 1, list(quiet = TRUE)) lda diff --git a/notes.R b/notes.R index b6653bc7..18af4b57 100644 --- a/notes.R +++ b/notes.R @@ -1,3 +1,5 @@ +time_order_data ... hmmmmm + standardized output from LDA functions s3 object with From 726825abee97f38c795c82e715f639d46bc31b3a Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Tue, 17 Mar 2020 10:11:27 -0700 Subject: [PATCH 12/43] Create TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R lolok --- ...OP-S3UUDRM's conflicted copy 2020-03-17).R | 539 ++++++++++++++++++ 1 file changed, 539 insertions(+) create mode 100644 R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R diff --git a/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R b/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R new file mode 100644 index 00000000..b228e55e --- /dev/null +++ b/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R @@ -0,0 +1,539 @@ +## +# +# working in here + + + + +TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, control = list()){ + control <- do.call("TS_control", control) + messageq("----Time Series Analyses----", control$quiet) + TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control) + nTS <- length(TSs) + for (i in 1:nTS){ + TSs[[i]] <- TS_call(TS = TSs[[i]], control = control) + } + selected_TSs <- select_TS(TSs = TSs, control = control) + package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) +} + + + + +# the defining characteristic here is the sequential +# estimation of rho then eta, ostensibly it could be done together + + +sequential_TS <- function(TS, control = list()){ + rho_dist <- est_changepoints(TS = TS, control = control) + eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) + +} + +est_changepoints <- function(TS, control = list()){ + + if (nchanTS$nchangepoints == 0){ + return(NULL) + } + +x <- memo(TS, control = control$TS_fit_args) + + +} + + + + +memo <- function(TS, control = list()){ + + data <- TS$data$train$ts_data + nchangepoints <- TS$nchangepoints + formula <- TS$formula + weights <- TS$weights + timename <- TS$timename + + + saves <- prep_saves(nchangepoints, control) + + inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, + weights, control) + cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) + ids <- prep_ids(control) + pbar <- prep_pbar(control, "rho") + + for(i in 1:control$nit){ + update_pbar(pbar, control) + steps <- step_chains(i, cpts, inputs) + swaps <- swap_chains(steps, inputs, ids) + saves <- update_saves(i, saves, steps, swaps) + cpts <- update_cpts(cpts, swaps) + ids <- update_ids(ids, swaps) + } + + process_saves(saves, control) + +} + + + + +prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, + control = list()){ + + if (!is(formulas, "list")) { + if (is(formulas, "formula")) { + formulas <- c(formulas) + } else{ + stop("formulas does not contain formula(s)") + } + } else if (!all(vapply(formulas, is, TRUE, "formula"))) { + stop("formulas does not contain all formula(s)") + } + + formulas2 <- formulas + for (i in seq_along(formulas)) { + tformula <- paste(as.character(formulas[[i]]), collapse = "") + formulas2[[i]] <- as.formula(paste("gamma", tformula)) + } + formulas <- formulas2 + nmods <- length(LDAs[[1]]) + mods <- 1:nmods + tab <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) + colnames(tab) <- c("LDA", "formula", "nchangepoints") + + nTSs <- NROW(tab) + TSs <- vector("list", length = nTSs) + for(i in 1:nTSs){ + lda <- LDAs[[1]][[tab$LDA[i]]] + + ts_data <- lda$data + ts_data$train$ts_data <- lda$data$train$document_covariate_table + ts_data$train$ts_data$gamma <- lda$document_topic_matrix + + ts_data$test$ts_data <- lda$data$test$document_covariate_table + ts_data$test$ts_data$gamma <- lda$test_document_topic_matrix + + TSs[[i]] <- list(data = ts_data, + data_subset = lda[["data_subset"]], + formula = tab$formula[[i]], + nchangepoints = tab$nchangepoints[i], + weights = weights, + timename = timename) + } + name_tab <- data.frame(paste("LDA", tab[ , 1]), + paste(",", tab[ , 2]), + paste(",", tab[ , 3], "changepoints")) + names(TSs) <- apply(name_tab, 1, paste0, collapse = "") + TSs +} + + + +TS_control <- function(TS_function = multinom_TS, + TS_args = list(), + TS_fit_function = memoizer, + TS_fit_args = list(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + quiet = FALSE), + soften = TRUE, + quiet = FALSE){ + list(TS_function = TS_function, + TS_args = TS_args, + TS_fit_function = TS_fit_function, TS_fit_args = TS_fit_args, + soften = soften, quiet = quiet) +} + + + + +TS_call <- function(TS = NULL, control = list()){ + control <- do.call("TS_control", control) + TS_msg(TS = TS, quiet = control$quiet) + fun <- control$TS_function + args <- update_list(control$TS_args, TS = TS) + if(control$soften){ + tryCatch(do.call(what = fun, args = args), + warning = function(x){eval(x$call)}, + error = function(x = list()){list(error = x$message)}) + } else{ + do.call(what = fun, args = args) + } +} + + +TS_msg <- function(TS, quiet = FALSE){ + messageq("hi how are you?", quiet) +} + + + + + + + + + + + + + + + +predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ + if(is.null(newdata)){ + newdata <- object$data + } + control <- do.call("TS_control", control) + nit <- object$control$nit + rhos <- object$rhos + etas <- object$etas + nnewdata <- NROW(newdata) + formula <- object$formula + out <- matrix(NA, nrow = nit, ncol = nnewdata) + for(i in 1:nit){ + + out[i , ] <- predicts + } + +} + +TSx <- function(data, formula = gamma ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, control = list()){ + check_TS_inputs(data, formula, nchangepoints, timename, weights, control) + control <- do.call("TS_control", control) + set.seed(control$seed) + data <- time_order_data(data, timename = timename) + rho_dist <- est_changepoints(data, formula, nchangepoints, timename, + weights, control) + eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, + control) + package_TS(data, formula, timename, weights, control, rho_dist, eta_dist) +} + +check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, + control = list()){ + check_formula(data, formula) + check_nchangepoints(nchangepoints) + check_weights(weights) + check_timename(data, timename) + check_control(control) + return() +} + +package_TSx <- function(data, formula, timename, weights, control, rho_dist, + eta_dist){ + + check_formula(data, formula) + check_weights(weights) + check_control(control) + check_timename(data, timename) + control <- do.call("TS_control", control) + nchangepoints <- dim(rho_dist$cpts)[1] + if (is.null(nchangepoints)){ + nchangepoints <- 0 + mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, + control) + mod <- mod[[1]][[1]] + lls <- as.numeric(logLik(mod)) + rhos <- NULL + } else{ + lls <- rho_dist$lls[1, ] + rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) + } + + ptMCMC_diagnostics <- diagnose_ptMCMC(rho_dist) + rho_summary <- summarize_rhos(rhos, control) + rho_vcov <- measure_rho_vcov(rhos) + eta_summary <- summarize_etas(eta_dist, control) + eta_vcov <- measure_eta_vcov(eta_dist) + + logLik <- mean(lls) + ncoefs <- ncol(eta_dist) + nparams <- nchangepoints + ncoefs + AIC <- -2 * logLik + 2 * nparams + + out <- list(data = data, formula = formula, nchangepoints = nchangepoints, + timename = timename, weights = weights, + control = control, lls = lls, rhos = rhos, + etas = eta_dist, ptMCMC_diagnostics = ptMCMC_diagnostics, + rho_summary = rho_summary, rho_vcov = rho_vcov, + eta_summary = eta_summary, eta_vcov = eta_vcov, + logLik = logLik, nparams = nparams, AIC = AIC) + class(out) <- c("TS_fit", "list") + to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", + "rho_vcov", "eta_vcov") + if (nchangepoints == 0){ + to_hide <- c(to_hide, "ptMCMC_diagnostics", "rho_summary") + } + attr(out, "hidden") <- to_hide + out +} +print.TS_fit <- function(x, ...){ + hid <- attr(x, "hidden") + notHid <- !names(x) %in% hid + print(x[notHid]) +} + + +summarize_etas <- function(etas, control = list()){ + check_control(control) + control <- do.call("TS_control", control) + if (!is.matrix(etas)){ + stop("etas should be a matrix") + } + prob <- control$summary_prob + Mean <- round(apply(etas, 2, mean), 4) + Median <- round(apply(etas, 2, median), 4) + SD <- round(apply(etas, 2, sd), 4) + MCMCerr <- round(SD / sqrt(nrow(etas)), 4) + HPD <- HPDinterval(as.mcmc(etas), prob = prob) + Lower <- round(HPD[ , "lower"], 4) + Upper <- round(HPD[ , "upper"], 4) + AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), + error = function(x){"-"}) + ESS <- effectiveSize(etas) + out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[7] <- "AC10" + rownames(out) <- colnames(etas) + out +} + +measure_eta_vcov <- function(etas){ + if (!is.matrix(etas)){ + stop("expecting etas to be a matrix") + } + out <- var(etas) + colnames(out) <- colnames(etas) + rownames(out) <- colnames(etas) + out +} +summarize_rhos <- function(rhos, control = list()){ + check_control(control) + control <- do.call("TS_control", control) + if (is.null(rhos)) { + return() + } + prob <- control$summary_prob + Mean <- round(apply(rhos, 2, mean), 2) + Median <- apply(rhos, 2, median) + Mode <- apply(rhos, 2, modalvalue) + SD <- round(apply(rhos, 2, sd), 2) + MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) + HPD <- HPDinterval(as.mcmc(rhos), prob = prob) + Lower <- HPD[ , "lower"] + Upper <- HPD[ , "upper"] + AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) + ESS <- effectiveSize(rhos) + out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[8] <- "AC10" + rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) + out +} + +measure_rho_vcov <- function(rhos){ + if (is.null(rhos)) { + return() + } + if (!is.matrix(rhos)){ + stop("expecting rhos to be a matrix") + } + out <- var(rhos) + colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) + rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) + out +} + +est_regressorsx <- function(rho_dist, data, formula, timename, weights, + control = list()){ + check_formula(data, formula) + check_weights(weights) + check_control(control) + control <- do.call("TS_control", control) + if (!is.null(rho_dist)){ + if (any(names(rho_dist)[1:3] != c("cpts", "lls", "ids"))){ + stop("expecting rho_dist to have elements cpts, lls, ids") + } + } + if (is.null(rho_dist)){ + mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, + control) + mod <- mod[[1]][[1]] + mv <- as.vector(t(coef(mod))) + vcv <- mirror_vcov(mod) + eta <- rmvnorm(control$nit, mv, vcv) + seg_names <- rep(1, ncol(vcv)) + coef_names <- colnames(vcv) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + return(eta) + } + + focal_rho <- rho_dist$cpts[ , 1, ] + nchangepts <- dim(rho_dist$cpts)[1] + if (nchangepts == 1){ + collapsedrho <- focal_rho + } else{ + collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") + } + freq_r <- table(collapsedrho) + unique_r <- names(freq_r) + nr <- length(unique_r) + n_topic <- ncol(data$gamma) + n_covar <- length(attr(terms(formula), "term.labels")) + n_eta_segment <- (n_topic - 1) * (n_covar + 1) + n_changept <- dim(rho_dist$cpts)[1] + n_segment <- n_changept + 1 + n_eta <- n_eta_segment * n_segment + eta <- matrix(NA, nrow = control$nit, ncol = n_eta) + pbar <- prep_pbar(control, "eta", nr) + + for(i in 1:nr){ + update_pbar(pbar, control) + cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) + mods <- multinom_TS(data, formula, cpts, timename, weights, control) + ndraws <- freq_r[i] + colindex1 <- 1 + for(j in 1:n_segment){ + colindex2 <- colindex1 + n_eta_segment - 1 + seg_mod <- mods[[1]][[j]] + mv <- as.vector(t(coef(seg_mod))) + vcv <- mirror_vcov(seg_mod) + drawn <- rmvnorm(ndraws, mv, vcv) + rows_in <- which(collapsedrho == unique_r[i]) + cols_in <- colindex1:colindex2 + eta[rows_in, cols_in] <- drawn + colindex1 <- colindex2 + 1 + } + } + seg_names <- rep(1:n_segment, each = n_eta_segment) + coef_names <- rep(colnames(vcv), n_segment) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + eta +} + + +est_changepointsx <- function(data, formula, nchangepoints, timename, weights, + control = list()){ + check_TS_inputs(data, formula, nchangepoints, timename, weights, control) + control <- do.call("TS_control", control) + data <- time_order_data(data, timename = timename) + if (nchangepoints == 0){ + return(NULL) + } + saves <- prep_saves(nchangepoints, control) + +# break this into a "classic" approach or whatever and give it its own +# function that is akin to temper + + inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, + weights, control) + cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) + ids <- prep_ids(control) + pbar <- prep_pbar(control, "rho") + + for(i in 1:control$nit){ + update_pbar(pbar, control) + steps <- step_chains(i, cpts, inputs) + swaps <- swap_chains(steps, inputs, ids) + saves <- update_saves(i, saves, steps, swaps) + cpts <- update_cpts(cpts, swaps) + ids <- update_ids(ids, swaps) + } +# the separate function runs to here +# and then process the output + + process_saves(saves, control) +} + +prep_pbar <- function(control = list(), bar_type = "rho", + nr = NULL){ + check_control(control) + control <- do.call("TS_control", control) + if (!(bar_type %in% c("eta", "rho"))){ + stop("bar_type must be eta or rho") + } + if (!is.null(nr)){ + if (!is.numeric(nr) || any(nr %% 1 != 0)){ + stop("nr must be integer-valued") + } + } + form <- " [:bar] :percent eta: :eta" + if (bar_type == "rho"){ + msg <- " Estimating changepoint distribution" + out <- progress_bar$new(form, control$nit, width = 60) + } + if (bar_type == "eta"){ + msg <- " Estimating regressor distribution" + out <- progress_bar$new(form, nr, width = 60) + } + messageq(msg, control$quiet) + out +} + +update_pbar <- function(pbar, control = list()){ + if (!("progress_bar" %in% class(pbar))){ + stop("pbar must be of class progress_bar") + } + check_control(control) + control <- do.call("TS_control", control) + if (control$quiet){ + return() + } + pbar$tick() +} + + +check_formula <- function(data, formula){ + + if (!is(formula, "formula")){ + stop("formula does not contain a single formula") + } + + respLoc <- attr(terms(formula), "response") + if (respLoc == 0){ + stop("formula inputs should include response variable") + } + + resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] + pred <- attr(terms(formula), "term.labels") + if (!resp %in% colnames(data)){ + stop("formula includes response not present in data") + } + if (!all(pred %in% colnames(data))){ + misses <- pred[which(pred %in% colnames(data) == FALSE)] + mis <- paste(misses, collapse = ", ") + stop(paste0("formula includes predictors not present in data: ", mis)) + } + return() +} + +TS_controlx <- function(memoise = TRUE, response = "gamma", lambda = 0, + measurer = AIC, selector = min, ntemps = 6, + penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, quiet = FALSE, burnin = 0, + thin_frac = 1, summary_prob = 0.95, seed = NULL, + model_fun = "multinom"){ + list(memoise = memoise, response = response, lambda = lambda, + measurer = measurer, selector = selector, ntemps = ntemps, + penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, + q = q, nit = nit, magnitude = magnitude, quiet = quiet, + burnin = burnin, thin_frac = thin_frac, summary_prob = summary_prob, + seed = seed, model_fun = model_fun) + +} + +logLik.TS_fit <- function(object, ...){ + val <- object$logLik + attr(val, "df") <- object$nparams + attr(val, "nobs") <- nrow(object$data) + class(val) <- "logLik" + val +} \ No newline at end of file From de5d1dd398a3a8068c2ae4e0e15e875182ff4c79 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Wed, 18 Mar 2020 19:51:10 -0700 Subject: [PATCH 13/43] in prog --- R/LDA.R | 15 +- ...OP-S3UUDRM's conflicted copy 2020-03-17).R | 539 ------------------ R/TS.R | 125 ++-- R/multinom_TS.R | 4 - R/ptMCMC.R | 60 +- R/utilities.R | 17 + est.R | 37 ++ hold.R | 5 + 8 files changed, 183 insertions(+), 619 deletions(-) delete mode 100644 R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R create mode 100644 est.R diff --git a/R/LDA.R b/R/LDA.R index 57d873f5..0af46a8f 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -19,7 +19,7 @@ LDA <- function(data, topics = 2, reps = 1, control = list()){ control <- do.call("LDA_control", control) - messageq("----Linguistic Decomposition Analyses----", control$quiet) + messageq("----- Linguistic Decomposition Analyses -----", control$quiet) LDAs <- prep_LDA_models(data = data, topics = topics, reps = reps, control = control) nLDA <- length(LDAs) @@ -76,20 +76,14 @@ LDA_call <- function(LDA = NULL, control = list()){ LDA_msg(LDA = LDA, quiet = control$quiet) fun <- control$LDA_function args <- update_list(control$LDA_args, LDA = LDA) - if(control$soften){ - tryCatch(do.call(what = fun, args = args), - warning = function(x){eval(x$call)}, - error = function(x = list()){list(error = x$message)}) - } else{ - do.call(what = fun, args = args) - } + soft_call(fun = fun, args = args, soften = control$soften) } LDA_msg <- function(LDA, quiet = FALSE){ - subset_msg <- paste0(" data subset ", LDA$data_subset) + subset_msg <- paste0(" - data subset ", LDA$data_subset) topic_msg <- paste0(", ", LDA$topics, " topics") rep_msg <- paste0(", replicate ", LDA$rep) messageq(paste0(subset_msg, topic_msg, rep_msg), quiet) @@ -136,7 +130,8 @@ identity_LDA <- function(LDA){ colnames(document_topic_table) <- NULL out <- list(params = list(), document_topic_table = document_topic_table, log_likelihood = NULL, data = data, - topics = 1, rep = rep, data_subset = data_subset) + topics = 1, rep = rep, data_subset = data_subset, + test_document_topic_matrix = NULL) #not yet available class(out) <- c("LDA", "list") out } diff --git a/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R b/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R deleted file mode 100644 index b228e55e..00000000 --- a/R/TS (DESKTOP-S3UUDRM's conflicted copy 2020-03-17).R +++ /dev/null @@ -1,539 +0,0 @@ -## -# -# working in here - - - - -TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, control = list()){ - control <- do.call("TS_control", control) - messageq("----Time Series Analyses----", control$quiet) - TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control) - nTS <- length(TSs) - for (i in 1:nTS){ - TSs[[i]] <- TS_call(TS = TSs[[i]], control = control) - } - selected_TSs <- select_TS(TSs = TSs, control = control) - package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) -} - - - - -# the defining characteristic here is the sequential -# estimation of rho then eta, ostensibly it could be done together - - -sequential_TS <- function(TS, control = list()){ - rho_dist <- est_changepoints(TS = TS, control = control) - eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) - -} - -est_changepoints <- function(TS, control = list()){ - - if (nchanTS$nchangepoints == 0){ - return(NULL) - } - -x <- memo(TS, control = control$TS_fit_args) - - -} - - - - -memo <- function(TS, control = list()){ - - data <- TS$data$train$ts_data - nchangepoints <- TS$nchangepoints - formula <- TS$formula - weights <- TS$weights - timename <- TS$timename - - - saves <- prep_saves(nchangepoints, control) - - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - pbar <- prep_pbar(control, "rho") - - for(i in 1:control$nit){ - update_pbar(pbar, control) - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - - process_saves(saves, control) - -} - - - - -prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, - control = list()){ - - if (!is(formulas, "list")) { - if (is(formulas, "formula")) { - formulas <- c(formulas) - } else{ - stop("formulas does not contain formula(s)") - } - } else if (!all(vapply(formulas, is, TRUE, "formula"))) { - stop("formulas does not contain all formula(s)") - } - - formulas2 <- formulas - for (i in seq_along(formulas)) { - tformula <- paste(as.character(formulas[[i]]), collapse = "") - formulas2[[i]] <- as.formula(paste("gamma", tformula)) - } - formulas <- formulas2 - nmods <- length(LDAs[[1]]) - mods <- 1:nmods - tab <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) - colnames(tab) <- c("LDA", "formula", "nchangepoints") - - nTSs <- NROW(tab) - TSs <- vector("list", length = nTSs) - for(i in 1:nTSs){ - lda <- LDAs[[1]][[tab$LDA[i]]] - - ts_data <- lda$data - ts_data$train$ts_data <- lda$data$train$document_covariate_table - ts_data$train$ts_data$gamma <- lda$document_topic_matrix - - ts_data$test$ts_data <- lda$data$test$document_covariate_table - ts_data$test$ts_data$gamma <- lda$test_document_topic_matrix - - TSs[[i]] <- list(data = ts_data, - data_subset = lda[["data_subset"]], - formula = tab$formula[[i]], - nchangepoints = tab$nchangepoints[i], - weights = weights, - timename = timename) - } - name_tab <- data.frame(paste("LDA", tab[ , 1]), - paste(",", tab[ , 2]), - paste(",", tab[ , 3], "changepoints")) - names(TSs) <- apply(name_tab, 1, paste0, collapse = "") - TSs -} - - - -TS_control <- function(TS_function = multinom_TS, - TS_args = list(), - TS_fit_function = memoizer, - TS_fit_args = list(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, - burnin = 0, thin_frac = 1, - quiet = FALSE), - soften = TRUE, - quiet = FALSE){ - list(TS_function = TS_function, - TS_args = TS_args, - TS_fit_function = TS_fit_function, TS_fit_args = TS_fit_args, - soften = soften, quiet = quiet) -} - - - - -TS_call <- function(TS = NULL, control = list()){ - control <- do.call("TS_control", control) - TS_msg(TS = TS, quiet = control$quiet) - fun <- control$TS_function - args <- update_list(control$TS_args, TS = TS) - if(control$soften){ - tryCatch(do.call(what = fun, args = args), - warning = function(x){eval(x$call)}, - error = function(x = list()){list(error = x$message)}) - } else{ - do.call(what = fun, args = args) - } -} - - -TS_msg <- function(TS, quiet = FALSE){ - messageq("hi how are you?", quiet) -} - - - - - - - - - - - - - - - -predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ - if(is.null(newdata)){ - newdata <- object$data - } - control <- do.call("TS_control", control) - nit <- object$control$nit - rhos <- object$rhos - etas <- object$etas - nnewdata <- NROW(newdata) - formula <- object$formula - out <- matrix(NA, nrow = nit, ncol = nnewdata) - for(i in 1:nit){ - - out[i , ] <- predicts - } - -} - -TSx <- function(data, formula = gamma ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, control = list()){ - check_TS_inputs(data, formula, nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - set.seed(control$seed) - data <- time_order_data(data, timename = timename) - rho_dist <- est_changepoints(data, formula, nchangepoints, timename, - weights, control) - eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, - control) - package_TS(data, formula, timename, weights, control, rho_dist, eta_dist) -} - -check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, - control = list()){ - check_formula(data, formula) - check_nchangepoints(nchangepoints) - check_weights(weights) - check_timename(data, timename) - check_control(control) - return() -} - -package_TSx <- function(data, formula, timename, weights, control, rho_dist, - eta_dist){ - - check_formula(data, formula) - check_weights(weights) - check_control(control) - check_timename(data, timename) - control <- do.call("TS_control", control) - nchangepoints <- dim(rho_dist$cpts)[1] - if (is.null(nchangepoints)){ - nchangepoints <- 0 - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - mod <- mod[[1]][[1]] - lls <- as.numeric(logLik(mod)) - rhos <- NULL - } else{ - lls <- rho_dist$lls[1, ] - rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) - } - - ptMCMC_diagnostics <- diagnose_ptMCMC(rho_dist) - rho_summary <- summarize_rhos(rhos, control) - rho_vcov <- measure_rho_vcov(rhos) - eta_summary <- summarize_etas(eta_dist, control) - eta_vcov <- measure_eta_vcov(eta_dist) - - logLik <- mean(lls) - ncoefs <- ncol(eta_dist) - nparams <- nchangepoints + ncoefs - AIC <- -2 * logLik + 2 * nparams - - out <- list(data = data, formula = formula, nchangepoints = nchangepoints, - timename = timename, weights = weights, - control = control, lls = lls, rhos = rhos, - etas = eta_dist, ptMCMC_diagnostics = ptMCMC_diagnostics, - rho_summary = rho_summary, rho_vcov = rho_vcov, - eta_summary = eta_summary, eta_vcov = eta_vcov, - logLik = logLik, nparams = nparams, AIC = AIC) - class(out) <- c("TS_fit", "list") - to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", - "rho_vcov", "eta_vcov") - if (nchangepoints == 0){ - to_hide <- c(to_hide, "ptMCMC_diagnostics", "rho_summary") - } - attr(out, "hidden") <- to_hide - out -} -print.TS_fit <- function(x, ...){ - hid <- attr(x, "hidden") - notHid <- !names(x) %in% hid - print(x[notHid]) -} - - -summarize_etas <- function(etas, control = list()){ - check_control(control) - control <- do.call("TS_control", control) - if (!is.matrix(etas)){ - stop("etas should be a matrix") - } - prob <- control$summary_prob - Mean <- round(apply(etas, 2, mean), 4) - Median <- round(apply(etas, 2, median), 4) - SD <- round(apply(etas, 2, sd), 4) - MCMCerr <- round(SD / sqrt(nrow(etas)), 4) - HPD <- HPDinterval(as.mcmc(etas), prob = prob) - Lower <- round(HPD[ , "lower"], 4) - Upper <- round(HPD[ , "upper"], 4) - AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), - error = function(x){"-"}) - ESS <- effectiveSize(etas) - out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[7] <- "AC10" - rownames(out) <- colnames(etas) - out -} - -measure_eta_vcov <- function(etas){ - if (!is.matrix(etas)){ - stop("expecting etas to be a matrix") - } - out <- var(etas) - colnames(out) <- colnames(etas) - rownames(out) <- colnames(etas) - out -} -summarize_rhos <- function(rhos, control = list()){ - check_control(control) - control <- do.call("TS_control", control) - if (is.null(rhos)) { - return() - } - prob <- control$summary_prob - Mean <- round(apply(rhos, 2, mean), 2) - Median <- apply(rhos, 2, median) - Mode <- apply(rhos, 2, modalvalue) - SD <- round(apply(rhos, 2, sd), 2) - MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) - HPD <- HPDinterval(as.mcmc(rhos), prob = prob) - Lower <- HPD[ , "lower"] - Upper <- HPD[ , "upper"] - AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) - ESS <- effectiveSize(rhos) - out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[8] <- "AC10" - rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) - out -} - -measure_rho_vcov <- function(rhos){ - if (is.null(rhos)) { - return() - } - if (!is.matrix(rhos)){ - stop("expecting rhos to be a matrix") - } - out <- var(rhos) - colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) - rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) - out -} - -est_regressorsx <- function(rho_dist, data, formula, timename, weights, - control = list()){ - check_formula(data, formula) - check_weights(weights) - check_control(control) - control <- do.call("TS_control", control) - if (!is.null(rho_dist)){ - if (any(names(rho_dist)[1:3] != c("cpts", "lls", "ids"))){ - stop("expecting rho_dist to have elements cpts, lls, ids") - } - } - if (is.null(rho_dist)){ - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - mod <- mod[[1]][[1]] - mv <- as.vector(t(coef(mod))) - vcv <- mirror_vcov(mod) - eta <- rmvnorm(control$nit, mv, vcv) - seg_names <- rep(1, ncol(vcv)) - coef_names <- colnames(vcv) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - return(eta) - } - - focal_rho <- rho_dist$cpts[ , 1, ] - nchangepts <- dim(rho_dist$cpts)[1] - if (nchangepts == 1){ - collapsedrho <- focal_rho - } else{ - collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") - } - freq_r <- table(collapsedrho) - unique_r <- names(freq_r) - nr <- length(unique_r) - n_topic <- ncol(data$gamma) - n_covar <- length(attr(terms(formula), "term.labels")) - n_eta_segment <- (n_topic - 1) * (n_covar + 1) - n_changept <- dim(rho_dist$cpts)[1] - n_segment <- n_changept + 1 - n_eta <- n_eta_segment * n_segment - eta <- matrix(NA, nrow = control$nit, ncol = n_eta) - pbar <- prep_pbar(control, "eta", nr) - - for(i in 1:nr){ - update_pbar(pbar, control) - cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) - mods <- multinom_TS(data, formula, cpts, timename, weights, control) - ndraws <- freq_r[i] - colindex1 <- 1 - for(j in 1:n_segment){ - colindex2 <- colindex1 + n_eta_segment - 1 - seg_mod <- mods[[1]][[j]] - mv <- as.vector(t(coef(seg_mod))) - vcv <- mirror_vcov(seg_mod) - drawn <- rmvnorm(ndraws, mv, vcv) - rows_in <- which(collapsedrho == unique_r[i]) - cols_in <- colindex1:colindex2 - eta[rows_in, cols_in] <- drawn - colindex1 <- colindex2 + 1 - } - } - seg_names <- rep(1:n_segment, each = n_eta_segment) - coef_names <- rep(colnames(vcv), n_segment) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - eta -} - - -est_changepointsx <- function(data, formula, nchangepoints, timename, weights, - control = list()){ - check_TS_inputs(data, formula, nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - data <- time_order_data(data, timename = timename) - if (nchangepoints == 0){ - return(NULL) - } - saves <- prep_saves(nchangepoints, control) - -# break this into a "classic" approach or whatever and give it its own -# function that is akin to temper - - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - pbar <- prep_pbar(control, "rho") - - for(i in 1:control$nit){ - update_pbar(pbar, control) - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } -# the separate function runs to here -# and then process the output - - process_saves(saves, control) -} - -prep_pbar <- function(control = list(), bar_type = "rho", - nr = NULL){ - check_control(control) - control <- do.call("TS_control", control) - if (!(bar_type %in% c("eta", "rho"))){ - stop("bar_type must be eta or rho") - } - if (!is.null(nr)){ - if (!is.numeric(nr) || any(nr %% 1 != 0)){ - stop("nr must be integer-valued") - } - } - form <- " [:bar] :percent eta: :eta" - if (bar_type == "rho"){ - msg <- " Estimating changepoint distribution" - out <- progress_bar$new(form, control$nit, width = 60) - } - if (bar_type == "eta"){ - msg <- " Estimating regressor distribution" - out <- progress_bar$new(form, nr, width = 60) - } - messageq(msg, control$quiet) - out -} - -update_pbar <- function(pbar, control = list()){ - if (!("progress_bar" %in% class(pbar))){ - stop("pbar must be of class progress_bar") - } - check_control(control) - control <- do.call("TS_control", control) - if (control$quiet){ - return() - } - pbar$tick() -} - - -check_formula <- function(data, formula){ - - if (!is(formula, "formula")){ - stop("formula does not contain a single formula") - } - - respLoc <- attr(terms(formula), "response") - if (respLoc == 0){ - stop("formula inputs should include response variable") - } - - resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] - pred <- attr(terms(formula), "term.labels") - if (!resp %in% colnames(data)){ - stop("formula includes response not present in data") - } - if (!all(pred %in% colnames(data))){ - misses <- pred[which(pred %in% colnames(data) == FALSE)] - mis <- paste(misses, collapse = ", ") - stop(paste0("formula includes predictors not present in data: ", mis)) - } - return() -} - -TS_controlx <- function(memoise = TRUE, response = "gamma", lambda = 0, - measurer = AIC, selector = min, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, quiet = FALSE, burnin = 0, - thin_frac = 1, summary_prob = 0.95, seed = NULL, - model_fun = "multinom"){ - list(memoise = memoise, response = response, lambda = lambda, - measurer = measurer, selector = selector, ntemps = ntemps, - penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, - q = q, nit = nit, magnitude = magnitude, quiet = quiet, - burnin = burnin, thin_frac = thin_frac, summary_prob = summary_prob, - seed = seed, model_fun = model_fun) - -} - -logLik.TS_fit <- function(object, ...){ - val <- object$logLik - attr(val, "df") <- object$nparams - attr(val, "nobs") <- nrow(object$data) - class(val) <- "logLik" - val -} \ No newline at end of file diff --git a/R/TS.R b/R/TS.R index bb709d3a..a8606f07 100644 --- a/R/TS.R +++ b/R/TS.R @@ -8,13 +8,13 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ control <- do.call("TS_control", control) - messageq("----Time Series Analyses----", control$quiet) + messageq("----- Time Series Analyses -----", control$quiet) TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control) nTS <- length(TSs) for (i in 1:nTS){ - TSs[[i]] <- TS_call(TS = TSs[[i]], control = control) + TSs[[i]] <- sequential_TS(TS = TSs[[i]], control = control) } selected_TSs <- select_TS(TSs = TSs, control = control) package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) @@ -23,43 +23,84 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + +TS_control <- function(response = "multinom", + method = "ldats_classic", + method_args = list(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + memoise = TRUE, + quiet = FALSE), + soften = TRUE, + quiet = FALSE){ + list(response = response, method = method, method_args = method_args, + soften = soften, quiet = quiet) +} + + + # the defining characteristic here is the sequential # estimation of rho then eta, ostensibly it could be done together - +# sequential_TS <- function(TS, control = list()){ + control <- do.call("TS_control", control) + TS_msg(TS = TS, quiet = control$quiet) rho_dist <- est_changepoints(TS = TS, control = control) eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) + +# include all of the model packaging here like in topicmodels_LDA + } est_changepoints <- function(TS, control = list()){ - if (nchanTS$nchangepoints == 0){ + if (TS$nchangepoints == 0){ return(NULL) } -x <- memoizer(TS, control = control$TS_fit_args) +# working right here. really walk through the process and pull out specifics +# reference directly to the existing function + + + # construct input arguments to the focal function + # the function will be the same but will have different options + + # run focal function + + cptfn() - + # process output from focal function } +cptfn <- function(TS, +method = "ldats_classic", control = list()){ +control <- control$method_args +} -memoizer <- function(TS, control = list()){ - - data <- TS$data$train$ts_data - nchangepoints <- TS$nchangepoints - formula <- TS$formula - weights <- TS$weights - timename <- TS$timename +TS_responses <- function(){ +c("multinom", "ilr", "alr") +# associated model functions: +} - saves <- prep_saves(nchangepoints, control) - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) +TS_methods <- function(){ +c("ldats_classic") +} + + + + +ldats_classic <- function(TS, control = list()){ + + saves <- prep_saves(TS = TS, control = control) + + inputs <- prep_ptMCMC_inputs(TS = TS, control = control) cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) ids <- prep_ids(control) pbar <- prep_pbar(control, "rho") @@ -117,12 +158,17 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, ts_data$test$ts_data <- lda$data$test$document_covariate_table ts_data$test$ts_data$gamma <- lda$test_document_topic_matrix + weights <- iftrue(weights, + document_weights(lda$data$train$document_term_table)) + TSs[[i]] <- list(data = ts_data, data_subset = lda[["data_subset"]], formula = tab$formula[[i]], nchangepoints = tab$nchangepoints[i], weights = weights, - timename = timename) + timename = timename, + response = control$response, + topics = lda$topics, rep = lda$rep) } name_tab <- data.frame(paste("LDA", tab[ , 1]), paste(",", tab[ , 2]), @@ -133,42 +179,17 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, -TS_control <- function(TS_function = multinom_TS, - TS_args = list(), - TS_fit_function = memoizer, - TS_fit_args = list(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, - burnin = 0, thin_frac = 1, - quiet = FALSE), - soften = TRUE, - quiet = FALSE){ - list(TS_function = TS_function, - TS_args = TS_args, - TS_fit_function = TS_fit_function, TS_fit_args = TS_fit_args, - soften = soften, quiet = quiet) -} - - - - -TS_call <- function(TS = NULL, control = list()){ - control <- do.call("TS_control", control) - TS_msg(TS = TS, quiet = control$quiet) - fun <- control$TS_function - args <- update_list(control$TS_args, TS = TS) - if(control$soften){ - tryCatch(do.call(what = fun, args = args), - warning = function(x){eval(x$call)}, - error = function(x = list()){list(error = x$message)}) - } else{ - do.call(what = fun, args = args) - } -} - - TS_msg <- function(TS, quiet = FALSE){ - messageq("hi how are you?", quiet) + subset_msg <- paste0(" - data subset ", TS$data_subset) + topic_msg <- paste0(", ", TS$topics, " topics") + rep_msg <- paste0(", replicate ", TS$rep) + + formula_msg <- paste0(", formula ", deparse(TS$formula)) + nchangepoints <- TS$nchangepoints + txt <- ifelse(nchangepoints == 1, " changepoint", " changepoints") + changepoints_msg <- paste0(", ", nchangepoints, txt) + msg <- paste0(subset_msg, topic_msg, rep_msg, formula_msg, changepoints_msg) + messageq(msg, quiet) } diff --git a/R/multinom_TS.R b/R/multinom_TS.R index b43b3114..a89761de 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -78,9 +78,6 @@ multinom_TS <- function(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()){ - check_multinom_TS_inputs(data, formula, changepoints, timename, weights, - control) - control <- do.call("TS_control", control) if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) class(out) <- c("multinom_TS_fit", "list") @@ -384,7 +381,6 @@ verify_changepoint_locations <- function(data, changepoints = NULL, #' multinom_TS_chunk <- function(data, formula, chunk, timename = "time", weights = NULL, control = list()){ - control <- do.call("TS_control", control) formula <- as.formula(format(formula)) time_obs <- data[ , timename] chunk_start <- as.numeric(chunk["start"]) diff --git a/R/ptMCMC.R b/R/ptMCMC.R index e7689c02..62b30d26 100644 --- a/R/ptMCMC.R +++ b/R/ptMCMC.R @@ -1,8 +1,38 @@ -TS_fun <- function(control){ - fun <- eval(parse(text = paste0(control$model_fun, "_TS"))) - memoise_fun(fun, control$memoise) + + +prep_cpts <- function(TS, control = list()){ + + data <- TS$data$train$ts_data + temps <- prep_temp_sequence(control) + ntemps <- length(temps) + min_time <- min(data[ , timename]) + max_time <- max(data[ , timename]) + times <- seq(min_time, max_time, 1) + avail_times <- times[-c(1, length(times))] + cps <- matrix(NA, nrow = TS$nchangepoints, ncol = ntemps) + for (i in 1:ntemps){ + cp_times <- sort(sample(avail_times, TS$nchangepoints, replace = FALSE)) + cps[ , i] <- cp_times + } + lls <- rep(NA, ntemps) + for (i in 1:ntemps){ + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$memoise) + args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], + timename = TS$timename, weights = TS$weights, + control = control) + modfit <- soft_call(fun, args, TRUE) + lls[i] <- modfit$logLik + } + cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] + lls <- sort(lls, decreasing = TRUE) + + out <- list(cps, lls) + names(out) <- c("changepts", "lls") + out } + prep_temp_sequence <- function(control = list()){ ntemps <- control$ntemps penultimate_temp <- control$penultimate_temp @@ -14,7 +44,8 @@ prep_temp_sequence <- function(control = list()){ } -prep_saves <- function(nchangepoints, control = list()){ +prep_saves <- function(TS, control = list()){ + nchangepoints <- TS$nchangepoints ntemps <- control$ntemps nit <- control$nit cpts <- array(NA, c(nchangepoints, ntemps, nit)) @@ -28,15 +59,16 @@ prep_saves <- function(nchangepoints, control = list()){ -prep_ptMCMC_inputs <- function(data, formula, nchangepoints, timename, - weights = NULL, control = list()){ - control$selector <- NULL - control$measurer <- NULL - out <- list(control = control, temps = prep_temp_sequence(control), - pdist = prep_proposal_dist(nchangepoints, control), - formula = formula, weights = weights, data = data, - TS_function = TS_fun(control), - timename = timename) +prep_ptMCMC_inputs <- function(TS, control = list()){ + + out <- list(control = control, + temps = prep_temp_sequence(control), + pdist = prep_proposal_dist(TS$nchangepoints, control), + formula = TS$formula, + weights = TS$weights, + data = TS$data$train$ts_data, + response = TS$response, + timename = TS$timename) class(out) <- c("ptMCMC_inputs", "list") out } @@ -920,7 +952,7 @@ process_saves <- function(saves, control = list()){ #' #' @export #' -prep_cpts <- function(data, formula, nchangepoints, timename, weights, +prep_cptsx <- function(data, formula, nchangepoints, timename, weights, control = list()){ check_formula(data, formula) diff --git a/R/utilities.R b/R/utilities.R index 0c94796a..1e0ac1e9 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -1,3 +1,20 @@ +soft_call <- function(fun = function(x){invisible(NULL)}, args = list(NULL), + soften = FALSE){ + if(list_depth(args) == 0){ + args <- list(args) + } + if(soften){ + tryCatch(do.call(what = fun, args = args), + warning = function(x){eval(x$call)}, + error = function(x = list()){list(error = x$message)}) + } else{ + do.call(what = fun, args = args) + } +} + + + + time_order_data <- function(x, timename = "time"){ time_order <- order(x[ , timename]) x[time_order , ] diff --git a/est.R b/est.R new file mode 100644 index 00000000..f082f2a7 --- /dev/null +++ b/est.R @@ -0,0 +1,37 @@ + + +est_changepointsx <- function(data, formula, nchangepoints, timename, weights, + control = list()){ + check_TS_inputs(data, formula, nchangepoints, timename, weights, control) + control <- do.call("TS_control", control) + data <- time_order_data(data, timename = timename) + if (nchangepoints == 0){ + return(NULL) + } + +# break this into a "classic" approach or whatever and give it its own +# function that is akin to temper + + saves <- prep_saves(nchangepoints, control) + + inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, + weights, control) + cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) + ids <- prep_ids(control) + pbar <- prep_pbar(control, "rho") + + for(i in 1:control$nit){ + update_pbar(pbar, control) + steps <- step_chains(i, cpts, inputs) + swaps <- swap_chains(steps, inputs, ids) + saves <- update_saves(i, saves, steps, swaps) + cpts <- update_cpts(cpts, swaps) + ids <- update_ids(ids, swaps) + } + process_saves(saves, control) + +# the separate function runs to here +# and then process the output + + +} diff --git a/hold.R b/hold.R index 4e8ae797..1ea84fe3 100644 --- a/hold.R +++ b/hold.R @@ -1,3 +1,8 @@ +# work on making formulas be able to be repeatedly prepped + +# in the midst of the TS classic ldats...looks like starting to work, need +# to double back through tho + devtools::load_all() data(rodents) From faf72e74a7b525a8ca0f64666225055816b58230 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Wed, 18 Mar 2020 23:16:06 -0700 Subject: [PATCH 14/43] ldats classic --- R/TS.R | 97 ++++----------- R/ldats_classic_method.R | 263 +++++++++++++++++++++++++++++++++++++++ R/ptMCMC.R | 116 ++--------------- hold.R | 2 +- 4 files changed, 302 insertions(+), 176 deletions(-) create mode 100644 R/ldats_classic_method.R diff --git a/R/TS.R b/R/TS.R index a8606f07..7ecc22e8 100644 --- a/R/TS.R +++ b/R/TS.R @@ -96,29 +96,6 @@ c("ldats_classic") -ldats_classic <- function(TS, control = list()){ - - saves <- prep_saves(TS = TS, control = control) - - inputs <- prep_ptMCMC_inputs(TS = TS, control = control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - pbar <- prep_pbar(control, "rho") - - for(i in 1:control$nit){ - update_pbar(pbar, control) - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - - process_saves(saves, control) - -} - - prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, @@ -184,7 +161,7 @@ TS_msg <- function(TS, quiet = FALSE){ topic_msg <- paste0(", ", TS$topics, " topics") rep_msg <- paste0(", replicate ", TS$rep) - formula_msg <- paste0(", formula ", deparse(TS$formula)) + formula_msg <- paste0(", ", deparse(TS$formula)) nchangepoints <- TS$nchangepoints txt <- ifelse(nchangepoints == 1, " changepoint", " changepoints") changepoints_msg <- paste0(", ", nchangepoints, txt) @@ -474,10 +451,32 @@ est_changepointsx <- function(data, formula, nchangepoints, timename, weights, process_saves(saves, control) } -prep_pbar <- function(control = list(), bar_type = "rho", - nr = NULL){ - check_control(control) - control <- do.call("TS_control", control) +check_formula <- function(data, formula){ + + if (!is(formula, "formula")){ + stop("formula does not contain a single formula") + } + + respLoc <- attr(terms(formula), "response") + if (respLoc == 0){ + stop("formula inputs should include response variable") + } + + resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] + pred <- attr(terms(formula), "term.labels") + if (!resp %in% colnames(data)){ + stop("formula includes response not present in data") + } + if (!all(pred %in% colnames(data))){ + misses <- pred[which(pred %in% colnames(data) == FALSE)] + mis <- paste(misses, collapse = ", ") + stop(paste0("formula includes predictors not present in data: ", mis)) + } + return() +} + + +prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ if (!(bar_type %in% c("eta", "rho"))){ stop("bar_type must be eta or rho") } @@ -503,54 +502,12 @@ update_pbar <- function(pbar, control = list()){ if (!("progress_bar" %in% class(pbar))){ stop("pbar must be of class progress_bar") } - check_control(control) - control <- do.call("TS_control", control) if (control$quiet){ return() } pbar$tick() } - -check_formula <- function(data, formula){ - - if (!is(formula, "formula")){ - stop("formula does not contain a single formula") - } - - respLoc <- attr(terms(formula), "response") - if (respLoc == 0){ - stop("formula inputs should include response variable") - } - - resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] - pred <- attr(terms(formula), "term.labels") - if (!resp %in% colnames(data)){ - stop("formula includes response not present in data") - } - if (!all(pred %in% colnames(data))){ - misses <- pred[which(pred %in% colnames(data) == FALSE)] - mis <- paste(misses, collapse = ", ") - stop(paste0("formula includes predictors not present in data: ", mis)) - } - return() -} - -TS_controlx <- function(memoise = TRUE, response = "gamma", lambda = 0, - measurer = AIC, selector = min, ntemps = 6, - penultimate_temp = 2^6, ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, quiet = FALSE, burnin = 0, - thin_frac = 1, summary_prob = 0.95, seed = NULL, - model_fun = "multinom"){ - list(memoise = memoise, response = response, lambda = lambda, - measurer = measurer, selector = selector, ntemps = ntemps, - penultimate_temp = penultimate_temp, ultimate_temp = ultimate_temp, - q = q, nit = nit, magnitude = magnitude, quiet = quiet, - burnin = burnin, thin_frac = thin_frac, summary_prob = summary_prob, - seed = seed, model_fun = model_fun) - -} - logLik.TS_fit <- function(object, ...){ val <- object$logLik attr(val, "df") <- object$nparams diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R new file mode 100644 index 00000000..0948f637 --- /dev/null +++ b/R/ldats_classic_method.R @@ -0,0 +1,263 @@ + +ldats_classic <- function(TS, control = list()){ + + saves <- prep_saves(TS = TS, control = control) + + inputs <- prep_ptMCMC_inputs(TS = TS, control = control) + cpts <- prep_cpts(TS = TS, control = control) + ids <- prep_ids(TS = TS, control) + pbar <- prep_pbar(control = control, bar_type = "rho") + + for(i in 1:control$nit){ + update_pbar(pbar = pbar, control = control) + steps <- step_chains(TS = TS, i = i, cpts = cpts, inputs = inputs) + swaps <- swap_chains(chainsin = steps, inputs = inputs, ids = ids) + saves <- update_saves(i = i, saves = saves, steps = steps, swaps = swaps) + cpts <- update_cpts(cpts = cpts, swaps = swaps) + ids <- update_ids(ids = ids, swaps = swaps) + } + + process_saves(saves = saves, control = control) + +} + + +process_saves <- function(saves, control = list()){ + nit <- control$nit + iters <- 1:nit + if (control$burnin > 0){ + iters <- iters[-(1:control$burnin)] + } + niters <- length(iters) + thin_interval <- ceiling(1/control$thin_frac) + iters_thinned <- seq(1, niters, by = thin_interval) + dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) + saves$cpts <- array(saves$cpts[ , , iters_thinned], dim = dims) + saves$lls <- saves$lls[, iters_thinned] + saves$ids <- saves$ids[, iters_thinned] + saves$step_accepts <- saves$step_accepts[ , iters_thinned] + saves$swap_accepts <- saves$swap_accepts[ , iters_thinned] + saves +} + + +update_saves <- function(i, saves, steps, swaps){ + saves$cpts[ , , i] <- swaps$changepts + saves$lls[ , i] <- swaps$lls + saves$ids[ , i] <- swaps$ids + saves$step_accepts[ , i] <- steps$accept_step + saves$swap_accepts[ , i] <- swaps$accept_swap + saves +} +update_cpts <- function(cpts, swaps){ + list(changepts = swaps$changepts, lls = swaps$lls) +} + +update_ids <- function(ids, swaps){ + swaps$ids +} + +swap_chains <- function(chainsin, inputs, ids){ + temps <- inputs$temps + itemps <- 1/temps + ntemps <- length(temps) + revtemps <- seq(ntemps - 1, 1) + lls <- chainsin$lls + changepts <- chainsin$changepts + accept_swap <- rep(FALSE, ntemps - 1) + + for (j in revtemps){ + cutoff <- exp((itemps[j] - itemps[j + 1]) * (lls[j + 1] - lls[j])) + accept <- runif(1) < cutoff + if (accept) { + + accept_swap[j] <- TRUE + placeholder <- changepts[, j] + changepts[ , j] <- changepts[, j + 1] + changepts[ , j + 1] <- placeholder + + placeholder <- lls[j] + lls[j] <- lls[j + 1] + lls[j + 1] <- placeholder + + placeholder <- ids[j] + ids[j] <- ids[j + 1] + ids[j + 1] <- placeholder + } + } + list(changepts = changepts, lls = lls, ids = ids, accept_swap = accept_swap) +} + + + +prep_cpts <- function(TS, control = list()){ + + data <- TS$data$train$ts_data + temps <- prep_temp_sequence(TS = TS, control = control) + ntemps <- length(temps) + min_time <- min(data[ , timename]) + max_time <- max(data[ , timename]) + times <- seq(min_time, max_time, 1) + avail_times <- times[-c(1, length(times))] + cps <- matrix(NA, nrow = TS$nchangepoints, ncol = ntemps) + for (i in 1:ntemps){ + cp_times <- sort(sample(avail_times, TS$nchangepoints, replace = FALSE)) + cps[ , i] <- cp_times + } + lls <- rep(NA, ntemps) + for (i in 1:ntemps){ + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$memoise) + args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], + timename = TS$timename, weights = TS$weights, + control = control) + modfit <- soft_call(fun, args, TRUE) + lls[i] <- modfit$logLik + } + cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] + lls <- sort(lls, decreasing = TRUE) + + out <- list(cps, lls) + names(out) <- c("changepts", "lls") + out +} + + +prep_temp_sequence <- function(TS, control = list()){ + ntemps <- control$ntemps + penultimate_temp <- control$penultimate_temp + ultimate_temp <- control$ultimate_temp + q <- control$q + sequence <- seq(0, log2(penultimate_temp), length.out = ntemps - 1) + log_temps <- sequence^(1 + q) / log2(penultimate_temp)^q + c(2^(log_temps), ultimate_temp) +} + + +prep_saves <- function(TS, control = list()){ + nchangepoints <- TS$nchangepoints + ntemps <- control$ntemps + nit <- control$nit + cpts <- array(NA, c(nchangepoints, ntemps, nit)) + lls <- matrix(NA, ntemps, nit) + ids <- matrix(NA, ntemps, nit) + step_accepts <- matrix(FALSE, ntemps, nit) + swap_accepts <- matrix(FALSE, ntemps - 1, nit) + list(cpts = cpts, lls = lls, ids = ids, step_accepts = step_accepts, + swap_accepts = swap_accepts) +} + + + +prep_ptMCMC_inputs <- function(TS, control = list()){ + + out <- list(control = control, + temps = prep_temp_sequence(TS = TS, control = control), + pdist = prep_proposal_dist(TS = TS, control = control), + formula = TS$formula, + weights = TS$weights, + data = TS$data$train$ts_data, + response = TS$response, + timename = TS$timename) + class(out) <- c("ptMCMC_inputs", "list") + out +} + + + +prep_proposal_dist <- function(TS, control = list()){ + nchangepoints <- TS$nchangepoints + ntemps <- control$ntemps + nit <- control$nit + if(nchangepoints == 0){ + steps <- matrix(0, nrow = nit, ncol = ntemps) + which_steps <- matrix(numeric(0), nrow = nit, ncol = ntemps) + } else{ + magnitude <- control$magnitude + step_signs <- sample(c(-1, 1), nit * ntemps, replace = TRUE) + step_magnitudes <- 1 + rgeom(nit * ntemps, 1 / magnitude) + steps <- matrix(step_signs * step_magnitudes, nrow = nit) + which_steps <- sample.int(nchangepoints, nit * ntemps, replace = TRUE) + which_steps <- matrix(which_steps, nrow = nit) + } + list(steps = steps, which_steps = which_steps) +} + +prep_ids <- function(TS, control = list()){ + if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ + stop("ntemps must be integer-valued") + } + 1:control$ntemps +} + + +step_chains <- function(TS, i, cpts, inputs){ + prop_step <- propose_step(TS = TS, i = i, cpts = cpts, inputs = inputs) + accept_step <- eval_step(i = i, cpts = cpts, prop_step = prop_step, + inputs = inputs) + take_step(cpts = cpts, prop_step = prop_step, accept_step = accept_step) +} + + +propose_step <- function(TS, i, cpts, inputs){ + + pdist <- inputs$pdist + ntemps <- length(inputs$temps) + selection <- cbind(pdist$which_steps[i, ], 1:ntemps) + prop_changepts <- cpts$changepts + curr_changepts_s <- cpts$changepts[selection] + prop_changepts_s <- curr_changepts_s + pdist$steps[i, ] + if(all(is.na(prop_changepts_s))){ + prop_changepts_s <- NULL + } + prop_changepts[selection] <- prop_changepts_s + mods <- proposed_step_mods(TS = TS, prop_changepts = prop_changepts, + inputs = inputs) + lls <- vapply(mods, logLik, 0) + list(changepts = prop_changepts, lls = lls) +} + + +proposed_step_mods <- function(TS, prop_changepts, inputs){ + + data <- inputs$data + formula <- inputs$formula + weights <- inputs$weights + TS_function <- inputs$TS_function + ntemps <- length(inputs$temps) + control <- inputs$control + timename <- inputs$timename + out <- vector("list", length = ntemps) + for (i in 1:ntemps){ + + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$memoise) + args <- list(data = data, formula = TS$formula, + changepoints = prop_changepts[ , i], + timename = TS$timename, weights = TS$weights, + control = control) + out[[i]] <- soft_call(fun, args, TRUE) + } + out +} + + + +eval_step <- function(i, cpts, prop_step, inputs){ + temps <- inputs$temps + ntemps <- length(temps) + itemps <- 1 / temps + runif(ntemps) < exp((prop_step$lls - cpts$lls) * itemps) +} + + +take_step <- function(cpts, prop_step, accept_step){ + changepts <- cpts$changepts + lls <- cpts$lls + changepts[ , accept_step] <- prop_step$changepts[ , accept_step] + lls[accept_step] <- prop_step$lls[accept_step] + list(changepts = changepts, lls = lls, accept_step = accept_step) +} + + + diff --git a/R/ptMCMC.R b/R/ptMCMC.R index 62b30d26..5c562bd6 100644 --- a/R/ptMCMC.R +++ b/R/ptMCMC.R @@ -1,98 +1,4 @@ - -prep_cpts <- function(TS, control = list()){ - - data <- TS$data$train$ts_data - temps <- prep_temp_sequence(control) - ntemps <- length(temps) - min_time <- min(data[ , timename]) - max_time <- max(data[ , timename]) - times <- seq(min_time, max_time, 1) - avail_times <- times[-c(1, length(times))] - cps <- matrix(NA, nrow = TS$nchangepoints, ncol = ntemps) - for (i in 1:ntemps){ - cp_times <- sort(sample(avail_times, TS$nchangepoints, replace = FALSE)) - cps[ , i] <- cp_times - } - lls <- rep(NA, ntemps) - for (i in 1:ntemps){ - fun <- eval(parse(text = paste0(TS$response, "_TS"))) - fun <- memoise_fun(fun, control$memoise) - args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], - timename = TS$timename, weights = TS$weights, - control = control) - modfit <- soft_call(fun, args, TRUE) - lls[i] <- modfit$logLik - } - cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] - lls <- sort(lls, decreasing = TRUE) - - out <- list(cps, lls) - names(out) <- c("changepts", "lls") - out -} - - -prep_temp_sequence <- function(control = list()){ - ntemps <- control$ntemps - penultimate_temp <- control$penultimate_temp - ultimate_temp <- control$ultimate_temp - q <- control$q - sequence <- seq(0, log2(penultimate_temp), length.out = ntemps - 1) - log_temps <- sequence^(1 + q) / log2(penultimate_temp)^q - c(2^(log_temps), ultimate_temp) -} - - -prep_saves <- function(TS, control = list()){ - nchangepoints <- TS$nchangepoints - ntemps <- control$ntemps - nit <- control$nit - cpts <- array(NA, c(nchangepoints, ntemps, nit)) - lls <- matrix(NA, ntemps, nit) - ids <- matrix(NA, ntemps, nit) - step_accepts <- matrix(FALSE, ntemps, nit) - swap_accepts <- matrix(FALSE, ntemps - 1, nit) - list(cpts = cpts, lls = lls, ids = ids, step_accepts = step_accepts, - swap_accepts = swap_accepts) -} - - - -prep_ptMCMC_inputs <- function(TS, control = list()){ - - out <- list(control = control, - temps = prep_temp_sequence(control), - pdist = prep_proposal_dist(TS$nchangepoints, control), - formula = TS$formula, - weights = TS$weights, - data = TS$data$train$ts_data, - response = TS$response, - timename = TS$timename) - class(out) <- c("ptMCMC_inputs", "list") - out -} - - - -prep_proposal_dist <- function(nchangepoints, control = list()){ - ntemps <- control$ntemps - nit <- control$nit - if(nchangepoints == 0){ - steps <- matrix(0, nrow = nit, ncol = ntemps) - which_steps <- matrix(numeric(0), nrow = nit, ncol = ntemps) - } else{ - magnitude <- control$magnitude - step_signs <- sample(c(-1, 1), nit * ntemps, replace = TRUE) - step_magnitudes <- 1 + rgeom(nit * ntemps, 1 / magnitude) - steps <- matrix(step_signs * step_magnitudes, nrow = nit) - which_steps <- sample.int(nchangepoints, nit * ntemps, replace = TRUE) - which_steps <- matrix(which_steps, nrow = nit) - } - list(steps = steps, which_steps = which_steps) -} - - #' @title Calculate ptMCMC summary diagnostics #' #' @description Summarize the step and swap acceptance rates as well as trip @@ -306,7 +212,7 @@ count_trips <- function(ids){ #' #' @export #' -swap_chains <- function(chainsin, inputs, ids){ +swap_chainsx <- function(chainsin, inputs, ids){ temps <- inputs$temps itemps <- 1/temps ntemps <- length(temps) @@ -427,7 +333,7 @@ swap_chains <- function(chainsin, inputs, ids){ #' #' @export #' -step_chains <- function(i, cpts, inputs){ +step_chainsx <- function(i, cpts, inputs){ prop_step <- propose_step(i, cpts, inputs) accept_step <- eval_step(i, cpts, prop_step, inputs) take_step(cpts, prop_step, accept_step) @@ -437,7 +343,7 @@ step_chains <- function(i, cpts, inputs){ #' #' @export #' -propose_step <- function(i, cpts, inputs){ +propose_stepx <- function(i, cpts, inputs){ pdist <- inputs$pdist ntemps <- length(inputs$temps) @@ -458,7 +364,7 @@ propose_step <- function(i, cpts, inputs){ #' #' @export #' -eval_step <- function(i, cpts, prop_step, inputs){ +eval_stepx <- function(i, cpts, prop_step, inputs){ temps <- inputs$temps ntemps <- length(temps) itemps <- 1 / temps @@ -469,7 +375,7 @@ eval_step <- function(i, cpts, prop_step, inputs){ #' #' @export #' -take_step <- function(cpts, prop_step, accept_step){ +take_stepx <- function(cpts, prop_step, accept_step){ changepts <- cpts$changepts lls <- cpts$lls changepts[ , accept_step] <- prop_step$changepts[ , accept_step] @@ -524,7 +430,7 @@ take_step <- function(cpts, prop_step, accept_step){ #' #' @export #' -proposed_step_mods <- function(prop_changepts, inputs){ +proposed_step_modsx <- function(prop_changepts, inputs){ data <- inputs$data formula <- inputs$formula @@ -592,7 +498,7 @@ proposed_step_mods <- function(prop_changepts, inputs){ #' #' @export #' -prep_ids <- function(control = list()){ +prep_idsx <- function(control = list()){ control <- do.call("TS_control", control) if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ stop("ntemps must be integer-valued") @@ -604,7 +510,7 @@ prep_ids <- function(control = list()){ #' #' @export #' -update_ids <- function(ids, swaps){ +update_idsx <- function(ids, swaps){ swaps$ids } @@ -834,7 +740,7 @@ prep_savesx <- function(nchangepoints, control = list()){ #' #' @export #' -update_saves <- function(i, saves, steps, swaps){ +update_savesx <- function(i, saves, steps, swaps){ saves$cpts[ , , i] <- swaps$changepts saves$lls[ , i] <- swaps$lls saves$ids[ , i] <- swaps$ids @@ -847,7 +753,7 @@ update_saves <- function(i, saves, steps, swaps){ #' #' @export #' -process_saves <- function(saves, control = list()){ +process_savesx <- function(saves, control = list()){ control <- do.call("TS_control", control) nit <- control$nit iters <- 1:nit @@ -989,7 +895,7 @@ prep_cptsx <- function(data, formula, nchangepoints, timename, weights, #' #' @export #' -update_cpts <- function(cpts, swaps){ +update_cptsx <- function(cpts, swaps){ list(changepts = swaps$changepts, lls = swaps$lls) } diff --git a/hold.R b/hold.R index 1ea84fe3..5f7867ed 100644 --- a/hold.R +++ b/hold.R @@ -20,7 +20,7 @@ data <- conform_data(data = data, control = control) LDAs <- LDA(data = data, topics = topics, reps = reps, control = control$LDA_control) - +control <- list() lda <- LDA(rodents, 3, 1, list(quiet = TRUE)) lda From 49f9274586b4d798a074748e4699f43fc12d3873 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 19 Mar 2020 16:04:55 -0700 Subject: [PATCH 15/43] in progress but working --- NAMESPACE | 36 +-- R/TS.R | 303 ++++++++++++------ R/ldats_classic_method.R | 42 +++ R/ptMCMC.R | 4 +- est.R | 51 ++- hold.R | 2 +- man/{count_trips.Rd => count_tripsx.Rd} | 6 +- ...diagnose_ptMCMC.Rd => diagnose_ptMCMCx.Rd} | 6 +- man/{prep_cpts.Rd => prep_cptsx.Rd} | 9 +- man/{prep_ids.Rd => prep_idsx.Rd} | 9 +- ...roposal_dist.Rd => prep_proposal_distx.Rd} | 6 +- ...tMCMC_inputs.Rd => prep_ptMCMC_inputsx.Rd} | 6 +- man/{prep_saves.Rd => prep_savesx.Rd} | 12 +- ...emp_sequence.Rd => prep_temp_sequencex.Rd} | 6 +- ...ed_step_mods.Rd => proposed_step_modsx.Rd} | 6 +- man/{step_chains.Rd => step_chainsx.Rd} | 15 +- man/{swap_chains.Rd => swap_chainsx.Rd} | 6 +- 17 files changed, 323 insertions(+), 202 deletions(-) rename man/{count_trips.Rd => count_tripsx.Rd} (96%) rename man/{diagnose_ptMCMC.Rd => diagnose_ptMCMCx.Rd} (97%) rename man/{prep_cpts.Rd => prep_cptsx.Rd} (96%) rename man/{prep_ids.Rd => prep_idsx.Rd} (95%) rename man/{prep_proposal_dist.Rd => prep_proposal_distx.Rd} (94%) rename man/{prep_ptMCMC_inputs.Rd => prep_ptMCMC_inputsx.Rd} (96%) rename man/{prep_saves.Rd => prep_savesx.Rd} (93%) rename man/{prep_temp_sequence.Rd => prep_temp_sequencex.Rd} (90%) rename man/{proposed_step_mods.Rd => proposed_step_modsx.Rd} (94%) rename man/{step_chains.Rd => step_chainsx.Rd} (94%) rename man/{swap_chains.Rd => swap_chainsx.Rd} (97%) diff --git a/NAMESPACE b/NAMESPACE index f3fb39cc..20b12752 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -17,12 +17,12 @@ export(check_document_term_table) export(check_multinom_TS_inputs) export(check_nreps) export(check_topics) -export(count_trips) -export(diagnose_ptMCMC) +export(count_tripsx) +export(diagnose_ptMCMCx) export(document_weights) export(ecdf_plot) export(eta_diagnostics_plots) -export(eval_step) +export(eval_stepx) export(iftrue) export(list_depth) export(logsumexp) @@ -37,15 +37,15 @@ export(package_chunk_fits) export(posterior_plot) export(pred_gamma_TS_plot) export(prep_chunks) -export(prep_cpts) -export(prep_ids) -export(prep_proposal_dist) -export(prep_ptMCMC_inputs) -export(prep_saves) -export(prep_temp_sequence) -export(process_saves) -export(propose_step) -export(proposed_step_mods) +export(prep_cptsx) +export(prep_idsx) +export(prep_proposal_distx) +export(prep_ptMCMC_inputsx) +export(prep_savesx) +export(prep_temp_sequencex) +export(process_savesx) +export(propose_stepx) +export(proposed_step_modsx) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) @@ -58,14 +58,14 @@ export(sim_LDA_TS_data) export(sim_LDA_data) export(sim_TS_data) export(softmax) -export(step_chains) -export(swap_chains) -export(take_step) +export(step_chainsx) +export(swap_chainsx) +export(take_stepx) export(trace_plot) -export(update_cpts) -export(update_ids) +export(update_cptsx) +export(update_idsx) export(update_list) -export(update_saves) +export(update_savesx) export(verify_changepoint_locations) importFrom(coda,HPDinterval) importFrom(coda,as.mcmc) diff --git a/R/TS.R b/R/TS.R index 7ecc22e8..9c8b5813 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,7 +1,13 @@ ## # # working in here - +# +# looks pretty nice! +# +# generally pretty well working, needs to get tidied up considerably tho +# pull redundant code out into functions etc +# and figure out better namings etc +# also make sure when no changepoint that it still says estimating regressor @@ -32,10 +38,11 @@ TS_control <- function(response = "multinom", burnin = 0, thin_frac = 1, memoise = TRUE, quiet = FALSE), + summary_prob = 0.95, soften = TRUE, quiet = FALSE){ list(response = response, method = method, method_args = method_args, - soften = soften, quiet = quiet) + summary_prob = summary_prob, soften = soften, quiet = quiet) } @@ -50,52 +57,224 @@ sequential_TS <- function(TS, control = list()){ rho_dist <- est_changepoints(TS = TS, control = control) eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) + package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist, + control = control) +} -# include all of the model packaging here like in topicmodels_LDA +package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ -} -est_changepoints <- function(TS, control = list()){ + if(is.null(rho_dist)){ + focal_rho_dist <- NULL + data <- TS$data$train$ts_data + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + args <- list(data = data, formula = TS$formula, changepoints = NULL, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + lls <- as.numeric(logLik(mod)) - if (TS$nchangepoints == 0){ - return(NULL) + + + } else{ + vals <- rho_dist$cpts[ , 1, , drop = FALSE] + dims <- dim(rho_dist$cpts)[c(1, 3)] + lls <- rho_dist$lls[1, ] + focal_rho_dist <- t(array(vals, dim = dims)) } -# working right here. really walk through the process and pull out specifics -# reference directly to the existing function - - - # construct input arguments to the focal function - # the function will be the same but will have different options - # run focal function + rho_summary <- summarize_rhos(rhos = focal_rho_dist, control = control) + rho_vcov <- measure_rho_vcov(rhos = focal_rho_dist) + eta_summary <- summarize_etas(etas = eta_dist, control = control) + eta_vcov <- measure_eta_vcov(etas = eta_dist) - cptfn() + logLik <- mean(lls) + ncoefs <- ncol(eta_dist) + nparams <- TS$nchangepoints + ncoefs - # process output from focal function + out <- update_list(TS, focal_rhos = focal_rho_dist, rhos = rho_dist, + etas = eta_dist, rho_summary = rho_summary, + rho_vcov = rho_vcov, eta_summary = eta_summary, + eta_vcov = eta_vcov, logLik = logLik, nparams = nparams) + class(out) <- c("TS", "list") + to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", + "focal_rhos", "rho_vcov", "eta_vcov") + if (TS$nchangepoints == 0){ + to_hide <- c(to_hide, "rho_summary") + } + attr(out, "hidden") <- to_hide + out } -cptfn <- function(TS, -method = "ldats_classic", control = list()){ -control <- control$method_args + + + + +print.TS <- function(x, ...){ + hid <- attr(x, "hidden") + notHid <- !(names(x) %in% hid) + print(x[notHid]) } -TS_responses <- function(){ -c("multinom", "ilr", "alr") -# associated model functions: +summarize_etas <- function(etas, control = list()){ + check_control(control) + control <- do.call("TS_control", control) + if (!is.matrix(etas)){ + stop("etas should be a matrix") + } + prob <- control$summary_prob + Mean <- round(apply(etas, 2, mean), 4) + Median <- round(apply(etas, 2, median), 4) + SD <- round(apply(etas, 2, sd), 4) + MCMCerr <- round(SD / sqrt(nrow(etas)), 4) + HPD <- HPDinterval(as.mcmc(etas), prob = prob) + Lower <- round(HPD[ , "lower"], 4) + Upper <- round(HPD[ , "upper"], 4) + AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), + error = function(x){"-"}) + ESS <- effectiveSize(etas) + out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[7] <- "AC10" + rownames(out) <- colnames(etas) + out +} + +measure_eta_vcov <- function(etas){ + if (!is.matrix(etas)){ + stop("expecting etas to be a matrix") + } + out <- var(etas) + colnames(out) <- colnames(etas) + rownames(out) <- colnames(etas) + out +} +summarize_rhos <- function(rhos, control = list()){ + if (is.null(rhos)) { + return() + } + prob <- control$summary_prob + Mean <- round(apply(rhos, 2, mean), 2) + Median <- apply(rhos, 2, median) + Mode <- apply(rhos, 2, modalvalue) + SD <- round(apply(rhos, 2, sd), 2) + MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) + HPD <- HPDinterval(as.mcmc(rhos), prob = prob) + Lower <- HPD[ , "lower"] + Upper <- HPD[ , "upper"] + AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) + ESS <- effectiveSize(rhos) + out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[8] <- "AC10" + rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) + out +} +measure_rho_vcov <- function(rhos){ + if (is.null(rhos)) { + return() + } + if (!is.matrix(rhos)){ + stop("expecting rhos to be a matrix") + } + out <- var(rhos) + colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) + rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) + out } -TS_methods <- function(){ -c("ldats_classic") + + +est_changepoints <- function(TS, control = list()){ + if (TS$nchangepoints == 0){ + return(NULL) + } + fun <- control$method + args <- list(TS = TS, control = control$method_args) + soft_call(fun = fun, args = args, soften = control$soften) } +est_regressors <- function(rho_dist, TS, control = list()){ + data <- TS$data$train$ts_data + if(is.null(rho_dist)){ + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + args <- list(data = data, formula = TS$formula, changepoints = NULL, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + mod <- mod[[1]][[1]] + mv <- as.vector(t(coef(mod))) + vcv <- mirror_vcov(mod) + eta <- rmvnorm(control$method_args$nit, mv, vcv) + seg_names <- rep(1, ncol(vcv)) + coef_names <- colnames(vcv) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + return(eta) + } + + focal_rho <- rho_dist$cpts[ , 1, ] + nchangepts <- dim(rho_dist$cpts)[1] + if (nchangepts == 1){ + collapsedrho <- focal_rho + } else{ + collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") + } + freq_r <- table(collapsedrho) + unique_r <- names(freq_r) + nr <- length(unique_r) + n_topic <- ncol(data$gamma) + n_covar <- length(attr(terms(TS$formula), "term.labels")) + n_eta_segment <- (n_topic - 1) * (n_covar + 1) + n_changept <- dim(rho_dist$cpts)[1] + n_segment <- n_changept + 1 + n_eta <- n_eta_segment * n_segment + n_iter <- dim(rho_dist$cpts)[3] + eta <- matrix(NA, nrow = n_iter, ncol = n_eta) + pbar <- prep_pbar(control = control, bar_type = "eta", nr = nr) + + for(i in 1:nr){ + update_pbar(pbar = pbar, control = control) + cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) + + + data <- TS$data$train$ts_data + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$method_args$memoise) + args <- list(data = data, formula = TS$formula, changepoints = cpts, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + + + ndraws <- freq_r[i] + colindex1 <- 1 + for(j in 1:n_segment){ + colindex2 <- colindex1 + n_eta_segment - 1 + seg_mod <- mod[[1]][[j]] + mv <- as.vector(t(coef(seg_mod))) + vcv <- mirror_vcov(seg_mod) + drawn <- rmvnorm(ndraws, mv, vcv) + rows_in <- which(collapsedrho == unique_r[i]) + cols_in <- colindex1:colindex2 + eta[rows_in, cols_in] <- drawn + colindex1 <- colindex2 + 1 + } + } + seg_names <- rep(1:n_segment, each = n_eta_segment) + coef_names <- rep(colnames(vcv), n_segment) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + eta + + +} prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, @@ -273,82 +452,6 @@ package_TSx <- function(data, formula, timename, weights, control, rho_dist, attr(out, "hidden") <- to_hide out } -print.TS_fit <- function(x, ...){ - hid <- attr(x, "hidden") - notHid <- !names(x) %in% hid - print(x[notHid]) -} - - -summarize_etas <- function(etas, control = list()){ - check_control(control) - control <- do.call("TS_control", control) - if (!is.matrix(etas)){ - stop("etas should be a matrix") - } - prob <- control$summary_prob - Mean <- round(apply(etas, 2, mean), 4) - Median <- round(apply(etas, 2, median), 4) - SD <- round(apply(etas, 2, sd), 4) - MCMCerr <- round(SD / sqrt(nrow(etas)), 4) - HPD <- HPDinterval(as.mcmc(etas), prob = prob) - Lower <- round(HPD[ , "lower"], 4) - Upper <- round(HPD[ , "upper"], 4) - AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), - error = function(x){"-"}) - ESS <- effectiveSize(etas) - out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[7] <- "AC10" - rownames(out) <- colnames(etas) - out -} - -measure_eta_vcov <- function(etas){ - if (!is.matrix(etas)){ - stop("expecting etas to be a matrix") - } - out <- var(etas) - colnames(out) <- colnames(etas) - rownames(out) <- colnames(etas) - out -} -summarize_rhos <- function(rhos, control = list()){ - check_control(control) - control <- do.call("TS_control", control) - if (is.null(rhos)) { - return() - } - prob <- control$summary_prob - Mean <- round(apply(rhos, 2, mean), 2) - Median <- apply(rhos, 2, median) - Mode <- apply(rhos, 2, modalvalue) - SD <- round(apply(rhos, 2, sd), 2) - MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) - HPD <- HPDinterval(as.mcmc(rhos), prob = prob) - Lower <- HPD[ , "lower"] - Upper <- HPD[ , "upper"] - AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) - ESS <- effectiveSize(rhos) - out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[8] <- "AC10" - rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) - out -} - -measure_rho_vcov <- function(rhos){ - if (is.null(rhos)) { - return() - } - if (!is.matrix(rhos)){ - stop("expecting rhos to be a matrix") - } - out <- var(rhos) - colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) - rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) - out -} est_regressorsx <- function(rho_dist, data, formula, timename, weights, control = list()){ diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index 0948f637..8d6d3551 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -32,15 +32,57 @@ process_saves <- function(saves, control = list()){ thin_interval <- ceiling(1/control$thin_frac) iters_thinned <- seq(1, niters, by = thin_interval) dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) + + trips <- count_trips(saves$ids) + diagnostics <- list(step_acceptance_rate = rowMeans(saves$step_accepts), + swap_acceptance_rate = rowMeans(saves$swap_accepts), + trip_counts = trips$trip_counts, + trip_rates = trips$trip_rates) + + saves$cpts <- array(saves$cpts[ , , iters_thinned], dim = dims) saves$lls <- saves$lls[, iters_thinned] saves$ids <- saves$ids[, iters_thinned] saves$step_accepts <- saves$step_accepts[ , iters_thinned] saves$swap_accepts <- saves$swap_accepts[ , iters_thinned] + + saves$diagnostics <- diagnostics + + saves } +count_trips <- function(ids){ + nit <- ncol(ids) + ntemps <- nrow(ids) + last_extreme <- NA + last_extreme_vector <- numeric(nit) + trips <- numeric(ntemps) + for(i in 1:ntemps){ + for(j in 1:nit){ + if(ids[1, j] == i){ + last_extreme <- "bottom" + } + if(ids[ntemps, j] == i){ + last_extreme <- "top" + } + last_extreme_vector[j] <- last_extreme + } + first_top <- match("top", last_extreme_vector) + if (is.na(first_top)){ + trips[i] <- 0 + } else{ + last_pos <- rle(last_extreme_vector[first_top:nit])$values + trips[i] <- sum(last_pos == "bottom") + } + } + trip_rates <- trips / nit + list(trip_counts = trips, trip_rates = trip_rates) +} + + + update_saves <- function(i, saves, steps, swaps){ saves$cpts[ , , i] <- swaps$changepts saves$lls[ , i] <- swaps$lls diff --git a/R/ptMCMC.R b/R/ptMCMC.R index 5c562bd6..73118749 100644 --- a/R/ptMCMC.R +++ b/R/ptMCMC.R @@ -56,7 +56,7 @@ #' #' @export #' -diagnose_ptMCMC <- function(ptMCMCout){ +diagnose_ptMCMCx <- function(ptMCMCout){ if(is.null(ptMCMCout)){ return(NULL) } @@ -109,7 +109,7 @@ diagnose_ptMCMC <- function(ptMCMCout){ #' #' @export #' -count_trips <- function(ids){ +count_tripsx <- function(ids){ nit <- ncol(ids) ntemps <- nrow(ids) last_extreme <- NA diff --git a/est.R b/est.R index f082f2a7..69710620 100644 --- a/est.R +++ b/est.R @@ -1,37 +1,34 @@ - -est_changepointsx <- function(data, formula, nchangepoints, timename, weights, - control = list()){ - check_TS_inputs(data, formula, nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - data <- time_order_data(data, timename = timename) - if (nchangepoints == 0){ - return(NULL) +package_TSx <- function(data, formula, timename, weights, control, rho_dist, + eta_dist){ + + if (is.null(nchangepoints)){ + nchangepoints <- 0 + mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, + control) + mod <- mod[[1]][[1]] + lls <- as.numeric(logLik(mod)) + rhos <- NULL + } else{ + lls <- rho_dist$lls[1, ] + rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) } -# break this into a "classic" approach or whatever and give it its own -# function that is akin to temper - saves <- prep_saves(nchangepoints, control) - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - pbar <- prep_pbar(control, "rho") + logLik <- mean(lls) + ncoefs <- ncol(eta_dist) + nparams <- nchangepoints + ncoefs + AIC <- -2 * logLik + 2 * nparams + + out <- list(lls = lls, rhos = rhos, + etas = eta_dist, ptMCMC_diagnostics = ptMCMC_diagnostics, + rho_summary = rho_summary, rho_vcov = rho_vcov, + eta_summary = eta_summary, eta_vcov = eta_vcov, + logLik = logLik, nparams = nparams, AIC = AIC) + - for(i in 1:control$nit){ - update_pbar(pbar, control) - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - process_saves(saves, control) -# the separate function runs to here -# and then process the output } diff --git a/hold.R b/hold.R index 5f7867ed..35a8f39d 100644 --- a/hold.R +++ b/hold.R @@ -11,7 +11,7 @@ data <- rodents topics = 2 reps = 2 formulas = ~ 1 -nchangepoints = 1 +nchangepoints = 0:2 timename = "newmoon" weights = TRUE control = list() diff --git a/man/count_trips.Rd b/man/count_tripsx.Rd similarity index 96% rename from man/count_trips.Rd rename to man/count_tripsx.Rd index 32ae4394..db860dbf 100644 --- a/man/count_trips.Rd +++ b/man/count_tripsx.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{count_trips} -\alias{count_trips} +\name{count_tripsx} +\alias{count_tripsx} \title{Count trips of the ptMCMC particles} \usage{ -count_trips(ids) +count_tripsx(ids) } \arguments{ \item{ids}{\code{matrix} of identifiers of the particles in each chain for diff --git a/man/diagnose_ptMCMC.Rd b/man/diagnose_ptMCMCx.Rd similarity index 97% rename from man/diagnose_ptMCMC.Rd rename to man/diagnose_ptMCMCx.Rd index 9dfaa612..89c74310 100644 --- a/man/diagnose_ptMCMC.Rd +++ b/man/diagnose_ptMCMCx.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{diagnose_ptMCMC} -\alias{diagnose_ptMCMC} +\name{diagnose_ptMCMCx} +\alias{diagnose_ptMCMCx} \title{Calculate ptMCMC summary diagnostics} \usage{ -diagnose_ptMCMC(ptMCMCout) +diagnose_ptMCMCx(ptMCMCout) } \arguments{ \item{ptMCMCout}{Named \code{list} of saved data objects from a ptMCMC diff --git a/man/prep_cpts.Rd b/man/prep_cptsx.Rd similarity index 96% rename from man/prep_cpts.Rd rename to man/prep_cptsx.Rd index 2c46ad05..80a503b6 100644 --- a/man/prep_cpts.Rd +++ b/man/prep_cptsx.Rd @@ -1,15 +1,12 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_cpts} -\alias{prep_cpts} -\alias{update_cpts} +\name{prep_cptsx} +\alias{prep_cptsx} \title{Initialize and update the change point matrix used in the ptMCMC algorithm} \usage{ -prep_cpts(data, formula, nchangepoints, timename, weights, +prep_cptsx(data, formula, nchangepoints, timename, weights, control = list()) - -update_cpts(cpts, swaps) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated diff --git a/man/prep_ids.Rd b/man/prep_idsx.Rd similarity index 95% rename from man/prep_ids.Rd rename to man/prep_idsx.Rd index 24a05fd0..81ba69e3 100644 --- a/man/prep_ids.Rd +++ b/man/prep_idsx.Rd @@ -1,13 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_ids} -\alias{prep_ids} -\alias{update_ids} +\name{prep_idsx} +\alias{prep_idsx} \title{Initialize and update the chain ids throughout the ptMCMC algorithm} \usage{ -prep_ids(control = list()) - -update_ids(ids, swaps) +prep_idsx(control = list()) } \arguments{ \item{control}{A \code{list} of parameters to control the fitting of the diff --git a/man/prep_proposal_dist.Rd b/man/prep_proposal_distx.Rd similarity index 94% rename from man/prep_proposal_dist.Rd rename to man/prep_proposal_distx.Rd index 399972fa..8eb5dfb4 100644 --- a/man/prep_proposal_dist.Rd +++ b/man/prep_proposal_distx.Rd @@ -1,11 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_proposal_dist} -\alias{prep_proposal_dist} +\name{prep_proposal_distx} +\alias{prep_proposal_distx} \title{Pre-calculate the change point proposal distribution for the ptMCMC algorithm} \usage{ -prep_proposal_dist(nchangepoints, control = list()) +prep_proposal_distx(nchangepoints, control = list()) } \arguments{ \item{nchangepoints}{Integer corresponding to the number of diff --git a/man/prep_ptMCMC_inputs.Rd b/man/prep_ptMCMC_inputsx.Rd similarity index 96% rename from man/prep_ptMCMC_inputs.Rd rename to man/prep_ptMCMC_inputsx.Rd index 3ffad215..980bbd90 100644 --- a/man/prep_ptMCMC_inputs.Rd +++ b/man/prep_ptMCMC_inputsx.Rd @@ -1,11 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_ptMCMC_inputs} -\alias{prep_ptMCMC_inputs} +\name{prep_ptMCMC_inputsx} +\alias{prep_ptMCMC_inputsx} \title{Prepare the inputs for the ptMCMC algorithm estimation of change points} \usage{ -prep_ptMCMC_inputs(data, formula, nchangepoints, timename, +prep_ptMCMC_inputsx(data, formula, nchangepoints, timename, weights = NULL, control = list()) } \arguments{ diff --git a/man/prep_saves.Rd b/man/prep_savesx.Rd similarity index 93% rename from man/prep_saves.Rd rename to man/prep_savesx.Rd index 176fd441..52c271e8 100644 --- a/man/prep_saves.Rd +++ b/man/prep_savesx.Rd @@ -1,16 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_saves} -\alias{prep_saves} -\alias{update_saves} -\alias{process_saves} +\name{prep_savesx} +\alias{prep_savesx} \title{Prepare and update the data structures to save the ptMCMC output} \usage{ -prep_saves(nchangepoints, control = list()) - -update_saves(i, saves, steps, swaps) - -process_saves(saves, control = list()) +prep_savesx(nchangepoints, control = list()) } \arguments{ \item{nchangepoints}{\code{integer} corresponding to the number of diff --git a/man/prep_temp_sequence.Rd b/man/prep_temp_sequencex.Rd similarity index 90% rename from man/prep_temp_sequence.Rd rename to man/prep_temp_sequencex.Rd index 264e13d9..56a84df0 100644 --- a/man/prep_temp_sequence.Rd +++ b/man/prep_temp_sequencex.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{prep_temp_sequence} -\alias{prep_temp_sequence} +\name{prep_temp_sequencex} +\alias{prep_temp_sequencex} \title{Prepare the ptMCMC temperature sequence} \usage{ -prep_temp_sequence(control = list()) +prep_temp_sequencex(control = list()) } \arguments{ \item{control}{A \code{list} of parameters to control the fitting of the diff --git a/man/proposed_step_mods.Rd b/man/proposed_step_modsx.Rd similarity index 94% rename from man/proposed_step_mods.Rd rename to man/proposed_step_modsx.Rd index 4fefc1ac..3111651a 100644 --- a/man/proposed_step_mods.Rd +++ b/man/proposed_step_modsx.Rd @@ -1,11 +1,11 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{proposed_step_mods} -\alias{proposed_step_mods} +\name{proposed_step_modsx} +\alias{proposed_step_modsx} \title{Fit the chunk-level models to a time series, given a set of proposed change points within the ptMCMC algorithm} \usage{ -proposed_step_mods(prop_changepts, inputs) +proposed_step_modsx(prop_changepts, inputs) } \arguments{ \item{prop_changepts}{\code{matrix} of proposed change points across diff --git a/man/step_chains.Rd b/man/step_chainsx.Rd similarity index 94% rename from man/step_chains.Rd rename to man/step_chainsx.Rd index 2be8099a..a7d4e8c8 100644 --- a/man/step_chains.Rd +++ b/man/step_chainsx.Rd @@ -1,19 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{step_chains} -\alias{step_chains} -\alias{propose_step} -\alias{eval_step} -\alias{take_step} +\name{step_chainsx} +\alias{step_chainsx} \title{Conduct a within-chain step of the ptMCMC algorithm} \usage{ -step_chains(i, cpts, inputs) - -propose_step(i, cpts, inputs) - -eval_step(i, cpts, prop_step, inputs) - -take_step(cpts, prop_step, accept_step) +step_chainsx(i, cpts, inputs) } \arguments{ \item{i}{\code{integer} iteration index.} diff --git a/man/swap_chains.Rd b/man/swap_chainsx.Rd similarity index 97% rename from man/swap_chains.Rd rename to man/swap_chainsx.Rd index 6bb0263b..582d4b4d 100644 --- a/man/swap_chains.Rd +++ b/man/swap_chainsx.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/ptMCMC.R -\name{swap_chains} -\alias{swap_chains} +\name{swap_chainsx} +\alias{swap_chainsx} \title{Conduct a set of among-chain swaps for the ptMCMC algorithm} \usage{ -swap_chains(chainsin, inputs, ids) +swap_chainsx(chainsin, inputs, ids) } \arguments{ \item{chainsin}{Chain configuration to be evaluated for swapping.} From 0debbbf4a8d937990e165223a065eae2822c9573 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 19 Mar 2020 18:59:19 -0700 Subject: [PATCH 16/43] working version of ilr_TS --- DESCRIPTION | 1 + NAMESPACE | 2 + R/LDATS.R | 1 + R/TS.R | 369 +++++++++++++++++++++--------------------------- R/TS_on_LDA.R | 2 +- R/ilr_TS.R | 65 +++++++++ R/multinom_TS.R | 109 -------------- R/utilities.R | 4 +- est.R | 34 ----- hold.R | 4 + notes.R | 17 ++- 11 files changed, 250 insertions(+), 358 deletions(-) create mode 100644 R/ilr_TS.R delete mode 100644 est.R diff --git a/DESCRIPTION b/DESCRIPTION index eca3eb2b..ed7a4878 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -36,6 +36,7 @@ Encoding: UTF-8 LazyData: true Imports: coda, + compositions, digest, dplyr, extraDistr, diff --git a/NAMESPACE b/NAMESPACE index 20b12752..f7822b72 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -72,6 +72,8 @@ importFrom(coda,as.mcmc) importFrom(coda,autocorr) importFrom(coda,autocorr.diag) importFrom(coda,effectiveSize) +importFrom(compositions,acomp) +importFrom(compositions,ilr) importFrom(digest,digest) importFrom(extraDistr,rcat) importFrom(extraDistr,rdirichlet) diff --git a/R/LDATS.R b/R/LDATS.R index 9982eb83..2849576a 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -1,4 +1,5 @@ #' @importFrom coda as.mcmc autocorr autocorr.diag effectiveSize HPDinterval +#' @importFrom compositions acomp ilr #' @importFrom digest digest #' @importFrom extraDistr rcat rdirichlet #' @importFrom graphics abline axis hist mtext par plot points rect text diff --git a/R/TS.R b/R/TS.R index 9c8b5813..e28bc14c 100644 --- a/R/TS.R +++ b/R/TS.R @@ -28,6 +28,41 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, +select_TS <- function(TSs, control = list()){ + + vals <- measure_TS(TSs = TSs, control = control) + fun <- control$selector_function + args <- update_list(control$selector_args, x = vals) + selection <- do.call(what = fun, args = args) + TSs[selection] +} + +measure_TS <- function(TSs, control = list()){ + fun <- control$measurer_function + args <- control$measurer_args + nTSs <- length(TSs) + vals <- rep(NA, nTSs) + for(i in 1:nTSs){ + args <- update_list(args, object = TSs[[i]]) + vals_i <- do.call(what = fun, args = args) + if(length(vals_i) != 0){ + vals[i] <- vals_i + } + } + vals +} + + + +package_TS <- function(selected_TSs, TSs, control = list()){ + out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) + class(out) <- c("TS_set", "list") + out +} + + + + TS_control <- function(response = "multinom", @@ -39,18 +74,19 @@ TS_control <- function(response = "multinom", memoise = TRUE, quiet = FALSE), summary_prob = 0.95, + measurer_function = AIC, + measurer_args = list(), + selector_function = which.min, + selector_args = list(), soften = TRUE, quiet = FALSE){ list(response = response, method = method, method_args = method_args, + measurer_function = measurer_function, measurer_args = measurer_args, + selector_function = selector_function, selector_args = selector_args, summary_prob = summary_prob, soften = soften, quiet = quiet) } - -# the defining characteristic here is the sequential -# estimation of rho then eta, ostensibly it could be done together -# - sequential_TS <- function(TS, control = list()){ control <- do.call("TS_control", control) TS_msg(TS = TS, quiet = control$quiet) @@ -350,210 +386,6 @@ TS_msg <- function(TS, quiet = FALSE){ - - - - - - - - - - - - -predict.TS_fit <- function(object, newdata = NULL, control = list(), ...){ - if(is.null(newdata)){ - newdata <- object$data - } - control <- do.call("TS_control", control) - nit <- object$control$nit - rhos <- object$rhos - etas <- object$etas - nnewdata <- NROW(newdata) - formula <- object$formula - out <- matrix(NA, nrow = nit, ncol = nnewdata) - for(i in 1:nit){ - - out[i , ] <- predicts - } - -} - -TSx <- function(data, formula = gamma ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, control = list()){ - check_TS_inputs(data, formula, nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - set.seed(control$seed) - data <- time_order_data(data, timename = timename) - rho_dist <- est_changepoints(data, formula, nchangepoints, timename, - weights, control) - eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, - control) - package_TS(data, formula, timename, weights, control, rho_dist, eta_dist) -} - -check_TS_inputs <- function(data, formula = gamma ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, - control = list()){ - check_formula(data, formula) - check_nchangepoints(nchangepoints) - check_weights(weights) - check_timename(data, timename) - check_control(control) - return() -} - -package_TSx <- function(data, formula, timename, weights, control, rho_dist, - eta_dist){ - - check_formula(data, formula) - check_weights(weights) - check_control(control) - check_timename(data, timename) - control <- do.call("TS_control", control) - nchangepoints <- dim(rho_dist$cpts)[1] - if (is.null(nchangepoints)){ - nchangepoints <- 0 - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - mod <- mod[[1]][[1]] - lls <- as.numeric(logLik(mod)) - rhos <- NULL - } else{ - lls <- rho_dist$lls[1, ] - rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) - } - - ptMCMC_diagnostics <- diagnose_ptMCMC(rho_dist) - rho_summary <- summarize_rhos(rhos, control) - rho_vcov <- measure_rho_vcov(rhos) - eta_summary <- summarize_etas(eta_dist, control) - eta_vcov <- measure_eta_vcov(eta_dist) - - logLik <- mean(lls) - ncoefs <- ncol(eta_dist) - nparams <- nchangepoints + ncoefs - AIC <- -2 * logLik + 2 * nparams - - out <- list(data = data, formula = formula, nchangepoints = nchangepoints, - timename = timename, weights = weights, - control = control, lls = lls, rhos = rhos, - etas = eta_dist, ptMCMC_diagnostics = ptMCMC_diagnostics, - rho_summary = rho_summary, rho_vcov = rho_vcov, - eta_summary = eta_summary, eta_vcov = eta_vcov, - logLik = logLik, nparams = nparams, AIC = AIC) - class(out) <- c("TS_fit", "list") - to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", - "rho_vcov", "eta_vcov") - if (nchangepoints == 0){ - to_hide <- c(to_hide, "ptMCMC_diagnostics", "rho_summary") - } - attr(out, "hidden") <- to_hide - out -} - -est_regressorsx <- function(rho_dist, data, formula, timename, weights, - control = list()){ - check_formula(data, formula) - check_weights(weights) - check_control(control) - control <- do.call("TS_control", control) - if (!is.null(rho_dist)){ - if (any(names(rho_dist)[1:3] != c("cpts", "lls", "ids"))){ - stop("expecting rho_dist to have elements cpts, lls, ids") - } - } - if (is.null(rho_dist)){ - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - mod <- mod[[1]][[1]] - mv <- as.vector(t(coef(mod))) - vcv <- mirror_vcov(mod) - eta <- rmvnorm(control$nit, mv, vcv) - seg_names <- rep(1, ncol(vcv)) - coef_names <- colnames(vcv) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - return(eta) - } - - focal_rho <- rho_dist$cpts[ , 1, ] - nchangepts <- dim(rho_dist$cpts)[1] - if (nchangepts == 1){ - collapsedrho <- focal_rho - } else{ - collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") - } - freq_r <- table(collapsedrho) - unique_r <- names(freq_r) - nr <- length(unique_r) - n_topic <- ncol(data$gamma) - n_covar <- length(attr(terms(formula), "term.labels")) - n_eta_segment <- (n_topic - 1) * (n_covar + 1) - n_changept <- dim(rho_dist$cpts)[1] - n_segment <- n_changept + 1 - n_eta <- n_eta_segment * n_segment - eta <- matrix(NA, nrow = control$nit, ncol = n_eta) - pbar <- prep_pbar(control, "eta", nr) - - for(i in 1:nr){ - update_pbar(pbar, control) - cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) - mods <- multinom_TS(data, formula, cpts, timename, weights, control) - ndraws <- freq_r[i] - colindex1 <- 1 - for(j in 1:n_segment){ - colindex2 <- colindex1 + n_eta_segment - 1 - seg_mod <- mods[[1]][[j]] - mv <- as.vector(t(coef(seg_mod))) - vcv <- mirror_vcov(seg_mod) - drawn <- rmvnorm(ndraws, mv, vcv) - rows_in <- which(collapsedrho == unique_r[i]) - cols_in <- colindex1:colindex2 - eta[rows_in, cols_in] <- drawn - colindex1 <- colindex2 + 1 - } - } - seg_names <- rep(1:n_segment, each = n_eta_segment) - coef_names <- rep(colnames(vcv), n_segment) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - eta -} - - -est_changepointsx <- function(data, formula, nchangepoints, timename, weights, - control = list()){ - check_TS_inputs(data, formula, nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - data <- time_order_data(data, timename = timename) - if (nchangepoints == 0){ - return(NULL) - } - saves <- prep_saves(nchangepoints, control) - -# break this into a "classic" approach or whatever and give it its own -# function that is akin to temper - - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - pbar <- prep_pbar(control, "rho") - - for(i in 1:control$nit){ - update_pbar(pbar, control) - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } -# the separate function runs to here -# and then process the output - - process_saves(saves, control) -} - check_formula <- function(data, formula){ if (!is(formula, "formula")){ @@ -611,10 +443,125 @@ update_pbar <- function(pbar, control = list()){ pbar$tick() } -logLik.TS_fit <- function(object, ...){ +logLik.TS <- function(object, ...){ val <- object$logLik attr(val, "df") <- object$nparams attr(val, "nobs") <- nrow(object$data) class(val) <- "logLik" val -} \ No newline at end of file +} + + +#' @title Check that a set of change point locations is proper +#' +#' @description Check that the change point locations are \code{numeric} +#' and conformable to \code{interger} values. +#' +#' @param changepoints Change point locations to evaluate. +#' +#' @return An error message is thrown if \code{changepoints} are not proper, +#' else \code{NULL}. +#' +#' @examples +#' check_changepoints(100) +#' +#' @export +#' +check_changepoints <- function(changepoints = NULL){ + if (is.null(changepoints)){ + return() + } + if (!is.numeric(changepoints) || any(changepoints %% 1 != 0)){ + stop("changepoints must be integer-valued") + } +} + + +#' @title Prepare the time chunk table for a multinomial change point +#' Time Series model +#' +#' @description Creates the table containing the start and end times for each +#' chunk within a time series, based on the change points (used to break up +#' the time series) and the range of the time series. If there are no +#' change points (i.e. \code{changepoints} is \code{NULL}, there is still a +#' single chunk defined by the start and end of the time series. +#' +#' @param data Class \code{data.frame} object including the predictor and +#' response variables, but specifically here containing the column indicated +#' by the \code{timename} input. +#' +#' @param changepoints Numeric vector indicating locations of the change +#' points. Must be conformable to \code{integer} values. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @return \code{data.frame} of \code{start} and \code{end} times (columns) +#' for each chunk (rows). +#' +#' @examples +#' data(rodents) +#' dtt <- rodents$document_term_table +#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) +#' dct <- rodents$document_covariate_table +#' dct$gamma <- lda[[1]]@gamma +#' chunks <- prep_chunks(dct, changepoints = 100, timename = "newmoon") +#' +#' @export +#' +prep_chunks <- function(data, changepoints = NULL, + timename = "time"){ + start <- c(min(data[ , timename]), changepoints + 1) + end <- c(changepoints, max(data[ , timename])) + data.frame(start, end) +} + + +#' @title Verify the change points of a multinomial time series model +#' +#' @description Verify that a time series can be broken into a set +#' of chunks based on input change points. +#' +#' @param data Class \code{data.frame} object including the predictor and +#' response variables. +#' +#' @param changepoints Numeric vector indicating locations of the change +#' points. Must be conformable to \code{integer} values. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @return Logical indicator of the check passing \code{TRUE} or failing +#' \code{FALSE}. +#' +#' @examples +#' data(rodents) +#' dtt <- rodents$document_term_table +#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) +#' dct <- rodents$document_covariate_table +#' dct$gamma <- lda[[1]]@gamma +#' verify_changepoint_locations(dct, changepoints = 100, +#' timename = "newmoon") +#' +#' @export +#' +verify_changepoint_locations <- function(data, changepoints = NULL, + timename = "time"){ + + if (is.null(changepoints)){ + return(TRUE) + } + + first_time <- min(data[ , timename]) + last_time <- max(data[ , timename]) + time_check <- any(changepoints <= first_time | changepoints >= last_time) + sort_check <- is.unsorted(changepoints, strictly = TRUE) + + !(time_check | sort_check) +} diff --git a/R/TS_on_LDA.R b/R/TS_on_LDA.R index a8a76d61..68f1be68 100644 --- a/R/TS_on_LDA.R +++ b/R/TS_on_LDA.R @@ -32,7 +32,7 @@ prep_TS_data <- function(document_covariate_table, LDA_models, mods, i = 1){ data_i } -select_TS <- function(TS_models, control = list()){ +select_TSx <- function(TS_models, control = list()){ if (!("TS_on_LDA" %in% class(TS_models))){ stop("TS_models must be of class TS_on_LDA") } diff --git a/R/ilr_TS.R b/R/ilr_TS.R new file mode 100644 index 00000000..43c755bd --- /dev/null +++ b/R/ilr_TS.R @@ -0,0 +1,65 @@ +ilr_TS <- function(data, formula, changepoints = NULL, + timename = "time", weights = NULL, + control = list()){ + + if (!verify_changepoint_locations(data, changepoints, timename)){ + out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) + class(out) <- c("ilr_TS_fit", "list") + return(out) + } + + TS_chunk_memo <- memoise_fun(ilr_TS_chunk, control$memoise) + + chunks <- prep_chunks(data, changepoints, timename) + nchunks <- nrow(chunks) + fits <- vector("list", length = nchunks) + for (i in 1:nchunks){ + fits[[i]] <- TS_chunk_memo(data, formula, chunks[i, ], timename, weights, + control) + } + package_chunk_fits2(chunks, fits) # temporarily2 +} + + +ilr_TS_chunk <- function(data, formula, chunk, timename = "time", + weights = NULL, control = list()){ + formula <- as.formula(format(formula)) + time_obs <- data[ , timename] + chunk_start <- as.numeric(chunk["start"]) + chunk_end <- as.numeric(chunk["end"]) + in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end + ilr_data <- data[ , !grepl("gamma", colnames(data))] + ilr_data$gamma <- ilr(acomp(data$gamma)) + fit <- lm(formula, ilr_data, weights, subset = in_chunk) + fit$timevals <- time_obs[which(in_chunk)] + fit +} + + # temporarily2 + +package_chunk_fits2 <- function(chunks, fits){ + nchunks <- nrow(chunks) + chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") + names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") + ll <- sum(vapply(fits, logLik, 0)) + out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) + class(out) <- c("ilr_TS_fit", "list") + out +} + + +logLik.ilr_TS_fit <- function(object, ...){ + ll <- object$logLik + df <- NA + nobs <- NA + if (object$logLik != -Inf){ + nchunks <- nrow(object$chunks) + dfperchunk <- length(coef(object$"chunk models"[[1]])) + df <- nchunks - 1 + dfperchunk * nchunks + nobs <- 0 + for(i in 1:nchunks){ + nobs <- nobs + sum(object$"chunk models"[[i]]$weights) + } + } + structure(ll, df = df, nobs = nobs, class = "logLik") +} \ No newline at end of file diff --git a/R/multinom_TS.R b/R/multinom_TS.R index a89761de..9cb58626 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -111,30 +111,6 @@ check_multinom_TS_inputs <- function(data, formula = gamma~1, check_control(control) } -#' @title Check that a set of change point locations is proper -#' -#' @description Check that the change point locations are \code{numeric} -#' and conformable to \code{interger} values. -#' -#' @param changepoints Change point locations to evaluate. -#' -#' @return An error message is thrown if \code{changepoints} are not proper, -#' else \code{NULL}. -#' -#' @examples -#' check_changepoints(100) -#' -#' @export -#' -check_changepoints <- function(changepoints = NULL){ - if (is.null(changepoints)){ - return() - } - if (!is.numeric(changepoints) || any(changepoints %% 1 != 0)){ - stop("changepoints must be integer-valued") - } -} - #' @title Log likelihood of a multinomial TS model #' #' @description Convenience function to simply extract the \code{logLik} @@ -233,93 +209,8 @@ package_chunk_fits <- function(chunks, fits){ out } -#' @title Prepare the time chunk table for a multinomial change point -#' Time Series model -#' -#' @description Creates the table containing the start and end times for each -#' chunk within a time series, based on the change points (used to break up -#' the time series) and the range of the time series. If there are no -#' change points (i.e. \code{changepoints} is \code{NULL}, there is still a -#' single chunk defined by the start and end of the time series. -#' -#' @param data Class \code{data.frame} object including the predictor and -#' response variables, but specifically here containing the column indicated -#' by the \code{timename} input. -#' -#' @param changepoints Numeric vector indicating locations of the change -#' points. Must be conformable to \code{integer} values. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @return \code{data.frame} of \code{start} and \code{end} times (columns) -#' for each chunk (rows). -#' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' chunks <- prep_chunks(dct, changepoints = 100, timename = "newmoon") -#' -#' @export -#' -prep_chunks <- function(data, changepoints = NULL, - timename = "time"){ - start <- c(min(data[ , timename]), changepoints + 1) - end <- c(changepoints, max(data[ , timename])) - data.frame(start, end) -} - -#' @title Verify the change points of a multinomial time series model -#' -#' @description Verify that a time series can be broken into a set -#' of chunks based on input change points. -#' -#' @param data Class \code{data.frame} object including the predictor and -#' response variables. -#' -#' @param changepoints Numeric vector indicating locations of the change -#' points. Must be conformable to \code{integer} values. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @return Logical indicator of the check passing \code{TRUE} or failing -#' \code{FALSE}. -#' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' verify_changepoint_locations(dct, changepoints = 100, -#' timename = "newmoon") -#' -#' @export -#' -verify_changepoint_locations <- function(data, changepoints = NULL, - timename = "time"){ - if (is.null(changepoints)){ - return(TRUE) - } - - first_time <- min(data[ , timename]) - last_time <- max(data[ , timename]) - time_check <- any(changepoints <= first_time | changepoints >= last_time) - sort_check <- is.unsorted(changepoints, strictly = TRUE) - !(time_check | sort_check) -} #' @title Fit a multinomial Time Series model chunk #' diff --git a/R/utilities.R b/R/utilities.R index 1e0ac1e9..6ebddac6 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -369,10 +369,10 @@ memoise_fun <- function(fun, memoise_tf = TRUE){ if (!("function" %in% class(fun))){ stop("fun is not a function") } - if (!("logical" %in% class(memoise_tf))){ + if (!(is.null(memoise_tf) || "logical" %in% class(memoise_tf))){ stop("memoise_tf is not logical") } - if (memoise_tf){ + if (!is.null(memoise_tf) && memoise_tf){ fun <- memoise(fun) } fun diff --git a/est.R b/est.R deleted file mode 100644 index 69710620..00000000 --- a/est.R +++ /dev/null @@ -1,34 +0,0 @@ - -package_TSx <- function(data, formula, timename, weights, control, rho_dist, - eta_dist){ - - if (is.null(nchangepoints)){ - nchangepoints <- 0 - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - mod <- mod[[1]][[1]] - lls <- as.numeric(logLik(mod)) - rhos <- NULL - } else{ - lls <- rho_dist$lls[1, ] - rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) - } - - - - logLik <- mean(lls) - ncoefs <- ncol(eta_dist) - nparams <- nchangepoints + ncoefs - AIC <- -2 * logLik + 2 * nparams - - out <- list(lls = lls, rhos = rhos, - etas = eta_dist, ptMCMC_diagnostics = ptMCMC_diagnostics, - rho_summary = rho_summary, rho_vcov = rho_vcov, - eta_summary = eta_summary, eta_vcov = eta_vcov, - logLik = logLik, nparams = nparams, AIC = AIC) - - - - - -} diff --git a/hold.R b/hold.R index 35a8f39d..0327a041 100644 --- a/hold.R +++ b/hold.R @@ -3,6 +3,10 @@ # in the midst of the TS classic ldats...looks like starting to work, need # to double back through tho +# get memo into a better location + +# lots of tidying to do! + devtools::load_all() data(rodents) diff --git a/notes.R b/notes.R index 18af4b57..a0d57499 100644 --- a/notes.R +++ b/notes.R @@ -1,6 +1,21 @@ -time_order_data ... hmmmmm +to do + +ldats classic method/ptmcmc + a. tidy up function naming and calling + b. documentation + c. cut old script + d. make sure memoization is located properly +multinom_TS/ilr_TS/others + a. generalize functions more + b. drop special classes + c. documentation + + + +time_order_data ... hmmmmm +its not really right to use gamma as a name for ilr standardized output from LDA functions s3 object with params (however they're provided, collated into a list) From 26945425e3efa78248363c375745d286ca78a65b Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 19 Mar 2020 23:18:44 -0700 Subject: [PATCH 17/43] much work lots of docs --- NAMESPACE | 41 +- R/TS_fit.R | 62 ++ R/ilr_TS.R | 109 +- R/ldats_classic_method.R | 499 ++++++++-- R/multinom_TS.R | 225 +---- R/ptMCMC.R | 935 ------------------ man/check_changepoints.Rd | 2 +- man/{count_tripsx.Rd => count_trips.Rd} | 26 +- man/diagnose_ptMCMCx.Rd | 66 -- man/ilr_TS.Rd | 76 ++ man/ldats_classic.Rd | 22 + man/logLik.TS_fit.Rd | 23 + man/logLik.multinom_TS_fit.Rd | 37 - man/multinom_TS.Rd | 53 +- man/multinom_TS_chunk.Rd | 67 -- man/package_chunk_fits.Rd | 33 +- man/prep_chunks.Rd | 2 +- man/prep_cpts.Rd | 35 + man/prep_cptsx.Rd | 95 -- man/prep_ids.Rd | 36 + man/prep_idsx.Rd | 58 -- ...roposal_distx.Rd => prep_proposal_dist.Rd} | 23 +- man/prep_ptMCMC_inputs.Rd | 28 + man/prep_ptMCMC_inputsx.Rd | 77 -- man/prep_saves.Rd | 46 + man/prep_savesx.Rd | 72 -- ...emp_sequencex.Rd => prep_temp_sequence.Rd} | 16 +- man/proposed_step_mods.Rd | 26 + man/proposed_step_modsx.Rd | 55 -- man/{step_chainsx.Rd => step_chains.Rd} | 48 +- man/{swap_chainsx.Rd => swap_chains.Rd} | 33 +- man/verify_changepoint_locations.Rd | 2 +- 32 files changed, 967 insertions(+), 1961 deletions(-) create mode 100644 R/TS_fit.R delete mode 100644 R/ptMCMC.R rename man/{count_tripsx.Rd => count_trips.Rd} (63%) delete mode 100644 man/diagnose_ptMCMCx.Rd create mode 100644 man/ilr_TS.Rd create mode 100644 man/ldats_classic.Rd create mode 100644 man/logLik.TS_fit.Rd delete mode 100644 man/logLik.multinom_TS_fit.Rd delete mode 100644 man/multinom_TS_chunk.Rd create mode 100644 man/prep_cpts.Rd delete mode 100644 man/prep_cptsx.Rd create mode 100644 man/prep_ids.Rd delete mode 100644 man/prep_idsx.Rd rename man/{prep_proposal_distx.Rd => prep_proposal_dist.Rd} (57%) create mode 100644 man/prep_ptMCMC_inputs.Rd delete mode 100644 man/prep_ptMCMC_inputsx.Rd create mode 100644 man/prep_saves.Rd delete mode 100644 man/prep_savesx.Rd rename man/{prep_temp_sequencex.Rd => prep_temp_sequence.Rd} (66%) create mode 100644 man/proposed_step_mods.Rd delete mode 100644 man/proposed_step_modsx.Rd rename man/{step_chainsx.Rd => step_chains.Rd} (69%) rename man/{swap_chainsx.Rd => swap_chains.Rd} (69%) diff --git a/NAMESPACE b/NAMESPACE index f7822b72..7c509d47 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,6 +1,6 @@ # Generated by roxygen2: do not edit by hand -S3method(logLik,multinom_TS_fit) +S3method(logLik,TS_fit) S3method(plot,LDA_TS) S3method(plot,LDA_VEM) S3method(plot,LDA_set) @@ -14,16 +14,17 @@ export(autocorr_plot) export(check_changepoints) export(check_control) export(check_document_term_table) -export(check_multinom_TS_inputs) export(check_nreps) export(check_topics) -export(count_tripsx) -export(diagnose_ptMCMCx) +export(count_trips) export(document_weights) export(ecdf_plot) export(eta_diagnostics_plots) -export(eval_stepx) +export(eval_step) export(iftrue) +export(ilr_TS) +export(ilr_TS_chunk) +export(ldats_classic) export(list_depth) export(logsumexp) export(memoise_fun) @@ -37,15 +38,15 @@ export(package_chunk_fits) export(posterior_plot) export(pred_gamma_TS_plot) export(prep_chunks) -export(prep_cptsx) -export(prep_idsx) -export(prep_proposal_distx) -export(prep_ptMCMC_inputsx) -export(prep_savesx) -export(prep_temp_sequencex) -export(process_savesx) -export(propose_stepx) -export(proposed_step_modsx) +export(prep_cpts) +export(prep_ids) +export(prep_proposal_dist) +export(prep_ptMCMC_inputs) +export(prep_saves) +export(prep_temp_sequence) +export(process_saves) +export(propose_step) +export(proposed_step_mods) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) @@ -58,14 +59,14 @@ export(sim_LDA_TS_data) export(sim_LDA_data) export(sim_TS_data) export(softmax) -export(step_chainsx) -export(swap_chainsx) -export(take_stepx) +export(step_chains) +export(swap_chains) +export(take_step) export(trace_plot) -export(update_cptsx) -export(update_idsx) +export(update_cpts) +export(update_ids) export(update_list) -export(update_savesx) +export(update_saves) export(verify_changepoint_locations) importFrom(coda,HPDinterval) importFrom(coda,as.mcmc) diff --git a/R/TS_fit.R b/R/TS_fit.R new file mode 100644 index 00000000..226ef9e7 --- /dev/null +++ b/R/TS_fit.R @@ -0,0 +1,62 @@ +#' @title Package the output of the chunk-level TS models into a TS_fit list +#' +#' @description Takes the list of fitted chunk-level models returned from +#' a \code{_TS_chunk} function and packages it as a +#' \code{TS_fit} object. This involves naming the model fits based +#' on the chunk time windows, combining the log likelihood values across the +#' chunks, and setting the class of the output object. +#' +#' @param chunks Data frame of \code{start} and \code{end} times for each +#' chunk (row). +#' +#' @param fits List of chunk-level fits returned by \code{TS_chunk_memo}, +#' the memoised version of \code{\link{multinom_TS_chunk}}. +#' +#' @return Object of class \code{TS_fit}, which is a list of [1] +#' chunk-level model fits, [2] the total log likelihood combined across +#' all chunks, and [3] the chunk time data table. +#' +#' @export +#' +#' +package_chunk_fits <- function(chunks, fits){ + nchunks <- nrow(chunks) + chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") + names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") + ll <- sum(vapply(fits, logLik, 0)) + out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) + class(out) <- c("TS_fit", "list") + out +} + +#' @title Log likelihood of a TS model (as a TS_fit-class list) +#' +#' @description Convenience function to simply extract the \code{logLik} +#' element (and \code{df} and \code{nobs}) from a \code{TS_fit} +#' object fit by a \code{_TS} function. +#' +#' @param object A \code{TS_fit}-class object. +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return Log likelihood of the model, as class \code{logLik}, with +#' attributes \code{df} (degrees of freedom) and \code{nobs} (the number of +#' weighted observations, accounting for size differences among documents). +#' +#' @export +#' +logLik.TS_fit <- function(object, ...){ + ll <- object$logLik + df <- NA + nobs <- NA + if (object$logLik != -Inf){ + nchunks <- nrow(object$chunks) + dfperchunk <- length(coef(object$"chunk models"[[1]])) + df <- nchunks - 1 + dfperchunk * nchunks + nobs <- 0 + for(i in 1:nchunks){ + nobs <- nobs + sum(object$"chunk models"[[i]]$weights) + } + } + structure(ll, df = df, nobs = nobs, class = "logLik") +} diff --git a/R/ilr_TS.R b/R/ilr_TS.R index 43c755bd..93fafbb4 100644 --- a/R/ilr_TS.R +++ b/R/ilr_TS.R @@ -1,26 +1,93 @@ +#' @title Fit a simplex-based change point Time Series model using isometric +#' log ratio +#' +#' @description +#' \code{ilr_TS} fits a set of simplex regression models to a time series +#' of compositional data divided into multiple segments (a.k.a. chunks) +#' based on given locations for a set of change points, using +#' the isometric log ratio (ILR) transformation. \cr \cr +#' \code{ilr_TS_chunk} fits a simplex regression model using the ILR +#' transformation to a defined chunk of time (a.k.a. segment) +#' \code{[chunk$start, chunk$end]} within a time series. +#' +#' @param data \code{data.frame} including [1] the time variable (indicated +#' in \code{timename}), [2] the predictor variables (required by +#' \code{formula}) and [3], the compositional response variable (indicated +#' in \code{formula}). \cr \cr +#' Note that the response variables should be formatted as a +#' \code{data.frame} object named as indicated by the +#' \code{response} entry in the \code{control} list, such as \code{gamma} +#' for a standard TS analysis on LDA output. \cr \cr +#' See \code{Examples}. +#' +#' @param formula \code{\link[stats]{formula}} defining the regression between +#' relationship the change points. Any +#' predictor variable included must also be a column in +#' \code{data} and any (compositional) response variable must be a set of +#' columns in \code{data}. +#' +#' @param changepoints Numeric vector indicating locations of the change +#' points. Must be conformable to \code{integer} values. +#' +#' @param chunk Length-2 vector of times: [1] \code{start}, the start time +#' for the chunk and [2] \code{end}, the end time for the chunk. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @param weights Optional class \code{numeric} vector of weights for each +#' document. Defaults to \code{NULL}, translating to an equal weight for +#' each document. When using \code{ilr_TS} in a standard LDATS +#' analysis, it is advisable to weight the documents by their total size, +#' as the result of \code{\link{topicmodels_LDA}} is a matrix of +#' proportions, which does not account for size differences among documents. +#' For most models, a scaling of the weights (so that the average is 1) is +#' most appropriate, and this is accomplished using +#' \code{\link{document_weights}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @return \code{ilr_TS}: Object of class \code{ilr_TS_fit}, +#' which is a list of [1] +#' chunk-level model fits (\code{"chunk models"}), [2] the total log +#' likelihood combined across all chunks (\code{"logLik"}), and [3] a +#' \code{data.frame} of chunk beginning and ending times (\code{"logLik"} +#' with columns \code{"start"} and \code{"end"}). \cr \cr +#' \code{ilr_TS_chunk}: fitted model object for the chunk, +#' of class \code{lm}. +#' +#' @export +#' + ilr_TS <- function(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()){ if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) - class(out) <- c("ilr_TS_fit", "list") return(out) } - TS_chunk_memo <- memoise_fun(ilr_TS_chunk, control$memoise) - chunks <- prep_chunks(data, changepoints, timename) nchunks <- nrow(chunks) fits <- vector("list", length = nchunks) for (i in 1:nchunks){ - fits[[i]] <- TS_chunk_memo(data, formula, chunks[i, ], timename, weights, - control) + fits[[i]] <- ilr_TS_chunk(data = data, formula = formula, + chunk = chunks[i, ], timename = timename, + weights = weights, control = control) } - package_chunk_fits2(chunks, fits) # temporarily2 + package_chunk_fits(chunks, fits) } - +#' @rdname ilr_TS +#' +#' @export +#' ilr_TS_chunk <- function(data, formula, chunk, timename = "time", weights = NULL, control = list()){ formula <- as.formula(format(formula)) @@ -35,31 +102,3 @@ ilr_TS_chunk <- function(data, formula, chunk, timename = "time", fit } - # temporarily2 - -package_chunk_fits2 <- function(chunks, fits){ - nchunks <- nrow(chunks) - chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") - names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") - ll <- sum(vapply(fits, logLik, 0)) - out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) - class(out) <- c("ilr_TS_fit", "list") - out -} - - -logLik.ilr_TS_fit <- function(object, ...){ - ll <- object$logLik - df <- NA - nobs <- NA - if (object$logLik != -Inf){ - nchunks <- nrow(object$chunks) - dfperchunk <- length(coef(object$"chunk models"[[1]])) - df <- nchunks - 1 + dfperchunk * nchunks - nobs <- 0 - for(i in 1:nchunks){ - nobs <- nobs + sum(object$"chunk models"[[i]]$weights) - } - } - structure(ll, df = df, nobs = nobs, class = "logLik") -} \ No newline at end of file diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index 8d6d3551..4d1523d8 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -1,4 +1,18 @@ - +#' @title Estimate changepoints using the LDATS classic ptMCMC method +#' +#' @description Uses the LDATS classic ptMCMC method to fit a changepoint +#' model. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Values not input assume defaults set by \code{\link{TS_control}}. +#' +#' @return \code{list} of changepoint locations, log likelihoods, and model +#' diagnostics. +#' +#' @export +#' ldats_classic <- function(TS, control = list()){ saves <- prep_saves(TS = TS, control = control) @@ -22,37 +36,35 @@ ldats_classic <- function(TS, control = list()){ } -process_saves <- function(saves, control = list()){ - nit <- control$nit - iters <- 1:nit - if (control$burnin > 0){ - iters <- iters[-(1:control$burnin)] - } - niters <- length(iters) - thin_interval <- ceiling(1/control$thin_frac) - iters_thinned <- seq(1, niters, by = thin_interval) - dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) - - trips <- count_trips(saves$ids) - diagnostics <- list(step_acceptance_rate = rowMeans(saves$step_accepts), - swap_acceptance_rate = rowMeans(saves$swap_accepts), - trip_counts = trips$trip_counts, - trip_rates = trips$trip_rates) - - - saves$cpts <- array(saves$cpts[ , , iters_thinned], dim = dims) - saves$lls <- saves$lls[, iters_thinned] - saves$ids <- saves$ids[, iters_thinned] - saves$step_accepts <- saves$step_accepts[ , iters_thinned] - saves$swap_accepts <- saves$swap_accepts[ , iters_thinned] - - saves$diagnostics <- diagnostics - - - saves -} - - +#' @title Count trips of the ptMCMC particles in a classic_ldats estimation +#' +#' @description Count the full trips (from one extreme temperature chain to +#' the other and back again; Katzgraber \emph{et al.} 2006) for each of the +#' ptMCMC particles, as identified by their id on initialization. +#' \cr \cr +#' This function was designed to work within \code{\link{TS}} and process +#' the output of \code{\link{est_changepoints}} as a component of +#' \code{\link{diagnose_ptMCMC}}, but has been generalized +#' and would work with any output from a ptMCMC as long as \code{ids} +#' is formatted properly. +#' +#' @param ids \code{matrix} of identifiers of the particles in each chain for +#' each iteration of the ptMCMC algorithm (rows: chains, +#' columns: iterations). +#' +#' @return \code{list} of [1] \code{vector} of within particle trip counts +#' (\code{$trip_counts}), and [2] \code{vector} of within-particle average +#' trip rates (\code{$trip_rates}). +#' +#' @references +#' Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. +#' Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of +#' Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 +#' \href{https://bit.ly/2LICGXh}{link}. +#' +#' +#' @export +#' count_trips <- function(ids){ nit <- ncol(ids) ntemps <- nrow(ids) @@ -83,22 +95,59 @@ count_trips <- function(ids){ -update_saves <- function(i, saves, steps, swaps){ - saves$cpts[ , , i] <- swaps$changepts - saves$lls[ , i] <- swaps$lls - saves$ids[ , i] <- swaps$ids - saves$step_accepts[ , i] <- steps$accept_step - saves$swap_accepts[ , i] <- swaps$accept_swap - saves -} -update_cpts <- function(cpts, swaps){ - list(changepts = swaps$changepts, lls = swaps$lls) -} -update_ids <- function(ids, swaps){ - swaps$ids -} +#' @title Conduct a set of among-chain swaps for the ptMCMC algorithm +#' +#' @description This function handles the among-chain swapping based on +#' temperatures and likelihood differentials. +#' \cr \cr +#' This function was designed to work within \code{\link{TS}} and +#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do +#' so, but has the capacity to be generalized to work with any estimation +#' via ptMCMC with additional coding work. +#' +#' @details The ptMCMC algorithm couples the chains (which are +#' taking their own walks on the distribution surface) through "swaps", +#' where neighboring chains exchange configurations (Geyer 1991, Falcioni +#' and Deem 1999) following the Metropolis criterion (Metropolis +#' \emph{et al.} 1953). This allows them to share information and search the +#' surface in combination (Earl and Deem 2005). +#' +#' @param chainsin Chain configuration to be evaluated for swapping. +#' +#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs +#' for use within the ptMCMC algorithm. +#' +#' @param ids The vector of integer chain ids. +#' +#' @return \code{list} of updated change points, log-likelihoods, and chain +#' ids, as well as a vector of acceptance indicators for each swap. +#' +#' @references +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://rsc.li/2XkxPCm}{link}. +#' +#' Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for +#' zeolite structure solution. \emph{Journal of Chemical Physics} +#' \strong{110}: 1754-1766. +#' \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. +#' +#' Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In +#' Computing Science and Statistics: Proceedings of the 23rd Symposium on +#' the Interface}. pp 156-163. American Statistical Association, New York, +#' USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. +#' +#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. +#' Teller. 1953. Equations of state calculations by fast computing machines. +#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. +#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. +#' +#' +#' @export +#' swap_chains <- function(chainsin, inputs, ids){ temps <- inputs$temps itemps <- 1/temps @@ -131,7 +180,32 @@ swap_chains <- function(chainsin, inputs, ids){ } - +#' @title Initialize and update the change point matrix used in the LDATS +#' classic ptMCMC algorithm +#' +#' @description Each of the chains is initialized by \code{prep_cpts} using a +#' draw from the available times (i.e. assuming a uniform prior), the best +#' fit (by likelihood) draw is put in the focal chain with each subsequently +#' worse fit placed into the subsequently hotter chain. \code{update_cpts} +#' updates the change points after every iteration in the ptMCMC algorithm. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @param cpts The existing matrix of change points. +#' +#' @param swaps Chain configuration after among-temperature swaps. +#' +#' @return \code{list} of [1] \code{matrix} of change points (rows) for +#' each temperature (columns) and [2] \code{vector} of log-likelihood +#' values for each of the chains. +#' +#' +#' @export +#' prep_cpts <- function(TS, control = list()){ data <- TS$data$train$ts_data @@ -165,6 +239,39 @@ prep_cpts <- function(TS, control = list()){ } +#' @rdname prep_cpts +#' +#' @export +#' +update_cpts <- function(cpts, swaps){ + list(changepts = swaps$changepts, lls = swaps$lls) +} + +#' @title Prepare the ptMCMC temperature sequence for the LDATS classic +#' method +#' +#' @description Create the series of temperatures used in the ptMCMC +#' algorithm. +#' \cr \cr +#' This function was designed to work within \code{\link{TS}} and +#' \code{\link{est_changepoints}} specifically, but has been generalized +#' and would work with any ptMCMC model as long as \code{control} +#' includes the relevant control parameters (and provided that the +#' \code{\link{check_control}} function and its use here are generalized). +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @param TS \code{list} time series model object. +#' +#' @return \code{vector} of temperatures. +#' +#' @examples +#' prep_temp_sequence() +#' +#' @export +#' prep_temp_sequence <- function(TS, control = list()){ ntemps <- control$ntemps penultimate_temp <- control$penultimate_temp @@ -176,6 +283,40 @@ prep_temp_sequence <- function(TS, control = list()){ } +#' @title Prepare and update the data structures to save the LDATS classic +#' ptMCMC output +#' +#' @description \code{prep_saves} creates the data structure used to save the +#' output from each iteration of the ptMCMC algorithm, which is added via +#' \code{update_saves}. Once the ptMCMC is complete, the saved data objects +#' are then processed (burn-in iterations are dropped and the remaining +#' iterations are thinned) via \code{process_saves}. +#' \cr \cr +#' This set of functions was designed to work within \code{\link{TS}} and +#' specifically \code{\link{est_changepoints}}. They are still hardcoded to +#' do so, but have the capacity to be generalized to work with any +#' estimation via ptMCMC with additional coding work. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. +#' +#' @param i \code{integer} iteration index. +#' +#' @param saves The existing list of saved data objects. +#' +#' @param steps Chain configuration after within-temperature steps. +#' +#' @param swaps Chain configuration after among-temperature swaps. +#' +#' @return \code{list} of ptMCMC objects: change points (\code{$cpts}), +#' log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances +#' (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). +#' +#' +#' @export +#' prep_saves <- function(TS, control = list()){ nchangepoints <- TS$nchangepoints ntemps <- control$ntemps @@ -189,24 +330,115 @@ prep_saves <- function(TS, control = list()){ swap_accepts = swap_accepts) } +#' @rdname prep_saves +#' +#' @export +#' +update_saves <- function(i, saves, steps, swaps){ + saves$cpts[ , , i] <- swaps$changepts + saves$lls[ , i] <- swaps$lls + saves$ids[ , i] <- swaps$ids + saves$step_accepts[ , i] <- steps$accept_step + saves$swap_accepts[ , i] <- swaps$accept_swap + saves +} + +#' @rdname prep_saves +#' +#' @export +#' +process_saves <- function(saves, control = list()){ + nit <- control$nit + iters <- 1:nit + if (control$burnin > 0){ + iters <- iters[-(1:control$burnin)] + } + niters <- length(iters) + thin_interval <- ceiling(1/control$thin_frac) + iters_thinned <- seq(1, niters, by = thin_interval) + dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) + + trips <- count_trips(saves$ids) + diagnostics <- list(step_acceptance_rate = rowMeans(saves$step_accepts), + swap_acceptance_rate = rowMeans(saves$swap_accepts), + trip_counts = trips$trip_counts, + trip_rates = trips$trip_rates) + saves$cpts <- array(saves$cpts[ , , iters_thinned], dim = dims) + saves$lls <- saves$lls[, iters_thinned] + saves$ids <- saves$ids[, iters_thinned] + saves$step_accepts <- saves$step_accepts[ , iters_thinned] + saves$swap_accepts <- saves$swap_accepts[ , iters_thinned] + + saves$diagnostics <- diagnostics + + + saves +} + +#' @title Prepare the inputs for the ptMCMC algorithm estimation of +#' change points +#' +#' @description Package the static inputs (controls and data structures) used +#' by the ptMCMC algorithm in the context of estimating change points. +#' \cr \cr +#' This function was designed to work within \code{\link{TS}} and +#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do +#' so, but has the capacity to be generalized to work with any estimation +#' via ptMCMC with additional coding work. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. +#' +#' @return \code{list} containing the static +#' inputs for use within the ptMCMC algorithm for estimating change points. +#' +#' @export +#' prep_ptMCMC_inputs <- function(TS, control = list()){ - - out <- list(control = control, + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$memoise) + list(control = control, temps = prep_temp_sequence(TS = TS, control = control), pdist = prep_proposal_dist(TS = TS, control = control), formula = TS$formula, weights = TS$weights, data = TS$data$train$ts_data, response = TS$response, - timename = TS$timename) - class(out) <- c("ptMCMC_inputs", "list") - out + timename = TS$timename, + fun = fun) } +#' @title Pre-calculate the change point proposal distribution for the ptMCMC +#' algorithm +#' +#' @description Calculate the proposal distribution in advance of actually +#' running the ptMCMC algorithm in order to decrease computation time. +#' The proposal distribution is a joint of three distributions: +#' [1] a multinomial distribution selecting among the change points within +#' the chain, [2] a binomial distribution selecting the direction of the +#' step of the change point (earlier or later in the time series), and +#' [3] a geometric distribution selecting the magnitude of the step. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model Relevant here is +#' \code{magnitude}, which controls the magnitude of the step size (is the +#' average of the geometric distribution). +#' +#' @return \code{list} of two \code{matrix} elements: [1] the size of the +#' proposed step for each iteration of each chain and [2] the identity of +#' the change point location to be shifted by the step for each iteration of +#' each chain. +#' +#' @export +#' prep_proposal_dist <- function(TS, control = list()){ nchangepoints <- TS$nchangepoints ntemps <- control$ntemps @@ -225,6 +457,33 @@ prep_proposal_dist <- function(TS, control = list()){ list(steps = steps, which_steps = which_steps) } + +#' @title Initialize and update the chain ids throughout the LDATS classic +#' ptMCMC algorithm +#' +#' @description \code{prep_ids} creates and \code{update_ids} updates +#' the active vector of identities (ids) for each of the chains in the +#' ptMCMC algorithm. These ids are used to track trips of the particles +#' among chains. +#' \cr \cr +#' These functions were designed to work within \code{\link{TS}} and +#' specifically \code{\link{est_changepoints}}, but have been generalized +#' and would work within any general ptMCMC as long as \code{control}, +#' \code{ids}, and \code{swaps} are formatted properly. +#' +#' @param TS \code{list} time series model object. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Values not input assume defaults set by \code{\link{TS_control}}. +#' +#' @param ids The existing vector of chain ids. +#' +#' @param swaps Chain configuration after among-temperature swaps. +#' +#' @return The vector of chain ids. +#' +#' @export +#' prep_ids <- function(TS, control = list()){ if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ stop("ntemps must be integer-valued") @@ -233,6 +492,74 @@ prep_ids <- function(TS, control = list()){ } +#' @rdname prep_ids +#' +#' @export +#' +update_ids <- function(ids, swaps){ + swaps$ids +} + +#' @title Conduct a within-chain step of the ptMCMC algorithm +#' +#' @description This set of functions steps the chains forward one iteration +#' of the within-chain component of the ptMCMC algorithm. \code{step_chains} +#' is the main function, comprised of a proposal (made by \code{prop_step}), +#' an evaluation of that proposal (made by \code{eval_step}), and then an +#' update of the configuration (made by \code{take_step}). +#' \cr \cr +#' This set of functions was designed to work within \code{\link{TS}} and +#' specifically \code{\link{est_changepoints}}. They are still hardcoded to +#' do so, but have the capacity to be generalized to work with any +#' estimation via ptMCMC with additional coding work. +#' +#' @details For each iteration of the ptMCMC algorithm, all of the chains +#' have the potential to take a step. The possible step is proposed under +#' a proposal distribution (here for change points we use a symmetric +#' geometric distribution), the proposed step is then evaluated and either +#' accepted or not (following the Metropolis-Hastings rule; Metropolis, +#' \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then +#' accordingly taken or not (the configurations are updated). +#' +#' @param i \code{integer} iteration index. +#' +#' @param cpts \code{matrix} of change point locations across chains. +#' +#' @param inputs Class \code{ptMCMC_inputs} \code{list}, containing the +#' static inputs for use within the ptMCMC algorithm. +#' +#' @param prop_step Proposed step output from \code{propose_step}. +#' +#' @param accept_step \code{logical} indicator of acceptance of each chain's +#' proposed step. +#' +#' @return +#' \code{step_chains}: \code{list} of change points, log-likelihoods, +#' and logical indicators of acceptance for each chain. \cr \cr +#' \code{propose_step}: \code{list} of change points and +#' log-likelihood values for the proposal. \cr \cr +#' \code{eval_step}: \code{logical} vector indicating if each +#' chain's proposal was accepted. \cr \cr +#' \code{take_step}: \code{list} of change points, log-likelihoods, +#' and logical indicators of acceptance for each chain. +#' +#' @references +#' Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. +#' 2018. Evaluation of parallel tempering to accelerate Bayesian parameter +#' estimation in systems biology. +#' \href{https://arxiv.org/abs/1801.09831}{link}. +#' +#' Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains +#' and their applications. \emph{Biometrika} \strong{57}:97-109. +#' \href{https://doi.org/10.2307/2334940}{link}. +#' +#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. +#' Teller. 1953. Equations of state calculations by fast computing machines. +#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. +#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. +#' +#' @export +#' step_chains <- function(TS, i, cpts, inputs){ prop_step <- propose_step(TS = TS, i = i, cpts = cpts, inputs = inputs) accept_step <- eval_step(i = i, cpts = cpts, prop_step = prop_step, @@ -240,7 +567,10 @@ step_chains <- function(TS, i, cpts, inputs){ take_step(cpts = cpts, prop_step = prop_step, accept_step = accept_step) } - +#' @rdname step_chains +#' +#' @export +#' propose_step <- function(TS, i, cpts, inputs){ pdist <- inputs$pdist @@ -260,6 +590,48 @@ propose_step <- function(TS, i, cpts, inputs){ } +#' @rdname step_chains +#' +#' @export +#' +eval_step <- function(i, cpts, prop_step, inputs){ + temps <- inputs$temps + ntemps <- length(temps) + itemps <- 1 / temps + runif(ntemps) < exp((prop_step$lls - cpts$lls) * itemps) +} + +#' @rdname step_chains +#' +#' @export +#' +take_step <- function(cpts, prop_step, accept_step){ + changepts <- cpts$changepts + lls <- cpts$lls + changepts[ , accept_step] <- prop_step$changepts[ , accept_step] + lls[accept_step] <- prop_step$lls[accept_step] + list(changepts = changepts, lls = lls, accept_step = accept_step) +} + +#' @title Fit the chunk-level models to a time series, given a set of +#' proposed change points within the ptMCMC algorithm +#' +#' @description This function wraps around \code{TS_memo} +#' (optionally memoised \code{\link{multinom_TS}}) to provide a +#' simpler interface within the ptMCMC algorithm and is implemented within +#' \code{\link{propose_step}}. +#' +#' @param prop_changepts \code{matrix} of proposed change points across +#' chains. +#' +#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs +#' for use within the ptMCMC algorithm. +#' +#' @return List of models associated with the proposed step, with an element +#' for each chain. +#' +#' @export +#' proposed_step_mods <- function(TS, prop_changepts, inputs){ data <- inputs$data @@ -272,8 +644,7 @@ proposed_step_mods <- function(TS, prop_changepts, inputs){ out <- vector("list", length = ntemps) for (i in 1:ntemps){ - fun <- eval(parse(text = paste0(TS$response, "_TS"))) - fun <- memoise_fun(fun, control$memoise) + fun <- inputs$fun args <- list(data = data, formula = TS$formula, changepoints = prop_changepts[ , i], timename = TS$timename, weights = TS$weights, @@ -285,21 +656,3 @@ proposed_step_mods <- function(TS, prop_changepts, inputs){ -eval_step <- function(i, cpts, prop_step, inputs){ - temps <- inputs$temps - ntemps <- length(temps) - itemps <- 1 / temps - runif(ntemps) < exp((prop_step$lls - cpts$lls) * itemps) -} - - -take_step <- function(cpts, prop_step, accept_step){ - changepts <- cpts$changepts - lls <- cpts$lls - changepts[ , accept_step] <- prop_step$changepts[ , accept_step] - lls[accept_step] <- prop_step$lls[accept_step] - list(changepts = changepts, lls = lls, accept_step = accept_step) -} - - - diff --git a/R/multinom_TS.R b/R/multinom_TS.R index 9cb58626..cb5876bf 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -1,31 +1,36 @@ #' @title Fit a multinomial change point Time Series model #' -#' @description Fit a set of multinomial regression models (via +#' @description +#' \code{multinom_TS} fits a set of multinomial regression models (via #' \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time series #' of data divided into multiple segments (a.k.a. chunks) based on given #' locations for a set of change points. \cr \cr -#' \code{check_multinom_TS_inputs} checks that the inputs to -#' \code{multinom_TS} are of proper classes for an analysis. +#' \code{multinom_TS_chunk} fits a multinomial regression model (via +#' \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) +#' to a defined chunk of time (a.k.a. segment) +#' \code{[chunk$start, chunk$end]} within a time series. #' #' @param data \code{data.frame} including [1] the time variable (indicated #' in \code{timename}), [2] the predictor variables (required by #' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the +#' \code{formula}). \cr \cr +#' Note that the response variables should be formatted as a +#' \code{data.frame} object named as indicated by the #' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. See \code{Examples}. +#' for a standard TS analysis on LDA output. \cr \cr +#' See \code{Examples}. #' #' @param formula \code{\link[stats]{formula}} defining the regression between #' relationship the change points. Any #' predictor variable included must also be a column in #' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. +#' columns in \code{data}. #' #' @param changepoints Numeric vector indicating locations of the change -#' points. Must be conformable to \code{integer} values. Validity -#' checked by \code{\link{check_changepoints}} and -#' \code{\link{verify_changepoint_locations}}. +#' points. Must be conformable to \code{integer} values. +#' +#' @param chunk Length-2 vector of times: [1] \code{start}, the start time +#' for the chunk and [2] \code{end}, the end time for the chunk. #' #' @param timename \code{character} element indicating the time variable #' used in the time series. Defaults to \code{"time"}. The variable must be @@ -35,9 +40,9 @@ #' #' @param weights Optional class \code{numeric} vector of weights for each #' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS +#' each document. When using \code{ilr_TS} in a standard LDATS #' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of +#' as the result of \code{\link{topicmodels_LDA}} is a matrix of #' proportions, which does not account for size differences among documents. #' For most models, a scaling of the weights (so that the average is 1) is #' most appropriate, and this is accomplished using @@ -54,24 +59,13 @@ #' likelihood combined across all chunks (\code{"logLik"}), and [3] a #' \code{data.frame} of chunk beginning and ending times (\code{"logLik"} #' with columns \code{"start"} and \code{"end"}). \cr \cr -#' \code{check_multinom_TS_inputs}: an error message is thrown if any -#' input is improper, otherwise \code{NULL}. +#' \code{multinom_TS_chunk}: fitted model object for the chunk, +#' of classes \code{multinom} and \code{nnet}. #' #' @references #' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied #' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. #' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' weights <- document_weights(dtt) -#' check_multinom_TS_inputs(dct, timename = "newmoon") -#' mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), -#' timename = "newmoon", weights = weights) -#' #' @export #' multinom_TS <- function(data, formula, changepoints = NULL, @@ -80,193 +74,24 @@ multinom_TS <- function(data, formula, changepoints = NULL, if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) - class(out) <- c("multinom_TS_fit", "list") + class(out) <- c("TS_fit", "list") return(out) } - TS_chunk_memo <- memoise_fun(multinom_TS_chunk, control$memoise) - chunks <- prep_chunks(data, changepoints, timename) nchunks <- nrow(chunks) fits <- vector("list", length = nchunks) for (i in 1:nchunks){ - fits[[i]] <- TS_chunk_memo(data, formula, chunks[i, ], timename, weights, - control) + fits[[i]] <- multinom_TS_chunk(data = data, formula = formula, + chunk = chunks[i, ], timename = timename, + weights = weights, control = control) } package_chunk_fits(chunks, fits) } -#' @rdname multinom_TS -#' -#' @export -#' -check_multinom_TS_inputs <- function(data, formula = gamma~1, - changepoints = NULL, - timename = "time", weights = NULL, - control = list()){ - check_changepoints(changepoints) - check_weights(weights) - check_formula(data, formula) - check_timename(data, timename) - check_control(control) -} - -#' @title Log likelihood of a multinomial TS model -#' -#' @description Convenience function to simply extract the \code{logLik} -#' element (and \code{df} and \code{nobs}) from a \code{multinom_TS_fit} -#' object fit by \code{\link{multinom_TS}}. Extends -#' \code{\link[stats]{logLik}} from \code{\link[nnet]{multinom}} to -#' \code{multinom_TS_fit} objects. -#' -#' @param object A \code{multinom_TS_fit}-class object. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return Log likelihood of the model, as class \code{logLik}, with -#' attributes \code{df} (degrees of freedom) and \code{nobs} (the number of -#' weighted observations, accounting for size differences among documents). -#' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' weights <- document_weights(dtt) -#' mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), -#' timename = "newmoon", weights = weights) -#' logLik(mts) -#' -#' @export -#' -logLik.multinom_TS_fit <- function(object, ...){ - ll <- object$logLik - df <- NA - nobs <- NA - if (object$logLik != -Inf){ - nchunks <- nrow(object$chunks) - dfperchunk <- length(coef(object$"chunk models"[[1]])) - df <- nchunks - 1 + dfperchunk * nchunks - nobs <- 0 - for(i in 1:nchunks){ - nobs <- nobs + sum(object$"chunk models"[[i]]$weights) - } - } - structure(ll, df = df, nobs = nobs, class = "logLik") -} - -#' @title Package the output of the chunk-level multinomial models into a -#' multinom_TS_fit list -#' -#' @description Takes the list of fitted chunk-level models returned from -#' \code{TS_chunk_memo} (the memoised version of -#' \code{\link{multinom_TS_chunk}} and packages it as a -#' \code{multinom_TS_fit} object. This involves naming the model fits based -#' on the chunk time windows, combining the log likelihood values across the -#' chunks, and setting the class of the output object. -#' -#' @param chunks Data frame of \code{start} and \code{end} times for each -#' chunk (row). -#' -#' @param fits List of chunk-level fits returned by \code{TS_chunk_memo}, -#' the memoised version of \code{\link{multinom_TS_chunk}}. -#' -#' @return Object of class \code{multinom_TS_fit}, which is a list of [1] -#' chunk-level model fits, [2] the total log likelihood combined across -#' all chunks, and [3] the chunk time data table. -#' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' weights <- document_weights(dtt) -#' formula <- gamma ~ 1 -#' changepoints <- c(20,50) -#' timename <- "newmoon" -#' TS_chunk_memo <- memoise_fun(multinom_TS_chunk, TRUE) -#' chunks <- prep_chunks(dct, changepoints, timename) -#' nchunks <- nrow(chunks) -#' fits <- vector("list", length = nchunks) -#' for (i in 1:nchunks){ -#' fits[[i]] <- TS_chunk_memo(dct, formula, chunks[i, ], timename, -#' weights, TS_control()) -#' } -#' package_chunk_fits(chunks, fits) -#' -#' @export -#' -#' -package_chunk_fits <- function(chunks, fits){ - nchunks <- nrow(chunks) - chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") - names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") - ll <- sum(vapply(fits, logLik, 0)) - out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) - class(out) <- c("multinom_TS_fit", "list") - out -} - - -#' @title Fit a multinomial Time Series model chunk -#' -#' @description Fit a multinomial regression model (via -#' \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) -#' to a defined chunk of time (a.k.a. segment) -#' \code{[chunk$start, chunk$end]} within a time series. -#' -#' @param data Class \code{data.frame} object including the predictor and -#' response variables. -#' -#' @param formula Formula as a \code{\link[stats]{formula}} or -#' \code{\link[base]{character}} object describing the chunk. -#' -#' @param chunk Length-2 vector of times: [1] \code{start}, the start time -#' for the chunk and [2] \code{end}, the end time for the chunk. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return Fitted model object for the chunk, of classes \code{multinom} and -#' \code{nnet}. -#' -#' @references -#' Ripley, B. D. 1996. Pattern Recognition and Neural Networks. Cambridge. -#' -#' Venables, W. N. and B. D. Ripley. 2002. Modern Applied Statistics with S. -#' Fourth edition. Springer. -#' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' weights <- document_weights(dtt) -#' chunk <- c(start = 0, end = 100) -#' mtsc <- multinom_TS_chunk(dct, formula = gamma ~ 1, chunk = chunk, -#' timename = "newmoon", weights = weights) +#' @rdname multinom_TS #' #' @export #' diff --git a/R/ptMCMC.R b/R/ptMCMC.R deleted file mode 100644 index 73118749..00000000 --- a/R/ptMCMC.R +++ /dev/null @@ -1,935 +0,0 @@ - -#' @title Calculate ptMCMC summary diagnostics -#' -#' @description Summarize the step and swap acceptance rates as well as trip -#' metrics from the saved output of a ptMCMC estimation. -#' -#' @details Within-chain step acceptance rates are averaged for each of the -#' chains from the raw step acceptance histories -#' (\code{ptMCMCout$step_accepts}) and between-chain swap acceptance rates -#' are similarly averaged for each of the neighboring pairs of chains from -#' the raw swap acceptance histories (\code{ptMCMCout$swap_accepts}). -#' Trips are defined as movement from one extreme chain to the other and -#' back again (Katzgraber \emph{et al.} 2006). Trips are counted and turned -#' to per-iteration rates using \code{\link{count_trips}}. -#' \cr \cr -#' This function was first designed to work within \code{\link{TS}} and -#' process the output of \code{\link{est_changepoints}}, but has been -#' generalized and would work with any output from a ptMCMC as long as -#' \code{ptMCMCout} is formatted properly. -#' -#' @param ptMCMCout Named \code{list} of saved data objects from a ptMCMC -#' estimation including elements named \code{step_accepts} (matrix of -#' \code{logical} outcomes of each step; rows: chains, columns: iterations), -#' \code{swap_accepts} (matrix of \code{logical} outcomes of each swap; -#' rows: chain pairs, columns: iterations), and \code{ids} (matrix of -#' particle identifiers; rows: chains, columns: iterations). -#' \code{ptMCMCout = NULL} indicates no use of ptMCMC and so the function -#' returns \code{NULL}. -#' -#' @return \code{list} of [1] within-chain average step acceptance rates -#' (\code{$step_acceptance_rate}), [2] average between-chain swap acceptance -#' rates (\code{$swap_acceptance_rate}), [3] within particle trip counts -#' (\code{$trip_counts}), and [4] within-particle average trip rates -#' (\code{$trip_rates}). -#' -#' @references -#' Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. -#' Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of -#' Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 -#' \href{https://bit.ly/2LICGXh}{link}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' rho_dist <- est_changepoints(data, gamma ~ 1, 1, "newmoon", -#' weights, TS_control()) -#' diagnose_ptMCMC(rho_dist) -#' } -#' -#' @export -#' -diagnose_ptMCMCx <- function(ptMCMCout){ - if(is.null(ptMCMCout)){ - return(NULL) - } - trips <- count_trips(ptMCMCout$ids) - list(step_acceptance_rate = rowMeans(ptMCMCout$step_accepts), - swap_acceptance_rate = rowMeans(ptMCMCout$swap_accepts), - trip_counts = trips$trip_counts, trip_rates = trips$trip_rates) -} - -#' @title Count trips of the ptMCMC particles -#' -#' @description Count the full trips (from one extreme temperature chain to -#' the other and back again; Katzgraber \emph{et al.} 2006) for each of the -#' ptMCMC particles, as identified by their id on initialization. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and process -#' the output of \code{\link{est_changepoints}} as a component of -#' \code{\link{diagnose_ptMCMC}}, but has been generalized -#' and would work with any output from a ptMCMC as long as \code{ids} -#' is formatted properly. -#' -#' @param ids \code{matrix} of identifiers of the particles in each chain for -#' each iteration of the ptMCMC algorithm (rows: chains, -#' columns: iterations). -#' -#' @return \code{list} of [1] \code{vector} of within particle trip counts -#' (\code{$trip_counts}), and [2] \code{vector} of within-particle average -#' trip rates (\code{$trip_rates}). -#' -#' @references -#' Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. -#' Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of -#' Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 -#' \href{https://bit.ly/2LICGXh}{link}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' rho_dist <- est_changepoints(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' count_trips(rho_dist$ids) -#' } -#' -#' @export -#' -count_tripsx <- function(ids){ - nit <- ncol(ids) - ntemps <- nrow(ids) - last_extreme <- NA - last_extreme_vector <- numeric(nit) - trips <- numeric(ntemps) - for(i in 1:ntemps){ - for(j in 1:nit){ - if(ids[1, j] == i){ - last_extreme <- "bottom" - } - if(ids[ntemps, j] == i){ - last_extreme <- "top" - } - last_extreme_vector[j] <- last_extreme - } - first_top <- match("top", last_extreme_vector) - if (is.na(first_top)){ - trips[i] <- 0 - } else{ - last_pos <- rle(last_extreme_vector[first_top:nit])$values - trips[i] <- sum(last_pos == "bottom") - } - } - trip_rates <- trips / nit - list(trip_counts = trips, trip_rates = trip_rates) -} - - -#' @title Conduct a set of among-chain swaps for the ptMCMC algorithm -#' -#' @description This function handles the among-chain swapping based on -#' temperatures and likelihood differentials. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do -#' so, but has the capacity to be generalized to work with any estimation -#' via ptMCMC with additional coding work. -#' -#' @details The ptMCMC algorithm couples the chains (which are -#' taking their own walks on the distribution surface) through "swaps", -#' where neighboring chains exchange configurations (Geyer 1991, Falcioni -#' and Deem 1999) following the Metropolis criterion (Metropolis -#' \emph{et al.} 1953). This allows them to share information and search the -#' surface in combination (Earl and Deem 2005). -#' -#' @param chainsin Chain configuration to be evaluated for swapping. -#' -#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs -#' for use within the ptMCMC algorithm. -#' -#' @param ids The vector of integer chain ids. -#' -#' @return \code{list} of updated change points, log-likelihoods, and chain -#' ids, as well as a vector of acceptance indicators for each swap. -#' -#' @references -#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, -#' applications, and new perspectives. \emph{Physical Chemistry Chemical -#' Physics} \strong{7}: 3910-3916. -#' \href{https://rsc.li/2XkxPCm}{link}. -#' -#' Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for -#' zeolite structure solution. \emph{Journal of Chemical Physics} -#' \strong{110}: 1754-1766. -#' \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. -#' -#' Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In -#' Computing Science and Statistics: Proceedings of the 23rd Symposium on -#' the Interface}. pp 156-163. American Statistical Association, New York, -#' USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. -#' -#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. -#' Teller. 1953. Equations of state calculations by fast computing machines. -#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. -#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' ids <- prep_ids(TS_control()) -#' for(i in 1:TS_control()$nit){ -#' steps <- step_chains(i, cpts, inputs) -#' swaps <- swap_chains(steps, inputs, ids) -#' saves <- update_saves(i, saves, steps, swaps) -#' cpts <- update_cpts(cpts, swaps) -#' ids <- update_ids(ids, swaps) -#' } -#' } -#' -#' @export -#' -swap_chainsx <- function(chainsin, inputs, ids){ - temps <- inputs$temps - itemps <- 1/temps - ntemps <- length(temps) - revtemps <- seq(ntemps - 1, 1) - lls <- chainsin$lls - changepts <- chainsin$changepts - accept_swap <- rep(FALSE, ntemps - 1) - - for (j in revtemps){ - cutoff <- exp((itemps[j] - itemps[j + 1]) * (lls[j + 1] - lls[j])) - accept <- runif(1) < cutoff - if (accept) { - - accept_swap[j] <- TRUE - placeholder <- changepts[, j] - changepts[ , j] <- changepts[, j + 1] - changepts[ , j + 1] <- placeholder - - placeholder <- lls[j] - lls[j] <- lls[j + 1] - lls[j + 1] <- placeholder - - placeholder <- ids[j] - ids[j] <- ids[j + 1] - ids[j + 1] <- placeholder - } - } - list(changepts = changepts, lls = lls, ids = ids, accept_swap = accept_swap) -} - -#' @title Conduct a within-chain step of the ptMCMC algorithm -#' -#' @description This set of functions steps the chains forward one iteration -#' of the within-chain component of the ptMCMC algorithm. \code{step_chains} -#' is the main function, comprised of a proposal (made by \code{prop_step}), -#' an evaluation of that proposal (made by \code{eval_step}), and then an -#' update of the configuration (made by \code{take_step}). -#' \cr \cr -#' This set of functions was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. They are still hardcoded to -#' do so, but have the capacity to be generalized to work with any -#' estimation via ptMCMC with additional coding work. -#' -#' @details For each iteration of the ptMCMC algorithm, all of the chains -#' have the potential to take a step. The possible step is proposed under -#' a proposal distribution (here for change points we use a symmetric -#' geometric distribution), the proposed step is then evaluated and either -#' accepted or not (following the Metropolis-Hastings rule; Metropolis, -#' \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then -#' accordingly taken or not (the configurations are updated). -#' -#' @param i \code{integer} iteration index. -#' -#' @param cpts \code{matrix} of change point locations across chains. -#' -#' @param inputs Class \code{ptMCMC_inputs} \code{list}, containing the -#' static inputs for use within the ptMCMC algorithm. -#' -#' @param prop_step Proposed step output from \code{propose_step}. -#' -#' @param accept_step \code{logical} indicator of acceptance of each chain's -#' proposed step. -#' -#' @return -#' \code{step_chains}: \code{list} of change points, log-likelihoods, -#' and logical indicators of acceptance for each chain. \cr \cr -#' \code{propose_step}: \code{list} of change points and -#' log-likelihood values for the proposal. \cr \cr -#' \code{eval_step}: \code{logical} vector indicating if each -#' chain's proposal was accepted. \cr \cr -#' \code{take_step}: \code{list} of change points, log-likelihoods, -#' and logical indicators of acceptance for each chain. -#' -#' @references -#' Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. -#' 2018. Evaluation of parallel tempering to accelerate Bayesian parameter -#' estimation in systems biology. -#' \href{https://arxiv.org/abs/1801.09831}{link}. -#' -#' Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains -#' and their applications. \emph{Biometrika} \strong{57}:97-109. -#' \href{https://doi.org/10.2307/2334940}{link}. -#' -#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. -#' Teller. 1953. Equations of state calculations by fast computing machines. -#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. -#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' ids <- prep_ids(TS_control()) -#' for(i in 1:TS_control()$nit){ -#' steps <- step_chains(i, cpts, inputs) -#' swaps <- swap_chains(steps, inputs, ids) -#' saves <- update_saves(i, saves, steps, swaps) -#' cpts <- update_cpts(cpts, swaps) -#' ids <- update_ids(ids, swaps) -#' } -#' # within step_chains() -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' i <- 1 -#' prop_step <- propose_step(i, cpts, inputs) -#' accept_step <- eval_step(i, cpts, prop_step, inputs) -#' take_step(cpts, prop_step, accept_step) -#' } -#' -#' @export -#' -step_chainsx <- function(i, cpts, inputs){ - prop_step <- propose_step(i, cpts, inputs) - accept_step <- eval_step(i, cpts, prop_step, inputs) - take_step(cpts, prop_step, accept_step) -} - -#' @rdname step_chains -#' -#' @export -#' -propose_stepx <- function(i, cpts, inputs){ - - pdist <- inputs$pdist - ntemps <- length(inputs$temps) - selection <- cbind(pdist$which_steps[i, ], 1:ntemps) - prop_changepts <- cpts$changepts - curr_changepts_s <- cpts$changepts[selection] - prop_changepts_s <- curr_changepts_s + pdist$steps[i, ] - if(all(is.na(prop_changepts_s))){ - prop_changepts_s <- NULL - } - prop_changepts[selection] <- prop_changepts_s - mods <- proposed_step_mods(prop_changepts, inputs) - lls <- vapply(mods, logLik, 0) - list(changepts = prop_changepts, lls = lls) -} - -#' @rdname step_chains -#' -#' @export -#' -eval_stepx <- function(i, cpts, prop_step, inputs){ - temps <- inputs$temps - ntemps <- length(temps) - itemps <- 1 / temps - runif(ntemps) < exp((prop_step$lls - cpts$lls) * itemps) -} - -#' @rdname step_chains -#' -#' @export -#' -take_stepx <- function(cpts, prop_step, accept_step){ - changepts <- cpts$changepts - lls <- cpts$lls - changepts[ , accept_step] <- prop_step$changepts[ , accept_step] - lls[accept_step] <- prop_step$lls[accept_step] - list(changepts = changepts, lls = lls, accept_step = accept_step) -} - -#' @title Fit the chunk-level models to a time series, given a set of -#' proposed change points within the ptMCMC algorithm -#' -#' @description This function wraps around \code{TS_memo} -#' (optionally memoised \code{\link{multinom_TS}}) to provide a -#' simpler interface within the ptMCMC algorithm and is implemented within -#' \code{\link{propose_step}}. -#' -#' @param prop_changepts \code{matrix} of proposed change points across -#' chains. -#' -#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs -#' for use within the ptMCMC algorithm. -#' -#' @return List of models associated with the proposed step, with an element -#' for each chain. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' i <- 1 -#' pdist <- inputs$pdist -#' ntemps <- length(inputs$temps) -#' selection <- cbind(pdist$which_steps[i, ], 1:ntemps) -#' prop_changepts <- cpts$changepts -#' curr_changepts_s <- cpts$changepts[selection] -#' prop_changepts_s <- curr_changepts_s + pdist$steps[i, ] -#' if(all(is.na(prop_changepts_s))){ -#' prop_changepts_s <- NULL -#' } -#' prop_changepts[selection] <- prop_changepts_s -#' mods <- proposed_step_mods(prop_changepts, inputs) -#' } -#' -#' @export -#' -proposed_step_modsx <- function(prop_changepts, inputs){ - - data <- inputs$data - formula <- inputs$formula - weights <- inputs$weights - TS_function <- inputs$TS_function - ntemps <- length(inputs$temps) - control <- inputs$control - timename <- inputs$timename - out <- vector("list", length = ntemps) - for (i in 1:ntemps){ - out[[i]] <- TS_function(data, formula, prop_changepts[ , i], timename, - weights, control) - } - out -} - - -#' @title Initialize and update the chain ids throughout the ptMCMC algorithm -#' -#' @description \code{prep_ids} creates and \code{update_ids} updates -#' the active vector of identities (ids) for each of the chains in the -#' ptMCMC algorithm. These ids are used to track trips of the particles -#' among chains. -#' \cr \cr -#' These functions were designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}, but have been generalized -#' and would work within any general ptMCMC as long as \code{control}, -#' \code{ids}, and \code{swaps} are formatted properly. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @param ids The existing vector of chain ids. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return The vector of chain ids. -#' -#' @examples -#' prep_ids() -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' ids <- prep_ids(TS_control()) -#' for(i in 1:TS_control()$nit){ -#' steps <- step_chains(i, cpts, inputs) -#' swaps <- swap_chains(steps, inputs, ids) -#' saves <- update_saves(i, saves, steps, swaps) -#' cpts <- update_cpts(cpts, swaps) -#' ids <- update_ids(ids, swaps) -#' } -#' } -#' -#' @export -#' -prep_idsx <- function(control = list()){ - control <- do.call("TS_control", control) - if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ - stop("ntemps must be integer-valued") - } - 1:control$ntemps -} - -#' @rdname prep_ids -#' -#' @export -#' -update_idsx <- function(ids, swaps){ - swaps$ids -} - -#' @title Prepare the inputs for the ptMCMC algorithm estimation of -#' change points -#' -#' @description Package the static inputs (controls and data structures) used -#' by the ptMCMC algorithm in the context of estimating change points. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do -#' so, but has the capacity to be generalized to work with any estimation -#' via ptMCMC with additional coding work. -#' -#' @param data Class \code{data.frame} object including [1] the time variable -#' (indicated in \code{control}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated -#' in \code{formula}). -#' -#' @param formula \code{formula} describing the continuous change. Any -#' predictor variable included must also be a column in the -#' \code{data}. Any (multinomial) response variable must also be a set of -#' columns in \code{data}. -#' -#' @param nchangepoints Integer corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the data -#' for each continuous model and each LDA model. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using -#' \code{\link{document_weights}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return Class \code{ptMCMC_inputs} \code{list}, containing the static -#' inputs for use within the ptMCMC algorithm for estimating change points. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' } -#' @export -#' -prep_ptMCMC_inputsx <- function(data, formula, nchangepoints, timename, - weights = NULL, control = list()){ - check_timename(data, timename) - check_formula(data, formula) - check_weights(weights) - check_nchangepoints(nchangepoints) - check_control(control) - control <- do.call("TS_control", control) - control$selector <- NULL - control$measurer <- NULL - out <- list(control = control, temps = prep_temp_sequence(control), - pdist = prep_proposal_dist(nchangepoints, control), - formula = formula, weights = weights, data = data, - TS_function = TS_fun(control), - timename = timename) - class(out) <- c("ptMCMC_inputs", "list") - out -} - - -#' @title Pre-calculate the change point proposal distribution for the ptMCMC -#' algorithm -#' -#' @description Calculate the proposal distribution in advance of actually -#' running the ptMCMC algorithm in order to decrease computation time. -#' The proposal distribution is a joint of three distributions: -#' [1] a multinomial distribution selecting among the change points within -#' the chain, [2] a binomial distribution selecting the direction of the -#' step of the change point (earlier or later in the time series), and -#' [3] a geometric distribution selecting the magnitude of the step. -#' -#' @param nchangepoints Integer corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the data -#' for each continuous model and each LDA model. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. Currently relevant here is -#' \code{magnitude}, which controls the magnitude of the step size (is the -#' average of the geometric distribution). -#' -#' @return \code{list} of two \code{matrix} elements: [1] the size of the -#' proposed step for each iteration of each chain and [2] the identity of -#' the change point location to be shifted by the step for each iteration of -#' each chain. -#' -#' @examples -#' prep_proposal_dist(nchangepoints = 2) -#' -#' @export -#' -prep_proposal_distx <- function(nchangepoints, control = list()){ - check_nchangepoints(nchangepoints) - check_control(control) - control <- do.call("TS_control", control) - ntemps <- control$ntemps - nit <- control$nit - if(nchangepoints == 0){ - steps <- matrix(0, nrow = nit, ncol = ntemps) - which_steps <- matrix(numeric(0), nrow = nit, ncol = ntemps) - } else{ - magnitude <- control$magnitude - step_signs <- sample(c(-1, 1), nit * ntemps, replace = TRUE) - step_magnitudes <- 1 + rgeom(nit * ntemps, 1 / magnitude) - steps <- matrix(step_signs * step_magnitudes, nrow = nit) - which_steps <- sample.int(nchangepoints, nit * ntemps, replace = TRUE) - which_steps <- matrix(which_steps, nrow = nit) - } - list(steps = steps, which_steps = which_steps) -} - -#' @title Prepare and update the data structures to save the ptMCMC output -#' -#' @description \code{prep_saves} creates the data structure used to save the -#' output from each iteration of the ptMCMC algorithm, which is added via -#' \code{update_saves}. Once the ptMCMC is complete, the saved data objects -#' are then processed (burn-in iterations are dropped and the remaining -#' iterations are thinned) via \code{process_saves}. -#' \cr \cr -#' This set of functions was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. They are still hardcoded to -#' do so, but have the capacity to be generalized to work with any -#' estimation via ptMCMC with additional coding work. -#' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the data -#' for each continuous model and each LDA model. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @param i \code{integer} iteration index. -#' -#' @param saves The existing list of saved data objects. -#' -#' @param steps Chain configuration after within-temperature steps. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return \code{list} of ptMCMC objects: change points (\code{$cpts}), -#' log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances -#' (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' ids <- prep_ids(TS_control()) -#' for(i in 1:TS_control()$nit){ -#' steps <- step_chains(i, cpts, inputs) -#' swaps <- swap_chains(steps, inputs, ids) -#' saves <- update_saves(i, saves, steps, swaps) -#' cpts <- update_cpts(cpts, swaps) -#' ids <- update_ids(ids, swaps) -#' } -#' process_saves(saves, TS_control()) -#' } -#' -#' @export -#' -prep_savesx <- function(nchangepoints, control = list()){ - check_nchangepoints(nchangepoints) - check_control(control) - control <- do.call("TS_control", control) - ntemps <- control$ntemps - nit <- control$nit - cpts <- array(NA, c(nchangepoints, ntemps, nit)) - lls <- matrix(NA, ntemps, nit) - ids <- matrix(NA, ntemps, nit) - step_accepts <- matrix(FALSE, ntemps, nit) - swap_accepts <- matrix(FALSE, ntemps - 1, nit) - list(cpts = cpts, lls = lls, ids = ids, step_accepts = step_accepts, - swap_accepts = swap_accepts) -} - -#' @rdname prep_saves -#' -#' @export -#' -update_savesx <- function(i, saves, steps, swaps){ - saves$cpts[ , , i] <- swaps$changepts - saves$lls[ , i] <- swaps$lls - saves$ids[ , i] <- swaps$ids - saves$step_accepts[ , i] <- steps$accept_step - saves$swap_accepts[ , i] <- swaps$accept_swap - saves -} - -#' @rdname prep_saves -#' -#' @export -#' -process_savesx <- function(saves, control = list()){ - control <- do.call("TS_control", control) - nit <- control$nit - iters <- 1:nit - if (control$burnin > 0){ - iters <- iters[-(1:control$burnin)] - } - niters <- length(iters) - thin_interval <- ceiling(1/control$thin_frac) - iters_thinned <- seq(1, niters, by = thin_interval) - dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) - saves$cpts <- array(saves$cpts[ , , iters_thinned], dim = dims) - saves$lls <- saves$lls[, iters_thinned] - saves$ids <- saves$ids[, iters_thinned] - saves$step_accepts <- saves$step_accepts[ , iters_thinned] - saves$swap_accepts <- saves$swap_accepts[ , iters_thinned] - saves -} - -#' @title Initialize and update the change point matrix used in the ptMCMC -#' algorithm -#' -#' @description Each of the chains is initialized by \code{prep_cpts} using a -#' draw from the available times (i.e. assuming a uniform prior), the best -#' fit (by likelihood) draw is put in the focal chain with each subsequently -#' worse fit placed into the subsequently hotter chain. \code{update_cpts} -#' updates the change points after every iteration in the ptMCMC algorithm. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @param formula \code{formula} defining the regression relationship between -#' the change points, see \code{\link[stats]{formula}}. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}, as verified by \code{\link{check_formula}}. -#' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current -#' implementation can reasonably include up to 6 change points. The -#' number of change points is used to dictate the segmentation of the data -#' for each continuous model and each LDA model. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using -#' \code{\link{document_weights}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @param cpts The existing matrix of change points. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return \code{list} of [1] \code{matrix} of change points (rows) for -#' each temperature (columns) and [2] \code{vector} of log-likelihood -#' values for each of the chains. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' data <- data[order(data[,"newmoon"]), ] -#' saves <- prep_saves(1, TS_control()) -#' inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, -#' TS_control()) -#' cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) -#' ids <- prep_ids(TS_control()) -#' for(i in 1:TS_control()$nit){ -#' steps <- step_chains(i, cpts, inputs) -#' swaps <- swap_chains(steps, inputs, ids) -#' saves <- update_saves(i, saves, steps, swaps) -#' cpts <- update_cpts(cpts, swaps) -#' ids <- update_ids(ids, swaps) -#' } -#' } -#' -#' @export -#' -prep_cptsx <- function(data, formula, nchangepoints, timename, weights, - control = list()){ - - check_formula(data, formula) - check_nchangepoints(nchangepoints) - check_weights(weights) - check_timename(data, timename) - check_control(control) - control <- do.call("TS_control", control) - temps <- prep_temp_sequence(control) - ntemps <- length(temps) - min_time <- min(data[ , timename]) - max_time <- max(data[ , timename]) - times <- seq(min_time, max_time, 1) - avail_times <- times[-c(1, length(times))] - cps <- matrix(NA, nrow = nchangepoints, ncol = ntemps) - for (i in 1:ntemps){ - cp_times <- sort(sample(avail_times, nchangepoints, replace = FALSE)) - cps[ , i] <- cp_times - } - lls <- rep(NA, ntemps) - for (i in 1:ntemps){ - modfit <- multinom_TS(data, formula, cps[ ,i], timename, weights, control) - lls[i] <- modfit$logLik - } - cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] - lls <- sort(lls, decreasing = TRUE) - - out <- list(cps, lls) - names(out) <- c("changepts", "lls") - out -} - -#' @rdname prep_cpts -#' -#' @export -#' -update_cptsx <- function(cpts, swaps){ - list(changepts = swaps$changepts, lls = swaps$lls) -} - -#' @title Prepare the ptMCMC temperature sequence -#' -#' @description Create the series of temperatures used in the ptMCMC -#' algorithm. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' \code{\link{est_changepoints}} specifically, but has been generalized -#' and would work with any ptMCMC model as long as \code{control} -#' includes the relevant control parameters (and provided that the -#' \code{\link{check_control}} function and its use here are generalized). -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{vector} of temperatures. -#' -#' @examples -#' prep_temp_sequence() -#' -#' @export -#' -prep_temp_sequencex <- function(control = list()){ - check_control(control) - control <- do.call("TS_control", control) - ntemps <- control$ntemps - penultimate_temp <- control$penultimate_temp - ultimate_temp <- control$ultimate_temp - q <- control$q - sequence <- seq(0, log2(penultimate_temp), length.out = ntemps - 1) - log_temps <- sequence^(1 + q) / log2(penultimate_temp)^q - c(2^(log_temps), ultimate_temp) -} diff --git a/man/check_changepoints.Rd b/man/check_changepoints.Rd index 021d8bd2..27e009d1 100644 --- a/man/check_changepoints.Rd +++ b/man/check_changepoints.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R +% Please edit documentation in R/TS.R \name{check_changepoints} \alias{check_changepoints} \title{Check that a set of change point locations is proper} diff --git a/man/count_tripsx.Rd b/man/count_trips.Rd similarity index 63% rename from man/count_tripsx.Rd rename to man/count_trips.Rd index db860dbf..d9220f66 100644 --- a/man/count_tripsx.Rd +++ b/man/count_trips.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{count_tripsx} -\alias{count_tripsx} -\title{Count trips of the ptMCMC particles} +% Please edit documentation in R/ldats_classic_method.R +\name{count_trips} +\alias{count_trips} +\title{Count trips of the ptMCMC particles in a classic_ldats estimation} \usage{ -count_tripsx(ids) +count_trips(ids) } \arguments{ \item{ids}{\code{matrix} of identifiers of the particles in each chain for @@ -26,22 +26,6 @@ Count the full trips (from one extreme temperature chain to \code{\link{diagnose_ptMCMC}}, but has been generalized and would work with any output from a ptMCMC as long as \code{ids} is formatted properly. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - rho_dist <- est_changepoints(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - count_trips(rho_dist$ids) -} - } \references{ Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. diff --git a/man/diagnose_ptMCMCx.Rd b/man/diagnose_ptMCMCx.Rd deleted file mode 100644 index 89c74310..00000000 --- a/man/diagnose_ptMCMCx.Rd +++ /dev/null @@ -1,66 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{diagnose_ptMCMCx} -\alias{diagnose_ptMCMCx} -\title{Calculate ptMCMC summary diagnostics} -\usage{ -diagnose_ptMCMCx(ptMCMCout) -} -\arguments{ -\item{ptMCMCout}{Named \code{list} of saved data objects from a ptMCMC -estimation including elements named \code{step_accepts} (matrix of -\code{logical} outcomes of each step; rows: chains, columns: iterations), -\code{swap_accepts} (matrix of \code{logical} outcomes of each swap; -rows: chain pairs, columns: iterations), and \code{ids} (matrix of -particle identifiers; rows: chains, columns: iterations). -\code{ptMCMCout = NULL} indicates no use of ptMCMC and so the function -returns \code{NULL}.} -} -\value{ -\code{list} of [1] within-chain average step acceptance rates - (\code{$step_acceptance_rate}), [2] average between-chain swap acceptance - rates (\code{$swap_acceptance_rate}), [3] within particle trip counts - (\code{$trip_counts}), and [4] within-particle average trip rates - (\code{$trip_rates}). -} -\description{ -Summarize the step and swap acceptance rates as well as trip - metrics from the saved output of a ptMCMC estimation. -} -\details{ -Within-chain step acceptance rates are averaged for each of the - chains from the raw step acceptance histories - (\code{ptMCMCout$step_accepts}) and between-chain swap acceptance rates - are similarly averaged for each of the neighboring pairs of chains from - the raw swap acceptance histories (\code{ptMCMCout$swap_accepts}). - Trips are defined as movement from one extreme chain to the other and - back again (Katzgraber \emph{et al.} 2006). Trips are counted and turned - to per-iteration rates using \code{\link{count_trips}}. - \cr \cr - This function was first designed to work within \code{\link{TS}} and - process the output of \code{\link{est_changepoints}}, but has been - generalized and would work with any output from a ptMCMC as long as - \code{ptMCMCout} is formatted properly. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - rho_dist <- est_changepoints(data, gamma ~ 1, 1, "newmoon", - weights, TS_control()) - diagnose_ptMCMC(rho_dist) -} - -} -\references{ -Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. - Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of - Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 - \href{https://bit.ly/2LICGXh}{link}. -} diff --git a/man/ilr_TS.Rd b/man/ilr_TS.Rd new file mode 100644 index 00000000..88d44cde --- /dev/null +++ b/man/ilr_TS.Rd @@ -0,0 +1,76 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ilr_TS.R +\name{ilr_TS} +\alias{ilr_TS} +\alias{ilr_TS_chunk} +\title{Fit a simplex-based change point Time Series model using isometric + log ratio} +\usage{ +ilr_TS(data, formula, changepoints = NULL, timename = "time", + weights = NULL, control = list()) + +ilr_TS_chunk(data, formula, chunk, timename = "time", weights = NULL, + control = list()) +} +\arguments{ +\item{data}{\code{data.frame} including [1] the time variable (indicated +in \code{timename}), [2] the predictor variables (required by +\code{formula}) and [3], the compositional response variable (indicated +in \code{formula}). \cr \cr +Note that the response variables should be formatted as a +\code{data.frame} object named as indicated by the +\code{response} entry in the \code{control} list, such as \code{gamma} +for a standard TS analysis on LDA output. \cr \cr +See \code{Examples}.} + +\item{formula}{\code{\link[stats]{formula}} defining the regression between +relationship the change points. Any +predictor variable included must also be a column in +\code{data} and any (compositional) response variable must be a set of +columns in \code{data}.} + +\item{changepoints}{Numeric vector indicating locations of the change +points. Must be conformable to \code{integer} values.} + +\item{timename}{\code{character} element indicating the time variable +used in the time series. Defaults to \code{"time"}. The variable must be +integer-conformable or a \code{Date}. If the variable named +is a \code{Date}, the input is converted to an integer, resulting in the +timestep being 1 day, which is often not desired behavior.} + +\item{weights}{Optional class \code{numeric} vector of weights for each +document. Defaults to \code{NULL}, translating to an equal weight for +each document. When using \code{ilr_TS} in a standard LDATS +analysis, it is advisable to weight the documents by their total size, +as the result of \code{\link{topicmodels_LDA}} is a matrix of +proportions, which does not account for size differences among documents. +For most models, a scaling of the weights (so that the average is 1) is +most appropriate, and this is accomplished using +\code{\link{document_weights}}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} + +\item{chunk}{Length-2 vector of times: [1] \code{start}, the start time +for the chunk and [2] \code{end}, the end time for the chunk.} +} +\value{ +\code{ilr_TS}: Object of class \code{ilr_TS_fit}, + which is a list of [1] + chunk-level model fits (\code{"chunk models"}), [2] the total log + likelihood combined across all chunks (\code{"logLik"}), and [3] a + \code{data.frame} of chunk beginning and ending times (\code{"logLik"} + with columns \code{"start"} and \code{"end"}). \cr \cr + \code{ilr_TS_chunk}: fitted model object for the chunk, + of class \code{lm}. +} +\description{ +\code{ilr_TS} fits a set of simplex regression models to a time series + of compositional data divided into multiple segments (a.k.a. chunks) + based on given locations for a set of change points, using + the isometric log ratio (ILR) transformation. \cr \cr + \code{ilr_TS_chunk} fits a simplex regression model using the ILR + transformation to a defined chunk of time (a.k.a. segment) + \code{[chunk$start, chunk$end]} within a time series. +} diff --git a/man/ldats_classic.Rd b/man/ldats_classic.Rd new file mode 100644 index 00000000..f924af4d --- /dev/null +++ b/man/ldats_classic.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{ldats_classic} +\alias{ldats_classic} +\title{Estimate changepoints using the LDATS classic ptMCMC method} +\usage{ +ldats_classic(TS, control = list()) +} +\arguments{ +\item{TS}{\code{list} time series model object.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Values not input assume defaults set by \code{\link{TS_control}}.} +} +\value{ +\code{list} of changepoint locations, log likelihoods, and model + diagnostics. +} +\description{ +Uses the LDATS classic ptMCMC method to fit a changepoint + model. +} diff --git a/man/logLik.TS_fit.Rd b/man/logLik.TS_fit.Rd new file mode 100644 index 00000000..e2e92675 --- /dev/null +++ b/man/logLik.TS_fit.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS_fit.R +\name{logLik.TS_fit} +\alias{logLik.TS_fit} +\title{Log likelihood of a TS model (as a TS_fit-class list)} +\usage{ +\method{logLik}{TS_fit}(object, ...) +} +\arguments{ +\item{object}{A \code{TS_fit}-class object.} + +\item{...}{Not used, simply included to maintain method compatibility.} +} +\value{ +Log likelihood of the model, as class \code{logLik}, with + attributes \code{df} (degrees of freedom) and \code{nobs} (the number of + weighted observations, accounting for size differences among documents). +} +\description{ +Convenience function to simply extract the \code{logLik} + element (and \code{df} and \code{nobs}) from a \code{TS_fit} + object fit by a \code{_TS} function. +} diff --git a/man/logLik.multinom_TS_fit.Rd b/man/logLik.multinom_TS_fit.Rd deleted file mode 100644 index e5f44187..00000000 --- a/man/logLik.multinom_TS_fit.Rd +++ /dev/null @@ -1,37 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R -\name{logLik.multinom_TS_fit} -\alias{logLik.multinom_TS_fit} -\title{Log likelihood of a multinomial TS model} -\usage{ -\method{logLik}{multinom_TS_fit}(object, ...) -} -\arguments{ -\item{object}{A \code{multinom_TS_fit}-class object.} - -\item{...}{Not used, simply included to maintain method compatibility.} -} -\value{ -Log likelihood of the model, as class \code{logLik}, with - attributes \code{df} (degrees of freedom) and \code{nobs} (the number of - weighted observations, accounting for size differences among documents). -} -\description{ -Convenience function to simply extract the \code{logLik} - element (and \code{df} and \code{nobs}) from a \code{multinom_TS_fit} - object fit by \code{\link{multinom_TS}}. Extends - \code{\link[stats]{logLik}} from \code{\link[nnet]{multinom}} to - \code{multinom_TS_fit} objects. -} -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - weights <- document_weights(dtt) - mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), - timename = "newmoon", weights = weights) - logLik(mts) - -} diff --git a/man/multinom_TS.Rd b/man/multinom_TS.Rd index 1598259c..da190eec 100644 --- a/man/multinom_TS.Rd +++ b/man/multinom_TS.Rd @@ -2,36 +2,34 @@ % Please edit documentation in R/multinom_TS.R \name{multinom_TS} \alias{multinom_TS} -\alias{check_multinom_TS_inputs} +\alias{multinom_TS_chunk} \title{Fit a multinomial change point Time Series model} \usage{ multinom_TS(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()) -check_multinom_TS_inputs(data, formula = gamma ~ 1, - changepoints = NULL, timename = "time", weights = NULL, - control = list()) +multinom_TS_chunk(data, formula, chunk, timename = "time", + weights = NULL, control = list()) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated in \code{timename}), [2] the predictor variables (required by \code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the +\code{formula}). \cr \cr +Note that the response variables should be formatted as a +\code{data.frame} object named as indicated by the \code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output. See \code{Examples}.} +for a standard TS analysis on LDA output. \cr \cr +See \code{Examples}.} \item{formula}{\code{\link[stats]{formula}} defining the regression between relationship the change points. Any predictor variable included must also be a column in \code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} +columns in \code{data}.} \item{changepoints}{Numeric vector indicating locations of the change -points. Must be conformable to \code{integer} values. Validity -checked by \code{\link{check_changepoints}} and -\code{\link{verify_changepoint_locations}}.} +points. Must be conformable to \code{integer} values.} \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be @@ -41,9 +39,9 @@ timestep being 1 day, which is often not desired behavior.} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS +each document. When using \code{ilr_TS} in a standard LDATS analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of +as the result of \code{\link{topicmodels_LDA}} is a matrix of proportions, which does not account for size differences among documents. For most models, a scaling of the weights (so that the average is 1) is most appropriate, and this is accomplished using @@ -53,6 +51,9 @@ most appropriate, and this is accomplished using Time Series model including the parallel tempering Markov Chain Monte Carlo (ptMCMC) controls. Values not input assume defaults set by \code{\link{TS_control}}.} + +\item{chunk}{Length-2 vector of times: [1] \code{start}, the start time +for the chunk and [2] \code{end}, the end time for the chunk.} } \value{ \code{multinom_TS}: Object of class \code{multinom_TS_fit}, @@ -61,28 +62,18 @@ Monte Carlo (ptMCMC) controls. Values not input assume defaults set by likelihood combined across all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk beginning and ending times (\code{"logLik"} with columns \code{"start"} and \code{"end"}). \cr \cr - \code{check_multinom_TS_inputs}: an error message is thrown if any - input is improper, otherwise \code{NULL}. + \code{multinom_TS_chunk}: fitted model object for the chunk, + of classes \code{multinom} and \code{nnet}. } \description{ -Fit a set of multinomial regression models (via +\code{multinom_TS} fits a set of multinomial regression models (via \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time series of data divided into multiple segments (a.k.a. chunks) based on given locations for a set of change points. \cr \cr - \code{check_multinom_TS_inputs} checks that the inputs to - \code{multinom_TS} are of proper classes for an analysis. -} -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - weights <- document_weights(dtt) - check_multinom_TS_inputs(dct, timename = "newmoon") - mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), - timename = "newmoon", weights = weights) - + \code{multinom_TS_chunk} fits a multinomial regression model (via + \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) + to a defined chunk of time (a.k.a. segment) + \code{[chunk$start, chunk$end]} within a time series. } \references{ Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied diff --git a/man/multinom_TS_chunk.Rd b/man/multinom_TS_chunk.Rd deleted file mode 100644 index a7147949..00000000 --- a/man/multinom_TS_chunk.Rd +++ /dev/null @@ -1,67 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R -\name{multinom_TS_chunk} -\alias{multinom_TS_chunk} -\title{Fit a multinomial Time Series model chunk} -\usage{ -multinom_TS_chunk(data, formula, chunk, timename = "time", - weights = NULL, control = list()) -} -\arguments{ -\item{data}{Class \code{data.frame} object including the predictor and -response variables.} - -\item{formula}{Formula as a \code{\link[stats]{formula}} or -\code{\link[base]{character}} object describing the chunk.} - -\item{chunk}{Length-2 vector of times: [1] \code{start}, the start time -for the chunk and [2] \code{end}, the end time for the chunk.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -Fitted model object for the chunk, of classes \code{multinom} and - \code{nnet}. -} -\description{ -Fit a multinomial regression model (via - \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) - to a defined chunk of time (a.k.a. segment) - \code{[chunk$start, chunk$end]} within a time series. -} -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - weights <- document_weights(dtt) - chunk <- c(start = 0, end = 100) - mtsc <- multinom_TS_chunk(dct, formula = gamma ~ 1, chunk = chunk, - timename = "newmoon", weights = weights) - -} -\references{ -Ripley, B. D. 1996. Pattern Recognition and Neural Networks. Cambridge. - - Venables, W. N. and B. D. Ripley. 2002. Modern Applied Statistics with S. - Fourth edition. Springer. -} diff --git a/man/package_chunk_fits.Rd b/man/package_chunk_fits.Rd index b9516cf7..ad45c0fc 100644 --- a/man/package_chunk_fits.Rd +++ b/man/package_chunk_fits.Rd @@ -1,9 +1,8 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R +% Please edit documentation in R/TS_fit.R \name{package_chunk_fits} \alias{package_chunk_fits} -\title{Package the output of the chunk-level multinomial models into a - multinom_TS_fit list} +\title{Package the output of the chunk-level TS models into a TS_fit list} \usage{ package_chunk_fits(chunks, fits) } @@ -15,36 +14,14 @@ chunk (row).} the memoised version of \code{\link{multinom_TS_chunk}}.} } \value{ -Object of class \code{multinom_TS_fit}, which is a list of [1] +Object of class \code{TS_fit}, which is a list of [1] chunk-level model fits, [2] the total log likelihood combined across all chunks, and [3] the chunk time data table. } \description{ Takes the list of fitted chunk-level models returned from - \code{TS_chunk_memo} (the memoised version of - \code{\link{multinom_TS_chunk}} and packages it as a - \code{multinom_TS_fit} object. This involves naming the model fits based + a \code{_TS_chunk} function and packages it as a + \code{TS_fit} object. This involves naming the model fits based on the chunk time windows, combining the log likelihood values across the chunks, and setting the class of the output object. } -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - weights <- document_weights(dtt) - formula <- gamma ~ 1 - changepoints <- c(20,50) - timename <- "newmoon" - TS_chunk_memo <- memoise_fun(multinom_TS_chunk, TRUE) - chunks <- prep_chunks(dct, changepoints, timename) - nchunks <- nrow(chunks) - fits <- vector("list", length = nchunks) - for (i in 1:nchunks){ - fits[[i]] <- TS_chunk_memo(dct, formula, chunks[i, ], timename, - weights, TS_control()) - } - package_chunk_fits(chunks, fits) - -} diff --git a/man/prep_chunks.Rd b/man/prep_chunks.Rd index 152a6c1e..507f1a81 100644 --- a/man/prep_chunks.Rd +++ b/man/prep_chunks.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R +% Please edit documentation in R/TS.R \name{prep_chunks} \alias{prep_chunks} \title{Prepare the time chunk table for a multinomial change point diff --git a/man/prep_cpts.Rd b/man/prep_cpts.Rd new file mode 100644 index 00000000..36e3fd58 --- /dev/null +++ b/man/prep_cpts.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{prep_cpts} +\alias{prep_cpts} +\alias{update_cpts} +\title{Initialize and update the change point matrix used in the LDATS + classic ptMCMC algorithm} +\usage{ +prep_cpts(TS, control = list()) + +update_cpts(cpts, swaps) +} +\arguments{ +\item{TS}{\code{list} time series model object.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} + +\item{cpts}{The existing matrix of change points.} + +\item{swaps}{Chain configuration after among-temperature swaps.} +} +\value{ +\code{list} of [1] \code{matrix} of change points (rows) for + each temperature (columns) and [2] \code{vector} of log-likelihood + values for each of the chains. +} +\description{ +Each of the chains is initialized by \code{prep_cpts} using a + draw from the available times (i.e. assuming a uniform prior), the best + fit (by likelihood) draw is put in the focal chain with each subsequently + worse fit placed into the subsequently hotter chain. \code{update_cpts} + updates the change points after every iteration in the ptMCMC algorithm. +} diff --git a/man/prep_cptsx.Rd b/man/prep_cptsx.Rd deleted file mode 100644 index 80a503b6..00000000 --- a/man/prep_cptsx.Rd +++ /dev/null @@ -1,95 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_cptsx} -\alias{prep_cptsx} -\title{Initialize and update the change point matrix used in the ptMCMC - algorithm} -\usage{ -prep_cptsx(data, formula, nchangepoints, timename, weights, - control = list()) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{formula} defining the regression relationship between -the change points, see \code{\link[stats]{formula}}. Any -predictor variable included must also be a column in -\code{data} and any (multinomial) response variable must be a set of -columns in \code{data}, as verified by \code{\link{check_formula}}.} - -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the data -for each continuous model and each LDA model.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using -\code{\link{document_weights}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} - -\item{cpts}{The existing matrix of change points.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -\code{list} of [1] \code{matrix} of change points (rows) for - each temperature (columns) and [2] \code{vector} of log-likelihood - values for each of the chains. -} -\description{ -Each of the chains is initialized by \code{prep_cpts} using a - draw from the available times (i.e. assuming a uniform prior), the best - fit (by likelihood) draw is put in the focal chain with each subsequently - worse fit placed into the subsequently hotter chain. \code{update_cpts} - updates the change points after every iteration in the ptMCMC algorithm. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - ids <- prep_ids(TS_control()) - for(i in 1:TS_control()$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } -} - -} diff --git a/man/prep_ids.Rd b/man/prep_ids.Rd new file mode 100644 index 00000000..6ef2e365 --- /dev/null +++ b/man/prep_ids.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{prep_ids} +\alias{prep_ids} +\alias{update_ids} +\title{Initialize and update the chain ids throughout the LDATS classic + ptMCMC algorithm} +\usage{ +prep_ids(TS, control = list()) + +update_ids(ids, swaps) +} +\arguments{ +\item{TS}{\code{list} time series model object.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Values not input assume defaults set by \code{\link{TS_control}}.} + +\item{ids}{The existing vector of chain ids.} + +\item{swaps}{Chain configuration after among-temperature swaps.} +} +\value{ +The vector of chain ids. +} +\description{ +\code{prep_ids} creates and \code{update_ids} updates + the active vector of identities (ids) for each of the chains in the + ptMCMC algorithm. These ids are used to track trips of the particles + among chains. + \cr \cr + These functions were designed to work within \code{\link{TS}} and + specifically \code{\link{est_changepoints}}, but have been generalized + and would work within any general ptMCMC as long as \code{control}, + \code{ids}, and \code{swaps} are formatted properly. +} diff --git a/man/prep_idsx.Rd b/man/prep_idsx.Rd deleted file mode 100644 index 81ba69e3..00000000 --- a/man/prep_idsx.Rd +++ /dev/null @@ -1,58 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_idsx} -\alias{prep_idsx} -\title{Initialize and update the chain ids throughout the ptMCMC algorithm} -\usage{ -prep_idsx(control = list()) -} -\arguments{ -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} - -\item{ids}{The existing vector of chain ids.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -The vector of chain ids. -} -\description{ -\code{prep_ids} creates and \code{update_ids} updates - the active vector of identities (ids) for each of the chains in the - ptMCMC algorithm. These ids are used to track trips of the particles - among chains. - \cr \cr - These functions were designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}, but have been generalized - and would work within any general ptMCMC as long as \code{control}, - \code{ids}, and \code{swaps} are formatted properly. -} -\examples{ - prep_ids() -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - ids <- prep_ids(TS_control()) - for(i in 1:TS_control()$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } -} - -} diff --git a/man/prep_proposal_distx.Rd b/man/prep_proposal_dist.Rd similarity index 57% rename from man/prep_proposal_distx.Rd rename to man/prep_proposal_dist.Rd index 8eb5dfb4..62285510 100644 --- a/man/prep_proposal_distx.Rd +++ b/man/prep_proposal_dist.Rd @@ -1,24 +1,17 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_proposal_distx} -\alias{prep_proposal_distx} +% Please edit documentation in R/ldats_classic_method.R +\name{prep_proposal_dist} +\alias{prep_proposal_dist} \title{Pre-calculate the change point proposal distribution for the ptMCMC algorithm} \usage{ -prep_proposal_distx(nchangepoints, control = list()) +prep_proposal_dist(TS, control = list()) } \arguments{ -\item{nchangepoints}{Integer corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the data -for each continuous model and each LDA model.} +\item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}. Currently relevant here is +Time Series model Relevant here is \code{magnitude}, which controls the magnitude of the step size (is the average of the geometric distribution).} } @@ -37,7 +30,3 @@ Calculate the proposal distribution in advance of actually step of the change point (earlier or later in the time series), and [3] a geometric distribution selecting the magnitude of the step. } -\examples{ - prep_proposal_dist(nchangepoints = 2) - -} diff --git a/man/prep_ptMCMC_inputs.Rd b/man/prep_ptMCMC_inputs.Rd new file mode 100644 index 00000000..9f5935a4 --- /dev/null +++ b/man/prep_ptMCMC_inputs.Rd @@ -0,0 +1,28 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{prep_ptMCMC_inputs} +\alias{prep_ptMCMC_inputs} +\title{Prepare the inputs for the ptMCMC algorithm estimation of + change points} +\usage{ +prep_ptMCMC_inputs(TS, control = list()) +} +\arguments{ +\item{TS}{\code{list} time series model object.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model.} +} +\value{ +\code{list} containing the static + inputs for use within the ptMCMC algorithm for estimating change points. +} +\description{ +Package the static inputs (controls and data structures) used + by the ptMCMC algorithm in the context of estimating change points. + \cr \cr + This function was designed to work within \code{\link{TS}} and + specifically \code{\link{est_changepoints}}. It is still hardcoded to do + so, but has the capacity to be generalized to work with any estimation + via ptMCMC with additional coding work. +} diff --git a/man/prep_ptMCMC_inputsx.Rd b/man/prep_ptMCMC_inputsx.Rd deleted file mode 100644 index 980bbd90..00000000 --- a/man/prep_ptMCMC_inputsx.Rd +++ /dev/null @@ -1,77 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_ptMCMC_inputsx} -\alias{prep_ptMCMC_inputsx} -\title{Prepare the inputs for the ptMCMC algorithm estimation of - change points} -\usage{ -prep_ptMCMC_inputsx(data, formula, nchangepoints, timename, - weights = NULL, control = list()) -} -\arguments{ -\item{data}{Class \code{data.frame} object including [1] the time variable -(indicated in \code{control}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated -in \code{formula}).} - -\item{formula}{\code{formula} describing the continuous change. Any -predictor variable included must also be a column in the -\code{data}. Any (multinomial) response variable must also be a set of -columns in \code{data}.} - -\item{nchangepoints}{Integer corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the data -for each continuous model and each LDA model.} - -\item{timename}{\code{character} element indicating the time variable -used in the time series. Defaults to \code{"time"}. The variable must be -integer-conformable or a \code{Date}. If the variable named -is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} - -\item{weights}{Optional class \code{numeric} vector of weights for each -document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS -analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of -proportions, which does not account for size differences among documents. -For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using -\code{\link{document_weights}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -Class \code{ptMCMC_inputs} \code{list}, containing the static - inputs for use within the ptMCMC algorithm for estimating change points. -} -\description{ -Package the static inputs (controls and data structures) used - by the ptMCMC algorithm in the context of estimating change points. - \cr \cr - This function was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. It is still hardcoded to do - so, but has the capacity to be generalized to work with any estimation - via ptMCMC with additional coding work. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) -} -} diff --git a/man/prep_saves.Rd b/man/prep_saves.Rd new file mode 100644 index 00000000..2bf2ad00 --- /dev/null +++ b/man/prep_saves.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{prep_saves} +\alias{prep_saves} +\alias{update_saves} +\alias{process_saves} +\title{Prepare and update the data structures to save the LDATS classic + ptMCMC output} +\usage{ +prep_saves(TS, control = list()) + +update_saves(i, saves, steps, swaps) + +process_saves(saves, control = list()) +} +\arguments{ +\item{TS}{\code{list} time series model object.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model.} + +\item{i}{\code{integer} iteration index.} + +\item{saves}{The existing list of saved data objects.} + +\item{steps}{Chain configuration after within-temperature steps.} + +\item{swaps}{Chain configuration after among-temperature swaps.} +} +\value{ +\code{list} of ptMCMC objects: change points (\code{$cpts}), + log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances + (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). +} +\description{ +\code{prep_saves} creates the data structure used to save the + output from each iteration of the ptMCMC algorithm, which is added via + \code{update_saves}. Once the ptMCMC is complete, the saved data objects + are then processed (burn-in iterations are dropped and the remaining + iterations are thinned) via \code{process_saves}. + \cr \cr + This set of functions was designed to work within \code{\link{TS}} and + specifically \code{\link{est_changepoints}}. They are still hardcoded to + do so, but have the capacity to be generalized to work with any + estimation via ptMCMC with additional coding work. +} diff --git a/man/prep_savesx.Rd b/man/prep_savesx.Rd deleted file mode 100644 index 52c271e8..00000000 --- a/man/prep_savesx.Rd +++ /dev/null @@ -1,72 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_savesx} -\alias{prep_savesx} -\title{Prepare and update the data structures to save the ptMCMC output} -\usage{ -prep_savesx(nchangepoints, control = list()) -} -\arguments{ -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current -implementation can reasonably include up to 6 change points. The -number of change points is used to dictate the segmentation of the data -for each continuous model and each LDA model.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -\code{\link{TS_control}}.} - -\item{i}{\code{integer} iteration index.} - -\item{saves}{The existing list of saved data objects.} - -\item{steps}{Chain configuration after within-temperature steps.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -\code{list} of ptMCMC objects: change points (\code{$cpts}), - log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances - (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). -} -\description{ -\code{prep_saves} creates the data structure used to save the - output from each iteration of the ptMCMC algorithm, which is added via - \code{update_saves}. Once the ptMCMC is complete, the saved data objects - are then processed (burn-in iterations are dropped and the remaining - iterations are thinned) via \code{process_saves}. - \cr \cr - This set of functions was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. They are still hardcoded to - do so, but have the capacity to be generalized to work with any - estimation via ptMCMC with additional coding work. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - ids <- prep_ids(TS_control()) - for(i in 1:TS_control()$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - process_saves(saves, TS_control()) -} - -} diff --git a/man/prep_temp_sequencex.Rd b/man/prep_temp_sequence.Rd similarity index 66% rename from man/prep_temp_sequencex.Rd rename to man/prep_temp_sequence.Rd index 56a84df0..498a2269 100644 --- a/man/prep_temp_sequencex.Rd +++ b/man/prep_temp_sequence.Rd @@ -1,15 +1,17 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{prep_temp_sequencex} -\alias{prep_temp_sequencex} -\title{Prepare the ptMCMC temperature sequence} +% Please edit documentation in R/ldats_classic_method.R +\name{prep_temp_sequence} +\alias{prep_temp_sequence} +\title{Prepare the ptMCMC temperature sequence for the LDATS classic + method} \usage{ -prep_temp_sequencex(control = list()) +prep_temp_sequence(TS, control = list()) } \arguments{ +\item{TS}{\code{list} time series model object.} + \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by +Time Series model. Values not input assume defaults set by \code{\link{TS_control}}.} } \value{ diff --git a/man/proposed_step_mods.Rd b/man/proposed_step_mods.Rd new file mode 100644 index 00000000..1b8e2125 --- /dev/null +++ b/man/proposed_step_mods.Rd @@ -0,0 +1,26 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{proposed_step_mods} +\alias{proposed_step_mods} +\title{Fit the chunk-level models to a time series, given a set of + proposed change points within the ptMCMC algorithm} +\usage{ +proposed_step_mods(TS, prop_changepts, inputs) +} +\arguments{ +\item{prop_changepts}{\code{matrix} of proposed change points across +chains.} + +\item{inputs}{Class \code{ptMCMC_inputs} list, containing the static inputs +for use within the ptMCMC algorithm.} +} +\value{ +List of models associated with the proposed step, with an element + for each chain. +} +\description{ +This function wraps around \code{TS_memo} + (optionally memoised \code{\link{multinom_TS}}) to provide a + simpler interface within the ptMCMC algorithm and is implemented within + \code{\link{propose_step}}. +} diff --git a/man/proposed_step_modsx.Rd b/man/proposed_step_modsx.Rd deleted file mode 100644 index 3111651a..00000000 --- a/man/proposed_step_modsx.Rd +++ /dev/null @@ -1,55 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{proposed_step_modsx} -\alias{proposed_step_modsx} -\title{Fit the chunk-level models to a time series, given a set of - proposed change points within the ptMCMC algorithm} -\usage{ -proposed_step_modsx(prop_changepts, inputs) -} -\arguments{ -\item{prop_changepts}{\code{matrix} of proposed change points across -chains.} - -\item{inputs}{Class \code{ptMCMC_inputs} list, containing the static inputs -for use within the ptMCMC algorithm.} -} -\value{ -List of models associated with the proposed step, with an element - for each chain. -} -\description{ -This function wraps around \code{TS_memo} - (optionally memoised \code{\link{multinom_TS}}) to provide a - simpler interface within the ptMCMC algorithm and is implemented within - \code{\link{propose_step}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - i <- 1 - pdist <- inputs$pdist - ntemps <- length(inputs$temps) - selection <- cbind(pdist$which_steps[i, ], 1:ntemps) - prop_changepts <- cpts$changepts - curr_changepts_s <- cpts$changepts[selection] - prop_changepts_s <- curr_changepts_s + pdist$steps[i, ] - if(all(is.na(prop_changepts_s))){ - prop_changepts_s <- NULL - } - prop_changepts[selection] <- prop_changepts_s - mods <- proposed_step_mods(prop_changepts, inputs) -} - -} diff --git a/man/step_chainsx.Rd b/man/step_chains.Rd similarity index 69% rename from man/step_chainsx.Rd rename to man/step_chains.Rd index a7d4e8c8..4f69614a 100644 --- a/man/step_chainsx.Rd +++ b/man/step_chains.Rd @@ -1,10 +1,19 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{step_chainsx} -\alias{step_chainsx} +% Please edit documentation in R/ldats_classic_method.R +\name{step_chains} +\alias{step_chains} +\alias{propose_step} +\alias{eval_step} +\alias{take_step} \title{Conduct a within-chain step of the ptMCMC algorithm} \usage{ -step_chainsx(i, cpts, inputs) +step_chains(TS, i, cpts, inputs) + +propose_step(TS, i, cpts, inputs) + +eval_step(i, cpts, prop_step, inputs) + +take_step(cpts, prop_step, accept_step) } \arguments{ \item{i}{\code{integer} iteration index.} @@ -49,37 +58,6 @@ For each iteration of the ptMCMC algorithm, all of the chains accepted or not (following the Metropolis-Hastings rule; Metropolis, \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then accordingly taken or not (the configurations are updated). -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - ids <- prep_ids(TS_control()) - for(i in 1:TS_control()$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - # within step_chains() - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - i <- 1 - prop_step <- propose_step(i, cpts, inputs) - accept_step <- eval_step(i, cpts, prop_step, inputs) - take_step(cpts, prop_step, accept_step) -} - } \references{ Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. diff --git a/man/swap_chainsx.Rd b/man/swap_chains.Rd similarity index 69% rename from man/swap_chainsx.Rd rename to man/swap_chains.Rd index 582d4b4d..8bd8fa13 100644 --- a/man/swap_chainsx.Rd +++ b/man/swap_chains.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ptMCMC.R -\name{swap_chainsx} -\alias{swap_chainsx} +% Please edit documentation in R/ldats_classic_method.R +\name{swap_chains} +\alias{swap_chains} \title{Conduct a set of among-chain swaps for the ptMCMC algorithm} \usage{ -swap_chainsx(chainsin, inputs, ids) +swap_chains(chainsin, inputs, ids) } \arguments{ \item{chainsin}{Chain configuration to be evaluated for swapping.} @@ -34,31 +34,6 @@ The ptMCMC algorithm couples the chains (which are and Deem 1999) following the Metropolis criterion (Metropolis \emph{et al.} 1953). This allows them to share information and search the surface in combination (Earl and Deem 2005). -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - data <- data[order(data[,"newmoon"]), ] - saves <- prep_saves(1, TS_control()) - inputs <- prep_ptMCMC_inputs(data, gamma ~ 1, 1, "newmoon", weights, - TS_control()) - cpts <- prep_cpts(data, gamma ~ 1, 1, "newmoon", weights, TS_control()) - ids <- prep_ids(TS_control()) - for(i in 1:TS_control()$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } -} - } \references{ Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, diff --git a/man/verify_changepoint_locations.Rd b/man/verify_changepoint_locations.Rd index 144128a8..4c47f27e 100644 --- a/man/verify_changepoint_locations.Rd +++ b/man/verify_changepoint_locations.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R +% Please edit documentation in R/TS.R \name{verify_changepoint_locations} \alias{verify_changepoint_locations} \title{Verify the change points of a multinomial time series model} From b0d493e6ebcd97af3ad49100d0c3c119769681a7 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Fri, 20 Mar 2020 10:53:39 -0700 Subject: [PATCH 18/43] lots in prog --- NAMESPACE | 15 +- R/TS.R | 481 +++--------------- R/argument_checking.R | 46 ++ R/ldats_classic_method.R | 5 +- R/sequential_TS.R | 408 +++++++++++++++ R/utilities.R | 61 +++ man/check_changepoints.Rd | 23 - man/check_formula.Rd | 29 ++ man/logLik.TS.Rd | 21 + man/prep_chunks.Rd | 20 +- man/prep_pbar.Rd | 31 ++ man/prep_temp_sequence.Rd | 3 +- man/sequential_TS.Rd | 37 ++ man/summarize_etas.Rd | 34 ++ man/summarize_rhos.Rd | 35 ++ ...ns.Rd => verify_change_point_locations.Rd} | 24 +- 16 files changed, 811 insertions(+), 462 deletions(-) create mode 100644 R/argument_checking.R create mode 100644 R/sequential_TS.R delete mode 100644 man/check_changepoints.Rd create mode 100644 man/check_formula.Rd create mode 100644 man/logLik.TS.Rd create mode 100644 man/prep_pbar.Rd create mode 100644 man/sequential_TS.Rd create mode 100644 man/summarize_etas.Rd create mode 100644 man/summarize_rhos.Rd rename man/{verify_changepoint_locations.Rd => verify_change_point_locations.Rd} (58%) diff --git a/NAMESPACE b/NAMESPACE index 7c509d47..e04a01b0 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,6 @@ # Generated by roxygen2: do not edit by hand +S3method(logLik,TS) S3method(logLik,TS_fit) S3method(plot,LDA_TS) S3method(plot,LDA_VEM) @@ -11,14 +12,16 @@ export(LDA_plot_top_panel) export(TS_diagnostics_plot) export(TS_summary_plot) export(autocorr_plot) -export(check_changepoints) export(check_control) export(check_document_term_table) +export(check_formula) export(check_nreps) export(check_topics) export(count_trips) export(document_weights) export(ecdf_plot) +export(est_changepoints) +export(est_regressors) export(eta_diagnostics_plots) export(eval_step) export(iftrue) @@ -27,6 +30,8 @@ export(ilr_TS_chunk) export(ldats_classic) export(list_depth) export(logsumexp) +export(measure_eta_vcov) +export(measure_rho_vcov) export(memoise_fun) export(messageq) export(mirror_vcov) @@ -35,11 +40,13 @@ export(multinom_TS) export(multinom_TS_chunk) export(normalize) export(package_chunk_fits) +export(package_sequential_TS) export(posterior_plot) export(pred_gamma_TS_plot) export(prep_chunks) export(prep_cpts) export(prep_ids) +export(prep_pbar) export(prep_proposal_dist) export(prep_ptMCMC_inputs) export(prep_saves) @@ -50,6 +57,7 @@ export(proposed_step_mods) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) +export(sequential_TS) export(set_LDA_TS_plot_cols) export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) @@ -60,14 +68,17 @@ export(sim_LDA_data) export(sim_TS_data) export(softmax) export(step_chains) +export(summarize_etas) +export(summarize_rhos) export(swap_chains) export(take_step) export(trace_plot) export(update_cpts) export(update_ids) export(update_list) +export(update_pbar) export(update_saves) -export(verify_changepoint_locations) +export(verify_change_point_locations) importFrom(coda,HPDinterval) importFrom(coda,as.mcmc) importFrom(coda,autocorr) diff --git a/R/TS.R b/R/TS.R index e28bc14c..78b56715 100644 --- a/R/TS.R +++ b/R/TS.R @@ -7,7 +7,7 @@ # generally pretty well working, needs to get tidied up considerably tho # pull redundant code out into functions etc # and figure out better namings etc -# also make sure when no changepoint that it still says estimating regressor +# also make sure when no change point that it still says estimating regressor @@ -28,291 +28,6 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, -select_TS <- function(TSs, control = list()){ - - vals <- measure_TS(TSs = TSs, control = control) - fun <- control$selector_function - args <- update_list(control$selector_args, x = vals) - selection <- do.call(what = fun, args = args) - TSs[selection] -} - -measure_TS <- function(TSs, control = list()){ - fun <- control$measurer_function - args <- control$measurer_args - nTSs <- length(TSs) - vals <- rep(NA, nTSs) - for(i in 1:nTSs){ - args <- update_list(args, object = TSs[[i]]) - vals_i <- do.call(what = fun, args = args) - if(length(vals_i) != 0){ - vals[i] <- vals_i - } - } - vals -} - - - -package_TS <- function(selected_TSs, TSs, control = list()){ - out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) - class(out) <- c("TS_set", "list") - out -} - - - - - - -TS_control <- function(response = "multinom", - method = "ldats_classic", - method_args = list(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, - burnin = 0, thin_frac = 1, - memoise = TRUE, - quiet = FALSE), - summary_prob = 0.95, - measurer_function = AIC, - measurer_args = list(), - selector_function = which.min, - selector_args = list(), - soften = TRUE, - quiet = FALSE){ - list(response = response, method = method, method_args = method_args, - measurer_function = measurer_function, measurer_args = measurer_args, - selector_function = selector_function, selector_args = selector_args, - summary_prob = summary_prob, soften = soften, quiet = quiet) -} - - -sequential_TS <- function(TS, control = list()){ - control <- do.call("TS_control", control) - TS_msg(TS = TS, quiet = control$quiet) - rho_dist <- est_changepoints(TS = TS, control = control) - eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) - - package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist, - control = control) -} - -package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ - - - if(is.null(rho_dist)){ - focal_rho_dist <- NULL - data <- TS$data$train$ts_data - fun <- eval(parse(text = paste0(TS$response, "_TS"))) - args <- list(data = data, formula = TS$formula, changepoints = NULL, - timename = TS$timename, weights = TS$weights, - control = control$method_args) - mod <- soft_call(fun, args, TRUE) - lls <- as.numeric(logLik(mod)) - - - - } else{ - vals <- rho_dist$cpts[ , 1, , drop = FALSE] - dims <- dim(rho_dist$cpts)[c(1, 3)] - lls <- rho_dist$lls[1, ] - focal_rho_dist <- t(array(vals, dim = dims)) - } - - - rho_summary <- summarize_rhos(rhos = focal_rho_dist, control = control) - rho_vcov <- measure_rho_vcov(rhos = focal_rho_dist) - eta_summary <- summarize_etas(etas = eta_dist, control = control) - eta_vcov <- measure_eta_vcov(etas = eta_dist) - - logLik <- mean(lls) - ncoefs <- ncol(eta_dist) - nparams <- TS$nchangepoints + ncoefs - - out <- update_list(TS, focal_rhos = focal_rho_dist, rhos = rho_dist, - etas = eta_dist, rho_summary = rho_summary, - rho_vcov = rho_vcov, eta_summary = eta_summary, - eta_vcov = eta_vcov, logLik = logLik, nparams = nparams) - class(out) <- c("TS", "list") - to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", - "focal_rhos", "rho_vcov", "eta_vcov") - if (TS$nchangepoints == 0){ - to_hide <- c(to_hide, "rho_summary") - } - attr(out, "hidden") <- to_hide - out -} - - - - - - -print.TS <- function(x, ...){ - hid <- attr(x, "hidden") - notHid <- !(names(x) %in% hid) - print(x[notHid]) -} - - -summarize_etas <- function(etas, control = list()){ - check_control(control) - control <- do.call("TS_control", control) - if (!is.matrix(etas)){ - stop("etas should be a matrix") - } - prob <- control$summary_prob - Mean <- round(apply(etas, 2, mean), 4) - Median <- round(apply(etas, 2, median), 4) - SD <- round(apply(etas, 2, sd), 4) - MCMCerr <- round(SD / sqrt(nrow(etas)), 4) - HPD <- HPDinterval(as.mcmc(etas), prob = prob) - Lower <- round(HPD[ , "lower"], 4) - Upper <- round(HPD[ , "upper"], 4) - AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), - error = function(x){"-"}) - ESS <- effectiveSize(etas) - out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[7] <- "AC10" - rownames(out) <- colnames(etas) - out -} - -measure_eta_vcov <- function(etas){ - if (!is.matrix(etas)){ - stop("expecting etas to be a matrix") - } - out <- var(etas) - colnames(out) <- colnames(etas) - rownames(out) <- colnames(etas) - out -} -summarize_rhos <- function(rhos, control = list()){ - if (is.null(rhos)) { - return() - } - prob <- control$summary_prob - Mean <- round(apply(rhos, 2, mean), 2) - Median <- apply(rhos, 2, median) - Mode <- apply(rhos, 2, modalvalue) - SD <- round(apply(rhos, 2, sd), 2) - MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) - HPD <- HPDinterval(as.mcmc(rhos), prob = prob) - Lower <- HPD[ , "lower"] - Upper <- HPD[ , "upper"] - AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) - ESS <- effectiveSize(rhos) - out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) - colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) - colnames(out)[8] <- "AC10" - rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) - out -} - -measure_rho_vcov <- function(rhos){ - if (is.null(rhos)) { - return() - } - if (!is.matrix(rhos)){ - stop("expecting rhos to be a matrix") - } - out <- var(rhos) - colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) - rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) - out -} - - - - -est_changepoints <- function(TS, control = list()){ - if (TS$nchangepoints == 0){ - return(NULL) - } - fun <- control$method - args <- list(TS = TS, control = control$method_args) - soft_call(fun = fun, args = args, soften = control$soften) -} - - -est_regressors <- function(rho_dist, TS, control = list()){ - data <- TS$data$train$ts_data - if(is.null(rho_dist)){ - fun <- eval(parse(text = paste0(TS$response, "_TS"))) - args <- list(data = data, formula = TS$formula, changepoints = NULL, - timename = TS$timename, weights = TS$weights, - control = control$method_args) - mod <- soft_call(fun, args, TRUE) - - mod <- mod[[1]][[1]] - mv <- as.vector(t(coef(mod))) - vcv <- mirror_vcov(mod) - eta <- rmvnorm(control$method_args$nit, mv, vcv) - seg_names <- rep(1, ncol(vcv)) - coef_names <- colnames(vcv) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - return(eta) - } - - - focal_rho <- rho_dist$cpts[ , 1, ] - nchangepts <- dim(rho_dist$cpts)[1] - if (nchangepts == 1){ - collapsedrho <- focal_rho - } else{ - collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") - } - freq_r <- table(collapsedrho) - unique_r <- names(freq_r) - nr <- length(unique_r) - n_topic <- ncol(data$gamma) - n_covar <- length(attr(terms(TS$formula), "term.labels")) - n_eta_segment <- (n_topic - 1) * (n_covar + 1) - n_changept <- dim(rho_dist$cpts)[1] - n_segment <- n_changept + 1 - n_eta <- n_eta_segment * n_segment - n_iter <- dim(rho_dist$cpts)[3] - eta <- matrix(NA, nrow = n_iter, ncol = n_eta) - pbar <- prep_pbar(control = control, bar_type = "eta", nr = nr) - - for(i in 1:nr){ - update_pbar(pbar = pbar, control = control) - cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) - - - data <- TS$data$train$ts_data - fun <- eval(parse(text = paste0(TS$response, "_TS"))) - fun <- memoise_fun(fun, control$method_args$memoise) - args <- list(data = data, formula = TS$formula, changepoints = cpts, - timename = TS$timename, weights = TS$weights, - control = control$method_args) - mod <- soft_call(fun, args, TRUE) - - - ndraws <- freq_r[i] - colindex1 <- 1 - for(j in 1:n_segment){ - colindex2 <- colindex1 + n_eta_segment - 1 - seg_mod <- mod[[1]][[j]] - mv <- as.vector(t(coef(seg_mod))) - vcv <- mirror_vcov(seg_mod) - drawn <- rmvnorm(ndraws, mv, vcv) - rows_in <- which(collapsedrho == unique_r[i]) - cols_in <- colindex1:colindex2 - eta[rows_in, cols_in] <- drawn - colindex1 <- colindex2 + 1 - } - } - seg_names <- rep(1:n_segment, each = n_eta_segment) - coef_names <- rep(colnames(vcv), n_segment) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - eta - - -} - - prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ @@ -364,133 +79,119 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, } name_tab <- data.frame(paste("LDA", tab[ , 1]), paste(",", tab[ , 2]), - paste(",", tab[ , 3], "changepoints")) + paste(",", tab[ , 3], "change points")) names(TSs) <- apply(name_tab, 1, paste0, collapse = "") TSs + } +select_TS <- function(TSs, control = list()){ + + vals <- measure_TS(TSs = TSs, control = control) + fun <- control$selector_function + args <- update_list(control$selector_args, x = vals) + selection <- do.call(what = fun, args = args) + TSs[selection] +} + +measure_TS <- function(TSs, control = list()){ + fun <- control$measurer_function + args <- control$measurer_args + nTSs <- length(TSs) + vals <- rep(NA, nTSs) + for(i in 1:nTSs){ + args <- update_list(args, object = TSs[[i]]) + vals_i <- do.call(what = fun, args = args) + if(length(vals_i) != 0){ + vals[i] <- vals_i + } + } + vals +} -TS_msg <- function(TS, quiet = FALSE){ - subset_msg <- paste0(" - data subset ", TS$data_subset) - topic_msg <- paste0(", ", TS$topics, " topics") - rep_msg <- paste0(", replicate ", TS$rep) - formula_msg <- paste0(", ", deparse(TS$formula)) - nchangepoints <- TS$nchangepoints - txt <- ifelse(nchangepoints == 1, " changepoint", " changepoints") - changepoints_msg <- paste0(", ", nchangepoints, txt) - msg <- paste0(subset_msg, topic_msg, rep_msg, formula_msg, changepoints_msg) - messageq(msg, quiet) +package_TS <- function(selected_TSs, TSs, control = list()){ + out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) + class(out) <- c("TS_set", "list") + out } -check_formula <- function(data, formula){ - if (!is(formula, "formula")){ - stop("formula does not contain a single formula") - } - respLoc <- attr(terms(formula), "response") - if (respLoc == 0){ - stop("formula inputs should include response variable") - } - resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] - pred <- attr(terms(formula), "term.labels") - if (!resp %in% colnames(data)){ - stop("formula includes response not present in data") - } - if (!all(pred %in% colnames(data))){ - misses <- pred[which(pred %in% colnames(data) == FALSE)] - mis <- paste(misses, collapse = ", ") - stop(paste0("formula includes predictors not present in data: ", mis)) - } - return() +TS_control <- function(response = "multinom", + method = "ldats_classic", + method_args = list(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + memoise = TRUE, + quiet = FALSE), + summary_prob = 0.95, + measurer_function = AIC, + measurer_args = list(), + selector_function = which.min, + selector_args = list(), + soften = TRUE, + quiet = FALSE){ + list(response = response, method = method, method_args = method_args, + measurer_function = measurer_function, measurer_args = measurer_args, + selector_function = selector_function, selector_args = selector_args, + summary_prob = summary_prob, soften = soften, quiet = quiet) } -prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ - if (!(bar_type %in% c("eta", "rho"))){ - stop("bar_type must be eta or rho") - } - if (!is.null(nr)){ - if (!is.numeric(nr) || any(nr %% 1 != 0)){ - stop("nr must be integer-valued") - } - } - form <- " [:bar] :percent eta: :eta" - if (bar_type == "rho"){ - msg <- " Estimating changepoint distribution" - out <- progress_bar$new(form, control$nit, width = 60) - } - if (bar_type == "eta"){ - msg <- " Estimating regressor distribution" - out <- progress_bar$new(form, nr, width = 60) - } - messageq(msg, control$quiet) - out -} -update_pbar <- function(pbar, control = list()){ - if (!("progress_bar" %in% class(pbar))){ - stop("pbar must be of class progress_bar") - } - if (control$quiet){ - return() - } - pbar$tick() -} -logLik.TS <- function(object, ...){ - val <- object$logLik - attr(val, "df") <- object$nparams - attr(val, "nobs") <- nrow(object$data) - class(val) <- "logLik" - val + + + + +print.TS <- function(x, ...){ + hid <- attr(x, "hidden") + notHid <- !(names(x) %in% hid) + print(x[notHid]) } -#' @title Check that a set of change point locations is proper -#' -#' @description Check that the change point locations are \code{numeric} -#' and conformable to \code{interger} values. -#' -#' @param changepoints Change point locations to evaluate. -#' -#' @return An error message is thrown if \code{changepoints} are not proper, -#' else \code{NULL}. +#' @title Determine the log likelihood of a Time Series model +#' +#' @description Convenience function to extract and format the log likelihood +#' of a \code{TS}-class object fit by \code{\link{sequential_TS}}. +#' +#' @param object Class \code{TS} object to be evaluated. #' -#' @examples -#' check_changepoints(100) +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return Log likelihood of the model \code{logLik}, also with \code{df} +#' (degrees of freedom) and \code{nobs} (number of observations) values. #' #' @export #' -check_changepoints <- function(changepoints = NULL){ - if (is.null(changepoints)){ - return() - } - if (!is.numeric(changepoints) || any(changepoints %% 1 != 0)){ - stop("changepoints must be integer-valued") - } +logLik.TS <- function(object, ...){ + val <- object$logLik + attr(val, "df") <- object$nparams + attr(val, "nobs") <- nrow(object$data) + class(val) <- "logLik" + val } - -#' @title Prepare the time chunk table for a multinomial change point -#' Time Series model +#' @title Prepare the time chunk table for a change point Time Series model #' #' @description Creates the table containing the start and end times for each #' chunk within a time series, based on the change points (used to break up #' the time series) and the range of the time series. If there are no -#' change points (i.e. \code{changepoints} is \code{NULL}, there is still a +#' change points (i.e. \code{change points} is \code{NULL}, there is still a #' single chunk defined by the start and end of the time series. #' #' @param data Class \code{data.frame} object including the predictor and #' response variables, but specifically here containing the column indicated #' by the \code{timename} input. #' -#' @param changepoints Numeric vector indicating locations of the change +#' @param change points Numeric vector indicating locations of the change #' points. Must be conformable to \code{integer} values. #' #' @param timename \code{character} element indicating the time variable @@ -502,25 +203,16 @@ check_changepoints <- function(changepoints = NULL){ #' @return \code{data.frame} of \code{start} and \code{end} times (columns) #' for each chunk (rows). #' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' chunks <- prep_chunks(dct, changepoints = 100, timename = "newmoon") -#' #' @export #' -prep_chunks <- function(data, changepoints = NULL, - timename = "time"){ +prep_chunks <- function(data, changepoints = NULL, timename = "time"){ start <- c(min(data[ , timename]), changepoints + 1) end <- c(changepoints, max(data[ , timename])) data.frame(start, end) } -#' @title Verify the change points of a multinomial time series model +#' @title Verify the change points of a time series model #' #' @description Verify that a time series can be broken into a set #' of chunks based on input change points. @@ -528,7 +220,7 @@ prep_chunks <- function(data, changepoints = NULL, #' @param data Class \code{data.frame} object including the predictor and #' response variables. #' -#' @param changepoints Numeric vector indicating locations of the change +#' @param change points Numeric vector indicating locations of the change #' points. Must be conformable to \code{integer} values. #' #' @param timename \code{character} element indicating the time variable @@ -540,28 +232,19 @@ prep_chunks <- function(data, changepoints = NULL, #' @return Logical indicator of the check passing \code{TRUE} or failing #' \code{FALSE}. #' -#' @examples -#' data(rodents) -#' dtt <- rodents$document_term_table -#' lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) -#' dct <- rodents$document_covariate_table -#' dct$gamma <- lda[[1]]@gamma -#' verify_changepoint_locations(dct, changepoints = 100, -#' timename = "newmoon") -#' #' @export #' verify_changepoint_locations <- function(data, changepoints = NULL, timename = "time"){ - if (is.null(changepoints)){ return(TRUE) } - first_time <- min(data[ , timename]) last_time <- max(data[ , timename]) time_check <- any(changepoints <= first_time | changepoints >= last_time) sort_check <- is.unsorted(changepoints, strictly = TRUE) - !(time_check | sort_check) } + + + diff --git a/R/argument_checking.R b/R/argument_checking.R new file mode 100644 index 00000000..46f5ad0a --- /dev/null +++ b/R/argument_checking.R @@ -0,0 +1,46 @@ +#' @title Check that a formula is proper +#' +#' @description Check that \code{formula} is actually a +#' \code{\link[stats]{formula}} and that the +#' response and predictor variables are all included in \code{data}. +#' +#' @param formula \code{formula} to evaluate. +#' +#' @param data \code{data.frame} including [1] the time variable (indicated +#' in \code{timename}), [2] the predictor variables (required by +#' \code{formula}) and [3], the multinomial response variable (indicated in +#' \code{formula}) as verified by \code{\link{check_timename}} and +#' \code{\link{check_formula}}. Note that the response variables should be +#' formatted as a \code{data.frame} object named as indicated by the +#' \code{response} entry in the \code{control} list, such as \code{gamma} +#' for a standard TS analysis on LDA output. +#' +#' @return An error message is thrown if \code{formula} is not proper, +#' else \code{NULL}. +#' +#' @export +#' +check_formula <- function(data, formula){ + + if (!is(formula, "formula")){ + stop("formula does not contain a single formula") + } + + respLoc <- attr(terms(formula), "response") + if (respLoc == 0){ + stop("formula inputs should include response variable") + } + + resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] + pred <- attr(terms(formula), "term.labels") + if (!resp %in% colnames(data)){ + stop("formula includes response not present in data") + } + if (!all(pred %in% colnames(data))){ + misses <- pred[which(pred %in% colnames(data) == FALSE)] + mis <- paste(misses, collapse = ", ") + stop(paste0("formula includes predictors not present in data: ", mis)) + } + return() +} + diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index 4d1523d8..b51f1c8e 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -95,8 +95,6 @@ count_trips <- function(ids){ - - #' @title Conduct a set of among-chain swaps for the ptMCMC algorithm #' #' @description This function handles the among-chain swapping based on @@ -256,8 +254,7 @@ update_cpts <- function(cpts, swaps){ #' This function was designed to work within \code{\link{TS}} and #' \code{\link{est_changepoints}} specifically, but has been generalized #' and would work with any ptMCMC model as long as \code{control} -#' includes the relevant control parameters (and provided that the -#' \code{\link{check_control}} function and its use here are generalized). +#' includes the relevant control parameters. #' #' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by diff --git a/R/sequential_TS.R b/R/sequential_TS.R new file mode 100644 index 00000000..08822bbc --- /dev/null +++ b/R/sequential_TS.R @@ -0,0 +1,408 @@ +#' @title Estimate a Time Series model sequentially +#' +#' @description This set of functions estimates the Time Series model +#' by sequential methods that first estimate the change point locations +#' with full flexibility of the regressor models between change points, +#' then estimate the regressors between the change points, intially +#' conditional on their locations, but with marginal estimation to produce +#' regressor values unconditional on change point locations. +#' \code{sequential_TS} combines each stage of the model estimation and +#' packages the model results in a consistent output. +#' \code{est_changepoints} estimates the change point location +#' distributions for multinomial Time Series analyses. +#' \code{est_regressors} uses the marginal posterior distributions of +#' the change point locations (estimated by +#' \code{\link{est_changepoints}}) in combination with the conditional +#' (on the change point locations) posterior distributions of the +#' regressors (estimated by a \code{_TS} function) to +#' estimate the marginal posterior distribution of the regressors, +#' unconditional on the change point locations. +#' \code{package_sequential_TS} calculates relevant summaries for the run of +#' a sequenial Time Series model within \code{\link{sequential_TS}} and +#' packages the output as a \code{TS}-class object. +#' \code{sequential_TS_msg} produces a specific message about the model +#' being run. +#' +#' @param rho_dist \code{list} of saved data objects from the estimation of +#' change point locations (unless \code{nchangepoints} is 0, then +#' \code{NULL}) returned from \code{\link{est_changepoints}}. +#' +#' @param eta_dist \code{matrix} of draws (rows) from the marginal posteriors +#' of the coefficients across the segments (columns), as estimated by +#' \code{\link{est_regressors}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @details The general approach follows that of Western and Kleykamp +#' (2004), although we note some important differences. Our regression +#' models are fit independently for each chunk (segment of time), and +#' therefore the variance-covariance matrix for the full model +#' has \code{0} entries for covariances between regressors in different +#' chunks of the time series. Further, because the regression model here +#' is a standard (non-hierarchical) softmax (Ripley 1996, Venables and +#' Ripley 2002, Bishop 2006), there is no error term in the regression +#' (as there is in the normal model used by Western and Kleykamp 2004), +#' and so the posterior distribution used here is a multivariate normal, +#' as opposed to a multivariate t, as used by Western and Kleykamp (2004). +#' +#' @references +#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. +#' Springer, New York, NY, USA. +#' +#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. +#' Cambridge University Press, Cambridge, UK. +#' +#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. +#' +#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for +#' historical time series analysis. \emph{Political Analysis} +#' \strong{12}:354-374. +#' \href{https://doi.org/10.1093/pan/mph023}{link}. +#' +#' @return +#' \code{est_changepoints}: \code{list} of saved data objects from the +#' estimation of change point locations, uunless \code{nchangepoints} +#' is 0, then \code{NULL}. +#' \code{est_regressors}: \code{matrix} of draws (rows) from the marginal +#' posteriors of the coefficients across the segments (columns). +#' \code{sequential_TS} and \code{package_sequential_TS}: +#' \code{TS}-class list containing the following elements, many of +#' which are hidden for \code{print}ing, but are accessible: +#' \describe{ +#' \item{data}{\code{data} input to the function.} +#' \item{formula}{\code{\link[stats]{formula}} input to the function.} +#' \item{nchangepoints}{\code{nchangepoints} input to the function.} +#' \item{weights}{\code{weights} input to the function.} +#' \item{timename}{\code{timename} input to the function.} +#' \item{control}{\code{control} input to the function.} +#' \item{lls}{Iteration-by-iteration +#' \link[=logLik.multinom_TS_fit]{logLik} values for the +#' full time series fit by \code{\link{multinom_TS}}.} +#' \item{rhos}{Iteration-by-iteration change point estimates from +#' \code{\link{est_changepoints}} and diagnostics.} +#' \item{focal_rhos}{Simplified object of just the change point +#' locations of interest.} +#' \item{etas}{Iteration-by-iteration marginal regressor estimates from +#' \code{\link{est_regressors}}, which have been +#' unconditioned with respect to change point locations.} +#' \item{rho_summary}{Summary table describing \code{rhos} (the change +#' point locations), see +#' \code{\link{summarize_rhos}}.} +#' \item{rho_vcov}{Variance-covariance matrix for the estimates of +#' \code{rhos} (the change point locations), see +#' \code{\link{measure_rho_vcov}}.} +#' \item{eta_summary}{Summary table describing \code{ets} (the +#' regressors), see +#' \code{\link{summarize_etas}}.} +#' \item{eta_vcov}{Variance-covariance matrix for the estimates of +#' \code{etas} (the regressors), see +#' \code{\link{measure_eta_vcov}}.} +#' \item{logLik}{Across-iteration average of log-likelihoods +#' (\code{lls}).} +#' \item{nparams}{Total number of parameters in the full model, +#' including the change point locations and regressors.} +#' } +#' +#' @export +#' +sequential_TS <- function(TS, control = list()){ + control <- do.call("TS_control", control) + sequential_TS_msg(TS = TS, control = control) + rho_dist <- est_changepoints(TS = TS, control = control) + eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) + package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist, + control = control) +} + +#' +#' @rdname sequential_TS +#' +#' @export +#' +package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ + + + if(is.null(rho_dist)){ + focal_rho_dist <- NULL + data <- TS$data$train$ts_data + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + args <- list(data = data, formula = TS$formula, changepoints = NULL, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + lls <- as.numeric(logLik(mod)) + + + + } else{ + vals <- rho_dist$cpts[ , 1, , drop = FALSE] + dims <- dim(rho_dist$cpts)[c(1, 3)] + lls <- rho_dist$lls[1, ] + focal_rho_dist <- t(array(vals, dim = dims)) + } + + + rho_summary <- summarize_rhos(rhos = focal_rho_dist, control = control) + rho_vcov <- measure_rho_vcov(rhos = focal_rho_dist) + eta_summary <- summarize_etas(etas = eta_dist, control = control) + eta_vcov <- measure_eta_vcov(etas = eta_dist) + + logLik <- mean(lls) + ncoefs <- ncol(eta_dist) + nparams <- TS$nchangepoints + ncoefs + + out <- update_list(TS, focal_rhos = focal_rho_dist, rhos = rho_dist, + etas = eta_dist, rho_summary = rho_summary, + rho_vcov = rho_vcov, eta_summary = eta_summary, + eta_vcov = eta_vcov, logLik = logLik, nparams = nparams) + class(out) <- c("TS", "list") + to_hide <- c("data", "weights", "control", "lls", "rhos", "etas", + "focal_rhos", "rho_vcov", "eta_vcov") + if (TS$nchangepoints == 0){ + to_hide <- c(to_hide, "rho_summary") + } + attr(out, "hidden") <- to_hide + out +} + +#' +#' @rdname sequential_TS +#' +#' @export +#' +est_changepoints <- function(TS, control = list()){ + if (TS$nchangepoints == 0){ + return(NULL) + } + fun <- control$method + args <- list(TS = TS, control = control$method_args) + soft_call(fun = fun, args = args, soften = control$soften) +} + +#' +#' @rdname sequential_TS +#' +#' @export +#' +est_regressors <- function(rho_dist, TS, control = list()){ + data <- TS$data$train$ts_data + if(is.null(rho_dist)){ + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + args <- list(data = data, formula = TS$formula, changepoints = NULL, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + + mod <- mod[[1]][[1]] + mv <- as.vector(t(coef(mod))) + vcv <- mirror_vcov(mod) + eta <- rmvnorm(control$method_args$nit, mv, vcv) + seg_names <- rep(1, ncol(vcv)) + coef_names <- colnames(vcv) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + return(eta) + } + + + focal_rho <- rho_dist$cpts[ , 1, ] + nchangepts <- dim(rho_dist$cpts)[1] + if (nchangepts == 1){ + collapsedrho <- focal_rho + } else{ + collapsedrho <- apply(focal_rho, 2, paste, collapse = "_") + } + freq_r <- table(collapsedrho) + unique_r <- names(freq_r) + nr <- length(unique_r) + n_topic <- ncol(data$gamma) + n_covar <- length(attr(terms(TS$formula), "term.labels")) + n_eta_segment <- (n_topic - 1) * (n_covar + 1) + n_changept <- dim(rho_dist$cpts)[1] + n_segment <- n_changept + 1 + n_eta <- n_eta_segment * n_segment + n_iter <- dim(rho_dist$cpts)[3] + eta <- matrix(NA, nrow = n_iter, ncol = n_eta) + pbar <- prep_pbar(control = control, bar_type = "eta", nr = nr) + + for(i in 1:nr){ + update_pbar(pbar = pbar, control = control) + cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) + + + data <- TS$data$train$ts_data + fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- memoise_fun(fun, control$method_args$memoise) + args <- list(data = data, formula = TS$formula, changepoints = cpts, + timename = TS$timename, weights = TS$weights, + control = control$method_args) + mod <- soft_call(fun, args, TRUE) + + + ndraws <- freq_r[i] + colindex1 <- 1 + for(j in 1:n_segment){ + colindex2 <- colindex1 + n_eta_segment - 1 + seg_mod <- mod[[1]][[j]] + mv <- as.vector(t(coef(seg_mod))) + vcv <- mirror_vcov(seg_mod) + drawn <- rmvnorm(ndraws, mv, vcv) + rows_in <- which(collapsedrho == unique_r[i]) + cols_in <- colindex1:colindex2 + eta[rows_in, cols_in] <- drawn + colindex1 <- colindex2 + 1 + } + } + seg_names <- rep(1:n_segment, each = n_eta_segment) + coef_names <- rep(colnames(vcv), n_segment) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + eta +} + +#' +#' @rdname sequential_TS +#' +#' @export +#' +sequential_TS_msg <- function(TS, control = list()){ + subset_msg <- paste0(" - data subset ", TS$data_subset) + topic_msg <- paste0(", ", TS$topics, " topics") + rep_msg <- paste0(", replicate ", TS$rep) + + formula_msg <- paste0(", ", deparse(TS$formula)) + nchangepoints <- TS$nchangepoints + txt <- ifelse(nchangepoints == 1, " change point", " change points") + changepoints_msg <- paste0(", ", nchangepoints, txt) + msg <- paste0(subset_msg, topic_msg, rep_msg, formula_msg, changepoints_msg) + messageq(msg, control$quiet) +} + + +#' @title Summarize the regressor (eta) distributions of a time series model +#' +#' @description \code{summarize_etas} calculates summary statistics for each +#' of the chunk-level regressors. +#' \cr \cr +#' \code{measure_ets_vcov} generates the variance-covariance matrix for +#' the regressors. +#' +#' @param etas Matrix of regressors (columns) across iterations of the +#' sampler (rows), as returned from \code{\link{est_regressors}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @return \code{summarize_etas}: table of summary statistics for chunk-level +#' regressors including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each regressor. \cr \cr +#' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level +#' regressors. +#' +#' @export +#' +summarize_etas <- function(etas, control = list()){ + control <- do.call("TS_control", control) + if (!is.matrix(etas)){ + stop("etas should be a matrix") + } + prob <- control$summary_prob + Mean <- round(apply(etas, 2, mean), 4) + Median <- round(apply(etas, 2, median), 4) + SD <- round(apply(etas, 2, sd), 4) + MCMCerr <- round(SD / sqrt(nrow(etas)), 4) + HPD <- HPDinterval(as.mcmc(etas), prob = prob) + Lower <- round(HPD[ , "lower"], 4) + Upper <- round(HPD[ , "upper"], 4) + AC10 <- tryCatch(t(round(autocorr.diag(as.mcmc(etas), lag = 10), 4)), + error = function(x){"-"}) + ESS <- effectiveSize(etas) + out <- data.frame(Mean, Median, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[3:4] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[7] <- "AC10" + rownames(out) <- colnames(etas) + out +} + +#' +#' @rdname summarize_etas +#' +#' @export +#' +measure_eta_vcov <- function(etas){ + if (!is.matrix(etas)){ + stop("expecting etas to be a matrix") + } + out <- var(etas) + colnames(out) <- colnames(etas) + rownames(out) <- colnames(etas) + out +} + +#' @title Summarize the rho distributions +#' +#' @description \code{summarize_rho} calculates summary statistics for each +#' of the change point locations. +#' \cr \cr +#' \code{measure_rho_vcov} generates the variance-covariance matrix for the +#' change point locations. +#' +#' @param rhos Matrix of change point locations (columns) across iterations of +#' the sampler (rows) or \code{NULL} if no change points are in the model, +#' as returned from \code{\link{est_change points}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @return \code{summarize_rhos}: table of summary statistics for change point +#' locations including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each change point location. \cr \cr +#' \code{measure_rho_vcov}: variance-covariance matrix for change +#' point locations. +#' +#' @export +#' +summarize_rhos <- function(rhos, control = list()){ + if (is.null(rhos)) { + return() + } + prob <- control$summary_prob + Mean <- round(apply(rhos, 2, mean), 2) + Median <- apply(rhos, 2, median) + Mode <- apply(rhos, 2, modalvalue) + SD <- round(apply(rhos, 2, sd), 2) + MCMCerr <- round(SD / sqrt(nrow(rhos)), 4) + HPD <- HPDinterval(as.mcmc(rhos), prob = prob) + Lower <- HPD[ , "lower"] + Upper <- HPD[ , "upper"] + AC10 <- t(round(autocorr.diag(as.mcmc(rhos), lag = 10), 4)) + ESS <- effectiveSize(rhos) + out <- data.frame(Mean, Median, Mode, Lower, Upper, SD, MCMCerr, AC10, ESS) + colnames(out)[4:5] <- paste0(c("Lower_", "Upper_"), paste0(prob*100, "%")) + colnames(out)[8] <- "AC10" + rownames(out) <- sprintf("Changepoint_%d", seq_len(nrow(out))) + out +} + +#' +#' @rdname summarize_rhos +#' +#' @export +#' +measure_rho_vcov <- function(rhos){ + if (is.null(rhos)) { + return() + } + if (!is.matrix(rhos)){ + stop("expecting rhos to be a matrix") + } + out <- var(rhos) + colnames(out) <- sprintf("CP_%d", 1:dim(out)[1]) + rownames(out) <- sprintf("CP_%d", 1:dim(out)[2]) + out +} diff --git a/R/utilities.R b/R/utilities.R index 6ebddac6..5528cc91 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -20,6 +20,67 @@ time_order_data <- function(x, timename = "time"){ x[time_order , ] } + +#' @title Initialize and tick through the progress bar +#' +#' @description \code{prep_pbar} creates and \code{update_pbar} steps +#' through the progress bars (if desired) in, e.g., \code{\link{TS}} +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' iterative model. +#' +#' @param bar_type \code{character} value of possible types of progress bars. +#' Currently available options are "rho" (for change point locations) and +#' "eta" (for time series regressors). +#' +#' @param nr \code{integer} number of unique realizations, needed when +#' \code{bar_type} = "eta". +#' +#' @param pbar The progress bar object returned from \code{prep_pbar}. +#' +#' @return +#' \code{prep_pbar}: the initialized progress bar object. \cr \cr +#' \code{update_pbar}: the ticked-forward \code{pbar}. +#' +#' @export +#' +prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ + if (!(bar_type %in% c("eta", "rho"))){ + stop("bar_type must be eta or rho") + } + if (!is.null(nr)){ + if (!is.numeric(nr) || any(nr %% 1 != 0)){ + stop("nr must be integer-valued") + } + } + form <- " [:bar] :percent eta: :eta" + if (bar_type == "rho"){ + msg <- " Estimating change point distribution" + out <- progress_bar$new(form, control$nit, width = 60) + } + if (bar_type == "eta"){ + msg <- " Estimating regressor distribution" + out <- progress_bar$new(form, nr, width = 60) + } + messageq(msg, control$quiet) + out +} + +#' @rdname prep_pbar +#' +#' @export +#' +update_pbar <- function(pbar, control = list()){ + if (!("progress_bar" %in% class(pbar))){ + stop("pbar must be of class progress_bar") + } + if (control$quiet){ + return() + } + pbar$tick() +} + + #' @title Determine the depth of a list #' #' @description Evaluate an input for the depth of its nesting. diff --git a/man/check_changepoints.Rd b/man/check_changepoints.Rd deleted file mode 100644 index 27e009d1..00000000 --- a/man/check_changepoints.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{check_changepoints} -\alias{check_changepoints} -\title{Check that a set of change point locations is proper} -\usage{ -check_changepoints(changepoints = NULL) -} -\arguments{ -\item{changepoints}{Change point locations to evaluate.} -} -\value{ -An error message is thrown if \code{changepoints} are not proper, - else \code{NULL}. -} -\description{ -Check that the change point locations are \code{numeric} - and conformable to \code{interger} values. -} -\examples{ - check_changepoints(100) - -} diff --git a/man/check_formula.Rd b/man/check_formula.Rd new file mode 100644 index 00000000..9321ec31 --- /dev/null +++ b/man/check_formula.Rd @@ -0,0 +1,29 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/argument_checking.R +\name{check_formula} +\alias{check_formula} +\title{Check that a formula is proper} +\usage{ +check_formula(data, formula) +} +\arguments{ +\item{data}{\code{data.frame} including [1] the time variable (indicated +in \code{timename}), [2] the predictor variables (required by +\code{formula}) and [3], the multinomial response variable (indicated in +\code{formula}) as verified by \code{\link{check_timename}} and +\code{\link{check_formula}}. Note that the response variables should be +formatted as a \code{data.frame} object named as indicated by the +\code{response} entry in the \code{control} list, such as \code{gamma} +for a standard TS analysis on LDA output.} + +\item{formula}{\code{formula} to evaluate.} +} +\value{ +An error message is thrown if \code{formula} is not proper, + else \code{NULL}. +} +\description{ +Check that \code{formula} is actually a + \code{\link[stats]{formula}} and that the + response and predictor variables are all included in \code{data}. +} diff --git a/man/logLik.TS.Rd b/man/logLik.TS.Rd new file mode 100644 index 00000000..3977fbea --- /dev/null +++ b/man/logLik.TS.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{logLik.TS} +\alias{logLik.TS} +\title{Determine the log likelihood of a Time Series model} +\usage{ +\method{logLik}{TS}(object, ...) +} +\arguments{ +\item{object}{Class \code{TS} object to be evaluated.} + +\item{...}{Not used, simply included to maintain method compatibility.} +} +\value{ +Log likelihood of the model \code{logLik}, also with \code{df} + (degrees of freedom) and \code{nobs} (number of observations) values. +} +\description{ +Convenience function to extract and format the log likelihood + of a \code{TS}-class object fit by \code{\link{sequential_TS}}. +} diff --git a/man/prep_chunks.Rd b/man/prep_chunks.Rd index 507f1a81..f93ca358 100644 --- a/man/prep_chunks.Rd +++ b/man/prep_chunks.Rd @@ -2,8 +2,7 @@ % Please edit documentation in R/TS.R \name{prep_chunks} \alias{prep_chunks} -\title{Prepare the time chunk table for a multinomial change point - Time Series model} +\title{Prepare the time chunk table for a change point Time Series model} \usage{ prep_chunks(data, changepoints = NULL, timename = "time") } @@ -12,14 +11,14 @@ prep_chunks(data, changepoints = NULL, timename = "time") response variables, but specifically here containing the column indicated by the \code{timename} input.} -\item{changepoints}{Numeric vector indicating locations of the change -points. Must be conformable to \code{integer} values.} - \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be integer-conformable or a \code{Date}. If the variable named is a \code{Date}, the input is converted to an integer, resulting in the timestep being 1 day, which is often not desired behavior.} + +\item{change}{points Numeric vector indicating locations of the change +points. Must be conformable to \code{integer} values.} } \value{ \code{data.frame} of \code{start} and \code{end} times (columns) @@ -29,15 +28,6 @@ timestep being 1 day, which is often not desired behavior.} Creates the table containing the start and end times for each chunk within a time series, based on the change points (used to break up the time series) and the range of the time series. If there are no - change points (i.e. \code{changepoints} is \code{NULL}, there is still a + change points (i.e. \code{change points} is \code{NULL}, there is still a single chunk defined by the start and end of the time series. } -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - chunks <- prep_chunks(dct, changepoints = 100, timename = "newmoon") - -} diff --git a/man/prep_pbar.Rd b/man/prep_pbar.Rd new file mode 100644 index 00000000..a70c94f7 --- /dev/null +++ b/man/prep_pbar.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{prep_pbar} +\alias{prep_pbar} +\alias{update_pbar} +\title{Initialize and tick through the progress bar} +\usage{ +prep_pbar(control = list(), bar_type = "rho", nr = NULL) + +update_pbar(pbar, control = list()) +} +\arguments{ +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model.} + +\item{bar_type}{"rho" (for change point locations) or "eta" (for +regressors).} + +\item{nr}{\code{integer} number of unique realizations, needed when +\code{bar_type} = "eta".} + +\item{pbar}{The progress bar object returned from \code{prep_pbar}.} +} +\value{ +\code{prep_pbar}: the initialized progress bar object. \cr \cr + \code{update_pbar}: the ticked-forward \code{pbar}. +} +\description{ +\code{prep_pbar} creates and \code{update_pbar} steps + through the progress bars (if desired) in \code{\link{TS}} +} diff --git a/man/prep_temp_sequence.Rd b/man/prep_temp_sequence.Rd index 498a2269..4b3fb613 100644 --- a/man/prep_temp_sequence.Rd +++ b/man/prep_temp_sequence.Rd @@ -24,8 +24,7 @@ Create the series of temperatures used in the ptMCMC This function was designed to work within \code{\link{TS}} and \code{\link{est_changepoints}} specifically, but has been generalized and would work with any ptMCMC model as long as \code{control} - includes the relevant control parameters (and provided that the - \code{\link{check_control}} function and its use here are generalized). + includes the relevant control parameters. } \examples{ prep_temp_sequence() diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd new file mode 100644 index 00000000..6e5f2e79 --- /dev/null +++ b/man/sequential_TS.Rd @@ -0,0 +1,37 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{sequential_TS} +\alias{sequential_TS} +\alias{package_sequential_TS} +\alias{est_changepoints} +\alias{est_regressors} +\title{Estimate a Time Series model sequentially} +\usage{ +sequential_TS(TS, control = list()) + +package_sequential_TS(TS, rho_dist, eta_dist, control = list()) + +est_changepoints(TS, control = list()) + +est_regressors(rho_dist, TS, control = list()) +} +\arguments{ +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} +} +\value{ +\code{est_changepoints}: \code{list} of saved data objects from the + estimation of change point locations, uunless \code{nchangepoints} + is 0, then \code{NULL}. +} +\description{ +This set of functions estimates the Time Series model + by sequential methods that first estimate the change point locations + with full flexibility of the regressor models between change points, + then estimate the regressors between the change points, conditional on + their locations. + + \code{est_change points} estimates the change point location + distributions for multinomial Time Series analyses. +} diff --git a/man/summarize_etas.Rd b/man/summarize_etas.Rd new file mode 100644 index 00000000..e0fbac1c --- /dev/null +++ b/man/summarize_etas.Rd @@ -0,0 +1,34 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{summarize_etas} +\alias{summarize_etas} +\alias{measure_eta_vcov} +\title{Summarize the regressor (eta) distributions of a time series model} +\usage{ +summarize_etas(etas, control = list()) + +measure_eta_vcov(etas) +} +\arguments{ +\item{etas}{Matrix of regressors (columns) across iterations of the +sampler (rows), as returned from \code{\link{est_regressors}}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} +} +\value{ +\code{summarize_etas}: table of summary statistics for chunk-level + regressors including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each regressor. \cr \cr + \code{measure_eta_vcov}: variance-covariance matrix for chunk-level + regressors. +} +\description{ +\code{summarize_etas} calculates summary statistics for each + of the chunk-level regressors. + \cr \cr + \code{measure_ets_vcov} generates the variance-covariance matrix for + the regressors. +} diff --git a/man/summarize_rhos.Rd b/man/summarize_rhos.Rd new file mode 100644 index 00000000..8e56c02c --- /dev/null +++ b/man/summarize_rhos.Rd @@ -0,0 +1,35 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{summarize_rhos} +\alias{summarize_rhos} +\alias{measure_rho_vcov} +\title{Summarize the rho distributions} +\usage{ +summarize_rhos(rhos, control = list()) + +measure_rho_vcov(rhos) +} +\arguments{ +\item{rhos}{Matrix of change point locations (columns) across iterations of +the sampler (rows) or \code{NULL} if no change points are in the model, +as returned from \code{\link{est_change points}}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} +} +\value{ +\code{summarize_rhos}: table of summary statistics for change point + locations including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each change point location. \cr \cr + \code{measure_rho_vcov}: variance-covariance matrix for change + point locations. +} +\description{ +\code{summarize_rho} calculates summary statistics for each + of the change point locations. + \cr \cr + \code{measure_rho_vcov} generates the variance-covariance matrix for the + change point locations. +} diff --git a/man/verify_changepoint_locations.Rd b/man/verify_change_point_locations.Rd similarity index 58% rename from man/verify_changepoint_locations.Rd rename to man/verify_change_point_locations.Rd index 4c47f27e..e7b0e9ae 100644 --- a/man/verify_changepoint_locations.Rd +++ b/man/verify_change_point_locations.Rd @@ -1,24 +1,24 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/TS.R -\name{verify_changepoint_locations} -\alias{verify_changepoint_locations} -\title{Verify the change points of a multinomial time series model} +\name{verify_change_point_locations} +\alias{verify_change_point_locations} +\title{Verify the change points of a time series model} \usage{ -verify_changepoint_locations(data, changepoints = NULL, +verify_change_point_locations(data, changepoints = NULL, timename = "time") } \arguments{ \item{data}{Class \code{data.frame} object including the predictor and response variables.} -\item{changepoints}{Numeric vector indicating locations of the change -points. Must be conformable to \code{integer} values.} - \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be integer-conformable or a \code{Date}. If the variable named is a \code{Date}, the input is converted to an integer, resulting in the timestep being 1 day, which is often not desired behavior.} + +\item{change}{points Numeric vector indicating locations of the change +points. Must be conformable to \code{integer} values.} } \value{ Logical indicator of the check passing \code{TRUE} or failing @@ -28,13 +28,3 @@ Logical indicator of the check passing \code{TRUE} or failing Verify that a time series can be broken into a set of chunks based on input change points. } -\examples{ - data(rodents) - dtt <- rodents$document_term_table - lda <- LDA_set(dtt, 2, 1, list(quiet = TRUE)) - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - verify_changepoint_locations(dct, changepoints = 100, - timename = "newmoon") - -} From bd639c36dc4de976a6be7c1e6a3d55cd00321f0e Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Fri, 20 Mar 2020 14:13:02 -0700 Subject: [PATCH 19/43] lots of doc work and establishing a clear paradigm for functions and control lists --- NAMESPACE | 7 +- R/LDA.R | 24 ++-- R/LDA_TS.R | 62 +++++++--- R/TS.R | 114 +++++++++++++----- R/ldats_classic_method.R | 88 ++++++++++++-- R/sequential_TS.R | 73 ++++++++--- man/TS_control.Rd | 63 ++++++++++ man/ldats_classic.Rd | 3 +- man/ldats_classic_control.Rd | 49 ++++++++ man/prep_cpts.Rd | 4 +- man/prep_ids.Rd | 3 +- man/prep_pbar.Rd | 11 +- man/prep_proposal_dist.Rd | 5 +- man/prep_ptMCMC_inputs.Rd | 3 +- man/prep_saves.Rd | 3 +- man/prep_temp_sequence.Rd | 4 +- man/print.TS.Rd | 22 ++++ man/sequential_TS.Rd | 106 ++++++++++++++-- man/sequential_TS_control.Rd | 44 +++++++ man/summarize_etas.Rd | 4 +- man/summarize_rhos.Rd | 4 +- ...ons.Rd => verify_changepoint_locations.Rd} | 6 +- todo.R | 6 + 23 files changed, 586 insertions(+), 122 deletions(-) create mode 100644 man/TS_control.Rd create mode 100644 man/ldats_classic_control.Rd create mode 100644 man/print.TS.Rd create mode 100644 man/sequential_TS_control.Rd rename man/{verify_change_point_locations.Rd => verify_changepoint_locations.Rd} (87%) create mode 100644 todo.R diff --git a/NAMESPACE b/NAMESPACE index e04a01b0..d988333c 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -6,9 +6,11 @@ S3method(plot,LDA_TS) S3method(plot,LDA_VEM) S3method(plot,LDA_set) S3method(plot,TS_fit) +S3method(print,TS) export(AICc) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) +export(TS_control) export(TS_diagnostics_plot) export(TS_summary_plot) export(autocorr_plot) @@ -28,6 +30,7 @@ export(iftrue) export(ilr_TS) export(ilr_TS_chunk) export(ldats_classic) +export(ldats_classic_control) export(list_depth) export(logsumexp) export(measure_eta_vcov) @@ -58,6 +61,8 @@ export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) export(sequential_TS) +export(sequential_TS_control) +export(sequential_TS_msg) export(set_LDA_TS_plot_cols) export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) @@ -78,7 +83,7 @@ export(update_ids) export(update_list) export(update_pbar) export(update_saves) -export(verify_change_point_locations) +export(verify_changepoint_locations) importFrom(coda,HPDinterval) importFrom(coda,as.mcmc) importFrom(coda,autocorr) diff --git a/R/LDA.R b/R/LDA.R index 0af46a8f..3bd400b6 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -31,19 +31,19 @@ LDA <- function(data, topics = 2, reps = 1, control = list()){ } -LDA_control <- function(LDA_function = topicmodels_LDA, - LDA_args = list(method = "VEM", seeded = TRUE), - measurer_function = AIC, +LDA_control <- function(model = topicmodels_LDA, + model_args = list(method = "VEM", seeded = TRUE), + measurer = AIC, measurer_args = list(), - selector_function = which.min, + selector = which.min, selector_args = list(), nsubsets = 1, subset_rule = NULL, soften = TRUE, - quiet = FALSE){ - list(LDA_function = LDA_function, LDA_args = LDA_args, - measurer_function = measurer_function, measurer_args = measurer_args, - selector_function = selector_function, selector_args = selector_args, + quiet = FALSE, ...){ + list(model = model, model_args = model_args, + measurer = measurer, measurer_args = measurer_args, + selector = selector, selector_args = selector_args, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) } @@ -74,8 +74,8 @@ prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ LDA_call <- function(LDA = NULL, control = list()){ control <- do.call("LDA_control", control) LDA_msg(LDA = LDA, quiet = control$quiet) - fun <- control$LDA_function - args <- update_list(control$LDA_args, LDA = LDA) + fun <- control$model + args <- update_list(control$model_args, LDA = LDA) soft_call(fun = fun, args = args, soften = control$soften) } @@ -158,14 +158,14 @@ select_LDA <- function(LDAs = list(), control = list()){ return(LDAs) } vals <- measure_LDA(LDAs = LDAs, control = control) - fun <- control$selector_function + fun <- control$selector args <- update_list(control$selector_args, x = vals) selection <- do.call(what = fun, args = args) LDAs[selection] } measure_LDA <- function(LDAs = list(), control = list()){ - fun <- control$measurer_function + fun <- control$measurer args <- control$measurer_args nLDAs <- length(LDAs) vals <- rep(NA, nLDAs) diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 0967b9aa..7071b03e 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -17,26 +17,48 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, -LDA_TS_control <- function(LDA_function = topicmodels_LDA, - LDA_args = list(method = "VEM", seeded = TRUE), - LDA_measurer_function = AIC, - LDA_measurer_args = list(), - LDA_selector_function = which.min, - LDA_selector_args = list(), - nsubsets = 1, - subset_rule = NULL, - soften = TRUE, - quiet = FALSE){ - - LDA_control <- LDA_control(LDA_function = LDA_function, LDA_args = LDA_args, - measurer_function = LDA_measurer_function, - measurer_args = LDA_measurer_args, - selector_function = LDA_selector_function, - selector_args = LDA_selector_args, - nsubsets = nsubsets, subset_rule = subset_rule, - soften = soften, quiet = quiet) - - TS_control <- TS_control(soften = soften, quiet = quiet) +LDA_TS_control <- function(LDA_model = topicmodels_LDA, + LDA_model_args = + list(method = "VEM", seeded = TRUE), + LDA_measurer = AIC, + LDA_measurer_args = list(), + LDA_selector = which.min, + LDA_selector_args = list(), + TS_model = sequential_TS, + TS_model_args = list(), + TS_response = "multinom", + TS_response_args = list(), + TS_method = "ldats_classic", + TS_method_args = ldats_classic_control(), + TS_measurer = AIC, + TS_measurer_args = list(), + TS_selector = which.min, + TS_selector_args = list(), + nsubsets = 1, + subset_rule = NULL, + summary_prob = 0.95, + soften = TRUE, + quiet = FALSE, ...){ + + LDA_control <- LDA_control(model = LDA_model, model_args = LDA_model_args, + measurer = LDA_measurer, + measurer_args = LDA_measurer_args, + selector = LDA_selector, + selector_args = LDA_selector_args, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) + + TS_control <- TS_control(response = TS_response, + response_args = TS_response_args, + method = TS_method, + method_args = TS_method_args, + measurer = TS_measurer, + measurer_args = TS_measurer_args, + selector = TS_selector, + selector_args = TS_selector_args, + summary_prob = summary_prob, + soften = soften, quiet = quiet) + list(LDA_control = LDA_control, TS_control = TS_control, nsubsets = nsubsets, subset_rule = subset_rule, diff --git a/R/TS.R b/R/TS.R index 78b56715..62943043 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,12 +1,6 @@ ## # -# working in here -# -# looks pretty nice! -# -# generally pretty well working, needs to get tidied up considerably tho -# pull redundant code out into functions etc -# and figure out better namings etc +# working in here on documentation and follow through # also make sure when no change point that it still says estimating regressor @@ -85,17 +79,19 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, } + + select_TS <- function(TSs, control = list()){ vals <- measure_TS(TSs = TSs, control = control) - fun <- control$selector_function + fun <- control$selector args <- update_list(control$selector_args, x = vals) selection <- do.call(what = fun, args = args) TSs[selection] } measure_TS <- function(TSs, control = list()){ - fun <- control$measurer_function + fun <- control$measurer args <- control$measurer_args nTSs <- length(TSs) vals <- rep(NA, nTSs) @@ -109,8 +105,6 @@ measure_TS <- function(TSs, control = list()){ vals } - - package_TS <- function(selected_TSs, TSs, control = list()){ out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) class(out) <- c("TS_set", "list") @@ -119,37 +113,95 @@ package_TS <- function(selected_TSs, TSs, control = list()){ - - - -TS_control <- function(response = "multinom", +#' @title Create the controls list for the Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the time series model fit occurring within +#' \code{\link{TS}}. +#' +#' @param response \code{character} element indicating the response variable +#' used in the time series. \cr \cr +#' Must have a corresponding \code{_TS} function. +#' +#' @param summary_prob Probability used for summarizing the posterior +#' distributions (via the highest posterior density interval, see +#' \code{\link[coda]{HPDinterval}}). +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param method \code{function} used to drive the sampler of the TS +#' models; \code{method} defines and operates the computational procedure. +#' \cr \cr +#' Current pre-built options include \code{\link{ldats_classic}}. +#' +#' @param method_args \code{list} of (named) arguments to be used in +#' \code{method} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_control} function like +#' \code{\link{ldats_classic_control}}. +#' +#' @param measurer \code{function} used in evaluation of the TS +#' models; \code{measurer} creates a value for each model. +#' +#' @param measurer_args \code{list} of (named) arguments to be used in +#' \code{measurer} via \code{\link{do.call}}. +#' +#' @param selector \code{function} usde in evaluation of the TS +#' models; \code{selector} operates on the values to choose the models. +#' +#' @param selector_args \code{list} of (named) arguments to be used in +#' \code{selector} via \code{\link{do.call}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @examples +#' TS_control() +#' +#' @export +#' +TS_control <- function(model = sequential_TS, + model_args = list(), + response = "multinom", + response_args = list(), method = "ldats_classic", - method_args = list(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, - burnin = 0, thin_frac = 1, - memoise = TRUE, - quiet = FALSE), + method_args = ldats_classic_control(), summary_prob = 0.95, - measurer_function = AIC, + measurer = AIC, measurer_args = list(), - selector_function = which.min, + selector = which.min, selector_args = list(), soften = TRUE, - quiet = FALSE){ + quiet = FALSE, ...){ list(response = response, method = method, method_args = method_args, - measurer_function = measurer_function, measurer_args = measurer_args, - selector_function = selector_function, selector_args = selector_args, + measurer = measurer, measurer_args = measurer_args, + selector = selector, selector_args = selector_args, summary_prob = summary_prob, soften = soften, quiet = quiet) } - - - - - +#' @title Print a Time Series model +#' +#' @description Convenience function to print only the most important +#' components of a \code{TS}-class object fit by +#' \code{\link{sequential_TS}}. +#' +#' @param x Class \code{TS_fit} object to be printed. +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return The non-hidden parts of \code{x} are printed and returned +#' invisibly as a \code{list}. +#' +#' @export +#' print.TS <- function(x, ...){ hid <- attr(x, "hidden") notHid <- !(names(x) %in% hid) diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index b51f1c8e..91f3be77 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -6,7 +6,8 @@ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Values not input assume defaults set by \code{\link{TS_control}}. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @return \code{list} of changepoint locations, log likelihoods, and model #' diagnostics. @@ -14,7 +15,7 @@ #' @export #' ldats_classic <- function(TS, control = list()){ - + control <- do.call("ldats_classic_control", control) saves <- prep_saves(TS = TS, control = control) inputs <- prep_ptMCMC_inputs(TS = TS, control = control) @@ -36,6 +37,59 @@ ldats_classic <- function(TS, control = list()){ } +#' @title Create the controls list for the classic LDATS ptMCMC sampler +#' +#' @description This function provides a simple creation and definition of a +#' list used to control time series model fitting via the +#' \code{\link{ldats_classic}} sampler. +#' +#' @param ntemps \code{integer} number of temperatures (chains) to use in the +#' ptMCMC algorithm. +#' +#' @param penultimate_temp Penultimate temperature in the ptMCMC sequence. +#' +#' @param ultimate_temp Ultimate temperature in the ptMCMC sequence. +#' +#' @param q Exponent controlling the ptMCMC temperature sequence from the +#' focal chain (reference with temperature = 1) to the penultimate chain. 0 +#' (default) implies a geometric sequence. 1 implies squaring before +#' exponentiating. +#' +#' @param nit \code{integer} number of iterations (steps) used in the ptMCMC +#' algorithm. +#' +#' @param magnitude Average magnitude (defining a geometric distribution) +#' for the proposed step size in the ptMCMC algorithm. +#' +#' @param burnin \code{integer} number of iterations to remove from the +#' beginning of the ptMCMC algorithm. +#' +#' @param thin_frac Fraction of iterations to retain, must be \eqn{(0, 1]}, +#' and the default value of 1 represents no thinning. +#' +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param memoise \code{logical} indicator of whether the response +#' function should be memoised (via \code{\link[memoise]{memoise}}). +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @export +#' +ldats_classic_control <- function(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + memoise = TRUE, quiet = FALSE){ + list(ntemps = ntemps, penultimate_temp = penultimate_temp, + ultimate_temp = ultimate_temp, q = q, nit = nit, + magnitude = magnitude, burnin = burnin, thin_frac = thin_frac, + memoise = memoise, quiet = quiet) +} + + #' @title Count trips of the ptMCMC particles in a classic_ldats estimation #' #' @description Count the full trips (from one extreme temperature chain to @@ -190,8 +244,8 @@ swap_chains <- function(chainsin, inputs, ids){ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @param cpts The existing matrix of change points. #' @@ -205,7 +259,7 @@ swap_chains <- function(chainsin, inputs, ids){ #' @export #' prep_cpts <- function(TS, control = list()){ - + control <- do.call("ldats_classic_control", control) data <- TS$data$train$ts_data temps <- prep_temp_sequence(TS = TS, control = control) ntemps <- length(temps) @@ -257,8 +311,8 @@ update_cpts <- function(cpts, swaps){ #' includes the relevant control parameters. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @param TS \code{list} time series model object. #' @@ -270,6 +324,7 @@ update_cpts <- function(cpts, swaps){ #' @export #' prep_temp_sequence <- function(TS, control = list()){ + control <- do.call("ldats_classic_control", control) ntemps <- control$ntemps penultimate_temp <- control$penultimate_temp ultimate_temp <- control$ultimate_temp @@ -297,7 +352,8 @@ prep_temp_sequence <- function(TS, control = list()){ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @param i \code{integer} iteration index. #' @@ -315,6 +371,7 @@ prep_temp_sequence <- function(TS, control = list()){ #' @export #' prep_saves <- function(TS, control = list()){ + control <- do.call("ldats_classic_control", control) nchangepoints <- TS$nchangepoints ntemps <- control$ntemps nit <- control$nit @@ -345,6 +402,7 @@ update_saves <- function(i, saves, steps, swaps){ #' @export #' process_saves <- function(saves, control = list()){ + control <- do.call("ldats_classic_control", control) nit <- control$nit iters <- 1:nit if (control$burnin > 0){ @@ -388,7 +446,8 @@ process_saves <- function(saves, control = list()){ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @return \code{list} containing the static #' inputs for use within the ptMCMC algorithm for estimating change points. @@ -396,6 +455,7 @@ process_saves <- function(saves, control = list()){ #' @export #' prep_ptMCMC_inputs <- function(TS, control = list()){ + control <- do.call("ldats_classic_control", control) fun <- eval(parse(text = paste0(TS$response, "_TS"))) fun <- memoise_fun(fun, control$memoise) list(control = control, @@ -425,9 +485,8 @@ prep_ptMCMC_inputs <- function(TS, control = list()){ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model Relevant here is -#' \code{magnitude}, which controls the magnitude of the step size (is the -#' average of the geometric distribution). +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @return \code{list} of two \code{matrix} elements: [1] the size of the #' proposed step for each iteration of each chain and [2] the identity of @@ -437,6 +496,7 @@ prep_ptMCMC_inputs <- function(TS, control = list()){ #' @export #' prep_proposal_dist <- function(TS, control = list()){ + control <- do.call("ldats_classic_control", control) nchangepoints <- TS$nchangepoints ntemps <- control$ntemps nit <- control$nit @@ -471,7 +531,8 @@ prep_proposal_dist <- function(TS, control = list()){ #' @param TS \code{list} time series model object. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Values not input assume defaults set by \code{\link{TS_control}}. +#' time series model via the LDATS classic ptMCMC method. Values not input +#' assume defaults set by \code{\link{ldats_classic_control}}. #' #' @param ids The existing vector of chain ids. #' @@ -482,6 +543,7 @@ prep_proposal_dist <- function(TS, control = list()){ #' @export #' prep_ids <- function(TS, control = list()){ + control <- do.call("ldats_classic_control", control) if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ stop("ntemps must be integer-valued") } diff --git a/R/sequential_TS.R b/R/sequential_TS.R index 08822bbc..50a59995 100644 --- a/R/sequential_TS.R +++ b/R/sequential_TS.R @@ -33,7 +33,7 @@ #' #' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. +#' \code{\link{sequential_TS_control}}. #' #' @details The general approach follows that of Western and Kleykamp #' (2004), although we note some important differences. Our regression @@ -65,9 +65,9 @@ #' @return #' \code{est_changepoints}: \code{list} of saved data objects from the #' estimation of change point locations, uunless \code{nchangepoints} -#' is 0, then \code{NULL}. +#' is 0, then \code{NULL}. \cr \cr #' \code{est_regressors}: \code{matrix} of draws (rows) from the marginal -#' posteriors of the coefficients across the segments (columns). +#' posteriors of the coefficients across the segments (columns). \cr \cr #' \code{sequential_TS} and \code{package_sequential_TS}: #' \code{TS}-class list containing the following elements, many of #' which are hidden for \code{print}ing, but are accessible: @@ -109,7 +109,7 @@ #' @export #' sequential_TS <- function(TS, control = list()){ - control <- do.call("TS_control", control) + control <- do.call("sequential_TS_control", control) sequential_TS_msg(TS = TS, control = control) rho_dist <- est_changepoints(TS = TS, control = control) eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) @@ -117,14 +117,12 @@ sequential_TS <- function(TS, control = list()){ control = control) } -#' #' @rdname sequential_TS #' #' @export #' package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ - - + control <- do.call("sequential_TS_control", control) if(is.null(rho_dist)){ focal_rho_dist <- NULL data <- TS$data$train$ts_data @@ -168,12 +166,12 @@ package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ out } -#' #' @rdname sequential_TS #' #' @export #' est_changepoints <- function(TS, control = list()){ + control <- do.call("sequential_TS_control", control) if (TS$nchangepoints == 0){ return(NULL) } @@ -182,12 +180,12 @@ est_changepoints <- function(TS, control = list()){ soft_call(fun = fun, args = args, soften = control$soften) } -#' #' @rdname sequential_TS #' #' @export #' est_regressors <- function(rho_dist, TS, control = list()){ + control <- do.call("sequential_TS_control", control) data <- TS$data$train$ts_data if(is.null(rho_dist)){ fun <- eval(parse(text = paste0(TS$response, "_TS"))) @@ -261,12 +259,12 @@ est_regressors <- function(rho_dist, TS, control = list()){ eta } -#' #' @rdname sequential_TS #' #' @export #' sequential_TS_msg <- function(TS, control = list()){ + control <- do.call("sequential_TS_control", control) subset_msg <- paste0(" - data subset ", TS$data_subset) topic_msg <- paste0(", ", TS$topics, " topics") rep_msg <- paste0(", replicate ", TS$rep) @@ -280,6 +278,52 @@ sequential_TS_msg <- function(TS, control = list()){ } +#' @title Create the controls list for a sequential Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the time series model fit occurring within +#' \code{\link{sequential_TS}}. +#' +#' @param response \code{character} element indicating the response variable +#' used in the time series. \cr \cr +#' Must have a corresponding \code{_TS} function. +#' +#' @param summary_prob Probability used for summarizing the posterior +#' distributions (via the highest posterior density interval, see +#' \code{\link[coda]{HPDinterval}}). +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param method \code{function} used to drive the sampler of the TS +#' models; \code{method} defines and operates the computational procedure. +#' \cr \cr +#' Current pre-built options include \code{\link{ldats_classic}}. +#' +#' @param method_args \code{list} of (named) arguments to be used in +#' \code{method} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_control} function like +#' \code{\link{ldats_classic_control}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @export +#' +sequential_TS_control <- function(method = "ldats_classic", + method_args = ldats_classic_control(), + summary_prob = 0.95, soften = TRUE, + quiet = FALSE, ...){ + list(method = method, method_args = method_args, + summary_prob = summary_prob, soften = soften, quiet = quiet) +} + #' @title Summarize the regressor (eta) distributions of a time series model #' #' @description \code{summarize_etas} calculates summary statistics for each @@ -293,7 +337,7 @@ sequential_TS_msg <- function(TS, control = list()){ #' #' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. +#' \code{\link{sequential_TS_control}}. #' #' @return \code{summarize_etas}: table of summary statistics for chunk-level #' regressors including mean, median, mode, posterior interval, standard @@ -305,7 +349,7 @@ sequential_TS_msg <- function(TS, control = list()){ #' @export #' summarize_etas <- function(etas, control = list()){ - control <- do.call("TS_control", control) + control <- do.call("sequential_TS_control", control) if (!is.matrix(etas)){ stop("etas should be a matrix") } @@ -327,7 +371,6 @@ summarize_etas <- function(etas, control = list()){ out } -#' #' @rdname summarize_etas #' #' @export @@ -356,7 +399,7 @@ measure_eta_vcov <- function(etas){ #' #' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. +#' \code{\link{sequential_TS_control}}. #' #' @return \code{summarize_rhos}: table of summary statistics for change point #' locations including mean, median, mode, posterior interval, standard @@ -368,6 +411,7 @@ measure_eta_vcov <- function(etas){ #' @export #' summarize_rhos <- function(rhos, control = list()){ + control <- do.call("sequential_TS_control", control) if (is.null(rhos)) { return() } @@ -389,7 +433,6 @@ summarize_rhos <- function(rhos, control = list()){ out } -#' #' @rdname summarize_rhos #' #' @export diff --git a/man/TS_control.Rd b/man/TS_control.Rd new file mode 100644 index 00000000..5e77bd24 --- /dev/null +++ b/man/TS_control.Rd @@ -0,0 +1,63 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{TS_control} +\alias{TS_control} +\title{Create the controls list for the Time Series model} +\usage{ +TS_control(model = sequential_TS, model_args = list(), + response = "multinom", response_args = list(), + method = "ldats_classic", method_args = ldats_classic_control(), + summary_prob = 0.95, measurer = AIC, measurer_args = list(), + selector = which.min, selector_args = list(), soften = TRUE, + quiet = FALSE) +} +\arguments{ +\item{response}{\code{character} element indicating the response variable +used in the time series. \cr \cr +Must have a corresponding \code{_TS} function.} + +\item{method}{\code{function} used to drive the sampler of the TS +models; \code{method} defines and operates the computational procedure. +\cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{method_args}{\code{list} of (named) arguments to be used in +\code{method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{measurer}{\code{function} used in evaluation of the TS +models; \code{measurer} creates a value for each model.} + +\item{measurer_args}{\code{list} of (named) arguments to be used in +\code{measurer} via \code{\link{do.call}}.} + +\item{selector}{\code{function} usde in evaluation of the TS +models; \code{selector} operates on the values to choose the models.} + +\item{selector_args}{\code{list} of (named) arguments to be used in +\code{selector} via \code{\link{do.call}}.} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the time series model fit occurring within + \code{\link{TS}}. +} +\examples{ + TS_control() + +} diff --git a/man/ldats_classic.Rd b/man/ldats_classic.Rd index f924af4d..8b9e286c 100644 --- a/man/ldats_classic.Rd +++ b/man/ldats_classic.Rd @@ -10,7 +10,8 @@ ldats_classic(TS, control = list()) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Values not input assume defaults set by \code{\link{TS_control}}.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{list} of changepoint locations, log likelihoods, and model diff --git a/man/ldats_classic_control.Rd b/man/ldats_classic_control.Rd new file mode 100644 index 00000000..e5320c9b --- /dev/null +++ b/man/ldats_classic_control.Rd @@ -0,0 +1,49 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ldats_classic_method.R +\name{ldats_classic_control} +\alias{ldats_classic_control} +\title{Create the controls list for the classic LDATS ptMCMC sampler} +\usage{ +ldats_classic_control(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e+10, q = 0, nit = 10000, magnitude = 12, + burnin = 0, thin_frac = 1, memoise = TRUE, quiet = FALSE) +} +\arguments{ +\item{ntemps}{\code{integer} number of temperatures (chains) to use in the +ptMCMC algorithm.} + +\item{penultimate_temp}{Penultimate temperature in the ptMCMC sequence.} + +\item{ultimate_temp}{Ultimate temperature in the ptMCMC sequence.} + +\item{q}{Exponent controlling the ptMCMC temperature sequence from the +focal chain (reference with temperature = 1) to the penultimate chain. 0 +(default) implies a geometric sequence. 1 implies squaring before +exponentiating.} + +\item{nit}{\code{integer} number of iterations (steps) used in the ptMCMC +algorithm.} + +\item{magnitude}{Average magnitude (defining a geometric distribution) +for the proposed step size in the ptMCMC algorithm.} + +\item{burnin}{\code{integer} number of iterations to remove from the +beginning of the ptMCMC algorithm.} + +\item{thin_frac}{Fraction of iterations to retain, must be \eqn{(0, 1]}, +and the default value of 1 represents no thinning.} + +\item{memoise}{\code{logical} indicator of whether the response +function should be memoised (via \code{\link[memoise]{memoise}}).} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control time series model fitting via the + \code{\link{ldats_classic}} sampler. +} diff --git a/man/prep_cpts.Rd b/man/prep_cpts.Rd index 36e3fd58..b9d5fbeb 100644 --- a/man/prep_cpts.Rd +++ b/man/prep_cpts.Rd @@ -14,8 +14,8 @@ update_cpts(cpts, swaps) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} \item{cpts}{The existing matrix of change points.} diff --git a/man/prep_ids.Rd b/man/prep_ids.Rd index 6ef2e365..b53f149b 100644 --- a/man/prep_ids.Rd +++ b/man/prep_ids.Rd @@ -14,7 +14,8 @@ update_ids(ids, swaps) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Values not input assume defaults set by \code{\link{TS_control}}.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} \item{ids}{The existing vector of chain ids.} diff --git a/man/prep_pbar.Rd b/man/prep_pbar.Rd index a70c94f7..16b9ecdc 100644 --- a/man/prep_pbar.Rd +++ b/man/prep_pbar.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R +% Please edit documentation in R/utilities.R \name{prep_pbar} \alias{prep_pbar} \alias{update_pbar} @@ -11,10 +11,11 @@ update_pbar(pbar, control = list()) } \arguments{ \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model.} +iterative model.} -\item{bar_type}{"rho" (for change point locations) or "eta" (for -regressors).} +\item{bar_type}{\code{character} value of possible types of progress bars. +Currently available options are "rho" (for change point locations) and +"eta" (for time series regressors).} \item{nr}{\code{integer} number of unique realizations, needed when \code{bar_type} = "eta".} @@ -27,5 +28,5 @@ regressors).} } \description{ \code{prep_pbar} creates and \code{update_pbar} steps - through the progress bars (if desired) in \code{\link{TS}} + through the progress bars (if desired) in, e.g., \code{\link{TS}} } diff --git a/man/prep_proposal_dist.Rd b/man/prep_proposal_dist.Rd index 62285510..1355fbe1 100644 --- a/man/prep_proposal_dist.Rd +++ b/man/prep_proposal_dist.Rd @@ -11,9 +11,8 @@ prep_proposal_dist(TS, control = list()) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model Relevant here is -\code{magnitude}, which controls the magnitude of the step size (is the -average of the geometric distribution).} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{list} of two \code{matrix} elements: [1] the size of the diff --git a/man/prep_ptMCMC_inputs.Rd b/man/prep_ptMCMC_inputs.Rd index 9f5935a4..b4599334 100644 --- a/man/prep_ptMCMC_inputs.Rd +++ b/man/prep_ptMCMC_inputs.Rd @@ -11,7 +11,8 @@ prep_ptMCMC_inputs(TS, control = list()) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{list} containing the static diff --git a/man/prep_saves.Rd b/man/prep_saves.Rd index 2bf2ad00..2cf35c32 100644 --- a/man/prep_saves.Rd +++ b/man/prep_saves.Rd @@ -17,7 +17,8 @@ process_saves(saves, control = list()) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} \item{i}{\code{integer} iteration index.} diff --git a/man/prep_temp_sequence.Rd b/man/prep_temp_sequence.Rd index 4b3fb613..cb1703ff 100644 --- a/man/prep_temp_sequence.Rd +++ b/man/prep_temp_sequence.Rd @@ -11,8 +11,8 @@ prep_temp_sequence(TS, control = list()) \item{TS}{\code{list} time series model object.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +time series model via the LDATS classic ptMCMC method. Values not input +assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{vector} of temperatures. diff --git a/man/print.TS.Rd b/man/print.TS.Rd new file mode 100644 index 00000000..91addf50 --- /dev/null +++ b/man/print.TS.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{print.TS} +\alias{print.TS} +\title{Print a Time Series model} +\usage{ +\method{print}{TS}(x, ...) +} +\arguments{ +\item{x}{Class \code{TS_fit} object to be printed.} + +\item{...}{Not used, simply included to maintain method compatibility.} +} +\value{ +The non-hidden parts of \code{x} are printed and returned + invisibly as a \code{list}. +} +\description{ +Convenience function to print only the most important + components of a \code{TS}-class object fit by + \code{\link{sequential_TS}}. +} diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index 6e5f2e79..54a576af 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -1,10 +1,11 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R +% Please edit documentation in R/sequential_TS.R \name{sequential_TS} \alias{sequential_TS} \alias{package_sequential_TS} \alias{est_changepoints} \alias{est_regressors} +\alias{sequential_TS_msg} \title{Estimate a Time Series model sequentially} \usage{ sequential_TS(TS, control = list()) @@ -14,24 +15,115 @@ package_sequential_TS(TS, rho_dist, eta_dist, control = list()) est_changepoints(TS, control = list()) est_regressors(rho_dist, TS, control = list()) + +sequential_TS_msg(TS, control = list()) } \arguments{ \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +\code{\link{sequential_TS_control}}.} + +\item{rho_dist}{\code{list} of saved data objects from the estimation of +change point locations (unless \code{nchangepoints} is 0, then +\code{NULL}) returned from \code{\link{est_changepoints}}.} + +\item{eta_dist}{\code{matrix} of draws (rows) from the marginal posteriors +of the coefficients across the segments (columns), as estimated by +\code{\link{est_regressors}}.} } \value{ \code{est_changepoints}: \code{list} of saved data objects from the estimation of change point locations, uunless \code{nchangepoints} - is 0, then \code{NULL}. + is 0, then \code{NULL}. \cr \cr + \code{est_regressors}: \code{matrix} of draws (rows) from the marginal + posteriors of the coefficients across the segments (columns). \cr \cr + \code{sequential_TS} and \code{package_sequential_TS}: + \code{TS}-class list containing the following elements, many of + which are hidden for \code{print}ing, but are accessible: + \describe{ + \item{data}{\code{data} input to the function.} + \item{formula}{\code{\link[stats]{formula}} input to the function.} + \item{nchangepoints}{\code{nchangepoints} input to the function.} + \item{weights}{\code{weights} input to the function.} + \item{timename}{\code{timename} input to the function.} + \item{control}{\code{control} input to the function.} + \item{lls}{Iteration-by-iteration + \link[=logLik.multinom_TS_fit]{logLik} values for the + full time series fit by \code{\link{multinom_TS}}.} + \item{rhos}{Iteration-by-iteration change point estimates from + \code{\link{est_changepoints}} and diagnostics.} + \item{focal_rhos}{Simplified object of just the change point + locations of interest.} + \item{etas}{Iteration-by-iteration marginal regressor estimates from + \code{\link{est_regressors}}, which have been + unconditioned with respect to change point locations.} + \item{rho_summary}{Summary table describing \code{rhos} (the change + point locations), see + \code{\link{summarize_rhos}}.} + \item{rho_vcov}{Variance-covariance matrix for the estimates of + \code{rhos} (the change point locations), see + \code{\link{measure_rho_vcov}}.} + \item{eta_summary}{Summary table describing \code{ets} (the + regressors), see + \code{\link{summarize_etas}}.} + \item{eta_vcov}{Variance-covariance matrix for the estimates of + \code{etas} (the regressors), see + \code{\link{measure_eta_vcov}}.} + \item{logLik}{Across-iteration average of log-likelihoods + (\code{lls}).} + \item{nparams}{Total number of parameters in the full model, + including the change point locations and regressors.} + } } \description{ This set of functions estimates the Time Series model by sequential methods that first estimate the change point locations with full flexibility of the regressor models between change points, - then estimate the regressors between the change points, conditional on - their locations. + then estimate the regressors between the change points, intially + conditional on their locations, but with marginal estimation to produce + regressor values unconditional on change point locations. + \code{sequential_TS} combines each stage of the model estimation and + packages the model results in a consistent output. + \code{est_changepoints} estimates the change point location + distributions for multinomial Time Series analyses. + \code{est_regressors} uses the marginal posterior distributions of + the change point locations (estimated by + \code{\link{est_changepoints}}) in combination with the conditional + (on the change point locations) posterior distributions of the + regressors (estimated by a \code{_TS} function) to + estimate the marginal posterior distribution of the regressors, + unconditional on the change point locations. + \code{package_sequential_TS} calculates relevant summaries for the run of + a sequenial Time Series model within \code{\link{sequential_TS}} and + packages the output as a \code{TS}-class object. + \code{sequential_TS_msg} produces a specific message about the model + being run. +} +\details{ +The general approach follows that of Western and Kleykamp + (2004), although we note some important differences. Our regression + models are fit independently for each chunk (segment of time), and + therefore the variance-covariance matrix for the full model + has \code{0} entries for covariances between regressors in different + chunks of the time series. Further, because the regression model here + is a standard (non-hierarchical) softmax (Ripley 1996, Venables and + Ripley 2002, Bishop 2006), there is no error term in the regression + (as there is in the normal model used by Western and Kleykamp 2004), + and so the posterior distribution used here is a multivariate normal, + as opposed to a multivariate t, as used by Western and Kleykamp (2004). +} +\references{ +Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. + Springer, New York, NY, USA. + + Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. + Cambridge University Press, Cambridge, UK. + + Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied + Statistics with S}. Fourth Edition. Springer, New York, NY, USA. - \code{est_change points} estimates the change point location - distributions for multinomial Time Series analyses. + Western, B. and M. Kleykamp. 2004. A Bayesian change point model for + historical time series analysis. \emph{Political Analysis} + \strong{12}:354-374. + \href{https://doi.org/10.1093/pan/mph023}{link}. } diff --git a/man/sequential_TS_control.Rd b/man/sequential_TS_control.Rd new file mode 100644 index 00000000..cc336335 --- /dev/null +++ b/man/sequential_TS_control.Rd @@ -0,0 +1,44 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/sequential_TS.R +\name{sequential_TS_control} +\alias{sequential_TS_control} +\title{Create the controls list for a sequential Time Series model} +\usage{ +sequential_TS_control(method = "ldats_classic", + method_args = ldats_classic_control(), summary_prob = 0.95, + soften = TRUE, quiet = FALSE) +} +\arguments{ +\item{method}{\code{function} used to drive the sampler of the TS +models; \code{method} defines and operates the computational procedure. +\cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{method_args}{\code{list} of (named) arguments to be used in +\code{method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{response}{\code{character} element indicating the response variable +used in the time series. \cr \cr +Must have a corresponding \code{_TS} function.} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the time series model fit occurring within + \code{\link{sequential_TS}}. +} diff --git a/man/summarize_etas.Rd b/man/summarize_etas.Rd index e0fbac1c..8be302d3 100644 --- a/man/summarize_etas.Rd +++ b/man/summarize_etas.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R +% Please edit documentation in R/sequential_TS.R \name{summarize_etas} \alias{summarize_etas} \alias{measure_eta_vcov} @@ -15,7 +15,7 @@ sampler (rows), as returned from \code{\link{est_regressors}}.} \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +\code{\link{sequential_TS_control}}.} } \value{ \code{summarize_etas}: table of summary statistics for chunk-level diff --git a/man/summarize_rhos.Rd b/man/summarize_rhos.Rd index 8e56c02c..111bbea5 100644 --- a/man/summarize_rhos.Rd +++ b/man/summarize_rhos.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R +% Please edit documentation in R/sequential_TS.R \name{summarize_rhos} \alias{summarize_rhos} \alias{measure_rho_vcov} @@ -16,7 +16,7 @@ as returned from \code{\link{est_change points}}.} \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +\code{\link{sequential_TS_control}}.} } \value{ \code{summarize_rhos}: table of summary statistics for change point diff --git a/man/verify_change_point_locations.Rd b/man/verify_changepoint_locations.Rd similarity index 87% rename from man/verify_change_point_locations.Rd rename to man/verify_changepoint_locations.Rd index e7b0e9ae..cbce5050 100644 --- a/man/verify_change_point_locations.Rd +++ b/man/verify_changepoint_locations.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/TS.R -\name{verify_change_point_locations} -\alias{verify_change_point_locations} +\name{verify_changepoint_locations} +\alias{verify_changepoint_locations} \title{Verify the change points of a time series model} \usage{ -verify_change_point_locations(data, changepoints = NULL, +verify_changepoint_locations(data, changepoints = NULL, timename = "time") } \arguments{ diff --git a/todo.R b/todo.R new file mode 100644 index 00000000..6f0b51fc --- /dev/null +++ b/todo.R @@ -0,0 +1,6 @@ +need to do + +sequential_TS_control + +multinom_TS_control +irl_TS_control \ No newline at end of file From 690f8021b3e66956f3bf4181ed71b6cf2f386a60 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Fri, 20 Mar 2020 18:48:06 -0700 Subject: [PATCH 20/43] more doc --- .Rbuildignore | 3 +- NAMESPACE | 5 ++ R/TS.R | 158 ++++++++++++++++++++++++++++++----- R/ilr_TS.R | 23 ++++- R/ldats_classic_method.R | 4 +- R/multinom_TS.R | 28 ++++++- R/sequential_TS.R | 10 ++- R/utilities.R | 4 +- hold.R | 51 ----------- man/TS.Rd | 84 +++++++++++++++++++ man/TS_control.Rd | 5 +- man/package_TS.Rd | 42 ++++++++++ man/sequential_TS_control.Rd | 5 +- notes.R | 71 +++++++--------- testing_example.R | 15 ---- todo.R | 6 -- 16 files changed, 368 insertions(+), 146 deletions(-) delete mode 100644 hold.R create mode 100644 man/TS.Rd create mode 100644 man/package_TS.Rd delete mode 100644 testing_example.R delete mode 100644 todo.R diff --git a/.Rbuildignore b/.Rbuildignore index 2e29672b..c01f3f58 100644 --- a/.Rbuildignore +++ b/.Rbuildignore @@ -2,7 +2,8 @@ ^doc$ ^docs$ ^LDATS_model.pdf$ -^working.R$ +^notes.R$ +^tempering.R$ ^.travis.yml$ ^.*\.Rproj$ ^\.Rproj\.user$ diff --git a/NAMESPACE b/NAMESPACE index d988333c..66b3c0b6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -10,6 +10,7 @@ S3method(print,TS) export(AICc) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) +export(TS) export(TS_control) export(TS_diagnostics_plot) export(TS_summary_plot) @@ -33,6 +34,7 @@ export(ldats_classic) export(ldats_classic_control) export(list_depth) export(logsumexp) +export(measure_TS) export(measure_eta_vcov) export(measure_rho_vcov) export(memoise_fun) @@ -42,10 +44,12 @@ export(modalvalue) export(multinom_TS) export(multinom_TS_chunk) export(normalize) +export(package_TS) export(package_chunk_fits) export(package_sequential_TS) export(posterior_plot) export(pred_gamma_TS_plot) +export(prep_TS_models) export(prep_chunks) export(prep_cpts) export(prep_ids) @@ -60,6 +64,7 @@ export(proposed_step_mods) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) +export(select_TS) export(sequential_TS) export(sequential_TS_control) export(sequential_TS_msg) diff --git a/R/TS.R b/R/TS.R index 62943043..8d5ac53c 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,10 +1,79 @@ -## -# -# working in here on documentation and follow through -# also make sure when no change point that it still says estimating regressor - - +#' @title Conduct a Bayesian compositional Time Series analysis +#' +#' @description +#' \code{TS} is the main interface function for the LDATS application +#' of Bayesian change point Time Series analyses (Christensen +#' \emph{et al.} 2018). \cr \cr +#' \code{prep_TS_models} pre-prepares the TS model objects for simpler +#' use within the subfunctions. +#' +#' @details This model extends the approach of Western and Kleykamp (2004; +#' see also Ruggieri 2013) to compositional response data using +#' softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) +#' or simplical geometry () +#' via a generalized linear modeling approach (McCullagh and Nelder 1989). +#' The models can be fit using a range of methods, but available procedures +#' are different flavors of parallel tempering Markov Chain Monte Carlo +#' (ptMCMC) methods (Earl and Deem 2005) +#' +#' @param data \code{data.frame} including [1] the time variable (indicated +#' in \code{timename}), [2] the predictor variables (required by +#' \code{formula}) and [3], the compositional response variable (indicated +#' in \code{formula}). \cr \cr +#' Note that the response variables should be formatted as a +#' \code{data.frame} object named as indicated by the \code{response} entry +#' in the \code{control} list, such as \code{gamma} for a standard TS +#' analysis on LDA output. +#' +#' @param formula \code{\link[stats]{formula}} defining the regression between +#' the change points. Any predictor variable included must also be a column +#' in \code{data} and any (compositional) response variable must be a set +#' of columns in \code{data}. +#' +#' @param nchangepoints \code{integer} corresponding to the number of +#' change points to include in the model. 0 is a valid input (corresponding +#' to no change points, so a singular time series model), and the current +#' implementation can reasonably include up to 6 change points. The +#' number of change points is used to dictate the segmentation of the +#' time series into chunks fit with separate models dictated by +#' \code{formula}. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @param weights Optional class \code{numeric} vector of weights for each +#' document. Defaults to \code{NULL}, translating to an equal weight for +#' each document. When using \code{multinom_TS} in a standard LDATS +#' analysis, it is advisable to weight the documents by their total size, +#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of +#' proportions, which does not account for size differences among documents. +#' For most models, a scaling of the weights (so that the average is 1) is +#' most appropriate, and this is accomplished using \code{document_weights}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model including the parallel tempering Markov Chain +#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @return +#' \code{TS}: class \code{TS_set} \code{list} of both selected and all +#' results from \code{\link{sequential_TS}} applied for each model on each +#' LDA model input as well as the control \code{list} used to fit the +#' model. \cr \cr +#' \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a +#' preliminary model object for a Time Series model fit. +#' +#' @export +#' TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ control <- do.call("TS_control", control) @@ -20,8 +89,10 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) } - - +#' @rdname TS +#' +#' @export +#' prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ @@ -81,6 +152,49 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, + + +#' @title Measure, select, and package the output of a set of Time Series +#' models +#' +#' @description +#' \code{measure_TS} determines the fit value used to select among the +#' models. \cr \cr +#' \code{select_TS} chooses the best model(s) of interest based on their +#' measured values and the selector function. \cr \cr +#' \code{package_TS} sets the class and names the elements of the results +#' \code{list} from \code{\link{sequential_TS}} applied to the +#' combination of TS models requested for the LDA model(s) input. +#' +#' @param TSs \code{list} of time series model \code{list}s. +#' +#' @param selected_TSs \code{list} of selected time series model \code{list}s. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @return +#' \code{measure_TS}: \code{vector} of values corresponding to the model +#' evaluations. +#' \code{select_TS}: \code{list} of selected models' \code{list}s. +#' \code{pacakage_TS}: class \code{TS_set} \code{list} of both selected and +#' all results from \code{\link{sequential_TS}} applied for each model on +#' each LDA model input as well as the control \code{list} used to fit +#' the model. +#' +#' @export +#' +package_TS <- function(selected_TSs, TSs, control = list()){ + out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) + class(out) <- c("TS_set", "list") + out +} + +#' @rdname package_TS +#' +#' @export +#' select_TS <- function(TSs, control = list()){ vals <- measure_TS(TSs = TSs, control = control) @@ -90,6 +204,10 @@ select_TS <- function(TSs, control = list()){ TSs[selection] } +#' @rdname package_TS +#' +#' @export +#' measure_TS <- function(TSs, control = list()){ fun <- control$measurer args <- control$measurer_args @@ -105,13 +223,6 @@ measure_TS <- function(TSs, control = list()){ vals } -package_TS <- function(selected_TSs, TSs, control = list()){ - out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) - class(out) <- c("TS_set", "list") - out -} - - #' @title Create the controls list for the Time Series model #' @@ -123,6 +234,12 @@ package_TS <- function(selected_TSs, TSs, control = list()){ #' used in the time series. \cr \cr #' Must have a corresponding \code{_TS} function. #' +#' @param response_args \code{list} of (named) arguments to be used in +#' \code{response} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_TS_control} function like +#' \code{\link{multinom_TS_control}}. +#' #' @param summary_prob Probability used for summarizing the posterior #' distributions (via the highest posterior density interval, see #' \code{\link[coda]{HPDinterval}}). @@ -167,10 +284,10 @@ package_TS <- function(selected_TSs, TSs, control = list()){ #' @export #' TS_control <- function(model = sequential_TS, - model_args = list(), - response = "multinom", - response_args = list(), - method = "ldats_classic", + model_args = sequential_TS_control(), + response = multinom_TS, + response_args = multinom_TS_control(), + method = ldats_classic, method_args = ldats_classic_control(), summary_prob = 0.95, measurer = AIC, @@ -179,7 +296,8 @@ TS_control <- function(model = sequential_TS, selector_args = list(), soften = TRUE, quiet = FALSE, ...){ - list(response = response, method = method, method_args = method_args, + list(response = response, response_args = response_args + method = method, method_args = method_args, measurer = measurer, measurer_args = measurer_args, selector = selector, selector_args = selector_args, summary_prob = summary_prob, soften = soften, quiet = quiet) diff --git a/R/ilr_TS.R b/R/ilr_TS.R index 93fafbb4..02ddef30 100644 --- a/R/ilr_TS.R +++ b/R/ilr_TS.R @@ -67,7 +67,7 @@ ilr_TS <- function(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()){ - + control <- do.call("ilr_TS_control", control) if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) return(out) @@ -102,3 +102,24 @@ ilr_TS_chunk <- function(data, formula, chunk, timename = "time", fit } + + +#' @title Create the controls list for the ILR Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the time series model fit occurring within +#' \code{\link{ilr_TS}}. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @export +#' +ilr_TS_control <- function(quiet = FALSE, ...){ + list(quiet = quiet) +} diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index 91f3be77..ddc6996c 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -274,7 +274,7 @@ prep_cpts <- function(TS, control = list()){ } lls <- rep(NA, ntemps) for (i in 1:ntemps){ - fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- TS$reponse fun <- memoise_fun(fun, control$memoise) args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], timename = TS$timename, weights = TS$weights, @@ -456,7 +456,7 @@ process_saves <- function(saves, control = list()){ #' prep_ptMCMC_inputs <- function(TS, control = list()){ control <- do.call("ldats_classic_control", control) - fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- TS$response fun <- memoise_fun(fun, control$memoise) list(control = control, temps = prep_temp_sequence(TS = TS, control = control), diff --git a/R/multinom_TS.R b/R/multinom_TS.R index cb5876bf..49350873 100644 --- a/R/multinom_TS.R +++ b/R/multinom_TS.R @@ -71,7 +71,7 @@ multinom_TS <- function(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()){ - + control <- do.call("multinom_TS_control", control) if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) class(out) <- c("TS_fit", "list") @@ -107,3 +107,29 @@ multinom_TS_chunk <- function(data, formula, chunk, timename = "time", fit$timevals <- time_obs[which(in_chunk)] fit } + + +#' @title Create the controls list for the multinomial Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the time series model fit occurring within +#' \code{\link{multinom_TS}}. +#' +#' @param lambda \code{numeric} "weight" decay term used to set the prior +#' on the regressors within each chunk-level model. Defaults to 0, +#' corresponding to a fully vague prior. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @export +#' +multinom_TS_control <- function(lambda = 0, quiet = FALSE, ...){ + list(lambda = lambda, quiet = quiet) +} + diff --git a/R/sequential_TS.R b/R/sequential_TS.R index 50a59995..ea41b98c 100644 --- a/R/sequential_TS.R +++ b/R/sequential_TS.R @@ -126,7 +126,7 @@ package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ if(is.null(rho_dist)){ focal_rho_dist <- NULL data <- TS$data$train$ts_data - fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- TS$response args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, control = control$method_args) @@ -188,7 +188,11 @@ est_regressors <- function(rho_dist, TS, control = list()){ control <- do.call("sequential_TS_control", control) data <- TS$data$train$ts_data if(is.null(rho_dist)){ - fun <- eval(parse(text = paste0(TS$response, "_TS"))) + + msg <- " - estimating regressor distribution" + messageq(msg, control$quiet) + + fun <- TS$response args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, control = control$method_args) @@ -231,7 +235,7 @@ est_regressors <- function(rho_dist, TS, control = list()){ data <- TS$data$train$ts_data - fun <- eval(parse(text = paste0(TS$response, "_TS"))) + fun <- TS$response fun <- memoise_fun(fun, control$method_args$memoise) args <- list(data = data, formula = TS$formula, changepoints = cpts, timename = TS$timename, weights = TS$weights, diff --git a/R/utilities.R b/R/utilities.R index 5528cc91..0e183f45 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -55,11 +55,11 @@ prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ } form <- " [:bar] :percent eta: :eta" if (bar_type == "rho"){ - msg <- " Estimating change point distribution" + msg <- " - estimating change point distribution" out <- progress_bar$new(form, control$nit, width = 60) } if (bar_type == "eta"){ - msg <- " Estimating regressor distribution" + msg <- " - estimating regressor distribution" out <- progress_bar$new(form, nr, width = 60) } messageq(msg, control$quiet) diff --git a/hold.R b/hold.R deleted file mode 100644 index 0327a041..00000000 --- a/hold.R +++ /dev/null @@ -1,51 +0,0 @@ -# work on making formulas be able to be repeatedly prepped - -# in the midst of the TS classic ldats...looks like starting to work, need -# to double back through tho - -# get memo into a better location - -# lots of tidying to do! - -devtools::load_all() - - data(rodents) - -data <- rodents -topics = 2 -reps = 2 -formulas = ~ 1 -nchangepoints = 0:2 -timename = "newmoon" -weights = TRUE -control = list() -control <- do.call("LDA_TS_control", control) -data <- conform_data(data = data, control = control) -LDAs <- LDA(data = data, topics = topics, reps = reps, - control = control$LDA_control) - -control <- list() - lda <- LDA(rodents, 3, 1, list(quiet = TRUE)) - -lda - - dct <- rodents$document_covariate_table - dct$gamma <- lda[[1]]@gamma - weights <- document_weights(dtt) - check_multinom_TS_inputs(dct, timename = "newmoon") - mts <- multinom_TS(dct, formula = gamma ~ 1, changepoints = c(20,50), - timename = "newmoon", weights = weights) - formula = gamma ~ 1 - data <- dct - fit <- multinom(formula, data, weights, subset = in_chunk, trace = FALSE, - decay = control$lambda) - - basis <- "ilr" - props <- data[ , grepl("gamma", colnames(data))] - data$coords <- coda.base::coordinates(props, basis) - formula <- as.formula(gsub("gamma", "coords", deparse(formula))) - ff <- lm(formula, data, subset = in_chunk, weights) - fv_nrows <- sum(in_chunk) - fv_ncols <- sum(grepl("gamma", colnames(data))) - ff_fv <- as.matrix(ff$fitted.values, nrows = fv_nrows, ncols = fv_ncols) - comps <- coda.base::composition(ff$fitted.values, basis) diff --git a/man/TS.Rd b/man/TS.Rd new file mode 100644 index 00000000..eebd49c4 --- /dev/null +++ b/man/TS.Rd @@ -0,0 +1,84 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{TS} +\alias{TS} +\alias{prep_TS_models} +\title{Conduct a Bayesian compositional Time Series analysis} +\usage{ +TS(LDAs, data, formulas = ~1, nchangepoints = 0, timename = "time", + weights = NULL, control = list()) + +prep_TS_models(LDAs, data, formulas = ~1, nchangepoints = 0, + timename = "time", weights = NULL, control = list()) +} +\arguments{ +\item{data}{\code{data.frame} including [1] the time variable (indicated +in \code{timename}), [2] the predictor variables (required by +\code{formula}) and [3], the compositional response variable (indicated +in \code{formula}). \cr \cr +Note that the response variables should be formatted as a +\code{data.frame} object named as indicated by the \code{response} entry +in the \code{control} list, such as \code{gamma} for a standard TS +analysis on LDA output.} + +\item{nchangepoints}{\code{integer} corresponding to the number of +change points to include in the model. 0 is a valid input (corresponding +to no change points, so a singular time series model), and the current +implementation can reasonably include up to 6 change points. The +number of change points is used to dictate the segmentation of the +time series into chunks fit with separate models dictated by +\code{formula}.} + +\item{timename}{\code{character} element indicating the time variable +used in the time series. Defaults to \code{"time"}. The variable must be +integer-conformable or a \code{Date}. If the variable named +is a \code{Date}, the input is converted to an integer, resulting in the +timestep being 1 day, which is often not desired behavior.} + +\item{weights}{Optional class \code{numeric} vector of weights for each +document. Defaults to \code{NULL}, translating to an equal weight for +each document. When using \code{multinom_TS} in a standard LDATS +analysis, it is advisable to weight the documents by their total size, +as the result of \code{\link[topicmodels]{LDA}} is a matrix of +proportions, which does not account for size differences among documents. +For most models, a scaling of the weights (so that the average is 1) is +most appropriate, and this is accomplished using \code{document_weights}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model including the parallel tempering Markov Chain +Monte Carlo (ptMCMC) controls. Values not input assume defaults set by +\code{\link{TS_control}}.} + +\item{formula}{\code{\link[stats]{formula}} defining the regression between +the change points. Any predictor variable included must also be a column +in \code{data} and any (compositional) response variable must be a set +of columns in \code{data}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} +} +\value{ +\code{TS}: class \code{TS_set} \code{list} of both selected and all + results from \code{\link{sequential_TS}} applied for each model on each + LDA model input as well as the control \code{list} used to fit the + model. \cr \cr + \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a + preliminary model object for a Time Series model fit. +} +\description{ +\code{TS} is the main interface function for the LDATS application + of Bayesian change point Time Series analyses (Christensen + \emph{et al.} 2018). \cr \cr + \code{prep_TS_models} pre-prepares the TS model objects for simpler + use within the subfunctions. + + @details This model extends the approach of Western and Kleykamp (2004; + see also Ruggieri 2013) to compositional response data using + softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) + or simplical geometry () + via a generalized linear modeling approach (McCullagh and Nelder 1989). + The models can be fit using a range of methods, but available procedures + are different flavors of parallel tempering Markov Chain Monte Carlo + (ptMCMC) methods (Earl and Deem 2005) +} diff --git a/man/TS_control.Rd b/man/TS_control.Rd index 5e77bd24..f020f45d 100644 --- a/man/TS_control.Rd +++ b/man/TS_control.Rd @@ -9,7 +9,7 @@ TS_control(model = sequential_TS, model_args = list(), method = "ldats_classic", method_args = ldats_classic_control(), summary_prob = 0.95, measurer = AIC, measurer_args = list(), selector = which.min, selector_args = list(), soften = TRUE, - quiet = FALSE) + quiet = FALSE, ...) } \arguments{ \item{response}{\code{character} element indicating the response variable @@ -48,6 +48,9 @@ softly or if errors should trigger a full-stop to the pipeline.} \item{quiet}{\code{logical} indicator of whether the model should run quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} } \value{ \code{list}, with named elements corresponding to the arguments. diff --git a/man/package_TS.Rd b/man/package_TS.Rd new file mode 100644 index 00000000..ceb8c71c --- /dev/null +++ b/man/package_TS.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS.R +\name{package_TS} +\alias{package_TS} +\alias{select_TS} +\alias{measure_TS} +\title{Measure, select, and package the output of a set of Time Series + models} +\usage{ +package_TS(selected_TSs, TSs, control = list()) + +select_TS(TSs, control = list()) + +measure_TS(TSs, control = list()) +} +\arguments{ +\item{selected_TSs}{\code{list} of selected time series model \code{list}s.} + +\item{TSs}{\code{list} of time series model \code{list}s.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} +} +\value{ +\code{measure_TS}: \code{vector} of values corresponding to the model + evaluations. + \code{select_TS}: \code{list} of selected models' \code{list}s. + \code{pacakage_TS}: class \code{TS_set} \code{list} of both selected and + all results from \code{\link{sequential_TS}} applied for each model on + each LDA model input as well as the control \code{list} used to fit + the model. +} +\description{ +\code{measure_TS} determines the fit value used to select among the + models. \cr \cr + \code{select_TS} chooses the best model(s) of interest based on their + measured values and the selector function. \cr \cr + \code{package_TS} sets the class and names the elements of the results + \code{list} from \code{\link{sequential_TS}} applied to the + combination of TS models requested for the LDA model(s) input. +} diff --git a/man/sequential_TS_control.Rd b/man/sequential_TS_control.Rd index cc336335..865b2f4f 100644 --- a/man/sequential_TS_control.Rd +++ b/man/sequential_TS_control.Rd @@ -6,7 +6,7 @@ \usage{ sequential_TS_control(method = "ldats_classic", method_args = ldats_classic_control(), summary_prob = 0.95, - soften = TRUE, quiet = FALSE) + soften = TRUE, quiet = FALSE, ...) } \arguments{ \item{method}{\code{function} used to drive the sampler of the TS @@ -30,6 +30,9 @@ softly or if errors should trigger a full-stop to the pipeline.} \item{quiet}{\code{logical} indicator of whether the model should run quietly (if \code{FALSE}, a progress bar and notifications are printed).} +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} + \item{response}{\code{character} element indicating the response variable used in the time series. \cr \cr Must have a corresponding \code{_TS} function.} diff --git a/notes.R b/notes.R index a0d57499..21455b81 100644 --- a/notes.R +++ b/notes.R @@ -1,36 +1,28 @@ -to do +# work on making formulas be able to be repeatedly prepped +# its not really right to use gamma as a name for ilr +# lots of tidying to do! + +devtools::load_all() + + data(rodents) + +data <- rodents +topics = 2 +reps = 2 +formulas = ~ 1 +nchangepoints = 0:2 +timename = "newmoon" +weights = TRUE +control = list() +control <- do.call("LDA_TS_control", control) +data <- conform_data(data = data, control = control) +LDAs <- LDA(data = data, topics = topics, reps = reps, + control = control$LDA_control) +control$TS_control$method_args$nit <- 100 +TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control$TS_control) -ldats classic method/ptmcmc - a. tidy up function naming and calling - b. documentation - c. cut old script - d. make sure memoization is located properly - -multinom_TS/ilr_TS/others - a. generalize functions more - b. drop special classes - c. documentation - - - -time_order_data ... hmmmmm - -its not really right to use gamma as a name for ilr -standardized output from LDA functions -s3 object with -params (however they're provided, collated into a list) -document_topic_table -log_likelihood as a logLik object -data used to fit the model - -def still in the thick of this -just need to take a solid break -currently working in LDA to get it to work with function args - - -LDA_set is now LDA and TS_on_LDA is now TS - -trying to really streamline the code at each level of the pipeline and such now LDA could be any of the linquistic decomposition analyses or whatever including any of a number of "LDA" functions or models, so i'm revoking @@ -38,17 +30,12 @@ the importing of LDA from topicmodels but keeping topicmodels imported to allow calling of topicmodels::LDA from inside LDA (the default!) -generalizing multinom_TS to be compositional_TS +seed is rep -in the multi_LDA_TS - in test_LDA_TS - requires a predict.LDA_TS +introduction of soften logical variable +designed to help soften errors in pipelines through wrapping in tryCatch -LDAT_TS - developing predict method +LDA_set is now LDA and TS_on_LDA is now TS -check seeds is now check_nreps -seed is rep -introduction of soften logical variable -designed to help soften errors in pipelines through wrapping in tryCatch \ No newline at end of file +standardized output from LDA and TS functions diff --git a/testing_example.R b/testing_example.R deleted file mode 100644 index 5f8c28a2..00000000 --- a/testing_example.R +++ /dev/null @@ -1,15 +0,0 @@ -devtools::load_all() -data(rodents) -length(rodents) - -rodents[["metadata"]] <- list(timename = "newmoon") -names(rodents) <- c("abundance", "covariates", "metadata") - -rodents[["metadata"]] <- NULL -names(rodents)[1] <- "term" -mod <- LDA(rodents) -mod <- LDA(rodents, topics = 1) -mod <- LDA(rodents, control = LDA_control(LDA_args = list(method = "Gibbs"))) - -mod <- LDA(rodents[[1]]) - diff --git a/todo.R b/todo.R deleted file mode 100644 index 6f0b51fc..00000000 --- a/todo.R +++ /dev/null @@ -1,6 +0,0 @@ -need to do - -sequential_TS_control - -multinom_TS_control -irl_TS_control \ No newline at end of file From 15fe90a98236f6a3a6b6ed426292b71f7fe3ffff Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sat, 21 Mar 2020 02:24:43 -0700 Subject: [PATCH 21/43] plugging along --- NAMESPACE | 21 +++ R/LDA.R | 310 ++++++++++++++++++++++++++----- R/LDA_TS.R | 195 +++++++++++++++++-- R/TS.R | 8 +- R/TS_on_LDA.R | 255 ------------------------- R/argument_checking.R | 228 +++++++++++++++++++++++ R/data_preparation.R | 129 +++++++++---- R/ldats_classic_method.R | 2 +- R/sequential_TS.R | 5 +- R/temper.R | 15 -- R/utilities.R | 105 ----------- man/AIC.LDA.Rd | 23 +++ man/LDA.Rd | 71 +++++++ man/LDA_TS.Rd | 91 +++++++++ man/LDA_TS_control.Rd | 104 +++++++++++ man/LDA_control.Rd | 54 ++++++ man/TS.Rd | 7 +- man/TS_control.Rd | 12 +- man/check_control.Rd | 2 +- man/check_document_term_table.Rd | 2 +- man/check_nreps.Rd | 2 +- man/check_topics.Rd | 2 +- man/conform_data.Rd | 46 +++++ man/data_subsetting.Rd | 53 ++++++ man/identity_LDA.Rd | 20 ++ man/ilr_TS_control.Rd | 23 +++ man/logLik.LDA.Rd | 22 +++ man/multinom_TS_control.Rd | 27 +++ man/package_LDA.Rd | 42 +++++ man/sequential_TS.Rd | 3 +- man/sequential_TS_control.Rd | 2 +- man/topicmodels_LDA.Rd | 45 +++++ notes.R | 46 ++++- 33 files changed, 1472 insertions(+), 500 deletions(-) delete mode 100644 R/TS_on_LDA.R delete mode 100644 R/temper.R create mode 100644 man/AIC.LDA.Rd create mode 100644 man/LDA.Rd create mode 100644 man/LDA_TS.Rd create mode 100644 man/LDA_TS_control.Rd create mode 100644 man/LDA_control.Rd create mode 100644 man/conform_data.Rd create mode 100644 man/data_subsetting.Rd create mode 100644 man/identity_LDA.Rd create mode 100644 man/ilr_TS_control.Rd create mode 100644 man/logLik.LDA.Rd create mode 100644 man/multinom_TS_control.Rd create mode 100644 man/package_LDA.Rd create mode 100644 man/topicmodels_LDA.Rd diff --git a/NAMESPACE b/NAMESPACE index 66b3c0b6..e26f30a6 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,5 +1,7 @@ # Generated by roxygen2: do not edit by hand +S3method(AIC,LDA) +S3method(logLik,LDA) S3method(logLik,TS) S3method(logLik,TS_fit) S3method(plot,LDA_TS) @@ -8,6 +10,12 @@ S3method(plot,LDA_set) S3method(plot,TS_fit) S3method(print,TS) export(AICc) +export(LDA) +export(LDA_TS) +export(LDA_TS_control) +export(LDA_call) +export(LDA_control) +export(LDA_msg) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) export(TS) @@ -20,6 +28,7 @@ export(check_document_term_table) export(check_formula) export(check_nreps) export(check_topics) +export(conform_data) export(count_trips) export(document_weights) export(ecdf_plot) @@ -27,13 +36,17 @@ export(est_changepoints) export(est_regressors) export(eta_diagnostics_plots) export(eval_step) +export(identity_LDA) export(iftrue) export(ilr_TS) export(ilr_TS_chunk) +export(ilr_TS_control) export(ldats_classic) export(ldats_classic_control) +export(leave_p_out) export(list_depth) export(logsumexp) +export(measure_LDA) export(measure_TS) export(measure_eta_vcov) export(measure_rho_vcov) @@ -43,12 +56,16 @@ export(mirror_vcov) export(modalvalue) export(multinom_TS) export(multinom_TS_chunk) +export(multinom_TS_control) export(normalize) +export(null_rule) +export(package_LDA) export(package_TS) export(package_chunk_fits) export(package_sequential_TS) export(posterior_plot) export(pred_gamma_TS_plot) +export(prep_LDA_models) export(prep_TS_models) export(prep_chunks) export(prep_cpts) @@ -61,9 +78,11 @@ export(prep_temp_sequence) export(process_saves) export(propose_step) export(proposed_step_mods) +export(random_loo) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) +export(select_LDA) export(select_TS) export(sequential_TS) export(sequential_TS_control) @@ -81,7 +100,9 @@ export(step_chains) export(summarize_etas) export(summarize_rhos) export(swap_chains) +export(systematic_loo) export(take_step) +export(topicmodels_LDA) export(trace_plot) export(update_cpts) export(update_ids) diff --git a/R/LDA.R b/R/LDA.R index 3bd400b6..aef78642 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -1,22 +1,60 @@ -# LDA is now functionally what LDA_set was before -# "reps" replaces "nseeds" but otherwise things are the same generally at api -# the control list is expanded to now include a base LDA modeling function -# and then arguments for all three functions, it also gets the subset info -# because it may be needed, and in addition to quiet a boolean "soften" -# which softens errors during model running -# prep_LDA_models combines the data (conforming if needed), topics, -# reps, and subsets to prep the list of model inputs, that will actually be -# appended to with the results, which are done at the top with LDA_call. -# LDA_call prints the message, and then preps the input arguments as used -# in a do.call on the function given in the control list. there are -# examples of both a generalized topicmodels LDA function wrapper (works -# with Gibbs sampling approach too!) and an "identity" 1-topic function. -# these functions allow for pre- and post-processing around the main model -# function without having to impact the general LDA_call -# select_LDA does a general measuring and then selecting, which now allows -# for arguments to be passed in! - +#' @title Run a set of Linguistic Decomposition Analysis models +#' +#' @description +#' \code{LDA} is the main interface function for the LDATS application +#' of Linguistic Decomposition Analysis (Christensen +#' \emph{et al.} 2018). \cr \cr +#' \code{prep_LDA_models} pre-prepares the LDA model objects for simpler +#' use within the subfunctions. +#' \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model +#' as set up by \code{prep_LDA_models}. +#' \code{LDA_msg} produces a model-running message if desired. +#' +#' @details For a (potentiall subset) dataset consisting of counts of words +#' across multiple documents in a corpus, conduct multiple Linguistic +#' Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation +#' using the Variational Expectation Maximization (VEM) algorithm; +#' Blei \emph{et al.} 2003) to account for [1] +#' uncertainty in the number of latent topics and [2] the impact of initial +#' values in the estimation procedure. +#' +#' @param data +#' +#' @param topics Vector of the number of topics to evaluate for each model. +#' Must be conformable to \code{integer} values. +#' +#' @param reps Number of replicate starts to use for each +#' value of \code{topics}. Must be conformable to \code{integer} value. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' LDA model. Values not input assume defaults set by +#' \code{\link{LDA_control}}. +#' +#' @return +#' \code{LDA}: class \code{LDA_set} \code{list} of both selected and all +#' results from \code{\link{LDA_call}} applied for each model on each +#' data input(s) as well as the control \code{list} used to fit the +#' model. \cr \cr +#' \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a +#' preliminary model object for an LDA model fit. +#' \code{LDA_call}: \code{LDA} \code{list} of model results from a single +#' run of a \code{} function, such as +#' \code{\link{topicmodels_LDA}}. +#' \code{LDA_msg}: a message is produced. +#' +#' @references +#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet +#' Allocation. \emph{Journal of Machine Learning Research} +#' \strong{3}:993-1022. +#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. +#' +#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic +#' Models. \emph{Journal of Statistical Software} \strong{40}:13. +#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +#' +#' @export +#' LDA <- function(data, topics = 2, reps = 1, control = list()){ control <- do.call("LDA_control", control) messageq("----- Linguistic Decomposition Analyses -----", control$quiet) @@ -31,23 +69,10 @@ LDA <- function(data, topics = 2, reps = 1, control = list()){ } -LDA_control <- function(model = topicmodels_LDA, - model_args = list(method = "VEM", seeded = TRUE), - measurer = AIC, - measurer_args = list(), - selector = which.min, - selector_args = list(), - nsubsets = 1, - subset_rule = NULL, - soften = TRUE, - quiet = FALSE, ...){ - list(model = model, model_args = model_args, - measurer = measurer, measurer_args = measurer_args, - selector = selector, selector_args = selector_args, - nsubsets = nsubsets, subset_rule = subset_rule, - soften = soften, quiet = quiet) -} - +#' @rdname LDA +#' +#' @export +#' prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ data <- conform_data(data = data, control = control) subsets <- names(data) @@ -71,25 +96,132 @@ prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ } +#' @rdname LDA +#' +#' @export +#' LDA_call <- function(LDA = NULL, control = list()){ control <- do.call("LDA_control", control) - LDA_msg(LDA = LDA, quiet = control$quiet) + LDA_msg(LDA = LDA, control = control) fun <- control$model args <- update_list(control$model_args, LDA = LDA) soft_call(fun = fun, args = args, soften = control$soften) } - - -LDA_msg <- function(LDA, quiet = FALSE){ +#' @rdname LDA +#' +#' @export +#' +LDA_msg <- function(LDA, control = list()){ subset_msg <- paste0(" - data subset ", LDA$data_subset) topic_msg <- paste0(", ", LDA$topics, " topics") rep_msg <- paste0(", replicate ", LDA$rep) - messageq(paste0(subset_msg, topic_msg, rep_msg), quiet) + messageq(paste0(subset_msg, topic_msg, rep_msg), control$quiet) } + + +#' @title Create the controls list for the Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the LDA model fit occurring within +#' \code{\link{LDA}}. +#' +#' @param model Main LDA \code{function}. +#' +#' @param model_args \code{list} of (named) arguments to be used in +#' \code{model} via \code{\link{LDA_call}}. +#' +#' @param nsubsets Number of data subsets. +#' +#' @param subset_rule \code{function} used to subset the data. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param measurer \code{function} used in evaluation of the LDA +#' models; \code{measurer} creates a value for each model. +#' +#' @param measurer_args \code{list} of (named) arguments to be used in +#' \code{measurer} via \code{\link{do.call}}. +#' +#' @param selector \code{function} usde in evaluation of the LDA +#' models; \code{selector} operates on the values to choose the models. +#' +#' @param selector_args \code{list} of (named) arguments to be used in +#' \code{selector} via \code{\link{do.call}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return \code{list}, with named elements corresponding to the arguments. +#' +#' @examples +#' LDA_control() +#' +#' @export +#' +LDA_control <- function(model = topicmodels_LDA, + model_args = list(method = "VEM", seeded = TRUE), + measurer = AIC, + measurer_args = list(), + selector = which.min, + selector_args = list(), + nsubsets = 1, + subset_rule = NULL, + soften = TRUE, + quiet = FALSE, ...){ + list(model = model, model_args = model_args, + measurer = measurer, measurer_args = measurer_args, + selector = selector, selector_args = selector_args, + nsubsets = nsubsets, subset_rule = subset_rule, + soften = soften, quiet = quiet) +} + + +#' @title Class Latent Dirichlet Allocation Linguistic Decomposition Analysis +#' as conducted via the topicmodels package +#' +#' @description Fit the standard LDATS LDA model (a true Latent Dirichlet +#' Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} +#' (Grun and Hornik 2011). Default methodology is the Variational +#' Expectation Maximization routine (VEM) as described by +#' Blei \emph{et al.} (2003). \cr \cr +#' If the model is defined to only fit one topic, \code{\link{identity_LDA}} +#' is used by default. +#' +#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' \code{list}. +#' +#' @param ... Additional arguments to be passed to +#' \code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input. +#' +#' @param seeded \code{logical} indicator of if the LDA should be a seeded +#' replicate. +#' +#' @param method Fitting routine used in +#' \code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only +#' \code{"VEM"} and \code{"Gibbs"} are supported. +#' +#' @return \code{LDA} \code{list}. +#' +#' @references +#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet +#' Allocation. \emph{Journal of Machine Learning Research} +#' \strong{3}:993-1022. +#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. +#' +#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic +#' Models. \emph{Journal of Statistical Software} \strong{40}:13. +#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +#' +#' @export +#' topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ data <- LDA$data topics <- LDA$topics @@ -121,6 +253,19 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ } } +#' @title Identity Linguistic Decomposition Analysis +#' +#' @description This function acts as an "identity" model, wherein the +#' output is functionally the input. This allows for "single-topic" models +#' that do not actually decompose the data to be included in the model set. +#' +#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' \code{list}. +#' +#' @return \code{LDA} \code{list} with most components as placeholders. +#' +#' @export +#' identity_LDA <- function(LDA){ data <- LDA$data rep <- LDA$rep @@ -137,17 +282,91 @@ identity_LDA <- function(LDA){ } +#' @title Determine the AIC of a Linguistic Decomposition Analysis +#' model +#' +#' @description Convenience function to extract and format the AIC +#' of a \code{LDA}-class object fit by \code{\link{LDA_call}}. +#' +#' @param object Class \code{LDA} object to be evaluated. +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @param k Per-parameter numeric penalty. +#' +#' @return AIC of the model. +#' +#' @export +#' AIC.LDA <- function(object, ..., k = 2){ lls <- logLik(object) -2 * as.numeric(lls) + k * attr(lls, "df") } + +#' @title Determine the log likelihood of a Linguistic Decomposition Analysis +#' model +#' +#' @description Convenience function to extract and format the log likelihood +#' of a \code{LDA}-class object fit by \code{\link{LDA_call}}. +#' +#' @param object Class \code{LDA} object to be evaluated. +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return Log likelihood of the model \code{logLik}, also with \code{df} +#' (degrees of freedom) and \code{nobs} (number of observations) values. +#' +#' @export +#' logLik.LDA <- function(object, ...){ object$log_likelihood } +#' @title Measure, select, and package the output of a set of Linguistic +#' Decomposition Analysis models +#' +#' @description +#' \code{measure_LDA} determines the fit value used to select among the +#' models. \cr \cr +#' \code{select_LDA} chooses the best model(s) of interest based on their +#' measured values and the selector function. \cr \cr +#' \code{package_LDA} sets the class and names the elements of the results +#' \code{list} from \code{\link{LDA_call}} applied to the +#' combination of TS models requested for the data input(s). +#' +#' @param LDAs \code{list} of LDA model \code{list}s. +#' +#' @param selected_LDAs \code{list} of selected LDA model \code{list}s. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' LDA model. Values not input assume defaults set by +#' \code{\link{LDA_control}}. +#' +#' @return +#' \code{measure_LDA}: \code{vector} of values corresponding to the model +#' evaluations. +#' \code{select_LDA}: \code{list} of selected models' \code{list}s. +#' \code{pacakage_LDA}: class \code{LDA_set} \code{list} of both selected +#' and all results from \code{\link{LDA_call}} applied for each model on +#' each data input as well as the control \code{list} used to fit +#' the model. +#' +#' @export +#' +package_LDA <- function(selected_LDAs, LDAs, control = list()){ + out <- list(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) + class(out) <- c("LDA_set", "list") + out +} + + +#' @rdname package_LDA +#' +#' @export +#' select_LDA <- function(LDAs = list(), control = list()){ nLDAs <- length(LDAs) maxtopics <- 0 @@ -164,6 +383,10 @@ select_LDA <- function(LDAs = list(), control = list()){ LDAs[selection] } +#' @rdname package_LDA +#' +#' @export +#' measure_LDA <- function(LDAs = list(), control = list()){ fun <- control$measurer args <- control$measurer_args @@ -179,8 +402,5 @@ measure_LDA <- function(LDAs = list(), control = list()){ vals } -package_LDA <- function(selected_LDAs, LDAs, control = list()){ - out <- list(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) - class(out) <- c("LDA_set", "list") - out -} + + diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 7071b03e..3b48b0dc 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,7 +1,86 @@ -# pulled back to just what's working so far -# the goal is to have a single LDA_TS function, no need for multi etc -# - +#' @title Run a set of Linguistic Decomposition Analysis models coupled to +#' Bayesian Time Series models +#' +#' @description +#' \code{LDA_TS} is the main interface function for the LDATS application +#' of Linguistic Decomposition Analysis and Time Series modeling +#' (Christensen \emph{et al.} 2018). \cr \cr +#' +#' @details For a (potentiall subset) dataset consisting of counts of words +#' across multiple documents in a corpus, conduct multiple Linguistic +#' Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation +#' using the Variational Expectation Maximization (VEM) algorithm; +#' Blei \emph{et al.} 2003) to account for [1] +#' uncertainty in the number of latent topics and [2] the impact of initial +#' values in the estimation procedure. \cr \cr +#' This model extends the approach of Western and Kleykamp (2004; +#' see also Ruggieri 2013) to compositional response data using +#' softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) +#' or simplical geometry () +#' via a generalized linear modeling approach (McCullagh and Nelder 1989). +#' The models can be fit using a range of methods, but available procedures +#' are different flavors of parallel tempering Markov Chain Monte Carlo +#' (ptMCMC) methods (Earl and Deem 2005). +#' +#' +#' @param formula \code{\link[stats]{formula}} defining the regression between +#' the change points. Any predictor variable included must also be a column +#' in \code{data} and any (compositional) response variable must be a set +#' of columns in \code{data}. +#' +#' @param nchangepoints \code{integer} corresponding to the number of +#' change points to include in the model. 0 is a valid input (corresponding +#' to no change points, so a singular time series model), and the current +#' implementation can reasonably include up to 6 change points. The +#' number of change points is used to dictate the segmentation of the +#' time series into chunks fit with separate models dictated by +#' \code{formula}. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @param weights Optional class \code{numeric} vector of weights for each +#' document. Defaults to \code{NULL}, translating to an equal weight for +#' each document. When using \code{multinom_TS} in a standard LDATS +#' analysis, it is advisable to weight the documents by their total size, +#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of +#' proportions, which does not account for size differences among documents. +#' For most models, a scaling of the weights (so that the average is 1) is +#' most appropriate, and this is accomplished using \code{document_weights}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @param data A document term table, \code{list} of document term and +#' covariate tables, a list of training and test sets of the two tables, +#' or a list of multiple replicate splits of training and test sets of +#' the two tables. \cr \cr +#' See \code{\link{conform_data}}. +#' +#' @param topics Vector of the number of topics to evaluate for each model. +#' Must be conformable to \code{integer} values. +#' +#' @param reps Number of replicate starts to use for each +#' value of \code{topics}. Must be conformable to \code{integer} value. +#' +#' @return NOTHING YET +#' +#' @references +#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet +#' Allocation. \emph{Journal of Machine Learning Research} +#' \strong{3}:993-1022. +#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. +#' +#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic +#' Models. \emph{Journal of Statistical Software} \strong{40}:13. +#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +#' +#' @export +#' LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ @@ -17,6 +96,95 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, + + + +#' @title Create the controls list for the complete Linguistic Decomposition +#' Analysis and Time Series model +#' +#' @description This function provides a simple creation and definition of a +#' list used to control the decomposition and time series model fitting +#' occurring within \code{\link{LDA_TS}}. +#' +#' @param LDA_model Main LDA \code{function}. +#' +#' @param LDA_model_args \code{list} of (named) arguments to be used in +#' \code{LDA_model} via \code{\link{LDA_call}}. +#' +#' @param TS_model Main TS \code{function}. +#' +#' @param TS_model_args \code{list} of (named) arguments to be used in +#' \code{TS_model}. +#' +#' @param TS_response \code{function} used to model the compositional +#' response. +#' +#' @param response_args \code{list} of (named) arguments to be used in +#' \code{TS_response} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_TS_control} function like +#' \code{\link{multinom_TS_control}}. +#' +#' @param TS_method \code{function} used to drive the sampler of the TS +#' models; \code{TS_method} defines and operates the computational +#' procedure. \cr \cr +#' Current pre-built options include \code{\link{ldats_classic}}. +#' +#' @param TS_method_args \code{list} of (named) arguments to be used in +#' \code{TS_method} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_control} function like +#' \code{\link{ldats_classic_control}}. +#' +#' @param summary_prob Probability used for summarizing the posterior +#' distributions (via the highest posterior density interval, see +#' \code{\link[coda]{HPDinterval}}). +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param TS_measurer \code{function} used in evaluation of the TS +#' models; \code{measurer} creates a value for each model. +#' +#' @param TS_measurer_args \code{list} of (named) arguments to be used in +#' \code{TS_measurer} via \code{\link{do.call}}. +#' +#' @param TS_selector \code{function} usde in evaluation of the TS +#' models; \code{TS_selector} operates on the values to choose the models. +#' +#' @param TS_selector_args \code{list} of (named) arguments to be used in +#' \code{TS_selector} via \code{\link{do.call}}. +#' +#' @param LDA_measurer \code{function} used in evaluation of the LDA +#' models; \code{LDA_measurer} creates a value for each model. +#' +#' @param LDA_measurer_args \code{list} of (named) arguments to be used in +#' \code{LDA_measurer} via \code{\link{do.call}}. +#' +#' @param LDA_selector \code{function} usde in evaluation of the LDA +#' models; \code{LDA_selector} operates on the values to choose the models. +#' +#' @param LDA_selector_args \code{list} of (named) arguments to be used in +#' \code{LDA_selector} via \code{\link{do.call}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @param nsubsets Number of data subsets. +#' +#' @param subset_rule \code{function} used to subset the data. +#' +#' @return \code{list} of \code{list}s and single elements, with named +#' elements corresponding to the arguments. +#' +#' @examples +#' LDA_TS_control() +#' +#' @export +#' LDA_TS_control <- function(LDA_model = topicmodels_LDA, LDA_model_args = list(method = "VEM", seeded = TRUE), @@ -25,20 +193,20 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, LDA_selector = which.min, LDA_selector_args = list(), TS_model = sequential_TS, - TS_model_args = list(), - TS_response = "multinom", - TS_response_args = list(), - TS_method = "ldats_classic", + TS_model_args = sequential_TS_control(), + TS_response = multinom_TS, + TS_response_args = multinom_TS_control(), + TS_method = ldats_classic, TS_method_args = ldats_classic_control(), - TS_measurer = AIC, - TS_measurer_args = list(), - TS_selector = which.min, - TS_selector_args = list(), nsubsets = 1, subset_rule = NULL, summary_prob = 0.95, soften = TRUE, - quiet = FALSE, ...){ + quiet = FALSE, + TS_measurer = AIC, + TS_measurer_args = list(), + TS_selector = which.min, + TS_selector_args = list(), ...){ LDA_control <- LDA_control(model = LDA_model, model_args = LDA_model_args, measurer = LDA_measurer, @@ -59,7 +227,6 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, summary_prob = summary_prob, soften = soften, quiet = quiet) - list(LDA_control = LDA_control, TS_control = TS_control, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) diff --git a/R/TS.R b/R/TS.R index 8d5ac53c..a81ec95c 100644 --- a/R/TS.R +++ b/R/TS.R @@ -55,12 +55,6 @@ #' most appropriate, and this is accomplished using \code{document_weights}. #' #' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' -#' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by #' \code{\link{TS_control}}. #' @@ -296,7 +290,7 @@ TS_control <- function(model = sequential_TS, selector_args = list(), soften = TRUE, quiet = FALSE, ...){ - list(response = response, response_args = response_args + list(response = response, response_args = response_args, method = method, method_args = method_args, measurer = measurer, measurer_args = measurer_args, selector = selector, selector_args = selector_args, diff --git a/R/TS_on_LDA.R b/R/TS_on_LDA.R deleted file mode 100644 index 68f1be68..00000000 --- a/R/TS_on_LDA.R +++ /dev/null @@ -1,255 +0,0 @@ - -TS_on_LDA <- function(LDA_models, document_covariate_table, formulas = ~ 1, - nchangepoints = 0, timename = "time", weights = NULL, - control = list()){ - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, weights, control) - control <- do.call("TS_control", control) - mods <- expand_TS(LDA_models, formulas, nchangepoints) - nmods <- nrow(mods) - TSmods <- vector("list", nmods) - - for(i in 1:nmods){ - print_model_run_message(mods, i, LDA_models, control) - formula_i <- mods$formula[[i]] - nchangepoints_i <- mods$nchangepoints[i] - data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, i) - TSmods[[i]] <- TS(data_i, formula_i, nchangepoints_i, timename, weights, - control) - } - package_TS_on_LDA(TSmods, LDA_models, mods) - -} -prep_TS_data <- function(document_covariate_table, LDA_models, mods, i = 1){ - check_document_covariate_table(document_covariate_table, LDA_models) - check_LDA_models(LDA_models) - if(is(LDA_models, "LDA")){ - LDA_models <- c(LDA_models) - class(LDA_models) <- c("LDA_set", "list") - } - data_i <- document_covariate_table - data_i$gamma <- LDA_models[[mods$LDA[i]]]@gamma - data_i -} - -select_TSx <- function(TS_models, control = list()){ - if (!("TS_on_LDA" %in% class(TS_models))){ - stop("TS_models must be of class TS_on_LDA") - } - check_control(control) - control <- do.call("TS_control", control) - measurer <- control$measurer - selector <- control$selector - TS_measured <- vapply(TS_models, measurer, 0) %>% - matrix(ncol = 1) - TS_selected <- apply(TS_measured, 2, selector) - which_selected <- which(TS_measured %in% TS_selected) - if (length(which_selected) > 1){ - warning("Selection results in multiple models, returning first") - which_selected <- which_selected[1] - } - out <- TS_models[[which_selected]] - class(out) <- c("TS_fit", "list") - out -} - - -package_TS_on_LDA <- function(TSmods, LDA_models, models){ - check_LDA_models(LDA_models) - if(is(LDA_models, "LDA")){ - LDA_models <- c(LDA_models) - class(LDA_models) <- c("LDA_set", "list") - } - nmodels <- nrow(models) - nms <- rep(NA, nmodels) - for (i in 1:nmodels){ - nms[i] <- paste0(names(LDA_models)[models$LDA[i]], ", ", - deparse(models$formula[[i]]), ", ", - models$nchangepoints[i], " changepoints") - } - names(TSmods) <- nms - class(TSmods) <- list("TS_on_LDA", "list") - TSmods -} - - -print.TS_on_LDA <- function(x, ...){ - print(names(x)) -} - - -print_model_run_message <- function(models, i, LDA_models, control){ - control <- do.call("TS_control", control) - equation <- deparse(models$formula[[i]]) - chngpt_msg <- paste0("with ", models$nchangepoints[i], " changepoints ") - reg_msg <- paste0("and equation ", equation) - ts_msg <- paste0(chngpt_msg, reg_msg) - lda_msg <- names(LDA_models)[models$LDA[i]] - msg <- paste0("Running TS model ", ts_msg, " on LDA model ", lda_msg, "\n") - messageq(msg, control$quiet) -} - -expand_TS <- function(LDA_models, formulas, nchangepoints){ - check_LDA_models(LDA_models) - check_nchangepoints(nchangepoints) - if (is(LDA_models, "LDA")) { - LDA_models <- c(LDA_models) - class(LDA_models) <- c("LDA_set", "list") - } - if (!is(formulas, "list")) { - if (is(formulas, "formula")) { - formulas <- c(formulas) - } else{ - stop("formulas does not contain formula(s)") - } - } else if (!all(vapply(formulas, is, TRUE, "formula"))) { - stop("formulas does not contain all formula(s)") - } - formulas - - out <- formulas - for (i in seq_along(formulas)) { - tformula <- paste(as.character(formulas[[i]]), collapse = "") - out[[i]] <- as.formula(paste("gamma", tformula)) - } - formulas <- out - nmods <- length(LDA_models) - mods <- 1:nmods - out <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) - colnames(out) <- c("LDA", "formula", "nchangepoints") - out -} - -check_nchangepoints <- function(nchangepoints){ - if (!is.numeric(nchangepoints) || any(nchangepoints %% 1 != 0)){ - stop("nchangepoints must be integer-valued") - } - if (any(nchangepoints < 0)){ - stop("nchangepoints must be non-negative") - } - return() -} - -check_weights <- function(weights){ - if(is.logical(weights)){ - if(weights){ - return() - } else{ - stop("if logical, weights need to be TRUE") - } - } - if(!is.null(weights)){ - if (!is.numeric(weights)){ - stop("weights vector must be numeric") - } - if (any(weights <= 0)){ - stop("weights must be positive") - } - if (round(mean(weights)) != 1){ - warning("weights should have a mean of 1, fit may be unstable") - } - } - return() -} - - -check_LDA_models <- function(LDA_models){ - if(("LDA_set" %in% class(LDA_models)) == FALSE){ - if(is(LDA_models, "LDA") == FALSE){ - stop("LDA_models is not an LDA object or LDA_set object") - } - } - return() -} - -check_document_covariate_table <- function(document_covariate_table, - LDA_models = NULL, - document_term_table = NULL){ - dct_df <- tryCatch(data.frame(document_covariate_table), - warning = function(x){NA}, error = function(x){NA}) - if(is(LDA_models, "LDA")){ - LDA_models <- c(LDA_models) - class(LDA_models) <- c("LDA_set", "list") - } - if (length(dct_df) == 1 && is.na(dct_df)){ - stop("document_covariate_table is not conformable to a data frame") - } - if (!is.null(LDA_models)){ - if (nrow(data.frame(document_covariate_table)) != - nrow(LDA_models[[1]]@gamma)){ - stop("number of documents in covariate table is not equal to number of - documents observed") - } - } else if (!is.null(document_term_table)){ - if (nrow(data.frame(document_covariate_table)) != - nrow(data.frame(document_term_table))){ - stop("number of documents in covariate table is not equal to number of - documents observed") - } - } - return() -} - -check_timename <- function(document_covariate_table, timename){ - if (!("character" %in% class(timename))){ - stop("timename is not a character value") - } - if (length(timename) > 1){ - stop("timename can only be one value") - } - covariate_names <- colnames(document_covariate_table) - if ((timename %in% covariate_names) == FALSE){ - stop("timename not present in document covariate table") - } - time_covariate <- document_covariate_table[ , timename] - if (!(is.Date(time_covariate)) & - (!is.numeric(time_covariate) || !all(time_covariate %% 1 == 0))){ - stop("covariate indicated by timename is not an integer or a date") - } - return() -} - - -check_formulas <- function(formulas, document_covariate_table, - control = list()){ - check_document_covariate_table(document_covariate_table) - check_control(control) - control <- do.call("TS_control", control) - # response <- control$response - dct <- document_covariate_table - if (!is(formulas, "list")) { - if (is(formulas, "formula")) { - formulas <- c(formulas) - } else{ - stop("formulas does not contain formula(s)") - } - } else if (!all(vapply(formulas, is, TRUE, "formula"))) { - stop("formulas does not contain all formula(s)") - } - resp <- unlist(lapply(lapply(formulas, terms), attr, "response")) - pred <- unlist(lapply(lapply(formulas, terms), attr, "term.labels")) - if (any(resp != 0)) { - stop("formula inputs should not include response variable") - } - if (!all(pred %in% colnames(dct))) { - misses <- pred[which(pred %in% colnames(dct) == FALSE)] - mis <- paste(misses, collapse = ", ") - stop(paste0("formulas include predictors not present in data: ", mis)) - } - return() -} - - - -check_TS_on_LDA_inputs <- function(LDA_models, document_covariate_table, - formulas = ~ 1, nchangepoints = 0, - timename = "time", weights = NULL, - control = list()){ - check_LDA_models(LDA_models) - check_document_covariate_table(document_covariate_table, LDA_models) - check_timename(document_covariate_table, timename) - check_formulas(formulas, document_covariate_table, control) - check_nchangepoints(nchangepoints) - check_weights(weights) - check_control(control) -} diff --git a/R/argument_checking.R b/R/argument_checking.R index 46f5ad0a..941e78d1 100644 --- a/R/argument_checking.R +++ b/R/argument_checking.R @@ -1,3 +1,231 @@ + + +#' @title Check that a control list is proper +#' +#' @description Check that a list of controls is of the right class. +#' +#' @param control Control list to evaluate. +#' +#' @param eclass Expected class of the list to be evaluated. +#' +#' @return an error message is thrown if the input is improper, otherwise +#' \code{NULL}. +#' +#' @examples +#' check_control(list()) +#' +#' @export +#' +check_control <- function(control, eclass = "list"){ + if (!(eclass %in% class(control))){ + stop(paste0("control is not a ", eclass)) + } + return() +} + + +#' @title Check that document term table is proper +#' +#' @description Check that the table of observations is conformable to +#' a matrix of integers. +#' +#' @param document_term_table Table of observation count data (rows: +#' documents, columns: terms. May be a class \code{matrix} or +#' \code{data.frame} but must be conformable to a matrix of integers, +#' as verified by \code{\link{check_document_term_table}}. +#' +#' @return an error message is thrown if the input is improper, otherwise +#' \code{NULL}. +#' +#' @examples +#' data(rodents) +#' check_document_term_table(rodents$document_term_table) +#' +#' @export +#' +check_document_term_table <- function(document_term_table){ + document_term_table_m <- as.matrix(document_term_table) + if(any(document_term_table_m %% 1 != 0)){ + dtt <- "document_term_table" + msg <- paste0(dtt, " is not conformable to a matrix of integers") + stop(msg) + } + return() +} + +#' @title Check that topics vector is proper +#' +#' @description Check that the vector of numbers of topics is conformable to +#' integers greater than 1. +#' +#' @param topics Vector of the number of topics to evaluate for each model. +#' Must be conformable to \code{integer} values. +#' +#' @return an error message is thrown if the input is improper, otherwise +#' \code{NULL}. +#' +#' @examples +#' check_topics(2) +#' +#' @export +#' +check_topics <- function(topics){ + if (!is.numeric(topics) || any(topics %% 1 != 0)){ + stop("topics vector must be integers") + } + if (any(topics < 2)){ + stop("minimum number of topics currently allowed is 2") + } + return() +} + +#' @title Check that nseeds value or vector is proper +#' +#' @description Check that the vector of numbers of seeds is conformable to +#' integers greater than 0. +#' +#' @param nseeds \code{integer} number of seeds (replicate starts) to use for +#' each value of \code{topics} in the LDAs. Must be conformable to a +#' positive \code{integer} value. +#' +#' @return an error message is thrown if the input is improper, otherwise +#' \code{NULL}. +#' +#' @examples +#' check_nseeds(1) +#' check_nseeds(2) +#' +#' @export +#' +check_nreps <- function(nreps){ + if (!is.numeric(nreps) || any(nreps %% 1 != 0)){ + stop("nreps must be integer-conformable") + } + return() +} + +check_nchangepoints <- function(nchangepoints){ + if (!is.numeric(nchangepoints) || any(nchangepoints %% 1 != 0)){ + stop("nchangepoints must be integer-valued") + } + if (any(nchangepoints < 0)){ + stop("nchangepoints must be non-negative") + } + return() +} + +check_weights <- function(weights){ + if(is.logical(weights)){ + if(weights){ + return() + } else{ + stop("if logical, weights need to be TRUE") + } + } + if(!is.null(weights)){ + if (!is.numeric(weights)){ + stop("weights vector must be numeric") + } + if (any(weights <= 0)){ + stop("weights must be positive") + } + if (round(mean(weights)) != 1){ + warning("weights should have a mean of 1, fit may be unstable") + } + } + return() +} + + +check_LDA_models <- function(LDA_models){ + if(("LDA_set" %in% class(LDA_models)) == FALSE){ + if(is(LDA_models, "LDA") == FALSE){ + stop("LDA_models is not an LDA object or LDA_set object") + } + } + return() +} + +check_document_covariate_table <- function(document_covariate_table, + LDA_models = NULL, + document_term_table = NULL){ + dct_df <- tryCatch(data.frame(document_covariate_table), + warning = function(x){NA}, error = function(x){NA}) + if(is(LDA_models, "LDA")){ + LDA_models <- c(LDA_models) + class(LDA_models) <- c("LDA_set", "list") + } + if (length(dct_df) == 1 && is.na(dct_df)){ + stop("document_covariate_table is not conformable to a data frame") + } + if (!is.null(LDA_models)){ + if (nrow(data.frame(document_covariate_table)) != + nrow(LDA_models[[1]]@gamma)){ + stop("number of documents in covariate table is not equal to number of + documents observed") + } + } else if (!is.null(document_term_table)){ + if (nrow(data.frame(document_covariate_table)) != + nrow(data.frame(document_term_table))){ + stop("number of documents in covariate table is not equal to number of + documents observed") + } + } + return() +} + +check_timename <- function(document_covariate_table, timename){ + if (!("character" %in% class(timename))){ + stop("timename is not a character value") + } + if (length(timename) > 1){ + stop("timename can only be one value") + } + covariate_names <- colnames(document_covariate_table) + if ((timename %in% covariate_names) == FALSE){ + stop("timename not present in document covariate table") + } + time_covariate <- document_covariate_table[ , timename] + if (!(is.Date(time_covariate)) & + (!is.numeric(time_covariate) || !all(time_covariate %% 1 == 0))){ + stop("covariate indicated by timename is not an integer or a date") + } + return() +} + + +check_formulas <- function(formulas, document_covariate_table, + control = list()){ + check_document_covariate_table(document_covariate_table) + check_control(control) + control <- do.call("TS_control", control) + # response <- control$response + dct <- document_covariate_table + if (!is(formulas, "list")) { + if (is(formulas, "formula")) { + formulas <- c(formulas) + } else{ + stop("formulas does not contain formula(s)") + } + } else if (!all(vapply(formulas, is, TRUE, "formula"))) { + stop("formulas does not contain all formula(s)") + } + resp <- unlist(lapply(lapply(formulas, terms), attr, "response")) + pred <- unlist(lapply(lapply(formulas, terms), attr, "term.labels")) + if (any(resp != 0)) { + stop("formula inputs should not include response variable") + } + if (!all(pred %in% colnames(dct))) { + misses <- pred[which(pred %in% colnames(dct) == FALSE)] + mis <- paste(misses, collapse = ", ") + stop(paste0("formulas include predictors not present in data: ", mis)) + } + return() +} + + + + #' @title Check that a formula is proper #' #' @description Check that \code{formula} is actually a diff --git a/R/data_preparation.R b/R/data_preparation.R index b37d66b7..ca366e06 100644 --- a/R/data_preparation.R +++ b/R/data_preparation.R @@ -1,34 +1,41 @@ -# data can come into LDA_TS LDA TS in a variety of forms, and depending on -# usages, might take a variety of different forms -# the purpose of this function is to generalize and extract the code used -# to shuddle between data formats from functions / replace with a single line -# it's still a work in progress and needs more extensive usage exploration, -# as it's going to be a workhorse function. -# this function makes use of a utility i brought over from portalcasting -# called list_depth that recursively works through an object to tell you -# how nested lists are. its extremely useful when you could have a list or -# a list of multiple lists and need to easily distinguish -# the idea is as follows: working up from the most elemental version -# possible, if it's not a list, but the data are a term table, the covariate -# table is added with assumed equispersed data like before and the data are -# now a list -# then, if it is a list but only a list of depth 1 (a list of two tables) -# we actually need to wrap it in a list to make it depth 2...think of this -# as a 1-subset data set. then, for a list of depth two, we need to -# potentially expand to a multiple-subset data set, to allow for cross valid -# methods, for example. so the list of depth 2 is replicated out to -# create a longer list that is still depth 2 but is now of length -# control$nsubsets. and then the subsetting of the data occurs according to -# the control$subset_rule, and each depth-2 list is actually split to -# a final level of train and test data, making the list depth 3 -# the training and testing data are saved as trimmed versions of the -# two tables. currently its not saving the test/train split explicitly, -# just implicitly via the data encoding that exists. we should probably -# shore this up a bit more for sure. -# also this function is big and modularized a good degree already...it could -# get chunked into subfunctions -# there are functions for basic leave p out cross validation, including -# both systematic and random approaches +#' @title Conform data for LDATS modeling +#' +#' @description Given any of a variety of possible data input types +#' (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of +#' \code{list}s, or \code{list} of \code{list} of \code{list}s) and +#' controls, this produces a properly formatted set of data (sets) for +#' LDATS modeling. +#' +#' @details This function makes use of the \code{\link{list_depth}} +#' utility that recursively works through an object to tell you +#' how nested a lists is. Working up from the most elemental version +#' possible, if it's not a \code{list}, but the data are a term table, the +#' covariate table is added with assumed equispersed data like before and +#' the data are now a \code{list}. Then, if it is a \code{list} but only a +#' of depth 1 (a \code{list} of two tables), we need to wrap it in a +#' \code{list} to make it depth-2, functionally a 1-subset data set. Then, +#' for a \code{list} of depth two, we need to potentially expand to a +#' multiple-subset data set, to allow for cross validtion methods, for +#' example. So, the \code{list} of depth 2 is replicated out to create a +#' longer \code{list} that is still depth 2 but is now of length +#' \code{control$nsubsets}. Then, the subsetting of the data occurs +#' according to the \code{control$subset_rule}, and each depth-2 \code{list} +#' is actually split to a final level of train and test subsets of the data, +#' making the \code{list} depth 3. \cr \cr +#' The training and testing data are saved as trimmed versions of the +#' two tables. +#' +#' @param data A document term table, \code{list} of document term and +#' covariate tables, a list of training and test sets of the two tables, +#' or a list of multiple replicate splits of training and test sets of +#' the two tables. +#' +#' @param control \code{list} of control options for the data conforming. +#' +#' @return \code{list} of properly formatted LDATS data. +#' +#' @export +#' conform_data <- function(data, control = list()){ depth <- list_depth(data) @@ -163,31 +170,73 @@ conform_data <- function(data, control = list()){ } +#' @title Subset data sets +#' +#' @description For use within, e.g., cross validation methods, these +#' functions subdivide the data into testing and training subsets. \cr \cr +#' \code{null_rule} places all data in the training set. \cr \cr +#' \code{random_loo} conducts randomized leave-one-out with no buffer. +#' \cr \cr +#' \code{systematic_loo} conducts systematic leave-one-out with no buffer. +#' Assumes 1:1 between iteration and datum location to drop. \cr \cr +#' \code{leave_p_out} is a fully flexible leave p out function allowing for +#' asymmetric buffers and randomization. If \code{random = TRUE}, the test +#' data are selected randomly, otherwise locations are used. +#' +#' @param data \code{data.frame} or \code{matrix} of data to be split. +#' +#' @param iteration \code{integer}-conformable value indicating which +#' iteration through the process the current implementation is. +#' +#' @param p \code{integer}-conformable value of how many samples to leave out. +#' +#' @param pre,post \code{integer}-conformable values of how many samples +#' to include in the buffer around the focal left out data. Can be +#' asymmetric. +#' +#' @param random \code{logical} indicator of if the left out data should be +#' randomly selected. +#' +#' @param locations \code{integer}-conformable values referencing which +#' data to hold out. +#' +#' @return \code{character} \code{vector} of \code{"train"} and \code{"test"} +#' values. +#' +#' @name data_subsetting +#' -# data subsetting rules +#' @rdname data_subsetting +#' +#' @export +#' null_rule <- function(data, iteration = 1){ n <- NROW(data) rep("train", n) } -# simple leave one outs with no buffer - -# assumes 1:1 between iteration and datum location to drop +#' @rdname data_subsetting +#' +#' @export +#' systematic_loo <- function(data, iteration = 1){ leave_p_out(data = data, random = FALSE, locations = iteration) } -# randomly selected - +#' @rdname data_subsetting +#' +#' @export +#' random_loo <- function(data, iteration = 1){ leave_p_out(data = data) } -# fully flexible leave p out function allowing for buffers -# if random the test data are selected randomly, otherwise locations are used - +#' @rdname data_subsetting +#' +#' @export +#' leave_p_out <- function(data, p = 1, pre = 0, post = 0, random = TRUE, locations = NULL){ n <- NROW(data) diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index ddc6996c..5fdd4e5b 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -274,7 +274,7 @@ prep_cpts <- function(TS, control = list()){ } lls <- rep(NA, ntemps) for (i in 1:ntemps){ - fun <- TS$reponse + fun <- TS$response fun <- memoise_fun(fun, control$memoise) args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], timename = TS$timename, weights = TS$weights, diff --git a/R/sequential_TS.R b/R/sequential_TS.R index ea41b98c..b11f4d7f 100644 --- a/R/sequential_TS.R +++ b/R/sequential_TS.R @@ -104,7 +104,8 @@ #' (\code{lls}).} #' \item{nparams}{Total number of parameters in the full model, #' including the change point locations and regressors.} -#' } +#' } \cr \cr +#' \code{TS_msg}: a message is produced. #' #' @export #' @@ -320,7 +321,7 @@ sequential_TS_msg <- function(TS, control = list()){ #' #' @export #' -sequential_TS_control <- function(method = "ldats_classic", +sequential_TS_control <- function(method = ldats_classic, method_args = ldats_classic_control(), summary_prob = 0.95, soften = TRUE, quiet = FALSE, ...){ diff --git a/R/temper.R b/R/temper.R deleted file mode 100644 index f6b2d461..00000000 --- a/R/temper.R +++ /dev/null @@ -1,15 +0,0 @@ - - -# use the existing temperature schematic as a start -# build a template into the temp_fun - -# now need to generalize prep_temp_sequence, but leverages existing control -# list approach exactly how we want - - -temp_fun <- function(chain = 1, control = list()){ - prep_temp_sequence(control = control)[chain] -} - - - diff --git a/R/utilities.R b/R/utilities.R index 0e183f45..5ff7c8bd 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -439,111 +439,6 @@ memoise_fun <- function(fun, memoise_tf = TRUE){ fun } - -#' @title Check that a control list is proper -#' -#' @description Check that a list of controls is of the right class. -#' -#' @param control Control list to evaluate. -#' -#' @param eclass Expected class of the list to be evaluated. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. -#' -#' @examples -#' check_control(list()) -#' -#' @export -#' -check_control <- function(control, eclass = "list"){ - if (!(eclass %in% class(control))){ - stop(paste0("control is not a ", eclass)) - } - return() -} - - -#' @title Check that document term table is proper -#' -#' @description Check that the table of observations is conformable to -#' a matrix of integers. -#' -#' @param document_term_table Table of observation count data (rows: -#' documents, columns: terms. May be a class \code{matrix} or -#' \code{data.frame} but must be conformable to a matrix of integers, -#' as verified by \code{\link{check_document_term_table}}. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. -#' -#' @examples -#' data(rodents) -#' check_document_term_table(rodents$document_term_table) -#' -#' @export -#' -check_document_term_table <- function(document_term_table){ - document_term_table_m <- as.matrix(document_term_table) - if(any(document_term_table_m %% 1 != 0)){ - dtt <- "document_term_table" - msg <- paste0(dtt, " is not conformable to a matrix of integers") - stop(msg) - } - return() -} - -#' @title Check that topics vector is proper -#' -#' @description Check that the vector of numbers of topics is conformable to -#' integers greater than 1. -#' -#' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. -#' -#' @examples -#' check_topics(2) -#' -#' @export -#' -check_topics <- function(topics){ - if (!is.numeric(topics) || any(topics %% 1 != 0)){ - stop("topics vector must be integers") - } - if (any(topics < 2)){ - stop("minimum number of topics currently allowed is 2") - } - return() -} - -#' @title Check that nseeds value or vector is proper -#' -#' @description Check that the vector of numbers of seeds is conformable to -#' integers greater than 0. -#' -#' @param nseeds \code{integer} number of seeds (replicate starts) to use for -#' each value of \code{topics} in the LDAs. Must be conformable to a -#' positive \code{integer} value. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. -#' -#' @examples -#' check_nseeds(1) -#' check_nseeds(2) -#' -#' @export -#' -check_nreps <- function(nreps){ - if (!is.numeric(nreps) || any(nreps %% 1 != 0)){ - stop("nreps must be integer-conformable") - } - return() -} - # provides a functionality that can be used in testing for non-symmetric # vcov matrix vcov.dummy <- function(object, ...){ diff --git a/man/AIC.LDA.Rd b/man/AIC.LDA.Rd new file mode 100644 index 00000000..4c8ac35a --- /dev/null +++ b/man/AIC.LDA.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{AIC.LDA} +\alias{AIC.LDA} +\title{Determine the AIC of a Linguistic Decomposition Analysis + model} +\usage{ +\method{AIC}{LDA}(object, ..., k = 2) +} +\arguments{ +\item{object}{Class \code{LDA} object to be evaluated.} + +\item{...}{Not used, simply included to maintain method compatibility.} + +\item{k}{Per-parameter numeric penalty.} +} +\value{ +AIC of the model. +} +\description{ +Convenience function to extract and format the AIC + of a \code{LDA}-class object fit by \code{\link{LDA_call}}. +} diff --git a/man/LDA.Rd b/man/LDA.Rd new file mode 100644 index 00000000..d754afa4 --- /dev/null +++ b/man/LDA.Rd @@ -0,0 +1,71 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{LDA} +\alias{LDA} +\alias{prep_LDA_models} +\alias{LDA_call} +\alias{LDA_msg} +\title{Run a set of Linguistic Decomposition Analysis models} +\usage{ +LDA(data, topics = 2, reps = 1, control = list()) + +prep_LDA_models(data, topics = 2, reps = 1, control = list()) + +LDA_call(LDA = NULL, control = list()) + +LDA_msg(LDA, control = list()) +} +\arguments{ +\item{data}{} + +\item{topics}{Vector of the number of topics to evaluate for each model. +Must be conformable to \code{integer} values.} + +\item{reps}{Number of replicate starts to use for each +value of \code{topics}. Must be conformable to \code{integer} value.} + +\item{control}{A \code{list} of parameters to control the fitting of the +LDA model. Values not input assume defaults set by +\code{\link{LDA_control}}.} +} +\value{ +\code{LDA}: class \code{LDA_set} \code{list} of both selected and all + results from \code{\link{LDA_call}} applied for each model on each + data input(s) as well as the control \code{list} used to fit the + model. \cr \cr + \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a + preliminary model object for an LDA model fit. + \code{LDA_call}: \code{LDA} \code{list} of model results from a single + run of a \code{} function, such as + \code{\link{topicmodels_LDA}}. + \code{LDA_msg}: a message is produced. +} +\description{ +\code{LDA} is the main interface function for the LDATS application + of Linguistic Decomposition Analysis (Christensen + \emph{et al.} 2018). \cr \cr + \code{prep_LDA_models} pre-prepares the LDA model objects for simpler + use within the subfunctions. + \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model + as set up by \code{prep_LDA_models}. + \code{LDA_msg} produces a model-running message if desired. +} +\details{ +For a (potentiall subset) dataset consisting of counts of words + across multiple documents in a corpus, conduct multiple Linguistic + Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation + using the Variational Expectation Maximization (VEM) algorithm; + Blei \emph{et al.} 2003) to account for [1] + uncertainty in the number of latent topics and [2] the impact of initial + values in the estimation procedure. +} +\references{ +Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet + Allocation. \emph{Journal of Machine Learning Research} + \strong{3}:993-1022. + \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. + + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic + Models. \emph{Journal of Statistical Software} \strong{40}:13. + \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +} diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd new file mode 100644 index 00000000..7d90ee0a --- /dev/null +++ b/man/LDA_TS.Rd @@ -0,0 +1,91 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA_TS.R +\name{LDA_TS} +\alias{LDA_TS} +\title{Run a set of Linguistic Decomposition Analysis models coupled to + Bayesian Time Series models} +\usage{ +LDA_TS(data, topics = 2, reps = 1, formulas = ~1, + nchangepoints = 0, timename = "time", weights = TRUE, + control = list()) +} +\arguments{ +\item{data}{A document term table, \code{list} of document term and +covariate tables, a list of training and test sets of the two tables, +or a list of multiple replicate splits of training and test sets of +the two tables. \cr \cr +See \code{\link{conform_data}}.} + +\item{topics}{Vector of the number of topics to evaluate for each model. +Must be conformable to \code{integer} values.} + +\item{reps}{Number of replicate starts to use for each +value of \code{topics}. Must be conformable to \code{integer} value.} + +\item{nchangepoints}{\code{integer} corresponding to the number of +change points to include in the model. 0 is a valid input (corresponding +to no change points, so a singular time series model), and the current +implementation can reasonably include up to 6 change points. The +number of change points is used to dictate the segmentation of the +time series into chunks fit with separate models dictated by +\code{formula}.} + +\item{timename}{\code{character} element indicating the time variable +used in the time series. Defaults to \code{"time"}. The variable must be +integer-conformable or a \code{Date}. If the variable named +is a \code{Date}, the input is converted to an integer, resulting in the +timestep being 1 day, which is often not desired behavior.} + +\item{weights}{Optional class \code{numeric} vector of weights for each +document. Defaults to \code{NULL}, translating to an equal weight for +each document. When using \code{multinom_TS} in a standard LDATS +analysis, it is advisable to weight the documents by their total size, +as the result of \code{\link[topicmodels]{LDA}} is a matrix of +proportions, which does not account for size differences among documents. +For most models, a scaling of the weights (so that the average is 1) is +most appropriate, and this is accomplished using \code{document_weights}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +Time Series model. Values not input assume defaults set by +\code{\link{TS_control}}.} + +\item{formula}{\code{\link[stats]{formula}} defining the regression between +the change points. Any predictor variable included must also be a column +in \code{data} and any (compositional) response variable must be a set +of columns in \code{data}.} +} +\value{ +NOTHING YET +} +\description{ +\code{LDA_TS} is the main interface function for the LDATS application + of Linguistic Decomposition Analysis and Time Series modeling + (Christensen \emph{et al.} 2018). \cr \cr +} +\details{ +For a (potentiall subset) dataset consisting of counts of words + across multiple documents in a corpus, conduct multiple Linguistic + Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation + using the Variational Expectation Maximization (VEM) algorithm; + Blei \emph{et al.} 2003) to account for [1] + uncertainty in the number of latent topics and [2] the impact of initial + values in the estimation procedure. \cr \cr + This model extends the approach of Western and Kleykamp (2004; + see also Ruggieri 2013) to compositional response data using + softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) + or simplical geometry () + via a generalized linear modeling approach (McCullagh and Nelder 1989). + The models can be fit using a range of methods, but available procedures + are different flavors of parallel tempering Markov Chain Monte Carlo + (ptMCMC) methods (Earl and Deem 2005). +} +\references{ +Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet + Allocation. \emph{Journal of Machine Learning Research} + \strong{3}:993-1022. + \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. + + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic + Models. \emph{Journal of Statistical Software} \strong{40}:13. + \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +} diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd new file mode 100644 index 00000000..92185b00 --- /dev/null +++ b/man/LDA_TS_control.Rd @@ -0,0 +1,104 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA_TS.R +\name{LDA_TS_control} +\alias{LDA_TS_control} +\title{Create the controls list for the complete Linguistic Decomposition + Analysis and Time Series model} +\usage{ +LDA_TS_control(LDA_model = topicmodels_LDA, + LDA_model_args = list(method = "VEM", seeded = TRUE), + LDA_measurer = AIC, LDA_measurer_args = list(), + LDA_selector = which.min, LDA_selector_args = list(), + TS_model = sequential_TS, TS_model_args = sequential_TS_control(), + TS_response = multinom_TS, TS_response_args = multinom_TS_control(), + TS_method = ldats_classic, TS_method_args = ldats_classic_control(), + nsubsets = 1, subset_rule = NULL, summary_prob = 0.95, + soften = TRUE, quiet = FALSE, TS_measurer = AIC, + TS_measurer_args = list(), TS_selector = which.min, + TS_selector_args = list(), ...) +} +\arguments{ +\item{LDA_model}{Main LDA \code{function}.} + +\item{LDA_model_args}{\code{list} of (named) arguments to be used in +\code{LDA_model} via \code{\link{LDA_call}}.} + +\item{LDA_measurer}{\code{function} used in evaluation of the LDA +models; \code{LDA_measurer} creates a value for each model.} + +\item{LDA_measurer_args}{\code{list} of (named) arguments to be used in +\code{LDA_measurer} via \code{\link{do.call}}.} + +\item{LDA_selector}{\code{function} usde in evaluation of the LDA +models; \code{LDA_selector} operates on the values to choose the models.} + +\item{LDA_selector_args}{\code{list} of (named) arguments to be used in +\code{LDA_selector} via \code{\link{do.call}}.} + +\item{TS_model}{Main TS \code{function}.} + +\item{TS_model_args}{\code{list} of (named) arguments to be used in +\code{TS_model}.} + +\item{TS_response}{\code{function} used to model the compositional +response.} + +\item{TS_method}{\code{function} used to drive the sampler of the TS +models; \code{TS_method} defines and operates the computational +procedure. \cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{TS_method_args}{\code{list} of (named) arguments to be used in +\code{TS_method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{nsubsets}{Number of data subsets.} + +\item{subset_rule}{\code{function} used to subset the data.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{TS_measurer}{\code{function} used in evaluation of the TS +models; \code{measurer} creates a value for each model.} + +\item{TS_measurer_args}{\code{list} of (named) arguments to be used in +\code{TS_measurer} via \code{\link{do.call}}.} + +\item{TS_selector}{\code{function} usde in evaluation of the TS +models; \code{TS_selector} operates on the values to choose the models.} + +\item{TS_selector_args}{\code{list} of (named) arguments to be used in +\code{TS_selector} via \code{\link{do.call}}.} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} + +\item{response_args}{\code{list} of (named) arguments to be used in +\code{TS_response} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_TS_control} function like +\code{\link{multinom_TS_control}}.} +} +\value{ +\code{list} of \code{list}s and single elements, with named + elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the decomposition and time series model fitting + occurring within \code{\link{LDA_TS}}. +} +\examples{ + LDA_TS_control() + +} diff --git a/man/LDA_control.Rd b/man/LDA_control.Rd new file mode 100644 index 00000000..24ac28b5 --- /dev/null +++ b/man/LDA_control.Rd @@ -0,0 +1,54 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{LDA_control} +\alias{LDA_control} +\title{Create the controls list for the Time Series model} +\usage{ +LDA_control(model = topicmodels_LDA, model_args = list(method = "VEM", + seeded = TRUE), measurer = AIC, measurer_args = list(), + selector = which.min, selector_args = list(), nsubsets = 1, + subset_rule = NULL, soften = TRUE, quiet = FALSE, ...) +} +\arguments{ +\item{model}{Main LDA \code{function}.} + +\item{model_args}{\code{list} of (named) arguments to be used in +\code{model} via \code{\link{LDA_call}}.} + +\item{measurer}{\code{function} used in evaluation of the LDA +models; \code{measurer} creates a value for each model.} + +\item{measurer_args}{\code{list} of (named) arguments to be used in +\code{measurer} via \code{\link{do.call}}.} + +\item{selector}{\code{function} usde in evaluation of the LDA +models; \code{selector} operates on the values to choose the models.} + +\item{selector_args}{\code{list} of (named) arguments to be used in +\code{selector} via \code{\link{do.call}}.} + +\item{nsubsets}{Number of data subsets.} + +\item{subset_rule}{\code{function} used to subset the data.} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the LDA model fit occurring within + \code{\link{LDA}}. +} +\examples{ + LDA_control() + +} diff --git a/man/TS.Rd b/man/TS.Rd index eebd49c4..f190a213 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -45,18 +45,13 @@ For most models, a scaling of the weights (so that the average is 1) is most appropriate, and this is accomplished using \code{document_weights}.} \item{control}{A \code{list} of parameters to control the fitting of the -Time Series model including the parallel tempering Markov Chain -Monte Carlo (ptMCMC) controls. Values not input assume defaults set by +Time Series model. Values not input assume defaults set by \code{\link{TS_control}}.} \item{formula}{\code{\link[stats]{formula}} defining the regression between the change points. Any predictor variable included must also be a column in \code{data} and any (compositional) response variable must be a set of columns in \code{data}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} } \value{ \code{TS}: class \code{TS_set} \code{list} of both selected and all diff --git a/man/TS_control.Rd b/man/TS_control.Rd index f020f45d..4aa6ee4d 100644 --- a/man/TS_control.Rd +++ b/man/TS_control.Rd @@ -4,9 +4,9 @@ \alias{TS_control} \title{Create the controls list for the Time Series model} \usage{ -TS_control(model = sequential_TS, model_args = list(), - response = "multinom", response_args = list(), - method = "ldats_classic", method_args = ldats_classic_control(), +TS_control(model = sequential_TS, model_args = sequential_TS_control(), + response = multinom_TS, response_args = multinom_TS_control(), + method = ldats_classic, method_args = ldats_classic_control(), summary_prob = 0.95, measurer = AIC, measurer_args = list(), selector = which.min, selector_args = list(), soften = TRUE, quiet = FALSE, ...) @@ -16,6 +16,12 @@ TS_control(model = sequential_TS, model_args = list(), used in the time series. \cr \cr Must have a corresponding \code{_TS} function.} +\item{response_args}{\code{list} of (named) arguments to be used in +\code{response} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_TS_control} function like +\code{\link{multinom_TS_control}}.} + \item{method}{\code{function} used to drive the sampler of the TS models; \code{method} defines and operates the computational procedure. \cr \cr diff --git a/man/check_control.Rd b/man/check_control.Rd index c950306d..ef17b84a 100644 --- a/man/check_control.Rd +++ b/man/check_control.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/argument_checking.R \name{check_control} \alias{check_control} \title{Check that a control list is proper} diff --git a/man/check_document_term_table.Rd b/man/check_document_term_table.Rd index 7a26419e..6ed113e9 100644 --- a/man/check_document_term_table.Rd +++ b/man/check_document_term_table.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/argument_checking.R \name{check_document_term_table} \alias{check_document_term_table} \title{Check that document term table is proper} diff --git a/man/check_nreps.Rd b/man/check_nreps.Rd index 2c1886cd..8302664f 100644 --- a/man/check_nreps.Rd +++ b/man/check_nreps.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/argument_checking.R \name{check_nreps} \alias{check_nreps} \title{Check that nseeds value or vector is proper} diff --git a/man/check_topics.Rd b/man/check_topics.Rd index 3f9415e1..5511a6b4 100644 --- a/man/check_topics.Rd +++ b/man/check_topics.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/utilities.R +% Please edit documentation in R/argument_checking.R \name{check_topics} \alias{check_topics} \title{Check that topics vector is proper} diff --git a/man/conform_data.Rd b/man/conform_data.Rd new file mode 100644 index 00000000..48bac4bd --- /dev/null +++ b/man/conform_data.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data_preparation.R +\name{conform_data} +\alias{conform_data} +\title{Conform data for LDATS modeling} +\usage{ +conform_data(data, control = list()) +} +\arguments{ +\item{data}{A document term table, \code{list} of document term and +covariate tables, a list of training and test sets of the two tables, +or a list of multiple replicate splits of training and test sets of +the two tables.} + +\item{control}{\code{list} of control options for the data conforming.} +} +\value{ +\code{list} of properly formatted LDATS data. +} +\description{ +Given any of a variety of possible data input types + (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of + \code{list}s, or \code{list} of \code{list} of \code{list}s) and + controls, this produces a properly formatted set of data (sets) for + LDATS modeling. +} +\details{ +This function makes use of the \code{\link{list_depth}} + utility that recursively works through an object to tell you + how nested a lists is. Working up from the most elemental version + possible, if it's not a \code{list}, but the data are a term table, the + covariate table is added with assumed equispersed data like before and + the data are now a \code{list}. Then, if it is a \code{list} but only a + of depth 1 (a \code{list} of two tables), we need to wrap it in a + \code{list} to make it depth-2, functionally a 1-subset data set. Then, + for a \code{list} of depth two, we need to potentially expand to a + multiple-subset data set, to allow for cross validtion methods, for + example. So, the \code{list} of depth 2 is replicated out to create a + longer \code{list} that is still depth 2 but is now of length + \code{control$nsubsets}. Then, the subsetting of the data occurs + according to the \code{control$subset_rule}, and each depth-2 \code{list} + is actually split to a final level of train and test subsets of the data, + making the \code{list} depth 3. \cr \cr + The training and testing data are saved as trimmed versions of the + two tables. +} diff --git a/man/data_subsetting.Rd b/man/data_subsetting.Rd new file mode 100644 index 00000000..570d045d --- /dev/null +++ b/man/data_subsetting.Rd @@ -0,0 +1,53 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/data_preparation.R +\name{data_subsetting} +\alias{data_subsetting} +\alias{null_rule} +\alias{systematic_loo} +\alias{random_loo} +\alias{leave_p_out} +\title{Subset data sets} +\usage{ +null_rule(data, iteration = 1) + +systematic_loo(data, iteration = 1) + +random_loo(data, iteration = 1) + +leave_p_out(data, p = 1, pre = 0, post = 0, random = TRUE, + locations = NULL) +} +\arguments{ +\item{data}{\code{data.frame} or \code{matrix} of data to be split.} + +\item{iteration}{\code{integer}-conformable value indicating which +iteration through the process the current implementation is.} + +\item{p}{\code{integer}-conformable value of how many samples to leave out.} + +\item{pre, post}{\code{integer}-conformable values of how many samples +to include in the buffer around the focal left out data. Can be +asymmetric.} + +\item{random}{\code{logical} indicator of if the left out data should be +randomly selected.} + +\item{locations}{\code{integer}-conformable values referencing which +data to hold out.} +} +\value{ +\code{character} \code{vector} of \code{"train"} and \code{"test"} + values. +} +\description{ +For use within, e.g., cross validation methods, these + functions subdivide the data into testing and training subsets. \cr \cr + \code{null_rule} places all data in the training set. \cr \cr + \code{random_loo} conducts randomized leave-one-out with no buffer. + \cr \cr + \code{systematic_loo} conducts systematic leave-one-out with no buffer. + Assumes 1:1 between iteration and datum location to drop. \cr \cr + \code{leave_p_out} is a fully flexible leave p out function allowing for + asymmetric buffers and randomization. If \code{random = TRUE}, the test + data are selected randomly, otherwise locations are used. +} diff --git a/man/identity_LDA.Rd b/man/identity_LDA.Rd new file mode 100644 index 00000000..f0d7f2f7 --- /dev/null +++ b/man/identity_LDA.Rd @@ -0,0 +1,20 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{identity_LDA} +\alias{identity_LDA} +\title{Identity Linguistic Decomposition Analysis} +\usage{ +identity_LDA(LDA) +} +\arguments{ +\item{LDA}{A prepared (via \code{\link{prep_LDA_models}} LDA model +\code{list}.} +} +\value{ +\code{LDA} \code{list} with most components as placeholders. +} +\description{ +This function acts as an "identity" model, wherein the + output is functionally the input. This allows for "single-topic" models + that do not actually decompose the data to be included in the model set. +} diff --git a/man/ilr_TS_control.Rd b/man/ilr_TS_control.Rd new file mode 100644 index 00000000..28e153c5 --- /dev/null +++ b/man/ilr_TS_control.Rd @@ -0,0 +1,23 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/ilr_TS.R +\name{ilr_TS_control} +\alias{ilr_TS_control} +\title{Create the controls list for the ILR Time Series model} +\usage{ +ilr_TS_control(quiet = FALSE, ...) +} +\arguments{ +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the time series model fit occurring within + \code{\link{ilr_TS}}. +} diff --git a/man/logLik.LDA.Rd b/man/logLik.LDA.Rd new file mode 100644 index 00000000..2541a012 --- /dev/null +++ b/man/logLik.LDA.Rd @@ -0,0 +1,22 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{logLik.LDA} +\alias{logLik.LDA} +\title{Determine the log likelihood of a Linguistic Decomposition Analysis + model} +\usage{ +\method{logLik}{LDA}(object, ...) +} +\arguments{ +\item{object}{Class \code{LDA} object to be evaluated.} + +\item{...}{Not used, simply included to maintain method compatibility.} +} +\value{ +Log likelihood of the model \code{logLik}, also with \code{df} + (degrees of freedom) and \code{nobs} (number of observations) values. +} +\description{ +Convenience function to extract and format the log likelihood + of a \code{LDA}-class object fit by \code{\link{LDA_call}}. +} diff --git a/man/multinom_TS_control.Rd b/man/multinom_TS_control.Rd new file mode 100644 index 00000000..f689e7aa --- /dev/null +++ b/man/multinom_TS_control.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/multinom_TS.R +\name{multinom_TS_control} +\alias{multinom_TS_control} +\title{Create the controls list for the multinomial Time Series model} +\usage{ +multinom_TS_control(lambda = 0, quiet = FALSE, ...) +} +\arguments{ +\item{lambda}{\code{numeric} "weight" decay term used to set the prior +on the regressors within each chunk-level model. Defaults to 0, +corresponding to a fully vague prior.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} +} +\value{ +\code{list}, with named elements corresponding to the arguments. +} +\description{ +This function provides a simple creation and definition of a + list used to control the time series model fit occurring within + \code{\link{multinom_TS}}. +} diff --git a/man/package_LDA.Rd b/man/package_LDA.Rd new file mode 100644 index 00000000..f3ed8298 --- /dev/null +++ b/man/package_LDA.Rd @@ -0,0 +1,42 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{package_LDA} +\alias{package_LDA} +\alias{select_LDA} +\alias{measure_LDA} +\title{Measure, select, and package the output of a set of Linguistic + Decomposition Analysis models} +\usage{ +package_LDA(selected_LDAs, LDAs, control = list()) + +select_LDA(LDAs = list(), control = list()) + +measure_LDA(LDAs = list(), control = list()) +} +\arguments{ +\item{selected_LDAs}{\code{list} of selected LDA model \code{list}s.} + +\item{LDAs}{\code{list} of LDA model \code{list}s.} + +\item{control}{A \code{list} of parameters to control the fitting of the +LDA model. Values not input assume defaults set by +\code{\link{LDA_control}}.} +} +\value{ +\code{measure_LDA}: \code{vector} of values corresponding to the model + evaluations. + \code{select_LDA}: \code{list} of selected models' \code{list}s. + \code{pacakage_LDA}: class \code{LDA_set} \code{list} of both selected + and all results from \code{\link{LDA_call}} applied for each model on + each data input as well as the control \code{list} used to fit + the model. +} +\description{ +\code{measure_LDA} determines the fit value used to select among the + models. \cr \cr + \code{select_LDA} chooses the best model(s) of interest based on their + measured values and the selector function. \cr \cr + \code{package_LDA} sets the class and names the elements of the results + \code{list} from \code{\link{LDA_call}} applied to the + combination of TS models requested for the data input(s). +} diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index 54a576af..a2217521 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -73,7 +73,8 @@ of the coefficients across the segments (columns), as estimated by (\code{lls}).} \item{nparams}{Total number of parameters in the full model, including the change point locations and regressors.} - } + } \cr \cr + \code{TS_msg}: a message is produced. } \description{ This set of functions estimates the Time Series model diff --git a/man/sequential_TS_control.Rd b/man/sequential_TS_control.Rd index 865b2f4f..798c48e5 100644 --- a/man/sequential_TS_control.Rd +++ b/man/sequential_TS_control.Rd @@ -4,7 +4,7 @@ \alias{sequential_TS_control} \title{Create the controls list for a sequential Time Series model} \usage{ -sequential_TS_control(method = "ldats_classic", +sequential_TS_control(method = ldats_classic, method_args = ldats_classic_control(), summary_prob = 0.95, soften = TRUE, quiet = FALSE, ...) } diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd new file mode 100644 index 00000000..a5018e97 --- /dev/null +++ b/man/topicmodels_LDA.Rd @@ -0,0 +1,45 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA.R +\name{topicmodels_LDA} +\alias{topicmodels_LDA} +\title{Class Latent Dirichlet Allocation Linguistic Decomposition Analysis + as conducted via the topicmodels package} +\usage{ +topicmodels_LDA(LDA, method = "VEM", seeded = TRUE, ...) +} +\arguments{ +\item{LDA}{A prepared (via \code{\link{prep_LDA_models}} LDA model +\code{list}.} + +\item{method}{Fitting routine used in +\code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only +\code{"VEM"} and \code{"Gibbs"} are supported.} + +\item{seeded}{\code{logical} indicator of if the LDA should be a seeded +replicate.} + +\item{...}{Additional arguments to be passed to +\code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input.} +} +\value{ +\code{LDA} \code{list}. +} +\description{ +Fit the standard LDATS LDA model (a true Latent Dirichlet + Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} + (Grun and Hornik 2011). Default methodology is the Variational + Expectation Maximization routine (VEM) as described by + Blei \emph{et al.} (2003). \cr \cr + If the model is defined to only fit one topic, \code{\link{identity_LDA}} + is used by default. +} +\references{ +Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet + Allocation. \emph{Journal of Machine Learning Research} + \strong{3}:993-1022. + \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. + + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic + Models. \emph{Journal of Statistical Software} \strong{40}:13. + \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +} diff --git a/notes.R b/notes.R index 21455b81..abd05e9f 100644 --- a/notes.R +++ b/notes.R @@ -2,6 +2,17 @@ # its not really right to use gamma as a name for ilr # lots of tidying to do! + +known to dos + +package LDA_TS +check functions +utilities +plotting functions +simulate +generalize ilr to simplical to allow for other transforms? + + devtools::load_all() data(rodents) @@ -37,5 +48,38 @@ designed to help soften errors in pipelines through wrapping in tryCatch LDA_set is now LDA and TS_on_LDA is now TS - standardized output from LDA and TS functions + + +# LDA is now functionally what LDA_set was before +# "reps" replaces "nseeds" but otherwise things are the same generally at api +# the control list is expanded to now include a base LDA modeling function +# and then arguments for all three functions, it also gets the subset info +# because it may be needed, and in addition to quiet a boolean "soften" +# which softens errors during model running +# prep_LDA_models combines the data (conforming if needed), topics, +# reps, and subsets to prep the list of model inputs, that will actually be +# appended to with the results, which are done at the top with LDA_call. +# LDA_call prints the message, and then preps the input arguments as used +# in a do.call on the function given in the control list. there are +# examples of both a generalized topicmodels LDA function wrapper (works +# with Gibbs sampling approach too!) and an "identity" 1-topic function. +# these functions allow for pre- and post-processing around the main model +# function without having to impact the general LDA_call +# select_LDA does a general measuring and then selecting, which now allows +# for arguments to be passed in! + + +# data can come into LDA_TS LDA TS in a variety of forms, and depending on +# usages, might take a variety of different forms +# the purpose of this function is to generalize and extract the code used +# to shuddle between data formats from functions / replace with a single line +# it's still a work in progress and needs more extensive usage exploration, +# as it's going to be a workhorse function. +currently its not saving the test/train split explicitly, +# just implicitly via the data encoding that exists. we should probably +# shore this up a bit more for sure. +# also this function is big and modularized a good degree already...it could +# get chunked into subfunctions +# there are functions for basic leave p out cross validation, including +# both systematic and random approaches From b8a6e56fc54f163d99626d4ffa84febea9fc9e18 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sat, 21 Mar 2020 15:29:38 -0700 Subject: [PATCH 22/43] ongoing --- NAMESPACE | 1 + R/LDA.R | 54 ++++++++---- R/LDA_TS.R | 196 +++++++++++++++++++++++++++++------------ R/TS.R | 53 ++++++----- R/sequential_TS.R | 24 ++--- man/LDA.Rd | 44 ++++++--- man/LDA_TS.Rd | 146 +++++++++++++++++++++--------- man/LDA_TS_control.Rd | 6 +- man/TS.Rd | 54 +++++++----- man/package_LDA_TS.Rd | 30 +++++++ man/topicmodels_LDA.Rd | 7 +- pipeline.R | 44 +++++++++ 12 files changed, 466 insertions(+), 193 deletions(-) create mode 100644 man/package_LDA_TS.Rd create mode 100644 pipeline.R diff --git a/NAMESPACE b/NAMESPACE index e26f30a6..1e212df9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -60,6 +60,7 @@ export(multinom_TS_control) export(normalize) export(null_rule) export(package_LDA) +export(package_LDA_TS) export(package_TS) export(package_chunk_fits) export(package_sequential_TS) diff --git a/R/LDA.R b/R/LDA.R index aef78642..4a1aa45c 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -1,25 +1,35 @@ #' @title Run a set of Linguistic Decomposition Analysis models #' -#' @description -#' \code{LDA} is the main interface function for the LDATS application -#' of Linguistic Decomposition Analysis (Christensen +#' @description Conduct Linguistic Decomposition Analyses. \cr \cr +#' \code{LDA} provides the main interface for Linguistic Decomposition +#' Analysis conducted within the LDATS application of (Christensen #' \emph{et al.} 2018). \cr \cr #' \code{prep_LDA_models} pre-prepares the LDA model objects for simpler -#' use within the subfunctions. +#' use within the subfunctions. \cr \cr #' \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model -#' as set up by \code{prep_LDA_models}. +#' as set up by \code{prep_LDA_models}. \cr \cr #' \code{LDA_msg} produces a model-running message if desired. #' -#' @details For a (potentiall subset) dataset consisting of counts of words -#' across multiple documents in a corpus, conduct multiple Linguistic -#' Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation -#' using the Variational Expectation Maximization (VEM) algorithm; -#' Blei \emph{et al.} 2003) to account for [1] -#' uncertainty in the number of latent topics and [2] the impact of initial -#' values in the estimation procedure. -#' -#' @param data +#' @details For a (potentially subset) dataset consisting of counts of words +#' across multiple documents in a corpus, +#' \enumerate{ +#' \item Conduct multiple Linguistic Decomposition Analysis (LDA) models +#' (e.g., Latent Dirichlet Allocation using the Variational Expectation +#' Maximization (VEM) algorithm; Blei \emph{et al.} 2003, Grun and +#' Hornik 2011), +#' \item Select from the LDA model results to pick those used in the Time +#' Series (TS) models, and +#' \item Package the results. +#' } +#' +#' @param data Any of the data structures allowable for LDATS analyses: +#' \code{matrix} or \code{data.frame} document term table, +#' \code{list} of document term and covariate tables, a \code{list} of +#' training and test sets of the two tables, or a \code{list} of multiple +#' replicate splits of training and test sets of the two tables. \cr +#' See \code{\link{conform_data}}, which is used to ensure data structure +#' validity for the desired model. #' #' @param topics Vector of the number of topics to evaluate for each model. #' Must be conformable to \code{integer} values. @@ -37,10 +47,10 @@ #' data input(s) as well as the control \code{list} used to fit the #' model. \cr \cr #' \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a -#' preliminary model object for an LDA model fit. +#' preliminary model object for an LDA model fit. \cr \cr #' \code{LDA_call}: \code{LDA} \code{list} of model results from a single #' run of a \code{} function, such as -#' \code{\link{topicmodels_LDA}}. +#' \code{\link{topicmodels_LDA}}. \cr \cr #' \code{LDA_msg}: a message is produced. #' #' @references @@ -49,6 +59,11 @@ #' \strong{3}:993-1022. #' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. #' +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' #' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic #' Models. \emph{Journal of Statistical Software} \strong{40}:13. #' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. @@ -184,14 +199,15 @@ LDA_control <- function(model = topicmodels_LDA, } -#' @title Class Latent Dirichlet Allocation Linguistic Decomposition Analysis +#' @title Latent Dirichlet Allocation Linguistic Decomposition Analysis #' as conducted via the topicmodels package #' #' @description Fit the standard LDATS LDA model (a true Latent Dirichlet #' Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} -#' (Grun and Hornik 2011). Default methodology is the Variational +#' (Grun and Hornik 2011). \cr +#' Default methodology is the Variational #' Expectation Maximization routine (VEM) as described by -#' Blei \emph{et al.} (2003). \cr \cr +#' Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr #' If the model is defined to only fit one topic, \code{\link{identity_LDA}} #' is used by default. #' diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 3b48b0dc..a065c3e6 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,73 +1,97 @@ #' @title Run a set of Linguistic Decomposition Analysis models coupled to #' Bayesian Time Series models #' -#' @description -#' \code{LDA_TS} is the main interface function for the LDATS application -#' of Linguistic Decomposition Analysis and Time Series modeling -#' (Christensen \emph{et al.} 2018). \cr \cr -#' -#' @details For a (potentiall subset) dataset consisting of counts of words -#' across multiple documents in a corpus, conduct multiple Linguistic -#' Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation -#' using the Variational Expectation Maximization (VEM) algorithm; -#' Blei \emph{et al.} 2003) to account for [1] -#' uncertainty in the number of latent topics and [2] the impact of initial -#' values in the estimation procedure. \cr \cr -#' This model extends the approach of Western and Kleykamp (2004; -#' see also Ruggieri 2013) to compositional response data using -#' softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) -#' or simplical geometry () -#' via a generalized linear modeling approach (McCullagh and Nelder 1989). -#' The models can be fit using a range of methods, but available procedures -#' are different flavors of parallel tempering Markov Chain Monte Carlo -#' (ptMCMC) methods (Earl and Deem 2005). -#' -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' the change points. Any predictor variable included must also be a column -#' in \code{data} and any (compositional) response variable must be a set -#' of columns in \code{data}. -#' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current +#' @description The main interface function for analyzing compositional +#' time series using the LDATS application of Linguistic Decomposition +#' Analysis and Time Series modeling generally following Christensen +#' \emph{et al.} (2018). +#' +#' @details For a (potentially subset) dataset consisting of counts of words +#' across multiple documents in a corpus, +#' \enumerate{ +#' \item Conduct multiple Linguistic Decomposition Analysis (LDA) models +#' (e.g., Latent Dirichlet Allocation using the Variational Expectation +#' Maximization (VEM) algorithm; Blei \emph{et al.} 2003), +#' \item Select from the LDA model results to pick those used in the Time +#' Series (TS) models, +#' \item Conduct multiple compositional Bayesian TS models +#' (e.g., changepoint softmax regression; Ripley 1996, Venables +#' and Ripley 2002, Western and Kleykamp 2004, Bishop 2006, Ruggieri +#' 2013) via a generalized linear modeling approach (McCullagh and +#' Nelder 1989) and using parallel tempering Markov Chain Monte Carlo +#' (ptMCMC) methods (Earl and Deem 2005), +#' \item Select from the TS model results to pick those used to summarize +#' the whole model, and +#' \item Package the results. +#' } +#' +#' @param formulas Vector of \code{\link[stats]{formula}}(s) defining the +#' regression between the change points. Any predictor variable included +#' must also be a column in \code{data} and any (compositional) response +#' variable must be a set of columns in \code{data}. \cr +#' Each element (formula) in the vector is evaluated for each number of +#' change points and each LDA model. \cr +#' (See \code{\link{TS}}.) +#' +#' @param nchangepoints \code{integer}-conformable vector corresponding to the +#' number of change points to include in the models. 0 is valid (corresponds +#' to no change points, so a singular time series model) and the current #' implementation can reasonably include up to 6 change points. The #' number of change points is used to dictate the segmentation of the #' time series into chunks fit with separate models dictated by -#' \code{formula}. +#' \code{formula}. \cr +#' Each element in the vector is the number of change points +#' used to segment the data for each formula (entry in \code{formulas}) +#' component of the TS model, for each selected LDA model. \cr +#' (See \code{\link{TS}}.) #' #' @param timename \code{character} element indicating the time variable #' used in the time series. Defaults to \code{"time"}. The variable must be #' integer-conformable or a \code{Date}. If the variable named #' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. +#' timestep being 1 day, which is often not desired behavior. \cr +#' (See \code{\link{TS}}.) #' #' @param weights Optional class \code{numeric} vector of weights for each #' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS +#' each document. When using \code{\link{sequential_TS}} in a standard LDATS #' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of +#' as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of #' proportions, which does not account for size differences among documents. #' For most models, a scaling of the weights (so that the average is 1) is #' most appropriate, and this is accomplished using \code{document_weights}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @param data A document term table, \code{list} of document term and -#' covariate tables, a list of training and test sets of the two tables, -#' or a list of multiple replicate splits of training and test sets of -#' the two tables. \cr \cr -#' See \code{\link{conform_data}}. +#' \cr +#' (See \code{\link{TS}}.) +#' +#' @param control \code{list} of parameters to control the fitting of the +#' LDATS model. Values not input assume defaults set by +#' \code{\link{LDA_TS_control}}. +#' +#' @param data Any of the data structures allowable for LDATS analyses: +#' \code{matrix} or \code{data.frame} document term table, +#' \code{list} of document term and covariate tables, a \code{list} of +#' training and test sets of the two tables, or a \code{list} of multiple +#' replicate splits of training and test sets of the two tables. \cr +#' See \code{\link{conform_data}}, which is used to ensure data structure +#' validity for the desired model. #' -#' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. -#' -#' @param reps Number of replicate starts to use for each -#' value of \code{topics}. Must be conformable to \code{integer} value. -#' -#' @return NOTHING YET +#' @param topics \code{integer}-conformable \code{vector} of the number of +#' topics to evaluate for each model. \cr +#' (See \code{\link{LDA}}.) +#' +#' @param reps \code{integer}-conformable number of replicate starts to use +#' for each value of \code{topics}. \cr +#' (See \code{\link{LDA}}.) +#' +#' @return \code{LDA_TS} \code{list} with all fitted LDA and TS models and +#' selected models specifically as elements named +#' \describe{ +#' \item{\code{LDA models}}{\code{list} of all and selected models as well +#' as controls from \code{\link{LDA}}} +#' \item{\code{TS models}}{\code{list} of all and selected models as well +#' as controls from \code{\link{TS}}} +#' \item{\code{control}}{\code{list} of overall model controls} +#' } #' #' @references #' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet @@ -75,13 +99,45 @@ #' \strong{3}:993-1022. #' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. #' +#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. +#' Springer, New York, NY, USA. +#' +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://doi.org/10.1039/B509983H}{link}. +#' #' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic #' Models. \emph{Journal of Statistical Software} \strong{40}:13. #' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. #' +#' McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. +#' 2nd Edition. Chapman and Hall, New York, NY, USA. +#' +#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. +#' Cambridge University Press, Cambridge, UK. +#' +#' Ruggieri, E. 2013. A Bayesian approach to detecting change points in +#' climactic records. \emph{International Journal of Climatology} +#' \strong{33}:520-528. +#' \href{https://doi.org/10.1002/joc.3447}{link}. +#' +#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. +#' +#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for +#' historical time series analysis. \emph{Political Analysis} +#' \strong{12}:354-374. +#' \href{https://doi.org/10.1093/pan/mph023}{link}. +#' #' @export #' -LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, +LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ control <- do.call("LDA_TS_control", control) @@ -91,20 +147,46 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control$TS_control) - + package_LDA_TS(LDAs = LDAs, TSs = TSs, control = control) } - +#' @title Package LDA and TS model outputs +#' +#' @description Combine the results from each model component. +#' +#' @param LDAs \code{LDA_set} \code{list} of selected and all LDAs from +#' \code{\link{LDA}}. +#' +#' @param TSs \code{TS_set} \code{list} of selected and all TSs from +#' \code{\link{TS}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' LDATS model. Values not input assume defaults set by +#' \code{\link{LDA_TS_control}}. +#' +#' @return \code{LDA_TS} \code{list} with all fitted LDA and TS models and +#' selected models specifically as elements named +#' \code{"LDA models"} (from \code{\link{LDA_set}}), +#' \code{"Selected LDA models"} (from \code{\link{select_LDA}}), +#' \code{"TS models"} (from \code{\link{TS_on_LDA}}), and +#' \code{"Selected TS models"} (from \code{\link{select_TS}}) elements. +#' +#' @export +#' +package_LDA_TS <- function(LDAs, TSs, control){ + out <- list("LDA models" = LDAs, "TS models" = TSs, control = control) + class(out) <- c("LDA_TS", "list") +} #' @title Create the controls list for the complete Linguistic Decomposition #' Analysis and Time Series model #' -#' @description This function provides a simple creation and definition of a -#' list used to control the decomposition and time series model fitting -#' occurring within \code{\link{LDA_TS}}. +#' @description Defines and creates a \code{list} used to control the +#' decomposition and time series model fitting occurring within +#' \code{\link{LDA_TS}}. #' #' @param LDA_model Main LDA \code{function}. #' diff --git a/R/TS.R b/R/TS.R index a81ec95c..d9ccb68d 100644 --- a/R/TS.R +++ b/R/TS.R @@ -1,21 +1,27 @@ #' @title Conduct a Bayesian compositional Time Series analysis #' -#' @description +#' @description Analyze compositional Time Series models using Bayesian +#' sampling methods. \cr \cr #' \code{TS} is the main interface function for the LDATS application #' of Bayesian change point Time Series analyses (Christensen #' \emph{et al.} 2018). \cr \cr #' \code{prep_TS_models} pre-prepares the TS model objects for simpler #' use within the subfunctions. #' -#' @details This model extends the approach of Western and Kleykamp (2004; -#' see also Ruggieri 2013) to compositional response data using -#' softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) -#' or simplical geometry () -#' via a generalized linear modeling approach (McCullagh and Nelder 1989). -#' The models can be fit using a range of methods, but available procedures -#' are different flavors of parallel tempering Markov Chain Monte Carlo -#' (ptMCMC) methods (Earl and Deem 2005) +#' @details For a (potentially subset) dataset consisting of proportions of +#' topics across multiple documents in a corpus +#' \enumerate{ +#' \item Conduct multiple compositional Bayesian TS models +#' (e.g., changepoint softmax regression; Ripley 1996, Venables +#' and Ripley 2002, Western and Kleykamp 2004, Bishop 2006, Ruggieri +#' 2013) via a generalized linear modeling approach (McCullagh and +#' Nelder 1989) and using parallel tempering Markov Chain Monte Carlo +#' (ptMCMC) methods (Earl and Deem 2005), +#' \item Select from the TS model results to pick those used to summarize +#' the whole model, and +#' \item Package the results. +#' } #' #' @param data \code{data.frame} including [1] the time variable (indicated #' in \code{timename}), [2] the predictor variables (required by @@ -26,18 +32,23 @@ #' in the \code{control} list, such as \code{gamma} for a standard TS #' analysis on LDA output. #' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' the change points. Any predictor variable included must also be a column -#' in \code{data} and any (compositional) response variable must be a set -#' of columns in \code{data}. +#' @param formulas Vector of \code{\link[stats]{formula}}(s) defining the +#' regression between the change points. Any predictor variable included +#' must also be a column in \code{data} and any (compositional) response +#' variable must be a set of columns in \code{data}. \cr +#' Each element (formula) in the vector is evaluated for each number of +#' change points and each LDA model. #' -#' @param nchangepoints \code{integer} corresponding to the number of -#' change points to include in the model. 0 is a valid input (corresponding -#' to no change points, so a singular time series model), and the current +#' @param nchangepoints \code{integer}-conformable vector corresponding to the +#' number of change points to include in the models. 0 is valid (corresponds +#' to no change points, so a singular time series model) and the current #' implementation can reasonably include up to 6 change points. The #' number of change points is used to dictate the segmentation of the #' time series into chunks fit with separate models dictated by -#' \code{formula}. +#' \code{formula}. \cr +#' Each element in the vector is the number of change points +#' used to segment the data for each formula (entry in \code{formulas}) +#' component of the TS model, for each selected LDA model. #' #' @param timename \code{character} element indicating the time variable #' used in the time series. Defaults to \code{"time"}. The variable must be @@ -47,9 +58,9 @@ #' #' @param weights Optional class \code{numeric} vector of weights for each #' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{multinom_TS} in a standard LDATS +#' each document. When using \code{\link{sequential_TS}} in a standard LDATS #' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link[topicmodels]{LDA}} is a matrix of +#' as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of #' proportions, which does not account for size differences among documents. #' For most models, a scaling of the weights (so that the average is 1) is #' most appropriate, and this is accomplished using \code{document_weights}. @@ -170,8 +181,8 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, #' #' @return #' \code{measure_TS}: \code{vector} of values corresponding to the model -#' evaluations. -#' \code{select_TS}: \code{list} of selected models' \code{list}s. +#' evaluations. \cr \cr +#' \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr #' \code{pacakage_TS}: class \code{TS_set} \code{list} of both selected and #' all results from \code{\link{sequential_TS}} applied for each model on #' each LDA model input as well as the control \code{list} used to fit diff --git a/R/sequential_TS.R b/R/sequential_TS.R index b11f4d7f..314680f0 100644 --- a/R/sequential_TS.R +++ b/R/sequential_TS.R @@ -5,21 +5,21 @@ #' with full flexibility of the regressor models between change points, #' then estimate the regressors between the change points, intially #' conditional on their locations, but with marginal estimation to produce -#' regressor values unconditional on change point locations. +#' regressor values unconditional on change point locations. \cr \cr #' \code{sequential_TS} combines each stage of the model estimation and -#' packages the model results in a consistent output. +#' packages the model results in a consistent output. \cr \cr #' \code{est_changepoints} estimates the change point location -#' distributions for multinomial Time Series analyses. +#' distributions for multinomial Time Series analyses. \cr \cr #' \code{est_regressors} uses the marginal posterior distributions of #' the change point locations (estimated by #' \code{\link{est_changepoints}}) in combination with the conditional #' (on the change point locations) posterior distributions of the #' regressors (estimated by a \code{_TS} function) to #' estimate the marginal posterior distribution of the regressors, -#' unconditional on the change point locations. +#' unconditional on the change point locations. \cr \cr #' \code{package_sequential_TS} calculates relevant summaries for the run of #' a sequenial Time Series model within \code{\link{sequential_TS}} and -#' packages the output as a \code{TS}-class object. +#' packages the output as a \code{TS}-class object. \cr \cr #' \code{sequential_TS_msg} produces a specific message about the model #' being run. #' @@ -40,12 +40,14 @@ #' models are fit independently for each chunk (segment of time), and #' therefore the variance-covariance matrix for the full model #' has \code{0} entries for covariances between regressors in different -#' chunks of the time series. Further, because the regression model here -#' is a standard (non-hierarchical) softmax (Ripley 1996, Venables and -#' Ripley 2002, Bishop 2006), there is no error term in the regression -#' (as there is in the normal model used by Western and Kleykamp 2004), -#' and so the posterior distribution used here is a multivariate normal, -#' as opposed to a multivariate t, as used by Western and Kleykamp (2004). +#' chunks of the time series. \cr \cr +#' Further differences are model-specific. For example, the original softmax +#' multinomial regression model used here is a standard (non-hierarchical) +#' model (Ripley 1996, Venables and Ripley 2002, Bishop 2006), mean that +#' there is no error term in the regression (as there is in the normal +#' model used by Western and Kleykamp 2004), and so the posterior +#' distribution used here is a multivariate normal, as opposed to a +#' multivariate t, as used by Western and Kleykamp (2004). #' #' @references #' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. diff --git a/man/LDA.Rd b/man/LDA.Rd index d754afa4..eb31bfd1 100644 --- a/man/LDA.Rd +++ b/man/LDA.Rd @@ -16,7 +16,13 @@ LDA_call(LDA = NULL, control = list()) LDA_msg(LDA, control = list()) } \arguments{ -\item{data}{} +\item{data}{Any of the data structures allowable for LDATS analyses: +\code{matrix} or \code{data.frame} document term table, +\code{list} of document term and covariate tables, a \code{list} of +training and test sets of the two tables, or a \code{list} of multiple +replicate splits of training and test sets of the two tables. \cr +See \code{\link{conform_data}}, which is used to ensure data structure +validity for the desired model.} \item{topics}{Vector of the number of topics to evaluate for each model. Must be conformable to \code{integer} values.} @@ -34,30 +40,35 @@ LDA model. Values not input assume defaults set by data input(s) as well as the control \code{list} used to fit the model. \cr \cr \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a - preliminary model object for an LDA model fit. + preliminary model object for an LDA model fit. \cr \cr \code{LDA_call}: \code{LDA} \code{list} of model results from a single run of a \code{} function, such as - \code{\link{topicmodels_LDA}}. + \code{\link{topicmodels_LDA}}. \cr \cr \code{LDA_msg}: a message is produced. } \description{ -\code{LDA} is the main interface function for the LDATS application - of Linguistic Decomposition Analysis (Christensen +Conduct Linguistic Decomposition Analyses. \cr \cr + \code{LDA} provides the main interface for Linguistic Decomposition + Analysis conducted within the LDATS application of (Christensen \emph{et al.} 2018). \cr \cr \code{prep_LDA_models} pre-prepares the LDA model objects for simpler - use within the subfunctions. + use within the subfunctions. \cr \cr \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model - as set up by \code{prep_LDA_models}. + as set up by \code{prep_LDA_models}. \cr \cr \code{LDA_msg} produces a model-running message if desired. } \details{ -For a (potentiall subset) dataset consisting of counts of words - across multiple documents in a corpus, conduct multiple Linguistic - Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation - using the Variational Expectation Maximization (VEM) algorithm; - Blei \emph{et al.} 2003) to account for [1] - uncertainty in the number of latent topics and [2] the impact of initial - values in the estimation procedure. +For a (potentially subset) dataset consisting of counts of words + across multiple documents in a corpus, + \enumerate{ + \item Conduct multiple Linguistic Decomposition Analysis (LDA) models + (e.g., Latent Dirichlet Allocation using the Variational Expectation + Maximization (VEM) algorithm; Blei \emph{et al.} 2003, Grun and + Hornik 2011), + \item Select from the LDA model results to pick those used in the Time + Series (TS) models, and + \item Package the results. + } } \references{ Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet @@ -65,6 +76,11 @@ Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet \strong{3}:993-1022. \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. + Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. + Long-term community change through multiple rapid transitions in a + desert rodent community. \emph{Ecology} \strong{99}:1523-1529. + \href{https://doi.org/10.1002/ecy.2373}{link}. + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic Models. \emph{Journal of Statistical Software} \strong{40}:13. \href{https://www.jstatsoft.org/article/view/v040i13}{link}. diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index 7d90ee0a..a797697d 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -10,74 +10,100 @@ LDA_TS(data, topics = 2, reps = 1, formulas = ~1, control = list()) } \arguments{ -\item{data}{A document term table, \code{list} of document term and -covariate tables, a list of training and test sets of the two tables, -or a list of multiple replicate splits of training and test sets of -the two tables. \cr \cr -See \code{\link{conform_data}}.} +\item{data}{Any of the data structures allowable for LDATS analyses: +\code{matrix} or \code{data.frame} document term table, +\code{list} of document term and covariate tables, a \code{list} of +training and test sets of the two tables, or a \code{list} of multiple +replicate splits of training and test sets of the two tables. \cr +See \code{\link{conform_data}}, which is used to ensure data structure +validity for the desired model.} -\item{topics}{Vector of the number of topics to evaluate for each model. -Must be conformable to \code{integer} values.} +\item{topics}{\code{integer}-conformable \code{vector} of the number of +topics to evaluate for each model. \cr +(See \code{\link{LDA}}.)} -\item{reps}{Number of replicate starts to use for each -value of \code{topics}. Must be conformable to \code{integer} value.} +\item{reps}{\code{integer}-conformable number of replicate starts to use +for each value of \code{topics}. \cr +(See \code{\link{LDA}}.)} -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current +\item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the +regression between the change points. Any predictor variable included +must also be a column in \code{data} and any (compositional) response +variable must be a set of columns in \code{data}. \cr +Each element (formula) in the vector is evaluated for each number of +change points and each LDA model. \cr +(See \code{\link{TS}}.)} + +\item{nchangepoints}{\code{integer}-conformable vector corresponding to the +number of change points to include in the models. 0 is valid (corresponds +to no change points, so a singular time series model) and the current implementation can reasonably include up to 6 change points. The number of change points is used to dictate the segmentation of the time series into chunks fit with separate models dictated by -\code{formula}.} +\code{formula}. \cr +Each element in the vector is the number of change points +used to segment the data for each formula (entry in \code{formulas}) +component of the TS model, for each selected LDA model. \cr +(See \code{\link{TS}}.)} \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be integer-conformable or a \code{Date}. If the variable named is a \code{Date}, the input is converted to an integer, resulting in the -timestep being 1 day, which is often not desired behavior.} +timestep being 1 day, which is often not desired behavior. \cr +(See \code{\link{TS}}.)} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS +each document. When using \code{\link{sequential_TS}} in a standard LDATS analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of +as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of proportions, which does not account for size differences among documents. For most models, a scaling of the weights (so that the average is 1) is -most appropriate, and this is accomplished using \code{document_weights}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} +most appropriate, and this is accomplished using \code{document_weights}. +\cr +(See \code{\link{TS}}.)} -\item{formula}{\code{\link[stats]{formula}} defining the regression between -the change points. Any predictor variable included must also be a column -in \code{data} and any (compositional) response variable must be a set -of columns in \code{data}.} +\item{control}{\code{list} of parameters to control the fitting of the +LDATS model. Values not input assume defaults set by +\code{\link{LDA_TS_control}}.} } \value{ -NOTHING YET +\code{LDA_TS} \code{list} with all fitted LDA and TS models and + selected models specifically as elements named + \describe{ + \item{\code{LDA models}}{\code{list} of all and selected models as well + as controls from \code{\link{LDA}}} + \item{\code{TS models}}{\code{list} of all and selected models as well + as controls from \code{\link{TS}}} + \item{\code{control}}{\code{list} of overall model controls} + } } \description{ -\code{LDA_TS} is the main interface function for the LDATS application - of Linguistic Decomposition Analysis and Time Series modeling - (Christensen \emph{et al.} 2018). \cr \cr +The main interface function for analyzing compositional + time series using the LDATS application of Linguistic Decomposition + Analysis and Time Series modeling generally following Christensen + \emph{et al.} (2018). } \details{ -For a (potentiall subset) dataset consisting of counts of words - across multiple documents in a corpus, conduct multiple Linguistic - Decomposition Analysis (LDA) models (e.g., Latent Dirichlet Allocation - using the Variational Expectation Maximization (VEM) algorithm; - Blei \emph{et al.} 2003) to account for [1] - uncertainty in the number of latent topics and [2] the impact of initial - values in the estimation procedure. \cr \cr - This model extends the approach of Western and Kleykamp (2004; - see also Ruggieri 2013) to compositional response data using - softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) - or simplical geometry () - via a generalized linear modeling approach (McCullagh and Nelder 1989). - The models can be fit using a range of methods, but available procedures - are different flavors of parallel tempering Markov Chain Monte Carlo - (ptMCMC) methods (Earl and Deem 2005). +For a (potentially subset) dataset consisting of counts of words + across multiple documents in a corpus, + \enumerate{ + \item Conduct multiple Linguistic Decomposition Analysis (LDA) models + (e.g., Latent Dirichlet Allocation using the Variational Expectation + Maximization (VEM) algorithm; Blei \emph{et al.} 2003), + \item Select from the LDA model results to pick those used in the Time + Series (TS) models, + \item Conduct multiple compositional Bayesian TS models + (e.g., changepoint softmax regression; Ripley 1996, Venables + and Ripley 2002, Western and Kleykamp 2004, Bishop 2006, Ruggieri + 2013) via a generalized linear modeling approach (McCullagh and + Nelder 1989) and using parallel tempering Markov Chain Monte Carlo + (ptMCMC) methods (Earl and Deem 2005), + \item Select from the TS model results to pick those used to summarize + the whole model, and + \item Package the results. + } } \references{ Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet @@ -85,7 +111,39 @@ Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet \strong{3}:993-1022. \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. + Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. + Springer, New York, NY, USA. + + Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. + Long-term community change through multiple rapid transitions in a + desert rodent community. \emph{Ecology} \strong{99}:1523-1529. + \href{https://doi.org/10.1002/ecy.2373}{link}. + + Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, + applications, and new perspectives. \emph{Physical Chemistry Chemical + Physics} \strong{7}: 3910-3916. + \href{https://doi.org/10.1039/B509983H}{link}. + Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic Models. \emph{Journal of Statistical Software} \strong{40}:13. \href{https://www.jstatsoft.org/article/view/v040i13}{link}. + + McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. + 2nd Edition. Chapman and Hall, New York, NY, USA. + + Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. + Cambridge University Press, Cambridge, UK. + + Ruggieri, E. 2013. A Bayesian approach to detecting change points in + climactic records. \emph{International Journal of Climatology} + \strong{33}:520-528. + \href{https://doi.org/10.1002/joc.3447}{link}. + + Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied + Statistics with S}. Fourth Edition. Springer, New York, NY, USA. + + Western, B. and M. Kleykamp. 2004. A Bayesian change point model for + historical time series analysis. \emph{Political Analysis} + \strong{12}:354-374. + \href{https://doi.org/10.1093/pan/mph023}{link}. } diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd index 92185b00..56565405 100644 --- a/man/LDA_TS_control.Rd +++ b/man/LDA_TS_control.Rd @@ -94,9 +94,9 @@ Could be managed via a \code{_TS_control} function like elements corresponding to the arguments. } \description{ -This function provides a simple creation and definition of a - list used to control the decomposition and time series model fitting - occurring within \code{\link{LDA_TS}}. +Defines and creates a \code{list} used to control the + decomposition and time series model fitting occurring within + \code{\link{LDA_TS}}. } \examples{ LDA_TS_control() diff --git a/man/TS.Rd b/man/TS.Rd index f190a213..5b8f222d 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -21,13 +21,23 @@ Note that the response variables should be formatted as a in the \code{control} list, such as \code{gamma} for a standard TS analysis on LDA output.} -\item{nchangepoints}{\code{integer} corresponding to the number of -change points to include in the model. 0 is a valid input (corresponding -to no change points, so a singular time series model), and the current +\item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the +regression between the change points. Any predictor variable included +must also be a column in \code{data} and any (compositional) response +variable must be a set of columns in \code{data}. \cr +Each element (formula) in the vector is evaluated for each number of +change points and each LDA model.} + +\item{nchangepoints}{\code{integer}-conformable vector corresponding to the +number of change points to include in the models. 0 is valid (corresponds +to no change points, so a singular time series model) and the current implementation can reasonably include up to 6 change points. The number of change points is used to dictate the segmentation of the time series into chunks fit with separate models dictated by -\code{formula}.} +\code{formula}. \cr +Each element in the vector is the number of change points +used to segment the data for each formula (entry in \code{formulas}) +component of the TS model, for each selected LDA model.} \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be @@ -37,9 +47,9 @@ timestep being 1 day, which is often not desired behavior.} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{multinom_TS} in a standard LDATS +each document. When using \code{\link{sequential_TS}} in a standard LDATS analysis, it is advisable to weight the documents by their total size, -as the result of \code{\link[topicmodels]{LDA}} is a matrix of +as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of proportions, which does not account for size differences among documents. For most models, a scaling of the weights (so that the average is 1) is most appropriate, and this is accomplished using \code{document_weights}.} @@ -47,11 +57,6 @@ most appropriate, and this is accomplished using \code{document_weights}.} \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by \code{\link{TS_control}}.} - -\item{formula}{\code{\link[stats]{formula}} defining the regression between -the change points. Any predictor variable included must also be a column -in \code{data} and any (compositional) response variable must be a set -of columns in \code{data}.} } \value{ \code{TS}: class \code{TS_set} \code{list} of both selected and all @@ -62,18 +67,25 @@ of columns in \code{data}.} preliminary model object for a Time Series model fit. } \description{ -\code{TS} is the main interface function for the LDATS application +Analyze compositional Time Series models. \cr \cr + \code{TS} is the main interface function for the LDATS application of Bayesian change point Time Series analyses (Christensen \emph{et al.} 2018). \cr \cr \code{prep_TS_models} pre-prepares the TS model objects for simpler use within the subfunctions. - - @details This model extends the approach of Western and Kleykamp (2004; - see also Ruggieri 2013) to compositional response data using - softmax regression (Ripley 1996, Venables and Ripley 2002, Bishop 2006) - or simplical geometry () - via a generalized linear modeling approach (McCullagh and Nelder 1989). - The models can be fit using a range of methods, but available procedures - are different flavors of parallel tempering Markov Chain Monte Carlo - (ptMCMC) methods (Earl and Deem 2005) +} +\details{ +For a (potentially subset) dataset consisting of proportions of + topics across multiple documents in a corpus + \enumerate{ + \item Conduct multiple compositional Bayesian TS models + (e.g., changepoint softmax regression; Ripley 1996, Venables + and Ripley 2002, Western and Kleykamp 2004, Bishop 2006, Ruggieri + 2013) via a generalized linear modeling approach (McCullagh and + Nelder 1989) and using parallel tempering Markov Chain Monte Carlo + (ptMCMC) methods (Earl and Deem 2005), + \item Select from the TS model results to pick those used to summarize + the whole model, and + \item Package the results. + } } diff --git a/man/package_LDA_TS.Rd b/man/package_LDA_TS.Rd new file mode 100644 index 00000000..b46422fc --- /dev/null +++ b/man/package_LDA_TS.Rd @@ -0,0 +1,30 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/LDA_TS.R +\name{package_LDA_TS} +\alias{package_LDA_TS} +\title{Package LDA and TS model outputs} +\usage{ +package_LDA_TS(LDAs, TSs, control) +} +\arguments{ +\item{LDAs}{\code{LDA_set} \code{list} of selected and all LDAs from +\code{\link{LDA}}.} + +\item{TSs}{\code{TS_set} \code{list} of selected and all TSs from +\code{\link{TS}}.} + +\item{control}{A \code{list} of parameters to control the fitting of the +LDATS model. Values not input assume defaults set by +\code{\link{LDA_TS_control}}.} +} +\value{ +\code{LDA_TS} \code{list} with all fitted LDA and TS models and + selected models specifically as elements named + \code{"LDA models"} (from \code{\link{LDA_set}}), + \code{"Selected LDA models"} (from \code{\link{select_LDA}}), + \code{"TS models"} (from \code{\link{TS_on_LDA}}), and + \code{"Selected TS models"} (from \code{\link{select_TS}}) elements. +} +\description{ +Combine the results from each model component. +} diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd index a5018e97..1de72182 100644 --- a/man/topicmodels_LDA.Rd +++ b/man/topicmodels_LDA.Rd @@ -2,7 +2,7 @@ % Please edit documentation in R/LDA.R \name{topicmodels_LDA} \alias{topicmodels_LDA} -\title{Class Latent Dirichlet Allocation Linguistic Decomposition Analysis +\title{Latent Dirichlet Allocation Linguistic Decomposition Analysis as conducted via the topicmodels package} \usage{ topicmodels_LDA(LDA, method = "VEM", seeded = TRUE, ...) @@ -27,9 +27,10 @@ replicate.} \description{ Fit the standard LDATS LDA model (a true Latent Dirichlet Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} - (Grun and Hornik 2011). Default methodology is the Variational + (Grun and Hornik 2011). \cr + Default methodology is the Variational Expectation Maximization routine (VEM) as described by - Blei \emph{et al.} (2003). \cr \cr + Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr If the model is defined to only fit one topic, \code{\link{identity_LDA}} is used by default. } diff --git a/pipeline.R b/pipeline.R new file mode 100644 index 00000000..9ab83e88 --- /dev/null +++ b/pipeline.R @@ -0,0 +1,44 @@ +LDA_TS + + LDA_TS_control + LDA_control + TS_control + + LDA + LDA_control + prep_LDA_models + LDA_call + - uses control$model + select_LDA + measure_LDA + - uses control$measurer + - uses control$selector + package_LDA + + TS + TS_control + prep_TS_models + sequential_TS + sequential_TS_control + est_changepoints + - uses control$method + est_regressors + - uses TS$reponse + package_sequential_TS + select_TS + measure_TS + - uses control$measurer + - uses control$selector + package_TS + + package_LDA_TS + + + +to consider +TS versus control object passing around...like once the controls are in the + model object why still pass them around>?? +make sequential_TS the model like in LDA_call +condense x_call +bring select_x within package_x +rename prep_x_models as prep_x \ No newline at end of file From 225d2b74ea1d7dc209d68728a04f06b8956d8548 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sat, 21 Mar 2020 18:30:57 -0700 Subject: [PATCH 23/43] more ongoing work --- NAMESPACE | 9 +- R/LDA.R | 340 +++++++++++++++------------------------ R/LDA_TS.R | 22 +-- R/LDA_models.R | 97 +++++++++++ R/TS.R | 185 +++++++++++++-------- R/ldats_classic_method.R | 6 +- R/sequential_TS.R | 38 ++--- man/LDA.Rd | 56 +++++-- man/LDA_TS_control.Rd | 19 +-- man/LDA_control.Rd | 4 +- man/TS.Rd | 67 ++++++-- man/TS_control.Rd | 13 +- man/identity_LDA.Rd | 2 +- man/package_LDA.Rd | 42 ----- man/package_TS.Rd | 42 ----- man/sequential_TS.Rd | 32 ++-- man/topicmodels_LDA.Rd | 2 +- notes.R | 18 +-- pipeline.R | 53 +++--- 19 files changed, 538 insertions(+), 509 deletions(-) create mode 100644 R/LDA_models.R delete mode 100644 man/package_LDA.Rd delete mode 100644 man/package_TS.Rd diff --git a/NAMESPACE b/NAMESPACE index 1e212df9..1fc2c0af 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -19,8 +19,10 @@ export(LDA_msg) export(LDA_plot_bottom_panel) export(LDA_plot_top_panel) export(TS) +export(TS_call) export(TS_control) export(TS_diagnostics_plot) +export(TS_msg) export(TS_summary_plot) export(autocorr_plot) export(check_control) @@ -66,8 +68,6 @@ export(package_chunk_fits) export(package_sequential_TS) export(posterior_plot) export(pred_gamma_TS_plot) -export(prep_LDA_models) -export(prep_TS_models) export(prep_chunks) export(prep_cpts) export(prep_ids) @@ -76,6 +76,8 @@ export(prep_proposal_dist) export(prep_ptMCMC_inputs) export(prep_saves) export(prep_temp_sequence) +export(prepare_LDA) +export(prepare_TS) export(process_saves) export(propose_step) export(proposed_step_mods) @@ -83,11 +85,12 @@ export(random_loo) export(rho_diagnostics_plots) export(rho_hist) export(rho_lines) +export(run_LDA) +export(run_TS) export(select_LDA) export(select_TS) export(sequential_TS) export(sequential_TS_control) -export(sequential_TS_msg) export(set_LDA_TS_plot_cols) export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) diff --git a/R/LDA.R b/R/LDA.R index 4a1aa45c..6321c4fe 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -5,11 +5,20 @@ #' \code{LDA} provides the main interface for Linguistic Decomposition #' Analysis conducted within the LDATS application of (Christensen #' \emph{et al.} 2018). \cr \cr -#' \code{prep_LDA_models} pre-prepares the LDA model objects for simpler +#' \code{prepare_LDA} pre-prepares the LDA model objects for simpler #' use within the subfunctions. \cr \cr +#' \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models +#' as set up by \code{prep_LDA_models}. \cr \cr #' \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model #' as set up by \code{prep_LDA_models}. \cr \cr -#' \code{LDA_msg} produces a model-running message if desired. +#' \code{LDA_msg} produces a model-running message if desired. \cr \cr +#' \code{measure_LDA} determines the fit value used to select among the +#' models. \cr \cr +#' \code{select_LDA} chooses the best model(s) of interest based on their +#' measured values and the selector function. \cr \cr +#' \code{package_LDA} sets the class and names the elements of the results +#' \code{list} from \code{\link{LDA_call}} applied to the +#' combination of TS models requested for the data input(s). #' #' @details For a (potentially subset) dataset consisting of counts of words #' across multiple documents in a corpus, @@ -34,24 +43,33 @@ #' @param topics Vector of the number of topics to evaluate for each model. #' Must be conformable to \code{integer} values. #' -#' @param reps Number of replicate starts to use for each +#' @param replicates Number of replicate starts to use for each #' value of \code{topics}. Must be conformable to \code{integer} value. #' #' @param control A \code{list} of parameters to control the fitting of the #' LDA model. Values not input assume defaults set by #' \code{\link{LDA_control}}. #' +#' @param LDAs \code{list} of LDA model \code{list}s. +#' +#' @param selected_LDAs \code{list} of selected LDA model \code{list}s. +#' #' @return -#' \code{LDA}: class \code{LDA_set} \code{list} of both selected and all -#' results from \code{\link{LDA_call}} applied for each model on each -#' data input(s) as well as the control \code{list} used to fit the -#' model. \cr \cr +#' \code{LDA},\code{pacakage_LDA}: class \code{LDA_set} \code{list} of +#' both selected and all results from \code{\link{LDA_call}} applied for +#' each model on each data input(s) as well as the control \code{list} +#' used to fit the model. \cr \cr #' \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a #' preliminary model object for an LDA model fit. \cr \cr +#' \code{run_LDA}: \code{LDA_set} \code{list} of model results from all +#' runs of a \code{} function, such as +#' \code{\link{topicmodels_LDA}}. \cr \cr #' \code{LDA_call}: \code{LDA} \code{list} of model results from a single #' run of a \code{} function, such as #' \code{\link{topicmodels_LDA}}. \cr \cr -#' \code{LDA_msg}: a message is produced. +#' \code{measure_LDA}: \code{vector} of values corresponding to the model +#' evaluations. +#' \code{select_LDA}: \code{list} of selected models' \code{list}s. #' #' @references #' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet @@ -68,19 +86,21 @@ #' Models. \emph{Journal of Statistical Software} \strong{40}:13. #' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. #' +#' @name LDA +#' +#' + + +#' @rdname LDA +#' #' @export #' -LDA <- function(data, topics = 2, reps = 1, control = list()){ - control <- do.call("LDA_control", control) - messageq("----- Linguistic Decomposition Analyses -----", control$quiet) - LDAs <- prep_LDA_models(data = data, topics = topics, reps = reps, - control = control) - nLDA <- length(LDAs) - for (i in 1:nLDA){ - LDAs[[i]] <- LDA_call(LDA = LDAs[[i]], control = control) - } - selected_LDAs <- select_LDA(LDAs = LDAs, control = control) - package_LDA(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) +LDA <- function(data, topics = 2, replicates = 1, control = list()){ + LDAs <- prepare_LDA(data = data, topics = topics, replicates = replicates, + control = control) + LDAs <- run_LDA(LDAs = LDAs) + LDAs <- package_LDA(LDAs = LDAs) + LDAs } @@ -88,14 +108,16 @@ LDA <- function(data, topics = 2, reps = 1, control = list()){ #' #' @export #' -prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ +prepare_LDA <- function(data, topics = 2, replicates = 1, control = list()){ + control <- do.call("LDA_control", control) + messageq("----- Linguistic Decomposition Analyses -----", control$quiet) data <- conform_data(data = data, control = control) subsets <- names(data) - if(length(reps) < length(topics)){ - reps <- rep(reps, length(topics)) + if(length(replicates) < length(topics)){ + reps <- rep(replicates, length(topics)) } - LDA_topics <- rep(topics, reps) - LDA_reps <- sequence(reps) + LDA_topics <- rep(topics, replicates) + LDA_reps <- sequence(replicates) LDA_subsets <- rep(subsets, each = length(LDA_reps)) LDA_reps <- rep(LDA_reps, length(subsets)) LDA_topics <- rep(LDA_topics, length(subsets)) @@ -104,23 +126,38 @@ prep_LDA_models <- function(data, topics = 2, reps = 1, control = list()){ for(i in 1:nLDA){ LDAs[[i]] <- list(data = data[[LDA_subsets[[i]]]], data_subset = LDA_subsets[[i]], - topics = LDA_topics[[i]], rep = LDA_reps[[i]]) + topics = LDA_topics[[i]], + replicate = LDA_reps[[i]], + control = control) } names(LDAs) <- paste0("model_", 1:nLDA) LDAs } + +#' @rdname LDA +#' +#' @export +#' +run_LDA <- function(LDAs){ + nLDA <- length(LDAs) + for (i in 1:nLDA){ + LDAs[[i]] <- LDA_call(LDA = LDAs[[i]]) + } + LDAs +} + + #' @rdname LDA #' #' @export #' -LDA_call <- function(LDA = NULL, control = list()){ - control <- do.call("LDA_control", control) - LDA_msg(LDA = LDA, control = control) - fun <- control$model - args <- update_list(control$model_args, LDA = LDA) - soft_call(fun = fun, args = args, soften = control$soften) +LDA_call <- function(LDA){ + LDA_msg(LDA = LDA) + fun <- LDA$control$model + args <- update_list(LDA$control$model_args, LDA = LDA) + soft_call(fun = fun, args = args, soften = LDA$control$soften) } @@ -128,11 +165,65 @@ LDA_call <- function(LDA = NULL, control = list()){ #' #' @export #' -LDA_msg <- function(LDA, control = list()){ +LDA_msg <- function(LDA){ subset_msg <- paste0(" - data subset ", LDA$data_subset) topic_msg <- paste0(", ", LDA$topics, " topics") rep_msg <- paste0(", replicate ", LDA$rep) - messageq(paste0(subset_msg, topic_msg, rep_msg), control$quiet) + messageq(paste0(subset_msg, topic_msg, rep_msg), LDA$control$quiet) +} + + +#' @rdname LDA +#' +#' @export +#' +package_LDA <- function(LDAs){ + selected_LDAs <- select_LDA(LDAs = LDAs) + out <- list(selected_LDAs = selected_LDAs, LDAs = LDAs) + class(out) <- c("LDA_set", "list") + out +} + + +#' @rdname LDA +#' +#' @export +#' +select_LDA <- function(LDAs){ + nLDAs <- length(LDAs) + maxtopics <- 0 + for(i in 1:nLDAs){ + maxtopics <- max(c(maxtopics, LDAs[[i]]$topics)) + } + if(maxtopics == 1){ + return(LDAs) + } + vals <- measure_LDA(LDAs = LDAs) + fun <- LDAs[[1]]$control$selector + args <- update_list(LDAs[[1]]$control$selector_args, x = vals) + args[names(args) == ""] <- NULL + selection <- do.call(what = fun, args = args) + LDAs[selection] +} + +#' @rdname LDA +#' +#' @export +#' +measure_LDA <- function(LDAs){ + nLDAs <- length(LDAs) + vals <- rep(NA, nLDAs) + for(i in 1:nLDAs){ + fun <- LDAs[[i]]$control$measurer + args <- LDAs[[i]]$control$measurer_args + args <- update_list(args, object = LDAs[[i]]) + args[names(args) == ""] <- NULL + vals_i <- do.call(what = fun, args = args) + if(length(vals_i) != 0){ + vals[i] <- vals_i + } + } + vals } @@ -184,9 +275,9 @@ LDA_msg <- function(LDA, control = list()){ LDA_control <- function(model = topicmodels_LDA, model_args = list(method = "VEM", seeded = TRUE), measurer = AIC, - measurer_args = list(), + measurer_args = list(NULL), selector = which.min, - selector_args = list(), + selector_args = list(NULL), nsubsets = 1, subset_rule = NULL, soften = TRUE, @@ -199,104 +290,6 @@ LDA_control <- function(model = topicmodels_LDA, } -#' @title Latent Dirichlet Allocation Linguistic Decomposition Analysis -#' as conducted via the topicmodels package -#' -#' @description Fit the standard LDATS LDA model (a true Latent Dirichlet -#' Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} -#' (Grun and Hornik 2011). \cr -#' Default methodology is the Variational -#' Expectation Maximization routine (VEM) as described by -#' Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr -#' If the model is defined to only fit one topic, \code{\link{identity_LDA}} -#' is used by default. -#' -#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model -#' \code{list}. -#' -#' @param ... Additional arguments to be passed to -#' \code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input. -#' -#' @param seeded \code{logical} indicator of if the LDA should be a seeded -#' replicate. -#' -#' @param method Fitting routine used in -#' \code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only -#' \code{"VEM"} and \code{"Gibbs"} are supported. -#' -#' @return \code{LDA} \code{list}. -#' -#' @references -#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet -#' Allocation. \emph{Journal of Machine Learning Research} -#' \strong{3}:993-1022. -#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. -#' -#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic -#' Models. \emph{Journal of Statistical Software} \strong{40}:13. -#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. -#' -#' @export -#' -topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ - data <- LDA$data - topics <- LDA$topics - rep <- LDA$rep - data_subset <- LDA$data_subset - if(topics == 1){ - identity_LDA(LDA) - } else{ - fun_control <- list(...) - if(seeded){ - fun_control <- update_list(fun_control, seed = rep * 2) - } - mod <- topicmodels::LDA(x = data$train$document_term_table, k = topics, - method = method, control = fun_control) - mod_ll <- sum(mod@loglikelihood) - alpha <- tryCatch(as.integer(mod@control@estimate.alpha), - error = function(x){0}) - df <- alpha + length(mod@beta) - attr(mod_ll, "df") <- df - attr(mod_ll, "nobs") <- mod@Dim[1] * mod@Dim[2] - class(mod_ll) <- "logLik" - out <- list(params = list(alpha = mod@alpha, beta = mod@beta), - document_topic_matrix = mod@gamma, - test_document_topic_matrix = NULL, #not yet available - log_likelihood = mod_ll, data = data, - topics = topics, rep = rep, data_subset = data_subset) - class(out) <- c("LDA", "list") - out - } -} - -#' @title Identity Linguistic Decomposition Analysis -#' -#' @description This function acts as an "identity" model, wherein the -#' output is functionally the input. This allows for "single-topic" models -#' that do not actually decompose the data to be included in the model set. -#' -#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model -#' \code{list}. -#' -#' @return \code{LDA} \code{list} with most components as placeholders. -#' -#' @export -#' -identity_LDA <- function(LDA){ - data <- LDA$data - rep <- LDA$rep - data_subset <- LDA$data_subset - document_topic_table <- data$train$document_term_table - document_topic_table <- document_topic_table / rowSums(document_topic_table) - colnames(document_topic_table) <- NULL - out <- list(params = list(), document_topic_table = document_topic_table, - log_likelihood = NULL, data = data, - topics = 1, rep = rep, data_subset = data_subset, - test_document_topic_matrix = NULL) #not yet available - class(out) <- c("LDA", "list") - out -} - #' @title Determine the AIC of a Linguistic Decomposition Analysis #' model @@ -339,84 +332,3 @@ logLik.LDA <- function(object, ...){ object$log_likelihood } - - -#' @title Measure, select, and package the output of a set of Linguistic -#' Decomposition Analysis models -#' -#' @description -#' \code{measure_LDA} determines the fit value used to select among the -#' models. \cr \cr -#' \code{select_LDA} chooses the best model(s) of interest based on their -#' measured values and the selector function. \cr \cr -#' \code{package_LDA} sets the class and names the elements of the results -#' \code{list} from \code{\link{LDA_call}} applied to the -#' combination of TS models requested for the data input(s). -#' -#' @param LDAs \code{list} of LDA model \code{list}s. -#' -#' @param selected_LDAs \code{list} of selected LDA model \code{list}s. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' LDA model. Values not input assume defaults set by -#' \code{\link{LDA_control}}. -#' -#' @return -#' \code{measure_LDA}: \code{vector} of values corresponding to the model -#' evaluations. -#' \code{select_LDA}: \code{list} of selected models' \code{list}s. -#' \code{pacakage_LDA}: class \code{LDA_set} \code{list} of both selected -#' and all results from \code{\link{LDA_call}} applied for each model on -#' each data input as well as the control \code{list} used to fit -#' the model. -#' -#' @export -#' -package_LDA <- function(selected_LDAs, LDAs, control = list()){ - out <- list(selected_LDAs = selected_LDAs, LDAs = LDAs, control = control) - class(out) <- c("LDA_set", "list") - out -} - - -#' @rdname package_LDA -#' -#' @export -#' -select_LDA <- function(LDAs = list(), control = list()){ - nLDAs <- length(LDAs) - maxtopics <- 0 - for(i in 1:nLDAs){ - maxtopics <- max(c(maxtopics, LDAs[[i]]$topics)) - } - if(maxtopics == 1){ - return(LDAs) - } - vals <- measure_LDA(LDAs = LDAs, control = control) - fun <- control$selector - args <- update_list(control$selector_args, x = vals) - selection <- do.call(what = fun, args = args) - LDAs[selection] -} - -#' @rdname package_LDA -#' -#' @export -#' -measure_LDA <- function(LDAs = list(), control = list()){ - fun <- control$measurer - args <- control$measurer_args - nLDAs <- length(LDAs) - vals <- rep(NA, nLDAs) - for(i in 1:nLDAs){ - args <- update_list(args, object = LDAs[[i]]) - vals_i <- do.call(what = fun, args = args) - if(length(vals_i) != 0){ - vals[i] <- vals_i - } - } - vals -} - - - diff --git a/R/LDA_TS.R b/R/LDA_TS.R index a065c3e6..9ae8ceb3 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -141,7 +141,6 @@ LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ control <- do.call("LDA_TS_control", control) - data <- conform_data(data = data, control = control) LDAs <- LDA(data = data, topics = topics, reps = reps, control = control$LDA_control) TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, @@ -271,24 +270,27 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, LDA_model_args = list(method = "VEM", seeded = TRUE), LDA_measurer = AIC, - LDA_measurer_args = list(), + LDA_measurer_args = list(NULL), LDA_selector = which.min, - LDA_selector_args = list(), + LDA_selector_args = list(NULL), TS_model = sequential_TS, - TS_model_args = sequential_TS_control(), + TS_model_args = + list(control = sequential_TS_control()), TS_response = multinom_TS, - TS_response_args = multinom_TS_control(), + TS_response_args = + list(control = multinom_TS_control()), TS_method = ldats_classic, - TS_method_args = ldats_classic_control(), + TS_method_args = + list(control = ldats_classic_control()), nsubsets = 1, subset_rule = NULL, summary_prob = 0.95, soften = TRUE, quiet = FALSE, TS_measurer = AIC, - TS_measurer_args = list(), + TS_measurer_args = list(NULL), TS_selector = which.min, - TS_selector_args = list(), ...){ + TS_selector_args = list(NULL), ...){ LDA_control <- LDA_control(model = LDA_model, model_args = LDA_model_args, measurer = LDA_measurer, @@ -298,7 +300,9 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) - TS_control <- TS_control(response = TS_response, + TS_control <- TS_control(model = TS_model, + model_args = TS_model_args, + response = TS_response, response_args = TS_response_args, method = TS_method, method_args = TS_method_args, diff --git a/R/LDA_models.R b/R/LDA_models.R new file mode 100644 index 00000000..910c86de --- /dev/null +++ b/R/LDA_models.R @@ -0,0 +1,97 @@ + +#' @title Latent Dirichlet Allocation Linguistic Decomposition Analysis +#' as conducted via the topicmodels package +#' +#' @description Fit the standard LDATS LDA model (a true Latent Dirichlet +#' Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} +#' (Grun and Hornik 2011). \cr +#' Default methodology is the Variational +#' Expectation Maximization routine (VEM) as described by +#' Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr +#' If the model is defined to only fit one topic, \code{\link{identity_LDA}} +#' is used by default. +#' +#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' \code{list}. +#' +#' @param ... Additional arguments to be passed to +#' \code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input. +#' +#' @param seeded \code{logical} indicator of if the LDA should be a seeded +#' replicate. +#' +#' @param method Fitting routine used in +#' \code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only +#' \code{"VEM"} and \code{"Gibbs"} are supported. +#' +#' @return \code{LDA} \code{list}. +#' +#' @references +#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet +#' Allocation. \emph{Journal of Machine Learning Research} +#' \strong{3}:993-1022. +#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. +#' +#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic +#' Models. \emph{Journal of Statistical Software} \strong{40}:13. +#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +#' +#' @export +#' +topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ + data <- LDA$data + topics <- LDA$topics + rep <- LDA$rep + data_subset <- LDA$data_subset + if(topics == 1){ + identity_LDA(LDA) + } else{ + fun_control <- list(...) + if(seeded){ + fun_control <- update_list(fun_control, seed = rep * 2) + } + mod <- topicmodels::LDA(x = data$train$document_term_table, k = topics, + method = method, control = fun_control) + mod_ll <- sum(mod@loglikelihood) + alpha <- tryCatch(as.integer(mod@control@estimate.alpha), + error = function(x){0}) + df <- alpha + length(mod@beta) + attr(mod_ll, "df") <- df + attr(mod_ll, "nobs") <- mod@Dim[1] * mod@Dim[2] + class(mod_ll) <- "logLik" + out <- update_list(LDA, params = list(alpha = mod@alpha, beta = mod@beta), + document_topic_matrix = mod@gamma, + test_document_topic_matrix = NULL, #not available + log_likelihood = mod_ll) + class(out) <- c("LDA", "list") + out + } +} + +#' @title Identity Linguistic Decomposition Analysis +#' +#' @description This function acts as an "identity" model, wherein the +#' output is functionally the input. This allows for "single-topic" models +#' that do not actually decompose the data to be included in the model set. +#' +#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' \code{list}. +#' +#' @return \code{LDA} \code{list} with most components as placeholders. +#' +#' @export +#' +identity_LDA <- function(LDA){ + data <- LDA$data + rep <- LDA$rep + data_subset <- LDA$data_subset + document_topic_table <- data$train$document_term_table + document_topic_table <- document_topic_table / rowSums(document_topic_table) + colnames(document_topic_table) <- NULL + out <- list(params = list(), document_topic_table = document_topic_table, + log_likelihood = NULL, data = data, + topics = 1, rep = rep, data_subset = data_subset, + test_document_topic_matrix = NULL) #not yet available + class(out) <- c("LDA", "list") + out +} diff --git a/R/TS.R b/R/TS.R index d9ccb68d..b43b2be1 100644 --- a/R/TS.R +++ b/R/TS.R @@ -6,8 +6,20 @@ #' \code{TS} is the main interface function for the LDATS application #' of Bayesian change point Time Series analyses (Christensen #' \emph{et al.} 2018). \cr \cr -#' \code{prep_TS_models} pre-prepares the TS model objects for simpler -#' use within the subfunctions. +#' \code{prepare_TS} pre-prepares the TS model objects for simpler +#' use within the subfunctions. \cr \cr +#' \code{run_TS} runs (via \code{\link{TS_call}}) all TS models +#' as set up by \code{prep_TS_models}. \cr \cr +#' \code{TS_call} runs (via \code{\link{do.call}}) a single TS model +#' as set up by \code{prep_TS_models}. \cr \cr +#' \code{TS_msg} produces a model-running message if desired. \cr \cr +#' \code{measure_TS} determines the fit value used to select among the +#' models. \cr \cr +#' \code{select_TS} chooses the best model(s) of interest based on their +#' measured values and the selector function. \cr \cr +#' \code{package_TS} sets the class and names the elements of the results +#' \code{list} from \code{\link{TS_call}} applied to the +#' combination of TS models requested for the LDA model(s) input. #' #' @details For a (potentially subset) dataset consisting of proportions of #' topics across multiple documents in a corpus @@ -58,7 +70,7 @@ #' #' @param weights Optional class \code{numeric} vector of weights for each #' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{\link{sequential_TS}} in a standard LDATS +#' each document. When using \code{\link{TS_call}} in a standard LDATS #' analysis, it is advisable to weight the documents by their total size, #' as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of #' proportions, which does not account for size differences among documents. @@ -68,40 +80,101 @@ #' @param control A \code{list} of parameters to control the fitting of the #' Time Series model. Values not input assume defaults set by #' \code{\link{TS_control}}. +#' +#' @param TSs \code{list} of time series model \code{list}s. +#' +#' @param selected_TSs \code{list} of selected time series model \code{list}s. #' #' @return -#' \code{TS}: class \code{TS_set} \code{list} of both selected and all -#' results from \code{\link{sequential_TS}} applied for each model on each -#' LDA model input as well as the control \code{list} used to fit the -#' model. \cr \cr +#' \code{TS},\code{pacakage_TS}: class \code{TS_set} \code{list} of both +#' selected and all results from \code{\link{TS_call}} applied for +#' each model on each LDA model input as well as the control \code{list} +#' used to fit the model. \cr \cr #' \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a -#' preliminary model object for a Time Series model fit. +#' preliminary model object for a Time Series model fit. \cr \cr +#' \code{measure_TS}: \code{vector} of values corresponding to the model +#' evaluations. \cr \cr +#' \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr +#' \code{run_TS}: \code{TS_set} \code{list} of model results from all +#' runs of a \code{} function, such as +#' \code{\link{topicmodels_TS}}. \cr \cr +#' \code{TS_call}: \code{TS} \code{list} of model results from a single +#' run of a \code{} function, such as +#' \code{\link{sequential_TS}}. \cr \cr +#' \code{TS_msg}: a message is produced. +#' +#' @name TS +#' + + +#' @rdname TS #' #' @export #' TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ - control <- do.call("TS_control", control) - messageq("----- Time Series Analyses -----", control$quiet) - TSs <- prep_TS_models(LDAs = LDAs, data = data, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control) + TSs <- prepare_TS(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control) + TSs <- run_TS(TSs = TSs) + TSs <- package_TS(TSs = TSs) + TSs +} + + +#' @rdname TS +#' +#' @export +#' +run_TS <- function(TSs){ nTS <- length(TSs) for (i in 1:nTS){ - TSs[[i]] <- sequential_TS(TS = TSs[[i]], control = control) + TSs[[i]] <- TS_call(TS = TSs[[i]]) } - selected_TSs <- select_TS(TSs = TSs, control = control) - package_TS(selected_TSs = selected_TSs, TSs = TSs, control = control) + TSs +} + + +#' @rdname TS +#' +#' @export +#' +TS_call <- function(TS){ + TS_msg(TS = TS) + fun <- TS$control$model + args <- update_list(TS$control$model_args, TS = TS) + soft_call(fun = fun, args = args, soften = TS$control$soften) +} + + + +#' @rdname TS +#' +#' @export +#' +TS_msg <- function(TS){ + subset_msg <- paste0(" - data subset ", TS$data_subset) + topic_msg <- paste0(", ", TS$topics, " topics") + rep_msg <- paste0(", replicate ", TS$rep) + + formula_msg <- paste0(", ", deparse(TS$formula)) + nchangepoints <- TS$nchangepoints + txt <- ifelse(nchangepoints == 1, " change point", " change points") + changepoints_msg <- paste0(", ", nchangepoints, txt) + msg <- paste0(subset_msg, topic_msg, rep_msg, formula_msg, changepoints_msg) + messageq(msg, TS$control$quiet) } + #' @rdname TS #' #' @export #' -prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, +prepare_TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ - + control <- do.call("TS_control", control) + messageq("----- Time Series Analyses -----", control$quiet) if (!is(formulas, "list")) { if (is(formulas, "formula")) { formulas <- c(formulas) @@ -144,8 +217,8 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, nchangepoints = tab$nchangepoints[i], weights = weights, timename = timename, - response = control$response, - topics = lda$topics, rep = lda$rep) + control = control, + topics = lda$topics, replicate = lda$replicate) } name_tab <- data.frame(paste("LDA", tab[ , 1]), paste(",", tab[ , 2]), @@ -157,69 +230,44 @@ prep_TS_models <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, - - -#' @title Measure, select, and package the output of a set of Time Series -#' models -#' -#' @description -#' \code{measure_TS} determines the fit value used to select among the -#' models. \cr \cr -#' \code{select_TS} chooses the best model(s) of interest based on their -#' measured values and the selector function. \cr \cr -#' \code{package_TS} sets the class and names the elements of the results -#' \code{list} from \code{\link{sequential_TS}} applied to the -#' combination of TS models requested for the LDA model(s) input. -#' -#' @param TSs \code{list} of time series model \code{list}s. -#' -#' @param selected_TSs \code{list} of selected time series model \code{list}s. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return -#' \code{measure_TS}: \code{vector} of values corresponding to the model -#' evaluations. \cr \cr -#' \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr -#' \code{pacakage_TS}: class \code{TS_set} \code{list} of both selected and -#' all results from \code{\link{sequential_TS}} applied for each model on -#' each LDA model input as well as the control \code{list} used to fit -#' the model. +#' @rdname TS #' #' @export #' -package_TS <- function(selected_TSs, TSs, control = list()){ - out <- list(selected_TSs = selected_TSs, TSs = TSs, control = control) +package_TS <- function(TSs){ + selected_TSs <- select_TS(TSs = TSs) + out <- list(selected_TSs = selected_TSs, TSs = TSs) class(out) <- c("TS_set", "list") out } -#' @rdname package_TS +#' @rdname TS #' #' @export #' -select_TS <- function(TSs, control = list()){ +select_TS <- function(TSs){ - vals <- measure_TS(TSs = TSs, control = control) - fun <- control$selector - args <- update_list(control$selector_args, x = vals) + vals <- measure_TS(TSs = TSs) + fun <- TSs[[1]]$control$selector + args <- update_list(TSs[[1]]$control$selector_args, x = vals) + args[names(args) == ""] <- NULL selection <- do.call(what = fun, args = args) TSs[selection] } -#' @rdname package_TS +#' @rdname TS #' #' @export #' -measure_TS <- function(TSs, control = list()){ - fun <- control$measurer - args <- control$measurer_args +measure_TS <- function(TSs){ + nTSs <- length(TSs) vals <- rep(NA, nTSs) for(i in 1:nTSs){ + fun <- TSs[[i]]$control$measurer + args <- TSs[[i]]$control$measurer_args args <- update_list(args, object = TSs[[i]]) + args[names(args) == ""] <- NULL vals_i <- do.call(what = fun, args = args) if(length(vals_i) != 0){ vals[i] <- vals_i @@ -229,6 +277,8 @@ measure_TS <- function(TSs, control = list()){ } + + #' @title Create the controls list for the Time Series model #' #' @description This function provides a simple creation and definition of a @@ -289,19 +339,20 @@ measure_TS <- function(TSs, control = list()){ #' @export #' TS_control <- function(model = sequential_TS, - model_args = sequential_TS_control(), + model_args = list(control = sequential_TS_control()), response = multinom_TS, - response_args = multinom_TS_control(), + response_args = list(control = multinom_TS_control()), method = ldats_classic, - method_args = ldats_classic_control(), + method_args = list(control = ldats_classic_control()), summary_prob = 0.95, measurer = AIC, - measurer_args = list(), + measurer_args = list(NULL), selector = which.min, - selector_args = list(), + selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...){ - list(response = response, response_args = response_args, + list(model = model, model_args = model_args, + response = response, response_args = response_args, method = method, method_args = method_args, measurer = measurer, measurer_args = measurer_args, selector = selector, selector_args = selector_args, diff --git a/R/ldats_classic_method.R b/R/ldats_classic_method.R index 5fdd4e5b..aa0c6064 100644 --- a/R/ldats_classic_method.R +++ b/R/ldats_classic_method.R @@ -274,8 +274,8 @@ prep_cpts <- function(TS, control = list()){ } lls <- rep(NA, ntemps) for (i in 1:ntemps){ - fun <- TS$response - fun <- memoise_fun(fun, control$memoise) + fun <- TS$control$response + fun <- memoise_fun(fun, TS$control$memoise) args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], timename = TS$timename, weights = TS$weights, control = control) @@ -456,7 +456,7 @@ process_saves <- function(saves, control = list()){ #' prep_ptMCMC_inputs <- function(TS, control = list()){ control <- do.call("ldats_classic_control", control) - fun <- TS$response + fun <- TS$control$response fun <- memoise_fun(fun, control$memoise) list(control = control, temps = prep_temp_sequence(TS = TS, control = control), diff --git a/R/sequential_TS.R b/R/sequential_TS.R index 314680f0..3a6738da 100644 --- a/R/sequential_TS.R +++ b/R/sequential_TS.R @@ -20,8 +20,6 @@ #' \code{package_sequential_TS} calculates relevant summaries for the run of #' a sequenial Time Series model within \code{\link{sequential_TS}} and #' packages the output as a \code{TS}-class object. \cr \cr -#' \code{sequential_TS_msg} produces a specific message about the model -#' being run. #' #' @param rho_dist \code{list} of saved data objects from the estimation of #' change point locations (unless \code{nchangepoints} is 0, then @@ -106,14 +104,12 @@ #' (\code{lls}).} #' \item{nparams}{Total number of parameters in the full model, #' including the change point locations and regressors.} -#' } \cr \cr -#' \code{TS_msg}: a message is produced. +#' } #' #' @export #' sequential_TS <- function(TS, control = list()){ control <- do.call("sequential_TS_control", control) - sequential_TS_msg(TS = TS, control = control) rho_dist <- est_changepoints(TS = TS, control = control) eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist, @@ -178,9 +174,9 @@ est_changepoints <- function(TS, control = list()){ if (TS$nchangepoints == 0){ return(NULL) } - fun <- control$method - args <- list(TS = TS, control = control$method_args) - soft_call(fun = fun, args = args, soften = control$soften) + fun <- TS$control$method + args <- update_list(TS$control$method_args, TS = TS) + soft_call(fun = fun, args = args, soften = TS$control$soften) } #' @rdname sequential_TS @@ -193,9 +189,9 @@ est_regressors <- function(rho_dist, TS, control = list()){ if(is.null(rho_dist)){ msg <- " - estimating regressor distribution" - messageq(msg, control$quiet) + messageq(msg, TS$control$quiet) - fun <- TS$response + fun <- TS$control$response args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, control = control$method_args) @@ -238,11 +234,11 @@ est_regressors <- function(rho_dist, TS, control = list()){ data <- TS$data$train$ts_data - fun <- TS$response - fun <- memoise_fun(fun, control$method_args$memoise) + fun <- TS$control$response + fun <- memoise_fun(fun, TS$control$method_args$memoise) args <- list(data = data, formula = TS$formula, changepoints = cpts, timename = TS$timename, weights = TS$weights, - control = control$method_args) + control = TS$control$method_args) mod <- soft_call(fun, args, TRUE) @@ -266,23 +262,7 @@ est_regressors <- function(rho_dist, TS, control = list()){ eta } -#' @rdname sequential_TS -#' -#' @export -#' -sequential_TS_msg <- function(TS, control = list()){ - control <- do.call("sequential_TS_control", control) - subset_msg <- paste0(" - data subset ", TS$data_subset) - topic_msg <- paste0(", ", TS$topics, " topics") - rep_msg <- paste0(", replicate ", TS$rep) - formula_msg <- paste0(", ", deparse(TS$formula)) - nchangepoints <- TS$nchangepoints - txt <- ifelse(nchangepoints == 1, " change point", " change points") - changepoints_msg <- paste0(", ", nchangepoints, txt) - msg <- paste0(subset_msg, topic_msg, rep_msg, formula_msg, changepoints_msg) - messageq(msg, control$quiet) -} #' @title Create the controls list for a sequential Time Series model diff --git a/man/LDA.Rd b/man/LDA.Rd index eb31bfd1..a3cb007b 100644 --- a/man/LDA.Rd +++ b/man/LDA.Rd @@ -2,18 +2,30 @@ % Please edit documentation in R/LDA.R \name{LDA} \alias{LDA} -\alias{prep_LDA_models} +\alias{prepare_LDA} +\alias{run_LDA} \alias{LDA_call} \alias{LDA_msg} +\alias{package_LDA} +\alias{select_LDA} +\alias{measure_LDA} \title{Run a set of Linguistic Decomposition Analysis models} \usage{ -LDA(data, topics = 2, reps = 1, control = list()) +LDA(data, topics = 2, replicates = 1, control = list()) -prep_LDA_models(data, topics = 2, reps = 1, control = list()) +prepare_LDA(data, topics = 2, replicates = 1, control = list()) -LDA_call(LDA = NULL, control = list()) +run_LDA(LDAs) -LDA_msg(LDA, control = list()) +LDA_call(LDA) + +LDA_msg(LDA) + +package_LDA(LDAs) + +select_LDA(LDAs) + +measure_LDA(LDAs) } \arguments{ \item{data}{Any of the data structures allowable for LDATS analyses: @@ -27,35 +39,53 @@ validity for the desired model.} \item{topics}{Vector of the number of topics to evaluate for each model. Must be conformable to \code{integer} values.} -\item{reps}{Number of replicate starts to use for each +\item{replicates}{Number of replicate starts to use for each value of \code{topics}. Must be conformable to \code{integer} value.} \item{control}{A \code{list} of parameters to control the fitting of the LDA model. Values not input assume defaults set by \code{\link{LDA_control}}.} + +\item{LDAs}{\code{list} of LDA model \code{list}s.} + +\item{selected_LDAs}{\code{list} of selected LDA model \code{list}s.} } \value{ -\code{LDA}: class \code{LDA_set} \code{list} of both selected and all - results from \code{\link{LDA_call}} applied for each model on each - data input(s) as well as the control \code{list} used to fit the - model. \cr \cr +\code{LDA},\code{pacakage_LDA}: class \code{LDA_set} \code{list} of + both selected and all results from \code{\link{LDA_call}} applied for + each model on each data input(s) as well as the control \code{list} + used to fit the model. \cr \cr \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a preliminary model object for an LDA model fit. \cr \cr + \code{run_LDA}: \code{LDA_set} \code{list} of model results from all + runs of a \code{} function, such as + \code{\link{topicmodels_LDA}}. \cr \cr \code{LDA_call}: \code{LDA} \code{list} of model results from a single run of a \code{} function, such as \code{\link{topicmodels_LDA}}. \cr \cr - \code{LDA_msg}: a message is produced. + \code{measure_LDA}: \code{vector} of values corresponding to the model + evaluations. + \code{select_LDA}: \code{list} of selected models' \code{list}s. } \description{ Conduct Linguistic Decomposition Analyses. \cr \cr \code{LDA} provides the main interface for Linguistic Decomposition Analysis conducted within the LDATS application of (Christensen \emph{et al.} 2018). \cr \cr - \code{prep_LDA_models} pre-prepares the LDA model objects for simpler + \code{prepare_LDA} pre-prepares the LDA model objects for simpler use within the subfunctions. \cr \cr + \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models + as set up by \code{prep_LDA_models}. \cr \cr \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model as set up by \code{prep_LDA_models}. \cr \cr - \code{LDA_msg} produces a model-running message if desired. + \code{LDA_msg} produces a model-running message if desired. \cr \cr + \code{measure_LDA} determines the fit value used to select among the + models. \cr \cr + \code{select_LDA} chooses the best model(s) of interest based on their + measured values and the selector function. \cr \cr + \code{package_LDA} sets the class and names the elements of the results + \code{list} from \code{\link{LDA_call}} applied to the + combination of TS models requested for the data input(s). } \details{ For a (potentially subset) dataset consisting of counts of words diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd index 56565405..23730cd9 100644 --- a/man/LDA_TS_control.Rd +++ b/man/LDA_TS_control.Rd @@ -7,15 +7,16 @@ \usage{ LDA_TS_control(LDA_model = topicmodels_LDA, LDA_model_args = list(method = "VEM", seeded = TRUE), - LDA_measurer = AIC, LDA_measurer_args = list(), - LDA_selector = which.min, LDA_selector_args = list(), - TS_model = sequential_TS, TS_model_args = sequential_TS_control(), - TS_response = multinom_TS, TS_response_args = multinom_TS_control(), - TS_method = ldats_classic, TS_method_args = ldats_classic_control(), - nsubsets = 1, subset_rule = NULL, summary_prob = 0.95, - soften = TRUE, quiet = FALSE, TS_measurer = AIC, - TS_measurer_args = list(), TS_selector = which.min, - TS_selector_args = list(), ...) + LDA_measurer = AIC, LDA_measurer_args = list(NULL), + LDA_selector = which.min, LDA_selector_args = list(NULL), + TS_model = sequential_TS, TS_model_args = list(control = + sequential_TS_control()), TS_response = multinom_TS, + TS_response_args = list(control = multinom_TS_control()), + TS_method = ldats_classic, TS_method_args = list(control = + ldats_classic_control()), nsubsets = 1, subset_rule = NULL, + summary_prob = 0.95, soften = TRUE, quiet = FALSE, + TS_measurer = AIC, TS_measurer_args = list(NULL), + TS_selector = which.min, TS_selector_args = list(NULL), ...) } \arguments{ \item{LDA_model}{Main LDA \code{function}.} diff --git a/man/LDA_control.Rd b/man/LDA_control.Rd index 24ac28b5..411c4e4d 100644 --- a/man/LDA_control.Rd +++ b/man/LDA_control.Rd @@ -5,8 +5,8 @@ \title{Create the controls list for the Time Series model} \usage{ LDA_control(model = topicmodels_LDA, model_args = list(method = "VEM", - seeded = TRUE), measurer = AIC, measurer_args = list(), - selector = which.min, selector_args = list(), nsubsets = 1, + seeded = TRUE), measurer = AIC, measurer_args = list(NULL), + selector = which.min, selector_args = list(NULL), nsubsets = 1, subset_rule = NULL, soften = TRUE, quiet = FALSE, ...) } \arguments{ diff --git a/man/TS.Rd b/man/TS.Rd index 5b8f222d..c4d69e4f 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -2,14 +2,32 @@ % Please edit documentation in R/TS.R \name{TS} \alias{TS} -\alias{prep_TS_models} +\alias{run_TS} +\alias{TS_call} +\alias{TS_msg} +\alias{prepare_TS} +\alias{package_TS} +\alias{select_TS} +\alias{measure_TS} \title{Conduct a Bayesian compositional Time Series analysis} \usage{ TS(LDAs, data, formulas = ~1, nchangepoints = 0, timename = "time", weights = NULL, control = list()) -prep_TS_models(LDAs, data, formulas = ~1, nchangepoints = 0, +run_TS(TSs) + +TS_call(TS) + +TS_msg(TS) + +prepare_TS(LDAs, data, formulas = ~1, nchangepoints = 0, timename = "time", weights = NULL, control = list()) + +package_TS(TSs) + +select_TS(TSs) + +measure_TS(TSs) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated @@ -47,7 +65,7 @@ timestep being 1 day, which is often not desired behavior.} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{\link{sequential_TS}} in a standard LDATS +each document. When using \code{\link{TS_call}} in a standard LDATS analysis, it is advisable to weight the documents by their total size, as the result of, e.g., \code{\link[topicmodels]{LDA}} is a matrix of proportions, which does not account for size differences among documents. @@ -57,22 +75,49 @@ most appropriate, and this is accomplished using \code{document_weights}.} \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by \code{\link{TS_control}}.} + +\item{TSs}{\code{list} of time series model \code{list}s.} + +\item{selected_TSs}{\code{list} of selected time series model \code{list}s.} } \value{ -\code{TS}: class \code{TS_set} \code{list} of both selected and all - results from \code{\link{sequential_TS}} applied for each model on each - LDA model input as well as the control \code{list} used to fit the - model. \cr \cr +\code{TS},\code{pacakage_TS}: class \code{TS_set} \code{list} of both + selected and all results from \code{\link{TS_call}} applied for + each model on each LDA model input as well as the control \code{list} + used to fit the model. \cr \cr \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a - preliminary model object for a Time Series model fit. + preliminary model object for a Time Series model fit. \cr \cr + \code{measure_TS}: \code{vector} of values corresponding to the model + evaluations. \cr \cr + \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr + \code{run_TS}: \code{TS_set} \code{list} of model results from all + runs of a \code{} function, such as + \code{\link{topicmodels_TS}}. \cr \cr + \code{TS_call}: \code{TS} \code{list} of model results from a single + run of a \code{} function, such as + \code{\link{sequential_TS}}. \cr \cr + \code{TS_msg}: a message is produced. } \description{ -Analyze compositional Time Series models. \cr \cr +Analyze compositional Time Series models using Bayesian + sampling methods. \cr \cr \code{TS} is the main interface function for the LDATS application of Bayesian change point Time Series analyses (Christensen \emph{et al.} 2018). \cr \cr - \code{prep_TS_models} pre-prepares the TS model objects for simpler - use within the subfunctions. + \code{prepare_TS} pre-prepares the TS model objects for simpler + use within the subfunctions. \cr \cr + \code{run_TS} runs (via \code{\link{TS_call}}) all TS models + as set up by \code{prep_TS_models}. \cr \cr + \code{TS_call} runs (via \code{\link{do.call}}) a single TS model + as set up by \code{prep_TS_models}. \cr \cr + \code{TS_msg} produces a model-running message if desired. \cr \cr + \code{measure_TS} determines the fit value used to select among the + models. \cr \cr + \code{select_TS} chooses the best model(s) of interest based on their + measured values and the selector function. \cr \cr + \code{package_TS} sets the class and names the elements of the results + \code{list} from \code{\link{TS_call}} applied to the + combination of TS models requested for the LDA model(s) input. } \details{ For a (potentially subset) dataset consisting of proportions of diff --git a/man/TS_control.Rd b/man/TS_control.Rd index 4aa6ee4d..30cb5001 100644 --- a/man/TS_control.Rd +++ b/man/TS_control.Rd @@ -4,12 +4,13 @@ \alias{TS_control} \title{Create the controls list for the Time Series model} \usage{ -TS_control(model = sequential_TS, model_args = sequential_TS_control(), - response = multinom_TS, response_args = multinom_TS_control(), - method = ldats_classic, method_args = ldats_classic_control(), - summary_prob = 0.95, measurer = AIC, measurer_args = list(), - selector = which.min, selector_args = list(), soften = TRUE, - quiet = FALSE, ...) +TS_control(model = sequential_TS, model_args = list(control = + sequential_TS_control()), response = multinom_TS, + response_args = list(control = multinom_TS_control()), + method = ldats_classic, method_args = list(control = + ldats_classic_control()), summary_prob = 0.95, measurer = AIC, + measurer_args = list(NULL), selector = which.min, + selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...) } \arguments{ \item{response}{\code{character} element indicating the response variable diff --git a/man/identity_LDA.Rd b/man/identity_LDA.Rd index f0d7f2f7..f92776c4 100644 --- a/man/identity_LDA.Rd +++ b/man/identity_LDA.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R +% Please edit documentation in R/LDA_models.R \name{identity_LDA} \alias{identity_LDA} \title{Identity Linguistic Decomposition Analysis} diff --git a/man/package_LDA.Rd b/man/package_LDA.Rd deleted file mode 100644 index f3ed8298..00000000 --- a/man/package_LDA.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{package_LDA} -\alias{package_LDA} -\alias{select_LDA} -\alias{measure_LDA} -\title{Measure, select, and package the output of a set of Linguistic - Decomposition Analysis models} -\usage{ -package_LDA(selected_LDAs, LDAs, control = list()) - -select_LDA(LDAs = list(), control = list()) - -measure_LDA(LDAs = list(), control = list()) -} -\arguments{ -\item{selected_LDAs}{\code{list} of selected LDA model \code{list}s.} - -\item{LDAs}{\code{list} of LDA model \code{list}s.} - -\item{control}{A \code{list} of parameters to control the fitting of the -LDA model. Values not input assume defaults set by -\code{\link{LDA_control}}.} -} -\value{ -\code{measure_LDA}: \code{vector} of values corresponding to the model - evaluations. - \code{select_LDA}: \code{list} of selected models' \code{list}s. - \code{pacakage_LDA}: class \code{LDA_set} \code{list} of both selected - and all results from \code{\link{LDA_call}} applied for each model on - each data input as well as the control \code{list} used to fit - the model. -} -\description{ -\code{measure_LDA} determines the fit value used to select among the - models. \cr \cr - \code{select_LDA} chooses the best model(s) of interest based on their - measured values and the selector function. \cr \cr - \code{package_LDA} sets the class and names the elements of the results - \code{list} from \code{\link{LDA_call}} applied to the - combination of TS models requested for the data input(s). -} diff --git a/man/package_TS.Rd b/man/package_TS.Rd deleted file mode 100644 index ceb8c71c..00000000 --- a/man/package_TS.Rd +++ /dev/null @@ -1,42 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{package_TS} -\alias{package_TS} -\alias{select_TS} -\alias{measure_TS} -\title{Measure, select, and package the output of a set of Time Series - models} -\usage{ -package_TS(selected_TSs, TSs, control = list()) - -select_TS(TSs, control = list()) - -measure_TS(TSs, control = list()) -} -\arguments{ -\item{selected_TSs}{\code{list} of selected time series model \code{list}s.} - -\item{TSs}{\code{list} of time series model \code{list}s.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{TS_control}}.} -} -\value{ -\code{measure_TS}: \code{vector} of values corresponding to the model - evaluations. - \code{select_TS}: \code{list} of selected models' \code{list}s. - \code{pacakage_TS}: class \code{TS_set} \code{list} of both selected and - all results from \code{\link{sequential_TS}} applied for each model on - each LDA model input as well as the control \code{list} used to fit - the model. -} -\description{ -\code{measure_TS} determines the fit value used to select among the - models. \cr \cr - \code{select_TS} chooses the best model(s) of interest based on their - measured values and the selector function. \cr \cr - \code{package_TS} sets the class and names the elements of the results - \code{list} from \code{\link{sequential_TS}} applied to the - combination of TS models requested for the LDA model(s) input. -} diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index a2217521..1f1c882d 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -5,7 +5,6 @@ \alias{package_sequential_TS} \alias{est_changepoints} \alias{est_regressors} -\alias{sequential_TS_msg} \title{Estimate a Time Series model sequentially} \usage{ sequential_TS(TS, control = list()) @@ -15,8 +14,6 @@ package_sequential_TS(TS, rho_dist, eta_dist, control = list()) est_changepoints(TS, control = list()) est_regressors(rho_dist, TS, control = list()) - -sequential_TS_msg(TS, control = list()) } \arguments{ \item{control}{A \code{list} of parameters to control the fitting of the @@ -73,8 +70,7 @@ of the coefficients across the segments (columns), as estimated by (\code{lls}).} \item{nparams}{Total number of parameters in the full model, including the change point locations and regressors.} - } \cr \cr - \code{TS_msg}: a message is produced. + } } \description{ This set of functions estimates the Time Series model @@ -82,23 +78,21 @@ This set of functions estimates the Time Series model with full flexibility of the regressor models between change points, then estimate the regressors between the change points, intially conditional on their locations, but with marginal estimation to produce - regressor values unconditional on change point locations. + regressor values unconditional on change point locations. \cr \cr \code{sequential_TS} combines each stage of the model estimation and - packages the model results in a consistent output. + packages the model results in a consistent output. \cr \cr \code{est_changepoints} estimates the change point location - distributions for multinomial Time Series analyses. + distributions for multinomial Time Series analyses. \cr \cr \code{est_regressors} uses the marginal posterior distributions of the change point locations (estimated by \code{\link{est_changepoints}}) in combination with the conditional (on the change point locations) posterior distributions of the regressors (estimated by a \code{_TS} function) to estimate the marginal posterior distribution of the regressors, - unconditional on the change point locations. + unconditional on the change point locations. \cr \cr \code{package_sequential_TS} calculates relevant summaries for the run of a sequenial Time Series model within \code{\link{sequential_TS}} and - packages the output as a \code{TS}-class object. - \code{sequential_TS_msg} produces a specific message about the model - being run. + packages the output as a \code{TS}-class object. \cr \cr } \details{ The general approach follows that of Western and Kleykamp @@ -106,12 +100,14 @@ The general approach follows that of Western and Kleykamp models are fit independently for each chunk (segment of time), and therefore the variance-covariance matrix for the full model has \code{0} entries for covariances between regressors in different - chunks of the time series. Further, because the regression model here - is a standard (non-hierarchical) softmax (Ripley 1996, Venables and - Ripley 2002, Bishop 2006), there is no error term in the regression - (as there is in the normal model used by Western and Kleykamp 2004), - and so the posterior distribution used here is a multivariate normal, - as opposed to a multivariate t, as used by Western and Kleykamp (2004). + chunks of the time series. \cr \cr + Further differences are model-specific. For example, the original softmax + multinomial regression model used here is a standard (non-hierarchical) + model (Ripley 1996, Venables and Ripley 2002, Bishop 2006), mean that + there is no error term in the regression (as there is in the normal + model used by Western and Kleykamp 2004), and so the posterior + distribution used here is a multivariate normal, as opposed to a + multivariate t, as used by Western and Kleykamp (2004). } \references{ Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd index 1de72182..a4e2da7b 100644 --- a/man/topicmodels_LDA.Rd +++ b/man/topicmodels_LDA.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R +% Please edit documentation in R/LDA_models.R \name{topicmodels_LDA} \alias{topicmodels_LDA} \title{Latent Dirichlet Allocation Linguistic Decomposition Analysis diff --git a/notes.R b/notes.R index abd05e9f..2ce351ca 100644 --- a/notes.R +++ b/notes.R @@ -4,13 +4,12 @@ known to dos - -package LDA_TS +pipeline generalization and doc streamline check functions utilities plotting functions simulate -generalize ilr to simplical to allow for other transforms? +generalize ilr to simplical to allow for other transforms devtools::load_all() @@ -19,17 +18,16 @@ devtools::load_all() data <- rodents topics = 2 -reps = 2 +replicates = 2 formulas = ~ 1 -nchangepoints = 0:2 +nchangepoints = 1 timename = "newmoon" weights = TRUE control = list() -control <- do.call("LDA_TS_control", control) -data <- conform_data(data = data, control = control) -LDAs <- LDA(data = data, topics = topics, reps = reps, - control = control$LDA_control) -control$TS_control$method_args$nit <- 100 +LDAs <- LDA(data = data, topics = topics, replicates = replicates, + control = list()) +control <- LDA_TS_control() +control$TS_control$method_args$control$nit <- 100 TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control$TS_control) diff --git a/pipeline.R b/pipeline.R index 9ab83e88..50dcaad2 100644 --- a/pipeline.R +++ b/pipeline.R @@ -5,40 +5,35 @@ LDA_TS TS_control LDA - LDA_control - prep_LDA_models - LDA_call - - uses control$model - select_LDA - measure_LDA - - uses control$measurer - - uses control$selector + prepare_LDA + LDA_control + conform_data + run_LDA + LDA_call (replicated for each model) + LDA_msg + LDA$control$model with LDA$control$model_args package_LDA + measure_LDA (replicated for each model) + LDA$control$measurer with LDA$control$measurer_args + select_LDA + LDA$control$selector with LDA$control$selector_args TS - TS_control - prep_TS_models - sequential_TS - sequential_TS_control - est_changepoints - - uses control$method - est_regressors - - uses TS$reponse - package_sequential_TS - select_TS - measure_TS - - uses control$measurer - - uses control$selector + prepare_TS + TS_control + run_TS + TS_call (replicated for each model) + TS_msg + TS$control$model with TS$control$model_args + +[one more level deeper here!] + package_TS + measure_TS (replicated for each model) + TS$control$measurer with TS$control$measurer_args + select_TS + TS$control$selector with TS$control$selector_args - package_LDA_TS -to consider -TS versus control object passing around...like once the controls are in the - model object why still pass them around>?? -make sequential_TS the model like in LDA_call -condense x_call -bring select_x within package_x -rename prep_x_models as prep_x \ No newline at end of file From 1eb88c72093e8145e94150afc992c75ce88cb9ec Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sat, 21 Mar 2020 23:40:25 -0700 Subject: [PATCH 24/43] pin in it --- R/LDA_TS.R | 7 +- R/LDA_models.R | 33 ++++- R/TS.R | 51 ++++++-- R/{ldats_classic_method.R => TS_methods.R} | 124 ++++++++---------- R/{sequential_TS.R => TS_models.R} | 141 ++++++++++----------- R/utilities.R | 14 +- man/LDA_TS.Rd | 7 +- man/TS.Rd | 36 +++++- man/TS_control.Rd | 5 +- man/count_trips.Rd | 2 +- man/identity_LDA.Rd | 17 ++- man/ldats_classic.Rd | 18 ++- man/ldats_classic_control.Rd | 2 +- man/prep_chunks.Rd | 12 +- man/prep_cpts.Rd | 8 +- man/prep_ids.Rd | 8 +- man/prep_pbar.Rd | 6 +- man/prep_proposal_dist.Rd | 8 +- man/prep_ptMCMC_inputs.Rd | 8 +- man/prep_saves.Rd | 10 +- man/prep_temp_sequence.Rd | 8 +- man/proposed_step_mods.Rd | 2 +- man/sequential_TS.Rd | 10 +- man/sequential_TS_control.Rd | 2 +- man/step_chains.Rd | 2 +- man/summarize_etas.Rd | 34 ----- man/summarize_rhos.Rd | 35 ----- man/summarize_sequential_TS.Rd | 53 ++++++++ man/swap_chains.Rd | 2 +- man/topicmodels_LDA.Rd | 16 ++- man/verify_changepoint_locations.Rd | 6 +- notes.R | 42 ++++++ pipeline.R | 39 ------ 33 files changed, 423 insertions(+), 345 deletions(-) rename R/{ldats_classic_method.R => TS_methods.R} (87%) rename R/{sequential_TS.R => TS_models.R} (81%) delete mode 100644 man/summarize_etas.Rd delete mode 100644 man/summarize_rhos.Rd create mode 100644 man/summarize_sequential_TS.Rd delete mode 100644 pipeline.R diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 9ae8ceb3..95496866 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -1,10 +1,9 @@ #' @title Run a set of Linguistic Decomposition Analysis models coupled to #' Bayesian Time Series models #' -#' @description The main interface function for analyzing compositional -#' time series using the LDATS application of Linguistic Decomposition -#' Analysis and Time Series modeling generally following Christensen -#' \emph{et al.} (2018). +#' @description Analyze compositional time series using the Linguistic +#' Decomposition Analysis coupled to Bayesian Time Series models +#' generally following Christensen \emph{et al.} (2018). #' #' @details For a (potentially subset) dataset consisting of counts of words #' across multiple documents in a corpus, diff --git a/R/LDA_models.R b/R/LDA_models.R index 910c86de..db29aa59 100644 --- a/R/LDA_models.R +++ b/R/LDA_models.R @@ -24,7 +24,21 @@ #' \code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only #' \code{"VEM"} and \code{"Gibbs"} are supported. #' -#' @return \code{LDA} \code{list}. +#' @return \code{LDA} \code{list} with components +#' \describe{ +#' \item{alpha}{parameter estimate.} +#' \item{beta}{parameter estimate.} +#' \item{document_topic_matrix}{estimated latent topic compositions.} +#' \item{test_document_topic_matrox}{estimated latent topic compositions +#' of the test data (not presently available for usage).} +#' \item{log_likelihood}{model log likelihood.} +#' \item{data}{data object used to fit the LDA model.} +#' \item{data_subset}{number of the data subset from the whole data set.} +#' \item{topics}{\code{integer} number of topics in the model.} +#' \item{replicat}{\code{integer} replicate number.} +#' \item{control}{\code{list} of controls used to fit the model. See +#' \code{\link{LDA_control}}.} +#' } #' #' @references #' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet @@ -77,7 +91,22 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ #' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model #' \code{list}. #' -#' @return \code{LDA} \code{list} with most components as placeholders. +#' @return \code{LDA} \code{list} with components (many of which are +#' placeholders): +#' \describe{ +#' \item{alpha}{parameter estimate.} +#' \item{beta}{parameter estimate.} +#' \item{document_topic_matrix}{estimated latent topic compositions.} +#' \item{test_document_topic_matrox}{estimated latent topic compositions +#' of the test data (not presently available for usage).} +#' \item{log_likelihood}{model log likelihood.} +#' \item{data}{data object used to fit the LDA model.} +#' \item{data_subset}{number of the data subset from the whole data set.} +#' \item{topics}{\code{integer} number of topics in the model.} +#' \item{replicat}{\code{integer} replicate number.} +#' \item{control}{\code{list} of controls used to fit the model. See +#' \code{\link{LDA_control}}.} +#' } #' #' @export #' diff --git a/R/TS.R b/R/TS.R index b43b2be1..02080c59 100644 --- a/R/TS.R +++ b/R/TS.R @@ -81,7 +81,8 @@ #' Time Series model. Values not input assume defaults set by #' \code{\link{TS_control}}. #' -#' @param TSs \code{list} of time series model \code{list}s. +#' @param TS,TSs time series model \code{list} (\code{TS}) or a \code{list} +#' of many time series model \code{list}s (\code{TSs}). #' #' @param selected_TSs \code{list} of selected time series model \code{list}s. #' @@ -103,6 +104,39 @@ #' \code{\link{sequential_TS}}. \cr \cr #' \code{TS_msg}: a message is produced. #' +#' @references +#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. +#' Springer, New York, NY, USA. +#' +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://doi.org/10.1039/B509983H}{link}. +#' +#' McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. +#' 2nd Edition. Chapman and Hall, New York, NY, USA. +#' +#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. +#' Cambridge University Press, Cambridge, UK. +#' +#' Ruggieri, E. 2013. A Bayesian approach to detecting change points in +#' climactic records. \emph{International Journal of Climatology} +#' \strong{33}:520-528. +#' \href{https://doi.org/10.1002/joc.3447}{link}. +#' +#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. +#' +#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for +#' historical time series analysis. \emph{Political Analysis} +#' \strong{12}:354-374. +#' \href{https://doi.org/10.1093/pan/mph023}{link}. +#' #' @name TS #' @@ -281,9 +315,8 @@ measure_TS <- function(TSs){ #' @title Create the controls list for the Time Series model #' -#' @description This function provides a simple creation and definition of a -#' list used to control the time series model fit occurring within -#' \code{\link{TS}}. +#' @description Creation and definition of a \code{list} to control the +#' time series model fit occurring within \code{\link{TS}}. #' #' @param response \code{character} element indicating the response variable #' used in the time series. \cr \cr @@ -409,15 +442,15 @@ logLik.TS <- function(object, ...){ #' #' @description Creates the table containing the start and end times for each #' chunk within a time series, based on the change points (used to break up -#' the time series) and the range of the time series. If there are no -#' change points (i.e. \code{change points} is \code{NULL}, there is still a -#' single chunk defined by the start and end of the time series. +#' the time series) and the range of the time series. \cr \cr +#' If there are no change points (i.e. \code{changepoints = NULL}, there is +#' still a single chunk defined by the start and end of the time series. #' #' @param data Class \code{data.frame} object including the predictor and #' response variables, but specifically here containing the column indicated #' by the \code{timename} input. #' -#' @param change points Numeric vector indicating locations of the change +#' @param changepoints Numeric vector indicating locations of the change #' points. Must be conformable to \code{integer} values. #' #' @param timename \code{character} element indicating the time variable @@ -446,7 +479,7 @@ prep_chunks <- function(data, changepoints = NULL, timename = "time"){ #' @param data Class \code{data.frame} object including the predictor and #' response variables. #' -#' @param change points Numeric vector indicating locations of the change +#' @param changepoints Numeric vector indicating locations of the change #' points. Must be conformable to \code{integer} values. #' #' @param timename \code{character} element indicating the time variable diff --git a/R/ldats_classic_method.R b/R/TS_methods.R similarity index 87% rename from R/ldats_classic_method.R rename to R/TS_methods.R index aa0c6064..c1519a02 100644 --- a/R/ldats_classic_method.R +++ b/R/TS_methods.R @@ -1,7 +1,8 @@ #' @title Estimate changepoints using the LDATS classic ptMCMC method #' -#' @description Uses the LDATS classic ptMCMC method to fit a changepoint -#' model. +#' @description Uses the LDATS classic parallel tempering Markov Chain Monte +#' Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint +#' model, following Christensen \emph{et al.} (2018). #' #' @param TS \code{list} time series model object. #' @@ -11,20 +12,31 @@ #' #' @return \code{list} of changepoint locations, log likelihoods, and model #' diagnostics. +#' +#' @references +#' +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://doi.org/10.1039/B509983H}{link}. #' #' @export #' ldats_classic <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) - saves <- prep_saves(TS = TS, control = control) - - inputs <- prep_ptMCMC_inputs(TS = TS, control = control) - cpts <- prep_cpts(TS = TS, control = control) - ids <- prep_ids(TS = TS, control) - pbar <- prep_pbar(control = control, bar_type = "rho") + TS$control$method_args$control <- do.call("ldats_classic_control", control) + saves <- prep_saves(TS = TS) + inputs <- prep_ptMCMC_inputs(TS = TS) + cpts <- prep_cpts(TS = TS) + ids <- prep_ids(TS = TS) + pbar <- prep_pbar(control = TS$control$method_args$control, type = "rho") for(i in 1:control$nit){ - update_pbar(pbar = pbar, control = control) + update_pbar(pbar = pbar, control = TS$control$method_args$control) steps <- step_chains(TS = TS, i = i, cpts = cpts, inputs = inputs) swaps <- swap_chains(chainsin = steps, inputs = inputs, ids = ids) saves <- update_saves(i = i, saves = saves, steps = steps, swaps = swaps) @@ -32,7 +44,7 @@ ldats_classic <- function(TS, control = list()){ ids <- update_ids(ids = ids, swaps = swaps) } - process_saves(saves = saves, control = control) + process_saves(saves = saves, TS = TS) } @@ -243,10 +255,6 @@ swap_chains <- function(chainsin, inputs, ids){ #' #' @param TS \code{list} time series model object. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @param cpts The existing matrix of change points. #' #' @param swaps Chain configuration after among-temperature swaps. @@ -258,10 +266,9 @@ swap_chains <- function(chainsin, inputs, ids){ #' #' @export #' -prep_cpts <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) +prep_cpts <- function(TS){ data <- TS$data$train$ts_data - temps <- prep_temp_sequence(TS = TS, control = control) + temps <- prep_temp_sequence(TS = TS) ntemps <- length(temps) min_time <- min(data[ , timename]) max_time <- max(data[ , timename]) @@ -278,7 +285,7 @@ prep_cpts <- function(TS, control = list()){ fun <- memoise_fun(fun, TS$control$memoise) args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], timename = TS$timename, weights = TS$weights, - control = control) + control = TS$control$response_args$control) modfit <- soft_call(fun, args, TRUE) lls[i] <- modfit$logLik } @@ -310,10 +317,6 @@ update_cpts <- function(cpts, swaps){ #' and would work with any ptMCMC model as long as \code{control} #' includes the relevant control parameters. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @param TS \code{list} time series model object. #' #' @return \code{vector} of temperatures. @@ -323,12 +326,11 @@ update_cpts <- function(cpts, swaps){ #' #' @export #' -prep_temp_sequence <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) - ntemps <- control$ntemps - penultimate_temp <- control$penultimate_temp - ultimate_temp <- control$ultimate_temp - q <- control$q +prep_temp_sequence <- function(TS){ + ntemps <- TS$control$method_args$control$ntemps + penultimate_temp <- TS$control$method_args$control$penultimate_temp + ultimate_temp <- TS$control$method_args$control$ultimate_temp + q <- TS$control$method_args$control$q sequence <- seq(0, log2(penultimate_temp), length.out = ntemps - 1) log_temps <- sequence^(1 + q) / log2(penultimate_temp)^q c(2^(log_temps), ultimate_temp) @@ -351,10 +353,6 @@ prep_temp_sequence <- function(TS, control = list()){ #' #' @param TS \code{list} time series model object. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @param i \code{integer} iteration index. #' #' @param saves The existing list of saved data objects. @@ -367,14 +365,12 @@ prep_temp_sequence <- function(TS, control = list()){ #' log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances #' (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). #' -#' #' @export #' -prep_saves <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) +prep_saves <- function(TS){ nchangepoints <- TS$nchangepoints - ntemps <- control$ntemps - nit <- control$nit + ntemps <- TS$control$method_args$control$ntemps + nit <- TS$control$method_args$control$nit cpts <- array(NA, c(nchangepoints, ntemps, nit)) lls <- matrix(NA, ntemps, nit) ids <- matrix(NA, ntemps, nit) @@ -401,15 +397,14 @@ update_saves <- function(i, saves, steps, swaps){ #' #' @export #' -process_saves <- function(saves, control = list()){ - control <- do.call("ldats_classic_control", control) - nit <- control$nit +process_saves <- function(saves, TS){ + nit <- TS$control$method_args$control$nit iters <- 1:nit - if (control$burnin > 0){ - iters <- iters[-(1:control$burnin)] + if (TS$control$method_args$control$burnin > 0){ + iters <- iters[-(1:TS$control$method_args$control$burnin)] } niters <- length(iters) - thin_interval <- ceiling(1/control$thin_frac) + thin_interval <- ceiling(1/TS$control$method_args$control$thin_frac) iters_thinned <- seq(1, niters, by = thin_interval) dims <- c(dim(saves$cpts)[1:2], length(iters_thinned)) @@ -428,7 +423,6 @@ process_saves <- function(saves, control = list()){ saves$diagnostics <- diagnostics - saves } @@ -445,22 +439,17 @@ process_saves <- function(saves, control = list()){ #' #' @param TS \code{list} time series model object. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @return \code{list} containing the static #' inputs for use within the ptMCMC algorithm for estimating change points. #' #' @export #' -prep_ptMCMC_inputs <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) +prep_ptMCMC_inputs <- function(TS){ fun <- TS$control$response - fun <- memoise_fun(fun, control$memoise) - list(control = control, - temps = prep_temp_sequence(TS = TS, control = control), - pdist = prep_proposal_dist(TS = TS, control = control), + fun <- memoise_fun(fun, TS$control$method_args$control$memoise) + list(control = TS$control$method_args$control, + temps = prep_temp_sequence(TS = TS), + pdist = prep_proposal_dist(TS = TS), formula = TS$formula, weights = TS$weights, data = TS$data$train$ts_data, @@ -484,10 +473,6 @@ prep_ptMCMC_inputs <- function(TS, control = list()){ #' #' @param TS \code{list} time series model object. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @return \code{list} of two \code{matrix} elements: [1] the size of the #' proposed step for each iteration of each chain and [2] the identity of #' the change point location to be shifted by the step for each iteration of @@ -495,16 +480,15 @@ prep_ptMCMC_inputs <- function(TS, control = list()){ #' #' @export #' -prep_proposal_dist <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) +prep_proposal_dist <- function(TS){ nchangepoints <- TS$nchangepoints - ntemps <- control$ntemps - nit <- control$nit + ntemps <- TS$control$method_args$control$ntemps + nit <- TS$control$method_args$control$nit if(nchangepoints == 0){ steps <- matrix(0, nrow = nit, ncol = ntemps) which_steps <- matrix(numeric(0), nrow = nit, ncol = ntemps) } else{ - magnitude <- control$magnitude + magnitude <- TS$control$method_args$control$magnitude step_signs <- sample(c(-1, 1), nit * ntemps, replace = TRUE) step_magnitudes <- 1 + rgeom(nit * ntemps, 1 / magnitude) steps <- matrix(step_signs * step_magnitudes, nrow = nit) @@ -530,10 +514,6 @@ prep_proposal_dist <- function(TS, control = list()){ #' #' @param TS \code{list} time series model object. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' time series model via the LDATS classic ptMCMC method. Values not input -#' assume defaults set by \code{\link{ldats_classic_control}}. -#' #' @param ids The existing vector of chain ids. #' #' @param swaps Chain configuration after among-temperature swaps. @@ -542,12 +522,12 @@ prep_proposal_dist <- function(TS, control = list()){ #' #' @export #' -prep_ids <- function(TS, control = list()){ - control <- do.call("ldats_classic_control", control) - if (!is.numeric(control$ntemps) || any(control$ntemps %% 1 != 0)){ +prep_ids <- function(TS){ + ntemps <- TS$control$method_args$control$ntemps + if (!is.numeric(ntemps) || any(ntemps %% 1 != 0)){ stop("ntemps must be integer-valued") } - 1:control$ntemps + 1:ntemps } diff --git a/R/sequential_TS.R b/R/TS_models.R similarity index 81% rename from R/sequential_TS.R rename to R/TS_models.R index 3a6738da..054380a4 100644 --- a/R/sequential_TS.R +++ b/R/TS_models.R @@ -33,6 +33,8 @@ #' Time Series model. Values not input assume defaults set by #' \code{\link{sequential_TS_control}}. #' +#' @param TS Time series model \code{list}. +#' #' @details The general approach follows that of Western and Kleykamp #' (2004), although we note some important differences. Our regression #' models are fit independently for each chunk (segment of time), and @@ -106,52 +108,52 @@ #' including the change point locations and regressors.} #' } #' +#' @name sequential_TS +#' + +#' @rdname sequential_TS +#' #' @export #' sequential_TS <- function(TS, control = list()){ - control <- do.call("sequential_TS_control", control) - rho_dist <- est_changepoints(TS = TS, control = control) - eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS, control = control) - package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist, - control = control) + TS$control$model_args$control <- do.call("sequential_TS_control", control) + rho_dist <- est_changepoints(TS = TS) + eta_dist <- est_regressors(rho_dist = rho_dist, TS = TS) + package_sequential_TS(TS = TS, rho_dist = rho_dist, eta_dist = eta_dist) } #' @rdname sequential_TS #' #' @export #' -package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ - control <- do.call("sequential_TS_control", control) +package_sequential_TS <- function(TS, rho_dist, eta_dist){ if(is.null(rho_dist)){ - focal_rho_dist <- NULL + focal_rhos <- NULL data <- TS$data$train$ts_data - fun <- TS$response + fun <- TS$control$response args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, - control = control$method_args) + control = TS$control$response_args$control) mod <- soft_call(fun, args, TRUE) lls <- as.numeric(logLik(mod)) - - } else{ vals <- rho_dist$cpts[ , 1, , drop = FALSE] dims <- dim(rho_dist$cpts)[c(1, 3)] lls <- rho_dist$lls[1, ] - focal_rho_dist <- t(array(vals, dim = dims)) + focal_rhos <- t(array(vals, dim = dims)) } - - rho_summary <- summarize_rhos(rhos = focal_rho_dist, control = control) - rho_vcov <- measure_rho_vcov(rhos = focal_rho_dist) - eta_summary <- summarize_etas(etas = eta_dist, control = control) + rho_summary <- summarize_rhos(rhos = focal_rhos, TS = TS) + rho_vcov <- measure_rho_vcov(rhos = focal_rhos) + eta_summary <- summarize_etas(etas = eta_dist, TS = TS) eta_vcov <- measure_eta_vcov(etas = eta_dist) logLik <- mean(lls) ncoefs <- ncol(eta_dist) nparams <- TS$nchangepoints + ncoefs - out <- update_list(TS, focal_rhos = focal_rho_dist, rhos = rho_dist, + out <- update_list(TS, focal_rhos = focal_rhos, rhos = rho_dist, etas = eta_dist, rho_summary = rho_summary, rho_vcov = rho_vcov, eta_summary = eta_summary, eta_vcov = eta_vcov, logLik = logLik, nparams = nparams) @@ -169,8 +171,7 @@ package_sequential_TS <- function(TS, rho_dist, eta_dist, control = list()){ #' #' @export #' -est_changepoints <- function(TS, control = list()){ - control <- do.call("sequential_TS_control", control) +est_changepoints <- function(TS){ if (TS$nchangepoints == 0){ return(NULL) } @@ -183,8 +184,7 @@ est_changepoints <- function(TS, control = list()){ #' #' @export #' -est_regressors <- function(rho_dist, TS, control = list()){ - control <- do.call("sequential_TS_control", control) +est_regressors <- function(rho_dist, TS){ data <- TS$data$train$ts_data if(is.null(rho_dist)){ @@ -194,7 +194,7 @@ est_regressors <- function(rho_dist, TS, control = list()){ fun <- TS$control$response args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, - control = control$method_args) + control = TS$control$response_args$control) mod <- soft_call(fun, args, TRUE) mod <- mod[[1]][[1]] @@ -226,19 +226,20 @@ est_regressors <- function(rho_dist, TS, control = list()){ n_eta <- n_eta_segment * n_segment n_iter <- dim(rho_dist$cpts)[3] eta <- matrix(NA, nrow = n_iter, ncol = n_eta) - pbar <- prep_pbar(control = control, bar_type = "eta", nr = nr) + pbar <- prep_pbar(control = TS$control$model_args$control, + type = "eta", nr = nr) for(i in 1:nr){ - update_pbar(pbar = pbar, control = control) + update_pbar(pbar = pbar, control = TS$control$model_args$control) cpts <- as.numeric(strsplit(unique_r[i], "_")[[1]]) data <- TS$data$train$ts_data fun <- TS$control$response - fun <- memoise_fun(fun, TS$control$method_args$memoise) + fun <- memoise_fun(fun, TS$control$method_args$control$memoise) args <- list(data = data, formula = TS$formula, changepoints = cpts, timename = TS$timename, weights = TS$weights, - control = TS$control$method_args) + control = TS$control$response_args$control) mod <- soft_call(fun, args, TRUE) @@ -311,36 +312,54 @@ sequential_TS_control <- function(method = ldats_classic, summary_prob = summary_prob, soften = soften, quiet = quiet) } -#' @title Summarize the regressor (eta) distributions of a time series model +#' @title Summarize the change point (rho) and regressor (eta) distributions +#' of a sequential time series model #' -#' @description \code{summarize_etas} calculates summary statistics for each -#' of the chunk-level regressors. -#' \cr \cr +#' @description +#' \code{summarize_etas} calculates summary statistics for each +#' of the chunk-level regressors. \cr \cr #' \code{measure_ets_vcov} generates the variance-covariance matrix for -#' the regressors. +#' the regressors. \cr \cr +#' \code{summarize_rho} calculates summary statistics for each +#' of the change point locations. \cr \cr +#' \code{measure_rho_vcov} generates the variance-covariance matrix for the +#' change point locations. #' -#' @param etas Matrix of regressors (columns) across iterations of the +#' @param etas \code{matrix} of regressors (columns) across iterations of the #' sampler (rows), as returned from \code{\link{est_regressors}}. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{sequential_TS_control}}. +#' @param rhos \code{matrix} of change point locations (columns) across +#' iterations of the sampler (rows) or \code{NULL} if no change points are +#' in the model, as returned from \code{\link{est_change points}}. #' -#' @return \code{summarize_etas}: table of summary statistics for chunk-level -#' regressors including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each regressor. \cr \cr +#' @param TS Time series model \code{list}. +#' +#' @return +#' \code{summarize_etas}: table of summary statistics for chunk-level +#' regressors including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each regressor. \cr \cr #' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level -#' regressors. +#' regressors. \cr \cr +#' \code{summarize_rhos}: table of summary statistics for change point +#' locations including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each change point location. \cr \cr +#' \code{measure_rho_vcov}: variance-covariance matrix for change +#' point locations. +#' +#' @name summarize_sequential_TS +#' + +#' @rdname summarize_sequential_TS #' #' @export #' -summarize_etas <- function(etas, control = list()){ - control <- do.call("sequential_TS_control", control) +summarize_etas <- function(etas, TS){ if (!is.matrix(etas)){ stop("etas should be a matrix") } - prob <- control$summary_prob + prob <- TS$control$summary_prob Mean <- round(apply(etas, 2, mean), 4) Median <- round(apply(etas, 2, median), 4) SD <- round(apply(etas, 2, sd), 4) @@ -358,7 +377,7 @@ summarize_etas <- function(etas, control = list()){ out } -#' @rdname summarize_etas +#' @rdname summarize_sequential_TS #' #' @export #' @@ -372,37 +391,17 @@ measure_eta_vcov <- function(etas){ out } -#' @title Summarize the rho distributions -#' -#' @description \code{summarize_rho} calculates summary statistics for each -#' of the change point locations. -#' \cr \cr -#' \code{measure_rho_vcov} generates the variance-covariance matrix for the -#' change point locations. -#' -#' @param rhos Matrix of change point locations (columns) across iterations of -#' the sampler (rows) or \code{NULL} if no change points are in the model, -#' as returned from \code{\link{est_change points}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{sequential_TS_control}}. + + +#' @rdname summarize_sequential_TS #' -#' @return \code{summarize_rhos}: table of summary statistics for change point -#' locations including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each change point location. \cr \cr -#' \code{measure_rho_vcov}: variance-covariance matrix for change -#' point locations. -#' #' @export #' -summarize_rhos <- function(rhos, control = list()){ - control <- do.call("sequential_TS_control", control) +summarize_rhos <- function(rhos, TS){ if (is.null(rhos)) { return() } - prob <- control$summary_prob + prob <- TS$control$summary_prob Mean <- round(apply(rhos, 2, mean), 2) Median <- apply(rhos, 2, median) Mode <- apply(rhos, 2, modalvalue) @@ -420,7 +419,7 @@ summarize_rhos <- function(rhos, control = list()){ out } -#' @rdname summarize_rhos +#' @rdname summarize_sequential_TS #' #' @export #' diff --git a/R/utilities.R b/R/utilities.R index 5ff7c8bd..b88171e0 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -29,12 +29,12 @@ time_order_data <- function(x, timename = "time"){ #' @param control A \code{list} of parameters to control the fitting of the #' iterative model. #' -#' @param bar_type \code{character} value of possible types of progress bars. +#' @param type \code{character} value of possible types of progress bars. #' Currently available options are "rho" (for change point locations) and #' "eta" (for time series regressors). #' #' @param nr \code{integer} number of unique realizations, needed when -#' \code{bar_type} = "eta". +#' \code{type} = "eta". #' #' @param pbar The progress bar object returned from \code{prep_pbar}. #' @@ -44,9 +44,9 @@ time_order_data <- function(x, timename = "time"){ #' #' @export #' -prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ - if (!(bar_type %in% c("eta", "rho"))){ - stop("bar_type must be eta or rho") +prep_pbar <- function(control = list(), type = "rho", nr = NULL){ + if (!(type %in% c("eta", "rho"))){ + stop("type must be eta or rho") } if (!is.null(nr)){ if (!is.numeric(nr) || any(nr %% 1 != 0)){ @@ -54,11 +54,11 @@ prep_pbar <- function(control = list(), bar_type = "rho", nr = NULL){ } } form <- " [:bar] :percent eta: :eta" - if (bar_type == "rho"){ + if (type == "rho"){ msg <- " - estimating change point distribution" out <- progress_bar$new(form, control$nit, width = 60) } - if (bar_type == "eta"){ + if (type == "eta"){ msg <- " - estimating regressor distribution" out <- progress_bar$new(form, nr, width = 60) } diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index a797697d..ca6284a8 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -80,10 +80,9 @@ LDATS model. Values not input assume defaults set by } } \description{ -The main interface function for analyzing compositional - time series using the LDATS application of Linguistic Decomposition - Analysis and Time Series modeling generally following Christensen - \emph{et al.} (2018). +Analyze compositional time series using the Linguistic + Decomposition Analysis coupled to Bayesian Time Series models + generally following Christensen \emph{et al.} (2018). } \details{ For a (potentially subset) dataset consisting of counts of words diff --git a/man/TS.Rd b/man/TS.Rd index c4d69e4f..45670e9a 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -76,7 +76,8 @@ most appropriate, and this is accomplished using \code{document_weights}.} Time Series model. Values not input assume defaults set by \code{\link{TS_control}}.} -\item{TSs}{\code{list} of time series model \code{list}s.} +\item{TS, TSs}{time series model \code{list} (\code{TS}) or a \code{list} +of many time series model \code{list}s (\code{TSs}).} \item{selected_TSs}{\code{list} of selected time series model \code{list}s.} } @@ -134,3 +135,36 @@ For a (potentially subset) dataset consisting of proportions of \item Package the results. } } +\references{ +Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. + Springer, New York, NY, USA. + + Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. + Long-term community change through multiple rapid transitions in a + desert rodent community. \emph{Ecology} \strong{99}:1523-1529. + \href{https://doi.org/10.1002/ecy.2373}{link}. + + Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, + applications, and new perspectives. \emph{Physical Chemistry Chemical + Physics} \strong{7}: 3910-3916. + \href{https://doi.org/10.1039/B509983H}{link}. + + McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. + 2nd Edition. Chapman and Hall, New York, NY, USA. + + Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. + Cambridge University Press, Cambridge, UK. + + Ruggieri, E. 2013. A Bayesian approach to detecting change points in + climactic records. \emph{International Journal of Climatology} + \strong{33}:520-528. + \href{https://doi.org/10.1002/joc.3447}{link}. + + Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied + Statistics with S}. Fourth Edition. Springer, New York, NY, USA. + + Western, B. and M. Kleykamp. 2004. A Bayesian change point model for + historical time series analysis. \emph{Political Analysis} + \strong{12}:354-374. + \href{https://doi.org/10.1093/pan/mph023}{link}. +} diff --git a/man/TS_control.Rd b/man/TS_control.Rd index 30cb5001..e686fdaf 100644 --- a/man/TS_control.Rd +++ b/man/TS_control.Rd @@ -63,9 +63,8 @@ automated removal of unneeded controls.} \code{list}, with named elements corresponding to the arguments. } \description{ -This function provides a simple creation and definition of a - list used to control the time series model fit occurring within - \code{\link{TS}}. +Creation and definition of a \code{list} to control the + time series model fit occurring within \code{\link{TS}}. } \examples{ TS_control() diff --git a/man/count_trips.Rd b/man/count_trips.Rd index d9220f66..217fc98b 100644 --- a/man/count_trips.Rd +++ b/man/count_trips.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{count_trips} \alias{count_trips} \title{Count trips of the ptMCMC particles in a classic_ldats estimation} diff --git a/man/identity_LDA.Rd b/man/identity_LDA.Rd index f92776c4..e7aa9aa6 100644 --- a/man/identity_LDA.Rd +++ b/man/identity_LDA.Rd @@ -11,7 +11,22 @@ identity_LDA(LDA) \code{list}.} } \value{ -\code{LDA} \code{list} with most components as placeholders. +\code{LDA} \code{list} with components (many of which are + placeholders): + \describe{ + \item{alpha}{parameter estimate.} + \item{beta}{parameter estimate.} + \item{document_topic_matrix}{estimated latent topic compositions.} + \item{test_document_topic_matrox}{estimated latent topic compositions + of the test data (not presently available for usage).} + \item{log_likelihood}{model log likelihood.} + \item{data}{data object used to fit the LDA model.} + \item{data_subset}{number of the data subset from the whole data set.} + \item{topics}{\code{integer} number of topics in the model.} + \item{replicat}{\code{integer} replicate number.} + \item{control}{\code{list} of controls used to fit the model. See + \code{\link{LDA_control}}.} + } } \description{ This function acts as an "identity" model, wherein the diff --git a/man/ldats_classic.Rd b/man/ldats_classic.Rd index 8b9e286c..9c79a8d5 100644 --- a/man/ldats_classic.Rd +++ b/man/ldats_classic.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{ldats_classic} \alias{ldats_classic} \title{Estimate changepoints using the LDATS classic ptMCMC method} @@ -18,6 +18,18 @@ assume defaults set by \code{\link{ldats_classic_control}}.} diagnostics. } \description{ -Uses the LDATS classic ptMCMC method to fit a changepoint - model. +Uses the LDATS classic parallel tempering Markov Chain Monte + Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint + model, following Christensen \emph{et al.} (2018). +} +\references{ +Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. + Long-term community change through multiple rapid transitions in a + desert rodent community. \emph{Ecology} \strong{99}:1523-1529. + \href{https://doi.org/10.1002/ecy.2373}{link}. + + Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, + applications, and new perspectives. \emph{Physical Chemistry Chemical + Physics} \strong{7}: 3910-3916. + \href{https://doi.org/10.1039/B509983H}{link}. } diff --git a/man/ldats_classic_control.Rd b/man/ldats_classic_control.Rd index e5320c9b..e255d7e7 100644 --- a/man/ldats_classic_control.Rd +++ b/man/ldats_classic_control.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{ldats_classic_control} \alias{ldats_classic_control} \title{Create the controls list for the classic LDATS ptMCMC sampler} diff --git a/man/prep_chunks.Rd b/man/prep_chunks.Rd index f93ca358..4772d133 100644 --- a/man/prep_chunks.Rd +++ b/man/prep_chunks.Rd @@ -11,14 +11,14 @@ prep_chunks(data, changepoints = NULL, timename = "time") response variables, but specifically here containing the column indicated by the \code{timename} input.} +\item{changepoints}{Numeric vector indicating locations of the change +points. Must be conformable to \code{integer} values.} + \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be integer-conformable or a \code{Date}. If the variable named is a \code{Date}, the input is converted to an integer, resulting in the timestep being 1 day, which is often not desired behavior.} - -\item{change}{points Numeric vector indicating locations of the change -points. Must be conformable to \code{integer} values.} } \value{ \code{data.frame} of \code{start} and \code{end} times (columns) @@ -27,7 +27,7 @@ points. Must be conformable to \code{integer} values.} \description{ Creates the table containing the start and end times for each chunk within a time series, based on the change points (used to break up - the time series) and the range of the time series. If there are no - change points (i.e. \code{change points} is \code{NULL}, there is still a - single chunk defined by the start and end of the time series. + the time series) and the range of the time series. \cr \cr + If there are no change points (i.e. \code{changepoints = NULL}, there is + still a single chunk defined by the start and end of the time series. } diff --git a/man/prep_cpts.Rd b/man/prep_cpts.Rd index b9d5fbeb..83523862 100644 --- a/man/prep_cpts.Rd +++ b/man/prep_cpts.Rd @@ -1,22 +1,18 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_cpts} \alias{prep_cpts} \alias{update_cpts} \title{Initialize and update the change point matrix used in the LDATS classic ptMCMC algorithm} \usage{ -prep_cpts(TS, control = list()) +prep_cpts(TS) update_cpts(cpts, swaps) } \arguments{ \item{TS}{\code{list} time series model object.} -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} - \item{cpts}{The existing matrix of change points.} \item{swaps}{Chain configuration after among-temperature swaps.} diff --git a/man/prep_ids.Rd b/man/prep_ids.Rd index b53f149b..dbf2c54c 100644 --- a/man/prep_ids.Rd +++ b/man/prep_ids.Rd @@ -1,22 +1,18 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_ids} \alias{prep_ids} \alias{update_ids} \title{Initialize and update the chain ids throughout the LDATS classic ptMCMC algorithm} \usage{ -prep_ids(TS, control = list()) +prep_ids(TS) update_ids(ids, swaps) } \arguments{ \item{TS}{\code{list} time series model object.} -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} - \item{ids}{The existing vector of chain ids.} \item{swaps}{Chain configuration after among-temperature swaps.} diff --git a/man/prep_pbar.Rd b/man/prep_pbar.Rd index 16b9ecdc..a181da69 100644 --- a/man/prep_pbar.Rd +++ b/man/prep_pbar.Rd @@ -5,7 +5,7 @@ \alias{update_pbar} \title{Initialize and tick through the progress bar} \usage{ -prep_pbar(control = list(), bar_type = "rho", nr = NULL) +prep_pbar(control = list(), type = "rho", nr = NULL) update_pbar(pbar, control = list()) } @@ -13,12 +13,12 @@ update_pbar(pbar, control = list()) \item{control}{A \code{list} of parameters to control the fitting of the iterative model.} -\item{bar_type}{\code{character} value of possible types of progress bars. +\item{type}{\code{character} value of possible types of progress bars. Currently available options are "rho" (for change point locations) and "eta" (for time series regressors).} \item{nr}{\code{integer} number of unique realizations, needed when -\code{bar_type} = "eta".} +\code{type} = "eta".} \item{pbar}{The progress bar object returned from \code{prep_pbar}.} } diff --git a/man/prep_proposal_dist.Rd b/man/prep_proposal_dist.Rd index 1355fbe1..864aeed4 100644 --- a/man/prep_proposal_dist.Rd +++ b/man/prep_proposal_dist.Rd @@ -1,18 +1,14 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_proposal_dist} \alias{prep_proposal_dist} \title{Pre-calculate the change point proposal distribution for the ptMCMC algorithm} \usage{ -prep_proposal_dist(TS, control = list()) +prep_proposal_dist(TS) } \arguments{ \item{TS}{\code{list} time series model object.} - -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{list} of two \code{matrix} elements: [1] the size of the diff --git a/man/prep_ptMCMC_inputs.Rd b/man/prep_ptMCMC_inputs.Rd index b4599334..01d2e99e 100644 --- a/man/prep_ptMCMC_inputs.Rd +++ b/man/prep_ptMCMC_inputs.Rd @@ -1,18 +1,14 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_ptMCMC_inputs} \alias{prep_ptMCMC_inputs} \title{Prepare the inputs for the ptMCMC algorithm estimation of change points} \usage{ -prep_ptMCMC_inputs(TS, control = list()) +prep_ptMCMC_inputs(TS) } \arguments{ \item{TS}{\code{list} time series model object.} - -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{list} containing the static diff --git a/man/prep_saves.Rd b/man/prep_saves.Rd index 2cf35c32..59354a3b 100644 --- a/man/prep_saves.Rd +++ b/man/prep_saves.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_saves} \alias{prep_saves} \alias{update_saves} @@ -7,19 +7,15 @@ \title{Prepare and update the data structures to save the LDATS classic ptMCMC output} \usage{ -prep_saves(TS, control = list()) +prep_saves(TS) update_saves(i, saves, steps, swaps) -process_saves(saves, control = list()) +process_saves(saves, TS) } \arguments{ \item{TS}{\code{list} time series model object.} -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} - \item{i}{\code{integer} iteration index.} \item{saves}{The existing list of saved data objects.} diff --git a/man/prep_temp_sequence.Rd b/man/prep_temp_sequence.Rd index cb1703ff..2799c19e 100644 --- a/man/prep_temp_sequence.Rd +++ b/man/prep_temp_sequence.Rd @@ -1,18 +1,14 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{prep_temp_sequence} \alias{prep_temp_sequence} \title{Prepare the ptMCMC temperature sequence for the LDATS classic method} \usage{ -prep_temp_sequence(TS, control = list()) +prep_temp_sequence(TS) } \arguments{ \item{TS}{\code{list} time series model object.} - -\item{control}{A \code{list} of parameters to control the fitting of the -time series model via the LDATS classic ptMCMC method. Values not input -assume defaults set by \code{\link{ldats_classic_control}}.} } \value{ \code{vector} of temperatures. diff --git a/man/proposed_step_mods.Rd b/man/proposed_step_mods.Rd index 1b8e2125..e73420fa 100644 --- a/man/proposed_step_mods.Rd +++ b/man/proposed_step_mods.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{proposed_step_mods} \alias{proposed_step_mods} \title{Fit the chunk-level models to a time series, given a set of diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index 1f1c882d..44ee1d64 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/sequential_TS.R +% Please edit documentation in R/TS_models.R \name{sequential_TS} \alias{sequential_TS} \alias{package_sequential_TS} @@ -9,13 +9,15 @@ \usage{ sequential_TS(TS, control = list()) -package_sequential_TS(TS, rho_dist, eta_dist, control = list()) +package_sequential_TS(TS, rho_dist, eta_dist) -est_changepoints(TS, control = list()) +est_changepoints(TS) -est_regressors(rho_dist, TS, control = list()) +est_regressors(rho_dist, TS) } \arguments{ +\item{TS}{Time series model \code{list}.} + \item{control}{A \code{list} of parameters to control the fitting of the Time Series model. Values not input assume defaults set by \code{\link{sequential_TS_control}}.} diff --git a/man/sequential_TS_control.Rd b/man/sequential_TS_control.Rd index 798c48e5..c7db986d 100644 --- a/man/sequential_TS_control.Rd +++ b/man/sequential_TS_control.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/sequential_TS.R +% Please edit documentation in R/TS_models.R \name{sequential_TS_control} \alias{sequential_TS_control} \title{Create the controls list for a sequential Time Series model} diff --git a/man/step_chains.Rd b/man/step_chains.Rd index 4f69614a..b9b5b88b 100644 --- a/man/step_chains.Rd +++ b/man/step_chains.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{step_chains} \alias{step_chains} \alias{propose_step} diff --git a/man/summarize_etas.Rd b/man/summarize_etas.Rd deleted file mode 100644 index 8be302d3..00000000 --- a/man/summarize_etas.Rd +++ /dev/null @@ -1,34 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/sequential_TS.R -\name{summarize_etas} -\alias{summarize_etas} -\alias{measure_eta_vcov} -\title{Summarize the regressor (eta) distributions of a time series model} -\usage{ -summarize_etas(etas, control = list()) - -measure_eta_vcov(etas) -} -\arguments{ -\item{etas}{Matrix of regressors (columns) across iterations of the -sampler (rows), as returned from \code{\link{est_regressors}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{sequential_TS_control}}.} -} -\value{ -\code{summarize_etas}: table of summary statistics for chunk-level - regressors including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each regressor. \cr \cr - \code{measure_eta_vcov}: variance-covariance matrix for chunk-level - regressors. -} -\description{ -\code{summarize_etas} calculates summary statistics for each - of the chunk-level regressors. - \cr \cr - \code{measure_ets_vcov} generates the variance-covariance matrix for - the regressors. -} diff --git a/man/summarize_rhos.Rd b/man/summarize_rhos.Rd deleted file mode 100644 index 111bbea5..00000000 --- a/man/summarize_rhos.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/sequential_TS.R -\name{summarize_rhos} -\alias{summarize_rhos} -\alias{measure_rho_vcov} -\title{Summarize the rho distributions} -\usage{ -summarize_rhos(rhos, control = list()) - -measure_rho_vcov(rhos) -} -\arguments{ -\item{rhos}{Matrix of change point locations (columns) across iterations of -the sampler (rows) or \code{NULL} if no change points are in the model, -as returned from \code{\link{est_change points}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -Time Series model. Values not input assume defaults set by -\code{\link{sequential_TS_control}}.} -} -\value{ -\code{summarize_rhos}: table of summary statistics for change point - locations including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each change point location. \cr \cr - \code{measure_rho_vcov}: variance-covariance matrix for change - point locations. -} -\description{ -\code{summarize_rho} calculates summary statistics for each - of the change point locations. - \cr \cr - \code{measure_rho_vcov} generates the variance-covariance matrix for the - change point locations. -} diff --git a/man/summarize_sequential_TS.Rd b/man/summarize_sequential_TS.Rd new file mode 100644 index 00000000..a9419a1e --- /dev/null +++ b/man/summarize_sequential_TS.Rd @@ -0,0 +1,53 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS_models.R +\name{summarize_sequential_TS} +\alias{summarize_sequential_TS} +\alias{summarize_etas} +\alias{measure_eta_vcov} +\alias{summarize_rhos} +\alias{measure_rho_vcov} +\title{Summarize the change point (rho) and regressor (eta) distributions + of a sequential time series model} +\usage{ +summarize_etas(etas, TS) + +measure_eta_vcov(etas) + +summarize_rhos(rhos, TS) + +measure_rho_vcov(rhos) +} +\arguments{ +\item{etas}{\code{matrix} of regressors (columns) across iterations of the +sampler (rows), as returned from \code{\link{est_regressors}}.} + +\item{TS}{Time series model \code{list}.} + +\item{rhos}{\code{matrix} of change point locations (columns) across +iterations of the sampler (rows) or \code{NULL} if no change points are +in the model, as returned from \code{\link{est_change points}}.} +} +\value{ +\code{summarize_etas}: table of summary statistics for chunk-level + regressors including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each regressor. \cr \cr + \code{measure_eta_vcov}: variance-covariance matrix for chunk-level + regressors. \cr \cr + \code{summarize_rhos}: table of summary statistics for change point + locations including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each change point location. \cr \cr + \code{measure_rho_vcov}: variance-covariance matrix for change + point locations. +} +\description{ +\code{summarize_etas} calculates summary statistics for each + of the chunk-level regressors. \cr \cr + \code{measure_ets_vcov} generates the variance-covariance matrix for + the regressors. \cr \cr + \code{summarize_rho} calculates summary statistics for each + of the change point locations. \cr \cr + \code{measure_rho_vcov} generates the variance-covariance matrix for the + change point locations. +} diff --git a/man/swap_chains.Rd b/man/swap_chains.Rd index 8bd8fa13..1f9959e6 100644 --- a/man/swap_chains.Rd +++ b/man/swap_chains.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ldats_classic_method.R +% Please edit documentation in R/TS_methods.R \name{swap_chains} \alias{swap_chains} \title{Conduct a set of among-chain swaps for the ptMCMC algorithm} diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd index a4e2da7b..3475f5d9 100644 --- a/man/topicmodels_LDA.Rd +++ b/man/topicmodels_LDA.Rd @@ -22,7 +22,21 @@ replicate.} \code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input.} } \value{ -\code{LDA} \code{list}. +\code{LDA} \code{list} with components + \describe{ + \item{alpha}{parameter estimate.} + \item{beta}{parameter estimate.} + \item{document_topic_matrix}{estimated latent topic compositions.} + \item{test_document_topic_matrox}{estimated latent topic compositions + of the test data (not presently available for usage).} + \item{log_likelihood}{model log likelihood.} + \item{data}{data object used to fit the LDA model.} + \item{data_subset}{number of the data subset from the whole data set.} + \item{topics}{\code{integer} number of topics in the model.} + \item{replicat}{\code{integer} replicate number.} + \item{control}{\code{list} of controls used to fit the model. See + \code{\link{LDA_control}}.} + } } \description{ Fit the standard LDATS LDA model (a true Latent Dirichlet diff --git a/man/verify_changepoint_locations.Rd b/man/verify_changepoint_locations.Rd index cbce5050..a1fa6042 100644 --- a/man/verify_changepoint_locations.Rd +++ b/man/verify_changepoint_locations.Rd @@ -11,14 +11,14 @@ verify_changepoint_locations(data, changepoints = NULL, \item{data}{Class \code{data.frame} object including the predictor and response variables.} +\item{changepoints}{Numeric vector indicating locations of the change +points. Must be conformable to \code{integer} values.} + \item{timename}{\code{character} element indicating the time variable used in the time series. Defaults to \code{"time"}. The variable must be integer-conformable or a \code{Date}. If the variable named is a \code{Date}, the input is converted to an integer, resulting in the timestep being 1 day, which is often not desired behavior.} - -\item{change}{points Numeric vector indicating locations of the change -points. Must be conformable to \code{integer} values.} } \value{ Logical indicator of the check passing \code{TRUE} or failing diff --git a/notes.R b/notes.R index 2ce351ca..f28ff3e2 100644 --- a/notes.R +++ b/notes.R @@ -81,3 +81,45 @@ currently its not saving the test/train split explicitly, # get chunked into subfunctions # there are functions for basic leave p out cross validation, including # both systematic and random approaches + + +LDA_TS + + LDA_TS_control + LDA_control + TS_control + + LDA + prepare_LDA + LDA_control + conform_data + run_LDA + LDA_call (replicated for each model) + LDA_msg + LDA$control$model with LDA$control$model_args + topicmodels::LDA + package_LDA + select_LDA + LDA$control$selector with LDA$control$selector_args + measure_LDA (replicated for each model) + LDA$control$measurer with LDA$control$measurer_args + + TS + prepare_TS + TS_control + run_TS + TS_call (replicated for each model) + TS_msg + TS$control$model with TS$control$model_args + sequential_TS_control + est_changepoints + est_regressors + package_sequential_TS + package_TS + select_TS + TS$control$selector with TS$control$selector_args + measure_TS (replicated for each model) + TS$control$measurer with TS$control$measurer_args + + + diff --git a/pipeline.R b/pipeline.R deleted file mode 100644 index 50dcaad2..00000000 --- a/pipeline.R +++ /dev/null @@ -1,39 +0,0 @@ -LDA_TS - - LDA_TS_control - LDA_control - TS_control - - LDA - prepare_LDA - LDA_control - conform_data - run_LDA - LDA_call (replicated for each model) - LDA_msg - LDA$control$model with LDA$control$model_args - package_LDA - measure_LDA (replicated for each model) - LDA$control$measurer with LDA$control$measurer_args - select_LDA - LDA$control$selector with LDA$control$selector_args - - TS - prepare_TS - TS_control - run_TS - TS_call (replicated for each model) - TS_msg - TS$control$model with TS$control$model_args - -[one more level deeper here!] - - package_TS - measure_TS (replicated for each model) - TS$control$measurer with TS$control$measurer_args - select_TS - TS$control$selector with TS$control$selector_args - - - - From a993a0d5561bf9d548b0941537f9f7040a13ac63 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sun, 22 Mar 2020 01:04:20 -0700 Subject: [PATCH 25/43] documentation trimming --- NAMESPACE | 1 - R/LDA.R | 82 +++-- R/LDA_TS.R | 197 ++++++------ R/TS.R | 110 ++++--- R/TS_methods.R | 543 +++++++++++++-------------------- R/TS_models.R | 158 +++++----- man/LDA.Rd | 45 ++- man/LDA_TS.Rd | 128 +++++++- man/LDA_TS_control.Rd | 105 ------- man/LDA_control.Rd | 54 ---- man/TS.Rd | 61 +++- man/TS_control.Rd | 72 ----- man/count_trips.Rd | 35 --- man/ldats_classic.Rd | 245 ++++++++++++++- man/ldats_classic_control.Rd | 49 --- man/package_LDA_TS.Rd | 30 -- man/prep_cpts.Rd | 31 -- man/prep_ids.Rd | 33 -- man/prep_proposal_dist.Rd | 27 -- man/prep_ptMCMC_inputs.Rd | 25 -- man/prep_saves.Rd | 43 --- man/prep_temp_sequence.Rd | 28 -- man/proposed_step_mods.Rd | 26 -- man/sequential_TS.Rd | 90 +++++- man/sequential_TS_control.Rd | 47 --- man/step_chains.Rd | 76 ----- man/summarize_sequential_TS.Rd | 53 ---- man/swap_chains.Rd | 58 ---- 28 files changed, 1010 insertions(+), 1442 deletions(-) delete mode 100644 man/LDA_TS_control.Rd delete mode 100644 man/LDA_control.Rd delete mode 100644 man/TS_control.Rd delete mode 100644 man/count_trips.Rd delete mode 100644 man/ldats_classic_control.Rd delete mode 100644 man/package_LDA_TS.Rd delete mode 100644 man/prep_cpts.Rd delete mode 100644 man/prep_ids.Rd delete mode 100644 man/prep_proposal_dist.Rd delete mode 100644 man/prep_ptMCMC_inputs.Rd delete mode 100644 man/prep_saves.Rd delete mode 100644 man/prep_temp_sequence.Rd delete mode 100644 man/proposed_step_mods.Rd delete mode 100644 man/sequential_TS_control.Rd delete mode 100644 man/step_chains.Rd delete mode 100644 man/summarize_sequential_TS.Rd delete mode 100644 man/swap_chains.Rd diff --git a/NAMESPACE b/NAMESPACE index 1fc2c0af..5004993d 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -100,7 +100,6 @@ export(sim_LDA_TS_data) export(sim_LDA_data) export(sim_TS_data) export(softmax) -export(step_chains) export(summarize_etas) export(summarize_rhos) export(swap_chains) diff --git a/R/LDA.R b/R/LDA.R index 6321c4fe..c3e410f0 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -7,6 +7,8 @@ #' \emph{et al.} 2018). \cr \cr #' \code{prepare_LDA} pre-prepares the LDA model objects for simpler #' use within the subfunctions. \cr \cr +#' \code{LDA_control} defines and creates the control list used to fit +#' the LDA model. \cr \cr #' \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models #' as set up by \code{prep_LDA_models}. \cr \cr #' \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model @@ -50,17 +52,50 @@ #' LDA model. Values not input assume defaults set by #' \code{\link{LDA_control}}. #' -#' @param LDAs \code{list} of LDA model \code{list}s. +#' @param LDA,LDAs model \code{list} (\code{LDA}) or a \code{list} of LDA +#' model \code{list}s (\code{LDAs}). #' #' @param selected_LDAs \code{list} of selected LDA model \code{list}s. #' +#' @param model Main LDA \code{function}. +#' +#' @param model_args \code{list} of (named) arguments to be used in +#' \code{model} via \code{\link{LDA_call}}. +#' +#' @param nsubsets Number of data subsets. +#' +#' @param subset_rule \code{function} used to subset the data. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param measurer \code{function} used in evaluation of the LDA +#' models; \code{measurer} creates a value for each model. +#' +#' @param measurer_args \code{list} of (named) arguments to be used in +#' \code{measurer} via \code{\link{do.call}}. +#' +#' @param selector \code{function} usde in evaluation of the LDA +#' models; \code{selector} operates on the values to choose the models. +#' +#' @param selector_args \code{list} of (named) arguments to be used in +#' \code{selector} via \code{\link{do.call}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' #' @return #' \code{LDA},\code{pacakage_LDA}: class \code{LDA_set} \code{list} of #' both selected and all results from \code{\link{LDA_call}} applied for #' each model on each data input(s) as well as the control \code{list} #' used to fit the model. \cr \cr -#' \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a +#' \code{prepare_LDA}: \code{list} of \code{list}s, each of which is a #' preliminary model object for an LDA model fit. \cr \cr +#' \code{LDA_control}: \code{list} of controls for the LDA model, with +#' named elements corresponding to the arguments. #' \code{run_LDA}: \code{LDA_set} \code{list} of model results from all #' runs of a \code{} function, such as #' \code{\link{topicmodels_LDA}}. \cr \cr @@ -227,48 +262,7 @@ measure_LDA <- function(LDAs){ } - - -#' @title Create the controls list for the Time Series model -#' -#' @description This function provides a simple creation and definition of a -#' list used to control the LDA model fit occurring within -#' \code{\link{LDA}}. -#' -#' @param model Main LDA \code{function}. -#' -#' @param model_args \code{list} of (named) arguments to be used in -#' \code{model} via \code{\link{LDA_call}}. -#' -#' @param nsubsets Number of data subsets. -#' -#' @param subset_rule \code{function} used to subset the data. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param soften \code{logical} indicator of whether the model should error -#' softly or if errors should trigger a full-stop to the pipeline. -#' -#' @param measurer \code{function} used in evaluation of the LDA -#' models; \code{measurer} creates a value for each model. -#' -#' @param measurer_args \code{list} of (named) arguments to be used in -#' \code{measurer} via \code{\link{do.call}}. -#' -#' @param selector \code{function} usde in evaluation of the LDA -#' models; \code{selector} operates on the values to choose the models. -#' -#' @param selector_args \code{list} of (named) arguments to be used in -#' \code{selector} via \code{\link{do.call}}. -#' -#' @param ... Not passed along to the output, rather included to allow for -#' automated removal of unneeded controls. -#' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @examples -#' LDA_control() +#' @rdname LDA #' #' @export #' diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 95496866..6e892b19 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -3,7 +3,11 @@ #' #' @description Analyze compositional time series using the Linguistic #' Decomposition Analysis coupled to Bayesian Time Series models -#' generally following Christensen \emph{et al.} (2018). +#' generally following Christensen \emph{et al.} (2018). +#' \code{LDA_TS} is the primary model function. \cr \cr +#' \code{LDA_TS_control} defines the control \code{list} arguments for +#' \code{\link{LDA_TS}}. \cr \cr +#' \code{package_LDA_TS} combines the results from each model component. #' #' @details For a (potentially subset) dataset consisting of counts of words #' across multiple documents in a corpus, @@ -78,114 +82,16 @@ #' topics to evaluate for each model. \cr #' (See \code{\link{LDA}}.) #' -#' @param reps \code{integer}-conformable number of replicate starts to use -#' for each value of \code{topics}. \cr +#' @param replicates \code{integer}-conformable number of replicate starts to +#' use for each value of \code{topics}. \cr #' (See \code{\link{LDA}}.) #' -#' @return \code{LDA_TS} \code{list} with all fitted LDA and TS models and -#' selected models specifically as elements named -#' \describe{ -#' \item{\code{LDA models}}{\code{list} of all and selected models as well -#' as controls from \code{\link{LDA}}} -#' \item{\code{TS models}}{\code{list} of all and selected models as well -#' as controls from \code{\link{TS}}} -#' \item{\code{control}}{\code{list} of overall model controls} -#' } -#' -#' @references -#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet -#' Allocation. \emph{Journal of Machine Learning Research} -#' \strong{3}:993-1022. -#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. -#' -#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. -#' Springer, New York, NY, USA. -#' -#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. -#' Long-term community change through multiple rapid transitions in a -#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. -#' \href{https://doi.org/10.1002/ecy.2373}{link}. -#' -#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, -#' applications, and new perspectives. \emph{Physical Chemistry Chemical -#' Physics} \strong{7}: 3910-3916. -#' \href{https://doi.org/10.1039/B509983H}{link}. -#' -#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic -#' Models. \emph{Journal of Statistical Software} \strong{40}:13. -#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. -#' -#' McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. -#' 2nd Edition. Chapman and Hall, New York, NY, USA. -#' -#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. -#' Cambridge University Press, Cambridge, UK. -#' -#' Ruggieri, E. 2013. A Bayesian approach to detecting change points in -#' climactic records. \emph{International Journal of Climatology} -#' \strong{33}:520-528. -#' \href{https://doi.org/10.1002/joc.3447}{link}. -#' -#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied -#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. -#' -#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for -#' historical time series analysis. \emph{Political Analysis} -#' \strong{12}:354-374. -#' \href{https://doi.org/10.1093/pan/mph023}{link}. -#' -#' @export -#' -LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, - nchangepoints = 0, timename = "time", weights = TRUE, - control = list()){ - control <- do.call("LDA_TS_control", control) - LDAs <- LDA(data = data, topics = topics, reps = reps, - control = control$LDA_control) - TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control$TS_control) - package_LDA_TS(LDAs = LDAs, TSs = TSs, control = control) -} - - -#' @title Package LDA and TS model outputs -#' -#' @description Combine the results from each model component. -#' #' @param LDAs \code{LDA_set} \code{list} of selected and all LDAs from #' \code{\link{LDA}}. #' #' @param TSs \code{TS_set} \code{list} of selected and all TSs from #' \code{\link{TS}}. #' -#' @param control A \code{list} of parameters to control the fitting of the -#' LDATS model. Values not input assume defaults set by -#' \code{\link{LDA_TS_control}}. -#' -#' @return \code{LDA_TS} \code{list} with all fitted LDA and TS models and -#' selected models specifically as elements named -#' \code{"LDA models"} (from \code{\link{LDA_set}}), -#' \code{"Selected LDA models"} (from \code{\link{select_LDA}}), -#' \code{"TS models"} (from \code{\link{TS_on_LDA}}), and -#' \code{"Selected TS models"} (from \code{\link{select_TS}}) elements. -#' -#' @export -#' -package_LDA_TS <- function(LDAs, TSs, control){ - out <- list("LDA models" = LDAs, "TS models" = TSs, control = control) - class(out) <- c("LDA_TS", "list") -} - - - -#' @title Create the controls list for the complete Linguistic Decomposition -#' Analysis and Time Series model -#' -#' @description Defines and creates a \code{list} used to control the -#' decomposition and time series model fitting occurring within -#' \code{\link{LDA_TS}}. -#' #' @param LDA_model Main LDA \code{function}. #' #' @param LDA_model_args \code{list} of (named) arguments to be used in @@ -257,11 +163,92 @@ package_LDA_TS <- function(LDAs, TSs, control){ #' #' @param subset_rule \code{function} used to subset the data. #' -#' @return \code{list} of \code{list}s and single elements, with named -#' elements corresponding to the arguments. +#' @return +#' \code{LDA_TS},\code{package_LDA_TS}: class-\code{LDA_TS} \code{list} +#' with all fitted LDA and TS models and selected models specifically +#' as elements named +#' \describe{ +#' \item{\code{LDA models}}{\code{list} of all and selected models as +#' well as controls from \code{\link{LDA}}} +#' \item{\code{TS models}}{\code{list} of all and selected models as +#' well as controls from \code{\link{TS}}} +#' \item{\code{control}}{\code{list} of overall model controls} +#' } \cr \cr +#' \code{LDA_TS_control}: \code{list} of \code{list}s and single elements +#' that control fitting of the LDATS model, with named elements +#' corresponding to the arguments. +#' +#' @references +#' Blei, D. M., A. Y. Ng, and M. I. Jordan. 2003. Latent Dirichlet +#' Allocation. \emph{Journal of Machine Learning Research} +#' \strong{3}:993-1022. +#' \href{http://jmlr.csail.mit.edu/papers/v3/blei03a.html}{link}. +#' +#' Bishop, C. M. 2006. \emph{Pattern Recognition and Machine Learning}. +#' Springer, New York, NY, USA. +#' +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://doi.org/10.1039/B509983H}{link}. +#' +#' Grun B. and K. Hornik. 2011. topicmodels: An R Package for Fitting Topic +#' Models. \emph{Journal of Statistical Software} \strong{40}:13. +#' \href{https://www.jstatsoft.org/article/view/v040i13}{link}. +#' +#' McCullagh, P. and J. A. Nelder. 1989. \emph{Generalized Linear Models}. +#' 2nd Edition. Chapman and Hall, New York, NY, USA. #' -#' @examples -#' LDA_TS_control() +#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. +#' Cambridge University Press, Cambridge, UK. +#' +#' Ruggieri, E. 2013. A Bayesian approach to detecting change points in +#' climactic records. \emph{International Journal of Climatology} +#' \strong{33}:520-528. +#' \href{https://doi.org/10.1002/joc.3447}{link}. +#' +#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. +#' +#' Western, B. and M. Kleykamp. 2004. A Bayesian change point model for +#' historical time series analysis. \emph{Political Analysis} +#' \strong{12}:354-374. +#' \href{https://doi.org/10.1093/pan/mph023}{link}. +#' +#' @name LDA_TS +#' + +#' @rdname LDA_TS +#' +#' @export +#' +LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, + nchangepoints = 0, timename = "time", weights = TRUE, + control = list()){ + control <- do.call("LDA_TS_control", control) + LDAs <- LDA(data = data, topics = topics, reps = reps, + control = control$LDA_control) + TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = control$TS_control) + package_LDA_TS(LDAs = LDAs, TSs = TSs, control = control) +} + +#' @rdname LDA_TS +#' +#' @export +#' +package_LDA_TS <- function(LDAs, TSs, control){ + out <- list("LDA models" = LDAs, "TS models" = TSs, control = control) + class(out) <- c("LDA_TS", "list") +} + +#' @rdname LDA_TS #' #' @export #' diff --git a/R/TS.R b/R/TS.R index 02080c59..e8732567 100644 --- a/R/TS.R +++ b/R/TS.R @@ -8,6 +8,8 @@ #' \emph{et al.} 2018). \cr \cr #' \code{prepare_TS} pre-prepares the TS model objects for simpler #' use within the subfunctions. \cr \cr +#' \code{TS_control} defines and creates the control \code{list} for the TS +#' model running. \cr \cr #' \code{run_TS} runs (via \code{\link{TS_call}}) all TS models #' as set up by \code{prep_TS_models}. \cr \cr #' \code{TS_call} runs (via \code{\link{do.call}}) a single TS model @@ -86,13 +88,61 @@ #' #' @param selected_TSs \code{list} of selected time series model \code{list}s. #' +#' @param response \code{character} element indicating the response variable +#' used in the time series. \cr \cr +#' Must have a corresponding \code{_TS} function. +#' +#' @param response_args \code{list} of (named) arguments to be used in +#' \code{response} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_TS_control} function like +#' \code{\link{multinom_TS_control}}. +#' +#' @param summary_prob Probability used for summarizing the posterior +#' distributions (via the highest posterior density interval, see +#' \code{\link[coda]{HPDinterval}}). +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param method \code{function} used to drive the sampler of the TS +#' models; \code{method} defines and operates the computational procedure. +#' \cr \cr +#' Current pre-built options include \code{\link{ldats_classic}}. +#' +#' @param method_args \code{list} of (named) arguments to be used in +#' \code{method} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_control} function like +#' \code{\link{ldats_classic_control}}. +#' +#' @param measurer \code{function} used in evaluation of the TS +#' models; \code{measurer} creates a value for each model. +#' +#' @param measurer_args \code{list} of (named) arguments to be used in +#' \code{measurer} via \code{\link{do.call}}. +#' +#' @param selector \code{function} usde in evaluation of the TS +#' models; \code{selector} operates on the values to choose the models. +#' +#' @param selector_args \code{list} of (named) arguments to be used in +#' \code{selector} via \code{\link{do.call}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' #' @return #' \code{TS},\code{pacakage_TS}: class \code{TS_set} \code{list} of both #' selected and all results from \code{\link{TS_call}} applied for #' each model on each LDA model input as well as the control \code{list} #' used to fit the model. \cr \cr -#' \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a +#' \code{prepare_TS}: \code{list} of \code{list}s, each of which is a #' preliminary model object for a Time Series model fit. \cr \cr +#' \code{TS_control}: \code{list} of named control elements for +#' model fitting. #' \code{measure_TS}: \code{vector} of values corresponding to the model #' evaluations. \cr \cr #' \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr @@ -311,63 +361,7 @@ measure_TS <- function(TSs){ } - - -#' @title Create the controls list for the Time Series model -#' -#' @description Creation and definition of a \code{list} to control the -#' time series model fit occurring within \code{\link{TS}}. -#' -#' @param response \code{character} element indicating the response variable -#' used in the time series. \cr \cr -#' Must have a corresponding \code{_TS} function. -#' -#' @param response_args \code{list} of (named) arguments to be used in -#' \code{response} via \code{\link{do.call}}. -#' \cr \cr -#' Could be managed via a \code{_TS_control} function like -#' \code{\link{multinom_TS_control}}. -#' -#' @param summary_prob Probability used for summarizing the posterior -#' distributions (via the highest posterior density interval, see -#' \code{\link[coda]{HPDinterval}}). -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param soften \code{logical} indicator of whether the model should error -#' softly or if errors should trigger a full-stop to the pipeline. -#' -#' @param method \code{function} used to drive the sampler of the TS -#' models; \code{method} defines and operates the computational procedure. -#' \cr \cr -#' Current pre-built options include \code{\link{ldats_classic}}. -#' -#' @param method_args \code{list} of (named) arguments to be used in -#' \code{method} via \code{\link{do.call}}. -#' \cr \cr -#' Could be managed via a \code{_control} function like -#' \code{\link{ldats_classic_control}}. -#' -#' @param measurer \code{function} used in evaluation of the TS -#' models; \code{measurer} creates a value for each model. -#' -#' @param measurer_args \code{list} of (named) arguments to be used in -#' \code{measurer} via \code{\link{do.call}}. -#' -#' @param selector \code{function} usde in evaluation of the TS -#' models; \code{selector} operates on the values to choose the models. -#' -#' @param selector_args \code{list} of (named) arguments to be used in -#' \code{selector} via \code{\link{do.call}}. -#' -#' @param ... Not passed along to the output, rather included to allow for -#' automated removal of unneeded controls. -#' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @examples -#' TS_control() +#' @rdname TS #' #' @export #' diff --git a/R/TS_methods.R b/R/TS_methods.R index c1519a02..71c3be3e 100644 --- a/R/TS_methods.R +++ b/R/TS_methods.R @@ -1,8 +1,69 @@ #' @title Estimate changepoints using the LDATS classic ptMCMC method #' #' @description Uses the LDATS classic parallel tempering Markov Chain Monte -#' Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint -#' model, following Christensen \emph{et al.} (2018). +#' Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint +#' model, following Christensen \emph{et al.} (2018). \cr \cr +#' \code{ldats_classic} is the top-level function for the sampler. \cr \cr +#' \code{ldats_classic_control} defines and creates a control \code{list} +#' for use with \code{\link{ldats_classic}}. +#' \code{prep_ptMCMC_inputs} packages the static inputs (controls and +#' data structures) used by the ptMCMC algorithm in the context of +#' estimating change points. +#' \code{prep_proposal_dist} prep-calculates the proposal distribution +#' for the ptMCMC algorithm in order to decrease computation time. +#' The proposal distribution is a joint of three distributions: +#' [1] a multinomial distribution selecting among the change points within +#' the chain, [2] a binomial distribution selecting the direction of the +#' step of the change point (earlier or later in the time series), and +#' [3] a geometric distribution selecting the magnitude of the step. +#' \code{prep_ids} creates the active vector of identities (ids) for each +#' of the chains in the ptMCMC algorithm, which are used to track trips +#' of the particles among chains. \cr \cr +#' \code{update_ids} updates the active vector of identities (ids) for +#' each of the chains in the ptMCMC algorithm after each iteration. +#' \cr \cr +#' \code{prep_cpts} initializes each chain using a draw from the available +#' times (i.e. assuming a uniform prior), the best fit (by likelihood) +#' draw is put in the focal chain with each subsequently worse fit placed +#' into the subsequently hotter chain. \cr \cr +#' \code{update_cpts} updates the change points after every iteration in +#' the ptMCMC algorithm. \cr \cr +#' \code{prep_saves} creates the data structure used to save the +#' output from each iteration of the ptMCMC algorithm. \cr \cr +#' \code{update_saves} adds to the data structure after each iteration. +#' \cr \cr +#' \code{process_saves} processes (burn-in iterations are dropped and the +#' remaining iterations are thinned) the saved data objects after the +#' ptMCMC is complete. \cr \cr +#' \code{prep_temp_sequence} creates the series of temperatures used in the +#' ptMCMC algorithm. \cr \cr +#' \code{step_chains} steps the chains forward one iteration +#' of the within-chain component of the ptMCMC algorithm. \cr \cr +#' \code{prop_step} makes the proposal for the next step. \cr \cr +#' \code{eval_step} evaluates the proposa. \cr \cr +#' \code{take_step} updates the configuration. \cr \cr +#' \code{proposed_step_mods} proposes the models for all chains in a given +#' step of the sampler. \cr \cr +#' \code{swap_chains} handles the among-chain swapping based on +#' temperatures and likelihood differentials. \cr \cr +#' \code{count_trips} counts the full trips (from one extreme temperature +#' chain to the other and back again; Katzgraber \emph{et al.} 2006) for +#' each of the ptMCMC particles, as identified by their id on +#' initialization. +#' +#' @details For each iteration of the ptMCMC algorithm, all of the chains +#' have the potential to take a step. The possible step is proposed under +#' a proposal distribution (here for change points we use a symmetric +#' geometric distribution), the proposed step is then evaluated and either +#' accepted or not (following the Metropolis-Hastings rule; Metropolis, +#' \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then +#' accordingly taken or not (the configurations are updated). \cr \cr +#' The ptMCMC algorithm couples the chains (which are +#' taking their own walks on the distribution surface) through "swaps", +#' where neighboring chains exchange configurations (Geyer 1991, Falcioni +#' and Deem 1999) following the Metropolis criterion (Metropolis +#' \emph{et al.} 1953). This allows them to share information and search the +#' surface in combination (Earl and Deem 2005). #' #' @param TS \code{list} time series model object. #' @@ -10,50 +71,34 @@ #' time series model via the LDATS classic ptMCMC method. Values not input #' assume defaults set by \code{\link{ldats_classic_control}}. #' -#' @return \code{list} of changepoint locations, log likelihoods, and model -#' diagnostics. -#' -#' @references +#' @param ids \code{vector} (for \code{update_ids}, \code{swap_chains}) +#' of the existing chain ids or \code{matrix} (rows: chains, +#' columns: iterations; for \code{count_trips}) +#' of identifiers of the particles in each chain for +#' each iteration of the ptMCMC algorithm. #' -#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. -#' Long-term community change through multiple rapid transitions in a -#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. -#' \href{https://doi.org/10.1002/ecy.2373}{link}. +#' @param prop_changepts \code{matrix} of proposed change points across +#' chains. #' -#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, -#' applications, and new perspectives. \emph{Physical Chemistry Chemical -#' Physics} \strong{7}: 3910-3916. -#' \href{https://doi.org/10.1039/B509983H}{link}. +#' @param inputs \code{list} of static inputs for use within the ptMCMC +#' algorithm. #' -#' @export +#' @param i \code{integer} iteration index. #' -ldats_classic <- function(TS, control = list()){ - TS$control$method_args$control <- do.call("ldats_classic_control", control) - saves <- prep_saves(TS = TS) - inputs <- prep_ptMCMC_inputs(TS = TS) - cpts <- prep_cpts(TS = TS) - ids <- prep_ids(TS = TS) - pbar <- prep_pbar(control = TS$control$method_args$control, type = "rho") - - for(i in 1:control$nit){ - update_pbar(pbar = pbar, control = TS$control$method_args$control) - steps <- step_chains(TS = TS, i = i, cpts = cpts, inputs = inputs) - swaps <- swap_chains(chainsin = steps, inputs = inputs, ids = ids) - saves <- update_saves(i = i, saves = saves, steps = steps, swaps = swaps) - cpts <- update_cpts(cpts = cpts, swaps = swaps) - ids <- update_ids(ids = ids, swaps = swaps) - } - - process_saves(saves = saves, TS = TS) - -} - - -#' @title Create the controls list for the classic LDATS ptMCMC sampler +#' @param cpts \code{matrix} of change point locations across chains. #' -#' @description This function provides a simple creation and definition of a -#' list used to control time series model fitting via the -#' \code{\link{ldats_classic}} sampler. +#' @param saves The existing list of saved data objects. +#' +#' @param steps Chain configuration after within-temperature steps. +#' +#' @param swaps Chain configuration after among-temperature swaps. +#' +#' @param prop_step Proposed step output from \code{propose_step}. +#' +#' @param accept_step \code{logical} indicator of acceptance of each chain's +#' proposed step. +#' +#' @param chainsin Chain configuration to be evaluated for swapping. #' #' @param ntemps \code{integer} number of temperatures (chains) to use in the #' ptMCMC algorithm. @@ -79,57 +124,124 @@ ldats_classic <- function(TS, control = list()){ #' @param thin_frac Fraction of iterations to retain, must be \eqn{(0, 1]}, #' and the default value of 1 represents no thinning. #' -#' #' @param quiet \code{logical} indicator of whether the model should run #' quietly (if \code{FALSE}, a progress bar and notifications are printed). #' #' @param memoise \code{logical} indicator of whether the response #' function should be memoised (via \code{\link[memoise]{memoise}}). #' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @export +#' @return +#' \code{ldats_classic}: \code{list} of changepoint locations, log +#' likelihoods, and model diagnostics. \cr \cr +#' \code{ldats_classic_control}: \code{list} of named control elements +#' for use in \code{\link{ldats_classic}}. \cr \cr +#' \code{prep_ptMCMC_inputs}: \code{list} containing the static +#' inputs for use within the ptMCMC algorithm for estimating change +#' points. \cr \cr +#' \code{prep_temp_sequence}: \code{vector} of temperatures. +#' \code{prep_proposal_dist}: \code{list} of two \code{matrix} elements: +#' [1] the size of the proposed step for each iteration of each chain and +#' [2] the identity of the change point location to be shifted by the +#' step for each iteration of each chain. +#' \code{prep_ids},\code{update_ids}: \code{vector} of ids. \cr \cr +#' \code{prep_cpts},\code{update_cpts}: \code{list} of [1] \code{matrix} +#' of change points (rows) for each temperature (columns) and [2] +#' \code{vector} of log-likelihood values for each of the chains. \cr \cr +#' \code{prep_saves},\code{update_saves},\code{process_saves}: \code{list} +#' of ptMCMC objects: change points (\code{$cpts}), +#' log-likelihoods (\code{$lls}), chain ids (\code{$ids}), +#' step acceptances (\code{$step_accepts}), and swap acceptances +#' (\code{$swap_accepts}). \cr \cr +#' \code{step_chains}: \code{list} of change points, log-likelihoods, +#' and logical indicators of acceptance for each chain. \cr \cr +#' \code{propose_step}: \code{list} of change points and +#' log-likelihood values for the proposal. \cr \cr +#' \code{eval_step}: \code{logical} vector indicating if each +#' chain's proposal was accepted. \cr \cr +#' \code{take_step}: \code{list} of change points, log-likelihoods, +#' and logical indicators of acceptance for each chain. \cr \cr +#' \code{swap_chains}: \code{list} of updated change points, +#' log-likelihoods, and chain ids, as well as a \code{vector} of +#' acceptance indicators for each swap. \cr \cr +#' \code{proposed_step_mods}: \code{list} of models associated with the +#' proposed step, with an element for each chain. \cr \cr +#' \code{count_trips}: \code{list} of [1] \code{vector} of within particle +#' trip counts (\code{$trip_counts}), and [2] \code{vector} of +#' within-particle average trip rates (\code{$trip_rates}). #' -ldats_classic_control <- function(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e10, q = 0, - nit = 1e4, magnitude = 12, - burnin = 0, thin_frac = 1, - memoise = TRUE, quiet = FALSE){ - list(ntemps = ntemps, penultimate_temp = penultimate_temp, - ultimate_temp = ultimate_temp, q = q, nit = nit, - magnitude = magnitude, burnin = burnin, thin_frac = thin_frac, - memoise = memoise, quiet = quiet) -} - - -#' @title Count trips of the ptMCMC particles in a classic_ldats estimation +#' @references #' -#' @description Count the full trips (from one extreme temperature chain to -#' the other and back again; Katzgraber \emph{et al.} 2006) for each of the -#' ptMCMC particles, as identified by their id on initialization. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and process -#' the output of \code{\link{est_changepoints}} as a component of -#' \code{\link{diagnose_ptMCMC}}, but has been generalized -#' and would work with any output from a ptMCMC as long as \code{ids} -#' is formatted properly. +#' Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. +#' Long-term community change through multiple rapid transitions in a +#' desert rodent community. \emph{Ecology} \strong{99}:1523-1529. +#' \href{https://doi.org/10.1002/ecy.2373}{link}. #' -#' @param ids \code{matrix} of identifiers of the particles in each chain for -#' each iteration of the ptMCMC algorithm (rows: chains, -#' columns: iterations). +#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, +#' applications, and new perspectives. \emph{Physical Chemistry Chemical +#' Physics} \strong{7}: 3910-3916. +#' \href{https://doi.org/10.1039/B509983H}{link}. #' -#' @return \code{list} of [1] \code{vector} of within particle trip counts -#' (\code{$trip_counts}), and [2] \code{vector} of within-particle average -#' trip rates (\code{$trip_rates}). +#' Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for +#' zeolite structure solution. \emph{Journal of Chemical Physics} +#' \strong{110}: 1754-1766. +#' \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. #' -#' @references +#' Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In +#' Computing Science and Statistics: Proceedings of the 23rd Symposium on +#' the Interface}. pp 156-163. American Statistical Association, New York, +#' USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. +#' +#' Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. +#' 2018. Evaluation of parallel tempering to accelerate Bayesian parameter +#' estimation in systems biology. +#' \href{https://arxiv.org/abs/1801.09831}{link}. +#' +#' Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains +#' and their applications. \emph{Biometrika} \strong{57}:97-109. +#' \href{https://doi.org/10.2307/2334940}{link}.#' #' Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. #' Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of #' Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 #' \href{https://bit.ly/2LICGXh}{link}. +#' +#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. +#' Teller. 1953. Equations of state calculations by fast computing machines. +#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. +#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. #' +#' @name ldats_classic #' -#' @export + + + +#' @rdname ldats_classic +#' +#' @export +#' +ldats_classic <- function(TS, control = list()){ + TS$control$method_args$control <- do.call("ldats_classic_control", control) + saves <- prep_saves(TS = TS) + inputs <- prep_ptMCMC_inputs(TS = TS) + cpts <- prep_cpts(TS = TS) + ids <- prep_ids(TS = TS) + pbar <- prep_pbar(control = TS$control$method_args$control, type = "rho") + + for(i in 1:control$nit){ + update_pbar(pbar = pbar, control = TS$control$method_args$control) + steps <- step_chains(TS = TS, i = i, cpts = cpts, inputs = inputs) + swaps <- swap_chains(chainsin = steps, inputs = inputs, ids = ids) + saves <- update_saves(i = i, saves = saves, steps = steps, swaps = swaps) + cpts <- update_cpts(cpts = cpts, swaps = swaps) + ids <- update_ids(ids = ids, swaps = swaps) + } + + process_saves(saves = saves, TS = TS) + +} + +#' @rdname ldats_classic +#' +#' @export #' count_trips <- function(ids){ nit <- ncol(ids) @@ -161,54 +273,7 @@ count_trips <- function(ids){ -#' @title Conduct a set of among-chain swaps for the ptMCMC algorithm -#' -#' @description This function handles the among-chain swapping based on -#' temperatures and likelihood differentials. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do -#' so, but has the capacity to be generalized to work with any estimation -#' via ptMCMC with additional coding work. -#' -#' @details The ptMCMC algorithm couples the chains (which are -#' taking their own walks on the distribution surface) through "swaps", -#' where neighboring chains exchange configurations (Geyer 1991, Falcioni -#' and Deem 1999) following the Metropolis criterion (Metropolis -#' \emph{et al.} 1953). This allows them to share information and search the -#' surface in combination (Earl and Deem 2005). -#' -#' @param chainsin Chain configuration to be evaluated for swapping. -#' -#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs -#' for use within the ptMCMC algorithm. -#' -#' @param ids The vector of integer chain ids. -#' -#' @return \code{list} of updated change points, log-likelihoods, and chain -#' ids, as well as a vector of acceptance indicators for each swap. -#' -#' @references -#' Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, -#' applications, and new perspectives. \emph{Physical Chemistry Chemical -#' Physics} \strong{7}: 3910-3916. -#' \href{https://rsc.li/2XkxPCm}{link}. -#' -#' Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for -#' zeolite structure solution. \emph{Journal of Chemical Physics} -#' \strong{110}: 1754-1766. -#' \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. -#' -#' Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In -#' Computing Science and Statistics: Proceedings of the 23rd Symposium on -#' the Interface}. pp 156-163. American Statistical Association, New York, -#' USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. -#' -#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. -#' Teller. 1953. Equations of state calculations by fast computing machines. -#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. -#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -#' +#' @rdname ldats_classic #' #' @export #' @@ -243,26 +308,22 @@ swap_chains <- function(chainsin, inputs, ids){ list(changepts = changepts, lls = lls, ids = ids, accept_swap = accept_swap) } - -#' @title Initialize and update the change point matrix used in the LDATS -#' classic ptMCMC algorithm -#' -#' @description Each of the chains is initialized by \code{prep_cpts} using a -#' draw from the available times (i.e. assuming a uniform prior), the best -#' fit (by likelihood) draw is put in the focal chain with each subsequently -#' worse fit placed into the subsequently hotter chain. \code{update_cpts} -#' updates the change points after every iteration in the ptMCMC algorithm. +#' @rdname ldats_classic #' -#' @param TS \code{list} time series model object. -#' -#' @param cpts The existing matrix of change points. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return \code{list} of [1] \code{matrix} of change points (rows) for -#' each temperature (columns) and [2] \code{vector} of log-likelihood -#' values for each of the chains. +#' @export #' +ldats_classic_control <- function(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e10, q = 0, + nit = 1e4, magnitude = 12, + burnin = 0, thin_frac = 1, + memoise = TRUE, quiet = FALSE){ + list(ntemps = ntemps, penultimate_temp = penultimate_temp, + ultimate_temp = ultimate_temp, q = q, nit = nit, + magnitude = magnitude, burnin = burnin, thin_frac = thin_frac, + memoise = memoise, quiet = quiet) +} + +#' @rdname ldats_classic #' #' @export #' @@ -297,8 +358,7 @@ prep_cpts <- function(TS){ out } - -#' @rdname prep_cpts +#' @rdname ldats_classic #' #' @export #' @@ -306,23 +366,7 @@ update_cpts <- function(cpts, swaps){ list(changepts = swaps$changepts, lls = swaps$lls) } -#' @title Prepare the ptMCMC temperature sequence for the LDATS classic -#' method -#' -#' @description Create the series of temperatures used in the ptMCMC -#' algorithm. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' \code{\link{est_changepoints}} specifically, but has been generalized -#' and would work with any ptMCMC model as long as \code{control} -#' includes the relevant control parameters. -#' -#' @param TS \code{list} time series model object. -#' -#' @return \code{vector} of temperatures. -#' -#' @examples -#' prep_temp_sequence() +#' @rdname ldats_classic #' #' @export #' @@ -336,34 +380,7 @@ prep_temp_sequence <- function(TS){ c(2^(log_temps), ultimate_temp) } - -#' @title Prepare and update the data structures to save the LDATS classic -#' ptMCMC output -#' -#' @description \code{prep_saves} creates the data structure used to save the -#' output from each iteration of the ptMCMC algorithm, which is added via -#' \code{update_saves}. Once the ptMCMC is complete, the saved data objects -#' are then processed (burn-in iterations are dropped and the remaining -#' iterations are thinned) via \code{process_saves}. -#' \cr \cr -#' This set of functions was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. They are still hardcoded to -#' do so, but have the capacity to be generalized to work with any -#' estimation via ptMCMC with additional coding work. -#' -#' @param TS \code{list} time series model object. -#' -#' @param i \code{integer} iteration index. -#' -#' @param saves The existing list of saved data objects. -#' -#' @param steps Chain configuration after within-temperature steps. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return \code{list} of ptMCMC objects: change points (\code{$cpts}), -#' log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances -#' (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). +#' @rdname ldats_classic #' #' @export #' @@ -380,7 +397,7 @@ prep_saves <- function(TS){ swap_accepts = swap_accepts) } -#' @rdname prep_saves +#' @rdname ldats_classic #' #' @export #' @@ -393,7 +410,7 @@ update_saves <- function(i, saves, steps, swaps){ saves } -#' @rdname prep_saves +#' @rdname ldats_classic #' #' @export #' @@ -426,21 +443,7 @@ process_saves <- function(saves, TS){ saves } -#' @title Prepare the inputs for the ptMCMC algorithm estimation of -#' change points -#' -#' @description Package the static inputs (controls and data structures) used -#' by the ptMCMC algorithm in the context of estimating change points. -#' \cr \cr -#' This function was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. It is still hardcoded to do -#' so, but has the capacity to be generalized to work with any estimation -#' via ptMCMC with additional coding work. -#' -#' @param TS \code{list} time series model object. -#' -#' @return \code{list} containing the static -#' inputs for use within the ptMCMC algorithm for estimating change points. +#' @rdname ldats_classic #' #' @export #' @@ -458,25 +461,7 @@ prep_ptMCMC_inputs <- function(TS){ fun = fun) } - - -#' @title Pre-calculate the change point proposal distribution for the ptMCMC -#' algorithm -#' -#' @description Calculate the proposal distribution in advance of actually -#' running the ptMCMC algorithm in order to decrease computation time. -#' The proposal distribution is a joint of three distributions: -#' [1] a multinomial distribution selecting among the change points within -#' the chain, [2] a binomial distribution selecting the direction of the -#' step of the change point (earlier or later in the time series), and -#' [3] a geometric distribution selecting the magnitude of the step. -#' -#' @param TS \code{list} time series model object. -#' -#' @return \code{list} of two \code{matrix} elements: [1] the size of the -#' proposed step for each iteration of each chain and [2] the identity of -#' the change point location to be shifted by the step for each iteration of -#' each chain. +#' @rdname ldats_classic #' #' @export #' @@ -498,27 +483,7 @@ prep_proposal_dist <- function(TS){ list(steps = steps, which_steps = which_steps) } - -#' @title Initialize and update the chain ids throughout the LDATS classic -#' ptMCMC algorithm -#' -#' @description \code{prep_ids} creates and \code{update_ids} updates -#' the active vector of identities (ids) for each of the chains in the -#' ptMCMC algorithm. These ids are used to track trips of the particles -#' among chains. -#' \cr \cr -#' These functions were designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}, but have been generalized -#' and would work within any general ptMCMC as long as \code{control}, -#' \code{ids}, and \code{swaps} are formatted properly. -#' -#' @param TS \code{list} time series model object. -#' -#' @param ids The existing vector of chain ids. -#' -#' @param swaps Chain configuration after among-temperature swaps. -#' -#' @return The vector of chain ids. +#' @rdname ldats_classic #' #' @export #' @@ -530,75 +495,13 @@ prep_ids <- function(TS){ 1:ntemps } - -#' @rdname prep_ids +#' @rdname ldats_classic #' #' @export #' update_ids <- function(ids, swaps){ swaps$ids } - -#' @title Conduct a within-chain step of the ptMCMC algorithm -#' -#' @description This set of functions steps the chains forward one iteration -#' of the within-chain component of the ptMCMC algorithm. \code{step_chains} -#' is the main function, comprised of a proposal (made by \code{prop_step}), -#' an evaluation of that proposal (made by \code{eval_step}), and then an -#' update of the configuration (made by \code{take_step}). -#' \cr \cr -#' This set of functions was designed to work within \code{\link{TS}} and -#' specifically \code{\link{est_changepoints}}. They are still hardcoded to -#' do so, but have the capacity to be generalized to work with any -#' estimation via ptMCMC with additional coding work. -#' -#' @details For each iteration of the ptMCMC algorithm, all of the chains -#' have the potential to take a step. The possible step is proposed under -#' a proposal distribution (here for change points we use a symmetric -#' geometric distribution), the proposed step is then evaluated and either -#' accepted or not (following the Metropolis-Hastings rule; Metropolis, -#' \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then -#' accordingly taken or not (the configurations are updated). -#' -#' @param i \code{integer} iteration index. -#' -#' @param cpts \code{matrix} of change point locations across chains. -#' -#' @param inputs Class \code{ptMCMC_inputs} \code{list}, containing the -#' static inputs for use within the ptMCMC algorithm. -#' -#' @param prop_step Proposed step output from \code{propose_step}. -#' -#' @param accept_step \code{logical} indicator of acceptance of each chain's -#' proposed step. -#' -#' @return -#' \code{step_chains}: \code{list} of change points, log-likelihoods, -#' and logical indicators of acceptance for each chain. \cr \cr -#' \code{propose_step}: \code{list} of change points and -#' log-likelihood values for the proposal. \cr \cr -#' \code{eval_step}: \code{logical} vector indicating if each -#' chain's proposal was accepted. \cr \cr -#' \code{take_step}: \code{list} of change points, log-likelihoods, -#' and logical indicators of acceptance for each chain. -#' -#' @references -#' Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. -#' 2018. Evaluation of parallel tempering to accelerate Bayesian parameter -#' estimation in systems biology. -#' \href{https://arxiv.org/abs/1801.09831}{link}. -#' -#' Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains -#' and their applications. \emph{Biometrika} \strong{57}:97-109. -#' \href{https://doi.org/10.2307/2334940}{link}. -#' -#' Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. -#' Teller. 1953. Equations of state calculations by fast computing machines. -#' \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. -#' \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -#' -#' @export -#' step_chains <- function(TS, i, cpts, inputs){ prop_step <- propose_step(TS = TS, i = i, cpts = cpts, inputs = inputs) accept_step <- eval_step(i = i, cpts = cpts, prop_step = prop_step, @@ -606,7 +509,7 @@ step_chains <- function(TS, i, cpts, inputs){ take_step(cpts = cpts, prop_step = prop_step, accept_step = accept_step) } -#' @rdname step_chains +#' @rdname ldats_classic #' #' @export #' @@ -628,8 +531,7 @@ propose_step <- function(TS, i, cpts, inputs){ list(changepts = prop_changepts, lls = lls) } - -#' @rdname step_chains +#' @rdname ldats_classic #' #' @export #' @@ -640,7 +542,7 @@ eval_step <- function(i, cpts, prop_step, inputs){ runif(ntemps) < exp((prop_step$lls - cpts$lls) * itemps) } -#' @rdname step_chains +#' @rdname ldats_classic #' #' @export #' @@ -652,22 +554,7 @@ take_step <- function(cpts, prop_step, accept_step){ list(changepts = changepts, lls = lls, accept_step = accept_step) } -#' @title Fit the chunk-level models to a time series, given a set of -#' proposed change points within the ptMCMC algorithm -#' -#' @description This function wraps around \code{TS_memo} -#' (optionally memoised \code{\link{multinom_TS}}) to provide a -#' simpler interface within the ptMCMC algorithm and is implemented within -#' \code{\link{propose_step}}. -#' -#' @param prop_changepts \code{matrix} of proposed change points across -#' chains. -#' -#' @param inputs Class \code{ptMCMC_inputs} list, containing the static inputs -#' for use within the ptMCMC algorithm. -#' -#' @return List of models associated with the proposed step, with an element -#' for each chain. +#' @rdname ldats_classic #' #' @export #' diff --git a/R/TS_models.R b/R/TS_models.R index 054380a4..bd472e59 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -8,6 +8,8 @@ #' regressor values unconditional on change point locations. \cr \cr #' \code{sequential_TS} combines each stage of the model estimation and #' packages the model results in a consistent output. \cr \cr +#' \code{sequential_TS_control} defines and creates the control \code{list} +#' used to fit the sequential Time Series model. #' \code{est_changepoints} estimates the change point location #' distributions for multinomial Time Series analyses. \cr \cr #' \code{est_regressors} uses the marginal posterior distributions of @@ -20,6 +22,14 @@ #' \code{package_sequential_TS} calculates relevant summaries for the run of #' a sequenial Time Series model within \code{\link{sequential_TS}} and #' packages the output as a \code{TS}-class object. \cr \cr +#' \code{summarize_etas} calculates summary statistics for each +#' of the chunk-level regressors. \cr \cr +#' \code{measure_ets_vcov} generates the variance-covariance matrix for +#' the regressors. \cr \cr +#' \code{summarize_rho} calculates summary statistics for each +#' of the change point locations. \cr \cr +#' \code{measure_rho_vcov} generates the variance-covariance matrix for the +#' change point locations. #' #' @param rho_dist \code{list} of saved data objects from the estimation of #' change point locations (unless \code{nchangepoints} is 0, then @@ -33,8 +43,43 @@ #' Time Series model. Values not input assume defaults set by #' \code{\link{sequential_TS_control}}. #' +#' @param etas \code{matrix} of regressors (columns) across iterations of the +#' sampler (rows), as returned from \code{\link{est_regressors}}. +#' +#' @param rhos \code{matrix} of change point locations (columns) across +#' iterations of the sampler (rows) or \code{NULL} if no change points are +#' in the model, as returned from \code{\link{est_change points}}. +#' #' @param TS Time series model \code{list}. #' +#' @param response \code{character} element indicating the response variable +#' used in the time series. \cr \cr +#' Must have a corresponding \code{_TS} function. +#' +#' @param summary_prob Probability used for summarizing the posterior +#' distributions (via the highest posterior density interval, see +#' \code{\link[coda]{HPDinterval}}). +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param soften \code{logical} indicator of whether the model should error +#' softly or if errors should trigger a full-stop to the pipeline. +#' +#' @param method \code{function} used to drive the sampler of the TS +#' models; \code{method} defines and operates the computational procedure. +#' \cr \cr +#' Current pre-built options include \code{\link{ldats_classic}}. +#' +#' @param method_args \code{list} of (named) arguments to be used in +#' \code{method} via \code{\link{do.call}}. +#' \cr \cr +#' Could be managed via a \code{_control} function like +#' \code{\link{ldats_classic_control}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' #' @details The general approach follows that of Western and Kleykamp #' (2004), although we note some important differences. Our regression #' models are fit independently for each chunk (segment of time), and @@ -65,11 +110,6 @@ #' \href{https://doi.org/10.1093/pan/mph023}{link}. #' #' @return -#' \code{est_changepoints}: \code{list} of saved data objects from the -#' estimation of change point locations, uunless \code{nchangepoints} -#' is 0, then \code{NULL}. \cr \cr -#' \code{est_regressors}: \code{matrix} of draws (rows) from the marginal -#' posteriors of the coefficients across the segments (columns). \cr \cr #' \code{sequential_TS} and \code{package_sequential_TS}: #' \code{TS}-class list containing the following elements, many of #' which are hidden for \code{print}ing, but are accessible: @@ -106,7 +146,26 @@ #' (\code{lls}).} #' \item{nparams}{Total number of parameters in the full model, #' including the change point locations and regressors.} -#' } +#' } \cr \cr +#' \code{sequential_TS_control}: \code{list} of named control elements for +#' sequential model fitting. +#' \code{est_changepoints}: \code{list} of saved data objects from the +#' estimation of change point locations, uunless \code{nchangepoints} +#' is 0, then \code{NULL}. \cr \cr +#' \code{est_regressors}: \code{matrix} of draws (rows) from the marginal +#' posteriors of the coefficients across the segments (columns). \cr \cr +#' \code{summarize_etas}: table of summary statistics for chunk-level +#' regressors including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each regressor. \cr \cr +#' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level +#' regressors. \cr \cr +#' \code{summarize_rhos}: table of summary statistics for change point +#' locations including mean, median, mode, posterior interval, standard +#' deviation, MCMC error, autocorrelation, and effective sample size for +#' each change point location. \cr \cr +#' \code{measure_rho_vcov}: variance-covariance matrix for change +#' point locations. #' #' @name sequential_TS #' @@ -264,45 +323,9 @@ est_regressors <- function(rho_dist, TS){ } - - -#' @title Create the controls list for a sequential Time Series model -#' -#' @description This function provides a simple creation and definition of a -#' list used to control the time series model fit occurring within -#' \code{\link{sequential_TS}}. -#' -#' @param response \code{character} element indicating the response variable -#' used in the time series. \cr \cr -#' Must have a corresponding \code{_TS} function. -#' -#' @param summary_prob Probability used for summarizing the posterior -#' distributions (via the highest posterior density interval, see -#' \code{\link[coda]{HPDinterval}}). -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param soften \code{logical} indicator of whether the model should error -#' softly or if errors should trigger a full-stop to the pipeline. -#' -#' @param method \code{function} used to drive the sampler of the TS -#' models; \code{method} defines and operates the computational procedure. -#' \cr \cr -#' Current pre-built options include \code{\link{ldats_classic}}. -#' -#' @param method_args \code{list} of (named) arguments to be used in -#' \code{method} via \code{\link{do.call}}. -#' \cr \cr -#' Could be managed via a \code{_control} function like -#' \code{\link{ldats_classic_control}}. -#' -#' @param ... Not passed along to the output, rather included to allow for -#' automated removal of unneeded controls. -#' -#' @return \code{list}, with named elements corresponding to the arguments. +#' @rdname sequential_TS #' -#' @export +#' @export #' sequential_TS_control <- function(method = ldats_classic, method_args = ldats_classic_control(), @@ -312,46 +335,7 @@ sequential_TS_control <- function(method = ldats_classic, summary_prob = summary_prob, soften = soften, quiet = quiet) } -#' @title Summarize the change point (rho) and regressor (eta) distributions -#' of a sequential time series model -#' -#' @description -#' \code{summarize_etas} calculates summary statistics for each -#' of the chunk-level regressors. \cr \cr -#' \code{measure_ets_vcov} generates the variance-covariance matrix for -#' the regressors. \cr \cr -#' \code{summarize_rho} calculates summary statistics for each -#' of the change point locations. \cr \cr -#' \code{measure_rho_vcov} generates the variance-covariance matrix for the -#' change point locations. -#' -#' @param etas \code{matrix} of regressors (columns) across iterations of the -#' sampler (rows), as returned from \code{\link{est_regressors}}. -#' -#' @param rhos \code{matrix} of change point locations (columns) across -#' iterations of the sampler (rows) or \code{NULL} if no change points are -#' in the model, as returned from \code{\link{est_change points}}. -#' -#' @param TS Time series model \code{list}. -#' -#' @return -#' \code{summarize_etas}: table of summary statistics for chunk-level -#' regressors including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each regressor. \cr \cr -#' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level -#' regressors. \cr \cr -#' \code{summarize_rhos}: table of summary statistics for change point -#' locations including mean, median, mode, posterior interval, standard -#' deviation, MCMC error, autocorrelation, and effective sample size for -#' each change point location. \cr \cr -#' \code{measure_rho_vcov}: variance-covariance matrix for change -#' point locations. -#' -#' @name summarize_sequential_TS -#' - -#' @rdname summarize_sequential_TS +#' @rdname sequential_TS #' #' @export #' @@ -377,7 +361,7 @@ summarize_etas <- function(etas, TS){ out } -#' @rdname summarize_sequential_TS +#' @rdname sequential_TS #' #' @export #' @@ -393,7 +377,7 @@ measure_eta_vcov <- function(etas){ -#' @rdname summarize_sequential_TS +#' @rdname sequential_TS #' #' @export #' @@ -419,7 +403,7 @@ summarize_rhos <- function(rhos, TS){ out } -#' @rdname summarize_sequential_TS +#' @rdname sequential_TS #' #' @export #' diff --git a/man/LDA.Rd b/man/LDA.Rd index a3cb007b..e23f6215 100644 --- a/man/LDA.Rd +++ b/man/LDA.Rd @@ -9,6 +9,7 @@ \alias{package_LDA} \alias{select_LDA} \alias{measure_LDA} +\alias{LDA_control} \title{Run a set of Linguistic Decomposition Analysis models} \usage{ LDA(data, topics = 2, replicates = 1, control = list()) @@ -26,6 +27,11 @@ package_LDA(LDAs) select_LDA(LDAs) measure_LDA(LDAs) + +LDA_control(model = topicmodels_LDA, model_args = list(method = "VEM", + seeded = TRUE), measurer = AIC, measurer_args = list(NULL), + selector = which.min, selector_args = list(NULL), nsubsets = 1, + subset_rule = NULL, soften = TRUE, quiet = FALSE, ...) } \arguments{ \item{data}{Any of the data structures allowable for LDATS analyses: @@ -46,7 +52,38 @@ value of \code{topics}. Must be conformable to \code{integer} value.} LDA model. Values not input assume defaults set by \code{\link{LDA_control}}.} -\item{LDAs}{\code{list} of LDA model \code{list}s.} +\item{LDA, LDAs}{model \code{list} (\code{LDA}) or a \code{list} of LDA +model \code{list}s (\code{LDAs}).} + +\item{model}{Main LDA \code{function}.} + +\item{model_args}{\code{list} of (named) arguments to be used in +\code{model} via \code{\link{LDA_call}}.} + +\item{measurer}{\code{function} used in evaluation of the LDA +models; \code{measurer} creates a value for each model.} + +\item{measurer_args}{\code{list} of (named) arguments to be used in +\code{measurer} via \code{\link{do.call}}.} + +\item{selector}{\code{function} usde in evaluation of the LDA +models; \code{selector} operates on the values to choose the models.} + +\item{selector_args}{\code{list} of (named) arguments to be used in +\code{selector} via \code{\link{do.call}}.} + +\item{nsubsets}{Number of data subsets.} + +\item{subset_rule}{\code{function} used to subset the data.} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} \item{selected_LDAs}{\code{list} of selected LDA model \code{list}s.} } @@ -55,8 +92,10 @@ LDA model. Values not input assume defaults set by both selected and all results from \code{\link{LDA_call}} applied for each model on each data input(s) as well as the control \code{list} used to fit the model. \cr \cr - \code{prep_LDA_models}: \code{list} of \code{list}s, each of which is a + \code{prepare_LDA}: \code{list} of \code{list}s, each of which is a preliminary model object for an LDA model fit. \cr \cr + \code{LDA_control}: \code{list} of controls for the LDA model, with + named elements corresponding to the arguments. \code{run_LDA}: \code{LDA_set} \code{list} of model results from all runs of a \code{} function, such as \code{\link{topicmodels_LDA}}. \cr \cr @@ -74,6 +113,8 @@ Conduct Linguistic Decomposition Analyses. \cr \cr \emph{et al.} 2018). \cr \cr \code{prepare_LDA} pre-prepares the LDA model objects for simpler use within the subfunctions. \cr \cr + \code{LDA_control} defines and creates the control list used to fit + the LDA model. \cr \cr \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models as set up by \code{prep_LDA_models}. \cr \cr \code{LDA_call} runs (via \code{\link{do.call}}) a single LDA model diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index ca6284a8..eb4d659e 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -2,12 +2,29 @@ % Please edit documentation in R/LDA_TS.R \name{LDA_TS} \alias{LDA_TS} +\alias{package_LDA_TS} +\alias{LDA_TS_control} \title{Run a set of Linguistic Decomposition Analysis models coupled to Bayesian Time Series models} \usage{ LDA_TS(data, topics = 2, reps = 1, formulas = ~1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()) + +package_LDA_TS(LDAs, TSs, control) + +LDA_TS_control(LDA_model = topicmodels_LDA, + LDA_model_args = list(method = "VEM", seeded = TRUE), + LDA_measurer = AIC, LDA_measurer_args = list(NULL), + LDA_selector = which.min, LDA_selector_args = list(NULL), + TS_model = sequential_TS, TS_model_args = list(control = + sequential_TS_control()), TS_response = multinom_TS, + TS_response_args = list(control = multinom_TS_control()), + TS_method = ldats_classic, TS_method_args = list(control = + ldats_classic_control()), nsubsets = 1, subset_rule = NULL, + summary_prob = 0.95, soften = TRUE, quiet = FALSE, + TS_measurer = AIC, TS_measurer_args = list(NULL), + TS_selector = which.min, TS_selector_args = list(NULL), ...) } \arguments{ \item{data}{Any of the data structures allowable for LDATS analyses: @@ -22,10 +39,6 @@ validity for the desired model.} topics to evaluate for each model. \cr (See \code{\link{LDA}}.)} -\item{reps}{\code{integer}-conformable number of replicate starts to use -for each value of \code{topics}. \cr -(See \code{\link{LDA}}.)} - \item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the regression between the change points. Any predictor variable included must also be a column in \code{data} and any (compositional) response @@ -67,22 +80,111 @@ most appropriate, and this is accomplished using \code{document_weights}. \item{control}{\code{list} of parameters to control the fitting of the LDATS model. Values not input assume defaults set by \code{\link{LDA_TS_control}}.} + +\item{LDAs}{\code{LDA_set} \code{list} of selected and all LDAs from +\code{\link{LDA}}.} + +\item{TSs}{\code{TS_set} \code{list} of selected and all TSs from +\code{\link{TS}}.} + +\item{LDA_model}{Main LDA \code{function}.} + +\item{LDA_model_args}{\code{list} of (named) arguments to be used in +\code{LDA_model} via \code{\link{LDA_call}}.} + +\item{LDA_measurer}{\code{function} used in evaluation of the LDA +models; \code{LDA_measurer} creates a value for each model.} + +\item{LDA_measurer_args}{\code{list} of (named) arguments to be used in +\code{LDA_measurer} via \code{\link{do.call}}.} + +\item{LDA_selector}{\code{function} usde in evaluation of the LDA +models; \code{LDA_selector} operates on the values to choose the models.} + +\item{LDA_selector_args}{\code{list} of (named) arguments to be used in +\code{LDA_selector} via \code{\link{do.call}}.} + +\item{TS_model}{Main TS \code{function}.} + +\item{TS_model_args}{\code{list} of (named) arguments to be used in +\code{TS_model}.} + +\item{TS_response}{\code{function} used to model the compositional +response.} + +\item{TS_method}{\code{function} used to drive the sampler of the TS +models; \code{TS_method} defines and operates the computational +procedure. \cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{TS_method_args}{\code{list} of (named) arguments to be used in +\code{TS_method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{nsubsets}{Number of data subsets.} + +\item{subset_rule}{\code{function} used to subset the data.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{TS_measurer}{\code{function} used in evaluation of the TS +models; \code{measurer} creates a value for each model.} + +\item{TS_measurer_args}{\code{list} of (named) arguments to be used in +\code{TS_measurer} via \code{\link{do.call}}.} + +\item{TS_selector}{\code{function} usde in evaluation of the TS +models; \code{TS_selector} operates on the values to choose the models.} + +\item{TS_selector_args}{\code{list} of (named) arguments to be used in +\code{TS_selector} via \code{\link{do.call}}.} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} + +\item{replicates}{\code{integer}-conformable number of replicate starts to +use for each value of \code{topics}. \cr +(See \code{\link{LDA}}.)} + +\item{response_args}{\code{list} of (named) arguments to be used in +\code{TS_response} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_TS_control} function like +\code{\link{multinom_TS_control}}.} } \value{ -\code{LDA_TS} \code{list} with all fitted LDA and TS models and - selected models specifically as elements named - \describe{ - \item{\code{LDA models}}{\code{list} of all and selected models as well - as controls from \code{\link{LDA}}} - \item{\code{TS models}}{\code{list} of all and selected models as well - as controls from \code{\link{TS}}} - \item{\code{control}}{\code{list} of overall model controls} - } +\code{LDA_TS},\code{package_LDA_TS}: class-\code{LDA_TS} \code{list} + with all fitted LDA and TS models and selected models specifically + as elements named + \describe{ + \item{\code{LDA models}}{\code{list} of all and selected models as + well as controls from \code{\link{LDA}}} + \item{\code{TS models}}{\code{list} of all and selected models as + well as controls from \code{\link{TS}}} + \item{\code{control}}{\code{list} of overall model controls} + } \cr \cr + \code{LDA_TS_control}: \code{list} of \code{list}s and single elements + that control fitting of the LDATS model, with named elements + corresponding to the arguments. } \description{ Analyze compositional time series using the Linguistic Decomposition Analysis coupled to Bayesian Time Series models generally following Christensen \emph{et al.} (2018). + \code{LDA_TS} is the primary model function. \cr \cr + \code{LDA_TS_control} defines the control \code{list} arguments for + \code{\link{LDA_TS}}. \cr \cr + \code{package_LDA_TS} combines the results from each model component. } \details{ For a (potentially subset) dataset consisting of counts of words diff --git a/man/LDA_TS_control.Rd b/man/LDA_TS_control.Rd deleted file mode 100644 index 23730cd9..00000000 --- a/man/LDA_TS_control.Rd +++ /dev/null @@ -1,105 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{LDA_TS_control} -\alias{LDA_TS_control} -\title{Create the controls list for the complete Linguistic Decomposition - Analysis and Time Series model} -\usage{ -LDA_TS_control(LDA_model = topicmodels_LDA, - LDA_model_args = list(method = "VEM", seeded = TRUE), - LDA_measurer = AIC, LDA_measurer_args = list(NULL), - LDA_selector = which.min, LDA_selector_args = list(NULL), - TS_model = sequential_TS, TS_model_args = list(control = - sequential_TS_control()), TS_response = multinom_TS, - TS_response_args = list(control = multinom_TS_control()), - TS_method = ldats_classic, TS_method_args = list(control = - ldats_classic_control()), nsubsets = 1, subset_rule = NULL, - summary_prob = 0.95, soften = TRUE, quiet = FALSE, - TS_measurer = AIC, TS_measurer_args = list(NULL), - TS_selector = which.min, TS_selector_args = list(NULL), ...) -} -\arguments{ -\item{LDA_model}{Main LDA \code{function}.} - -\item{LDA_model_args}{\code{list} of (named) arguments to be used in -\code{LDA_model} via \code{\link{LDA_call}}.} - -\item{LDA_measurer}{\code{function} used in evaluation of the LDA -models; \code{LDA_measurer} creates a value for each model.} - -\item{LDA_measurer_args}{\code{list} of (named) arguments to be used in -\code{LDA_measurer} via \code{\link{do.call}}.} - -\item{LDA_selector}{\code{function} usde in evaluation of the LDA -models; \code{LDA_selector} operates on the values to choose the models.} - -\item{LDA_selector_args}{\code{list} of (named) arguments to be used in -\code{LDA_selector} via \code{\link{do.call}}.} - -\item{TS_model}{Main TS \code{function}.} - -\item{TS_model_args}{\code{list} of (named) arguments to be used in -\code{TS_model}.} - -\item{TS_response}{\code{function} used to model the compositional -response.} - -\item{TS_method}{\code{function} used to drive the sampler of the TS -models; \code{TS_method} defines and operates the computational -procedure. \cr \cr -Current pre-built options include \code{\link{ldats_classic}}.} - -\item{TS_method_args}{\code{list} of (named) arguments to be used in -\code{TS_method} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_control} function like -\code{\link{ldats_classic_control}}.} - -\item{nsubsets}{Number of data subsets.} - -\item{subset_rule}{\code{function} used to subset the data.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}).} - -\item{soften}{\code{logical} indicator of whether the model should error -softly or if errors should trigger a full-stop to the pipeline.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{TS_measurer}{\code{function} used in evaluation of the TS -models; \code{measurer} creates a value for each model.} - -\item{TS_measurer_args}{\code{list} of (named) arguments to be used in -\code{TS_measurer} via \code{\link{do.call}}.} - -\item{TS_selector}{\code{function} usde in evaluation of the TS -models; \code{TS_selector} operates on the values to choose the models.} - -\item{TS_selector_args}{\code{list} of (named) arguments to be used in -\code{TS_selector} via \code{\link{do.call}}.} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} - -\item{response_args}{\code{list} of (named) arguments to be used in -\code{TS_response} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_TS_control} function like -\code{\link{multinom_TS_control}}.} -} -\value{ -\code{list} of \code{list}s and single elements, with named - elements corresponding to the arguments. -} -\description{ -Defines and creates a \code{list} used to control the - decomposition and time series model fitting occurring within - \code{\link{LDA_TS}}. -} -\examples{ - LDA_TS_control() - -} diff --git a/man/LDA_control.Rd b/man/LDA_control.Rd deleted file mode 100644 index 411c4e4d..00000000 --- a/man/LDA_control.Rd +++ /dev/null @@ -1,54 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA.R -\name{LDA_control} -\alias{LDA_control} -\title{Create the controls list for the Time Series model} -\usage{ -LDA_control(model = topicmodels_LDA, model_args = list(method = "VEM", - seeded = TRUE), measurer = AIC, measurer_args = list(NULL), - selector = which.min, selector_args = list(NULL), nsubsets = 1, - subset_rule = NULL, soften = TRUE, quiet = FALSE, ...) -} -\arguments{ -\item{model}{Main LDA \code{function}.} - -\item{model_args}{\code{list} of (named) arguments to be used in -\code{model} via \code{\link{LDA_call}}.} - -\item{measurer}{\code{function} used in evaluation of the LDA -models; \code{measurer} creates a value for each model.} - -\item{measurer_args}{\code{list} of (named) arguments to be used in -\code{measurer} via \code{\link{do.call}}.} - -\item{selector}{\code{function} usde in evaluation of the LDA -models; \code{selector} operates on the values to choose the models.} - -\item{selector_args}{\code{list} of (named) arguments to be used in -\code{selector} via \code{\link{do.call}}.} - -\item{nsubsets}{Number of data subsets.} - -\item{subset_rule}{\code{function} used to subset the data.} - -\item{soften}{\code{logical} indicator of whether the model should error -softly or if errors should trigger a full-stop to the pipeline.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control the LDA model fit occurring within - \code{\link{LDA}}. -} -\examples{ - LDA_control() - -} diff --git a/man/TS.Rd b/man/TS.Rd index 45670e9a..e3faa01d 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -9,6 +9,7 @@ \alias{package_TS} \alias{select_TS} \alias{measure_TS} +\alias{TS_control} \title{Conduct a Bayesian compositional Time Series analysis} \usage{ TS(LDAs, data, formulas = ~1, nchangepoints = 0, timename = "time", @@ -28,6 +29,14 @@ package_TS(TSs) select_TS(TSs) measure_TS(TSs) + +TS_control(model = sequential_TS, model_args = list(control = + sequential_TS_control()), response = multinom_TS, + response_args = list(control = multinom_TS_control()), + method = ldats_classic, method_args = list(control = + ldats_classic_control()), summary_prob = 0.95, measurer = AIC, + measurer_args = list(NULL), selector = which.min, + selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated @@ -79,6 +88,52 @@ Time Series model. Values not input assume defaults set by \item{TS, TSs}{time series model \code{list} (\code{TS}) or a \code{list} of many time series model \code{list}s (\code{TSs}).} +\item{response}{\code{character} element indicating the response variable +used in the time series. \cr \cr +Must have a corresponding \code{_TS} function.} + +\item{response_args}{\code{list} of (named) arguments to be used in +\code{response} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_TS_control} function like +\code{\link{multinom_TS_control}}.} + +\item{method}{\code{function} used to drive the sampler of the TS +models; \code{method} defines and operates the computational procedure. +\cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{method_args}{\code{list} of (named) arguments to be used in +\code{method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{measurer}{\code{function} used in evaluation of the TS +models; \code{measurer} creates a value for each model.} + +\item{measurer_args}{\code{list} of (named) arguments to be used in +\code{measurer} via \code{\link{do.call}}.} + +\item{selector}{\code{function} usde in evaluation of the TS +models; \code{selector} operates on the values to choose the models.} + +\item{selector_args}{\code{list} of (named) arguments to be used in +\code{selector} via \code{\link{do.call}}.} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} + \item{selected_TSs}{\code{list} of selected time series model \code{list}s.} } \value{ @@ -86,8 +141,10 @@ of many time series model \code{list}s (\code{TSs}).} selected and all results from \code{\link{TS_call}} applied for each model on each LDA model input as well as the control \code{list} used to fit the model. \cr \cr - \code{prep_TS_models}: \code{list} of \code{list}s, each of which is a + \code{prepare_TS}: \code{list} of \code{list}s, each of which is a preliminary model object for a Time Series model fit. \cr \cr + \code{TS_control}: \code{list} of named control elements for + model fitting. \code{measure_TS}: \code{vector} of values corresponding to the model evaluations. \cr \cr \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr @@ -107,6 +164,8 @@ Analyze compositional Time Series models using Bayesian \emph{et al.} 2018). \cr \cr \code{prepare_TS} pre-prepares the TS model objects for simpler use within the subfunctions. \cr \cr + \code{TS_control} defines and creates the control \code{list} for the TS + model running. \cr \cr \code{run_TS} runs (via \code{\link{TS_call}}) all TS models as set up by \code{prep_TS_models}. \cr \cr \code{TS_call} runs (via \code{\link{do.call}}) a single TS model diff --git a/man/TS_control.Rd b/man/TS_control.Rd deleted file mode 100644 index e686fdaf..00000000 --- a/man/TS_control.Rd +++ /dev/null @@ -1,72 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS.R -\name{TS_control} -\alias{TS_control} -\title{Create the controls list for the Time Series model} -\usage{ -TS_control(model = sequential_TS, model_args = list(control = - sequential_TS_control()), response = multinom_TS, - response_args = list(control = multinom_TS_control()), - method = ldats_classic, method_args = list(control = - ldats_classic_control()), summary_prob = 0.95, measurer = AIC, - measurer_args = list(NULL), selector = which.min, - selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...) -} -\arguments{ -\item{response}{\code{character} element indicating the response variable -used in the time series. \cr \cr -Must have a corresponding \code{_TS} function.} - -\item{response_args}{\code{list} of (named) arguments to be used in -\code{response} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_TS_control} function like -\code{\link{multinom_TS_control}}.} - -\item{method}{\code{function} used to drive the sampler of the TS -models; \code{method} defines and operates the computational procedure. -\cr \cr -Current pre-built options include \code{\link{ldats_classic}}.} - -\item{method_args}{\code{list} of (named) arguments to be used in -\code{method} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_control} function like -\code{\link{ldats_classic_control}}.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}).} - -\item{measurer}{\code{function} used in evaluation of the TS -models; \code{measurer} creates a value for each model.} - -\item{measurer_args}{\code{list} of (named) arguments to be used in -\code{measurer} via \code{\link{do.call}}.} - -\item{selector}{\code{function} usde in evaluation of the TS -models; \code{selector} operates on the values to choose the models.} - -\item{selector_args}{\code{list} of (named) arguments to be used in -\code{selector} via \code{\link{do.call}}.} - -\item{soften}{\code{logical} indicator of whether the model should error -softly or if errors should trigger a full-stop to the pipeline.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -Creation and definition of a \code{list} to control the - time series model fit occurring within \code{\link{TS}}. -} -\examples{ - TS_control() - -} diff --git a/man/count_trips.Rd b/man/count_trips.Rd deleted file mode 100644 index 217fc98b..00000000 --- a/man/count_trips.Rd +++ /dev/null @@ -1,35 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{count_trips} -\alias{count_trips} -\title{Count trips of the ptMCMC particles in a classic_ldats estimation} -\usage{ -count_trips(ids) -} -\arguments{ -\item{ids}{\code{matrix} of identifiers of the particles in each chain for -each iteration of the ptMCMC algorithm (rows: chains, -columns: iterations).} -} -\value{ -\code{list} of [1] \code{vector} of within particle trip counts - (\code{$trip_counts}), and [2] \code{vector} of within-particle average - trip rates (\code{$trip_rates}). -} -\description{ -Count the full trips (from one extreme temperature chain to - the other and back again; Katzgraber \emph{et al.} 2006) for each of the - ptMCMC particles, as identified by their id on initialization. - \cr \cr - This function was designed to work within \code{\link{TS}} and process - the output of \code{\link{est_changepoints}} as a component of - \code{\link{diagnose_ptMCMC}}, but has been generalized - and would work with any output from a ptMCMC as long as \code{ids} - is formatted properly. -} -\references{ -Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. - Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of - Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 - \href{https://bit.ly/2LICGXh}{link}. -} diff --git a/man/ldats_classic.Rd b/man/ldats_classic.Rd index 9c79a8d5..75fd75aa 100644 --- a/man/ldats_classic.Rd +++ b/man/ldats_classic.Rd @@ -2,9 +2,62 @@ % Please edit documentation in R/TS_methods.R \name{ldats_classic} \alias{ldats_classic} +\alias{count_trips} +\alias{swap_chains} +\alias{ldats_classic_control} +\alias{prep_cpts} +\alias{update_cpts} +\alias{prep_temp_sequence} +\alias{prep_saves} +\alias{update_saves} +\alias{process_saves} +\alias{prep_ptMCMC_inputs} +\alias{prep_proposal_dist} +\alias{prep_ids} +\alias{update_ids} +\alias{propose_step} +\alias{eval_step} +\alias{take_step} +\alias{proposed_step_mods} \title{Estimate changepoints using the LDATS classic ptMCMC method} \usage{ ldats_classic(TS, control = list()) + +count_trips(ids) + +swap_chains(chainsin, inputs, ids) + +ldats_classic_control(ntemps = 6, penultimate_temp = 2^6, + ultimate_temp = 1e+10, q = 0, nit = 10000, magnitude = 12, + burnin = 0, thin_frac = 1, memoise = TRUE, quiet = FALSE) + +prep_cpts(TS) + +update_cpts(cpts, swaps) + +prep_temp_sequence(TS) + +prep_saves(TS) + +update_saves(i, saves, steps, swaps) + +process_saves(saves, TS) + +prep_ptMCMC_inputs(TS) + +prep_proposal_dist(TS) + +prep_ids(TS) + +update_ids(ids, swaps) + +propose_step(TS, i, cpts, inputs) + +eval_step(i, cpts, prop_step, inputs) + +take_step(cpts, prop_step, accept_step) + +proposed_step_mods(TS, prop_changepts, inputs) } \arguments{ \item{TS}{\code{list} time series model object.} @@ -12,15 +65,171 @@ ldats_classic(TS, control = list()) \item{control}{A \code{list} of parameters to control the fitting of the time series model via the LDATS classic ptMCMC method. Values not input assume defaults set by \code{\link{ldats_classic_control}}.} + +\item{ids}{\code{vector} (for \code{update_ids}, \code{swap_chains}) +of the existing chain ids or \code{matrix} (rows: chains, +columns: iterations; for \code{count_trips}) +of identifiers of the particles in each chain for +each iteration of the ptMCMC algorithm.} + +\item{chainsin}{Chain configuration to be evaluated for swapping.} + +\item{inputs}{\code{list} of static inputs for use within the ptMCMC +algorithm.} + +\item{ntemps}{\code{integer} number of temperatures (chains) to use in the +ptMCMC algorithm.} + +\item{penultimate_temp}{Penultimate temperature in the ptMCMC sequence.} + +\item{ultimate_temp}{Ultimate temperature in the ptMCMC sequence.} + +\item{q}{Exponent controlling the ptMCMC temperature sequence from the +focal chain (reference with temperature = 1) to the penultimate chain. 0 +(default) implies a geometric sequence. 1 implies squaring before +exponentiating.} + +\item{nit}{\code{integer} number of iterations (steps) used in the ptMCMC +algorithm.} + +\item{magnitude}{Average magnitude (defining a geometric distribution) +for the proposed step size in the ptMCMC algorithm.} + +\item{burnin}{\code{integer} number of iterations to remove from the +beginning of the ptMCMC algorithm.} + +\item{thin_frac}{Fraction of iterations to retain, must be \eqn{(0, 1]}, +and the default value of 1 represents no thinning.} + +\item{memoise}{\code{logical} indicator of whether the response +function should be memoised (via \code{\link[memoise]{memoise}}).} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{cpts}{\code{matrix} of change point locations across chains.} + +\item{swaps}{Chain configuration after among-temperature swaps.} + +\item{i}{\code{integer} iteration index.} + +\item{saves}{The existing list of saved data objects.} + +\item{steps}{Chain configuration after within-temperature steps.} + +\item{prop_step}{Proposed step output from \code{propose_step}.} + +\item{accept_step}{\code{logical} indicator of acceptance of each chain's +proposed step.} + +\item{prop_changepts}{\code{matrix} of proposed change points across +chains.} } \value{ -\code{list} of changepoint locations, log likelihoods, and model - diagnostics. +\code{ldats_classic}: \code{list} of changepoint locations, log + likelihoods, and model diagnostics. \cr \cr + \code{ldats_classic_control}: \code{list} of named control elements + for use in \code{\link{ldats_classic}}. \cr \cr + \code{prep_ptMCMC_inputs}: \code{list} containing the static + inputs for use within the ptMCMC algorithm for estimating change + points. \cr \cr + \code{prep_temp_sequence}: \code{vector} of temperatures. + \code{prep_proposal_dist}: \code{list} of two \code{matrix} elements: + [1] the size of the proposed step for each iteration of each chain and + [2] the identity of the change point location to be shifted by the + step for each iteration of each chain. + \code{prep_ids},\code{update_ids}: \code{vector} of ids. \cr \cr + \code{prep_cpts},\code{update_cpts}: \code{list} of [1] \code{matrix} + of change points (rows) for each temperature (columns) and [2] + \code{vector} of log-likelihood values for each of the chains. \cr \cr + \code{prep_saves},\code{update_saves},\code{process_saves}: \code{list} + of ptMCMC objects: change points (\code{$cpts}), + log-likelihoods (\code{$lls}), chain ids (\code{$ids}), + step acceptances (\code{$step_accepts}), and swap acceptances + (\code{$swap_accepts}). \cr \cr + \code{step_chains}: \code{list} of change points, log-likelihoods, + and logical indicators of acceptance for each chain. \cr \cr + \code{propose_step}: \code{list} of change points and + log-likelihood values for the proposal. \cr \cr + \code{eval_step}: \code{logical} vector indicating if each + chain's proposal was accepted. \cr \cr + \code{take_step}: \code{list} of change points, log-likelihoods, + and logical indicators of acceptance for each chain. \cr \cr + \code{swap_chains}: \code{list} of updated change points, + log-likelihoods, and chain ids, as well as a \code{vector} of + acceptance indicators for each swap. \cr \cr + \code{proposed_step_mods}: \code{list} of models associated with the + proposed step, with an element for each chain. \cr \cr + \code{count_trips}: \code{list} of [1] \code{vector} of within particle + trip counts (\code{$trip_counts}), and [2] \code{vector} of + within-particle average trip rates (\code{$trip_rates}). } \description{ Uses the LDATS classic parallel tempering Markov Chain Monte - Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint - model, following Christensen \emph{et al.} (2018). + Carlo (ptMCMC) methods (Earl and Deem 2005) to fit a changepoint + model, following Christensen \emph{et al.} (2018). \cr \cr + \code{ldats_classic} is the top-level function for the sampler. \cr \cr + \code{ldats_classic_control} defines and creates a control \code{list} + for use with \code{\link{ldats_classic}}. + \code{prep_ptMCMC_inputs} packages the static inputs (controls and + data structures) used by the ptMCMC algorithm in the context of + estimating change points. + \code{prep_proposal_dist} prep-calculates the proposal distribution + for the ptMCMC algorithm in order to decrease computation time. + The proposal distribution is a joint of three distributions: + [1] a multinomial distribution selecting among the change points within + the chain, [2] a binomial distribution selecting the direction of the + step of the change point (earlier or later in the time series), and + [3] a geometric distribution selecting the magnitude of the step. + \code{prep_ids} creates the active vector of identities (ids) for each + of the chains in the ptMCMC algorithm, which are used to track trips + of the particles among chains. \cr \cr + \code{update_ids} updates the active vector of identities (ids) for + each of the chains in the ptMCMC algorithm after each iteration. + \cr \cr + \code{prep_cpts} initializes each chain using a draw from the available + times (i.e. assuming a uniform prior), the best fit (by likelihood) + draw is put in the focal chain with each subsequently worse fit placed + into the subsequently hotter chain. \cr \cr + \code{update_cpts} updates the change points after every iteration in + the ptMCMC algorithm. \cr \cr + \code{prep_saves} creates the data structure used to save the + output from each iteration of the ptMCMC algorithm. \cr \cr + \code{update_saves} adds to the data structure after each iteration. + \cr \cr + \code{process_saves} processes (burn-in iterations are dropped and the + remaining iterations are thinned) the saved data objects after the + ptMCMC is complete. \cr \cr + \code{prep_temp_sequence} creates the series of temperatures used in the + ptMCMC algorithm. \cr \cr + \code{step_chains} steps the chains forward one iteration + of the within-chain component of the ptMCMC algorithm. \cr \cr + \code{prop_step} makes the proposal for the next step. \cr \cr + \code{eval_step} evaluates the proposa. \cr \cr + \code{take_step} updates the configuration. \cr \cr + \code{proposed_step_mods} proposes the models for all chains in a given + step of the sampler. \cr \cr + \code{swap_chains} handles the among-chain swapping based on + temperatures and likelihood differentials. \cr \cr + \code{count_trips} counts the full trips (from one extreme temperature + chain to the other and back again; Katzgraber \emph{et al.} 2006) for + each of the ptMCMC particles, as identified by their id on + initialization. +} +\details{ +For each iteration of the ptMCMC algorithm, all of the chains + have the potential to take a step. The possible step is proposed under + a proposal distribution (here for change points we use a symmetric + geometric distribution), the proposed step is then evaluated and either + accepted or not (following the Metropolis-Hastings rule; Metropolis, + \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then + accordingly taken or not (the configurations are updated). \cr \cr + The ptMCMC algorithm couples the chains (which are + taking their own walks on the distribution surface) through "swaps", + where neighboring chains exchange configurations (Geyer 1991, Falcioni + and Deem 1999) following the Metropolis criterion (Metropolis + \emph{et al.} 1953). This allows them to share information and search the + surface in combination (Earl and Deem 2005). } \references{ Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. @@ -32,4 +241,32 @@ Christensen, E., D. J. Harris, and S. K. M. Ernest. 2018. applications, and new perspectives. \emph{Physical Chemistry Chemical Physics} \strong{7}: 3910-3916. \href{https://doi.org/10.1039/B509983H}{link}. + + Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for + zeolite structure solution. \emph{Journal of Chemical Physics} + \strong{110}: 1754-1766. + \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. + + Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In + Computing Science and Statistics: Proceedings of the 23rd Symposium on + the Interface}. pp 156-163. American Statistical Association, New York, + USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. + + Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. + 2018. Evaluation of parallel tempering to accelerate Bayesian parameter + estimation in systems biology. + \href{https://arxiv.org/abs/1801.09831}{link}. + + Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains + and their applications. \emph{Biometrika} \strong{57}:97-109. + \href{https://doi.org/10.2307/2334940}{link}.#' + Katzgraber, H. G., S. Trebst, D. A. Huse. And M. Troyer. 2006. + Feedback-optimized parallel tempering Monte Carlo. \emph{Journal of + Statistical Mechanics: Theory and Experiment} \strong{3}:P03018 + \href{https://bit.ly/2LICGXh}{link}. + + Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. + Teller. 1953. Equations of state calculations by fast computing machines. + \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. + \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. } diff --git a/man/ldats_classic_control.Rd b/man/ldats_classic_control.Rd deleted file mode 100644 index e255d7e7..00000000 --- a/man/ldats_classic_control.Rd +++ /dev/null @@ -1,49 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{ldats_classic_control} -\alias{ldats_classic_control} -\title{Create the controls list for the classic LDATS ptMCMC sampler} -\usage{ -ldats_classic_control(ntemps = 6, penultimate_temp = 2^6, - ultimate_temp = 1e+10, q = 0, nit = 10000, magnitude = 12, - burnin = 0, thin_frac = 1, memoise = TRUE, quiet = FALSE) -} -\arguments{ -\item{ntemps}{\code{integer} number of temperatures (chains) to use in the -ptMCMC algorithm.} - -\item{penultimate_temp}{Penultimate temperature in the ptMCMC sequence.} - -\item{ultimate_temp}{Ultimate temperature in the ptMCMC sequence.} - -\item{q}{Exponent controlling the ptMCMC temperature sequence from the -focal chain (reference with temperature = 1) to the penultimate chain. 0 -(default) implies a geometric sequence. 1 implies squaring before -exponentiating.} - -\item{nit}{\code{integer} number of iterations (steps) used in the ptMCMC -algorithm.} - -\item{magnitude}{Average magnitude (defining a geometric distribution) -for the proposed step size in the ptMCMC algorithm.} - -\item{burnin}{\code{integer} number of iterations to remove from the -beginning of the ptMCMC algorithm.} - -\item{thin_frac}{Fraction of iterations to retain, must be \eqn{(0, 1]}, -and the default value of 1 represents no thinning.} - -\item{memoise}{\code{logical} indicator of whether the response -function should be memoised (via \code{\link[memoise]{memoise}}).} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control time series model fitting via the - \code{\link{ldats_classic}} sampler. -} diff --git a/man/package_LDA_TS.Rd b/man/package_LDA_TS.Rd deleted file mode 100644 index b46422fc..00000000 --- a/man/package_LDA_TS.Rd +++ /dev/null @@ -1,30 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS.R -\name{package_LDA_TS} -\alias{package_LDA_TS} -\title{Package LDA and TS model outputs} -\usage{ -package_LDA_TS(LDAs, TSs, control) -} -\arguments{ -\item{LDAs}{\code{LDA_set} \code{list} of selected and all LDAs from -\code{\link{LDA}}.} - -\item{TSs}{\code{TS_set} \code{list} of selected and all TSs from -\code{\link{TS}}.} - -\item{control}{A \code{list} of parameters to control the fitting of the -LDATS model. Values not input assume defaults set by -\code{\link{LDA_TS_control}}.} -} -\value{ -\code{LDA_TS} \code{list} with all fitted LDA and TS models and - selected models specifically as elements named - \code{"LDA models"} (from \code{\link{LDA_set}}), - \code{"Selected LDA models"} (from \code{\link{select_LDA}}), - \code{"TS models"} (from \code{\link{TS_on_LDA}}), and - \code{"Selected TS models"} (from \code{\link{select_TS}}) elements. -} -\description{ -Combine the results from each model component. -} diff --git a/man/prep_cpts.Rd b/man/prep_cpts.Rd deleted file mode 100644 index 83523862..00000000 --- a/man/prep_cpts.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_cpts} -\alias{prep_cpts} -\alias{update_cpts} -\title{Initialize and update the change point matrix used in the LDATS - classic ptMCMC algorithm} -\usage{ -prep_cpts(TS) - -update_cpts(cpts, swaps) -} -\arguments{ -\item{TS}{\code{list} time series model object.} - -\item{cpts}{The existing matrix of change points.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -\code{list} of [1] \code{matrix} of change points (rows) for - each temperature (columns) and [2] \code{vector} of log-likelihood - values for each of the chains. -} -\description{ -Each of the chains is initialized by \code{prep_cpts} using a - draw from the available times (i.e. assuming a uniform prior), the best - fit (by likelihood) draw is put in the focal chain with each subsequently - worse fit placed into the subsequently hotter chain. \code{update_cpts} - updates the change points after every iteration in the ptMCMC algorithm. -} diff --git a/man/prep_ids.Rd b/man/prep_ids.Rd deleted file mode 100644 index dbf2c54c..00000000 --- a/man/prep_ids.Rd +++ /dev/null @@ -1,33 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_ids} -\alias{prep_ids} -\alias{update_ids} -\title{Initialize and update the chain ids throughout the LDATS classic - ptMCMC algorithm} -\usage{ -prep_ids(TS) - -update_ids(ids, swaps) -} -\arguments{ -\item{TS}{\code{list} time series model object.} - -\item{ids}{The existing vector of chain ids.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -The vector of chain ids. -} -\description{ -\code{prep_ids} creates and \code{update_ids} updates - the active vector of identities (ids) for each of the chains in the - ptMCMC algorithm. These ids are used to track trips of the particles - among chains. - \cr \cr - These functions were designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}, but have been generalized - and would work within any general ptMCMC as long as \code{control}, - \code{ids}, and \code{swaps} are formatted properly. -} diff --git a/man/prep_proposal_dist.Rd b/man/prep_proposal_dist.Rd deleted file mode 100644 index 864aeed4..00000000 --- a/man/prep_proposal_dist.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_proposal_dist} -\alias{prep_proposal_dist} -\title{Pre-calculate the change point proposal distribution for the ptMCMC - algorithm} -\usage{ -prep_proposal_dist(TS) -} -\arguments{ -\item{TS}{\code{list} time series model object.} -} -\value{ -\code{list} of two \code{matrix} elements: [1] the size of the - proposed step for each iteration of each chain and [2] the identity of - the change point location to be shifted by the step for each iteration of - each chain. -} -\description{ -Calculate the proposal distribution in advance of actually - running the ptMCMC algorithm in order to decrease computation time. - The proposal distribution is a joint of three distributions: - [1] a multinomial distribution selecting among the change points within - the chain, [2] a binomial distribution selecting the direction of the - step of the change point (earlier or later in the time series), and - [3] a geometric distribution selecting the magnitude of the step. -} diff --git a/man/prep_ptMCMC_inputs.Rd b/man/prep_ptMCMC_inputs.Rd deleted file mode 100644 index 01d2e99e..00000000 --- a/man/prep_ptMCMC_inputs.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_ptMCMC_inputs} -\alias{prep_ptMCMC_inputs} -\title{Prepare the inputs for the ptMCMC algorithm estimation of - change points} -\usage{ -prep_ptMCMC_inputs(TS) -} -\arguments{ -\item{TS}{\code{list} time series model object.} -} -\value{ -\code{list} containing the static - inputs for use within the ptMCMC algorithm for estimating change points. -} -\description{ -Package the static inputs (controls and data structures) used - by the ptMCMC algorithm in the context of estimating change points. - \cr \cr - This function was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. It is still hardcoded to do - so, but has the capacity to be generalized to work with any estimation - via ptMCMC with additional coding work. -} diff --git a/man/prep_saves.Rd b/man/prep_saves.Rd deleted file mode 100644 index 59354a3b..00000000 --- a/man/prep_saves.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_saves} -\alias{prep_saves} -\alias{update_saves} -\alias{process_saves} -\title{Prepare and update the data structures to save the LDATS classic - ptMCMC output} -\usage{ -prep_saves(TS) - -update_saves(i, saves, steps, swaps) - -process_saves(saves, TS) -} -\arguments{ -\item{TS}{\code{list} time series model object.} - -\item{i}{\code{integer} iteration index.} - -\item{saves}{The existing list of saved data objects.} - -\item{steps}{Chain configuration after within-temperature steps.} - -\item{swaps}{Chain configuration after among-temperature swaps.} -} -\value{ -\code{list} of ptMCMC objects: change points (\code{$cpts}), - log-likelihoods (\code{$lls}), chain ids (\code{$ids}), step acceptances - (\code{$step_accepts}), and swap acceptances (\code{$swap_accepts}). -} -\description{ -\code{prep_saves} creates the data structure used to save the - output from each iteration of the ptMCMC algorithm, which is added via - \code{update_saves}. Once the ptMCMC is complete, the saved data objects - are then processed (burn-in iterations are dropped and the remaining - iterations are thinned) via \code{process_saves}. - \cr \cr - This set of functions was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. They are still hardcoded to - do so, but have the capacity to be generalized to work with any - estimation via ptMCMC with additional coding work. -} diff --git a/man/prep_temp_sequence.Rd b/man/prep_temp_sequence.Rd deleted file mode 100644 index 2799c19e..00000000 --- a/man/prep_temp_sequence.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{prep_temp_sequence} -\alias{prep_temp_sequence} -\title{Prepare the ptMCMC temperature sequence for the LDATS classic - method} -\usage{ -prep_temp_sequence(TS) -} -\arguments{ -\item{TS}{\code{list} time series model object.} -} -\value{ -\code{vector} of temperatures. -} -\description{ -Create the series of temperatures used in the ptMCMC - algorithm. - \cr \cr - This function was designed to work within \code{\link{TS}} and - \code{\link{est_changepoints}} specifically, but has been generalized - and would work with any ptMCMC model as long as \code{control} - includes the relevant control parameters. -} -\examples{ - prep_temp_sequence() - -} diff --git a/man/proposed_step_mods.Rd b/man/proposed_step_mods.Rd deleted file mode 100644 index e73420fa..00000000 --- a/man/proposed_step_mods.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{proposed_step_mods} -\alias{proposed_step_mods} -\title{Fit the chunk-level models to a time series, given a set of - proposed change points within the ptMCMC algorithm} -\usage{ -proposed_step_mods(TS, prop_changepts, inputs) -} -\arguments{ -\item{prop_changepts}{\code{matrix} of proposed change points across -chains.} - -\item{inputs}{Class \code{ptMCMC_inputs} list, containing the static inputs -for use within the ptMCMC algorithm.} -} -\value{ -List of models associated with the proposed step, with an element - for each chain. -} -\description{ -This function wraps around \code{TS_memo} - (optionally memoised \code{\link{multinom_TS}}) to provide a - simpler interface within the ptMCMC algorithm and is implemented within - \code{\link{propose_step}}. -} diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index 44ee1d64..d3f3d00c 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -5,6 +5,11 @@ \alias{package_sequential_TS} \alias{est_changepoints} \alias{est_regressors} +\alias{sequential_TS_control} +\alias{summarize_etas} +\alias{measure_eta_vcov} +\alias{summarize_rhos} +\alias{measure_rho_vcov} \title{Estimate a Time Series model sequentially} \usage{ sequential_TS(TS, control = list()) @@ -14,6 +19,18 @@ package_sequential_TS(TS, rho_dist, eta_dist) est_changepoints(TS) est_regressors(rho_dist, TS) + +sequential_TS_control(method = ldats_classic, + method_args = ldats_classic_control(), summary_prob = 0.95, + soften = TRUE, quiet = FALSE, ...) + +summarize_etas(etas, TS) + +measure_eta_vcov(etas) + +summarize_rhos(rhos, TS) + +measure_rho_vcov(rhos) } \arguments{ \item{TS}{Time series model \code{list}.} @@ -29,14 +46,44 @@ change point locations (unless \code{nchangepoints} is 0, then \item{eta_dist}{\code{matrix} of draws (rows) from the marginal posteriors of the coefficients across the segments (columns), as estimated by \code{\link{est_regressors}}.} + +\item{method}{\code{function} used to drive the sampler of the TS +models; \code{method} defines and operates the computational procedure. +\cr \cr +Current pre-built options include \code{\link{ldats_classic}}.} + +\item{method_args}{\code{list} of (named) arguments to be used in +\code{method} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_control} function like +\code{\link{ldats_classic_control}}.} + +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} + +\item{etas}{\code{matrix} of regressors (columns) across iterations of the +sampler (rows), as returned from \code{\link{est_regressors}}.} + +\item{rhos}{\code{matrix} of change point locations (columns) across +iterations of the sampler (rows) or \code{NULL} if no change points are +in the model, as returned from \code{\link{est_change points}}.} + +\item{response}{\code{character} element indicating the response variable +used in the time series. \cr \cr +Must have a corresponding \code{_TS} function.} } \value{ -\code{est_changepoints}: \code{list} of saved data objects from the - estimation of change point locations, uunless \code{nchangepoints} - is 0, then \code{NULL}. \cr \cr - \code{est_regressors}: \code{matrix} of draws (rows) from the marginal - posteriors of the coefficients across the segments (columns). \cr \cr - \code{sequential_TS} and \code{package_sequential_TS}: +\code{sequential_TS} and \code{package_sequential_TS}: \code{TS}-class list containing the following elements, many of which are hidden for \code{print}ing, but are accessible: \describe{ @@ -72,7 +119,26 @@ of the coefficients across the segments (columns), as estimated by (\code{lls}).} \item{nparams}{Total number of parameters in the full model, including the change point locations and regressors.} - } + } \cr \cr + \code{sequential_TS_control}: \code{list} of named control elements for + sequential model fitting. + \code{est_changepoints}: \code{list} of saved data objects from the + estimation of change point locations, uunless \code{nchangepoints} + is 0, then \code{NULL}. \cr \cr + \code{est_regressors}: \code{matrix} of draws (rows) from the marginal + posteriors of the coefficients across the segments (columns). \cr \cr + \code{summarize_etas}: table of summary statistics for chunk-level + regressors including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each regressor. \cr \cr + \code{measure_eta_vcov}: variance-covariance matrix for chunk-level + regressors. \cr \cr + \code{summarize_rhos}: table of summary statistics for change point + locations including mean, median, mode, posterior interval, standard + deviation, MCMC error, autocorrelation, and effective sample size for + each change point location. \cr \cr + \code{measure_rho_vcov}: variance-covariance matrix for change + point locations. } \description{ This set of functions estimates the Time Series model @@ -83,6 +149,8 @@ This set of functions estimates the Time Series model regressor values unconditional on change point locations. \cr \cr \code{sequential_TS} combines each stage of the model estimation and packages the model results in a consistent output. \cr \cr + \code{sequential_TS_control} defines and creates the control \code{list} + used to fit the sequential Time Series model. \code{est_changepoints} estimates the change point location distributions for multinomial Time Series analyses. \cr \cr \code{est_regressors} uses the marginal posterior distributions of @@ -95,6 +163,14 @@ This set of functions estimates the Time Series model \code{package_sequential_TS} calculates relevant summaries for the run of a sequenial Time Series model within \code{\link{sequential_TS}} and packages the output as a \code{TS}-class object. \cr \cr + \code{summarize_etas} calculates summary statistics for each + of the chunk-level regressors. \cr \cr + \code{measure_ets_vcov} generates the variance-covariance matrix for + the regressors. \cr \cr + \code{summarize_rho} calculates summary statistics for each + of the change point locations. \cr \cr + \code{measure_rho_vcov} generates the variance-covariance matrix for the + change point locations. } \details{ The general approach follows that of Western and Kleykamp diff --git a/man/sequential_TS_control.Rd b/man/sequential_TS_control.Rd deleted file mode 100644 index c7db986d..00000000 --- a/man/sequential_TS_control.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_models.R -\name{sequential_TS_control} -\alias{sequential_TS_control} -\title{Create the controls list for a sequential Time Series model} -\usage{ -sequential_TS_control(method = ldats_classic, - method_args = ldats_classic_control(), summary_prob = 0.95, - soften = TRUE, quiet = FALSE, ...) -} -\arguments{ -\item{method}{\code{function} used to drive the sampler of the TS -models; \code{method} defines and operates the computational procedure. -\cr \cr -Current pre-built options include \code{\link{ldats_classic}}.} - -\item{method_args}{\code{list} of (named) arguments to be used in -\code{method} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_control} function like -\code{\link{ldats_classic_control}}.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}).} - -\item{soften}{\code{logical} indicator of whether the model should error -softly or if errors should trigger a full-stop to the pipeline.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} - -\item{response}{\code{character} element indicating the response variable -used in the time series. \cr \cr -Must have a corresponding \code{_TS} function.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control the time series model fit occurring within - \code{\link{sequential_TS}}. -} diff --git a/man/step_chains.Rd b/man/step_chains.Rd deleted file mode 100644 index b9b5b88b..00000000 --- a/man/step_chains.Rd +++ /dev/null @@ -1,76 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{step_chains} -\alias{step_chains} -\alias{propose_step} -\alias{eval_step} -\alias{take_step} -\title{Conduct a within-chain step of the ptMCMC algorithm} -\usage{ -step_chains(TS, i, cpts, inputs) - -propose_step(TS, i, cpts, inputs) - -eval_step(i, cpts, prop_step, inputs) - -take_step(cpts, prop_step, accept_step) -} -\arguments{ -\item{i}{\code{integer} iteration index.} - -\item{cpts}{\code{matrix} of change point locations across chains.} - -\item{inputs}{Class \code{ptMCMC_inputs} \code{list}, containing the -static inputs for use within the ptMCMC algorithm.} - -\item{prop_step}{Proposed step output from \code{propose_step}.} - -\item{accept_step}{\code{logical} indicator of acceptance of each chain's -proposed step.} -} -\value{ -\code{step_chains}: \code{list} of change points, log-likelihoods, - and logical indicators of acceptance for each chain. \cr \cr - \code{propose_step}: \code{list} of change points and - log-likelihood values for the proposal. \cr \cr - \code{eval_step}: \code{logical} vector indicating if each - chain's proposal was accepted. \cr \cr - \code{take_step}: \code{list} of change points, log-likelihoods, - and logical indicators of acceptance for each chain. -} -\description{ -This set of functions steps the chains forward one iteration - of the within-chain component of the ptMCMC algorithm. \code{step_chains} - is the main function, comprised of a proposal (made by \code{prop_step}), - an evaluation of that proposal (made by \code{eval_step}), and then an - update of the configuration (made by \code{take_step}). - \cr \cr - This set of functions was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. They are still hardcoded to - do so, but have the capacity to be generalized to work with any - estimation via ptMCMC with additional coding work. -} -\details{ -For each iteration of the ptMCMC algorithm, all of the chains - have the potential to take a step. The possible step is proposed under - a proposal distribution (here for change points we use a symmetric - geometric distribution), the proposed step is then evaluated and either - accepted or not (following the Metropolis-Hastings rule; Metropolis, - \emph{et al.} 1953, Hasting 1960, Gupta \emph{et al.} 2018), and then - accordingly taken or not (the configurations are updated). -} -\references{ -Gupta, S., L. Hainsworth, J. S. Hogg, R. E. C. Lee, and J. R. Faeder. - 2018. Evaluation of parallel tempering to accelerate Bayesian parameter - estimation in systems biology. - \href{https://arxiv.org/abs/1801.09831}{link}. - - Hastings, W. K. 1970. Monte Carlo sampling methods using Markov Chains - and their applications. \emph{Biometrika} \strong{57}:97-109. - \href{https://doi.org/10.2307/2334940}{link}. - - Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. - Teller. 1953. Equations of state calculations by fast computing machines. - \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. - \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -} diff --git a/man/summarize_sequential_TS.Rd b/man/summarize_sequential_TS.Rd deleted file mode 100644 index a9419a1e..00000000 --- a/man/summarize_sequential_TS.Rd +++ /dev/null @@ -1,53 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_models.R -\name{summarize_sequential_TS} -\alias{summarize_sequential_TS} -\alias{summarize_etas} -\alias{measure_eta_vcov} -\alias{summarize_rhos} -\alias{measure_rho_vcov} -\title{Summarize the change point (rho) and regressor (eta) distributions - of a sequential time series model} -\usage{ -summarize_etas(etas, TS) - -measure_eta_vcov(etas) - -summarize_rhos(rhos, TS) - -measure_rho_vcov(rhos) -} -\arguments{ -\item{etas}{\code{matrix} of regressors (columns) across iterations of the -sampler (rows), as returned from \code{\link{est_regressors}}.} - -\item{TS}{Time series model \code{list}.} - -\item{rhos}{\code{matrix} of change point locations (columns) across -iterations of the sampler (rows) or \code{NULL} if no change points are -in the model, as returned from \code{\link{est_change points}}.} -} -\value{ -\code{summarize_etas}: table of summary statistics for chunk-level - regressors including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each regressor. \cr \cr - \code{measure_eta_vcov}: variance-covariance matrix for chunk-level - regressors. \cr \cr - \code{summarize_rhos}: table of summary statistics for change point - locations including mean, median, mode, posterior interval, standard - deviation, MCMC error, autocorrelation, and effective sample size for - each change point location. \cr \cr - \code{measure_rho_vcov}: variance-covariance matrix for change - point locations. -} -\description{ -\code{summarize_etas} calculates summary statistics for each - of the chunk-level regressors. \cr \cr - \code{measure_ets_vcov} generates the variance-covariance matrix for - the regressors. \cr \cr - \code{summarize_rho} calculates summary statistics for each - of the change point locations. \cr \cr - \code{measure_rho_vcov} generates the variance-covariance matrix for the - change point locations. -} diff --git a/man/swap_chains.Rd b/man/swap_chains.Rd deleted file mode 100644 index 1f9959e6..00000000 --- a/man/swap_chains.Rd +++ /dev/null @@ -1,58 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_methods.R -\name{swap_chains} -\alias{swap_chains} -\title{Conduct a set of among-chain swaps for the ptMCMC algorithm} -\usage{ -swap_chains(chainsin, inputs, ids) -} -\arguments{ -\item{chainsin}{Chain configuration to be evaluated for swapping.} - -\item{inputs}{Class \code{ptMCMC_inputs} list, containing the static inputs -for use within the ptMCMC algorithm.} - -\item{ids}{The vector of integer chain ids.} -} -\value{ -\code{list} of updated change points, log-likelihoods, and chain - ids, as well as a vector of acceptance indicators for each swap. -} -\description{ -This function handles the among-chain swapping based on - temperatures and likelihood differentials. - \cr \cr - This function was designed to work within \code{\link{TS}} and - specifically \code{\link{est_changepoints}}. It is still hardcoded to do - so, but has the capacity to be generalized to work with any estimation - via ptMCMC with additional coding work. -} -\details{ -The ptMCMC algorithm couples the chains (which are - taking their own walks on the distribution surface) through "swaps", - where neighboring chains exchange configurations (Geyer 1991, Falcioni - and Deem 1999) following the Metropolis criterion (Metropolis - \emph{et al.} 1953). This allows them to share information and search the - surface in combination (Earl and Deem 2005). -} -\references{ -Earl, D. J. and M. W. Deem. 2005. Parallel tempering: theory, - applications, and new perspectives. \emph{Physical Chemistry Chemical - Physics} \strong{7}: 3910-3916. - \href{https://rsc.li/2XkxPCm}{link}. - - Falcioni, M. and M. W. Deem. 1999. A biased Monte Carlo scheme for - zeolite structure solution. \emph{Journal of Chemical Physics} - \strong{110}: 1754-1766. - \href{https://aip.scitation.org/doi/10.1063/1.477812}{link}. - - Geyer, C. J. 1991. Markov Chain Monte Carlo maximum likelihood. \emph{In - Computing Science and Statistics: Proceedings of the 23rd Symposium on - the Interface}. pp 156-163. American Statistical Association, New York, - USA. \href{https://www.stat.umn.edu/geyer/f05/8931/c.pdf}{link}. - - Metropolis, N., A. W. Rosenbluth, M. N. Rosenbluth, A. H. Teller, and E. - Teller. 1953. Equations of state calculations by fast computing machines. - \emph{Journal of Chemical Physics} \strong{21}: 1087-1092. - \href{https://bayes.wustl.edu/Manual/EquationOfState.pdf}{link}. -} From 81a342688799f75f42ee9462d6b518422d53f8f1 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sun, 22 Mar 2020 01:33:05 -0700 Subject: [PATCH 26/43] tidying docs and streamlining --- NAMESPACE | 11 +- R/LDATS.R | 2 +- R/TS_responses.R | 273 +++++++++++++++++++++++++++++++ R/ilr_TS.R | 125 -------------- R/multinom_TS.R | 135 --------------- man/ilr_TS_control.Rd | 23 --- man/multinom_TS.Rd | 45 +++-- man/multinom_TS_control.Rd | 27 --- man/{ilr_TS.Rd => simplex_TS.Rd} | 65 +++++--- notes.R | 11 +- 10 files changed, 356 insertions(+), 361 deletions(-) create mode 100644 R/TS_responses.R delete mode 100644 R/ilr_TS.R delete mode 100644 R/multinom_TS.R delete mode 100644 man/ilr_TS_control.Rd delete mode 100644 man/multinom_TS_control.Rd rename man/{ilr_TS.Rd => simplex_TS.Rd} (51%) diff --git a/NAMESPACE b/NAMESPACE index 5004993d..d0be0cd8 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -40,9 +40,6 @@ export(eta_diagnostics_plots) export(eval_step) export(identity_LDA) export(iftrue) -export(ilr_TS) -export(ilr_TS_chunk) -export(ilr_TS_control) export(ldats_classic) export(ldats_classic_control) export(leave_p_out) @@ -99,6 +96,9 @@ export(set_rho_hist_colors) export(sim_LDA_TS_data) export(sim_LDA_data) export(sim_TS_data) +export(simplex_TS) +export(simplex_TS_chunk) +export(simplex_TS_control) export(softmax) export(summarize_etas) export(summarize_rhos) @@ -119,7 +119,12 @@ importFrom(coda,autocorr) importFrom(coda,autocorr.diag) importFrom(coda,effectiveSize) importFrom(compositions,acomp) +importFrom(compositions,alr) +importFrom(compositions,alrInv) +importFrom(compositions,clr) +importFrom(compositions,clrInv) importFrom(compositions,ilr) +importFrom(compositions,ilrInv) importFrom(digest,digest) importFrom(extraDistr,rcat) importFrom(extraDistr,rdirichlet) diff --git a/R/LDATS.R b/R/LDATS.R index 2849576a..a295853f 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -1,5 +1,5 @@ #' @importFrom coda as.mcmc autocorr autocorr.diag effectiveSize HPDinterval -#' @importFrom compositions acomp ilr +#' @importFrom compositions acomp alr alrInv clr clrInv ilr ilrInv #' @importFrom digest digest #' @importFrom extraDistr rcat rdirichlet #' @importFrom graphics abline axis hist mtext par plot points rect text diff --git a/R/TS_responses.R b/R/TS_responses.R new file mode 100644 index 00000000..b68e4a13 --- /dev/null +++ b/R/TS_responses.R @@ -0,0 +1,273 @@ +#' @title Fit a simplex-based change point Time Series model +#' +#' @description +#' \code{simplex_TS} fits a set of simplex regression models to a time +#' series of compositional data divided into multiple segments (a.k.a. +#' chunks) based on given locations for a set of change points, using +#' e.g., the isometric log ratio (ILR) transformation. \cr \cr +#' \code{simplex_TS_chunk} fits a simplex regression model using, e.g., the +#' ILR transformation to a defined chunk of time (a.k.a. segment) +#' \code{[chunk$start, chunk$end]} within a time series. \cr \cr +#' \code{simplex_TS_control} defines and creates the control \code{list} for +#' fitting. +#' +#' @param data \code{data.frame} including [1] the time variable (indicated +#' in \code{timename}), [2] the predictor variables (required by +#' \code{formula}) and [3], the compositional response variable (indicated +#' in \code{formula}). \cr \cr +#' Note that the response variables should be formatted as a +#' \code{data.frame} object named as indicated by the +#' \code{response} entry in the \code{control} list, such as \code{gamma} +#' for a standard TS analysis on LDA output. \cr \cr +#' See \code{Examples}. +#' +#' @param formula \code{\link[stats]{formula}} defining the regression between +#' relationship the change points. Any +#' predictor variable included must also be a column in +#' \code{data} and any (compositional) response variable must be a set of +#' columns in \code{data}. +#' +#' @param changepoints Numeric vector indicating locations of the change +#' points. Must be conformable to \code{integer} values. +#' +#' @param chunk Length-2 vector of times: [1] \code{start}, the start time +#' for the chunk and [2] \code{end}, the end time for the chunk. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @param weights Optional class \code{numeric} vector of weights for each +#' document. Defaults to \code{NULL}, translating to an equal weight for +#' each document. When using \code{simplex_TS} in a standard LDATS +#' analysis, it is advisable to weight the documents by their total size, +#' as the result of \code{\link{topicmodels_LDA}} is a matrix of +#' proportions, which does not account for size differences among documents. +#' For most models, a scaling of the weights (so that the average is 1) is +#' most appropriate, and this is accomplished using +#' \code{\link{document_weights}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param transformation Ratio \code{function} to use for the transformation +#' to the simplex geometry. Options include \code{\link[compositions]{alr}}, +#' \code{\link[compositions]{clr}}, and \code{\link[compositions]{ilr}}. +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return +#' \code{simplex_TS}: \code{list} of [1] chunk-level model fits +#' (\code{"chunk models"}), [2] the total log likelihood combined across +#' all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk +#' beginning and ending times (\code{"logLik"} with columns +#' \code{"start"} and \code{"end"}). \cr \cr +#' \code{simplex_TS_chunk}: fitted model object for the chunk, +#' of class \code{lm}. \cr \cr +#' \code{simplex_TS_control}: \code{list}, with named elements +#' corresponding to response function controls. +#' +#' @name simplex_TS +#' + + +#' @rdname simplex_TS +#' +#' @export +#' +simplex_TS <- function(data, formula, changepoints = NULL, + timename = "time", weights = NULL, + control = list()){ + control <- do.call("simplex_TS_control", control) + if (!verify_changepoint_locations(data, changepoints, timename)){ + out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) + return(out) + } + + chunks <- prep_chunks(data, changepoints, timename) + nchunks <- nrow(chunks) + fits <- vector("list", length = nchunks) + for (i in 1:nchunks){ + fits[[i]] <- simplex_TS_chunk(data = data, formula = formula, + chunk = chunks[i, ], timename = timename, + weights = weights, control = control) + } + package_chunk_fits(chunks, fits) +} + +#' @rdname simplex_TS +#' +#' @export +#' +simplex_TS_chunk <- function(data, formula, chunk, timename = "time", + weights = NULL, control = list()){ + formula <- as.formula(format(formula)) + time_obs <- data[ , timename] + chunk_start <- as.numeric(chunk["start"]) + chunk_end <- as.numeric(chunk["end"]) + in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end + simplex_data <- data[ , !grepl("gamma", colnames(data))] + simplex_data$gamma <- do.call(control$transformation, + list(x = acomp(data$gamma))) + + + fit <- lm(formula, simplex_data, weights, subset = in_chunk) + fit$timevals <- time_obs[which(in_chunk)] + fit +} + + +#' @rdname simplex_TS +#' +#' @export +#' +simplex_TS_control <- function(transformation = ilr, quiet = FALSE, ...){ + list(transformation = transformation, quiet = quiet) +} + + +#' @title Fit a multinomial change point Time Series model +#' +#' @description +#' \code{multinom_TS} fits a set of multinomial regression models (via +#' \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time +#' series of data divided into multiple segments (a.k.a. chunks) based on +#' given locations for a set of change points. \cr \cr +#' \code{multinom_TS_chunk} fits a multinomial regression model (via +#' \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) +#' to a defined chunk of time (a.k.a. segment) +#' \code{[chunk$start, chunk$end]} within a time series. \cr \cr +#' \code{multinom_TS_control} defines and creates the control \code{list} +#' for fitting. +#' +#' @param data \code{data.frame} including [1] the time variable (indicated +#' in \code{timename}), [2] the predictor variables (required by +#' \code{formula}) and [3], the multinomial response variable (indicated in +#' \code{formula}). \cr \cr +#' Note that the response variables should be formatted as a +#' \code{data.frame} object named as indicated by the +#' \code{response} entry in the \code{control} list, such as \code{gamma} +#' for a standard TS analysis on LDA output. \cr \cr +#' See \code{Examples}. +#' +#' @param formula \code{\link[stats]{formula}} defining the regression between +#' relationship the change points. Any +#' predictor variable included must also be a column in +#' \code{data} and any (multinomial) response variable must be a set of +#' columns in \code{data}. +#' +#' @param changepoints Numeric vector indicating locations of the change +#' points. Must be conformable to \code{integer} values. +#' +#' @param chunk Length-2 vector of times: [1] \code{start}, the start time +#' for the chunk and [2] \code{end}, the end time for the chunk. +#' +#' @param timename \code{character} element indicating the time variable +#' used in the time series. Defaults to \code{"time"}. The variable must be +#' integer-conformable or a \code{Date}. If the variable named +#' is a \code{Date}, the input is converted to an integer, resulting in the +#' timestep being 1 day, which is often not desired behavior. +#' +#' @param weights Optional class \code{numeric} vector of weights for each +#' document. Defaults to \code{NULL}, translating to an equal weight for +#' each document. When using \code{ilr_TS} in a standard LDATS +#' analysis, it is advisable to weight the documents by their total size, +#' as the result of \code{\link{topicmodels_LDA}} is a matrix of +#' proportions, which does not account for size differences among documents. +#' For most models, a scaling of the weights (so that the average is 1) is +#' most appropriate, and this is accomplished using +#' \code{\link{document_weights}}. +#' +#' @param control A \code{list} of parameters to control the fitting of the +#' Time Series model including the parallel tempering Markov Chain +#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by +#' \code{\link{TS_control}}. +#' +#' @param lambda \code{numeric} "weight" decay term used to set the prior +#' on the regressors within each chunk-level model. Defaults to 0, +#' corresponding to a fully vague prior. +#' +#' @param quiet \code{logical} indicator of whether the model should run +#' quietly (if \code{FALSE}, a progress bar and notifications are printed). +#' +#' @param ... Not passed along to the output, rather included to allow for +#' automated removal of unneeded controls. +#' +#' @return +#' \code{multinom_TS}: Object of class \code{multinom_TS_fit}, which is a +#' \code{list} of [1] chunk-level model fits (\code{"chunk models"}), +#' [2] the total log likelihood combined across all chunks +#' (\code{"logLik"}), and [3] a \code{data.frame} of chunk beginning and +#' ending times (\code{"logLik"} with columns \code{"start"} and +#' \code{"end"}). \cr \cr +#' \code{multinom_TS_chunk}: fitted model object for the chunk, +#' of classes \code{multinom} and \code{nnet}. \cr \cr +#' \code{multinom_TS_control}: \code{list}, with named elements +#' corresponding to response function controls. +#' +#' @references +#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. +#' +#' @name multinom_TS +#' + + +#' @rdname multinom_TS +#' +#' @export +#' +multinom_TS <- function(data, formula, changepoints = NULL, + timename = "time", weights = NULL, + control = list()){ + control <- do.call("multinom_TS_control", control) + if (!verify_changepoint_locations(data, changepoints, timename)){ + out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) + class(out) <- c("TS_fit", "list") + return(out) + } + + chunks <- prep_chunks(data, changepoints, timename) + nchunks <- nrow(chunks) + fits <- vector("list", length = nchunks) + for (i in 1:nchunks){ + fits[[i]] <- multinom_TS_chunk(data = data, formula = formula, + chunk = chunks[i, ], timename = timename, + weights = weights, control = control) + } + package_chunk_fits(chunks, fits) +} + +#' @rdname multinom_TS +#' +#' @export +#' +multinom_TS_chunk <- function(data, formula, chunk, timename = "time", + weights = NULL, control = list()){ + formula <- as.formula(format(formula)) + time_obs <- data[ , timename] + chunk_start <- as.numeric(chunk["start"]) + chunk_end <- as.numeric(chunk["end"]) + in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end + fit <- multinom(formula, data, weights, subset = in_chunk, trace = FALSE, + decay = control$lambda) + fit$timevals <- time_obs[which(in_chunk)] + fit +} + +#' @rdname multinom_TS +#' +#' @export +#' +multinom_TS_control <- function(lambda = 0, quiet = FALSE, ...){ + list(lambda = lambda, quiet = quiet) +} + + diff --git a/R/ilr_TS.R b/R/ilr_TS.R deleted file mode 100644 index 02ddef30..00000000 --- a/R/ilr_TS.R +++ /dev/null @@ -1,125 +0,0 @@ -#' @title Fit a simplex-based change point Time Series model using isometric -#' log ratio -#' -#' @description -#' \code{ilr_TS} fits a set of simplex regression models to a time series -#' of compositional data divided into multiple segments (a.k.a. chunks) -#' based on given locations for a set of change points, using -#' the isometric log ratio (ILR) transformation. \cr \cr -#' \code{ilr_TS_chunk} fits a simplex regression model using the ILR -#' transformation to a defined chunk of time (a.k.a. segment) -#' \code{[chunk$start, chunk$end]} within a time series. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the compositional response variable (indicated -#' in \code{formula}). \cr \cr -#' Note that the response variables should be formatted as a -#' \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. \cr \cr -#' See \code{Examples}. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (compositional) response variable must be a set of -#' columns in \code{data}. -#' -#' @param changepoints Numeric vector indicating locations of the change -#' points. Must be conformable to \code{integer} values. -#' -#' @param chunk Length-2 vector of times: [1] \code{start}, the start time -#' for the chunk and [2] \code{end}, the end time for the chunk. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{ilr_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link{topicmodels_LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using -#' \code{\link{document_weights}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{ilr_TS}: Object of class \code{ilr_TS_fit}, -#' which is a list of [1] -#' chunk-level model fits (\code{"chunk models"}), [2] the total log -#' likelihood combined across all chunks (\code{"logLik"}), and [3] a -#' \code{data.frame} of chunk beginning and ending times (\code{"logLik"} -#' with columns \code{"start"} and \code{"end"}). \cr \cr -#' \code{ilr_TS_chunk}: fitted model object for the chunk, -#' of class \code{lm}. -#' -#' @export -#' - -ilr_TS <- function(data, formula, changepoints = NULL, - timename = "time", weights = NULL, - control = list()){ - control <- do.call("ilr_TS_control", control) - if (!verify_changepoint_locations(data, changepoints, timename)){ - out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) - return(out) - } - - chunks <- prep_chunks(data, changepoints, timename) - nchunks <- nrow(chunks) - fits <- vector("list", length = nchunks) - for (i in 1:nchunks){ - fits[[i]] <- ilr_TS_chunk(data = data, formula = formula, - chunk = chunks[i, ], timename = timename, - weights = weights, control = control) - } - package_chunk_fits(chunks, fits) -} - -#' @rdname ilr_TS -#' -#' @export -#' -ilr_TS_chunk <- function(data, formula, chunk, timename = "time", - weights = NULL, control = list()){ - formula <- as.formula(format(formula)) - time_obs <- data[ , timename] - chunk_start <- as.numeric(chunk["start"]) - chunk_end <- as.numeric(chunk["end"]) - in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end - ilr_data <- data[ , !grepl("gamma", colnames(data))] - ilr_data$gamma <- ilr(acomp(data$gamma)) - fit <- lm(formula, ilr_data, weights, subset = in_chunk) - fit$timevals <- time_obs[which(in_chunk)] - fit -} - - - -#' @title Create the controls list for the ILR Time Series model -#' -#' @description This function provides a simple creation and definition of a -#' list used to control the time series model fit occurring within -#' \code{\link{ilr_TS}}. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param ... Not passed along to the output, rather included to allow for -#' automated removal of unneeded controls. -#' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @export -#' -ilr_TS_control <- function(quiet = FALSE, ...){ - list(quiet = quiet) -} diff --git a/R/multinom_TS.R b/R/multinom_TS.R deleted file mode 100644 index 49350873..00000000 --- a/R/multinom_TS.R +++ /dev/null @@ -1,135 +0,0 @@ -#' @title Fit a multinomial change point Time Series model -#' -#' @description -#' \code{multinom_TS} fits a set of multinomial regression models (via -#' \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time series -#' of data divided into multiple segments (a.k.a. chunks) based on given -#' locations for a set of change points. \cr \cr -#' \code{multinom_TS_chunk} fits a multinomial regression model (via -#' \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) -#' to a defined chunk of time (a.k.a. segment) -#' \code{[chunk$start, chunk$end]} within a time series. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}). \cr \cr -#' Note that the response variables should be formatted as a -#' \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. \cr \cr -#' See \code{Examples}. -#' -#' @param formula \code{\link[stats]{formula}} defining the regression between -#' relationship the change points. Any -#' predictor variable included must also be a column in -#' \code{data} and any (multinomial) response variable must be a set of -#' columns in \code{data}. -#' -#' @param changepoints Numeric vector indicating locations of the change -#' points. Must be conformable to \code{integer} values. -#' -#' @param chunk Length-2 vector of times: [1] \code{start}, the start time -#' for the chunk and [2] \code{end}, the end time for the chunk. -#' -#' @param timename \code{character} element indicating the time variable -#' used in the time series. Defaults to \code{"time"}. The variable must be -#' integer-conformable or a \code{Date}. If the variable named -#' is a \code{Date}, the input is converted to an integer, resulting in the -#' timestep being 1 day, which is often not desired behavior. -#' -#' @param weights Optional class \code{numeric} vector of weights for each -#' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{ilr_TS} in a standard LDATS -#' analysis, it is advisable to weight the documents by their total size, -#' as the result of \code{\link{topicmodels_LDA}} is a matrix of -#' proportions, which does not account for size differences among documents. -#' For most models, a scaling of the weights (so that the average is 1) is -#' most appropriate, and this is accomplished using -#' \code{\link{document_weights}}. -#' -#' @param control A \code{list} of parameters to control the fitting of the -#' Time Series model including the parallel tempering Markov Chain -#' Monte Carlo (ptMCMC) controls. Values not input assume defaults set by -#' \code{\link{TS_control}}. -#' -#' @return \code{multinom_TS}: Object of class \code{multinom_TS_fit}, -#' which is a list of [1] -#' chunk-level model fits (\code{"chunk models"}), [2] the total log -#' likelihood combined across all chunks (\code{"logLik"}), and [3] a -#' \code{data.frame} of chunk beginning and ending times (\code{"logLik"} -#' with columns \code{"start"} and \code{"end"}). \cr \cr -#' \code{multinom_TS_chunk}: fitted model object for the chunk, -#' of classes \code{multinom} and \code{nnet}. -#' -#' @references -#' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied -#' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. -#' -#' @export -#' -multinom_TS <- function(data, formula, changepoints = NULL, - timename = "time", weights = NULL, - control = list()){ - control <- do.call("multinom_TS_control", control) - if (!verify_changepoint_locations(data, changepoints, timename)){ - out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) - class(out) <- c("TS_fit", "list") - return(out) - } - - chunks <- prep_chunks(data, changepoints, timename) - nchunks <- nrow(chunks) - fits <- vector("list", length = nchunks) - for (i in 1:nchunks){ - fits[[i]] <- multinom_TS_chunk(data = data, formula = formula, - chunk = chunks[i, ], timename = timename, - weights = weights, control = control) - } - package_chunk_fits(chunks, fits) -} - - - -#' @rdname multinom_TS -#' -#' @export -#' -multinom_TS_chunk <- function(data, formula, chunk, timename = "time", - weights = NULL, control = list()){ - formula <- as.formula(format(formula)) - time_obs <- data[ , timename] - chunk_start <- as.numeric(chunk["start"]) - chunk_end <- as.numeric(chunk["end"]) - in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end - fit <- multinom(formula, data, weights, subset = in_chunk, trace = FALSE, - decay = control$lambda) - fit$timevals <- time_obs[which(in_chunk)] - fit -} - - -#' @title Create the controls list for the multinomial Time Series model -#' -#' @description This function provides a simple creation and definition of a -#' list used to control the time series model fit occurring within -#' \code{\link{multinom_TS}}. -#' -#' @param lambda \code{numeric} "weight" decay term used to set the prior -#' on the regressors within each chunk-level model. Defaults to 0, -#' corresponding to a fully vague prior. -#' -#' @param quiet \code{logical} indicator of whether the model should run -#' quietly (if \code{FALSE}, a progress bar and notifications are printed). -#' -#' @param ... Not passed along to the output, rather included to allow for -#' automated removal of unneeded controls. -#' -#' @return \code{list}, with named elements corresponding to the arguments. -#' -#' @export -#' -multinom_TS_control <- function(lambda = 0, quiet = FALSE, ...){ - list(lambda = lambda, quiet = quiet) -} - diff --git a/man/ilr_TS_control.Rd b/man/ilr_TS_control.Rd deleted file mode 100644 index 28e153c5..00000000 --- a/man/ilr_TS_control.Rd +++ /dev/null @@ -1,23 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ilr_TS.R -\name{ilr_TS_control} -\alias{ilr_TS_control} -\title{Create the controls list for the ILR Time Series model} -\usage{ -ilr_TS_control(quiet = FALSE, ...) -} -\arguments{ -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control the time series model fit occurring within - \code{\link{ilr_TS}}. -} diff --git a/man/multinom_TS.Rd b/man/multinom_TS.Rd index da190eec..5b6bcb9b 100644 --- a/man/multinom_TS.Rd +++ b/man/multinom_TS.Rd @@ -1,8 +1,9 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R +% Please edit documentation in R/TS_responses.R \name{multinom_TS} \alias{multinom_TS} \alias{multinom_TS_chunk} +\alias{multinom_TS_control} \title{Fit a multinomial change point Time Series model} \usage{ multinom_TS(data, formula, changepoints = NULL, timename = "time", @@ -10,6 +11,8 @@ multinom_TS(data, formula, changepoints = NULL, timename = "time", multinom_TS_chunk(data, formula, chunk, timename = "time", weights = NULL, control = list()) + +multinom_TS_control(lambda = 0, quiet = FALSE, ...) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated @@ -54,26 +57,40 @@ Monte Carlo (ptMCMC) controls. Values not input assume defaults set by \item{chunk}{Length-2 vector of times: [1] \code{start}, the start time for the chunk and [2] \code{end}, the end time for the chunk.} + +\item{lambda}{\code{numeric} "weight" decay term used to set the prior +on the regressors within each chunk-level model. Defaults to 0, +corresponding to a fully vague prior.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} } \value{ -\code{multinom_TS}: Object of class \code{multinom_TS_fit}, - which is a list of [1] - chunk-level model fits (\code{"chunk models"}), [2] the total log - likelihood combined across all chunks (\code{"logLik"}), and [3] a - \code{data.frame} of chunk beginning and ending times (\code{"logLik"} - with columns \code{"start"} and \code{"end"}). \cr \cr +\code{multinom_TS}: Object of class \code{multinom_TS_fit}, which is a + \code{list} of [1] chunk-level model fits (\code{"chunk models"}), + [2] the total log likelihood combined across all chunks + (\code{"logLik"}), and [3] a \code{data.frame} of chunk beginning and + ending times (\code{"logLik"} with columns \code{"start"} and + \code{"end"}). \cr \cr \code{multinom_TS_chunk}: fitted model object for the chunk, - of classes \code{multinom} and \code{nnet}. + of classes \code{multinom} and \code{nnet}. \cr \cr + \code{multinom_TS_control}: \code{list}, with named elements + corresponding to response function controls. } \description{ \code{multinom_TS} fits a set of multinomial regression models (via - \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time series - of data divided into multiple segments (a.k.a. chunks) based on given - locations for a set of change points. \cr \cr + \code{\link[nnet]{multinom}}, Venables and Ripley 2002) to a time + series of data divided into multiple segments (a.k.a. chunks) based on + given locations for a set of change points. \cr \cr \code{multinom_TS_chunk} fits a multinomial regression model (via - \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) - to a defined chunk of time (a.k.a. segment) - \code{[chunk$start, chunk$end]} within a time series. + \code{\link[nnet]{multinom}}, Ripley 1996, Venables and Ripley 2002) + to a defined chunk of time (a.k.a. segment) + \code{[chunk$start, chunk$end]} within a time series. \cr \cr + \code{multinom_TS_control} defines and creates the control \code{list} + for fitting. } \references{ Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied diff --git a/man/multinom_TS_control.Rd b/man/multinom_TS_control.Rd deleted file mode 100644 index f689e7aa..00000000 --- a/man/multinom_TS_control.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/multinom_TS.R -\name{multinom_TS_control} -\alias{multinom_TS_control} -\title{Create the controls list for the multinomial Time Series model} -\usage{ -multinom_TS_control(lambda = 0, quiet = FALSE, ...) -} -\arguments{ -\item{lambda}{\code{numeric} "weight" decay term used to set the prior -on the regressors within each chunk-level model. Defaults to 0, -corresponding to a fully vague prior.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - -\item{...}{Not passed along to the output, rather included to allow for -automated removal of unneeded controls.} -} -\value{ -\code{list}, with named elements corresponding to the arguments. -} -\description{ -This function provides a simple creation and definition of a - list used to control the time series model fit occurring within - \code{\link{multinom_TS}}. -} diff --git a/man/ilr_TS.Rd b/man/simplex_TS.Rd similarity index 51% rename from man/ilr_TS.Rd rename to man/simplex_TS.Rd index 88d44cde..a19c852f 100644 --- a/man/ilr_TS.Rd +++ b/man/simplex_TS.Rd @@ -1,16 +1,18 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/ilr_TS.R -\name{ilr_TS} -\alias{ilr_TS} -\alias{ilr_TS_chunk} -\title{Fit a simplex-based change point Time Series model using isometric - log ratio} +% Please edit documentation in R/TS_responses.R +\name{simplex_TS} +\alias{simplex_TS} +\alias{simplex_TS_chunk} +\alias{simplex_TS_control} +\title{Fit a simplex-based change point Time Series model} \usage{ -ilr_TS(data, formula, changepoints = NULL, timename = "time", +simplex_TS(data, formula, changepoints = NULL, timename = "time", weights = NULL, control = list()) -ilr_TS_chunk(data, formula, chunk, timename = "time", weights = NULL, - control = list()) +simplex_TS_chunk(data, formula, chunk, timename = "time", + weights = NULL, control = list()) + +simplex_TS_control(transformation = ilr, quiet = FALSE, ...) } \arguments{ \item{data}{\code{data.frame} including [1] the time variable (indicated @@ -40,7 +42,7 @@ timestep being 1 day, which is often not desired behavior.} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{ilr_TS} in a standard LDATS +each document. When using \code{simplex_TS} in a standard LDATS analysis, it is advisable to weight the documents by their total size, as the result of \code{\link{topicmodels_LDA}} is a matrix of proportions, which does not account for size differences among documents. @@ -54,23 +56,36 @@ Time Series model. Values not input assume defaults set by \item{chunk}{Length-2 vector of times: [1] \code{start}, the start time for the chunk and [2] \code{end}, the end time for the chunk.} + +\item{transformation}{Ratio \code{function} to use for the transformation +to the simplex geometry. Options include \code{\link[compositions]{alr}}, +\code{\link[compositions]{clr}}, and \code{\link[compositions]{ilr}}.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + +\item{...}{Not passed along to the output, rather included to allow for +automated removal of unneeded controls.} } \value{ -\code{ilr_TS}: Object of class \code{ilr_TS_fit}, - which is a list of [1] - chunk-level model fits (\code{"chunk models"}), [2] the total log - likelihood combined across all chunks (\code{"logLik"}), and [3] a - \code{data.frame} of chunk beginning and ending times (\code{"logLik"} - with columns \code{"start"} and \code{"end"}). \cr \cr - \code{ilr_TS_chunk}: fitted model object for the chunk, - of class \code{lm}. +\code{simplex_TS}: \code{list} of [1] chunk-level model fits + (\code{"chunk models"}), [2] the total log likelihood combined across + all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk + beginning and ending times (\code{"logLik"} with columns + \code{"start"} and \code{"end"}). \cr \cr + \code{simplex_TS_chunk}: fitted model object for the chunk, + of class \code{lm}. \cr \cr + \code{simplex_TS_control}: \code{list}, with named elements + corresponding to response function controls. } \description{ -\code{ilr_TS} fits a set of simplex regression models to a time series - of compositional data divided into multiple segments (a.k.a. chunks) - based on given locations for a set of change points, using - the isometric log ratio (ILR) transformation. \cr \cr - \code{ilr_TS_chunk} fits a simplex regression model using the ILR - transformation to a defined chunk of time (a.k.a. segment) - \code{[chunk$start, chunk$end]} within a time series. +\code{simplex_TS} fits a set of simplex regression models to a time + series of compositional data divided into multiple segments (a.k.a. + chunks) based on given locations for a set of change points, using + e.g., the isometric log ratio (ILR) transformation. \cr \cr + \code{simplex_TS_chunk} fits a simplex regression model using, e.g., the + ILR transformation to a defined chunk of time (a.k.a. segment) + \code{[chunk$start, chunk$end]} within a time series. \cr \cr + \code{simplex_TS_control} defines and creates the control \code{list} for + fitting. } diff --git a/notes.R b/notes.R index f28ff3e2..a8de1dc9 100644 --- a/notes.R +++ b/notes.R @@ -1,19 +1,14 @@ -# work on making formulas be able to be repeatedly prepped -# its not really right to use gamma as a name for ilr -# lots of tidying to do! - - known to dos -pipeline generalization and doc streamline check functions utilities plotting functions simulate -generalize ilr to simplical to allow for other transforms +make formulas be able to be repeatedly prepped +its not really right to use gamma as a name for simplex +citations for simplex devtools::load_all() - data(rodents) data <- rodents From 25e882f991dc60cdf62bc2b7bad841880a6d6122 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sun, 22 Mar 2020 19:58:57 -0700 Subject: [PATCH 27/43] organizationals --- NAMESPACE | 16 +- NEWS.md | 38 ++- R/LDA.R | 20 +- R/LDA_TS.R | 4 +- R/LDA_models.R | 9 +- R/TS.R | 41 +++- R/TS_methods.R | 4 +- R/TS_models.R | 8 +- R/TS_responses.R | 31 ++- R/argument_checking.R | 397 ++++++++++++++++++------------- R/data_preparation.R | 56 +++-- R/utilities.R | 71 ++++-- man/LDA.Rd | 10 +- man/LDA_TS.Rd | 10 +- man/TS.Rd | 27 ++- man/argument_checking.Rd | 139 +++++++++++ man/check_control.Rd | 24 -- man/check_document_term_table.Rd | 27 --- man/check_formula.Rd | 29 --- man/check_nreps.Rd | 26 -- man/check_topics.Rd | 24 -- man/conform_data.Rd | 51 ++-- man/document_weights.Rd | 5 +- man/mirror_vcov.Rd | 3 +- man/prep_pbar.Rd | 2 +- man/soft_call.Rd | 54 +++++ notes.R | 119 ++------- vignettes/LDATS_codebase.Rmd | 42 ++++ 28 files changed, 768 insertions(+), 519 deletions(-) create mode 100644 man/argument_checking.Rd delete mode 100644 man/check_control.Rd delete mode 100644 man/check_document_term_table.Rd delete mode 100644 man/check_formula.Rd delete mode 100644 man/check_nreps.Rd delete mode 100644 man/check_topics.Rd create mode 100644 man/soft_call.Rd diff --git a/NAMESPACE b/NAMESPACE index d0be0cd8..1cea599b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -25,11 +25,22 @@ export(TS_diagnostics_plot) export(TS_msg) export(TS_summary_plot) export(autocorr_plot) +export(check_LDA) +export(check_LDAs) +export(check_TS) +export(check_class) export(check_control) +export(check_document_covariate_table) export(check_document_term_table) -export(check_formula) -export(check_nreps) +export(check_formulas) +export(check_nchangepoints) +export(check_nonneg_integer) +export(check_nonneg_integer_matrix) +export(check_pos_integer) +export(check_replicates) +export(check_timename) export(check_topics) +export(check_weights) export(conform_data) export(count_trips) export(document_weights) @@ -99,6 +110,7 @@ export(sim_TS_data) export(simplex_TS) export(simplex_TS_chunk) export(simplex_TS_control) +export(soft_call) export(softmax) export(summarize_etas) export(summarize_rhos) diff --git a/NEWS.md b/NEWS.md index bca6d351..17301778 100644 --- a/NEWS.md +++ b/NEWS.md @@ -2,7 +2,43 @@ Version numbers follow [Semantic Versioning](https://semver.org/). -# LDATS 0.2.5(https://github.com/weecology/ldats/releases/tag/v0.2.5) +# LDATS 0.3.0 +*Ongoing* + +## Generalization of "LDA" +* The phrase "LDA" could be any of the Linquistic Decomposition Analyses including any of a number of true Latent Dirichlet Allocation functions or models, so LDA is no longer fully imported from topicmodels but keeping topicmodels the package imported to allow calling of topicmodels::LDA from inside LDA as the default. +* Existing functionality allows a simple switching to the Gibbs sampler version of the topicmodels LDA or an entirely different modeling function. + +## Additional renamings and small things +* seed is now replicate + +## Function renamings/restructuring +* LDA_set is now LDA and TS_on_LDA is now TS +* LDA and TS are both structured similarly (see pipeline doc) with "prepare", "run", "package" as the workflow. + +## Introduction of soften logical variable +* Designed to help soften errors in pipelines through wrapping in tryCatch. + + +## Expansion of control lists +* The functions that can be toggled via control list is expanded (from measuror and selector) to now include base LDA and TS model functions, TS response and method functions, and arguments for all functions. + +## Allowance of single-topic models +* As a placeholder/identity model for comparison to models that include decomposition. + +## Data conforming +* Data can come into LDA_TS LDA TS in a variety of forms, and depending on usages, might take a variety of different forms. +* The purpose of this the new conform_data function is to generalize and extract the code used to shuddle between data formats from functions and replace it with a single line. +* Currently its not saving the test/train split explicitly, just implicitly via the data encoding that exists. + +## Data subsetting +* New facilities for subsetting the data for purposes such as cross validation +* Generalized functions for random and systematic leave-outs, with flexible number left out and (potentially) asymmetric buffers. +* Specific functions for typical use (systematic leave 1 out with no buffer, e.g.). + + + +# [LDATS 0.2.5](https://github.com/weecology/ldats/releases/tag/v0.2.5) *2019-12-22* ## General editing of simulation functions diff --git a/R/LDA.R b/R/LDA.R index c3e410f0..2d5d63a4 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -7,6 +7,9 @@ #' \emph{et al.} 2018). \cr \cr #' \code{prepare_LDA} pre-prepares the LDA model objects for simpler #' use within the subfunctions. \cr \cr +#' \code{check_LDA} ensures that the inputs are proper. +#' See \code{\link{check_topics}}, \code{\link{check_replicates}}, +#' and \code{\link{check_control}} for specifics. \cr \cr #' \code{LDA_control} defines and creates the control list used to fit #' the LDA model. \cr \cr #' \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models @@ -94,6 +97,8 @@ #' used to fit the model. \cr \cr #' \code{prepare_LDA}: \code{list} of \code{list}s, each of which is a #' preliminary model object for an LDA model fit. \cr \cr +#' \code{check_LDA}: an error message is thrown if any input is improper, +#' otherwise \code{NULL}. #' \code{LDA_control}: \code{list} of controls for the LDA model, with #' named elements corresponding to the arguments. #' \code{run_LDA}: \code{LDA_set} \code{list} of model results from all @@ -103,7 +108,7 @@ #' run of a \code{} function, such as #' \code{\link{topicmodels_LDA}}. \cr \cr #' \code{measure_LDA}: \code{vector} of values corresponding to the model -#' evaluations. +#' evaluations. \cr \cr #' \code{select_LDA}: \code{list} of selected models' \code{list}s. #' #' @references @@ -139,11 +144,22 @@ LDA <- function(data, topics = 2, replicates = 1, control = list()){ } +#' @rdname LDA +#' +#' @export +#' +check_LDA <- function(topics = 2, replicates = 1, control = list()){ + check_topics(topics = topics) + check_replicates(replicates = replicates) + check_control(control = control) +} + #' @rdname LDA #' #' @export #' prepare_LDA <- function(data, topics = 2, replicates = 1, control = list()){ + check_LDA(topics = topics, replicates = replicates, control = control) control <- do.call("LDA_control", control) messageq("----- Linguistic Decomposition Analyses -----", control$quiet) data <- conform_data(data = data, control = control) @@ -192,7 +208,7 @@ LDA_call <- function(LDA){ LDA_msg(LDA = LDA) fun <- LDA$control$model args <- update_list(LDA$control$model_args, LDA = LDA) - soft_call(fun = fun, args = args, soften = LDA$control$soften) + soft_call(what = fun, args = args, soften = LDA$control$soften) } diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 6e892b19..0976bb4e 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -227,11 +227,11 @@ #' #' @export #' -LDA_TS <- function(data, topics = 2, reps = 1, formulas = ~ 1, +LDA_TS <- function(data, topics = 2, replicates = 1, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()){ control <- do.call("LDA_TS_control", control) - LDAs <- LDA(data = data, topics = topics, reps = reps, + LDAs <- LDA(data = data, topics = topics, replicates = replicates, control = control$LDA_control) TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, nchangepoints = nchangepoints, timename = timename, diff --git a/R/LDA_models.R b/R/LDA_models.R index db29aa59..98242e37 100644 --- a/R/LDA_models.R +++ b/R/LDA_models.R @@ -117,10 +117,11 @@ identity_LDA <- function(LDA){ document_topic_table <- data$train$document_term_table document_topic_table <- document_topic_table / rowSums(document_topic_table) colnames(document_topic_table) <- NULL - out <- list(params = list(), document_topic_table = document_topic_table, - log_likelihood = NULL, data = data, - topics = 1, rep = rep, data_subset = data_subset, - test_document_topic_matrix = NULL) #not yet available + out <- update_list(LDA, params = list(), + document_topic_table = document_topic_table, + log_likelihood = NULL, data = data, + topics = 1, rep = rep, data_subset = data_subset, + test_document_topic_matrix = NULL) #not available class(out) <- c("LDA", "list") out } diff --git a/R/TS.R b/R/TS.R index e8732567..c0e67256 100644 --- a/R/TS.R +++ b/R/TS.R @@ -8,6 +8,12 @@ #' \emph{et al.} 2018). \cr \cr #' \code{prepare_TS} pre-prepares the TS model objects for simpler #' use within the subfunctions. \cr \cr +#' \code{check_TS} ensures that the inputs are proper. +#' See \code{\link{check_LDAs}}, +#' \code{\link{check_document_covariate_table}}, +#' code{\link{check_formulas}}, \code{\link{check_nchangepoints}}, +#' \code{\link{check_timename}}, \code{\link{check_weights}}, +#' and \code{\link{check_control}} for specifics. \cr \cr #' \code{TS_control} defines and creates the control \code{list} for the TS #' model running. \cr \cr #' \code{run_TS} runs (via \code{\link{TS_call}}) all TS models @@ -37,15 +43,6 @@ #' \item Package the results. #' } #' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the compositional response variable (indicated -#' in \code{formula}). \cr \cr -#' Note that the response variables should be formatted as a -#' \code{data.frame} object named as indicated by the \code{response} entry -#' in the \code{control} list, such as \code{gamma} for a standard TS -#' analysis on LDA output. -#' #' @param formulas Vector of \code{\link[stats]{formula}}(s) defining the #' regression between the change points. Any predictor variable included #' must also be a column in \code{data} and any (compositional) response @@ -141,6 +138,8 @@ #' used to fit the model. \cr \cr #' \code{prepare_TS}: \code{list} of \code{list}s, each of which is a #' preliminary model object for a Time Series model fit. \cr \cr +#' \code{check_TS}: an error message is thrown if any input is improper, +#' otherwise \code{NULL}. #' \code{TS_control}: \code{list} of named control elements for #' model fitting. #' \code{measure_TS}: \code{vector} of values corresponding to the model @@ -195,9 +194,9 @@ #' #' @export #' -TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, +TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ - TSs <- prepare_TS(LDAs = LDAs, data = data, formulas = formulas, + TSs <- prepare_TS(LDAs = LDAs, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control) TSs <- run_TS(TSs = TSs) @@ -205,6 +204,20 @@ TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, TSs } +#' @rdname TS +#' +#' @export +#' +check_TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, + timename = "time", weights = NULL, control = list()){ + check_LDAs(LDAs = LDAs) + check_document_covariate_table(LDAs = LDAs) + check_formulas(LDAs = LDAs, formulas = formulas) + check_nchangepoints(nchangepoints = nchangepoints) + check_timename(LDAs = LDAs, timename = timename) + check_weights(weights = weights) + check_control(control = control) +} #' @rdname TS #' @@ -227,7 +240,7 @@ TS_call <- function(TS){ TS_msg(TS = TS) fun <- TS$control$model args <- update_list(TS$control$model_args, TS = TS) - soft_call(fun = fun, args = args, soften = TS$control$soften) + soft_call(what = fun, args = args, soften = TS$control$soften) } @@ -254,9 +267,11 @@ TS_msg <- function(TS){ #' #' @export #' -prepare_TS <- function(LDAs, data, formulas = ~ 1, nchangepoints = 0, +prepare_TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, timename = "time", weights = NULL, control = list()){ + check_TS(LDAs = LDAs, formulas = formulas, nchangepoints = nchangepoints , + timename = timename, weights = weights, control = control) control <- do.call("TS_control", control) messageq("----- Time Series Analyses -----", control$quiet) if (!is(formulas, "list")) { diff --git a/R/TS_methods.R b/R/TS_methods.R index 71c3be3e..afb36666 100644 --- a/R/TS_methods.R +++ b/R/TS_methods.R @@ -347,7 +347,7 @@ prep_cpts <- function(TS){ args <- list(data = data, formula = TS$formula, changepoints = cps[ , i], timename = TS$timename, weights = TS$weights, control = TS$control$response_args$control) - modfit <- soft_call(fun, args, TRUE) + modfit <- soft_call(what = fun, args = args, soften = TRUE) lls[i] <- modfit$logLik } cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] @@ -575,7 +575,7 @@ proposed_step_mods <- function(TS, prop_changepts, inputs){ changepoints = prop_changepts[ , i], timename = TS$timename, weights = TS$weights, control = control) - out[[i]] <- soft_call(fun, args, TRUE) + out[[i]] <- soft_call(what = fun, args = args, soften = TRUE) } out } diff --git a/R/TS_models.R b/R/TS_models.R index bd472e59..60faeca1 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -193,7 +193,7 @@ package_sequential_TS <- function(TS, rho_dist, eta_dist){ args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, control = TS$control$response_args$control) - mod <- soft_call(fun, args, TRUE) + mod <- soft_call(what = fun, args = args, soften = TRUE) lls <- as.numeric(logLik(mod)) } else{ @@ -236,7 +236,7 @@ est_changepoints <- function(TS){ } fun <- TS$control$method args <- update_list(TS$control$method_args, TS = TS) - soft_call(fun = fun, args = args, soften = TS$control$soften) + soft_call(what = fun, args = args, soften = TS$control$soften) } #' @rdname sequential_TS @@ -254,7 +254,7 @@ est_regressors <- function(rho_dist, TS){ args <- list(data = data, formula = TS$formula, changepoints = NULL, timename = TS$timename, weights = TS$weights, control = TS$control$response_args$control) - mod <- soft_call(fun, args, TRUE) + mod <- soft_call(what = fun, args = args, soften = TRUE) mod <- mod[[1]][[1]] mv <- as.vector(t(coef(mod))) @@ -299,7 +299,7 @@ est_regressors <- function(rho_dist, TS){ args <- list(data = data, formula = TS$formula, changepoints = cpts, timename = TS$timename, weights = TS$weights, control = TS$control$response_args$control) - mod <- soft_call(fun, args, TRUE) + mod <- soft_call(what = fun, args = args, soften = TRUE) ndraws <- freq_r[i] diff --git a/R/TS_responses.R b/R/TS_responses.R index b68e4a13..68d5083b 100644 --- a/R/TS_responses.R +++ b/R/TS_responses.R @@ -1,10 +1,12 @@ #' @title Fit a simplex-based change point Time Series model #' #' @description -#' \code{simplex_TS} fits a set of simplex regression models to a time +#' \code{simplex_TS} fits a set of simplex regression models +#' (Aitchison 1986, Aitchison \emph{et al.} 2002) to a time #' series of compositional data divided into multiple segments (a.k.a. #' chunks) based on given locations for a set of change points, using -#' e.g., the isometric log ratio (ILR) transformation. \cr \cr +#' e.g., the isometric log ratio (ILR) transformation +#' (Egozcue \emph{et al.} 2003, Pawlowsky-Glahn 2003. \cr \cr #' \code{simplex_TS_chunk} fits a simplex regression model using, e.g., the #' ILR transformation to a defined chunk of time (a.k.a. segment) #' \code{[chunk$start, chunk$end]} within a time series. \cr \cr @@ -74,6 +76,26 @@ #' \code{simplex_TS_control}: \code{list}, with named elements #' corresponding to response function controls. #' +#' @references +#' Aitchison, J. 1986. \emph{The Statistical Analysis of Compositional +#' Data}. Monographs on Statistics and Applied Probability. Chapman & Hall +#' Ltd., London, UK. +#' +#' Aitchison, J, C. Barcelo-Vidal, J.J. Egozcue, and V. Pawlowsky-Glahn. +#' 2002. A consise guide to the algebraic geometric structure of the +#' simplex, the sample space for compositional data analysis, Terra Nostra, +#' Schriften der Alfred Wegener-Stiftung, 03/2003. +#' +#' Egozcue J.J., V. Pawlowsky-Glahn, G. Mateu-Figueras and C. Barcelo-Vidal. +#' 2003. Isometric logratio transformations for compositional data analysis. +#' \emph{Mathematical Geology}, \strong{35}:279-300. +#' +#' Pawlowsky-Glahn, V. 2003. Statistical modelling on coordinates. In: +#' Thio-Henestrosa, S. and J. A. Martin-Fernandez, Eds. +#' \emph{Proceedings of the 1st International Workshop on Compositional Data +#' Analysis}, Universitat de Girona, ISBN 84-8458-111-X. +#' \href{link}{http://ima.udg.es/Activitats/CoDaWork03}. +#' #' @name simplex_TS #' @@ -177,7 +199,7 @@ simplex_TS_control <- function(transformation = ilr, quiet = FALSE, ...){ #' #' @param weights Optional class \code{numeric} vector of weights for each #' document. Defaults to \code{NULL}, translating to an equal weight for -#' each document. When using \code{ilr_TS} in a standard LDATS +#' each document. When using \code{multinom_TS} in a standard LDATS #' analysis, it is advisable to weight the documents by their total size, #' as the result of \code{\link{topicmodels_LDA}} is a matrix of #' proportions, which does not account for size differences among documents. @@ -213,6 +235,9 @@ simplex_TS_control <- function(transformation = ilr, quiet = FALSE, ...){ #' corresponding to response function controls. #' #' @references +#' Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. +#' Cambridge University Press, Cambridge, UK. +#' #' Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied #' Statistics with S}. Fourth Edition. Springer, New York, NY, USA. #' diff --git a/R/argument_checking.R b/R/argument_checking.R index 941e78d1..58fd734d 100644 --- a/R/argument_checking.R +++ b/R/argument_checking.R @@ -1,123 +1,217 @@ - - -#' @title Check that a control list is proper +#' @title Check that arguments are properly formatted for usage +#' +#' @description Verify the class, structure, and values of inputted arguments +#' to ensure proper LDATS modeling. \cr \cr +#' \code{check_class} is a general class-verifier. \cr \cr +#' \code{check_nonneg_integer} is a specified checking function for +#' \code{numeric} values that must be integer-conformable and non-negative +#' (0 is acceptable). \cr \cr +#' \code{check_nonneg_integer_matrix} is a specified checking function for +#' tables of \code{numeric} values that must be integer-conformable and +#' non-negative (0 is acceptable) and that must be conformable to +#' a \code{matrix}. \cr \cr +#' \code{check_pos_integer} is a specified checking function for +#' \code{numeric} values that must be integer-conformable and positive +#' (0 is not acceptable). \cr \cr +#' \code{check_control} verifies that a control \code{list} is a \code{list} +#' \cr \cr +#' \code{check_topics} ensures that the vector of numbers of topics is +#' positive integer-conformable. \cr \cr +#' \code{check_replicates} ensures that the number of replicates is +#' positive integer-conformable. \cr \cr +#' \code{check_nchangepoints} ensures that the of change points is +#' positive integer-conformable. \cr \cr +#' \code{check_document_term_table} ensures that the table of document +#' term counts is conformable to a \code{matrix} of positive integers. +#' \cr \cr +#' \code{check_LDAs} verifies that the argument is either a +#' \code{LDA} or \code{LDA_set} \code{list}. \cr \cr +#' \code{check_document_covariate_table} check that the table of +#' document-level covariates in the \code{LDAs} data is +#' conformable to a data frame and of the right size (correct number of +#' documents) for the document-topic output from the LDA models. \cr \cr +#' \code{check_weights} ensures that the vector of document weights is +#' \code{numeric} and positive and inform the user if the average weight +#' isn't 1.\cr \cr +#' \code{check_timename} checks that the vector of time values is included +#' in the \code{document_covariate_table} and that it is either a +#' \code{integer}-conformable or a \code{Date}. +#' If it is a \code{Date}, the input is converted to an +#' \code{integer}, resulting in the timestep being 1 day, which is often +#' not desired behavior. \cr \cr +#' \code{check_formulas} verifies that the input contains only +#' \code{\link[stats]{formula}}s and that the response and predictor +#' variables are all included in \code{LDAs} data sets. \cr \cr +#' \code{check_nchangepoints} checks that the \code{vector} of numbers of +#' changepoints is conformable to non-negative \code{integers}.\cr \cr +#' +#' @details #' -#' @description Check that a list of controls is of the right class. +#' @param object An object whose class should be checked against +#' \code{eclass}. +#' +#' @param eclass Expected class of \code{object} to be checked. If more +#' than one option is included, any are sufficient (\code{object} only +#' needs to be one \code{eclass}, not all). #' -#' @param control Control list to evaluate. -#' -#' @param eclass Expected class of the list to be evaluated. +#' @param control Control \code{list} to evaluate. +#' +#' @param topics \code{vector} of the number of topics to evaluate for each +#' model. Must be conformable to positive \code{integer} values. +#' +#' @param replicates \code{integer} number of replicate starts to use for +#' each value of \code{topics} in the LDAs. Must be conformable to +#' positive \code{integer} values. +#' +#' @param document_term_table Table of observation count data (rows: +#' documents, columns: terms. May be a \code{matrix} or +#' \code{data.frame} but must be conformable to a matrix of non-negative +#' \code{integers}. +#' +#' @param nchangepoints \code{integer}-conformable \code{vector} of the +#' number of changepoints to evaluate (must be non-negative). +#' +#' @param weights \code{numeric} \code{vector} of the document weights to +#' evaluate, or \code{TRUE} for triggering internal weighting by document +#' sizes. +#' +#' @param LDAs \code{LDA_models} \code{list} of LDA models or singular LDA +#' model (\code{LDA}) to evaluate. +#' +#' @param timename Column name for the time variable to evaluate in the +#' \code{document_covariate_table} if provided. +#' +#' @param formulas \code{vector} of the \code{\link[stats]{formula}}s +#' to evaluate. #' #' @return an error message is thrown if the input is improper, otherwise #' \code{NULL}. #' -#' @examples -#' check_control(list()) +#' +#' @name argument_checking +#' + + + +#' @rdname argument_checking #' #' @export #' -check_control <- function(control, eclass = "list"){ - if (!(eclass %in% class(control))){ - stop(paste0("control is not a ", eclass)) +check_class <- function(object, eclass = "list"){ + if(any(eclass == "nonneg_integer")){ + check_nonneg_integer(object) + return(invisible()) + } + if(any(eclass == "nonneg_integer_matrix")){ + check_nonneg_integer_matrix(object) + return(invisible()) + } + if(any(eclass == "pos_integer")){ + check_pos_integer(object) + return(invisible()) + } + if (!any(eclass %in% class(object))){ + object_name <- deparse(substitute(object)) + failed_eclass <- eclass[which(!(eclass %in% class(object)))] + failed_eclass <- paste0(failed_eclass, collapse = " or ") + stop(paste0(object_name, " is not a ", failed_eclass)) } - return() } - -#' @title Check that document term table is proper -#' -#' @description Check that the table of observations is conformable to -#' a matrix of integers. -#' -#' @param document_term_table Table of observation count data (rows: -#' documents, columns: terms. May be a class \code{matrix} or -#' \code{data.frame} but must be conformable to a matrix of integers, -#' as verified by \code{\link{check_document_term_table}}. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. -#' -#' @examples -#' data(rodents) -#' check_document_term_table(rodents$document_term_table) +#' @rdname argument_checking #' #' @export #' -check_document_term_table <- function(document_term_table){ - document_term_table_m <- as.matrix(document_term_table) - if(any(document_term_table_m %% 1 != 0)){ - dtt <- "document_term_table" - msg <- paste0(dtt, " is not conformable to a matrix of integers") - stop(msg) +check_nonneg_integer <- function(object){ + object_name <- deparse(substitute(object)) + + if (!is.numeric(object) || any(object %% 1 != 0)){ + stop(paste0(object_name, " must be integer-valued")) + } + if (any(object < 0)){ + stop(paste0(object_name, " must be non-negative")) } - return() } -#' @title Check that topics vector is proper -#' -#' @description Check that the vector of numbers of topics is conformable to -#' integers greater than 1. -#' -#' @param topics Vector of the number of topics to evaluate for each model. -#' Must be conformable to \code{integer} values. + +#' @rdname argument_checking #' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. +#' @export #' -#' @examples -#' check_topics(2) +check_nonneg_integer_matrix <- function(object){ + object_name <- deparse(substitute(object)) + object_m <- as.matrix(object) + check_nonneg_integer(object_m) +} + + + +#' @rdname argument_checking #' #' @export #' -check_topics <- function(topics){ - if (!is.numeric(topics) || any(topics %% 1 != 0)){ - stop("topics vector must be integers") +check_pos_integer <- function(object){ + object_name <- deparse(substitute(object)) + if (!is.numeric(object) || any(object %% 1 != 0)){ + stop(paste0(object_name, " must be integer-valued")) } - if (any(topics < 2)){ - stop("minimum number of topics currently allowed is 2") + if (any(object <= 0)){ + stop(paste0(object_name, " must be positive")) } - return() } -#' @title Check that nseeds value or vector is proper -#' -#' @description Check that the vector of numbers of seeds is conformable to -#' integers greater than 0. -#' -#' @param nseeds \code{integer} number of seeds (replicate starts) to use for -#' each value of \code{topics} in the LDAs. Must be conformable to a -#' positive \code{integer} value. -#' -#' @return an error message is thrown if the input is improper, otherwise -#' \code{NULL}. +#' @rdname argument_checking #' -#' @examples -#' check_nseeds(1) -#' check_nseeds(2) +#' @export +#' +check_control <- function(control, eclass = "list"){ + check_class(object = control, eclass = eclass) +} + + +#' @rdname argument_checking #' #' @export #' -check_nreps <- function(nreps){ - if (!is.numeric(nreps) || any(nreps %% 1 != 0)){ - stop("nreps must be integer-conformable") - } - return() +check_topics <- function(topics){ + check_class(object = topics, eclass = "pos_integer") } + +#' @rdname argument_checking +#' +#' @export +#' +check_replicates <- function(replicates){ + check_class(object = replicates, eclass = "pos_integer") +} + +#' @rdname argument_checking +#' +#' @export +#' check_nchangepoints <- function(nchangepoints){ - if (!is.numeric(nchangepoints) || any(nchangepoints %% 1 != 0)){ - stop("nchangepoints must be integer-valued") - } - if (any(nchangepoints < 0)){ - stop("nchangepoints must be non-negative") - } - return() + check_class(object = nchangepoints, eclass = "nonneg_integer") +} + +#' @rdname argument_checking +#' +#' @export +#' +check_document_term_table <- function(document_term_table){ + check_class(object = document_term_table, eclass = "nonneg_integer_matrix") + } + +#' @rdname argument_checking +#' +#' @export +#' check_weights <- function(weights){ if(is.logical(weights)){ if(weights){ - return() + return(invisible()) } else{ stop("if logical, weights need to be TRUE") } @@ -133,74 +227,59 @@ check_weights <- function(weights){ warning("weights should have a mean of 1, fit may be unstable") } } - return() } - -check_LDA_models <- function(LDA_models){ - if(("LDA_set" %in% class(LDA_models)) == FALSE){ - if(is(LDA_models, "LDA") == FALSE){ - stop("LDA_models is not an LDA object or LDA_set object") - } - } - return() +#' @rdname argument_checking +#' +#' @export +#' +check_LDAs <- function(LDAs){ + check_class(object = LDAs, eclass = c("LDA_set", "LDA")) } -check_document_covariate_table <- function(document_covariate_table, - LDA_models = NULL, - document_term_table = NULL){ - dct_df <- tryCatch(data.frame(document_covariate_table), - warning = function(x){NA}, error = function(x){NA}) - if(is(LDA_models, "LDA")){ - LDA_models <- c(LDA_models) - class(LDA_models) <- c("LDA_set", "list") - } - if (length(dct_df) == 1 && is.na(dct_df)){ - stop("document_covariate_table is not conformable to a data frame") - } - if (!is.null(LDA_models)){ - if (nrow(data.frame(document_covariate_table)) != - nrow(LDA_models[[1]]@gamma)){ - stop("number of documents in covariate table is not equal to number of - documents observed") - } - } else if (!is.null(document_term_table)){ - if (nrow(data.frame(document_covariate_table)) != - nrow(data.frame(document_term_table))){ - stop("number of documents in covariate table is not equal to number of - documents observed") - } - } - return() -} -check_timename <- function(document_covariate_table, timename){ + + +#' @rdname argument_checking +#' +#' @export +#' +check_timename <- function(LDAs, timename){ + + document_cov_table <- LDAs[[1]][[1]]$data$train$document_covariate_table if (!("character" %in% class(timename))){ stop("timename is not a character value") } if (length(timename) > 1){ stop("timename can only be one value") } - covariate_names <- colnames(document_covariate_table) + covariate_names <- colnames(document_cov_table) if ((timename %in% covariate_names) == FALSE){ stop("timename not present in document covariate table") } - time_covariate <- document_covariate_table[ , timename] + time_covariate <- document_cov_table[ , timename] if (!(is.Date(time_covariate)) & (!is.numeric(time_covariate) || !all(time_covariate %% 1 == 0))){ stop("covariate indicated by timename is not an integer or a date") } - return() } -check_formulas <- function(formulas, document_covariate_table, - control = list()){ - check_document_covariate_table(document_covariate_table) - check_control(control) - control <- do.call("TS_control", control) + + + + +#' @rdname argument_checking +#' +#' @export +#' +check_formulas <- function(LDAs, formulas){ + + dct <- LDAs[[1]][[1]]$data$train$document_covariate_table + control <- LDAs[[1]][[1]]$control + # response <- control$response - dct <- document_covariate_table + if (!is(formulas, "list")) { if (is(formulas, "formula")) { formulas <- c(formulas) @@ -220,55 +299,43 @@ check_formulas <- function(formulas, document_covariate_table, mis <- paste(misses, collapse = ", ") stop(paste0("formulas include predictors not present in data: ", mis)) } - return() } -#' @title Check that a formula is proper -#' -#' @description Check that \code{formula} is actually a -#' \code{\link[stats]{formula}} and that the -#' response and predictor variables are all included in \code{data}. -#' -#' @param formula \code{formula} to evaluate. -#' -#' @param data \code{data.frame} including [1] the time variable (indicated -#' in \code{timename}), [2] the predictor variables (required by -#' \code{formula}) and [3], the multinomial response variable (indicated in -#' \code{formula}) as verified by \code{\link{check_timename}} and -#' \code{\link{check_formula}}. Note that the response variables should be -#' formatted as a \code{data.frame} object named as indicated by the -#' \code{response} entry in the \code{control} list, such as \code{gamma} -#' for a standard TS analysis on LDA output. -#' -#' @return An error message is thrown if \code{formula} is not proper, -#' else \code{NULL}. -#' + +#' @rdname argument_checking +#' #' @export #' -check_formula <- function(data, formula){ +check_document_covariate_table <- function(LDAs){ + + dct <- LDAs[[1]][[1]]$data$train$document_covariate_table + dtt <- LDAs[[1]][[1]]$data$train$document_term_table - if (!is(formula, "formula")){ - stop("formula does not contain a single formula") - } - respLoc <- attr(terms(formula), "response") - if (respLoc == 0){ - stop("formula inputs should include response variable") - } - resp <- as.character(attr(terms(formula), "variables"))[-1][respLoc] - pred <- attr(terms(formula), "term.labels") - if (!resp %in% colnames(data)){ - stop("formula includes response not present in data") + dct_df <- tryCatch(data.frame(dct), + warning = function(x){NA}, error = function(x){NA}) + if(is(LDAs, "LDA")){ + LDAs <- c(LDAs) + class(LDAs) <- c("LDA_set", "list") } - if (!all(pred %in% colnames(data))){ - misses <- pred[which(pred %in% colnames(data) == FALSE)] - mis <- paste(misses, collapse = ", ") - stop(paste0("formula includes predictors not present in data: ", mis)) + if (length(dct_df) == 1 && is.na(dct_df)){ + stop("document_covariate_table is not conformable to a data frame") + } + if (!is.null(LDAs)){ + if (nrow(data.frame(dct)) != nrow(LDAs[[1]][[1]]$document_topic_matrix)){ + stop("number of documents in covariate table is not equal to number of + documents observed") + } + } else if (!is.null(dtt)){ + if (nrow(data.frame(dct)) != nrow(data.frame(dtt))){ + stop("number of documents in covariate table is not equal to number of + documents observed") + } } - return() } + diff --git a/R/data_preparation.R b/R/data_preparation.R index ca366e06..a5c7c489 100644 --- a/R/data_preparation.R +++ b/R/data_preparation.R @@ -1,39 +1,47 @@ #' @title Conform data for LDATS modeling #' #' @description Given any of a variety of possible data input types -#' (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of -#' \code{list}s, or \code{list} of \code{list} of \code{list}s) and -#' controls, this produces a properly formatted set of data (sets) for -#' LDATS modeling. +#' (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of +#' \code{list}s, or \code{list} of \code{list} of \code{list}s) and +#' controls, this produces a properly formatted set of data (sets) for +#' LDATS modeling. #' #' @details This function makes use of the \code{\link{list_depth}} -#' utility that recursively works through an object to tell you -#' how nested a lists is. Working up from the most elemental version -#' possible, if it's not a \code{list}, but the data are a term table, the -#' covariate table is added with assumed equispersed data like before and -#' the data are now a \code{list}. Then, if it is a \code{list} but only a -#' of depth 1 (a \code{list} of two tables), we need to wrap it in a -#' \code{list} to make it depth-2, functionally a 1-subset data set. Then, -#' for a \code{list} of depth two, we need to potentially expand to a -#' multiple-subset data set, to allow for cross validtion methods, for -#' example. So, the \code{list} of depth 2 is replicated out to create a -#' longer \code{list} that is still depth 2 but is now of length -#' \code{control$nsubsets}. Then, the subsetting of the data occurs -#' according to the \code{control$subset_rule}, and each depth-2 \code{list} -#' is actually split to a final level of train and test subsets of the data, -#' making the \code{list} depth 3. \cr \cr -#' The training and testing data are saved as trimmed versions of the -#' two tables. +#' utility that recursively works through an object to tell you +#' how nested a lists is. \cr \cr +#' Working up from the most elemental version of \code{data} possible, +#' if it's not a \code{list}, but the data are a term table, the +#' covariate table is added with assumed equispersed data and +#' the data are now a \code{list}. \cr +#' Then, if it is a \code{list} but only a of depth 1 (a \code{list} of two +#' tables), it is wrapped in a \code{list} to make it depth-2, +#' functionally a 1-subset data set. \cr +#' Then, if it is a \code{list} of depth two, it may need to be expanded to +#' a multiple-subset data set, to allow for cross validtion methods, for +#' example. So, the \code{list} of depth 2 is replicated out to create a +#' longer \code{list} that is still depth 2 but is now of length +#' \code{control$nsubsets}. \cr +#' Then, the subsetting of the data occurs according to the +#' \code{control$subset_rule}, and each depth-2 \code{list} is split to a +#' final level of training and testing subsets of the data, making the +#' \code{list} depth 3. \cr \cr +#' The training and testing data are constructed as trimmed versions of the +#' two tables, even if no data are required for testing. #' #' @param data A document term table, \code{list} of document term and -#' covariate tables, a list of training and test sets of the two tables, -#' or a list of multiple replicate splits of training and test sets of -#' the two tables. +#' covariate tables, a \code{list} of training and test sets of the two +#' tables, or a \code{list} of multiple replicate splits of training and +#' test sets of the two tables. #' #' @param control \code{list} of control options for the data conforming. #' #' @return \code{list} of properly formatted LDATS data. #' +#' @name conform_data +#' + +#' @rdname conform_data +#' #' @export #' conform_data <- function(data, control = list()){ diff --git a/R/utilities.R b/R/utilities.R index b88171e0..ba5f3309 100644 --- a/R/utilities.R +++ b/R/utilities.R @@ -1,30 +1,67 @@ -soft_call <- function(fun = function(x){invisible(NULL)}, args = list(NULL), - soften = FALSE){ +#' @title Soften a flexible function call to errors +#' +#' @description Wrapping around \code{\link{do.call}}, this function allows +#' for a simple "softening" where errors are returned as text, rather +#' than causing a break in the encompassing pipeline. +#' +#' @details As this is a basic wrapper on \code{\link{do.call}}, the basic +#' rules of its usage still apply: \cr +#' If \code{quote = FALSE} (the default), then the arguments are evaluated +#' in the calling environment and not in \code{envir}. \cr +#' If \code{quote = TRUE}, each argument is \code{\link{quote}}d +#' so that the effect of argument evaluation is to remove the quotes +#' leaving the original arguments unevaluated when the call is built. \cr +#' The behavior of some functions, such as \code{\link{substitute}}, will +#' not be the same for functions evaluated using \code{\link{do.call}} +#' and thus \code{soft_call} as if they were evaluated from the +#' interpreter. The precise semantics are currently undefined and subject +#' to change. +#' +#' @param what \code{function} or a non-empty \code{character} string +#' naming the \code{function} to be called. \cr +#' See \code{\link{do.call}}. +#' +#' @param args \code{list} of arguments to the \code{what} call. The names +#' attribute of the \code{list} gives the argument names.\cr +#' See \code{\link{do.call}}. +#' +#' @param quote \code{logical} value indicating whether to quote the +#' arguments. \cr +#' See \code{\link{do.call}}. +#' +#' @param envir \code{environment} within which to evaluate the call. This +#' argument will be most useful if \code{what} is a \code{character} +#' string and the arguments are symbols or \code{quote}d expressions.\cr +#' See \code{\link{do.call}}. +#' +#' @param soften \code{logical} value indicating whether to soften any errors +#' in the running of \code{what}. \cr +#' +#' @return Either the result of the (evaluated) call of \code{what} or a +#' \code{list} of the error message that resulted (if \code{soften = TRUE}). +#' +#' @export +#' +soft_call <- function(what = function(x){invisible(NULL)}, args = list(NULL), + quote = FALSE, envir = parent.frame(), soften = FALSE){ if(list_depth(args) == 0){ args <- list(args) } if(soften){ - tryCatch(do.call(what = fun, args = args), + tryCatch(do.call(what = what, args = args, quote = quote, envir = envir), warning = function(x){eval(x$call)}, error = function(x = list()){list(error = x$message)}) } else{ - do.call(what = fun, args = args) + do.call(what = what, args = args, quote = quote, envir = envir) } } - -time_order_data <- function(x, timename = "time"){ - time_order <- order(x[ , timename]) - x[time_order , ] -} - - #' @title Initialize and tick through the progress bar #' #' @description \code{prep_pbar} creates and \code{update_pbar} steps -#' through the progress bars (if desired) in, e.g., \code{\link{TS}} +#' through the progress bars (if desired) in, e.g., \code{\link{TS}}. #' #' @param control A \code{list} of parameters to control the fitting of the #' iterative model. @@ -297,9 +334,8 @@ modalvalue <- function(x){ #' number of words in a document within the corpus (mean value = 1). #' #' @param document_term_table Table of observation count data (rows: -#' documents, columns: terms. May be a class \code{matrix} or -#' \code{data.frame} but must be conformable to a matrix of integers, -#' as verified by \code{\link{check_document_term_table}}. +#' documents, columns: terms. May be a \code{matrix} or +#' \code{data.frame} but must be conformable to a matrix of integers. #' #' @return Vector of weights, one for each document, with the average sample #' receiving a weight of 1.0. @@ -345,7 +381,8 @@ messageq <- function(msg = NULL, quiet = FALSE){ #' @title Create a properly symmetric variance covariance matrix #' #' @description A wrapper on \code{\link[stats]{vcov}} to produce a symmetric -#' matrix. If the default matrix returned by \code{\link[stats]{vcov}} is +#' matrix. \cr +#' If the default matrix returned by \code{\link[stats]{vcov}} is #' symmetric it is returned simply. If it is not, in fact, symmetric #' (as occurs occasionally with \code{\link[nnet]{multinom}} applied to #' proportions), the matrix is made symmetric by averaging the lower and @@ -441,6 +478,6 @@ memoise_fun <- function(fun, memoise_tf = TRUE){ # provides a functionality that can be used in testing for non-symmetric # vcov matrix -vcov.dummy <- function(object, ...){ +vcov.test <- function(object, ...){ matrix(c(1, 2, 2.1, 3), 2, 2) } diff --git a/man/LDA.Rd b/man/LDA.Rd index e23f6215..e5249f4d 100644 --- a/man/LDA.Rd +++ b/man/LDA.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/LDA.R \name{LDA} \alias{LDA} +\alias{check_LDA} \alias{prepare_LDA} \alias{run_LDA} \alias{LDA_call} @@ -14,6 +15,8 @@ \usage{ LDA(data, topics = 2, replicates = 1, control = list()) +check_LDA(topics = 2, replicates = 1, control = list()) + prepare_LDA(data, topics = 2, replicates = 1, control = list()) run_LDA(LDAs) @@ -94,6 +97,8 @@ automated removal of unneeded controls.} used to fit the model. \cr \cr \code{prepare_LDA}: \code{list} of \code{list}s, each of which is a preliminary model object for an LDA model fit. \cr \cr + \code{check_LDA}: an error message is thrown if any input is improper, + otherwise \code{NULL}. \code{LDA_control}: \code{list} of controls for the LDA model, with named elements corresponding to the arguments. \code{run_LDA}: \code{LDA_set} \code{list} of model results from all @@ -103,7 +108,7 @@ automated removal of unneeded controls.} run of a \code{} function, such as \code{\link{topicmodels_LDA}}. \cr \cr \code{measure_LDA}: \code{vector} of values corresponding to the model - evaluations. + evaluations. \cr \cr \code{select_LDA}: \code{list} of selected models' \code{list}s. } \description{ @@ -113,6 +118,9 @@ Conduct Linguistic Decomposition Analyses. \cr \cr \emph{et al.} 2018). \cr \cr \code{prepare_LDA} pre-prepares the LDA model objects for simpler use within the subfunctions. \cr \cr + \code{check_LDA} ensures that the inputs are proper. + See \code{\link{check_topics}}, \code{\link{check_replicates}}, + and \code{\link{check_control}} for specifics. \cr \cr \code{LDA_control} defines and creates the control list used to fit the LDA model. \cr \cr \code{run_LDA} runs (via \code{\link{LDA_call}}) all LDA models diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index eb4d659e..23a15edf 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -7,7 +7,7 @@ \title{Run a set of Linguistic Decomposition Analysis models coupled to Bayesian Time Series models} \usage{ -LDA_TS(data, topics = 2, reps = 1, formulas = ~1, +LDA_TS(data, topics = 2, replicates = 1, formulas = ~1, nchangepoints = 0, timename = "time", weights = TRUE, control = list()) @@ -39,6 +39,10 @@ validity for the desired model.} topics to evaluate for each model. \cr (See \code{\link{LDA}}.)} +\item{replicates}{\code{integer}-conformable number of replicate starts to +use for each value of \code{topics}. \cr +(See \code{\link{LDA}}.)} + \item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the regression between the change points. Any predictor variable included must also be a column in \code{data} and any (compositional) response @@ -152,10 +156,6 @@ models; \code{TS_selector} operates on the values to choose the models.} \item{...}{Not passed along to the output, rather included to allow for automated removal of unneeded controls.} -\item{replicates}{\code{integer}-conformable number of replicate starts to -use for each value of \code{topics}. \cr -(See \code{\link{LDA}}.)} - \item{response_args}{\code{list} of (named) arguments to be used in \code{TS_response} via \code{\link{do.call}}. \cr \cr diff --git a/man/TS.Rd b/man/TS.Rd index e3faa01d..f95b8b64 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/TS.R \name{TS} \alias{TS} +\alias{check_TS} \alias{run_TS} \alias{TS_call} \alias{TS_msg} @@ -12,7 +13,10 @@ \alias{TS_control} \title{Conduct a Bayesian compositional Time Series analysis} \usage{ -TS(LDAs, data, formulas = ~1, nchangepoints = 0, timename = "time", +TS(LDAs, formulas = ~1, nchangepoints = 0, timename = "time", + weights = NULL, control = list()) + +check_TS(LDAs, formulas = ~1, nchangepoints = 0, timename = "time", weights = NULL, control = list()) run_TS(TSs) @@ -21,8 +25,8 @@ TS_call(TS) TS_msg(TS) -prepare_TS(LDAs, data, formulas = ~1, nchangepoints = 0, - timename = "time", weights = NULL, control = list()) +prepare_TS(LDAs, formulas = ~1, nchangepoints = 0, timename = "time", + weights = NULL, control = list()) package_TS(TSs) @@ -39,15 +43,6 @@ TS_control(model = sequential_TS, model_args = list(control = selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...) } \arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the compositional response variable (indicated -in \code{formula}). \cr \cr -Note that the response variables should be formatted as a -\code{data.frame} object named as indicated by the \code{response} entry -in the \code{control} list, such as \code{gamma} for a standard TS -analysis on LDA output.} - \item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the regression between the change points. Any predictor variable included must also be a column in \code{data} and any (compositional) response @@ -143,6 +138,8 @@ automated removal of unneeded controls.} used to fit the model. \cr \cr \code{prepare_TS}: \code{list} of \code{list}s, each of which is a preliminary model object for a Time Series model fit. \cr \cr + \code{check_TS}: an error message is thrown if any input is improper, + otherwise \code{NULL}. \code{TS_control}: \code{list} of named control elements for model fitting. \code{measure_TS}: \code{vector} of values corresponding to the model @@ -164,6 +161,12 @@ Analyze compositional Time Series models using Bayesian \emph{et al.} 2018). \cr \cr \code{prepare_TS} pre-prepares the TS model objects for simpler use within the subfunctions. \cr \cr + \code{check_TS} ensures that the inputs are proper. + See \code{\link{check_LDAs}}, + \code{\link{check_document_covariate_table}}, + code{\link{check_formulas}}, \code{\link{check_nchangepoints}}, + \code{\link{check_timename}}, \code{\link{check_weights}}, + and \code{\link{check_control}} for specifics. \cr \cr \code{TS_control} defines and creates the control \code{list} for the TS model running. \cr \cr \code{run_TS} runs (via \code{\link{TS_call}}) all TS models diff --git a/man/argument_checking.Rd b/man/argument_checking.Rd new file mode 100644 index 00000000..2f2ed25f --- /dev/null +++ b/man/argument_checking.Rd @@ -0,0 +1,139 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/argument_checking.R +\name{argument_checking} +\alias{argument_checking} +\alias{check_class} +\alias{check_nonneg_integer} +\alias{check_nonneg_integer_matrix} +\alias{check_pos_integer} +\alias{check_control} +\alias{check_topics} +\alias{check_replicates} +\alias{check_nchangepoints} +\alias{check_document_term_table} +\alias{check_weights} +\alias{check_LDAs} +\alias{check_timename} +\alias{check_formulas} +\alias{check_document_covariate_table} +\title{Check that arguments are properly formatted for usage} +\usage{ +check_class(object, eclass = "list") + +check_nonneg_integer(object) + +check_nonneg_integer_matrix(object) + +check_pos_integer(object) + +check_control(control, eclass = "list") + +check_topics(topics) + +check_replicates(replicates) + +check_nchangepoints(nchangepoints) + +check_document_term_table(document_term_table) + +check_weights(weights) + +check_LDAs(LDAs) + +check_timename(LDAs, timename) + +check_formulas(LDAs, formulas) + +check_document_covariate_table(LDAs) +} +\arguments{ +\item{object}{An object whose class should be checked against +\code{eclass}.} + +\item{eclass}{Expected class of \code{object} to be checked. If more +than one option is included, any are sufficient (\code{object} only +needs to be one \code{eclass}, not all).} + +\item{control}{Control \code{list} to evaluate.} + +\item{topics}{\code{vector} of the number of topics to evaluate for each +model. Must be conformable to positive \code{integer} values.} + +\item{replicates}{\code{integer} number of replicate starts to use for +each value of \code{topics} in the LDAs. Must be conformable to +positive \code{integer} values.} + +\item{nchangepoints}{\code{integer}-conformable \code{vector} of the +number of changepoints to evaluate (must be non-negative).} + +\item{document_term_table}{Table of observation count data (rows: +documents, columns: terms. May be a \code{matrix} or +\code{data.frame} but must be conformable to a matrix of non-negative +\code{integers}.} + +\item{weights}{\code{numeric} \code{vector} of the document weights to +evaluate, or \code{TRUE} for triggering internal weighting by document +sizes.} + +\item{LDAs}{\code{LDA_models} \code{list} of LDA models or singular LDA +model (\code{LDA}) to evaluate.} + +\item{timename}{Column name for the time variable to evaluate in the +\code{document_covariate_table} if provided.} + +\item{formulas}{\code{vector} of the \code{\link[stats]{formula}}s +to evaluate.} +} +\value{ +an error message is thrown if the input is improper, otherwise + \code{NULL}. +} +\description{ +Verify the class, structure, and values of inputted arguments + to ensure proper LDATS modeling. \cr \cr + \code{check_class} is a general class-verifier. \cr \cr + \code{check_nonneg_integer} is a specified checking function for + \code{numeric} values that must be integer-conformable and non-negative + (0 is acceptable). \cr \cr + \code{check_nonneg_integer_matrix} is a specified checking function for + tables of \code{numeric} values that must be integer-conformable and + non-negative (0 is acceptable) and that must be conformable to + a \code{matrix}. \cr \cr + \code{check_pos_integer} is a specified checking function for + \code{numeric} values that must be integer-conformable and positive + (0 is not acceptable). \cr \cr + \code{check_control} verifies that a control \code{list} is a \code{list} + \cr \cr + \code{check_topics} ensures that the vector of numbers of topics is + positive integer-conformable. \cr \cr + \code{check_replicates} ensures that the number of replicates is + positive integer-conformable. \cr \cr + \code{check_nchangepoints} ensures that the of change points is + positive integer-conformable. \cr \cr + \code{check_document_term_table} ensures that the table of document + term counts is conformable to a \code{matrix} of positive integers. + \cr \cr + \code{check_LDAs} verifies that the argument is either a + \code{LDA} or \code{LDA_set} \code{list}. \cr \cr + \code{check_document_covariate_table} check that the table of + document-level covariates in the \code{LDAs} data is + conformable to a data frame and of the right size (correct number of + documents) for the document-topic output from the LDA models. \cr \cr + \code{check_weights} ensures that the vector of document weights is + \code{numeric} and positive and inform the user if the average weight + isn't 1.\cr \cr + \code{check_timename} checks that the vector of time values is included + in the \code{document_covariate_table} and that it is either a + \code{integer}-conformable or a \code{Date}. + If it is a \code{Date}, the input is converted to an + \code{integer}, resulting in the timestep being 1 day, which is often + not desired behavior. \cr \cr + \code{check_formulas} verifies that the input contains only + \code{\link[stats]{formula}}s and that the response and predictor + variables are all included in \code{LDAs} data sets. \cr \cr + \code{check_nchangepoints} checks that the \code{vector} of numbers of + changepoints is conformable to non-negative \code{integers}.\cr \cr +} +\details{ + +} diff --git a/man/check_control.Rd b/man/check_control.Rd deleted file mode 100644 index ef17b84a..00000000 --- a/man/check_control.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/argument_checking.R -\name{check_control} -\alias{check_control} -\title{Check that a control list is proper} -\usage{ -check_control(control, eclass = "list") -} -\arguments{ -\item{control}{Control list to evaluate.} - -\item{eclass}{Expected class of the list to be evaluated.} -} -\value{ -an error message is thrown if the input is improper, otherwise - \code{NULL}. -} -\description{ -Check that a list of controls is of the right class. -} -\examples{ - check_control(list()) - -} diff --git a/man/check_document_term_table.Rd b/man/check_document_term_table.Rd deleted file mode 100644 index 6ed113e9..00000000 --- a/man/check_document_term_table.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/argument_checking.R -\name{check_document_term_table} -\alias{check_document_term_table} -\title{Check that document term table is proper} -\usage{ -check_document_term_table(document_term_table) -} -\arguments{ -\item{document_term_table}{Table of observation count data (rows: -documents, columns: terms. May be a class \code{matrix} or -\code{data.frame} but must be conformable to a matrix of integers, -as verified by \code{\link{check_document_term_table}}.} -} -\value{ -an error message is thrown if the input is improper, otherwise - \code{NULL}. -} -\description{ -Check that the table of observations is conformable to - a matrix of integers. -} -\examples{ - data(rodents) - check_document_term_table(rodents$document_term_table) - -} diff --git a/man/check_formula.Rd b/man/check_formula.Rd deleted file mode 100644 index 9321ec31..00000000 --- a/man/check_formula.Rd +++ /dev/null @@ -1,29 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/argument_checking.R -\name{check_formula} -\alias{check_formula} -\title{Check that a formula is proper} -\usage{ -check_formula(data, formula) -} -\arguments{ -\item{data}{\code{data.frame} including [1] the time variable (indicated -in \code{timename}), [2] the predictor variables (required by -\code{formula}) and [3], the multinomial response variable (indicated in -\code{formula}) as verified by \code{\link{check_timename}} and -\code{\link{check_formula}}. Note that the response variables should be -formatted as a \code{data.frame} object named as indicated by the -\code{response} entry in the \code{control} list, such as \code{gamma} -for a standard TS analysis on LDA output.} - -\item{formula}{\code{formula} to evaluate.} -} -\value{ -An error message is thrown if \code{formula} is not proper, - else \code{NULL}. -} -\description{ -Check that \code{formula} is actually a - \code{\link[stats]{formula}} and that the - response and predictor variables are all included in \code{data}. -} diff --git a/man/check_nreps.Rd b/man/check_nreps.Rd deleted file mode 100644 index 8302664f..00000000 --- a/man/check_nreps.Rd +++ /dev/null @@ -1,26 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/argument_checking.R -\name{check_nreps} -\alias{check_nreps} -\title{Check that nseeds value or vector is proper} -\usage{ -check_nreps(nreps) -} -\arguments{ -\item{nseeds}{\code{integer} number of seeds (replicate starts) to use for -each value of \code{topics} in the LDAs. Must be conformable to a -positive \code{integer} value.} -} -\value{ -an error message is thrown if the input is improper, otherwise - \code{NULL}. -} -\description{ -Check that the vector of numbers of seeds is conformable to - integers greater than 0. -} -\examples{ - check_nseeds(1) - check_nseeds(2) - -} diff --git a/man/check_topics.Rd b/man/check_topics.Rd deleted file mode 100644 index 5511a6b4..00000000 --- a/man/check_topics.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/argument_checking.R -\name{check_topics} -\alias{check_topics} -\title{Check that topics vector is proper} -\usage{ -check_topics(topics) -} -\arguments{ -\item{topics}{Vector of the number of topics to evaluate for each model. -Must be conformable to \code{integer} values.} -} -\value{ -an error message is thrown if the input is improper, otherwise - \code{NULL}. -} -\description{ -Check that the vector of numbers of topics is conformable to - integers greater than 1. -} -\examples{ - check_topics(2) - -} diff --git a/man/conform_data.Rd b/man/conform_data.Rd index 48bac4bd..d6dc6045 100644 --- a/man/conform_data.Rd +++ b/man/conform_data.Rd @@ -8,9 +8,9 @@ conform_data(data, control = list()) } \arguments{ \item{data}{A document term table, \code{list} of document term and -covariate tables, a list of training and test sets of the two tables, -or a list of multiple replicate splits of training and test sets of -the two tables.} +covariate tables, a \code{list} of training and test sets of the two +tables, or a \code{list} of multiple replicate splits of training and +test sets of the two tables.} \item{control}{\code{list} of control options for the data conforming.} } @@ -19,28 +19,31 @@ the two tables.} } \description{ Given any of a variety of possible data input types - (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of - \code{list}s, or \code{list} of \code{list} of \code{list}s) and - controls, this produces a properly formatted set of data (sets) for - LDATS modeling. + (\code{data.frame}/\code{matrix}, \code{list}, \code{list} of + \code{list}s, or \code{list} of \code{list} of \code{list}s) and + controls, this produces a properly formatted set of data (sets) for + LDATS modeling. } \details{ This function makes use of the \code{\link{list_depth}} - utility that recursively works through an object to tell you - how nested a lists is. Working up from the most elemental version - possible, if it's not a \code{list}, but the data are a term table, the - covariate table is added with assumed equispersed data like before and - the data are now a \code{list}. Then, if it is a \code{list} but only a - of depth 1 (a \code{list} of two tables), we need to wrap it in a - \code{list} to make it depth-2, functionally a 1-subset data set. Then, - for a \code{list} of depth two, we need to potentially expand to a - multiple-subset data set, to allow for cross validtion methods, for - example. So, the \code{list} of depth 2 is replicated out to create a - longer \code{list} that is still depth 2 but is now of length - \code{control$nsubsets}. Then, the subsetting of the data occurs - according to the \code{control$subset_rule}, and each depth-2 \code{list} - is actually split to a final level of train and test subsets of the data, - making the \code{list} depth 3. \cr \cr - The training and testing data are saved as trimmed versions of the - two tables. + utility that recursively works through an object to tell you + how nested a lists is. \cr \cr + Working up from the most elemental version of \code{data} possible, + if it's not a \code{list}, but the data are a term table, the + covariate table is added with assumed equispersed data and + the data are now a \code{list}. \cr + Then, if it is a \code{list} but only a of depth 1 (a \code{list} of two + tables), it is wrapped in a \code{list} to make it depth-2, + functionally a 1-subset data set. \cr + Then, if it is a \code{list} of depth two, it may need to be expanded to + a multiple-subset data set, to allow for cross validtion methods, for + example. So, the \code{list} of depth 2 is replicated out to create a + longer \code{list} that is still depth 2 but is now of length + \code{control$nsubsets}. \cr + Then, the subsetting of the data occurs according to the + \code{control$subset_rule}, and each depth-2 \code{list} is split to a + final level of training and testing subsets of the data, making the + \code{list} depth 3. \cr \cr + The training and testing data are constructed as trimmed versions of the + two tables, even if no data are required for testing. } diff --git a/man/document_weights.Rd b/man/document_weights.Rd index 0f74fd19..2e57eee8 100644 --- a/man/document_weights.Rd +++ b/man/document_weights.Rd @@ -8,9 +8,8 @@ document_weights(document_term_table) } \arguments{ \item{document_term_table}{Table of observation count data (rows: -documents, columns: terms. May be a class \code{matrix} or -\code{data.frame} but must be conformable to a matrix of integers, -as verified by \code{\link{check_document_term_table}}.} +documents, columns: terms. May be a \code{matrix} or +\code{data.frame} but must be conformable to a matrix of integers.} } \value{ Vector of weights, one for each document, with the average sample diff --git a/man/mirror_vcov.Rd b/man/mirror_vcov.Rd index b5010a61..c6f2315d 100644 --- a/man/mirror_vcov.Rd +++ b/man/mirror_vcov.Rd @@ -15,7 +15,8 @@ Properly symmetric variance covariance \code{matrix}. } \description{ A wrapper on \code{\link[stats]{vcov}} to produce a symmetric - matrix. If the default matrix returned by \code{\link[stats]{vcov}} is + matrix. \cr + If the default matrix returned by \code{\link[stats]{vcov}} is symmetric it is returned simply. If it is not, in fact, symmetric (as occurs occasionally with \code{\link[nnet]{multinom}} applied to proportions), the matrix is made symmetric by averaging the lower and diff --git a/man/prep_pbar.Rd b/man/prep_pbar.Rd index a181da69..5ddb1d8d 100644 --- a/man/prep_pbar.Rd +++ b/man/prep_pbar.Rd @@ -28,5 +28,5 @@ Currently available options are "rho" (for change point locations) and } \description{ \code{prep_pbar} creates and \code{update_pbar} steps - through the progress bars (if desired) in, e.g., \code{\link{TS}} + through the progress bars (if desired) in, e.g., \code{\link{TS}}. } diff --git a/man/soft_call.Rd b/man/soft_call.Rd new file mode 100644 index 00000000..882da884 --- /dev/null +++ b/man/soft_call.Rd @@ -0,0 +1,54 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/utilities.R +\name{soft_call} +\alias{soft_call} +\title{Soften a flexible function call to errors} +\usage{ +soft_call(what = function(x) { invisible(NULL) }, + args = list(NULL), quote = FALSE, envir = parent.frame(), + soften = FALSE) +} +\arguments{ +\item{what}{\code{function} or a non-empty \code{character} string +naming the \code{function} to be called. \cr +See \code{\link{do.call}}.} + +\item{args}{\code{list} of arguments to the \code{what} call. The names +attribute of the \code{list} gives the argument names.\cr +See \code{\link{do.call}}.} + +\item{quote}{\code{logical} value indicating whether to quote the +arguments. \cr +See \code{\link{do.call}}.} + +\item{envir}{\code{environment} within which to evaluate the call. This +argument will be most useful if \code{what} is a \code{character} +string and the arguments are symbols or \code{quote}d expressions.\cr +See \code{\link{do.call}}.} + +\item{soften}{\code{logical} value indicating whether to soften any errors +in the running of \code{what}. \cr} +} +\value{ +Either the result of the (evaluated) call of \code{what} or a + \code{list} of the error message that resulted (if \code{soften = TRUE}). +} +\description{ +Wrapping around \code{\link{do.call}}, this function allows + for a simple "softening" where errors are returned as text, rather + than causing a break in the encompassing pipeline. +} +\details{ +As this is a basic wrapper on \code{\link{do.call}}, the basic + rules of its usage still apply: \cr + If \code{quote = FALSE} (the default), then the arguments are evaluated + in the calling environment and not in \code{envir}. \cr + If \code{quote = TRUE}, each argument is \code{\link{quote}}d + so that the effect of argument evaluation is to remove the quotes + leaving the original arguments unevaluated when the call is built. \cr + The behavior of some functions, such as \code{\link{substitute}}, will + not be the same for functions evaluated using \code{\link{do.call}} + and thus \code{soft_call} as if they were evaluated from the + interpreter. The precise semantics are currently undefined and subject + to change. +} diff --git a/notes.R b/notes.R index a8de1dc9..115d1a49 100644 --- a/notes.R +++ b/notes.R @@ -1,120 +1,33 @@ known to dos -check functions -utilities +NEWS plotting functions simulate -make formulas be able to be repeatedly prepped -its not really right to use gamma as a name for simplex -citations for simplex - +predict +tidying check functions +tempering +examples +"1 topics" -> "1 topic" in lda msg devtools::load_all() data(rodents) - data <- rodents -topics = 2 -replicates = 2 +topics = 1:2 +replicates = c(2,5) formulas = ~ 1 nchangepoints = 1 timename = "newmoon" weights = TRUE -control = list() +control = LDA_TS_control() LDAs <- LDA(data = data, topics = topics, replicates = replicates, - control = list()) -control <- LDA_TS_control() + control = control$LDA_control) control$TS_control$method_args$control$nit <- 100 -TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, +TSs <- TS(LDAs = LDAs, formulas = formulas, nchangepoints = nchangepoints, timename = timename, weights = weights, control = control$TS_control) +not sure if needed: -now LDA could be any of the linquistic decomposition analyses or whatever -including any of a number of "LDA" functions or models, so i'm revoking -the importing of LDA from topicmodels but keeping topicmodels imported -to allow calling of topicmodels::LDA from inside LDA (the default!) - - -seed is rep - -introduction of soften logical variable -designed to help soften errors in pipelines through wrapping in tryCatch - -LDA_set is now LDA and TS_on_LDA is now TS - -standardized output from LDA and TS functions - - -# LDA is now functionally what LDA_set was before -# "reps" replaces "nseeds" but otherwise things are the same generally at api -# the control list is expanded to now include a base LDA modeling function -# and then arguments for all three functions, it also gets the subset info -# because it may be needed, and in addition to quiet a boolean "soften" -# which softens errors during model running -# prep_LDA_models combines the data (conforming if needed), topics, -# reps, and subsets to prep the list of model inputs, that will actually be -# appended to with the results, which are done at the top with LDA_call. -# LDA_call prints the message, and then preps the input arguments as used -# in a do.call on the function given in the control list. there are -# examples of both a generalized topicmodels LDA function wrapper (works -# with Gibbs sampling approach too!) and an "identity" 1-topic function. -# these functions allow for pre- and post-processing around the main model -# function without having to impact the general LDA_call -# select_LDA does a general measuring and then selecting, which now allows -# for arguments to be passed in! - - -# data can come into LDA_TS LDA TS in a variety of forms, and depending on -# usages, might take a variety of different forms -# the purpose of this function is to generalize and extract the code used -# to shuddle between data formats from functions / replace with a single line -# it's still a work in progress and needs more extensive usage exploration, -# as it's going to be a workhorse function. -currently its not saving the test/train split explicitly, -# just implicitly via the data encoding that exists. we should probably -# shore this up a bit more for sure. -# also this function is big and modularized a good degree already...it could -# get chunked into subfunctions -# there are functions for basic leave p out cross validation, including -# both systematic and random approaches - - -LDA_TS - - LDA_TS_control - LDA_control - TS_control - - LDA - prepare_LDA - LDA_control - conform_data - run_LDA - LDA_call (replicated for each model) - LDA_msg - LDA$control$model with LDA$control$model_args - topicmodels::LDA - package_LDA - select_LDA - LDA$control$selector with LDA$control$selector_args - measure_LDA (replicated for each model) - LDA$control$measurer with LDA$control$measurer_args - - TS - prepare_TS - TS_control - run_TS - TS_call (replicated for each model) - TS_msg - TS$control$model with TS$control$model_args - sequential_TS_control - est_changepoints - est_regressors - package_sequential_TS - package_TS - select_TS - TS$control$selector with TS$control$selector_args - measure_TS (replicated for each model) - TS$control$measurer with TS$control$measurer_args - - - +time_order_data <- function(x, timename = "time"){ + time_order <- order(x[ , timename]) + x[time_order , ] +} \ No newline at end of file diff --git a/vignettes/LDATS_codebase.Rmd b/vignettes/LDATS_codebase.Rmd index 0c736efa..5b774664 100644 --- a/vignettes/LDATS_codebase.Rmd +++ b/vignettes/LDATS_codebase.Rmd @@ -20,6 +20,48 @@ library(LDATS) vers <- packageVersion("LDATS") today <- Sys.Date() ``` +incorporate this! + + +LDA_TS + + LDA_TS_control + LDA_control + TS_control + + LDA + prepare_LDA + LDA_control + conform_data + run_LDA + LDA_call (replicated for each model) + LDA_msg + LDA$control$model with LDA$control$model_args + topicmodels::LDA + package_LDA + select_LDA + LDA$control$selector with LDA$control$selector_args + measure_LDA (replicated for each model) + LDA$control$measurer with LDA$control$measurer_args + + TS + prepare_TS + TS_control + run_TS + TS_call (replicated for each model) + TS_msg + TS$control$model with TS$control$model_args + sequential_TS_control + est_changepoints + est_regressors + package_sequential_TS + package_TS + select_TS + TS$control$selector with TS$control$selector_args + measure_TS (replicated for each model) + TS$control$measurer with TS$control$measurer_args + + ## Overview From 297f67cfbdb8545c077c2922dd8ccee467b10734 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sun, 22 Mar 2020 22:49:53 -0700 Subject: [PATCH 28/43] lda plots --- NAMESPACE | 2 +- R/LDA.R | 3 +- R/LDA_models.R | 16 ++-- R/LDA_plots.R | 121 +++++++++++---------------- man/multinom_TS.Rd | 7 +- man/{plot.LDA_VEM.Rd => plot.LDA.Rd} | 44 +++++----- man/plot.LDA_set.Rd | 11 +-- man/set_LDA_plot_colors.Rd | 43 ---------- man/simplex_TS.Rd | 26 +++++- notes.R | 5 +- 10 files changed, 113 insertions(+), 165 deletions(-) rename man/{plot.LDA_VEM.Rd => plot.LDA.Rd} (66%) delete mode 100644 man/set_LDA_plot_colors.Rd diff --git a/NAMESPACE b/NAMESPACE index 1cea599b..7a46d781 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,8 +4,8 @@ S3method(AIC,LDA) S3method(logLik,LDA) S3method(logLik,TS) S3method(logLik,TS_fit) +S3method(plot,LDA) S3method(plot,LDA_TS) -S3method(plot,LDA_VEM) S3method(plot,LDA_set) S3method(plot,TS_fit) S3method(print,TS) diff --git a/R/LDA.R b/R/LDA.R index 2d5d63a4..07b53cb6 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -218,7 +218,8 @@ LDA_call <- function(LDA){ #' LDA_msg <- function(LDA){ subset_msg <- paste0(" - data subset ", LDA$data_subset) - topic_msg <- paste0(", ", LDA$topics, " topics") + topic_word <- ifelse(LDA$topics == 1, " topic", " topics") + topic_msg <- paste0(", ", LDA$topics, topic_word) rep_msg <- paste0(", replicate ", LDA$rep) messageq(paste0(subset_msg, topic_msg, rep_msg), LDA$control$quiet) } diff --git a/R/LDA_models.R b/R/LDA_models.R index 98242e37..241eb241 100644 --- a/R/LDA_models.R +++ b/R/LDA_models.R @@ -28,6 +28,7 @@ #' \describe{ #' \item{alpha}{parameter estimate.} #' \item{beta}{parameter estimate.} +#' \item{terms}{\code{character} \code{vector} of term names.} #' \item{document_topic_matrix}{estimated latent topic compositions.} #' \item{test_document_topic_matrox}{estimated latent topic compositions #' of the test data (not presently available for usage).} @@ -74,7 +75,8 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ attr(mod_ll, "nobs") <- mod@Dim[1] * mod@Dim[2] class(mod_ll) <- "logLik" out <- update_list(LDA, params = list(alpha = mod@alpha, beta = mod@beta), - document_topic_matrix = mod@gamma, + document_topic_table = mod@gamma, + terms = mod@terms, test_document_topic_matrix = NULL, #not available log_likelihood = mod_ll) class(out) <- c("LDA", "list") @@ -96,6 +98,7 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ #' \describe{ #' \item{alpha}{parameter estimate.} #' \item{beta}{parameter estimate.} +#' \item{terms}{\code{character} \code{vector} of term names.} #' \item{document_topic_matrix}{estimated latent topic compositions.} #' \item{test_document_topic_matrox}{estimated latent topic compositions #' of the test data (not presently available for usage).} @@ -114,13 +117,16 @@ identity_LDA <- function(LDA){ data <- LDA$data rep <- LDA$rep data_subset <- LDA$data_subset - document_topic_table <- data$train$document_term_table - document_topic_table <- document_topic_table / rowSums(document_topic_table) - colnames(document_topic_table) <- NULL - out <- update_list(LDA, params = list(), + document_topic_table <- matrix(1, ncol = 1, + nrow = NROW(data$train$document_term_table)) + beta <- apply(data$train$document_term_table, 2, sum) + beta <- log(beta/sum(beta)) + beta <- matrix(beta, nrow = 1) + out <- update_list(LDA, params = list(alpha = 1, beta = beta), document_topic_table = document_topic_table, log_likelihood = NULL, data = data, topics = 1, rep = rep, data_subset = data_subset, + terms = colnames(data$train$document_term_table), test_document_topic_matrix = NULL) #not available class(out) <- c("LDA", "list") out diff --git a/R/LDA_plots.R b/R/LDA_plots.R index ba3f7462..7338c8e0 100644 --- a/R/LDA_plots.R +++ b/R/LDA_plots.R @@ -4,22 +4,23 @@ #' work on a list of LDA topic models (class \code{LDA_set}). #' #' @param x An \code{LDA_set} object of LDA topic models. +#' +#' @param ... Not used, retained for alignment with base function. #' -#' @param ... Additional arguments to be passed to subfunctions. -#' -#' @return \code{NULL}. +#' @param selected \code{logical} indicator of if only the selected LDAs +#' (the first element in \code{x}) should be plotted or if all the LDAs +#' (the second element in \code{x}) should be plotted. #' -#' @examples -#' \donttest{ -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) -#' plot(r_LDA) -#' } +#' @return \code{NULL}. #' #' @export #' -plot.LDA_set <- function(x, ...){ +plot.LDA_set <- function(x, ..., selected = TRUE){ + if(selected){ + x <- x[[1]] + } else{ + x <- x[[2]] + } on.exit(devAskNewPage(FALSE)) if (length(x) > 1){ devAskNewPage(TRUE) @@ -30,17 +31,18 @@ plot.LDA_set <- function(x, ...){ #' @title Plot the results of an LDATS LDA model #' -#' @description Create an LDATS LDA summary plot, with a top panel showing -#' the topic proportions for each word and a bottom panel showing the topic -#' proportions of each document/over time. The plot function is defined for -#' class \code{LDA_VEM} specifically (see \code{\link[topicmodels]{LDA}}). -#' \cr \cr +#' @description +#' \code{plot.LDA} creates an LDATS LDA summary plot, with a top panel +#' showing the topic proportions for each word and a bottom panel showing +#' the topic proportions of each document/over time. \cr \cr #' \code{LDA_plot_top_panel} creates an LDATS LDA summary plot -#' top panel showing the topic proportions word-by-word. \cr \cr +#' top panel showing the topic proportions word-by-word. \cr \cr #' \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot -#' bottom panel showing the topic proportions over time/documents. +#' bottom panel showing the topic proportions over time/documents. \cr \cr +#' \code{set_LDA_plot_colors} creates the set of colors to be used in +#' the LDA plots based on the variety of argument options. #' -#' @param x Object of class \code{LDA_VEM}. +#' @param x Object of class \code{LDA}. #' #' @param xtime Optional x values used to plot the topic proportions according #' to a specific time value (rather than simply the order of observations). @@ -71,28 +73,28 @@ plot.LDA_set <- function(x, ...){ #' #' @param ... Not used, retained for alignment with base function. #' -#' @return \code{NULL}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 4, nseeds = 10) -#' best_lda <- select_LDA(r_LDA)[[1]] -#' plot(best_lda, option = "cividis") -#' LDA_plot_top_panel(best_lda, option = "cividis") -#' LDA_plot_bottom_panel(best_lda, option = "cividis") -#' } +#' @return +#' \code{plot.LDA},\code{LDA_plot_top_panel},\code{LDA_plot_bottom_panel}: +#' \code{NULL}. \cr \cr +#' \code{set_LDA_plot_colors}: \code{vector} of \code{character} hex codes +#' indicating colors to use. #' -#' @export +#' @name plot.LDA +#' + + + +#' @rdname plot.LDA #' -plot.LDA_VEM <- function(x, ..., xtime = NULL, xname = NULL, cols = NULL, +#' @export +#' +plot.LDA <- function(x, ..., xtime = NULL, xname = NULL, cols = NULL, option = "C", alpha = 0.8, LDATS = FALSE){ LDA_plot_top_panel(x, cols, option, alpha, TRUE, LDATS) LDA_plot_bottom_panel(x, xtime, xname, cols, option, alpha, TRUE, LDATS) } -#' @rdname plot.LDA_VEM +#' @rdname plot.LDA #' #' @export #' @@ -101,13 +103,17 @@ LDA_plot_top_panel <- function(x, cols = NULL, option = "C", alpha = 0.8, oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) cols <- set_LDA_plot_colors(x, cols, option, alpha) - gamma <- x@gamma - beta <- exp(x@beta) + gamma <- x$document_topic_table + beta <- exp(x$params$beta) nobs <- nrow(gamma) ntopics <- ncol(gamma) nwords <- ncol(beta) beta_order <- apply(beta, 2, order) beta_sorted <- apply(beta, 2, sort) + if(length(dim(beta_sorted)) == 0){ + beta_order <- matrix(beta_order, nrow = 1) + beta_sorted <- matrix(beta_sorted, nrow = 1) + } counter <- 1 rect_mat <- matrix(NA, nrow = nwords * ntopics, ncol = 4) @@ -143,7 +149,7 @@ LDA_plot_top_panel <- function(x, cols = NULL, option = "C", alpha = 0.8, col = rect_col[i]) } axis(2, at = seq(0, max_y, 0.1), labels = FALSE, tck = -0.02) - mtext(side = 1, at = seq(1, nwords, 1), text = x@terms, tck = 0, + mtext(side = 1, at = seq(1, nwords, 1), text = x$terms, tck = 0, cex = 0.5, line = 0) if (LDATS){ @@ -165,7 +171,7 @@ LDA_plot_top_panel <- function(x, cols = NULL, option = "C", alpha = 0.8, } } -#' @rdname plot.LDA_VEM +#' @rdname plot.LDA #' #' @export #' @@ -175,7 +181,7 @@ LDA_plot_bottom_panel <- function(x, xtime = NULL, xname = NULL, cols = NULL, oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) cols <- set_LDA_plot_colors(x, cols, option, alpha) - gamma <- x@gamma + gamma <- x$document_topic_table ntopics <- ncol(gamma) if (is.null(xtime)){ @@ -202,44 +208,13 @@ LDA_plot_bottom_panel <- function(x, xtime = NULL, xname = NULL, cols = NULL, } } -#' @title Prepare the colors to be used in the LDA plots -#' -#' @description Based on the inputs, create the set of colors to be used in -#' the LDA plots made by \code{\link{plot.LDA_TS}}. -#' -#' @param x Object of class \code{LDA}. -#' -#' @param cols Colors to be used to plot the topics. -#' Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -#' \code{\link[grDevices]{rgb}}) can be input as with a standard plot. -#' The default (\code{cols = NULL}) triggers use of -#' \code{\link[viridis]{viridis}} color options (see \code{option}). +#' @rdname plot.LDA #' -#' @param option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if `cols == NULL`. Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C", the default option), "viridis" (or "D") and "cividis" (or "E"). -#' -#' @param alpha Numeric value [0,1] that indicates the transparency of the -#' colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @return \code{vector} of \code{character} hex codes indicating colors to -#' use. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' lda_data <- rodents$document_term_table -#' r_LDA <- LDA_set(lda_data, topics = 4, nseeds = 10) -#' set_LDA_plot_colors(r_LDA[[1]]) -#' } -#' -#' @export +#' @export #' set_LDA_plot_colors <- function(x, cols = NULL, option = "C", alpha = 0.8){ - gamma <- x@gamma + gamma <- x$document_topic_table ntopics <- ncol(gamma) if (length(cols) == 0){ cols <- viridis(ntopics, option = option, alpha = alpha, end = 0.9) diff --git a/man/multinom_TS.Rd b/man/multinom_TS.Rd index 5b6bcb9b..7d5f36d6 100644 --- a/man/multinom_TS.Rd +++ b/man/multinom_TS.Rd @@ -42,7 +42,7 @@ timestep being 1 day, which is often not desired behavior.} \item{weights}{Optional class \code{numeric} vector of weights for each document. Defaults to \code{NULL}, translating to an equal weight for -each document. When using \code{ilr_TS} in a standard LDATS +each document. When using \code{multinom_TS} in a standard LDATS analysis, it is advisable to weight the documents by their total size, as the result of \code{\link{topicmodels_LDA}} is a matrix of proportions, which does not account for size differences among documents. @@ -93,6 +93,9 @@ automated removal of unneeded controls.} for fitting. } \references{ -Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied +Ripley, B. D. 1996. \emph{Pattern Recognition and Neural Networks}. + Cambridge University Press, Cambridge, UK. + + Venables, W. N. and B. D. Ripley. 2002. \emph{Modern and Applied Statistics with S}. Fourth Edition. Springer, New York, NY, USA. } diff --git a/man/plot.LDA_VEM.Rd b/man/plot.LDA.Rd similarity index 66% rename from man/plot.LDA_VEM.Rd rename to man/plot.LDA.Rd index 6bda8380..0936a9fa 100644 --- a/man/plot.LDA_VEM.Rd +++ b/man/plot.LDA.Rd @@ -1,22 +1,25 @@ % Generated by roxygen2: do not edit by hand % Please edit documentation in R/LDA_plots.R -\name{plot.LDA_VEM} -\alias{plot.LDA_VEM} +\name{plot.LDA} +\alias{plot.LDA} \alias{LDA_plot_top_panel} \alias{LDA_plot_bottom_panel} +\alias{set_LDA_plot_colors} \title{Plot the results of an LDATS LDA model} \usage{ -\method{plot}{LDA_VEM}(x, ..., xtime = NULL, xname = NULL, - cols = NULL, option = "C", alpha = 0.8, LDATS = FALSE) +\method{plot}{LDA}(x, ..., xtime = NULL, xname = NULL, cols = NULL, + option = "C", alpha = 0.8, LDATS = FALSE) LDA_plot_top_panel(x, cols = NULL, option = "C", alpha = 0.8, together = FALSE, LDATS = FALSE) LDA_plot_bottom_panel(x, xtime = NULL, xname = NULL, cols = NULL, option = "C", alpha = 0.8, together = FALSE, LDATS = FALSE) + +set_LDA_plot_colors(x, cols = NULL, option = "C", alpha = 0.8) } \arguments{ -\item{x}{Object of class \code{LDA_VEM}.} +\item{x}{Object of class \code{LDA}.} \item{...}{Not used, retained for alignment with base function.} @@ -48,28 +51,19 @@ LDATS plot output.} larger LDA plot output.} } \value{ -\code{NULL}. +\code{plot.LDA},\code{LDA_plot_top_panel},\code{LDA_plot_bottom_panel}: + \code{NULL}. \cr \cr + \code{set_LDA_plot_colors}: \code{vector} of \code{character} hex codes + indicating colors to use. } \description{ -Create an LDATS LDA summary plot, with a top panel showing - the topic proportions for each word and a bottom panel showing the topic - proportions of each document/over time. The plot function is defined for - class \code{LDA_VEM} specifically (see \code{\link[topicmodels]{LDA}}). - \cr \cr +\code{plot.LDA} creates an LDATS LDA summary plot, with a top panel + showing the topic proportions for each word and a bottom panel showing + the topic proportions of each document/over time. \cr \cr \code{LDA_plot_top_panel} creates an LDATS LDA summary plot - top panel showing the topic proportions word-by-word. \cr \cr + top panel showing the topic proportions word-by-word. \cr \cr \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot - bottom panel showing the topic proportions over time/documents. -} -\examples{ -\donttest{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 4, nseeds = 10) - best_lda <- select_LDA(r_LDA)[[1]] - plot(best_lda, option = "cividis") - LDA_plot_top_panel(best_lda, option = "cividis") - LDA_plot_bottom_panel(best_lda, option = "cividis") -} - + bottom panel showing the topic proportions over time/documents. \cr \cr + \code{set_LDA_plot_colors} creates the set of colors to be used in + the LDA plots based on the variety of argument options. } diff --git a/man/plot.LDA_set.Rd b/man/plot.LDA_set.Rd index a05f5a3a..1ac7a800 100644 --- a/man/plot.LDA_set.Rd +++ b/man/plot.LDA_set.Rd @@ -4,7 +4,7 @@ \alias{plot.LDA_set} \title{Plot a set of LDATS LDA models} \usage{ -\method{plot}{LDA_set}(x, ...) +\method{plot}{LDA_set}(x, ..., selected = TRUE) } \arguments{ \item{x}{An \code{LDA_set} object of LDA topic models.} @@ -18,12 +18,3 @@ Generalization of the \code{\link[graphics]{plot}} function to work on a list of LDA topic models (class \code{LDA_set}). } -\examples{ -\donttest{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 2) - plot(r_LDA) -} - -} diff --git a/man/set_LDA_plot_colors.Rd b/man/set_LDA_plot_colors.Rd deleted file mode 100644 index f92cc229..00000000 --- a/man/set_LDA_plot_colors.Rd +++ /dev/null @@ -1,43 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_plots.R -\name{set_LDA_plot_colors} -\alias{set_LDA_plot_colors} -\title{Prepare the colors to be used in the LDA plots} -\usage{ -set_LDA_plot_colors(x, cols = NULL, option = "C", alpha = 0.8) -} -\arguments{ -\item{x}{Object of class \code{LDA}.} - -\item{cols}{Colors to be used to plot the topics. -Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -\code{\link[grDevices]{rgb}}) can be input as with a standard plot. -The default (\code{cols = NULL}) triggers use of -\code{\link[viridis]{viridis}} color options (see \code{option}).} - -\item{option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if `cols == NULL`. Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C", the default option), "viridis" (or "D") and "cividis" (or "E").} - -\item{alpha}{Numeric value [0,1] that indicates the transparency of the -colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} -} -\value{ -\code{vector} of \code{character} hex codes indicating colors to - use. -} -\description{ -Based on the inputs, create the set of colors to be used in - the LDA plots made by \code{\link{plot.LDA_TS}}. -} -\examples{ -\donttest{ - data(rodents) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 4, nseeds = 10) - set_LDA_plot_colors(r_LDA[[1]]) -} - -} diff --git a/man/simplex_TS.Rd b/man/simplex_TS.Rd index a19c852f..1f72286c 100644 --- a/man/simplex_TS.Rd +++ b/man/simplex_TS.Rd @@ -79,13 +79,35 @@ automated removal of unneeded controls.} corresponding to response function controls. } \description{ -\code{simplex_TS} fits a set of simplex regression models to a time +\code{simplex_TS} fits a set of simplex regression models + (Aitchison 1986, Aitchison \emph{et al.} 2002) to a time series of compositional data divided into multiple segments (a.k.a. chunks) based on given locations for a set of change points, using - e.g., the isometric log ratio (ILR) transformation. \cr \cr + e.g., the isometric log ratio (ILR) transformation + (Egozcue \emph{et al.} 2003, Pawlowsky-Glahn 2003. \cr \cr \code{simplex_TS_chunk} fits a simplex regression model using, e.g., the ILR transformation to a defined chunk of time (a.k.a. segment) \code{[chunk$start, chunk$end]} within a time series. \cr \cr \code{simplex_TS_control} defines and creates the control \code{list} for fitting. } +\references{ +Aitchison, J. 1986. \emph{The Statistical Analysis of Compositional + Data}. Monographs on Statistics and Applied Probability. Chapman & Hall + Ltd., London, UK. + + Aitchison, J, C. Barcelo-Vidal, J.J. Egozcue, and V. Pawlowsky-Glahn. + 2002. A consise guide to the algebraic geometric structure of the + simplex, the sample space for compositional data analysis, Terra Nostra, + Schriften der Alfred Wegener-Stiftung, 03/2003. + + Egozcue J.J., V. Pawlowsky-Glahn, G. Mateu-Figueras and C. Barcelo-Vidal. + 2003. Isometric logratio transformations for compositional data analysis. + \emph{Mathematical Geology}, \strong{35}:279-300. + + Pawlowsky-Glahn, V. 2003. Statistical modelling on coordinates. In: + Thio-Henestrosa, S. and J. A. Martin-Fernandez, Eds. + \emph{Proceedings of the 1st International Workshop on Compositional Data + Analysis}, Universitat de Girona, ISBN 84-8458-111-X. + \href{link}{http://ima.udg.es/Activitats/CoDaWork03}. +} diff --git a/notes.R b/notes.R index 115d1a49..c9e92104 100644 --- a/notes.R +++ b/notes.R @@ -1,12 +1,11 @@ -known to dos -NEWS plotting functions + -TS and LDA_TS simulate + -just generalize TS predict tidying check functions tempering examples -"1 topics" -> "1 topic" in lda msg devtools::load_all() data(rodents) From cf8c95b00e6c65da35bd80f47890ecb89fb340c8 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 00:21:04 -0700 Subject: [PATCH 29/43] TS plots --- NAMESPACE | 3 +- R/TS.R | 4 +- R/TS_plots.R | 580 ++++++++++++-------------------- R/argument_checking.R | 2 +- man/TS_diagnostics_plot.Rd | 48 --- man/TS_summary_plot.Rd | 77 ----- man/autocorr_plot.Rd | 25 -- man/ecdf_plot.Rd | 28 -- man/identity_LDA.Rd | 1 + man/plot.LDA_set.Rd | 6 +- man/plot.TS.Rd | 186 ++++++++++ man/plot.TS_fit.Rd | 71 ---- man/plot.TS_set.Rd | 24 ++ man/posterior_plot.Rd | 28 -- man/rho_lines.Rd | 31 -- man/set_TS_summary_plot_cols.Rd | 60 ---- man/set_gamma_colors.Rd | 44 --- man/set_rho_hist_colors.Rd | 48 --- man/topicmodels_LDA.Rd | 1 + man/trace_plot.Rd | 27 -- notes.R | 7 +- 21 files changed, 448 insertions(+), 853 deletions(-) delete mode 100644 man/TS_diagnostics_plot.Rd delete mode 100644 man/TS_summary_plot.Rd delete mode 100644 man/autocorr_plot.Rd delete mode 100644 man/ecdf_plot.Rd create mode 100644 man/plot.TS.Rd delete mode 100644 man/plot.TS_fit.Rd create mode 100644 man/plot.TS_set.Rd delete mode 100644 man/posterior_plot.Rd delete mode 100644 man/rho_lines.Rd delete mode 100644 man/set_TS_summary_plot_cols.Rd delete mode 100644 man/set_gamma_colors.Rd delete mode 100644 man/set_rho_hist_colors.Rd delete mode 100644 man/trace_plot.Rd diff --git a/NAMESPACE b/NAMESPACE index 7a46d781..a26c3ee9 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -7,7 +7,8 @@ S3method(logLik,TS_fit) S3method(plot,LDA) S3method(plot,LDA_TS) S3method(plot,LDA_set) -S3method(plot,TS_fit) +S3method(plot,TS) +S3method(plot,TS_set) S3method(print,TS) export(AICc) export(LDA) diff --git a/R/TS.R b/R/TS.R index c0e67256..de6c8aab 100644 --- a/R/TS.R +++ b/R/TS.R @@ -302,10 +302,10 @@ prepare_TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, ts_data <- lda$data ts_data$train$ts_data <- lda$data$train$document_covariate_table - ts_data$train$ts_data$gamma <- lda$document_topic_matrix + ts_data$train$ts_data$gamma <- lda$document_topic_table ts_data$test$ts_data <- lda$data$test$document_covariate_table - ts_data$test$ts_data$gamma <- lda$test_document_topic_matrix + ts_data$test$ts_data$gamma <- lda$test_document_topic_table weights <- iftrue(weights, document_weights(lda$data$train$document_term_table)) diff --git a/R/TS_plots.R b/R/TS_plots.R index b405fa48..df1b0e47 100644 --- a/R/TS_plots.R +++ b/R/TS_plots.R @@ -1,8 +1,86 @@ -#' @title Plot an LDATS TS model +#' @title Plot a set of LDATS TS models #' #' @description Generalization of the \code{\link[graphics]{plot}} function to -#' work on fitted TS model objects (class \code{TS_fit}) returned from -#' \code{\link{TS}}. +#' work on a list of TS topic models (class \code{TS_set}). +#' +#' @param x An \code{TS_set} object of TS topic models. +#' +#' @param ... Not used, retained for alignment with base function. +#' +#' @param selected \code{logical} indicator of if only the selected TSs +#' (the first element in \code{x}) should be plotted or if all the TSs +#' (the second element in \code{x}) should be plotted. +#' +#' @return \code{NULL}. +#' +#' @export +#' +plot.TS_set <- function(x, ..., selected = TRUE){ + if(selected){ + x <- x[[1]] + } else{ + x <- x[[2]] + } + on.exit(devAskNewPage(FALSE)) + if (length(x) > 1){ + devAskNewPage(TRUE) + } + y <- lapply(x, plot, ...) + y <- NULL +} + + +#' @title Plot an LDATS Time Series model +#' +#' @description +#' \code{plot.TS} is a generalization of the \code{\link[graphics]{plot}} +#' function to work on fitted TS model objects (class \code{TS}) +#' returned from \code{\link{TS}}. \cr \cr +#' \code{TS_diagnostics_plot} makes the 4-panel figures (showing trace +#' plots, posterior ECDF, posterior density, and iteration +#' autocorrelation) for each of the parameters (change point locations +#' and regressors) fitted within a compositional time series model (fit +#' by \code{\link{TS}}). \cr \cr +#' \code{eta_diagnostics_plots} creates the diagnostic plots +#' for the regressors (etas) of a time series model. \cr \cr +#' \code{rho_diagnostics_plots} creates the diagnostic plots +#' for the change point locations (rho) of a time series model. \cr \cr +#' \code{trace_plot} produces a trace plot for the parameter of interest +#' (rho or eta) as part of \code{\link{TS_diagnostics_plot}}. A +#' horizontal line is added to show the median of the posterior. \cr \cr +#' \code{ecdf_plot} makes a vanilla ECDF (empirical cumulative distribution +#' function) plot using \code{\link[stats]{ecdf}} for the parameter of +#' interest (rho or eta) as part of \code{\link{TS_diagnostics_plot}}. +#' A horizontal line is added to show the median of the posterior. \cr \cr +#' \code{autocorr_plot} produces a vanilla ACF plot using +#' \code{\link[stats]{acf}} for the parameter of interest (rho or eta) +#' as part of \code{\link{TS_diagnostics_plot}}.\cr \cr +#' \code{posterior_plot} makes a vanilla histogram plot using +#' \code{\link[graphics]{hist}} for the parameter of interest (rho or eta) +#' as part of \code{\link{TS_diagnostics_plot}}. A vertical line is added +#' to show the median of the posterior. \cr \cr +#' \code{TS_summary_plot} produces a two-panel figure of [1] the change +#' point distributions as histograms over time and [2] the time series of +#' the fitted topic proportions over time, based on a selected set of +#' change point locations. \cr \cr +#' \code{pred_gamma_TS_plot} produces a time series of the +#' fitted topic proportions over time, based on a selected set of change +#' point locations. \cr \cr +#' \code{rho_hist}: make a plot of the change point distributions as +#' histograms over time. \cr \cr +#' \code{rho_lines} adds vertical lines to the plot of the time series of +#' fitted proportions associated with the change points of interest. +#' \cr \cr +#' \code{set_gamma_colors} creates the set of colors to be used in +#' the time series of the fitted gamma (topic proportion) values. \cr \cr +#' \code{set_rho_hist_colors} creates the set of colors to be used in +#' the change point histogram. \cr \cr +#' \code{set_TS_summary_plot_cols} acts as a default \code{list} +#' generator function that produces the options for the colors +#' controlling the panels of the TS summary plots, so needed +#' because the panels should be in different color schemes. See +#' \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} +#' for specific details on usage. #' #' @param x A \code{TS_fit} object of a multinomial time series model fit by #' \code{\link{TS}}. @@ -10,6 +88,9 @@ #' @param ... Additional arguments to be passed to subfunctions. Not currently #' used, just retained for alignment with \code{\link[graphics]{plot}}. #' +#' @param spec_rhos \code{numeric} vector indicating the locations along the +#' x axis where the specific change points being used are located. +#' #' @param plot_type "diagnostic" or "summary". #' #' @param bin_width Width of the bins used in the histograms of the summary @@ -27,38 +108,68 @@ #' summary plot. Currently only defined for \code{"median"} and #' \code{"mode"}. #' -#' @param cols \code{list} of elements used to define the colors for the two -#' panels of the summary plot, as generated simply using -#' \code{\link{set_TS_summary_plot_cols}}. \code{cols} has two elements -#' \code{rho} and \code{gamma}, each corresponding to the related panel, -#' and each containing default values for entries named \code{cols}, -#' \code{option}, and \code{alpha}. See \code{\link{set_gamma_colors}} and -#' \code{\link{set_rho_hist_colors}} for details on usage. +#' @param cols,rho_cols_gamma_cols +#' In \code{plot.TS}, \code{cols} is a \code{list} of elements used to +#' define the colors for the two panels of the summary plot, as generated +#' simply using \code{\link{set_TS_summary_plot_cols}}. +#' \code{cols} has two elements \code{rho} and \code{gamma}, each +#' corresponding to the related panel, and each containing default values +#' for entries named \code{cols}, \code{option}, and \code{alpha}. \cr +#' For \code{rho_cols} and \code{gamma_cols} always and for \code{cols} in +#' \code{set_rho_hist_colors}, \code{set_gamma_colors}, +#' \code{rho_hist}, and \code{pred_gamma_TS_plot}, colors to be used in +#' the specific plot. Any valid color values (\emph{e.g.}, see +#' \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be +#' input as with a standard plot. The default (\code{NULL}) triggers use +#' of \code{\link[viridis]{viridis}} color options (see +#' \code{rho_option}). #' #' @param LDATS \code{logical} indicating if the plot is part of a larger #' LDATS plot output. #' -#' @param interactive \code{logical} input, should be code{TRUE} unless +#' @param interactive \code{logical} input, should be \code{TRUE} unless #' testing. +#' +#' @param ylab \code{character} value used to label the y axis. +#' +#' @param draw \code{vector} of parameter values drawn from the posterior +#' distribution, indexed to the iteration by the order of the vector. +#' +#' @param xlab \code{character} value used to label the x axis. #' -#' @return \code{NULL}. +#' @param option,rho_option,gamma_option A \code{character} string indicating +#' the color option from \code{\link[viridis]{viridis}} to use if +#' "cols == NULL". Four options are available: "magma" (or "A"), +#' "inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default +#' option) and "cividis" (or "E"). +#' +#' @param alpha,rho_alpha,gamma_alpha Numeric value [0,1] that indicates the +#' transparency of the colors used. Supported only on some devices, see +#' \code{\link[grDevices]{rgb}}. #' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' plot(TSmod) -#' } +#' @return +#' \code{plot.TS},\code{TS_diagnostics_plot},\code{eta_diagnostics_plots}, +#' \code{rho_diagnostics_plots},\code{trace_plot},\code{posterior_plot}, +#' \code{autocorr_plot},\code{ecdf_plot},\code{TS_summary_plot}, +#' \code{pred_gamma_TS_plot},\code{rho_hist},\code{rho_lines}: +#' \code{NULL}. \cr \cr +#' \code{set_rho_hist_cols},\code{set_gamma_colors}: \code{vector} of +#' \code{character} hex codes indicating colors to use. +#' \code{set_TS_summary_plot_cols}: \code{list} of elements used to define +#' the colors for the two panels. Contains two elements \code{rho} and +#' \code{gamma}, each corresponding to the related panel, and each +#' containing default values for entries named \code{cols}, +#' \code{option}, and \code{alpha}. +#' +#' @name plot.TS +#' + + +#' @rdname plot.TS #' #' @export #' -plot.TS_fit <- function(x, ..., plot_type = "summary", interactive = FALSE, +plot.TS <- function(x, ..., plot_type = "summary", interactive = FALSE, cols = set_TS_summary_plot_cols(), bin_width = 1, xname = NULL, border = NA, selection = "median", LDATS = FALSE){ @@ -69,37 +180,7 @@ plot.TS_fit <- function(x, ..., plot_type = "summary", interactive = FALSE, } } -#' @title Plot the diagnostics of the parameters fit in a TS model -#' -#' @description Plot 4-panel figures (showing trace plots, posterior ECDF, -#' posterior density, and iteration autocorrelation) for each of the -#' parameters (change point locations and regressors) fitted within a -#' multinomial time series model (fit by \code{\link{TS}}). \cr \cr -#' \code{eta_diagnostics_plots} creates the diagnostic plots -#' for the regressors (etas) of a time series model. \cr \cr -#' \code{rho_diagnostics_plots} creates the diagnostic plots -#' for the change point locations (rho) of a time series model. -#' -#' @param interactive \code{logical} input, should be code{TRUE} unless -#' testing. -#' -#' @param x Object of class \code{TS_fit}, generated by \code{\link{TS}} to -#' have its diagnostics plotted. -#' -#' @return \code{NULL}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' TS_diagnostics_plot(TSmod) -#' } +#' @rdname plot.TS #' #' @export #' @@ -108,7 +189,7 @@ TS_diagnostics_plot <- function(x, interactive = TRUE){ eta_diagnostics_plots(x, interactive) } -#' @rdname TS_diagnostics_plot +#' @rdname plot.TS #' #' @export #' @@ -138,7 +219,7 @@ eta_diagnostics_plots <- function(x, interactive){ } } -#' @rdname TS_diagnostics_plot +#' @rdname plot.TS #' #' @export #' @@ -146,7 +227,7 @@ rho_diagnostics_plots <- function(x, interactive){ on.exit(devAskNewPage(FALSE)) oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) - rhos <- x$rhos + rhos <- x$focal_rhos if (is.null(rhos)){ return() } @@ -162,155 +243,59 @@ rho_diagnostics_plots <- function(x, interactive){ } } -#' @title Produce the trace plot panel for the TS diagnostic plot of a -#' parameter -#' -#' @description Produce a trace plot for the parameter of interest (rho or -#' eta) as part of \code{\link{TS_diagnostics_plot}}. A horizontal line -#' is added to show the median of the posterior. -#' -#' @param x Vector of parameter values drawn from the posterior distribution, -#' indexed to the iteration by the order of the vector. -#' -#' @param ylab \code{character} value used to label the y axis. -#' -#' @return \code{NULL}. -#' -#' @examples -#' trace_plot(rnorm(100, 0, 1)) + + +#' @rdname plot.TS #' -#' @export +#' @export #' -trace_plot <- function(x, ylab = "parameter value"){ - plot(x, type = "l", lwd = 1, col = 0, +trace_plot <- function(draw, ylab = "parameter value"){ + plot(draw, type = "l", lwd = 1, col = 0, xlab = "Iteration", ylab = ylab, las = 1, bty = "L") - ext <- 0.01 * length(x) - points(c(-ext, length(x) + ext), rep(median(x), 2), type = "l", lwd = 2, - lty = 2) - points(seq_along(x), x, type = "l", col = rgb(0.4, 0.4, 0.4, alpha = 0.9)) + ext <- 0.01 * length(draw) + points(c(-ext, length(draw) + ext), rep(median(draw), 2), + type = "l", lwd = 2, lty = 2) + points(seq_along(draw), draw, type = "l", col = rgb(0.4, 0.4, 0.4, + alpha = 0.9)) } -#' @title Produce the posterior distribution ECDF panel for the TS -#' diagnostic plot of a parameter -#' -#' @description Produce a vanilla ECDF (empirical cumulative distribution -#' function) plot using \code{ecdf} for the parameter of interest (rho or -#' eta) as part of \code{\link{TS_diagnostics_plot}}. A horizontal line -#' is added to show the median of the posterior. -#' -#' @param x Vector of parameter values drawn from the posterior distribution, -#' indexed to the iteration by the order of the vector. -#' -#' @param xlab \code{character} value used to label the x axis. -#' -#' @return \code{NULL}. -#' -#' @examples -#' ecdf_plot(rnorm(100, 0, 1)) + +#' @rdname plot.TS #' -#' @export +#' @export #' -ecdf_plot <- function(x, xlab = "parameter value"){ - ECDF <- ecdf(x) +ecdf_plot <- function(draw, xlab = "parameter value"){ + ECDF <- ecdf(draw) plot(ECDF, main = "", xlab = xlab, ylab = "%", las = 1, bty = "L") abline(a = 0.5, b = 0, lwd = 2, lty = 2) } -#' @title Produce the posterior distribution histogram panel for the TS -#' diagnostic plot of a parameter -#' -#' @description Produce a vanilla histogram plot using \code{hist} for the -#' parameter of interest (rho or eta) as part of -#' \code{\link{TS_diagnostics_plot}}. A vertical line is added to show the -#' median of the posterior. -#' -#' @param x Vector of parameter values drawn from the posterior distribution, -#' indexed to the iteration by the order of the vector. -#' -#' @param xlab \code{character} value used to label the x axis. -#' -#' @return \code{NULL}. -#' -#' @examples -#' posterior_plot(rnorm(100, 0, 1)) + + +#' @rdname plot.TS #' -#' @export +#' @export #' -posterior_plot <- function(x, xlab = "parameter value"){ - hist(x, las = 1, main = "", xlab = xlab) - points(rep(median(x), 2), c(0, 1e5), type = "l", lwd = 2, lty = 2) +posterior_plot <- function(draw, xlab = "parameter value"){ + hist(draw, las = 1, main = "", xlab = xlab) + points(rep(median(draw), 2), c(0, 1e5), type = "l", lwd = 2, lty = 2) } -#' @title Produce the autocorrelation panel for the TS diagnostic plot of -#' a parameter -#' -#' @description Produce a vanilla ACF plot using \code{\link[stats]{acf}} for -#' the parameter of interest (rho or eta) as part of -#' \code{\link{TS_diagnostics_plot}}. -#' -#' @param x Vector of parameter values drawn from the posterior distribution, -#' indexed to the iteration by the order of the vector. -#' -#' @return \code{NULL}. -#' -#' @examples -#' autocorr_plot(rnorm(100, 0, 1)) + + +#' @rdname plot.TS #' -#' @export +#' @export #' -autocorr_plot <- function(x){ - acf(x, las = 1, ylab = "Autocorrelation") +autocorr_plot <- function(draw){ + acf(draw, las = 1, ylab = "Autocorrelation") } -#' @title Create the list of colors for the TS summary plot -#' -#' @description A default list generator function that produces the options -#' for the colors controlling the panels of the TS summary plots, so needed -#' because the panels should be in different color schemes. See -#' \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} for -#' specific details on usage. -#' -#' @param rho_cols Colors to be used to plot the histograms of change points. -#' Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -#' \code{\link[grDevices]{rgb}}) can be input as with a standard plot. -#' The default (\code{rho_cols = NULL}) triggers use of -#' \code{\link[viridis]{viridis}} color options (see \code{rho_option}). -#' -#' @param rho_option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if `rho_cols == NULL`. Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). -#' -#' @param rho_alpha Numeric value [0,1] that indicates the transparency of the -#' colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @param gamma_cols Colors to be used to plot the LDA topic proportions, -#' time series of observed topic proportions, and time series of fitted -#' topic proportions. Any valid color values (\emph{e.g.}, see -#' \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be -#' input as with a standard plot. The default (\code{gamma_cols = NULL}) -#' triggers use of \code{\link[viridis]{viridis}} color options (see -#' \code{gamma_option}). -#' -#' @param gamma_option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if gamma_cols == NULL`. Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). -#' -#' @param gamma_alpha Numeric value [0,1] that indicates the transparency of -#' the colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @return \code{list} of elements used to define the colors for the two -#' panels. Contains two elements \code{rho} and \code{gamma}, each -#' corresponding to the related panel, and each containing default values -#' for entries named \code{cols}, \code{option}, and \code{alpha}. -#' -#' @examples -#' set_TS_summary_plot_cols() + + +#' @rdname plot.TS #' -#' @export +#' @export #' set_TS_summary_plot_cols <- function(rho_cols = NULL, rho_option = "D", rho_alpha = 0.4, gamma_cols = NULL, @@ -322,80 +307,30 @@ set_TS_summary_plot_cols <- function(rho_cols = NULL, rho_option = "D", ) } -#' @title Create the summary plot for a TS fit to an LDA model -#' -#' @description Produces a two-panel figure of [1] the change point -#' distributions as histograms over time and [2] the time series of the -#' fitted topic proportions over time, based on a selected set of -#' change point locations. \cr \cr -#' \code{pred_gamma_TS_plot} produces a time series of the -#' fitted topic proportions over time, based on a selected set of change -#' point locations. \cr \cr -#' \code{rho_hist}: make a plot of the change point -#' distributions as histograms over time. -#' -#' @param x Object of class \code{TS_fit} produced by \code{\link{TS}}. -#' -#' @param cols \code{list} of elements used to define the colors for the two -#' panels, as generated simply using \code{\link{set_TS_summary_plot_cols}}. -#' Has two elements \code{rho} and \code{gamma}, each corresponding to the -#' related panel, and each containing default values for entries named -#' \code{cols}, \code{option}, and \code{alpha}. See -#' \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} for -#' details on usage. -#' -#' @param bin_width Width of the bins used in the histograms, in units of the -#' x-axis (the time variable used to fit the model). -#' -#' @param xname Label for the x-axis in the summary time series plot. Defaults -#' to \code{NULL}, which results in usage of the \code{timename} element -#' of the control list (held in\code{control$TS_control$timename}). To have -#' no label printed, set \code{xname = ""}. -#' -#' @param border Border for the histogram, default is \code{NA}. -#' -#' @param selection Indicator of the change points to use. Currently only -#' defined for "median" and "mode". -#' -#' @param together \code{logical} indicating if the subplots are part of a -#' larger LDA plot output. + + +#' @rdname plot.TS #' -#' @param LDATS \code{logical} indicating if the plot is part of a larger -#' LDATS plot output. -#' -#' @return \code{NULL}. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' TS_summary_plot(TSmod) -#' pred_gamma_TS_plot(TSmod) -#' rho_hist(TSmod) -#' } -#' -#' @export +#' @export #' TS_summary_plot <- function(x, cols = set_TS_summary_plot_cols(), bin_width = 1, xname = NULL, border = NA, selection = "median", LDATS = FALSE){ - rc <- cols$rho - rho_cols <- set_rho_hist_colors(x$rhos, rc$cols, rc$option, rc$alpha) - rho_hist(x, rho_cols, bin_width, xname, border, TRUE, LDATS) - gc <- cols$gamma - gamma_cols <- set_gamma_colors(x, gc$cols, gc$option, gc$alpha) - pred_gamma_TS_plot(x, selection, gamma_cols, xname, TRUE, LDATS) + rho_cols <- set_rho_hist_colors(x = x, cols = cols$rho$cols, + option = cols$rho$option, + alpha = cols$rho$alpha) + rho_hist(x = x, cols = rho_cols, bin_width = bin_width, xname = xname, + border = border, together = TRUE, LDATS = LDATS) + gamma_cols <- set_gamma_colors(x = x, cols = cols$gamma$cols, + option = cols$gamma$option, + alpha = cols$gamma$alpha) + pred_gamma_TS_plot(x = x, selection = selection, cols = gamma_cols, + xname = xname, together = TRUE, LDATS = LDATS) } -#' @rdname TS_summary_plot +#' @rdname plot.TS #' -#' @export +#' @export #' pred_gamma_TS_plot <- function(x, selection = "median", cols = set_gamma_colors(x), @@ -409,7 +344,7 @@ pred_gamma_TS_plot <- function(x, selection = "median", } else{ par(fig = c(0, 1, 0, 1)) } - rhos <- x$rhos + rhos <- x$focal_rhos nrhos <- ncol(rhos) if (!is.null(nrhos)){ if (selection == "median"){ @@ -423,11 +358,19 @@ pred_gamma_TS_plot <- function(x, selection = "median", spec_rhos <- NULL } x$control$timename <- NULL # to remove from v0.1.0 model fits - seg_mods <- multinom_TS(x$data, x$formula, spec_rhos, + +# +# NEEDS TO BE GENERALIZED +# + seg_mods <- multinom_TS(x$data$train$ts_data, x$formula, spec_rhos, x$timename, x$weights, x$control) +# +# +# + nsegs <- length(seg_mods[[1]]) - t1 <- min(x$data[, x$timename]) - t2 <- max(x$data[, x$timename]) + t1 <- min(x$data$train$ts_data[, x$timename]) + t2 <- max(x$data$train$ts_data[, x$timename]) if (is.null(xname)){ xname <- x$timename @@ -440,11 +383,11 @@ pred_gamma_TS_plot <- function(x, selection = "median", axis(1) mtext(side = 2, line = 3.5, cex = 1.25, "Proportion") mtext(side = 1, line = 2.5, cex = 1.25, xname) - ntopics <- ncol(as.matrix(x$data[[x$control$response]])) + ntopics <- ncol(as.matrix(x$data$train$ts_data$gamma)) seg1 <- c(0, spec_rhos[-length(rhos)]) seg2 <- c(spec_rhos, t2) - time_obs <- rep(NA, nrow(x$data)) - pred_vals <- matrix(NA, nrow(x$data), ntopics) + time_obs <- rep(NA, nrow(x$data$train$ts_data)) + pred_vals <- matrix(NA, nrow(x$data$train$ts_data), ntopics) sp1 <- 1 for (i in 1:nsegs){ mod_i <- seg_mods[[1]][[i]] @@ -461,29 +404,9 @@ pred_gamma_TS_plot <- function(x, selection = "median", } } -#' @title Add change point location lines to the time series plot +#' @rdname plot.TS #' -#' @description Adds vertical lines to the plot of the time series of fitted -#' proportions associated with the change points of interest. -#' -#' @param spec_rhos \code{numeric} vector indicating the locations along the -#' x axis where the specific change points being used are located. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' pred_gamma_TS_plot(TSmod) -#' rho_lines(200) -#' } -#' -#' @export +#' @export #' rho_lines <- function(spec_rhos) { if(is.null(spec_rhos)) { @@ -495,9 +418,10 @@ rho_lines <- function(spec_rhos) { } } -#' @rdname TS_summary_plot + +#' @rdname plot.TS #' -#' @export +#' @export #' rho_hist <- function(x, cols = set_rho_hist_colors(x$rhos), bin_width = 1, xname = NULL, border = NA, together = FALSE, @@ -511,10 +435,10 @@ rho_hist <- function(x, cols = set_rho_hist_colors(x$rhos), bin_width = 1, } else{ par(fig = c(0, 1, 0, 1), mar = c(4, 5, 1, 1)) } - rhos <- x$rhos + rhos <- x$focal_rhos nrhos <- ncol(rhos) niter <- nrow(rhos) - timeobs <- x$data[, x$timename] + timeobs <- x$data$train$ts_data[, x$timename] timerange <- range(timeobs) timevals <- seq(timerange[1], timerange[2], 1) ntimes <- length(timevals) @@ -557,44 +481,9 @@ rho_hist <- function(x, cols = set_rho_hist_colors(x$rhos), bin_width = 1, } } -#' @title Prepare the colors to be used in the change point histogram -#' -#' @description Based on the inputs, create the set of colors to be used in -#' the change point histogram. -#' -#' @param x \code{matrix} of change point locations (element \code{rhos}) -#' from an object of class \code{TS_fit}, fit by \code{\link{TS}}. -#' -#' @param cols Colors to be used to plot the histograms of change points. -#' Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -#' \code{\link[grDevices]{rgb}}) can be input as with a standard plot. -#' The default (\code{rho_cols = NULL}) triggers use of -#' \code{\link[viridis]{viridis}} color options (see \code{rho_option}). -#' -#' @param option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if "cols == NULL". Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). -#' -#' @param alpha Numeric value [0,1] that indicates the transparency of the -#' colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @return Vector of \code{character} hex codes indicating colors to use. -#' -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' set_rho_hist_colors(TSmod$rhos) -#' } + + +#' @rdname plot.TS #' #' @export #' @@ -604,7 +493,7 @@ set_rho_hist_colors <- function(x = NULL, cols = NULL, option = "D", return(NULL) } - nrhos <- ncol(x) + nrhos <- ncol(x$focal_rhos) if (length(cols) == 0){ cols <- viridis(nrhos, option = option, alpha = alpha, end = 0.9) } @@ -630,39 +519,10 @@ set_rho_hist_colors <- function(x = NULL, cols = NULL, option = "D", cols } -#' @title Prepare the colors to be used in the gamma time series -#' -#' @description Based on the inputs, create the set of colors to be used in -#' the time series of the fitted gamma (topic proportion) values. -#' -#' @param x Object of class \code{TS_fit}, fit by \code{\link{TS}}. -#' -#' @param cols Colors to be used to plot the time series of fitted topic -#' proportions. -#' -#' @param option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if "cols == NULL". Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). -#' -#' @param alpha Numeric value [0,1] that indicates the transparency of the -#' colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @return Vector of \code{character} hex codes indicating colors to use. -#' -#' @examples -#' \donttest{ -#' data(rodents) -#' document_term_table <- rodents$document_term_table -#' document_covariate_table <- rodents$document_covariate_table -#' LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] -#' data <- document_covariate_table -#' data$gamma <- LDA_models@gamma -#' weights <- document_weights(document_term_table) -#' TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) -#' set_gamma_colors(TSmod) -#' } + + + +#' @rdname plot.TS #' #' @export #' @@ -671,7 +531,7 @@ set_gamma_colors <- function(x, cols = NULL, option = "D", alpha = 1){ return(NULL) } - ntopics <- ncol(as.matrix(x$data[x$control$response])) + ntopics <- ncol(as.matrix(x$data$train$ts_data$gamma)) if (length(cols) == 0){ cols <- viridis(ntopics, option = option, alpha = alpha, end = 0.9) } diff --git a/R/argument_checking.R b/R/argument_checking.R index 58fd734d..8cc25c29 100644 --- a/R/argument_checking.R +++ b/R/argument_checking.R @@ -326,7 +326,7 @@ check_document_covariate_table <- function(LDAs){ stop("document_covariate_table is not conformable to a data frame") } if (!is.null(LDAs)){ - if (nrow(data.frame(dct)) != nrow(LDAs[[1]][[1]]$document_topic_matrix)){ + if (nrow(data.frame(dct)) != nrow(LDAs[[1]][[1]]$document_topic_table)){ stop("number of documents in covariate table is not equal to number of documents observed") } diff --git a/man/TS_diagnostics_plot.Rd b/man/TS_diagnostics_plot.Rd deleted file mode 100644 index dad973da..00000000 --- a/man/TS_diagnostics_plot.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{TS_diagnostics_plot} -\alias{TS_diagnostics_plot} -\alias{eta_diagnostics_plots} -\alias{rho_diagnostics_plots} -\title{Plot the diagnostics of the parameters fit in a TS model} -\usage{ -TS_diagnostics_plot(x, interactive = TRUE) - -eta_diagnostics_plots(x, interactive) - -rho_diagnostics_plots(x, interactive) -} -\arguments{ -\item{x}{Object of class \code{TS_fit}, generated by \code{\link{TS}} to -have its diagnostics plotted.} - -\item{interactive}{\code{logical} input, should be code{TRUE} unless -testing.} -} -\value{ -\code{NULL}. -} -\description{ -Plot 4-panel figures (showing trace plots, posterior ECDF, - posterior density, and iteration autocorrelation) for each of the - parameters (change point locations and regressors) fitted within a - multinomial time series model (fit by \code{\link{TS}}). \cr \cr - \code{eta_diagnostics_plots} creates the diagnostic plots - for the regressors (etas) of a time series model. \cr \cr - \code{rho_diagnostics_plots} creates the diagnostic plots - for the change point locations (rho) of a time series model. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - TS_diagnostics_plot(TSmod) -} - -} diff --git a/man/TS_summary_plot.Rd b/man/TS_summary_plot.Rd deleted file mode 100644 index 23040bad..00000000 --- a/man/TS_summary_plot.Rd +++ /dev/null @@ -1,77 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{TS_summary_plot} -\alias{TS_summary_plot} -\alias{pred_gamma_TS_plot} -\alias{rho_hist} -\title{Create the summary plot for a TS fit to an LDA model} -\usage{ -TS_summary_plot(x, cols = set_TS_summary_plot_cols(), bin_width = 1, - xname = NULL, border = NA, selection = "median", LDATS = FALSE) - -pred_gamma_TS_plot(x, selection = "median", cols = set_gamma_colors(x), - xname = NULL, together = FALSE, LDATS = FALSE) - -rho_hist(x, cols = set_rho_hist_colors(x$rhos), bin_width = 1, - xname = NULL, border = NA, together = FALSE, LDATS = FALSE) -} -\arguments{ -\item{x}{Object of class \code{TS_fit} produced by \code{\link{TS}}.} - -\item{cols}{\code{list} of elements used to define the colors for the two -panels, as generated simply using \code{\link{set_TS_summary_plot_cols}}. -Has two elements \code{rho} and \code{gamma}, each corresponding to the -related panel, and each containing default values for entries named -\code{cols}, \code{option}, and \code{alpha}. See -\code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} for -details on usage.} - -\item{bin_width}{Width of the bins used in the histograms, in units of the -x-axis (the time variable used to fit the model).} - -\item{xname}{Label for the x-axis in the summary time series plot. Defaults -to \code{NULL}, which results in usage of the \code{timename} element -of the control list (held in\code{control$TS_control$timename}). To have -no label printed, set \code{xname = ""}.} - -\item{border}{Border for the histogram, default is \code{NA}.} - -\item{selection}{Indicator of the change points to use. Currently only -defined for "median" and "mode".} - -\item{LDATS}{\code{logical} indicating if the plot is part of a larger -LDATS plot output.} - -\item{together}{\code{logical} indicating if the subplots are part of a -larger LDA plot output.} -} -\value{ -\code{NULL}. -} -\description{ -Produces a two-panel figure of [1] the change point - distributions as histograms over time and [2] the time series of the - fitted topic proportions over time, based on a selected set of - change point locations. \cr \cr - \code{pred_gamma_TS_plot} produces a time series of the - fitted topic proportions over time, based on a selected set of change - point locations. \cr \cr - \code{rho_hist}: make a plot of the change point - distributions as histograms over time. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - TS_summary_plot(TSmod) - pred_gamma_TS_plot(TSmod) - rho_hist(TSmod) -} - -} diff --git a/man/autocorr_plot.Rd b/man/autocorr_plot.Rd deleted file mode 100644 index ac106320..00000000 --- a/man/autocorr_plot.Rd +++ /dev/null @@ -1,25 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{autocorr_plot} -\alias{autocorr_plot} -\title{Produce the autocorrelation panel for the TS diagnostic plot of - a parameter} -\usage{ -autocorr_plot(x) -} -\arguments{ -\item{x}{Vector of parameter values drawn from the posterior distribution, -indexed to the iteration by the order of the vector.} -} -\value{ -\code{NULL}. -} -\description{ -Produce a vanilla ACF plot using \code{\link[stats]{acf}} for - the parameter of interest (rho or eta) as part of - \code{\link{TS_diagnostics_plot}}. -} -\examples{ - autocorr_plot(rnorm(100, 0, 1)) - -} diff --git a/man/ecdf_plot.Rd b/man/ecdf_plot.Rd deleted file mode 100644 index 22d2c84f..00000000 --- a/man/ecdf_plot.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{ecdf_plot} -\alias{ecdf_plot} -\title{Produce the posterior distribution ECDF panel for the TS - diagnostic plot of a parameter} -\usage{ -ecdf_plot(x, xlab = "parameter value") -} -\arguments{ -\item{x}{Vector of parameter values drawn from the posterior distribution, -indexed to the iteration by the order of the vector.} - -\item{xlab}{\code{character} value used to label the x axis.} -} -\value{ -\code{NULL}. -} -\description{ -Produce a vanilla ECDF (empirical cumulative distribution - function) plot using \code{ecdf} for the parameter of interest (rho or - eta) as part of \code{\link{TS_diagnostics_plot}}. A horizontal line - is added to show the median of the posterior. -} -\examples{ - ecdf_plot(rnorm(100, 0, 1)) - -} diff --git a/man/identity_LDA.Rd b/man/identity_LDA.Rd index e7aa9aa6..d372d25d 100644 --- a/man/identity_LDA.Rd +++ b/man/identity_LDA.Rd @@ -16,6 +16,7 @@ identity_LDA(LDA) \describe{ \item{alpha}{parameter estimate.} \item{beta}{parameter estimate.} + \item{terms}{\code{character} \code{vector} of term names.} \item{document_topic_matrix}{estimated latent topic compositions.} \item{test_document_topic_matrox}{estimated latent topic compositions of the test data (not presently available for usage).} diff --git a/man/plot.LDA_set.Rd b/man/plot.LDA_set.Rd index 1ac7a800..06a6cd22 100644 --- a/man/plot.LDA_set.Rd +++ b/man/plot.LDA_set.Rd @@ -9,7 +9,11 @@ \arguments{ \item{x}{An \code{LDA_set} object of LDA topic models.} -\item{...}{Additional arguments to be passed to subfunctions.} +\item{...}{Not used, retained for alignment with base function.} + +\item{selected}{\code{logical} indicator of if only the selected LDAs +(the first element in \code{x}) should be plotted or if all the LDAs +(the second element in \code{x}) should be plotted.} } \value{ \code{NULL}. diff --git a/man/plot.TS.Rd b/man/plot.TS.Rd new file mode 100644 index 00000000..0fc840f6 --- /dev/null +++ b/man/plot.TS.Rd @@ -0,0 +1,186 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS_plots.R +\name{plot.TS} +\alias{plot.TS} +\alias{TS_diagnostics_plot} +\alias{eta_diagnostics_plots} +\alias{rho_diagnostics_plots} +\alias{trace_plot} +\alias{ecdf_plot} +\alias{posterior_plot} +\alias{autocorr_plot} +\alias{set_TS_summary_plot_cols} +\alias{TS_summary_plot} +\alias{pred_gamma_TS_plot} +\alias{rho_lines} +\alias{rho_hist} +\alias{set_rho_hist_colors} +\alias{set_gamma_colors} +\title{Plot an LDATS Time Series model} +\usage{ +\method{plot}{TS}(x, ..., plot_type = "summary", interactive = FALSE, + cols = set_TS_summary_plot_cols(), bin_width = 1, xname = NULL, + border = NA, selection = "median", LDATS = FALSE) + +TS_diagnostics_plot(x, interactive = TRUE) + +eta_diagnostics_plots(x, interactive) + +rho_diagnostics_plots(x, interactive) + +trace_plot(draw, ylab = "parameter value") + +ecdf_plot(draw, xlab = "parameter value") + +posterior_plot(draw, xlab = "parameter value") + +autocorr_plot(draw) + +set_TS_summary_plot_cols(rho_cols = NULL, rho_option = "D", + rho_alpha = 0.4, gamma_cols = NULL, gamma_option = "C", + gamma_alpha = 0.8) + +TS_summary_plot(x, cols = set_TS_summary_plot_cols(), bin_width = 1, + xname = NULL, border = NA, selection = "median", LDATS = FALSE) + +pred_gamma_TS_plot(x, selection = "median", cols = set_gamma_colors(x), + xname = NULL, together = FALSE, LDATS = FALSE) + +rho_lines(spec_rhos) + +rho_hist(x, cols = set_rho_hist_colors(x$rhos), bin_width = 1, + xname = NULL, border = NA, together = FALSE, LDATS = FALSE) + +set_rho_hist_colors(x = NULL, cols = NULL, option = "D", alpha = 1) + +set_gamma_colors(x, cols = NULL, option = "D", alpha = 1) +} +\arguments{ +\item{x}{A \code{TS_fit} object of a multinomial time series model fit by +\code{\link{TS}}.} + +\item{...}{Additional arguments to be passed to subfunctions. Not currently +used, just retained for alignment with \code{\link[graphics]{plot}}.} + +\item{plot_type}{"diagnostic" or "summary".} + +\item{interactive}{\code{logical} input, should be \code{TRUE} unless +testing.} + +\item{cols, rho_cols_gamma_cols}{In \code{plot.TS}, \code{cols} is a \code{list} of elements used to + define the colors for the two panels of the summary plot, as generated + simply using \code{\link{set_TS_summary_plot_cols}}. + \code{cols} has two elements \code{rho} and \code{gamma}, each + corresponding to the related panel, and each containing default values + for entries named \code{cols}, \code{option}, and \code{alpha}. \cr +For \code{rho_cols} and \code{gamma_cols} always and for \code{cols} in + \code{set_rho_hist_colors}, \code{set_gamma_colors}, + \code{rho_hist}, and \code{pred_gamma_TS_plot}, colors to be used in + the specific plot. Any valid color values (\emph{e.g.}, see + \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be + input as with a standard plot. The default (\code{NULL}) triggers use + of \code{\link[viridis]{viridis}} color options (see + \code{rho_option}).} + +\item{bin_width}{Width of the bins used in the histograms of the summary +time series plot, in units of the x-axis (the time variable used to fit +the model).} + +\item{xname}{Label for the x-axis in the summary time series plot. Defaults +to \code{NULL}, which results in usage of the \code{timename} element +of the control list (held in\code{control$TS_control$timename}). To have +no label printed, set \code{xname = ""}.} + +\item{border}{Border for the histogram, default is \code{NA}.} + +\item{selection}{Indicator of the change points to use in the time series +summary plot. Currently only defined for \code{"median"} and +\code{"mode"}.} + +\item{LDATS}{\code{logical} indicating if the plot is part of a larger +LDATS plot output.} + +\item{draw}{\code{vector} of parameter values drawn from the posterior +distribution, indexed to the iteration by the order of the vector.} + +\item{ylab}{\code{character} value used to label the y axis.} + +\item{xlab}{\code{character} value used to label the x axis.} + +\item{spec_rhos}{\code{numeric} vector indicating the locations along the +x axis where the specific change points being used are located.} + +\item{option, rho_option, gamma_option}{A \code{character} string indicating +the color option from \code{\link[viridis]{viridis}} to use if +"cols == NULL". Four options are available: "magma" (or "A"), +"inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default +option) and "cividis" (or "E").} + +\item{alpha, rho_alpha, gamma_alpha}{Numeric value [0,1] that indicates the +transparency of the colors used. Supported only on some devices, see +\code{\link[grDevices]{rgb}}.} +} +\value{ +\code{plot.TS},\code{TS_diagnostics_plot},\code{eta_diagnostics_plots}, + \code{rho_diagnostics_plots},\code{trace_plot},\code{posterior_plot}, + \code{autocorr_plot},\code{ecdf_plot},\code{TS_summary_plot}, + \code{pred_gamma_TS_plot},\code{rho_hist},\code{rho_lines}: + \code{NULL}. \cr \cr + \code{set_rho_hist_cols},\code{set_gamma_colors}: \code{vector} of + \code{character} hex codes indicating colors to use. + \code{set_TS_summary_plot_cols}: \code{list} of elements used to define + the colors for the two panels. Contains two elements \code{rho} and + \code{gamma}, each corresponding to the related panel, and each + containing default values for entries named \code{cols}, + \code{option}, and \code{alpha}. +} +\description{ +\code{plot.TS} is a generalization of the \code{\link[graphics]{plot}} + function to work on fitted TS model objects (class \code{TS}) + returned from \code{\link{TS}}. \cr \cr + \code{TS_diagnostics_plot} makes the 4-panel figures (showing trace + plots, posterior ECDF, posterior density, and iteration + autocorrelation) for each of the parameters (change point locations + and regressors) fitted within a compositional time series model (fit + by \code{\link{TS}}). \cr \cr + \code{eta_diagnostics_plots} creates the diagnostic plots + for the regressors (etas) of a time series model. \cr \cr + \code{rho_diagnostics_plots} creates the diagnostic plots + for the change point locations (rho) of a time series model. \cr \cr + \code{trace_plot} produces a trace plot for the parameter of interest + (rho or eta) as part of \code{\link{TS_diagnostics_plot}}. A + horizontal line is added to show the median of the posterior. \cr \cr + \code{ecdf_plot} makes a vanilla ECDF (empirical cumulative distribution + function) plot using \code{\link[stats]{ecdf}} for the parameter of + interest (rho or eta) as part of \code{\link{TS_diagnostics_plot}}. + A horizontal line is added to show the median of the posterior. \cr \cr + \code{autocorr_plot} produces a vanilla ACF plot using + \code{\link[stats]{acf}} for the parameter of interest (rho or eta) + as part of \code{\link{TS_diagnostics_plot}}.\cr \cr + \code{posterior_plot} makes a vanilla histogram plot using + \code{\link[graphics]{hist}} for the parameter of interest (rho or eta) + as part of \code{\link{TS_diagnostics_plot}}. A vertical line is added + to show the median of the posterior. \cr \cr + \code{TS_summary_plot} produces a two-panel figure of [1] the change + point distributions as histograms over time and [2] the time series of + the fitted topic proportions over time, based on a selected set of + change point locations. \cr \cr + \code{pred_gamma_TS_plot} produces a time series of the + fitted topic proportions over time, based on a selected set of change + point locations. \cr \cr + \code{rho_hist}: make a plot of the change point distributions as + histograms over time. \cr \cr + \code{rho_lines} adds vertical lines to the plot of the time series of + fitted proportions associated with the change points of interest. + \cr \cr + \code{set_gamma_colors} creates the set of colors to be used in + the time series of the fitted gamma (topic proportion) values. \cr \cr + \code{set_rho_hist_colors} creates the set of colors to be used in + the change point histogram. \cr \cr + \code{set_TS_summary_plot_cols} acts as a default \code{list} + generator function that produces the options for the colors + controlling the panels of the TS summary plots, so needed + because the panels should be in different color schemes. See + \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} + for specific details on usage. +} diff --git a/man/plot.TS_fit.Rd b/man/plot.TS_fit.Rd deleted file mode 100644 index c1487796..00000000 --- a/man/plot.TS_fit.Rd +++ /dev/null @@ -1,71 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{plot.TS_fit} -\alias{plot.TS_fit} -\title{Plot an LDATS TS model} -\usage{ -\method{plot}{TS_fit}(x, ..., plot_type = "summary", - interactive = FALSE, cols = set_TS_summary_plot_cols(), - bin_width = 1, xname = NULL, border = NA, selection = "median", - LDATS = FALSE) -} -\arguments{ -\item{x}{A \code{TS_fit} object of a multinomial time series model fit by -\code{\link{TS}}.} - -\item{...}{Additional arguments to be passed to subfunctions. Not currently -used, just retained for alignment with \code{\link[graphics]{plot}}.} - -\item{plot_type}{"diagnostic" or "summary".} - -\item{interactive}{\code{logical} input, should be code{TRUE} unless -testing.} - -\item{cols}{\code{list} of elements used to define the colors for the two -panels of the summary plot, as generated simply using -\code{\link{set_TS_summary_plot_cols}}. \code{cols} has two elements -\code{rho} and \code{gamma}, each corresponding to the related panel, -and each containing default values for entries named \code{cols}, -\code{option}, and \code{alpha}. See \code{\link{set_gamma_colors}} and -\code{\link{set_rho_hist_colors}} for details on usage.} - -\item{bin_width}{Width of the bins used in the histograms of the summary -time series plot, in units of the x-axis (the time variable used to fit -the model).} - -\item{xname}{Label for the x-axis in the summary time series plot. Defaults -to \code{NULL}, which results in usage of the \code{timename} element -of the control list (held in\code{control$TS_control$timename}). To have -no label printed, set \code{xname = ""}.} - -\item{border}{Border for the histogram, default is \code{NA}.} - -\item{selection}{Indicator of the change points to use in the time series -summary plot. Currently only defined for \code{"median"} and -\code{"mode"}.} - -\item{LDATS}{\code{logical} indicating if the plot is part of a larger -LDATS plot output.} -} -\value{ -\code{NULL}. -} -\description{ -Generalization of the \code{\link[graphics]{plot}} function to - work on fitted TS model objects (class \code{TS_fit}) returned from - \code{\link{TS}}. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - plot(TSmod) -} - -} diff --git a/man/plot.TS_set.Rd b/man/plot.TS_set.Rd new file mode 100644 index 00000000..90ae439a --- /dev/null +++ b/man/plot.TS_set.Rd @@ -0,0 +1,24 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS_plots.R +\name{plot.TS_set} +\alias{plot.TS_set} +\title{Plot a set of LDATS TS models} +\usage{ +\method{plot}{TS_set}(x, ..., selected = TRUE) +} +\arguments{ +\item{x}{An \code{TS_set} object of TS topic models.} + +\item{...}{Not used, retained for alignment with base function.} + +\item{selected}{\code{logical} indicator of if only the selected TSs +(the first element in \code{x}) should be plotted or if all the TSs +(the second element in \code{x}) should be plotted.} +} +\value{ +\code{NULL}. +} +\description{ +Generalization of the \code{\link[graphics]{plot}} function to + work on a list of TS topic models (class \code{TS_set}). +} diff --git a/man/posterior_plot.Rd b/man/posterior_plot.Rd deleted file mode 100644 index 205b5493..00000000 --- a/man/posterior_plot.Rd +++ /dev/null @@ -1,28 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{posterior_plot} -\alias{posterior_plot} -\title{Produce the posterior distribution histogram panel for the TS - diagnostic plot of a parameter} -\usage{ -posterior_plot(x, xlab = "parameter value") -} -\arguments{ -\item{x}{Vector of parameter values drawn from the posterior distribution, -indexed to the iteration by the order of the vector.} - -\item{xlab}{\code{character} value used to label the x axis.} -} -\value{ -\code{NULL}. -} -\description{ -Produce a vanilla histogram plot using \code{hist} for the - parameter of interest (rho or eta) as part of - \code{\link{TS_diagnostics_plot}}. A vertical line is added to show the - median of the posterior. -} -\examples{ - posterior_plot(rnorm(100, 0, 1)) - -} diff --git a/man/rho_lines.Rd b/man/rho_lines.Rd deleted file mode 100644 index ea918728..00000000 --- a/man/rho_lines.Rd +++ /dev/null @@ -1,31 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{rho_lines} -\alias{rho_lines} -\title{Add change point location lines to the time series plot} -\usage{ -rho_lines(spec_rhos) -} -\arguments{ -\item{spec_rhos}{\code{numeric} vector indicating the locations along the -x axis where the specific change points being used are located.} -} -\description{ -Adds vertical lines to the plot of the time series of fitted - proportions associated with the change points of interest. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - pred_gamma_TS_plot(TSmod) - rho_lines(200) -} - -} diff --git a/man/set_TS_summary_plot_cols.Rd b/man/set_TS_summary_plot_cols.Rd deleted file mode 100644 index 764bbdcc..00000000 --- a/man/set_TS_summary_plot_cols.Rd +++ /dev/null @@ -1,60 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{set_TS_summary_plot_cols} -\alias{set_TS_summary_plot_cols} -\title{Create the list of colors for the TS summary plot} -\usage{ -set_TS_summary_plot_cols(rho_cols = NULL, rho_option = "D", - rho_alpha = 0.4, gamma_cols = NULL, gamma_option = "C", - gamma_alpha = 0.8) -} -\arguments{ -\item{rho_cols}{Colors to be used to plot the histograms of change points. -Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -\code{\link[grDevices]{rgb}}) can be input as with a standard plot. -The default (\code{rho_cols = NULL}) triggers use of -\code{\link[viridis]{viridis}} color options (see \code{rho_option}).} - -\item{rho_option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if `rho_cols == NULL`. Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").} - -\item{rho_alpha}{Numeric value [0,1] that indicates the transparency of the -colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} - -\item{gamma_cols}{Colors to be used to plot the LDA topic proportions, -time series of observed topic proportions, and time series of fitted -topic proportions. Any valid color values (\emph{e.g.}, see -\code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be -input as with a standard plot. The default (\code{gamma_cols = NULL}) -triggers use of \code{\link[viridis]{viridis}} color options (see -\code{gamma_option}).} - -\item{gamma_option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if gamma_cols == NULL`. Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").} - -\item{gamma_alpha}{Numeric value [0,1] that indicates the transparency of -the colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} -} -\value{ -\code{list} of elements used to define the colors for the two - panels. Contains two elements \code{rho} and \code{gamma}, each - corresponding to the related panel, and each containing default values - for entries named \code{cols}, \code{option}, and \code{alpha}. -} -\description{ -A default list generator function that produces the options - for the colors controlling the panels of the TS summary plots, so needed - because the panels should be in different color schemes. See - \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} for - specific details on usage. -} -\examples{ - set_TS_summary_plot_cols() - -} diff --git a/man/set_gamma_colors.Rd b/man/set_gamma_colors.Rd deleted file mode 100644 index 45c5cdff..00000000 --- a/man/set_gamma_colors.Rd +++ /dev/null @@ -1,44 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{set_gamma_colors} -\alias{set_gamma_colors} -\title{Prepare the colors to be used in the gamma time series} -\usage{ -set_gamma_colors(x, cols = NULL, option = "D", alpha = 1) -} -\arguments{ -\item{x}{Object of class \code{TS_fit}, fit by \code{\link{TS}}.} - -\item{cols}{Colors to be used to plot the time series of fitted topic -proportions.} - -\item{option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if "cols == NULL". Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").} - -\item{alpha}{Numeric value [0,1] that indicates the transparency of the -colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} -} -\value{ -Vector of \code{character} hex codes indicating colors to use. -} -\description{ -Based on the inputs, create the set of colors to be used in - the time series of the fitted gamma (topic proportion) values. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - set_gamma_colors(TSmod) -} - -} diff --git a/man/set_rho_hist_colors.Rd b/man/set_rho_hist_colors.Rd deleted file mode 100644 index 368d5ff9..00000000 --- a/man/set_rho_hist_colors.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{set_rho_hist_colors} -\alias{set_rho_hist_colors} -\title{Prepare the colors to be used in the change point histogram} -\usage{ -set_rho_hist_colors(x = NULL, cols = NULL, option = "D", alpha = 1) -} -\arguments{ -\item{x}{\code{matrix} of change point locations (element \code{rhos}) -from an object of class \code{TS_fit}, fit by \code{\link{TS}}.} - -\item{cols}{Colors to be used to plot the histograms of change points. -Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -\code{\link[grDevices]{rgb}}) can be input as with a standard plot. -The default (\code{rho_cols = NULL}) triggers use of -\code{\link[viridis]{viridis}} color options (see \code{rho_option}).} - -\item{option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if "cols == NULL". Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").} - -\item{alpha}{Numeric value [0,1] that indicates the transparency of the -colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} -} -\value{ -Vector of \code{character} hex codes indicating colors to use. -} -\description{ -Based on the inputs, create the set of colors to be used in - the change point histogram. -} -\examples{ -\donttest{ - data(rodents) - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - LDA_models <- LDA_set(document_term_table, topics = 2)[[1]] - data <- document_covariate_table - data$gamma <- LDA_models@gamma - weights <- document_weights(document_term_table) - TSmod <- TS(data, gamma ~ 1, nchangepoints = 1, "newmoon", weights) - set_rho_hist_colors(TSmod$rhos) -} - -} diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd index 3475f5d9..5d6c92ee 100644 --- a/man/topicmodels_LDA.Rd +++ b/man/topicmodels_LDA.Rd @@ -26,6 +26,7 @@ replicate.} \describe{ \item{alpha}{parameter estimate.} \item{beta}{parameter estimate.} + \item{terms}{\code{character} \code{vector} of term names.} \item{document_topic_matrix}{estimated latent topic compositions.} \item{test_document_topic_matrox}{estimated latent topic compositions of the test data (not presently available for usage).} diff --git a/man/trace_plot.Rd b/man/trace_plot.Rd deleted file mode 100644 index 84c7d2e0..00000000 --- a/man/trace_plot.Rd +++ /dev/null @@ -1,27 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{trace_plot} -\alias{trace_plot} -\title{Produce the trace plot panel for the TS diagnostic plot of a - parameter} -\usage{ -trace_plot(x, ylab = "parameter value") -} -\arguments{ -\item{x}{Vector of parameter values drawn from the posterior distribution, -indexed to the iteration by the order of the vector.} - -\item{ylab}{\code{character} value used to label the y axis.} -} -\value{ -\code{NULL}. -} -\description{ -Produce a trace plot for the parameter of interest (rho or - eta) as part of \code{\link{TS_diagnostics_plot}}. A horizontal line - is added to show the median of the posterior. -} -\examples{ - trace_plot(rnorm(100, 0, 1)) - -} diff --git a/notes.R b/notes.R index c9e92104..73306560 100644 --- a/notes.R +++ b/notes.R @@ -1,11 +1,16 @@ plotting functions - -TS and LDA_TS + -LDA_TS + -generalize pred_gamma_TS_plot simulate -just generalize TS predict tidying check functions tempering examples +tests + + +where do the ts_fit functions go? ldats_classic? devtools::load_all() data(rodents) From c3484d3690649b5ef645dee9f9492c0b8b1ff618 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 01:50:29 -0700 Subject: [PATCH 30/43] ldats plot --- NAMESPACE | 2 +- R/LDA_TS.R | 20 +++--- R/LDA_TS_plots.R | 133 +++++++++++++++--------------------- R/TS_plots.R | 4 +- man/plot.LDA_TS.Rd | 58 ++++++++++++---- man/plot.TS.Rd | 4 +- man/set_LDA_TS_plot_cols.Rd | 69 ------------------- notes.R | 33 +++++++-- 8 files changed, 141 insertions(+), 182 deletions(-) delete mode 100644 man/set_LDA_TS_plot_cols.Rd diff --git a/NAMESPACE b/NAMESPACE index a26c3ee9..055b1ce3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -100,7 +100,7 @@ export(select_LDA) export(select_TS) export(sequential_TS) export(sequential_TS_control) -export(set_LDA_TS_plot_cols) +export(set_LDA_TS_plot_colors) export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) export(set_gamma_colors) diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 0976bb4e..6a0039fc 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -233,9 +233,9 @@ LDA_TS <- function(data, topics = 2, replicates = 1, formulas = ~ 1, control <- do.call("LDA_TS_control", control) LDAs <- LDA(data = data, topics = topics, replicates = replicates, control = control$LDA_control) - TSs <- TS(LDAs = LDAs, data = data, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control$TS_control) + TSs <- TS(LDAs = LDAs, formulas = formulas, nchangepoints = nchangepoints, + timename = timename, weights = weights, + control = control$TS_control) package_LDA_TS(LDAs = LDAs, TSs = TSs, control = control) } @@ -246,6 +246,7 @@ LDA_TS <- function(data, topics = 2, replicates = 1, formulas = ~ 1, package_LDA_TS <- function(LDAs, TSs, control){ out <- list("LDA models" = LDAs, "TS models" = TSs, control = control) class(out) <- c("LDA_TS", "list") + out } #' @rdname LDA_TS @@ -268,15 +269,15 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, TS_method = ldats_classic, TS_method_args = list(control = ldats_classic_control()), - nsubsets = 1, - subset_rule = NULL, - summary_prob = 0.95, - soften = TRUE, - quiet = FALSE, TS_measurer = AIC, TS_measurer_args = list(NULL), TS_selector = which.min, - TS_selector_args = list(NULL), ...){ + TS_selector_args = list(NULL), + summary_prob = 0.95, + nsubsets = 1, + subset_rule = NULL, + soften = TRUE, + quiet = FALSE, ...){ LDA_control <- LDA_control(model = LDA_model, model_args = LDA_model_args, measurer = LDA_measurer, @@ -285,7 +286,6 @@ LDA_TS_control <- function(LDA_model = topicmodels_LDA, selector_args = LDA_selector_args, nsubsets = nsubsets, subset_rule = subset_rule, soften = soften, quiet = quiet) - TS_control <- TS_control(model = TS_model, model_args = TS_model_args, response = TS_response, diff --git a/R/LDA_TS_plots.R b/R/LDA_TS_plots.R index e0726fe8..46695d93 100644 --- a/R/LDA_TS_plots.R +++ b/R/LDA_TS_plots.R @@ -1,8 +1,16 @@ #' @title Plot the key results from a full LDATS analysis #' -#' @description Generalization of the \code{\link[graphics]{plot}} function to -#' work on fitted LDA_TS model objects (class \code{LDA_TS}) returned by -#' \code{\link{LDA_TS}}). +#' @description +#' \code{plot.LDA_TS} generalizes the \code{\link[graphics]{plot}} function +#' to work on fitted LDA_TS model objects (class \code{LDA_TS}) returned +#' by \code{\link{LDA_TS}}). \cr \cr +#' \code{set_LDA_TS_plot_colors} produces the options for the colors +#' controlling the panels of the LDATS summary plots, needed because +#' the change point histogram panel should be in a different color scheme +#' than the LDA and fitted time series model panels, which should be +#' in a matching color scheme. See \code{\link{set_LDA_plot_colors}}, +#' \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, +#' and \code{\link{set_rho_hist_colors}} for specific details on usage. #' #' @param x A \code{LDA_TS} object of a full LDATS model fit by #' \code{\link{LDA_TS}}. @@ -25,6 +33,23 @@ #' summary plot. Currently only defined for \code{"median"} and #' \code{"mode"}. #' +#' @param rho_cols,gamma_cols Colors to be used in the specific plot. Any +#' valid color values (\emph{e.g.}, see +#' \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be +#' input as with a standard plot. The default (\code{NULL}) triggers use +#' of \code{\link[viridis]{viridis}} color options (see +#' \code{rho_option},\code{gamma_option}). +#' +#' @param rho_option,gamma_option A \code{character} string indicating +#' the color option from \code{\link[viridis]{viridis}} to use if +#' "cols == NULL". Four options are available: "magma" (or "A"), +#' "inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default +#' option) and "cividis" (or "E"). +#' +#' @param rho_alpha,gamma_alpha Numeric value [0,1] that indicates the +#' transparency of the colors used. Supported only on some devices, see +#' \code{\link[grDevices]{rgb}}. +#' #' @param cols \code{list} of elements used to define the colors for the two #' panels of the summary plot, as generated simply using #' \code{\link{set_LDA_TS_plot_cols}}. \code{cols} has two elements: @@ -37,97 +62,47 @@ #' \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, #' and \code{\link{set_rho_hist_colors}}). #' -#' @return \code{NULL}. +#' @return +#' \code{plot.LDA_TS}: \code{NULL}. \cr \cr +#' \code{set_LDA_TS_plot_colors}: \code{list} of elements used to define +#' the colors for the summary plots, which has two +#' elements: \code{LDA} and \code{TS}, each corresponding the set of +#' plots for its stage in the full model. \code{LDA} contains entries +#' \code{cols} and \code{options} (see \code{\link{set_LDA_plot_colors}}). +#' \code{TS} contains two entries, \code{rho} and \code{gamma}, each +#' corresponding to the related panel, and each containing default values +#' for entries named \code{cols}, \code{option}, and \code{alpha} (see +#' \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, +#' and \code{\link{set_rho_hist_colors}}). +#' +#' @name plot.LDA_TS #' -#' @examples -#' \donttest{ -#' data(rodents) -#' mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, -#' nchangepoints = 1, timename = "newmoon") -#' plot(mod, binwidth = 5, xlab = "New moon") -#' } + +#' @rdname plot.LDA_TS #' #' @export #' -plot.LDA_TS <- function(x, ..., - cols = set_LDA_TS_plot_cols(), +plot.LDA_TS <- function(x, ..., cols = set_LDA_TS_plot_colors(), bin_width = 1, xname = NULL, border = NA, selection = "median"){ oldpar <- par(no.readonly = TRUE) on.exit(par(oldpar)) - tname <- x$"Selected TS model"$timename - tvar <- x$"Selected TS model"$data[ , tname] - plot.LDA_set(x$"Selected LDA model", xtime = tvar, xname = NULL, + tname <- x$"TS models"$"selected_TSs"[[1]]$timename + tvar <- x$"TS models"$"selected_TSs"[[1]]$data$train$ts_data[ , tname] + plot.LDA_set(x$"LDA models", xtime = tvar, xname = NULL, cols = cols$LDA$cols, option = cols$LDA$option, LDATS = TRUE) - plot.TS_fit(x$"Selected TS model", plot_type = "summary", cols = cols$TS, + plot.TS_set(x$"TS models", plot_type = "summary", cols = cols$TS, bin_width = bin_width, xname = xname, border = border, selection = selection, LDATS = TRUE) } - - -#' @title Create the list of colors for the LDATS summary plot -#' -#' @description A default list generator function that produces the options -#' for the colors controlling the panels of the LDATS summary plots, needed -#' because the change point histogram panel should be in a different color -#' scheme than the LDA and fitted time series model panels, which should be -#' in a matching color scheme. See \code{\link{set_LDA_plot_colors}}, -#' \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, -#' and \code{\link{set_rho_hist_colors}} for specific details on usage. -#' -#' @param rho_cols Colors to be used to plot the histograms of change points. -#' Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -#' \code{\link[grDevices]{rgb}}) can be input as with a standard plot. -#' The default (\code{rho_cols = NULL}) triggers use of -#' \code{\link[viridis]{viridis}} color options (see \code{rho_option}). -#' -#' @param rho_option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if `rho_cols == NULL`. Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C"), "viridis" (or "D", the default option) and "cividis" (or "E"). -#' -#' @param rho_alpha Numeric value [0,1] that indicates the transparency of the -#' colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @param gamma_cols Colors to be used to plot the LDA topic proportions, -#' time series of observed topic proportions, and time series of fitted -#' topic proportions. Any valid color values (\emph{e.g.}, see -#' \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be -#' input as with a standard plot. The default (\code{gamma_cols = NULL}) -#' triggers use of \code{\link[viridis]{viridis}} color options (see -#' \code{gamma_option}). -#' -#' @param gamma_option A \code{character} string indicating the color option -#' from \code{\link[viridis]{viridis}} to use if gamma_cols == NULL`. Four -#' options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -#' (or "C", the default option), "viridis" (or "D") and "cividis" (or "E"). -#' -#' @param gamma_alpha Numeric value [0,1] that indicates the transparency of -#' the colors used. Supported only on some devices, see -#' \code{\link[grDevices]{rgb}}. -#' -#' @return \code{list} of elements used to define the colors for the two -#' panels of the summary plot, as generated simply using -#' \code{\link{set_LDA_TS_plot_cols}}. \code{cols} has two elements: -#' \code{LDA} and \code{TS}, each corresponding the set of plots for -#' its stage in the full model. \code{LDA} contains entries \code{cols} -#' and \code{options} (see \code{\link{set_LDA_plot_colors}}). \code{TS} -#' contains two entries, \code{rho} and \code{gamma}, each corresponding -#' to the related panel, and each containing default values for entries -#' named \code{cols}, \code{option}, and \code{alpha} (see -#' \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, -#' and \code{\link{set_rho_hist_colors}}). -#' -#' @examples -#' set_LDA_TS_plot_cols() +#' @rdname plot.LDA_TS #' #' @export #' -set_LDA_TS_plot_cols <- function(rho_cols = NULL, rho_option = "D", - rho_alpha = 0.4, gamma_cols = NULL, - gamma_option = "C", gamma_alpha = 0.8){ +set_LDA_TS_plot_colors <- function(rho_cols = NULL, rho_option = "D", + rho_alpha = 0.4, gamma_cols = NULL, + gamma_option = "C", gamma_alpha = 0.8){ list( LDA = list(cols = gamma_cols, option = gamma_option, alpha = gamma_alpha), TS = set_TS_summary_plot_cols(rho_cols = rho_cols, @@ -137,4 +112,4 @@ set_LDA_TS_plot_cols <- function(rho_cols = NULL, rho_option = "D", gamma_option = gamma_option, gamma_alpha = gamma_alpha) ) -} +} \ No newline at end of file diff --git a/R/TS_plots.R b/R/TS_plots.R index df1b0e47..b04cd720 100644 --- a/R/TS_plots.R +++ b/R/TS_plots.R @@ -108,7 +108,7 @@ plot.TS_set <- function(x, ..., selected = TRUE){ #' summary plot. Currently only defined for \code{"median"} and #' \code{"mode"}. #' -#' @param cols,rho_cols_gamma_cols +#' @param cols,rho_cols,gamma_cols #' In \code{plot.TS}, \code{cols} is a \code{list} of elements used to #' define the colors for the two panels of the summary plot, as generated #' simply using \code{\link{set_TS_summary_plot_cols}}. @@ -122,7 +122,7 @@ plot.TS_set <- function(x, ..., selected = TRUE){ #' \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be #' input as with a standard plot. The default (\code{NULL}) triggers use #' of \code{\link[viridis]{viridis}} color options (see -#' \code{rho_option}). +#' \code{option},\code{rho_option},\code{gamma_option}). #' #' @param LDATS \code{logical} indicating if the plot is part of a larger #' LDATS plot output. diff --git a/man/plot.LDA_TS.Rd b/man/plot.LDA_TS.Rd index 91dd8822..b5901b9d 100644 --- a/man/plot.LDA_TS.Rd +++ b/man/plot.LDA_TS.Rd @@ -2,10 +2,15 @@ % Please edit documentation in R/LDA_TS_plots.R \name{plot.LDA_TS} \alias{plot.LDA_TS} +\alias{set_LDA_TS_plot_colors} \title{Plot the key results from a full LDATS analysis} \usage{ -\method{plot}{LDA_TS}(x, ..., cols = set_LDA_TS_plot_cols(), +\method{plot}{LDA_TS}(x, ..., cols = set_LDA_TS_plot_color(), bin_width = 1, xname = NULL, border = NA, selection = "median") + +set_LDA_TS_plot_colors(rho_cols = NULL, rho_option = "D", + rho_alpha = 0.4, gamma_cols = NULL, gamma_option = "C", + gamma_alpha = 0.8) } \arguments{ \item{x}{A \code{LDA_TS} object of a full LDATS model fit by @@ -40,21 +45,46 @@ no label printed, set \code{xname = ""}.} \item{selection}{Indicator of the change points to use in the time series summary plot. Currently only defined for \code{"median"} and \code{"mode"}.} + +\item{rho_cols, gamma_cols}{Colors to be used in the specific plot. Any +valid color values (\emph{e.g.}, see +\code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be +input as with a standard plot. The default (\code{NULL}) triggers use +of \code{\link[viridis]{viridis}} color options (see +\code{rho_option},\code{gamma_option}).} + +\item{rho_option, gamma_option}{A \code{character} string indicating +the color option from \code{\link[viridis]{viridis}} to use if +"cols == NULL". Four options are available: "magma" (or "A"), +"inferno" (or "B"), "plasma" (or "C"), "viridis" (or "D", the default +option) and "cividis" (or "E").} + +\item{rho_alpha, gamma_alpha}{Numeric value [0,1] that indicates the +transparency of the colors used. Supported only on some devices, see +\code{\link[grDevices]{rgb}}.} } \value{ -\code{NULL}. +\code{plot.LDA_TS}: \code{NULL}. \cr \cr + \code{set_LDA_TS_plot_colors}: \code{list} of elements used to define + the colors for the summary plots, which has two + elements: \code{LDA} and \code{TS}, each corresponding the set of + plots for its stage in the full model. \code{LDA} contains entries + \code{cols} and \code{options} (see \code{\link{set_LDA_plot_colors}}). + \code{TS} contains two entries, \code{rho} and \code{gamma}, each + corresponding to the related panel, and each containing default values + for entries named \code{cols}, \code{option}, and \code{alpha} (see + \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, + and \code{\link{set_rho_hist_colors}}). } \description{ -Generalization of the \code{\link[graphics]{plot}} function to - work on fitted LDA_TS model objects (class \code{LDA_TS}) returned by - \code{\link{LDA_TS}}). -} -\examples{ -\donttest{ - data(rodents) - mod <- LDA_TS(data = rodents, topics = 2, nseeds = 1, formulas = ~1, - nchangepoints = 1, timename = "newmoon") - plot(mod, binwidth = 5, xlab = "New moon") -} - +\code{plot.LDA_TS} generalizes the \code{\link[graphics]{plot}} function + to work on fitted LDA_TS model objects (class \code{LDA_TS}) returned + by \code{\link{LDA_TS}}). \cr \cr + \code{set_LDA_TS_plot_colors} produces the options for the colors + controlling the panels of the LDATS summary plots, needed because + the change point histogram panel should be in a different color scheme + than the LDA and fitted time series model panels, which should be + in a matching color scheme. See \code{\link{set_LDA_plot_colors}}, + \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, + and \code{\link{set_rho_hist_colors}} for specific details on usage. } diff --git a/man/plot.TS.Rd b/man/plot.TS.Rd index 0fc840f6..76cdfcbd 100644 --- a/man/plot.TS.Rd +++ b/man/plot.TS.Rd @@ -67,7 +67,7 @@ used, just retained for alignment with \code{\link[graphics]{plot}}.} \item{interactive}{\code{logical} input, should be \code{TRUE} unless testing.} -\item{cols, rho_cols_gamma_cols}{In \code{plot.TS}, \code{cols} is a \code{list} of elements used to +\item{cols, rho_cols, gamma_cols}{In \code{plot.TS}, \code{cols} is a \code{list} of elements used to define the colors for the two panels of the summary plot, as generated simply using \code{\link{set_TS_summary_plot_cols}}. \code{cols} has two elements \code{rho} and \code{gamma}, each @@ -80,7 +80,7 @@ For \code{rho_cols} and \code{gamma_cols} always and for \code{cols} in \code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be input as with a standard plot. The default (\code{NULL}) triggers use of \code{\link[viridis]{viridis}} color options (see - \code{rho_option}).} + \code{option},\code{rho_option},\code{gamma_option}).} \item{bin_width}{Width of the bins used in the histograms of the summary time series plot, in units of the x-axis (the time variable used to fit diff --git a/man/set_LDA_TS_plot_cols.Rd b/man/set_LDA_TS_plot_cols.Rd deleted file mode 100644 index 64b2d9d8..00000000 --- a/man/set_LDA_TS_plot_cols.Rd +++ /dev/null @@ -1,69 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_TS_plots.R -\name{set_LDA_TS_plot_cols} -\alias{set_LDA_TS_plot_cols} -\title{Create the list of colors for the LDATS summary plot} -\usage{ -set_LDA_TS_plot_cols(rho_cols = NULL, rho_option = "D", - rho_alpha = 0.4, gamma_cols = NULL, gamma_option = "C", - gamma_alpha = 0.8) -} -\arguments{ -\item{rho_cols}{Colors to be used to plot the histograms of change points. -Any valid color values (\emph{e.g.}, see \code{\link[grDevices]{colors}}, -\code{\link[grDevices]{rgb}}) can be input as with a standard plot. -The default (\code{rho_cols = NULL}) triggers use of -\code{\link[viridis]{viridis}} color options (see \code{rho_option}).} - -\item{rho_option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if `rho_cols == NULL`. Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C"), "viridis" (or "D", the default option) and "cividis" (or "E").} - -\item{rho_alpha}{Numeric value [0,1] that indicates the transparency of the -colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} - -\item{gamma_cols}{Colors to be used to plot the LDA topic proportions, -time series of observed topic proportions, and time series of fitted -topic proportions. Any valid color values (\emph{e.g.}, see -\code{\link[grDevices]{colors}}, \code{\link[grDevices]{rgb}}) can be -input as with a standard plot. The default (\code{gamma_cols = NULL}) -triggers use of \code{\link[viridis]{viridis}} color options (see -\code{gamma_option}).} - -\item{gamma_option}{A \code{character} string indicating the color option -from \code{\link[viridis]{viridis}} to use if gamma_cols == NULL`. Four -options are available: "magma" (or "A"), "inferno" (or "B"), "plasma" -(or "C", the default option), "viridis" (or "D") and "cividis" (or "E").} - -\item{gamma_alpha}{Numeric value [0,1] that indicates the transparency of -the colors used. Supported only on some devices, see -\code{\link[grDevices]{rgb}}.} -} -\value{ -\code{list} of elements used to define the colors for the two - panels of the summary plot, as generated simply using - \code{\link{set_LDA_TS_plot_cols}}. \code{cols} has two elements: - \code{LDA} and \code{TS}, each corresponding the set of plots for - its stage in the full model. \code{LDA} contains entries \code{cols} - and \code{options} (see \code{\link{set_LDA_plot_colors}}). \code{TS} - contains two entries, \code{rho} and \code{gamma}, each corresponding - to the related panel, and each containing default values for entries - named \code{cols}, \code{option}, and \code{alpha} (see - \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, - and \code{\link{set_rho_hist_colors}}). -} -\description{ -A default list generator function that produces the options - for the colors controlling the panels of the LDATS summary plots, needed - because the change point histogram panel should be in a different color - scheme than the LDA and fitted time series model panels, which should be - in a matching color scheme. See \code{\link{set_LDA_plot_colors}}, - \code{\link{set_TS_summary_plot_cols}}, \code{\link{set_gamma_colors}}, - and \code{\link{set_rho_hist_colors}} for specific details on usage. -} -\examples{ - set_LDA_TS_plot_cols() - -} diff --git a/notes.R b/notes.R index 73306560..e78d80f0 100644 --- a/notes.R +++ b/notes.R @@ -1,5 +1,4 @@ plotting functions - -LDA_TS -generalize pred_gamma_TS_plot simulate -just generalize TS @@ -9,9 +8,11 @@ tempering examples tests - +what is up with lda_ts_controls... + ...oh thats how its always been because of the splitting? where do the ts_fit functions go? ldats_classic? + devtools::load_all() data(rodents) data <- rodents @@ -21,13 +22,35 @@ formulas = ~ 1 nchangepoints = 1 timename = "newmoon" weights = TRUE -control = LDA_TS_control() +control = LDAs <- LDA(data = data, topics = topics, replicates = replicates, - control = control$LDA_control) + control = list()) control$TS_control$method_args$control$nit <- 100 TSs <- TS(LDAs = LDAs, formulas = formulas, nchangepoints = nchangepoints, timename = timename, - weights = weights, control = control$TS_control) + weights = weights, control = +list(method_args = list(control = ldats_classic_control(nit = 100)))) + + +LDATSs <- LDA_TS(data = data, topics = topics, replicates = replicates, + formulas = formulas, + nchangepoints = nchangepoints, timename = timename, + weights = weights, control = list(TS_method_args = + list(control = ldats_classic_control(nit=100)))) + +names(LDATSs) + +cc<-TS_control(method_args = list(control = ldats_classic_control(nit = 100))) +$method_args$control$nit + +cc<-LDA_TS_control(TS_method_args = list(control = ldats_classic_control(nit = 100))) + +names(cc) +names(formals(TS_control)) + +$TS_control$method_args$control$nit + + not sure if needed: From 3078f44cb85937760948e7ff06f52143d8d7d156 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 02:13:33 -0700 Subject: [PATCH 31/43] tidier --- R/LDA_plots.R | 58 +++++++++++++---------------- R/TS.R | 2 +- R/TS_fit.R | 62 ------------------------------- R/TS_plots.R | 71 ++++++++++++++++-------------------- R/TS_responses.R | 77 +++++++++++++++++++++++++++++++++++---- man/LDA_TS.Rd | 36 +++++++++--------- man/logLik.TS_fit.Rd | 2 +- man/multinom_TS.Rd | 5 +-- man/package_chunk_fits.Rd | 2 +- man/plot.LDA.Rd | 13 ++++++- man/plot.LDA_TS.Rd | 2 +- man/plot.LDA_set.Rd | 24 ------------ man/plot.TS.Rd | 24 ++++++++---- man/plot.TS_set.Rd | 24 ------------ man/print.TS.Rd | 2 +- man/simplex_TS.Rd | 8 ++-- notes.R | 7 +++- 17 files changed, 190 insertions(+), 229 deletions(-) delete mode 100644 R/TS_fit.R delete mode 100644 man/plot.LDA_set.Rd delete mode 100644 man/plot.TS_set.Rd diff --git a/R/LDA_plots.R b/R/LDA_plots.R index 7338c8e0..5fd1c7d8 100644 --- a/R/LDA_plots.R +++ b/R/LDA_plots.R @@ -1,33 +1,3 @@ -#' @title Plot a set of LDATS LDA models -#' -#' @description Generalization of the \code{\link[graphics]{plot}} function to -#' work on a list of LDA topic models (class \code{LDA_set}). -#' -#' @param x An \code{LDA_set} object of LDA topic models. -#' -#' @param ... Not used, retained for alignment with base function. -#' -#' @param selected \code{logical} indicator of if only the selected LDAs -#' (the first element in \code{x}) should be plotted or if all the LDAs -#' (the second element in \code{x}) should be plotted. -#' -#' @return \code{NULL}. -#' -#' @export -#' -plot.LDA_set <- function(x, ..., selected = TRUE){ - if(selected){ - x <- x[[1]] - } else{ - x <- x[[2]] - } - on.exit(devAskNewPage(FALSE)) - if (length(x) > 1){ - devAskNewPage(TRUE) - } - y <- lapply(x, plot, ...) - y <- NULL -} #' @title Plot the results of an LDATS LDA model #' @@ -35,6 +5,8 @@ plot.LDA_set <- function(x, ..., selected = TRUE){ #' \code{plot.LDA} creates an LDATS LDA summary plot, with a top panel #' showing the topic proportions for each word and a bottom panel showing #' the topic proportions of each document/over time. \cr \cr +#' \code{plot.LDA_set} plots either the \code{selected} model results or +#' all of them from a \code{LDA_set} of \code{LDA} models. #' \code{LDA_plot_top_panel} creates an LDATS LDA summary plot #' top panel showing the topic proportions word-by-word. \cr \cr #' \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot @@ -73,9 +45,13 @@ plot.LDA_set <- function(x, ..., selected = TRUE){ #' #' @param ... Not used, retained for alignment with base function. #' +#' @param selected \code{logical} indicator of if only the selected LDAs +#' (the first element in \code{x}) should be plotted or if all the LDAs +#' (the second element in \code{x}) should be plotted. +#' #' @return -#' \code{plot.LDA},\code{LDA_plot_top_panel},\code{LDA_plot_bottom_panel}: -#' \code{NULL}. \cr \cr +#' \code{plot.LDA},\code{plot.LDA_set},\code{LDA_plot_top_panel}, +#' \code{LDA_plot_bottom_panel}: \code{NULL}. \cr \cr #' \code{set_LDA_plot_colors}: \code{vector} of \code{character} hex codes #' indicating colors to use. #' @@ -94,6 +70,24 @@ plot.LDA <- function(x, ..., xtime = NULL, xname = NULL, cols = NULL, LDA_plot_bottom_panel(x, xtime, xname, cols, option, alpha, TRUE, LDATS) } + +#' @rdname plot.LDA +#' +#' @export +#' +plot.LDA_set <- function(x, ..., selected = TRUE){ + if(selected){ + x <- x[[1]] + } else{ + x <- x[[2]] + } + on.exit(devAskNewPage(FALSE)) + if (length(x) > 1){ + devAskNewPage(TRUE) + } + y <- lapply(x, plot, ...) + y <- NULL +} #' @rdname plot.LDA #' #' @export diff --git a/R/TS.R b/R/TS.R index de6c8aab..8790b4ea 100644 --- a/R/TS.R +++ b/R/TS.R @@ -409,7 +409,7 @@ TS_control <- function(model = sequential_TS, #' components of a \code{TS}-class object fit by #' \code{\link{sequential_TS}}. #' -#' @param x Class \code{TS_fit} object to be printed. +#' @param x Class \code{TS} object to be printed. #' #' @param ... Not used, simply included to maintain method compatibility. #' diff --git a/R/TS_fit.R b/R/TS_fit.R deleted file mode 100644 index 226ef9e7..00000000 --- a/R/TS_fit.R +++ /dev/null @@ -1,62 +0,0 @@ -#' @title Package the output of the chunk-level TS models into a TS_fit list -#' -#' @description Takes the list of fitted chunk-level models returned from -#' a \code{_TS_chunk} function and packages it as a -#' \code{TS_fit} object. This involves naming the model fits based -#' on the chunk time windows, combining the log likelihood values across the -#' chunks, and setting the class of the output object. -#' -#' @param chunks Data frame of \code{start} and \code{end} times for each -#' chunk (row). -#' -#' @param fits List of chunk-level fits returned by \code{TS_chunk_memo}, -#' the memoised version of \code{\link{multinom_TS_chunk}}. -#' -#' @return Object of class \code{TS_fit}, which is a list of [1] -#' chunk-level model fits, [2] the total log likelihood combined across -#' all chunks, and [3] the chunk time data table. -#' -#' @export -#' -#' -package_chunk_fits <- function(chunks, fits){ - nchunks <- nrow(chunks) - chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") - names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") - ll <- sum(vapply(fits, logLik, 0)) - out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) - class(out) <- c("TS_fit", "list") - out -} - -#' @title Log likelihood of a TS model (as a TS_fit-class list) -#' -#' @description Convenience function to simply extract the \code{logLik} -#' element (and \code{df} and \code{nobs}) from a \code{TS_fit} -#' object fit by a \code{_TS} function. -#' -#' @param object A \code{TS_fit}-class object. -#' -#' @param ... Not used, simply included to maintain method compatibility. -#' -#' @return Log likelihood of the model, as class \code{logLik}, with -#' attributes \code{df} (degrees of freedom) and \code{nobs} (the number of -#' weighted observations, accounting for size differences among documents). -#' -#' @export -#' -logLik.TS_fit <- function(object, ...){ - ll <- object$logLik - df <- NA - nobs <- NA - if (object$logLik != -Inf){ - nchunks <- nrow(object$chunks) - dfperchunk <- length(coef(object$"chunk models"[[1]])) - df <- nchunks - 1 + dfperchunk * nchunks - nobs <- 0 - for(i in 1:nchunks){ - nobs <- nobs + sum(object$"chunk models"[[i]]$weights) - } - } - structure(ll, df = df, nobs = nobs, class = "logLik") -} diff --git a/R/TS_plots.R b/R/TS_plots.R index b04cd720..a00d1827 100644 --- a/R/TS_plots.R +++ b/R/TS_plots.R @@ -1,41 +1,11 @@ -#' @title Plot a set of LDATS TS models -#' -#' @description Generalization of the \code{\link[graphics]{plot}} function to -#' work on a list of TS topic models (class \code{TS_set}). -#' -#' @param x An \code{TS_set} object of TS topic models. -#' -#' @param ... Not used, retained for alignment with base function. -#' -#' @param selected \code{logical} indicator of if only the selected TSs -#' (the first element in \code{x}) should be plotted or if all the TSs -#' (the second element in \code{x}) should be plotted. -#' -#' @return \code{NULL}. -#' -#' @export -#' -plot.TS_set <- function(x, ..., selected = TRUE){ - if(selected){ - x <- x[[1]] - } else{ - x <- x[[2]] - } - on.exit(devAskNewPage(FALSE)) - if (length(x) > 1){ - devAskNewPage(TRUE) - } - y <- lapply(x, plot, ...) - y <- NULL -} - - #' @title Plot an LDATS Time Series model #' #' @description #' \code{plot.TS} is a generalization of the \code{\link[graphics]{plot}} #' function to work on fitted TS model objects (class \code{TS}) #' returned from \code{\link{TS}}. \cr \cr +#' \code{plot.TS_set} plots a \code{TS_set} of \code{TS} models, either +#' just the \code{selected} models or all. \cr \cr #' \code{TS_diagnostics_plot} makes the 4-panel figures (showing trace #' plots, posterior ECDF, posterior density, and iteration #' autocorrelation) for each of the parameters (change point locations @@ -82,12 +52,17 @@ plot.TS_set <- function(x, ..., selected = TRUE){ #' \code{\link{set_gamma_colors}} and \code{\link{set_rho_hist_colors}} #' for specific details on usage. #' -#' @param x A \code{TS_fit} object of a multinomial time series model fit by -#' \code{\link{TS}}. +#' @param x In \code{plot.TS}, a \code{TS_fit} object of a multinomial time +#' series model fit by \code{\link{TS}}. In \code{plot.TS_set}, a +#' \code{TS_set} \code{list} of \code{TS} objects. #' #' @param ... Additional arguments to be passed to subfunctions. Not currently #' used, just retained for alignment with \code{\link[graphics]{plot}}. #' +#' @param selected \code{logical} indicator of if only the selected TSs +#' (the first element in \code{x}) should be plotted or if all the TSs +#' (the second element in \code{x}) should be plotted. +#' #' @param spec_rhos \code{numeric} vector indicating the locations along the #' x axis where the specific change points being used are located. #' @@ -148,11 +123,11 @@ plot.TS_set <- function(x, ..., selected = TRUE){ #' \code{\link[grDevices]{rgb}}. #' #' @return -#' \code{plot.TS},\code{TS_diagnostics_plot},\code{eta_diagnostics_plots}, -#' \code{rho_diagnostics_plots},\code{trace_plot},\code{posterior_plot}, -#' \code{autocorr_plot},\code{ecdf_plot},\code{TS_summary_plot}, -#' \code{pred_gamma_TS_plot},\code{rho_hist},\code{rho_lines}: -#' \code{NULL}. \cr \cr +#' \code{plot.TS},\code{plot.TS_set},\code{TS_diagnostics_plot}, +#' \code{eta_diagnostics_plots},\code{rho_diagnostics_plots}, +#' \code{trace_plot},\code{posterior_plot},\code{autocorr_plot}, +#' \code{ecdf_plot},\code{TS_summary_plot},\code{pred_gamma_TS_plot}, +#' \code{rho_hist},\code{rho_lines}:\code{NULL}. \cr \cr #' \code{set_rho_hist_cols},\code{set_gamma_colors}: \code{vector} of #' \code{character} hex codes indicating colors to use. #' \code{set_TS_summary_plot_cols}: \code{list} of elements used to define @@ -180,6 +155,24 @@ plot.TS <- function(x, ..., plot_type = "summary", interactive = FALSE, } } +#' @rdname plot.TS +#' +#' @export +#' +plot.TS_set <- function(x, ..., selected = TRUE){ + if(selected){ + x <- x[[1]] + } else{ + x <- x[[2]] + } + on.exit(devAskNewPage(FALSE)) + if (length(x) > 1){ + devAskNewPage(TRUE) + } + y <- lapply(x, plot, ...) + y <- NULL +} + #' @rdname plot.TS #' #' @export diff --git a/R/TS_responses.R b/R/TS_responses.R index 68d5083b..71f127d9 100644 --- a/R/TS_responses.R +++ b/R/TS_responses.R @@ -66,11 +66,11 @@ #' automated removal of unneeded controls. #' #' @return -#' \code{simplex_TS}: \code{list} of [1] chunk-level model fits -#' (\code{"chunk models"}), [2] the total log likelihood combined across +#' \code{simplex_TS}: \code{TS_fit} \code{list} of [1] chunk-level model +#' fits (\code{"chunk models"}), [2] the total log likelihood across #' all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk -#' beginning and ending times (\code{"logLik"} with columns -#' \code{"start"} and \code{"end"}). \cr \cr +#' beginning and ending times (with columns \code{"start"} and +#' \code{"end"}). \cr \cr #' \code{simplex_TS_chunk}: fitted model object for the chunk, #' of class \code{lm}. \cr \cr #' \code{simplex_TS_control}: \code{list}, with named elements @@ -223,12 +223,11 @@ simplex_TS_control <- function(transformation = ilr, quiet = FALSE, ...){ #' automated removal of unneeded controls. #' #' @return -#' \code{multinom_TS}: Object of class \code{multinom_TS_fit}, which is a +#' \code{multinom_TS}: Object of class \code{TS_fit}, which is a #' \code{list} of [1] chunk-level model fits (\code{"chunk models"}), #' [2] the total log likelihood combined across all chunks #' (\code{"logLik"}), and [3] a \code{data.frame} of chunk beginning and -#' ending times (\code{"logLik"} with columns \code{"start"} and -#' \code{"end"}). \cr \cr +#' ending times (with columns \code{"start"} and \code{"end"}). \cr \cr #' \code{multinom_TS_chunk}: fitted model object for the chunk, #' of classes \code{multinom} and \code{nnet}. \cr \cr #' \code{multinom_TS_control}: \code{list}, with named elements @@ -296,3 +295,67 @@ multinom_TS_control <- function(lambda = 0, quiet = FALSE, ...){ } + +#' @title Package the output of the chunk-level TS models into a TS_fit list +#' +#' @description Takes the list of fitted chunk-level models returned from +#' a \code{_TS_chunk} function and packages it as a +#' \code{TS_fit} object. This involves naming the model fits based +#' on the chunk time windows, combining the log likelihood values across the +#' chunks, and setting the class of the output object. +#' +#' @param chunks Data frame of \code{start} and \code{end} times for each +#' chunk (row). +#' +#' @param fits List of chunk-level fits returned by \code{TS_chunk_memo}, +#' the memoised version of \code{\link{multinom_TS_chunk}}. +#' +#' @return Object of class \code{TS_fit}, which is a list of [1] +#' chunk-level model fits, [2] the total log likelihood combined across +#' all chunks, and [3] the chunk time data table. +#' +#' @export +#' +#' +package_chunk_fits <- function(chunks, fits){ + nchunks <- nrow(chunks) + chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") + names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") + ll <- sum(vapply(fits, logLik, 0)) + out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) + class(out) <- c("TS_fit", "list") + out +} + +#' @title Log likelihood of a TS model (as a TS_fit-class list) +#' +#' @description Convenience function to simply extract the \code{logLik} +#' element (and \code{df} and \code{nobs}) from a \code{TS_fit} +#' object fit by a \code{_TS} function. +#' +#' @param object A \code{TS_fit}-class object. +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return Log likelihood of the model, as class \code{logLik}, with +#' attributes \code{df} (degrees of freedom) and \code{nobs} (the number of +#' weighted observations, accounting for size differences among documents). +#' +#' @export +#' +logLik.TS_fit <- function(object, ...){ + ll <- object$logLik + df <- NA + nobs <- NA + if (object$logLik != -Inf){ + nchunks <- nrow(object$chunks) + dfperchunk <- length(coef(object$"chunk models"[[1]])) + df <- nchunks - 1 + dfperchunk * nchunks + nobs <- 0 + for(i in 1:nchunks){ + nobs <- nobs + sum(object$"chunk models"[[i]]$weights) + } + } + structure(ll, df = df, nobs = nobs, class = "logLik") +} + diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index 23a15edf..0abafa0c 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -21,10 +21,10 @@ LDA_TS_control(LDA_model = topicmodels_LDA, sequential_TS_control()), TS_response = multinom_TS, TS_response_args = list(control = multinom_TS_control()), TS_method = ldats_classic, TS_method_args = list(control = - ldats_classic_control()), nsubsets = 1, subset_rule = NULL, - summary_prob = 0.95, soften = TRUE, quiet = FALSE, - TS_measurer = AIC, TS_measurer_args = list(NULL), - TS_selector = which.min, TS_selector_args = list(NULL), ...) + ldats_classic_control()), TS_measurer = AIC, + TS_measurer_args = list(NULL), TS_selector = which.min, + TS_selector_args = list(NULL), summary_prob = 0.95, nsubsets = 1, + subset_rule = NULL, soften = TRUE, quiet = FALSE, ...) } \arguments{ \item{data}{Any of the data structures allowable for LDATS analyses: @@ -127,20 +127,6 @@ Current pre-built options include \code{\link{ldats_classic}}.} Could be managed via a \code{_control} function like \code{\link{ldats_classic_control}}.} -\item{nsubsets}{Number of data subsets.} - -\item{subset_rule}{\code{function} used to subset the data.} - -\item{summary_prob}{Probability used for summarizing the posterior -distributions (via the highest posterior density interval, see -\code{\link[coda]{HPDinterval}}).} - -\item{soften}{\code{logical} indicator of whether the model should error -softly or if errors should trigger a full-stop to the pipeline.} - -\item{quiet}{\code{logical} indicator of whether the model should run -quietly (if \code{FALSE}, a progress bar and notifications are printed).} - \item{TS_measurer}{\code{function} used in evaluation of the TS models; \code{measurer} creates a value for each model.} @@ -153,6 +139,20 @@ models; \code{TS_selector} operates on the values to choose the models.} \item{TS_selector_args}{\code{list} of (named) arguments to be used in \code{TS_selector} via \code{\link{do.call}}.} +\item{summary_prob}{Probability used for summarizing the posterior +distributions (via the highest posterior density interval, see +\code{\link[coda]{HPDinterval}}).} + +\item{nsubsets}{Number of data subsets.} + +\item{subset_rule}{\code{function} used to subset the data.} + +\item{soften}{\code{logical} indicator of whether the model should error +softly or if errors should trigger a full-stop to the pipeline.} + +\item{quiet}{\code{logical} indicator of whether the model should run +quietly (if \code{FALSE}, a progress bar and notifications are printed).} + \item{...}{Not passed along to the output, rather included to allow for automated removal of unneeded controls.} diff --git a/man/logLik.TS_fit.Rd b/man/logLik.TS_fit.Rd index e2e92675..cb5ba1b4 100644 --- a/man/logLik.TS_fit.Rd +++ b/man/logLik.TS_fit.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_fit.R +% Please edit documentation in R/TS_responses.R \name{logLik.TS_fit} \alias{logLik.TS_fit} \title{Log likelihood of a TS model (as a TS_fit-class list)} diff --git a/man/multinom_TS.Rd b/man/multinom_TS.Rd index 7d5f36d6..ad4b406a 100644 --- a/man/multinom_TS.Rd +++ b/man/multinom_TS.Rd @@ -69,12 +69,11 @@ quietly (if \code{FALSE}, a progress bar and notifications are printed).} automated removal of unneeded controls.} } \value{ -\code{multinom_TS}: Object of class \code{multinom_TS_fit}, which is a +\code{multinom_TS}: Object of class \code{TS_fit}, which is a \code{list} of [1] chunk-level model fits (\code{"chunk models"}), [2] the total log likelihood combined across all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk beginning and - ending times (\code{"logLik"} with columns \code{"start"} and - \code{"end"}). \cr \cr + ending times (with columns \code{"start"} and \code{"end"}). \cr \cr \code{multinom_TS_chunk}: fitted model object for the chunk, of classes \code{multinom} and \code{nnet}. \cr \cr \code{multinom_TS_control}: \code{list}, with named elements diff --git a/man/package_chunk_fits.Rd b/man/package_chunk_fits.Rd index ad45c0fc..32c4b117 100644 --- a/man/package_chunk_fits.Rd +++ b/man/package_chunk_fits.Rd @@ -1,5 +1,5 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_fit.R +% Please edit documentation in R/TS_responses.R \name{package_chunk_fits} \alias{package_chunk_fits} \title{Package the output of the chunk-level TS models into a TS_fit list} diff --git a/man/plot.LDA.Rd b/man/plot.LDA.Rd index 0936a9fa..68bdd23f 100644 --- a/man/plot.LDA.Rd +++ b/man/plot.LDA.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/LDA_plots.R \name{plot.LDA} \alias{plot.LDA} +\alias{plot.LDA_set} \alias{LDA_plot_top_panel} \alias{LDA_plot_bottom_panel} \alias{set_LDA_plot_colors} @@ -10,6 +11,8 @@ \method{plot}{LDA}(x, ..., xtime = NULL, xname = NULL, cols = NULL, option = "C", alpha = 0.8, LDATS = FALSE) +\method{plot}{LDA_set}(x, ..., selected = TRUE) + LDA_plot_top_panel(x, cols = NULL, option = "C", alpha = 0.8, together = FALSE, LDATS = FALSE) @@ -47,12 +50,16 @@ colors used. Supported only on some devices, see \item{LDATS}{\code{logical} indicating if the LDA plot is part of a larger LDATS plot output.} +\item{selected}{\code{logical} indicator of if only the selected LDAs +(the first element in \code{x}) should be plotted or if all the LDAs +(the second element in \code{x}) should be plotted.} + \item{together}{\code{logical} indicating if the subplots are part of a larger LDA plot output.} } \value{ -\code{plot.LDA},\code{LDA_plot_top_panel},\code{LDA_plot_bottom_panel}: - \code{NULL}. \cr \cr +\code{plot.LDA},\code{plot.LDA_set},\code{LDA_plot_top_panel}, + \code{LDA_plot_bottom_panel}: \code{NULL}. \cr \cr \code{set_LDA_plot_colors}: \code{vector} of \code{character} hex codes indicating colors to use. } @@ -60,6 +67,8 @@ larger LDA plot output.} \code{plot.LDA} creates an LDATS LDA summary plot, with a top panel showing the topic proportions for each word and a bottom panel showing the topic proportions of each document/over time. \cr \cr + \code{plot.LDA_set} plots either the \code{selected} model results or + all of them from a \code{LDA_set} of \code{LDA} models. \code{LDA_plot_top_panel} creates an LDATS LDA summary plot top panel showing the topic proportions word-by-word. \cr \cr \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot diff --git a/man/plot.LDA_TS.Rd b/man/plot.LDA_TS.Rd index b5901b9d..0fa3e8bd 100644 --- a/man/plot.LDA_TS.Rd +++ b/man/plot.LDA_TS.Rd @@ -5,7 +5,7 @@ \alias{set_LDA_TS_plot_colors} \title{Plot the key results from a full LDATS analysis} \usage{ -\method{plot}{LDA_TS}(x, ..., cols = set_LDA_TS_plot_color(), +\method{plot}{LDA_TS}(x, ..., cols = set_LDA_TS_plot_colors(), bin_width = 1, xname = NULL, border = NA, selection = "median") set_LDA_TS_plot_colors(rho_cols = NULL, rho_option = "D", diff --git a/man/plot.LDA_set.Rd b/man/plot.LDA_set.Rd deleted file mode 100644 index 06a6cd22..00000000 --- a/man/plot.LDA_set.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/LDA_plots.R -\name{plot.LDA_set} -\alias{plot.LDA_set} -\title{Plot a set of LDATS LDA models} -\usage{ -\method{plot}{LDA_set}(x, ..., selected = TRUE) -} -\arguments{ -\item{x}{An \code{LDA_set} object of LDA topic models.} - -\item{...}{Not used, retained for alignment with base function.} - -\item{selected}{\code{logical} indicator of if only the selected LDAs -(the first element in \code{x}) should be plotted or if all the LDAs -(the second element in \code{x}) should be plotted.} -} -\value{ -\code{NULL}. -} -\description{ -Generalization of the \code{\link[graphics]{plot}} function to - work on a list of LDA topic models (class \code{LDA_set}). -} diff --git a/man/plot.TS.Rd b/man/plot.TS.Rd index 76cdfcbd..c0a451ca 100644 --- a/man/plot.TS.Rd +++ b/man/plot.TS.Rd @@ -2,6 +2,7 @@ % Please edit documentation in R/TS_plots.R \name{plot.TS} \alias{plot.TS} +\alias{plot.TS_set} \alias{TS_diagnostics_plot} \alias{eta_diagnostics_plots} \alias{rho_diagnostics_plots} @@ -22,6 +23,8 @@ cols = set_TS_summary_plot_cols(), bin_width = 1, xname = NULL, border = NA, selection = "median", LDATS = FALSE) +\method{plot}{TS_set}(x, ..., selected = TRUE) + TS_diagnostics_plot(x, interactive = TRUE) eta_diagnostics_plots(x, interactive) @@ -56,8 +59,9 @@ set_rho_hist_colors(x = NULL, cols = NULL, option = "D", alpha = 1) set_gamma_colors(x, cols = NULL, option = "D", alpha = 1) } \arguments{ -\item{x}{A \code{TS_fit} object of a multinomial time series model fit by -\code{\link{TS}}.} +\item{x}{In \code{plot.TS}, a \code{TS_fit} object of a multinomial time +series model fit by \code{\link{TS}}. In \code{plot.TS_set}, a +\code{TS_set} \code{list} of \code{TS} objects.} \item{...}{Additional arguments to be passed to subfunctions. Not currently used, just retained for alignment with \code{\link[graphics]{plot}}.} @@ -100,6 +104,10 @@ summary plot. Currently only defined for \code{"median"} and \item{LDATS}{\code{logical} indicating if the plot is part of a larger LDATS plot output.} +\item{selected}{\code{logical} indicator of if only the selected TSs +(the first element in \code{x}) should be plotted or if all the TSs +(the second element in \code{x}) should be plotted.} + \item{draw}{\code{vector} of parameter values drawn from the posterior distribution, indexed to the iteration by the order of the vector.} @@ -121,11 +129,11 @@ transparency of the colors used. Supported only on some devices, see \code{\link[grDevices]{rgb}}.} } \value{ -\code{plot.TS},\code{TS_diagnostics_plot},\code{eta_diagnostics_plots}, - \code{rho_diagnostics_plots},\code{trace_plot},\code{posterior_plot}, - \code{autocorr_plot},\code{ecdf_plot},\code{TS_summary_plot}, - \code{pred_gamma_TS_plot},\code{rho_hist},\code{rho_lines}: - \code{NULL}. \cr \cr +\code{plot.TS},\code{plot.TS_set},\code{TS_diagnostics_plot}, + \code{eta_diagnostics_plots},\code{rho_diagnostics_plots}, + \code{trace_plot},\code{posterior_plot},\code{autocorr_plot}, + \code{ecdf_plot},\code{TS_summary_plot},\code{pred_gamma_TS_plot}, + \code{rho_hist},\code{rho_lines}:\code{NULL}. \cr \cr \code{set_rho_hist_cols},\code{set_gamma_colors}: \code{vector} of \code{character} hex codes indicating colors to use. \code{set_TS_summary_plot_cols}: \code{list} of elements used to define @@ -138,6 +146,8 @@ transparency of the colors used. Supported only on some devices, see \code{plot.TS} is a generalization of the \code{\link[graphics]{plot}} function to work on fitted TS model objects (class \code{TS}) returned from \code{\link{TS}}. \cr \cr + \code{plot.TS_set} plots a \code{TS_set} of \code{TS} models, either + just the \code{selected} models or all. \cr \cr \code{TS_diagnostics_plot} makes the 4-panel figures (showing trace plots, posterior ECDF, posterior density, and iteration autocorrelation) for each of the parameters (change point locations diff --git a/man/plot.TS_set.Rd b/man/plot.TS_set.Rd deleted file mode 100644 index 90ae439a..00000000 --- a/man/plot.TS_set.Rd +++ /dev/null @@ -1,24 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/TS_plots.R -\name{plot.TS_set} -\alias{plot.TS_set} -\title{Plot a set of LDATS TS models} -\usage{ -\method{plot}{TS_set}(x, ..., selected = TRUE) -} -\arguments{ -\item{x}{An \code{TS_set} object of TS topic models.} - -\item{...}{Not used, retained for alignment with base function.} - -\item{selected}{\code{logical} indicator of if only the selected TSs -(the first element in \code{x}) should be plotted or if all the TSs -(the second element in \code{x}) should be plotted.} -} -\value{ -\code{NULL}. -} -\description{ -Generalization of the \code{\link[graphics]{plot}} function to - work on a list of TS topic models (class \code{TS_set}). -} diff --git a/man/print.TS.Rd b/man/print.TS.Rd index 91addf50..890b762b 100644 --- a/man/print.TS.Rd +++ b/man/print.TS.Rd @@ -7,7 +7,7 @@ \method{print}{TS}(x, ...) } \arguments{ -\item{x}{Class \code{TS_fit} object to be printed.} +\item{x}{Class \code{TS} object to be printed.} \item{...}{Not used, simply included to maintain method compatibility.} } diff --git a/man/simplex_TS.Rd b/man/simplex_TS.Rd index 1f72286c..51278799 100644 --- a/man/simplex_TS.Rd +++ b/man/simplex_TS.Rd @@ -68,11 +68,11 @@ quietly (if \code{FALSE}, a progress bar and notifications are printed).} automated removal of unneeded controls.} } \value{ -\code{simplex_TS}: \code{list} of [1] chunk-level model fits - (\code{"chunk models"}), [2] the total log likelihood combined across +\code{simplex_TS}: \code{TS_fit} \code{list} of [1] chunk-level model + fits (\code{"chunk models"}), [2] the total log likelihood across all chunks (\code{"logLik"}), and [3] a \code{data.frame} of chunk - beginning and ending times (\code{"logLik"} with columns - \code{"start"} and \code{"end"}). \cr \cr + beginning and ending times (with columns \code{"start"} and + \code{"end"}). \cr \cr \code{simplex_TS_chunk}: fitted model object for the chunk, of class \code{lm}. \cr \cr \code{simplex_TS_control}: \code{list}, with named elements diff --git a/notes.R b/notes.R index e78d80f0..a0ceb868 100644 --- a/notes.R +++ b/notes.R @@ -10,7 +10,6 @@ tests what is up with lda_ts_controls... ...oh thats how its always been because of the splitting? -where do the ts_fit functions go? ldats_classic? devtools::load_all() @@ -38,12 +37,16 @@ LDATSs <- LDA_TS(data = data, topics = topics, replicates = replicates, weights = weights, control = list(TS_method_args = list(control = ldats_classic_control(nit=100)))) +plot(LDAs) +plot(TSs) +plot(LDATSs) names(LDATSs) cc<-TS_control(method_args = list(control = ldats_classic_control(nit = 100))) $method_args$control$nit -cc<-LDA_TS_control(TS_method_args = list(control = ldats_classic_control(nit = 100))) +cc<-LDA_TS_control(TS_method_args = + list(control = ldats_classic_control(nit = 100))) names(cc) names(formals(TS_control)) From 9843c66431b4df37688c88ad5b17e6efad674405 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 03:58:39 -0700 Subject: [PATCH 32/43] documents --- NAMESPACE | 8 +- R/LDA.R | 2 - R/LDATS.R | 2 +- R/LDA_TS.R | 2 +- R/LDA_TS_plots.R | 2 +- R/LDA_models.R | 20 ++-- R/LDA_plots.R | 2 +- R/TS.R | 12 ++- R/TS_methods.R | 9 +- R/TS_models.R | 12 +-- R/TS_plots.R | 21 ++-- R/argument_checking.R | 2 - R/simulate.R | 194 +++++++++++++++-------------------- man/LDA.Rd | 2 - man/LDA_TS.Rd | 12 +-- man/TS.Rd | 12 ++- man/argument_checking.Rd | 3 - man/identity_LDA.Rd | 2 +- man/ldats_classic.Rd | 3 + man/plot.LDA.Rd | 2 +- man/plot.LDA_TS.Rd | 2 +- man/plot.TS.Rd | 3 + man/sequential_TS.Rd | 10 +- man/sim_LDA_TS_data.Rd | 61 ----------- man/sim_LDA_data.Rd | 47 --------- man/sim_TS_data.Rd | 48 --------- man/simulate_data.Rd | 90 ++++++++++++++++ man/topicmodels_LDA.Rd | 18 ++-- notes.R | 59 +++-------- vignettes/LDATS_codebase.Rmd | 29 ++++++ 30 files changed, 301 insertions(+), 390 deletions(-) delete mode 100644 man/sim_LDA_TS_data.Rd delete mode 100644 man/sim_LDA_data.Rd delete mode 100644 man/sim_TS_data.Rd create mode 100644 man/simulate_data.Rd diff --git a/NAMESPACE b/NAMESPACE index 055b1ce3..406c147b 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -105,14 +105,15 @@ export(set_LDA_plot_colors) export(set_TS_summary_plot_cols) export(set_gamma_colors) export(set_rho_hist_colors) -export(sim_LDA_TS_data) -export(sim_LDA_data) -export(sim_TS_data) export(simplex_TS) export(simplex_TS_chunk) export(simplex_TS_control) +export(simulate_LDA_TS_data) +export(simulate_LDA_data) +export(simulate_TS_data) export(soft_call) export(softmax) +export(step_chains) export(summarize_etas) export(summarize_rhos) export(swap_chains) @@ -165,6 +166,7 @@ importFrom(stats,acf) importFrom(stats,as.formula) importFrom(stats,coef) importFrom(stats,ecdf) +importFrom(stats,lm) importFrom(stats,logLik) importFrom(stats,median) importFrom(stats,rgeom) diff --git a/R/LDA.R b/R/LDA.R index 07b53cb6..8c7dfe8c 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -58,8 +58,6 @@ #' @param LDA,LDAs model \code{list} (\code{LDA}) or a \code{list} of LDA #' model \code{list}s (\code{LDAs}). #' -#' @param selected_LDAs \code{list} of selected LDA model \code{list}s. -#' #' @param model Main LDA \code{function}. #' #' @param model_args \code{list} of (named) arguments to be used in diff --git a/R/LDATS.R b/R/LDATS.R index a295853f..249465d1 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -12,7 +12,7 @@ #' @importFrom mvtnorm rmvnorm #' @importFrom nnet multinom #' @importFrom progress progress_bar -#' @importFrom stats acf AIC as.formula coef ecdf logLik median rgeom rnorm +#' @importFrom stats acf AIC as.formula coef ecdf lm logLik median rgeom rnorm #' runif sd terms var vcov #' @importFrom viridis viridis #' diff --git a/R/LDA_TS.R b/R/LDA_TS.R index 6a0039fc..3c57e2aa 100644 --- a/R/LDA_TS.R +++ b/R/LDA_TS.R @@ -105,7 +105,7 @@ #' @param TS_response \code{function} used to model the compositional #' response. #' -#' @param response_args \code{list} of (named) arguments to be used in +#' @param TS_response_args \code{list} of (named) arguments to be used in #' \code{TS_response} via \code{\link{do.call}}. #' \cr \cr #' Could be managed via a \code{_TS_control} function like diff --git a/R/LDA_TS_plots.R b/R/LDA_TS_plots.R index 46695d93..76955cbb 100644 --- a/R/LDA_TS_plots.R +++ b/R/LDA_TS_plots.R @@ -52,7 +52,7 @@ #' #' @param cols \code{list} of elements used to define the colors for the two #' panels of the summary plot, as generated simply using -#' \code{\link{set_LDA_TS_plot_cols}}. \code{cols} has two elements: +#' \code{\link{set_LDA_TS_plot_colors}}. \code{cols} has two elements: #' \code{LDA} and \code{TS}, each corresponding the set of plots for #' its stage in the full model. \code{LDA} contains entries \code{cols} #' and \code{option} (see \code{\link{set_LDA_plot_colors}}). \code{TS} diff --git a/R/LDA_models.R b/R/LDA_models.R index 241eb241..f967131f 100644 --- a/R/LDA_models.R +++ b/R/LDA_models.R @@ -3,26 +3,24 @@ #' as conducted via the topicmodels package #' #' @description Fit the standard LDATS LDA model (a true Latent Dirichlet -#' Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} -#' (Grun and Hornik 2011). \cr -#' Default methodology is the Variational -#' Expectation Maximization routine (VEM) as described by -#' Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr +#' Allocation) using \code{\link[topicmodels]{LDA}} (Grun and Hornik 2011). +#' Default methodology is the Variational Expectation Maximization routine +#' (VEM) as described by Blei \emph{et al.} (2003) and implemented by +#' Grun and Hornik (2011). \cr \cr #' If the model is defined to only fit one topic, \code{\link{identity_LDA}} #' is used by default. #' -#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' @param LDA A prepared (via \code{\link{prepare_LDA}} LDA model #' \code{list}. #' #' @param ... Additional arguments to be passed to -#' \code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input. +#' \code{\link[topicmodels]{LDA}} as a \code{control} input. #' #' @param seeded \code{logical} indicator of if the LDA should be a seeded #' replicate. #' -#' @param method Fitting routine used in -#' \code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only -#' \code{"VEM"} and \code{"Gibbs"} are supported. +#' @param method Fitting routine used in \code{\link[topicmodels]{LDA}}. +#' Currenlty, only \code{"VEM"} and \code{"Gibbs"} are supported. #' #' @return \code{LDA} \code{list} with components #' \describe{ @@ -90,7 +88,7 @@ topicmodels_LDA <- function(LDA, method = "VEM", seeded = TRUE, ...){ #' output is functionally the input. This allows for "single-topic" models #' that do not actually decompose the data to be included in the model set. #' -#' @param LDA A prepared (via \code{\link{prep_LDA_models}} LDA model +#' @param LDA A prepared (via \code{\link{prepare_LDA}} LDA model #' \code{list}. #' #' @return \code{LDA} \code{list} with components (many of which are diff --git a/R/LDA_plots.R b/R/LDA_plots.R index 5fd1c7d8..4ba463dc 100644 --- a/R/LDA_plots.R +++ b/R/LDA_plots.R @@ -6,7 +6,7 @@ #' showing the topic proportions for each word and a bottom panel showing #' the topic proportions of each document/over time. \cr \cr #' \code{plot.LDA_set} plots either the \code{selected} model results or -#' all of them from a \code{LDA_set} of \code{LDA} models. +#' all of them from a \code{LDA_set} of \code{LDA} models. \cr \cr #' \code{LDA_plot_top_panel} creates an LDATS LDA summary plot #' top panel showing the topic proportions word-by-word. \cr \cr #' \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot diff --git a/R/TS.R b/R/TS.R index 8790b4ea..0e410fb1 100644 --- a/R/TS.R +++ b/R/TS.R @@ -80,11 +80,12 @@ #' Time Series model. Values not input assume defaults set by #' \code{\link{TS_control}}. #' +#' @param LDAs Class \code{LDA_set} \code{list} of both selected and all +#' results from \code{\link{LDA}}. +#' #' @param TS,TSs time series model \code{list} (\code{TS}) or a \code{list} #' of many time series model \code{list}s (\code{TSs}). #' -#' @param selected_TSs \code{list} of selected time series model \code{list}s. -#' #' @param response \code{character} element indicating the response variable #' used in the time series. \cr \cr #' Must have a corresponding \code{_TS} function. @@ -105,6 +106,11 @@ #' @param soften \code{logical} indicator of whether the model should error #' softly or if errors should trigger a full-stop to the pipeline. #' +#' @param model Main Time Series \code{function}. +#' +#' @param model_args \code{list} of (named) arguments to be used in +#' \code{model} via \code{\link{TS_call}}. +#' #' @param method \code{function} used to drive the sampler of the TS #' models; \code{method} defines and operates the computational procedure. #' \cr \cr @@ -147,7 +153,7 @@ #' \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr #' \code{run_TS}: \code{TS_set} \code{list} of model results from all #' runs of a \code{} function, such as -#' \code{\link{topicmodels_TS}}. \cr \cr +#' \code{\link{topicmodels_LDA}}. \cr \cr #' \code{TS_call}: \code{TS} \code{list} of model results from a single #' run of a \code{} function, such as #' \code{\link{sequential_TS}}. \cr \cr diff --git a/R/TS_methods.R b/R/TS_methods.R index afb36666..b5280c9d 100644 --- a/R/TS_methods.R +++ b/R/TS_methods.R @@ -331,8 +331,8 @@ prep_cpts <- function(TS){ data <- TS$data$train$ts_data temps <- prep_temp_sequence(TS = TS) ntemps <- length(temps) - min_time <- min(data[ , timename]) - max_time <- max(data[ , timename]) + min_time <- min(data[ , TS$timename]) + max_time <- max(data[ , TS$timename]) times <- seq(min_time, max_time, 1) avail_times <- times[-c(1, length(times))] cps <- matrix(NA, nrow = TS$nchangepoints, ncol = ntemps) @@ -502,6 +502,11 @@ prep_ids <- function(TS){ update_ids <- function(ids, swaps){ swaps$ids } + +#' @rdname ldats_classic +#' +#' @export +#' step_chains <- function(TS, i, cpts, inputs){ prop_step <- propose_step(TS = TS, i = i, cpts = cpts, inputs = inputs) accept_step <- eval_step(i = i, cpts = cpts, prop_step = prop_step, diff --git a/R/TS_models.R b/R/TS_models.R index 60faeca1..495b38a9 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -48,14 +48,10 @@ #' #' @param rhos \code{matrix} of change point locations (columns) across #' iterations of the sampler (rows) or \code{NULL} if no change points are -#' in the model, as returned from \code{\link{est_change points}}. +#' in the model, as returned from \code{\link{est_changepoints}}. #' #' @param TS Time series model \code{list}. #' -#' @param response \code{character} element indicating the response variable -#' used in the time series. \cr \cr -#' Must have a corresponding \code{_TS} function. -#' #' @param summary_prob Probability used for summarizing the posterior #' distributions (via the highest posterior density interval, see #' \code{\link[coda]{HPDinterval}}). @@ -121,7 +117,7 @@ #' \item{timename}{\code{timename} input to the function.} #' \item{control}{\code{control} input to the function.} #' \item{lls}{Iteration-by-iteration -#' \link[=logLik.multinom_TS_fit]{logLik} values for the +#' \link[=logLik.TS_fit]{logLik} values for the #' full time series fit by \code{\link{multinom_TS}}.} #' \item{rhos}{Iteration-by-iteration change point estimates from #' \code{\link{est_changepoints}} and diagnostics.} @@ -160,7 +156,7 @@ #' each regressor. \cr \cr #' \code{measure_eta_vcov}: variance-covariance matrix for chunk-level #' regressors. \cr \cr -#' \code{summarize_rhos}: table of summary statistics for change point +#' \code{summarize_rhos}: table of summary statistics for change point #' locations including mean, median, mode, posterior interval, standard #' deviation, MCMC error, autocorrelation, and effective sample size for #' each change point location. \cr \cr @@ -259,7 +255,7 @@ est_regressors <- function(rho_dist, TS){ mod <- mod[[1]][[1]] mv <- as.vector(t(coef(mod))) vcv <- mirror_vcov(mod) - eta <- rmvnorm(control$method_args$nit, mv, vcv) + eta <- rmvnorm(TS$control$method_args$nit, mv, vcv) seg_names <- rep(1, ncol(vcv)) coef_names <- colnames(vcv) colnames(eta) <- paste(seg_names, coef_names, sep = "_") diff --git a/R/TS_plots.R b/R/TS_plots.R index a00d1827..ed356fad 100644 --- a/R/TS_plots.R +++ b/R/TS_plots.R @@ -83,6 +83,9 @@ #' summary plot. Currently only defined for \code{"median"} and #' \code{"mode"}. #' +#' @param together \code{logical} indicating if the subplots are part of a +#' larger plot output. +#' #' @param cols,rho_cols,gamma_cols #' In \code{plot.TS}, \code{cols} is a \code{list} of elements used to #' define the colors for the two panels of the summary plot, as generated @@ -352,16 +355,14 @@ pred_gamma_TS_plot <- function(x, selection = "median", } x$control$timename <- NULL # to remove from v0.1.0 model fits -# -# NEEDS TO BE GENERALIZED -# - seg_mods <- multinom_TS(x$data$train$ts_data, x$formula, spec_rhos, - x$timename, x$weights, x$control) -# -# -# + fun <- x$control$response + args <- list(data = x$data$train$ts_data, formula = x$formula, + changepoints = spec_rhos, timename = x$timename, + weights = x$weights, + control = x$control$response_args$control) + mod <- soft_call(what = fun, args = args, soften = TRUE) - nsegs <- length(seg_mods[[1]]) + nsegs <- length(mod[[1]]) t1 <- min(x$data$train$ts_data[, x$timename]) t2 <- max(x$data$train$ts_data[, x$timename]) @@ -383,7 +384,7 @@ pred_gamma_TS_plot <- function(x, selection = "median", pred_vals <- matrix(NA, nrow(x$data$train$ts_data), ntopics) sp1 <- 1 for (i in 1:nsegs){ - mod_i <- seg_mods[[1]][[i]] + mod_i <- mod[[1]][[i]] spec_vals <- sp1:(sp1 + nrow(mod_i$fitted.values) - 1) pred_vals[spec_vals, ] <- mod_i$fitted.values time_obs[spec_vals] <- mod_i$timevals diff --git a/R/argument_checking.R b/R/argument_checking.R index 8cc25c29..ddb445cd 100644 --- a/R/argument_checking.R +++ b/R/argument_checking.R @@ -44,8 +44,6 @@ #' variables are all included in \code{LDAs} data sets. \cr \cr #' \code{check_nchangepoints} checks that the \code{vector} of numbers of #' changepoints is conformable to non-negative \code{integers}.\cr \cr -#' -#' @details #' #' @param object An object whose class should be checked against #' \code{eclass}. diff --git a/R/simulate.R b/R/simulate.R index 869e2b2d..78bbc3b6 100644 --- a/R/simulate.R +++ b/R/simulate.R @@ -1,10 +1,25 @@ -#' @title Simulate LDA data from an LDA structure given parameters +#' @title Simulate LDA_TS data from LDA and TS model structures and parameters #' -#' @description For a given set of parameters \code{alpha} and \code{Beta} and -#' document-specific total word counts, simulate a document-by-term matrix. -#' Additional structuring variables (the numbers of topics (k), -#' documents (M), terms (V)) are inferred from input objects. +#' @description +#' \code{simulate_LDA_data} for a given set of parameters \code{alpha} and +#' \code{Beta} and document-specific total word counts, simulate a +#' document-by-term matrix. \cr +#' Additional structuring variables (the numbers of topics (k), +#' documents (M), terms (V)) are inferred from input objects. \cr \cr +#' \code{simulate_TS_data} for a given set of covariates \code{X}; +#' parameters \code{Eta}, \code{rho}, and \code{err}; and +#' document-specific time stamps \code{tD}, simulate a document-by-topic +#' matrix. Additional structuring variables (numbers of topics (k), +#' documents (M), segments (S), and covariates per segment (C)) are +#' inferred from input objects. +#' \code{simulate_LDA_TS_data} for a given set of covariates \code{X}; +#' parameters \code{Beta}, \code{Eta}, \code{rho}, and \code{err}; and +#' document-specific time stamps \code{tD} and lengths \code{N}), +#' simulate a document-by-topic matrix. \cr +#' Additional structuring variables (the numbers of topics (k), terms (V), +#' documents (M), segments (S), and covariates per segment (C)) +#' are inferred from input objects. #' #' @param N A vector of document sizes (total word counts). Must be integer #' conformable. Is used to infer the total number of documents. @@ -13,7 +28,28 @@ #' terms within topics. Dimension: k x V (number of topics x number of #' terms). Used to infer both (k) and (V). Must be non-negative and sum to #' 1 within topics. +#' +#' @param X \code{matrix} of covariates, dimension M (number of documents) x +#' C (number of covariates, including the intercept) (a.k.a the design +#' matrix). +#' +#' @param Eta \code{matrix} of regression parameters across the segments, +#' dimension: SC (number of segments x number of covariates, including the +#' intercept) x k (number of topics). +#' +#' @param rho Vector of integer-conformable time locations of changepoints or +#' \code{NULL} if no changepoints. Used to determine the number of +#' segments. Must exist within the bounds of the times of the documents, +#' \code{tD}. +#' +#' @param tD Vector of integer-conformable times of the documents. Must be +#' of length M (as determined by \code{X}). #' +#' @param err Additive error on the link-scale. Must be a non-negative +#' \code{numeric} value. Default value of \code{0} indicates no error. +#' +#' @param seed Input to \code{\link{set.seed}}. +#' #' @param alpha Single positive numeric value for the Dirichlet distribution #' parameter defining topics within documents. To specifically define #' document topic probabilities, use \code{Theta}. @@ -22,23 +58,32 @@ #' documents. Dimension: M x k (documents x topics). Must be non-negative #' and sum to 1 within documents. To generally define document topic #' probabilities, use \code{alpha}. -#' -#' @param seed Input to \code{\link{set.seed}}. #' -#' @return A document-by-term \code{matrix} of counts (dim: M x V). +#' @param invlink \code{function} name for the inverse link function. +#' Currently available are \code{\link{softmax}} and the inverses of +#' the ILR, ALR, and CLR transforms (\code{\link[compositions]{ilrInv}}, +#' \code{\link[compositions]{alrInv}}, and +#' \code{\link[compositions]{clrInv}}). #' -#' @examples -#' N <- c(10, 22, 15, 31) -#' alpha <- 1.2 -#' Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) -#' sim_LDA_data(N, Beta, alpha = alpha) -#' Theta <- matrix(c(0.2, 0.8, 0.8, 0.2, 0.5, 0.5, 0.9, 0.1), 4, 2, -#' byrow = TRUE) -#' sim_LDA_data(N, Beta, Theta = Theta) +#' @return +#' \code{simulate_LDA}: A document-by-term \code{matrix} of counts +#' (dim: M x V). \cr \cr +#' \code{simulate_TS}: document-by-topic \code{matrix} of +#' proportions (dim: M x k). \cr \cr +#' \code{simulate_LDA_TS}: A document-by-term \code{matrix} of counts +#' (dim: M x V). +#' +#' @name simulate_data +#' + + + +#' @rdname simulate_data #' #' @export #' -sim_LDA_data <- function(N, Beta, alpha = NULL, Theta = NULL, seed = NULL){ +simulate_LDA_data <- function(N, Beta, alpha = NULL, Theta = NULL, + seed = NULL){ if (length(dim(N)) > 1 | !is.numeric(N) || !all(N %% 1 == 0)){ stop("N must be a vector of integer conformable values") } @@ -88,47 +133,14 @@ sim_LDA_data <- function(N, Beta, alpha = NULL, Theta = NULL, seed = NULL){ w } -#' @title Simulate TS data from a TS model structure given parameters -#' -#' @description For a given set of covariates \code{X}; parameters \code{Eta}, -#' \code{rho}, and \code{err}; and document-specific time stamps \code{tD}, -#' simulate a document-by-topic matrix. Additional structuring variables -#' (numbers of topics (k), documents (M), segments (S), and -#' covariates per segment (C)) are inferred from input objects. -#' -#' @param X \code{matrix} of covariates, dimension M (number of documents) x -#' C (number of covariates, including the intercept) (a.k.a. the design -#' matrix). -#' -#' @param Eta \code{matrix} of regression parameters across the segments, -#' dimension: SC (number of segments x number of covariates, including the -#' intercept) x k (number of topics). -#' -#' @param rho Vector of integer-conformable time locations of changepoints or -#' \code{NULL} if no changepoints. Used to determine the number of -#' segments. Must exist within the bounds of the times of the documents, -#' \code{tD}. -#' -#' @param tD Vector of integer-conformable times of the documents. Must be -#' of length M (as determined by \code{X}). -#' -#' @param err Additive error on the link-scale. Must be a non-negative -#' \code{numeric} value. Default value of \code{0} indicates no error. -#' -#' @param seed Input to \code{\link{set.seed}}. + + +#' @rdname simulate_data #' -#' @return A document-by-topic \code{matrix} of probabilities (dim: M x k). -#' -#' @examples -#' tD <- c(1, 3, 4, 6) -#' rho <- 3 -#' X <- cbind(rep(1, 4), 1:4) -#' Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) -#' sim_TS_data(X, Eta, rho, tD, err = 1) -#' #' @export #' -sim_TS_data <- function(X, Eta, rho, tD, err = 0, seed = NULL){ +simulate_TS_data <- function(X, Eta, rho, tD, err = 0, seed = NULL, + invlink = softmax){ if (length(dim(tD)) > 1 | !is.numeric(tD) || !all(tD %% 1 == 0)){ stop("tD must be a vector of integer conformable values") @@ -152,74 +164,34 @@ sim_TS_data <- function(X, Eta, rho, tD, err = 0, seed = NULL){ C <- nrow(Eta) / S s_start <- c(min(tD), rho + 1) s_end <- c(rho, max(tD)) - EGamma <- matrix(NA, nrow = nrow(X), ncol = ncol(Eta)) + + in1 <- which(tD >= s_start[1] & tD <= s_end[1]) + in2 <- (C * (1 - 1) + 1):(C * 1) + X_Eta <- matrix(data = X[in1, ], nrow = length(in1)) %*% Eta[in2,] + eps <- rnorm(length(X_Eta), 0, err) + val <- X_Eta + eps + tester <- do.call(invlink, list(val)) + EGamma <- matrix(NA, nrow = nrow(X), ncol = ncol(tester)) for(s in 1:S){ in1 <- which(tD >= s_start[s] & tD <= s_end[s]) in2 <- (C * (s - 1) + 1):(C * s) X_Eta <- matrix(data = X[in1, ], nrow = length(in1)) %*% Eta[in2,] eps <- rnorm(length(X_Eta), 0, err) - EGamma[in1,] <- softmax(X_Eta + eps) + val <- X_Eta + eps + EGamma[in1,] <- do.call(invlink, list(val)) } EGamma } - -#' @title Simulate LDA_TS data from LDA and TS model structures and parameters -#' -#' @description For a given set of covariates \code{X}; parameters -#' \code{Beta}, \code{Eta}, \code{rho}, and \code{err}; and -#' document-specific time stamps \code{tD} and lengths \code{N}), -#' simulate a document-by-topic matrix. -#' Additional structuring variables (the numbers of topics (k), terms (V), -#' documents (M), segments (S), and covariates per segment (C)) -#' are inferred from input objects. +#' @rdname simulate_data #' -#' @param N A vector of document sizes (total word counts). Must be integer -#' conformable. Is used to infer the total number of documents. -#' -#' @param Beta \code{matrix} of categorical distribution parameters defining -#' terms within topics. Dimension: k x V (number of topics x number of -#' terms). Used to infer both (k) and (V). Must be non-negative and sum to -#' 1 within topics. -#' -#' @param X \code{matrix} of covariates, dimension M (number of documents) x -#' C (number of covariates, including the intercept) (a.k.a the design -#' matrix). -#' -#' @param Eta \code{matrix} of regression parameters across the segments, -#' dimension: SC (number of segments x number of covariates, including the -#' intercept) x k (number of topics). -#' -#' @param rho Vector of integer-conformable time locations of changepoints or -#' \code{NULL} if no changepoints. Used to determine the number of -#' segments. Must exist within the bounds of the times of the documents, -#' \code{tD}. -#' -#' @param tD Vector of integer-conformable times of the documents. Must be -#' of length M (as determined by \code{X}). -#' -#' @param err Additive error on the link-scale. Must be a non-negative -#' \code{numeric} value. Default value of \code{0} indicates no error. -#' -#' @param seed Input to \code{\link{set.seed}}. -#' -#' @return A document-by-term \code{matrix} of counts (dim: M x V). -#' -#' @examples -#' N <- c(10, 22, 15, 31) -#' tD <- c(1, 3, 4, 6) -#' rho <- 3 -#' X <- cbind(rep(1, 4), 1:4) -#' Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) -#' Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) -#' err <- 1 -#' sim_LDA_TS_data(N, Beta, X, Eta, rho, tD, err) -#' #' @export #' -sim_LDA_TS_data <- function(N, Beta, X, Eta, rho, tD, err = 0, seed = NULL){ - EGamma <- sim_TS_data(X, Eta, rho, tD, err, seed) - sim_LDA_data(N, Beta, Theta = EGamma, seed = seed) +simulate_LDA_TS_data <- function(N, Beta, X, Eta, rho, tD, err = 0, + seed = NULL, invlink = softmax){ + EGamma <- simulate_TS_data(X = X, Eta = Eta, rho = rho, tD = tD, err = err, + seed = seed, invlink = invlink) + simulate_LDA_data(N = N, Beta = Beta, Theta = EGamma, seed = seed) } diff --git a/man/LDA.Rd b/man/LDA.Rd index e5249f4d..0e137c0b 100644 --- a/man/LDA.Rd +++ b/man/LDA.Rd @@ -87,8 +87,6 @@ quietly (if \code{FALSE}, a progress bar and notifications are printed).} \item{...}{Not passed along to the output, rather included to allow for automated removal of unneeded controls.} - -\item{selected_LDAs}{\code{list} of selected LDA model \code{list}s.} } \value{ \code{LDA},\code{pacakage_LDA}: class \code{LDA_set} \code{list} of diff --git a/man/LDA_TS.Rd b/man/LDA_TS.Rd index 0abafa0c..0b97e938 100644 --- a/man/LDA_TS.Rd +++ b/man/LDA_TS.Rd @@ -116,6 +116,12 @@ models; \code{LDA_selector} operates on the values to choose the models.} \item{TS_response}{\code{function} used to model the compositional response.} +\item{TS_response_args}{\code{list} of (named) arguments to be used in +\code{TS_response} via \code{\link{do.call}}. +\cr \cr +Could be managed via a \code{_TS_control} function like +\code{\link{multinom_TS_control}}.} + \item{TS_method}{\code{function} used to drive the sampler of the TS models; \code{TS_method} defines and operates the computational procedure. \cr \cr @@ -155,12 +161,6 @@ quietly (if \code{FALSE}, a progress bar and notifications are printed).} \item{...}{Not passed along to the output, rather included to allow for automated removal of unneeded controls.} - -\item{response_args}{\code{list} of (named) arguments to be used in -\code{TS_response} via \code{\link{do.call}}. -\cr \cr -Could be managed via a \code{_TS_control} function like -\code{\link{multinom_TS_control}}.} } \value{ \code{LDA_TS},\code{package_LDA_TS}: class-\code{LDA_TS} \code{list} diff --git a/man/TS.Rd b/man/TS.Rd index f95b8b64..7e318a8b 100644 --- a/man/TS.Rd +++ b/man/TS.Rd @@ -43,6 +43,9 @@ TS_control(model = sequential_TS, model_args = list(control = selector_args = list(NULL), soften = TRUE, quiet = FALSE, ...) } \arguments{ +\item{LDAs}{Class \code{LDA_set} \code{list} of both selected and all +results from \code{\link{LDA}}.} + \item{formulas}{Vector of \code{\link[stats]{formula}}(s) defining the regression between the change points. Any predictor variable included must also be a column in \code{data} and any (compositional) response @@ -83,6 +86,11 @@ Time Series model. Values not input assume defaults set by \item{TS, TSs}{time series model \code{list} (\code{TS}) or a \code{list} of many time series model \code{list}s (\code{TSs}).} +\item{model}{Main Time Series \code{function}.} + +\item{model_args}{\code{list} of (named) arguments to be used in +\code{model} via \code{\link{TS_call}}.} + \item{response}{\code{character} element indicating the response variable used in the time series. \cr \cr Must have a corresponding \code{_TS} function.} @@ -128,8 +136,6 @@ quietly (if \code{FALSE}, a progress bar and notifications are printed).} \item{...}{Not passed along to the output, rather included to allow for automated removal of unneeded controls.} - -\item{selected_TSs}{\code{list} of selected time series model \code{list}s.} } \value{ \code{TS},\code{pacakage_TS}: class \code{TS_set} \code{list} of both @@ -147,7 +153,7 @@ automated removal of unneeded controls.} \code{select_TS}: \code{list} of selected models' \code{list}s. \cr \cr \code{run_TS}: \code{TS_set} \code{list} of model results from all runs of a \code{} function, such as - \code{\link{topicmodels_TS}}. \cr \cr + \code{\link{topicmodels_LDA}}. \cr \cr \code{TS_call}: \code{TS} \code{list} of model results from a single run of a \code{} function, such as \code{\link{sequential_TS}}. \cr \cr diff --git a/man/argument_checking.Rd b/man/argument_checking.Rd index 2f2ed25f..2d2eedec 100644 --- a/man/argument_checking.Rd +++ b/man/argument_checking.Rd @@ -134,6 +134,3 @@ Verify the class, structure, and values of inputted arguments \code{check_nchangepoints} checks that the \code{vector} of numbers of changepoints is conformable to non-negative \code{integers}.\cr \cr } -\details{ - -} diff --git a/man/identity_LDA.Rd b/man/identity_LDA.Rd index d372d25d..7edbe401 100644 --- a/man/identity_LDA.Rd +++ b/man/identity_LDA.Rd @@ -7,7 +7,7 @@ identity_LDA(LDA) } \arguments{ -\item{LDA}{A prepared (via \code{\link{prep_LDA_models}} LDA model +\item{LDA}{A prepared (via \code{\link{prepare_LDA}} LDA model \code{list}.} } \value{ diff --git a/man/ldats_classic.Rd b/man/ldats_classic.Rd index 75fd75aa..e6917f78 100644 --- a/man/ldats_classic.Rd +++ b/man/ldats_classic.Rd @@ -15,6 +15,7 @@ \alias{prep_proposal_dist} \alias{prep_ids} \alias{update_ids} +\alias{step_chains} \alias{propose_step} \alias{eval_step} \alias{take_step} @@ -51,6 +52,8 @@ prep_ids(TS) update_ids(ids, swaps) +step_chains(TS, i, cpts, inputs) + propose_step(TS, i, cpts, inputs) eval_step(i, cpts, prop_step, inputs) diff --git a/man/plot.LDA.Rd b/man/plot.LDA.Rd index 68bdd23f..9a04badf 100644 --- a/man/plot.LDA.Rd +++ b/man/plot.LDA.Rd @@ -68,7 +68,7 @@ larger LDA plot output.} showing the topic proportions for each word and a bottom panel showing the topic proportions of each document/over time. \cr \cr \code{plot.LDA_set} plots either the \code{selected} model results or - all of them from a \code{LDA_set} of \code{LDA} models. + all of them from a \code{LDA_set} of \code{LDA} models. \cr \cr \code{LDA_plot_top_panel} creates an LDATS LDA summary plot top panel showing the topic proportions word-by-word. \cr \cr \code{LDA_plot_bottom_panel} creates an LDATS LDA summary plot diff --git a/man/plot.LDA_TS.Rd b/man/plot.LDA_TS.Rd index 0fa3e8bd..66f1c809 100644 --- a/man/plot.LDA_TS.Rd +++ b/man/plot.LDA_TS.Rd @@ -21,7 +21,7 @@ used, just retained for alignment with \code{plot}.} \item{cols}{\code{list} of elements used to define the colors for the two panels of the summary plot, as generated simply using -\code{\link{set_LDA_TS_plot_cols}}. \code{cols} has two elements: +\code{\link{set_LDA_TS_plot_colors}}. \code{cols} has two elements: \code{LDA} and \code{TS}, each corresponding the set of plots for its stage in the full model. \code{LDA} contains entries \code{cols} and \code{option} (see \code{\link{set_LDA_plot_colors}}). \code{TS} diff --git a/man/plot.TS.Rd b/man/plot.TS.Rd index c0a451ca..390397f5 100644 --- a/man/plot.TS.Rd +++ b/man/plot.TS.Rd @@ -115,6 +115,9 @@ distribution, indexed to the iteration by the order of the vector.} \item{xlab}{\code{character} value used to label the x axis.} +\item{together}{\code{logical} indicating if the subplots are part of a +larger plot output.} + \item{spec_rhos}{\code{numeric} vector indicating the locations along the x axis where the specific change points being used are located.} diff --git a/man/sequential_TS.Rd b/man/sequential_TS.Rd index d3f3d00c..ad676350 100644 --- a/man/sequential_TS.Rd +++ b/man/sequential_TS.Rd @@ -76,11 +76,7 @@ sampler (rows), as returned from \code{\link{est_regressors}}.} \item{rhos}{\code{matrix} of change point locations (columns) across iterations of the sampler (rows) or \code{NULL} if no change points are -in the model, as returned from \code{\link{est_change points}}.} - -\item{response}{\code{character} element indicating the response variable -used in the time series. \cr \cr -Must have a corresponding \code{_TS} function.} +in the model, as returned from \code{\link{est_changepoints}}.} } \value{ \code{sequential_TS} and \code{package_sequential_TS}: @@ -94,7 +90,7 @@ Must have a corresponding \code{_TS} function.} \item{timename}{\code{timename} input to the function.} \item{control}{\code{control} input to the function.} \item{lls}{Iteration-by-iteration - \link[=logLik.multinom_TS_fit]{logLik} values for the + \link[=logLik.TS_fit]{logLik} values for the full time series fit by \code{\link{multinom_TS}}.} \item{rhos}{Iteration-by-iteration change point estimates from \code{\link{est_changepoints}} and diagnostics.} @@ -133,7 +129,7 @@ Must have a corresponding \code{_TS} function.} each regressor. \cr \cr \code{measure_eta_vcov}: variance-covariance matrix for chunk-level regressors. \cr \cr - \code{summarize_rhos}: table of summary statistics for change point + \code{summarize_rhos}: table of summary statistics for change point locations including mean, median, mode, posterior interval, standard deviation, MCMC error, autocorrelation, and effective sample size for each change point location. \cr \cr diff --git a/man/sim_LDA_TS_data.Rd b/man/sim_LDA_TS_data.Rd deleted file mode 100644 index 1e60330a..00000000 --- a/man/sim_LDA_TS_data.Rd +++ /dev/null @@ -1,61 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/simulate.R -\name{sim_LDA_TS_data} -\alias{sim_LDA_TS_data} -\title{Simulate LDA_TS data from LDA and TS model structures and parameters} -\usage{ -sim_LDA_TS_data(N, Beta, X, Eta, rho, tD, err = 0, seed = NULL) -} -\arguments{ -\item{N}{A vector of document sizes (total word counts). Must be integer -conformable. Is used to infer the total number of documents.} - -\item{Beta}{\code{matrix} of categorical distribution parameters defining -terms within topics. Dimension: k x V (number of topics x number of -terms). Used to infer both (k) and (V). Must be non-negative and sum to -1 within topics.} - -\item{X}{\code{matrix} of covariates, dimension M (number of documents) x -C (number of covariates, including the intercept) (a.k.a the design -matrix).} - -\item{Eta}{\code{matrix} of regression parameters across the segments, -dimension: SC (number of segments x number of covariates, including the -intercept) x k (number of topics).} - -\item{rho}{Vector of integer-conformable time locations of changepoints or -\code{NULL} if no changepoints. Used to determine the number of -segments. Must exist within the bounds of the times of the documents, -\code{tD}.} - -\item{tD}{Vector of integer-conformable times of the documents. Must be -of length M (as determined by \code{X}).} - -\item{err}{Additive error on the link-scale. Must be a non-negative -\code{numeric} value. Default value of \code{0} indicates no error.} - -\item{seed}{Input to \code{\link{set.seed}}.} -} -\value{ -A document-by-term \code{matrix} of counts (dim: M x V). -} -\description{ -For a given set of covariates \code{X}; parameters - \code{Beta}, \code{Eta}, \code{rho}, and \code{err}; and - document-specific time stamps \code{tD} and lengths \code{N}), - simulate a document-by-topic matrix. - Additional structuring variables (the numbers of topics (k), terms (V), - documents (M), segments (S), and covariates per segment (C)) - are inferred from input objects. -} -\examples{ - N <- c(10, 22, 15, 31) - tD <- c(1, 3, 4, 6) - rho <- 3 - X <- cbind(rep(1, 4), 1:4) - Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) - Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - err <- 1 - sim_LDA_TS_data(N, Beta, X, Eta, rho, tD, err) - -} diff --git a/man/sim_LDA_data.Rd b/man/sim_LDA_data.Rd deleted file mode 100644 index 23133448..00000000 --- a/man/sim_LDA_data.Rd +++ /dev/null @@ -1,47 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/simulate.R -\name{sim_LDA_data} -\alias{sim_LDA_data} -\title{Simulate LDA data from an LDA structure given parameters} -\usage{ -sim_LDA_data(N, Beta, alpha = NULL, Theta = NULL, seed = NULL) -} -\arguments{ -\item{N}{A vector of document sizes (total word counts). Must be integer -conformable. Is used to infer the total number of documents.} - -\item{Beta}{\code{matrix} of categorical distribution parameters defining -terms within topics. Dimension: k x V (number of topics x number of -terms). Used to infer both (k) and (V). Must be non-negative and sum to -1 within topics.} - -\item{alpha}{Single positive numeric value for the Dirichlet distribution -parameter defining topics within documents. To specifically define -document topic probabilities, use \code{Theta}.} - -\item{Theta}{\code{matrix} of probabilities defining topics within -documents. Dimension: M x k (documents x topics). Must be non-negative -and sum to 1 within documents. To generally define document topic -probabilities, use \code{alpha}.} - -\item{seed}{Input to \code{\link{set.seed}}.} -} -\value{ -A document-by-term \code{matrix} of counts (dim: M x V). -} -\description{ -For a given set of parameters \code{alpha} and \code{Beta} and - document-specific total word counts, simulate a document-by-term matrix. - Additional structuring variables (the numbers of topics (k), - documents (M), terms (V)) are inferred from input objects. -} -\examples{ - N <- c(10, 22, 15, 31) - alpha <- 1.2 - Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - sim_LDA_data(N, Beta, alpha = alpha) - Theta <- matrix(c(0.2, 0.8, 0.8, 0.2, 0.5, 0.5, 0.9, 0.1), 4, 2, - byrow = TRUE) - sim_LDA_data(N, Beta, Theta = Theta) - -} diff --git a/man/sim_TS_data.Rd b/man/sim_TS_data.Rd deleted file mode 100644 index f1f8fd45..00000000 --- a/man/sim_TS_data.Rd +++ /dev/null @@ -1,48 +0,0 @@ -% Generated by roxygen2: do not edit by hand -% Please edit documentation in R/simulate.R -\name{sim_TS_data} -\alias{sim_TS_data} -\title{Simulate TS data from a TS model structure given parameters} -\usage{ -sim_TS_data(X, Eta, rho, tD, err = 0, seed = NULL) -} -\arguments{ -\item{X}{\code{matrix} of covariates, dimension M (number of documents) x -C (number of covariates, including the intercept) (a.k.a. the design -matrix).} - -\item{Eta}{\code{matrix} of regression parameters across the segments, -dimension: SC (number of segments x number of covariates, including the -intercept) x k (number of topics).} - -\item{rho}{Vector of integer-conformable time locations of changepoints or -\code{NULL} if no changepoints. Used to determine the number of -segments. Must exist within the bounds of the times of the documents, -\code{tD}.} - -\item{tD}{Vector of integer-conformable times of the documents. Must be -of length M (as determined by \code{X}).} - -\item{err}{Additive error on the link-scale. Must be a non-negative -\code{numeric} value. Default value of \code{0} indicates no error.} - -\item{seed}{Input to \code{\link{set.seed}}.} -} -\value{ -A document-by-topic \code{matrix} of probabilities (dim: M x k). -} -\description{ -For a given set of covariates \code{X}; parameters \code{Eta}, - \code{rho}, and \code{err}; and document-specific time stamps \code{tD}, - simulate a document-by-topic matrix. Additional structuring variables - (numbers of topics (k), documents (M), segments (S), and - covariates per segment (C)) are inferred from input objects. -} -\examples{ - tD <- c(1, 3, 4, 6) - rho <- 3 - X <- cbind(rep(1, 4), 1:4) - Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) - sim_TS_data(X, Eta, rho, tD, err = 1) - -} diff --git a/man/simulate_data.Rd b/man/simulate_data.Rd new file mode 100644 index 00000000..191b25d0 --- /dev/null +++ b/man/simulate_data.Rd @@ -0,0 +1,90 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/simulate.R +\name{simulate_data} +\alias{simulate_data} +\alias{simulate_LDA_data} +\alias{simulate_TS_data} +\alias{simulate_LDA_TS_data} +\title{Simulate LDA_TS data from LDA and TS model structures and parameters} +\usage{ +simulate_LDA_data(N, Beta, alpha = NULL, Theta = NULL, seed = NULL) + +simulate_TS_data(X, Eta, rho, tD, err = 0, seed = NULL, + invlink = softmax) + +simulate_LDA_TS_data(N, Beta, X, Eta, rho, tD, err = 0, seed = NULL, + invlink = softmax) +} +\arguments{ +\item{N}{A vector of document sizes (total word counts). Must be integer +conformable. Is used to infer the total number of documents.} + +\item{Beta}{\code{matrix} of categorical distribution parameters defining +terms within topics. Dimension: k x V (number of topics x number of +terms). Used to infer both (k) and (V). Must be non-negative and sum to +1 within topics.} + +\item{alpha}{Single positive numeric value for the Dirichlet distribution +parameter defining topics within documents. To specifically define +document topic probabilities, use \code{Theta}.} + +\item{Theta}{\code{matrix} of probabilities defining topics within +documents. Dimension: M x k (documents x topics). Must be non-negative +and sum to 1 within documents. To generally define document topic +probabilities, use \code{alpha}.} + +\item{seed}{Input to \code{\link{set.seed}}.} + +\item{X}{\code{matrix} of covariates, dimension M (number of documents) x +C (number of covariates, including the intercept) (a.k.a the design +matrix).} + +\item{Eta}{\code{matrix} of regression parameters across the segments, +dimension: SC (number of segments x number of covariates, including the +intercept) x k (number of topics).} + +\item{rho}{Vector of integer-conformable time locations of changepoints or +\code{NULL} if no changepoints. Used to determine the number of +segments. Must exist within the bounds of the times of the documents, +\code{tD}.} + +\item{tD}{Vector of integer-conformable times of the documents. Must be +of length M (as determined by \code{X}).} + +\item{err}{Additive error on the link-scale. Must be a non-negative +\code{numeric} value. Default value of \code{0} indicates no error.} + +\item{invlink}{\code{function} name for the inverse link function. +Currently available are \code{\link{softmax}} and the inverses of +the ILR, ALR, and CLR transforms (\code{\link[compositions]{ilrInv}}, +\code{\link[compositions]{alrInv}}, and +\code{\link[compositions]{clrInv}}).} +} +\value{ +\code{simulate_LDA}: A document-by-term \code{matrix} of counts + (dim: M x V). \cr \cr + \code{simulate_TS}: document-by-topic \code{matrix} of + proportions (dim: M x k). \cr \cr + \code{simulate_LDA_TS}: A document-by-term \code{matrix} of counts + (dim: M x V). +} +\description{ +\code{simulate_LDA_data} for a given set of parameters \code{alpha} and + \code{Beta} and document-specific total word counts, simulate a + document-by-term matrix. \cr + Additional structuring variables (the numbers of topics (k), + documents (M), terms (V)) are inferred from input objects. \cr \cr + \code{simulate_TS_data} for a given set of covariates \code{X}; + parameters \code{Eta}, \code{rho}, and \code{err}; and + document-specific time stamps \code{tD}, simulate a document-by-topic + matrix. Additional structuring variables (numbers of topics (k), + documents (M), segments (S), and covariates per segment (C)) are + inferred from input objects. + \code{simulate_LDA_TS_data} for a given set of covariates \code{X}; + parameters \code{Beta}, \code{Eta}, \code{rho}, and \code{err}; and + document-specific time stamps \code{tD} and lengths \code{N}), + simulate a document-by-topic matrix. \cr + Additional structuring variables (the numbers of topics (k), terms (V), + documents (M), segments (S), and covariates per segment (C)) + are inferred from input objects. +} diff --git a/man/topicmodels_LDA.Rd b/man/topicmodels_LDA.Rd index 5d6c92ee..36018a64 100644 --- a/man/topicmodels_LDA.Rd +++ b/man/topicmodels_LDA.Rd @@ -8,18 +8,17 @@ topicmodels_LDA(LDA, method = "VEM", seeded = TRUE, ...) } \arguments{ -\item{LDA}{A prepared (via \code{\link{prep_LDA_models}} LDA model +\item{LDA}{A prepared (via \code{\link{prepare_LDA}} LDA model \code{list}.} -\item{method}{Fitting routine used in -\code{\link[topicmodels]{topicmodels::LDA}}. Currenlty, only -\code{"VEM"} and \code{"Gibbs"} are supported.} +\item{method}{Fitting routine used in \code{\link[topicmodels]{LDA}}. +Currenlty, only \code{"VEM"} and \code{"Gibbs"} are supported.} \item{seeded}{\code{logical} indicator of if the LDA should be a seeded replicate.} \item{...}{Additional arguments to be passed to -\code{\link[topicmodels]{topicmodels::LDA}} as a \code{control} input.} +\code{\link[topicmodels]{LDA}} as a \code{control} input.} } \value{ \code{LDA} \code{list} with components @@ -41,11 +40,10 @@ replicate.} } \description{ Fit the standard LDATS LDA model (a true Latent Dirichlet - Allocation) using \code{\link[topicmodels]{topicmodels::LDA}} - (Grun and Hornik 2011). \cr - Default methodology is the Variational - Expectation Maximization routine (VEM) as described by - Blei \emph{et al.} (2003) and implemented by Grun and Hornik (2011). \cr + Allocation) using \code{\link[topicmodels]{LDA}} (Grun and Hornik 2011). + Default methodology is the Variational Expectation Maximization routine + (VEM) as described by Blei \emph{et al.} (2003) and implemented by + Grun and Hornik (2011). \cr \cr If the model is defined to only fit one topic, \code{\link{identity_LDA}} is used by default. } diff --git a/notes.R b/notes.R index a0ceb868..ebd30a51 100644 --- a/notes.R +++ b/notes.R @@ -1,58 +1,29 @@ -plotting functions - -generalize pred_gamma_TS_plot -simulate - -just generalize TS predict -tidying check functions -tempering +tidying check functions and general usage examples tests - what is up with lda_ts_controls... - ...oh thats how its always been because of the splitting? - + ...oh is that how its always been because of the splitting? +tempering +vignettes devtools::load_all() data(rodents) -data <- rodents -topics = 1:2 -replicates = c(2,5) -formulas = ~ 1 -nchangepoints = 1 -timename = "newmoon" -weights = TRUE -control = -LDAs <- LDA(data = data, topics = topics, replicates = replicates, - control = list()) -control$TS_control$method_args$control$nit <- 100 -TSs <- TS(LDAs = LDAs, formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = -list(method_args = list(control = ldats_classic_control(nit = 100)))) - - -LDATSs <- LDA_TS(data = data, topics = topics, replicates = replicates, - formulas = formulas, - nchangepoints = nchangepoints, timename = timename, - weights = weights, control = list(TS_method_args = - list(control = ldats_classic_control(nit=100)))) +LDAs <- LDA(data = rodents, topics = 1:2, replicates = c(1, 4)) +TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 1, + timename = "newmoon", weights = TRUE, + control = list(method_args = + list(control = ldats_classic_control(nit = 100)))) +LDATSs <- LDA_TS(data = rodents, topics = 1:2, replicates = c(1, 4), + formulas = ~ 1, nchangepoints = 1, timename = "newmoon", + weights = TRUE, + control = list(TS_method_args = + list(control = ldats_classic_control(nit = 100)))) plot(LDAs) plot(TSs) +plot(TSs, plot_type="diagnostic") plot(LDATSs) -names(LDATSs) - -cc<-TS_control(method_args = list(control = ldats_classic_control(nit = 100))) -$method_args$control$nit - -cc<-LDA_TS_control(TS_method_args = - list(control = ldats_classic_control(nit = 100))) - -names(cc) -names(formals(TS_control)) - -$TS_control$method_args$control$nit - not sure if needed: diff --git a/vignettes/LDATS_codebase.Rmd b/vignettes/LDATS_codebase.Rmd index 5b774664..3d3e1634 100644 --- a/vignettes/LDATS_codebase.Rmd +++ b/vignettes/LDATS_codebase.Rmd @@ -53,8 +53,37 @@ LDA_TS TS$control$model with TS$control$model_args sequential_TS_control est_changepoints + TS$control$method with TS$control$method_args + ldats_classic_control + prep_saves + prep_ptMCMC_inputs + prep_temp_sequence + prep_proposal_dist + prep_cpts + prep_temp_sequence + TS$control$response with TS$control$response_args + prep_ids + prep_pbar + update_pbar + step_chains + propose_step + proposed_step_mods + TS$control$response with TS$control$response_args + eval_step + accept_step + swap_chains + update_saves + update_cpts + update_ids + process_saves + count_trips est_regressors + TS$control$response with TS$control$response_args package_sequential_TS + summarize_rhos + measure_rho_vcov + summarize_eta + measure_eta_vcov package_TS select_TS TS$control$selector with TS$control$selector_args From ab3a3a8b99677252380deef7b4b878995316ec56 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 14:36:34 -0700 Subject: [PATCH 33/43] rodents example vignette --- DESCRIPTION | 9 +- NAMESPACE | 1 - R/LDA.R | 18 +- R/LDATS.R | 1 - R/TS.R | 4 +- R/TS_models.R | 2 +- doc/rodents-example.R | 96 +-- doc/rodents-example.Rmd | 137 ++-- doc/rodents-example.html | 111 ++- notes.R | 5 +- vignettes/LDATS_codebase.Rmd | 208 ------ vignettes/paper-comparison.Rmd | 649 ------------------ .../changepoint_models.Rds | Bin 459100 -> 0 bytes .../rodents-example-files/lda_model_set.Rds | Bin 797394 -> 0 bytes .../rodents-example-files/lda_ts_results.Rds | Bin 1421288 -> 0 bytes vignettes/rodents-example.Rmd | 137 ++-- 16 files changed, 282 insertions(+), 1096 deletions(-) delete mode 100644 vignettes/LDATS_codebase.Rmd delete mode 100644 vignettes/paper-comparison.Rmd delete mode 100644 vignettes/rodents-example-files/changepoint_models.Rds delete mode 100644 vignettes/rodents-example-files/lda_model_set.Rds delete mode 100644 vignettes/rodents-example-files/lda_ts_results.Rds diff --git a/DESCRIPTION b/DESCRIPTION index ed7a4878..634fc688 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -38,20 +38,16 @@ Imports: coda, compositions, digest, - dplyr, extraDistr, graphics, grDevices, - here, lubridate, - magrittr, mcmc, memoise, methods, mvtnorm, nnet, progress, - reshape, stats, topicmodels, viridis @@ -60,10 +56,7 @@ Suggests: pkgdown, rmarkdown, testthat, - vdiffr, - clue, - RCurl, - tidyr + vdiffr VignetteBuilder: knitr RoxygenNote: 6.1.1 diff --git a/NAMESPACE b/NAMESPACE index 406c147b..771ec713 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -154,7 +154,6 @@ importFrom(graphics,points) importFrom(graphics,rect) importFrom(graphics,text) importFrom(lubridate,is.Date) -importFrom(magrittr,"%>%") importFrom(mcmc,temper) importFrom(memoise,memoise) importFrom(methods,is) diff --git a/R/LDA.R b/R/LDA.R index 8c7dfe8c..df5975ac 100644 --- a/R/LDA.R +++ b/R/LDA.R @@ -163,7 +163,7 @@ prepare_LDA <- function(data, topics = 2, replicates = 1, control = list()){ data <- conform_data(data = data, control = control) subsets <- names(data) if(length(replicates) < length(topics)){ - reps <- rep(replicates, length(topics)) + replicates <- rep(replicates, length(topics)) } LDA_topics <- rep(topics, replicates) LDA_reps <- sequence(replicates) @@ -172,14 +172,20 @@ prepare_LDA <- function(data, topics = 2, replicates = 1, control = list()){ LDA_topics <- rep(LDA_topics, length(subsets)) nLDA <- length(LDA_topics) LDAs <- vector("list", length = nLDA) + topicword <- rep(NA, nLDA) for(i in 1:nLDA){ - LDAs[[i]] <- list(data = data[[LDA_subsets[[i]]]], - data_subset = LDA_subsets[[i]], - topics = LDA_topics[[i]], - replicate = LDA_reps[[i]], + LDAs[[i]] <- list(data = data[[LDA_subsets[i]]], + data_subset = LDA_subsets[i], + topics = LDA_topics[i], + replicate = LDA_reps[i], control = control) + topicword[i] <- ifelse(LDA_topics[i] == 1, "topic", "topics") } - names(LDAs) <- paste0("model_", 1:nLDA) + name_tab <- data.frame(paste("data subset", LDA_subsets), + paste(",", LDA_topics, topicword), + paste(", replicate", LDA_reps)) + names(LDAs) <- apply(name_tab, 1, paste0, collapse = "") + LDAs } diff --git a/R/LDATS.R b/R/LDATS.R index 249465d1..49cba36e 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -5,7 +5,6 @@ #' @importFrom graphics abline axis hist mtext par plot points rect text #' @importFrom grDevices devAskNewPage rgb #' @importFrom lubridate is.Date -#' @importFrom magrittr %>% #' @importFrom mcmc temper #' @importFrom memoise memoise #' @importFrom methods is diff --git a/R/TS.R b/R/TS.R index 0e410fb1..03615ec7 100644 --- a/R/TS.R +++ b/R/TS.R @@ -298,8 +298,8 @@ prepare_TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, formulas <- formulas2 nmods <- length(LDAs[[1]]) mods <- 1:nmods - tab <- expand.grid(mods, formulas, nchangepoints, stringsAsFactors = FALSE) - colnames(tab) <- c("LDA", "formula", "nchangepoints") + tab <- expand.grid(LDA = mods, formulas = formulas, + nchangepoints = nchangepoints, stringsAsFactors = FALSE) nTSs <- NROW(tab) TSs <- vector("list", length = nTSs) diff --git a/R/TS_models.R b/R/TS_models.R index 495b38a9..8f057f17 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -255,7 +255,7 @@ est_regressors <- function(rho_dist, TS){ mod <- mod[[1]][[1]] mv <- as.vector(t(coef(mod))) vcv <- mirror_vcov(mod) - eta <- rmvnorm(TS$control$method_args$nit, mv, vcv) + eta <- rmvnorm(TS$control$method_args$control$nit, mv, vcv) seg_names <- rep(1, ncol(vcv)) coef_names <- colnames(vcv) colnames(eta) <- paste(seg_names, coef_names, sep = "_") diff --git a/doc/rodents-example.R b/doc/rodents-example.R index 46f0fdbf..48f98d62 100644 --- a/doc/rodents-example.R +++ b/doc/rodents-example.R @@ -9,64 +9,74 @@ library(LDATS) vers <- packageVersion("LDATS") today <- Sys.Date() -## ---- eval=FALSE--------------------------------------------------------- +## ----download files, include = FALSE------------------------------------- + vignette_files <- tempdir() + dir.create(file.path(vignette_files, "output"), showWarnings = FALSE) + github_path <- "https://github.com/weecology/LDATS-replications/raw/master/output/" + files_to_download <- c("rodents_example_lda_model_set.RDS", "rodents_example_ts_model_set.RDS", + "rodents_example_lda_ts_model_set.RDS") + + for (file in files_to_download) { + download.file(url = paste0(github_path, file), + destfile = file.path(vignette_files, "output", file), + mode = "wb") + } + +## ---- eval = FALSE------------------------------------------------------- # install.packages("devtools") # devtools::install_github("weecology/LDATS") -# library(LDATS) ## ------------------------------------------------------------------------ data(rodents) head(rodents$document_term_table, 10) head(rodents$document_covariate_table, 10) -## ----lda_set, eval =F---------------------------------------------------- -# lda_model_set <- LDA_set(document_term_table = rodents$document_term_table, -# topics = c(2:5), -# nseeds = 10, -# control = list(quiet = TRUE)) -# +## ----lda_set, eval = FALSE----------------------------------------------- +# lda_model_set <- LDA(data = rodents, topics = 2:5, replicates = 10, +# control = list(quiet = TRUE)) -## ----lda set not quiet, eval =F------------------------------------------ -# lda_model_set2 <- LDA_set(document_term_table = rodents$document_term_table, -# topics = c(2:3), -# nseeds = 2) +## ----save lda model set, include = FALSE, eval = FALSE------------------- +# saveRDS(lda_model_set, file.path(vignette_files, "output", "rodents_example_lda_model_set.RDS")) -## ----load lda model set, include = F------------------------------------- -load(here::here('vignettes', 'rodents-example-files', 'lda_model_set.Rds')) +## ----lda set not quiet, eval = FALSE------------------------------------- +# lda_model_set2 <- LDA(data = rodents, topics = c(2:3), replicates = 2) + +## ----load lda model set, include = FALSE--------------------------------- +lda_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_model_set.Rds")) rm(lda_model_set2) ## ----select LDA---------------------------------------------------------- -selected_lda_model <- select_LDA(lda_model_set) +selected_lda_model <- select_LDA(lda_model_set$LDAs)[[1]] ## ----LDA results--------------------------------------------------------- # Number of topics: -selected_lda_model[[1]]@k +selected_lda_model$topics # Topic composition of communities at each time step # Columns are topics; rows are time steps -head(selected_lda_model[[1]]@gamma) - +head(selected_lda_model$document_topic_table) -## ----plot lda, fig.width=7, fig.height=6--------------------------------- -plot(selected_lda_model[[1]]) +## ----plot lda, fig.width = 7, fig.height = 6----------------------------- +plot(selected_lda_model) +## ----ts set, eval = FALSE------------------------------------------------ +# ts_model_set <- TS(LDAs = lda_model_set, +# formulas = ~ sin_year + cos_year, +# nchangepoints = 0:1, +# timename = "newmoon", +# weights = TRUE, +# control = list(method_args = +# list(control = ldats_classic_control(nit = 1000)))) -## ----ts on lda, eval = F------------------------------------------------- -# changepoint_models <- TS_on_LDA(LDA_models = selected_lda_model, -# document_covariate_table = rodents$document_covariate_table, -# formulas = ~ sin_year + cos_year, -# nchangepoints = c(0:1), -# timename = "newmoon", -# weights = document_weights(rodents$document_term_table), -# control = list(nit = 1000)) -# +## ----save ts model set, include = FALSE, eval = FALSE-------------------- +# saveRDS(ts_model_set, file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) -## ----reload ts, include = F---------------------------------------------- -load(here::here('vignettes', 'rodents-example-files', 'changepoint_models.Rds')) +## ----load ts model set, include = FALSE---------------------------------- +ts_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) ## ----select ts----------------------------------------------------------- -selected_changepoint_model <- select_TS(changepoint_models) +selected_changepoint_model <- select_TS(ts_model_set$TSs)[[1]] ## ----cpt results--------------------------------------------------------- # Number of changepoints @@ -77,35 +87,39 @@ selected_changepoint_model$rho_summary # Raw estimates for timesteps for each changepoint # Changepoints are columns -head(selected_changepoint_model$rhos) +head(selected_changepoint_model$focal_rhos) ## ----plot cpt, fig.width=7, fig.height=6--------------------------------- plot(selected_changepoint_model) -## ----lda_ts, eval = F---------------------------------------------------- +## ----lda_ts, eval = FALSE------------------------------------------------ # lda_ts_results <- LDA_TS(data = rodents, -# nseeds = 10, +# replicates = 10, # topics = 2:5, # formulas = ~ sin_year + cos_year, # nchangepoints= 0:1, # timename = "newmoon", -# control = list(nit = 1000)) +# control = list(TS_method_args = +# list(control = ldats_classic_control(nit = 1000)))) + +## ----save lda ts model set, include = FALSE, eval = FALSE---------------- +# saveRDS(lda_ts_results, file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) -## ----load ldats results, include = F------------------------------------- -load(here::here('vignettes', 'rodents-example-files', 'lda_ts_results.Rds')) +## ----load lda ts model set, include = FALSE------------------------------ +lda_ts_results <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) ## ----LDA_TS results------------------------------------------------------ names(lda_ts_results) # Number of topics -lda_ts_results$`Selected LDA model`$k@k +lda_ts_results$"LDA models"$selected_LDAs[[1]]$topics # Number of changepoints -lda_ts_results$`Selected TS model`$nchangepoints +lda_ts_results$"TS models"$selected_TSs[[1]]$nchangepoints # Summary of changepoint locations -lda_ts_results$`Selected TS model`$rho_summary +lda_ts_results$"TS models"$selected_TSs[[1]]$rho_summary ## ----plot LDA_TS results, fig.height = 16, fig.width = 7, echo = F------- plot(lda_ts_results) diff --git a/doc/rodents-example.Rmd b/doc/rodents-example.Rmd index ef390a6d..fa046ca9 100644 --- a/doc/rodents-example.Rmd +++ b/doc/rodents-example.Rmd @@ -21,26 +21,35 @@ vers <- packageVersion("LDATS") today <- Sys.Date() ``` -This vignette walks through an example of **`LDATS`** at the command line and -was constructed using **`LDATS`** version `r vers` on `r today`. +```{r download files, include = FALSE} + vignette_files <- tempdir() + dir.create(file.path(vignette_files, "output"), showWarnings = FALSE) + github_path <- "https://github.com/weecology/LDATS-replications/raw/master/output/" + files_to_download <- c("rodents_example_lda_model_set.RDS", "rodents_example_ts_model_set.RDS", + "rodents_example_lda_ts_model_set.RDS") + + for (file in files_to_download) { + download.file(url = paste0(github_path, file), + destfile = file.path(vignette_files, "output", file), + mode = "wb") + } +``` + +This vignette walks through an example of **`LDATS`** at the command line and was constructed using **`LDATS`** version `r vers` on `r today`. ## Installation -To obtain the most recent version of **LDATS**, install and load the most recent -version from GitHub: +To obtain the most recent version of **LDATS**, install and load the most recent version from GitHub: -```{r, eval=FALSE} +```{r, eval = FALSE} install.packages("devtools") devtools::install_github("weecology/LDATS") -library(LDATS) ``` ## Data -For this vignette, we will be using rodent data from the control plots of the -[Portal Project](https://github.com/weecology/portaldata), which come with -the **LDATS** package (`data(rodents)`). +For this vignette, we will be using rodent data from the control plots of the [Portal Project](https://github.com/weecology/portaldata), which come with the **LDATS** package (`data(rodents)`). `rodents` contains two data tables, a `document_term_table` and a `document_covariate_table`. @@ -57,36 +66,36 @@ head(rodents$document_covariate_table, 10) ## Stage 1: LDA models -We use `LDA_set()` to run replicate LDA models (each with its own seed) with varying numbers of topics (`2:5`) and `select_LDA()` to select the best model. +We use `LDA()` to run replicate LDA models (each with its own seed) with varying numbers of topics (`2:5`), which includes a run of `select_LDA()` to select the best model(s). We use the `control` argument to pass controls to the LDA function via a `list`. In this case, we can set `quiet = TRUE` to make the model run quietly. -```{r lda_set, eval =F} -lda_model_set <- LDA_set(document_term_table = rodents$document_term_table, - topics = c(2:5), - nseeds = 10, - control = list(quiet = TRUE)) - +```{r lda_set, eval = FALSE} +lda_model_set <- LDA(data = rodents, topics = 2:5, replicates = 10, + control = list(quiet = TRUE)) ``` +```{r save lda model set, include = FALSE, eval = FALSE} +saveRDS(lda_model_set, file.path(vignette_files, "output", "rodents_example_lda_model_set.RDS")) +``` If we do not pass any controls, by default, `quiet = FALSE` (here run with only `2:3` topics and `2` seeds, to keep output short): -```{r lda set not quiet, eval =F} -lda_model_set2 <- LDA_set(document_term_table = rodents$document_term_table, - topics = c(2:3), - nseeds = 2) +```{r lda set not quiet, eval = FALSE} +lda_model_set2 <- LDA(data = rodents, topics = c(2:3), replicates = 2) ``` -`LDA_set()` returns a list of LDA models. We use `select_LDA()` to identify the best number of topics and choice of seed from our set of models. By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing `list(measurer = [measurer function], selector = [max, min, etc])` to the `control` argument. +By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing `list(measurer = [measurer function], selector = [max, min, etc])` to the `control` argument. + + -```{r load lda model set, include = F} -load(here::here('vignettes', 'rodents-example-files', 'lda_model_set.Rds')) +```{r load lda model set, include = FALSE} +lda_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_model_set.Rds")) rm(lda_model_set2) ``` ```{r select LDA} -selected_lda_model <- select_LDA(lda_model_set) +selected_lda_model <- select_LDA(lda_model_set$LDAs)[[1]] ``` @@ -95,53 +104,58 @@ We can access the results of the model: ```{r LDA results} # Number of topics: -selected_lda_model[[1]]@k +selected_lda_model$topics # Topic composition of communities at each time step # Columns are topics; rows are time steps -head(selected_lda_model[[1]]@gamma) - +head(selected_lda_model$document_topic_table) ``` -`LDATS` includes flexible plot functionality for LDAs and time series. The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. For all the available plot options see `?plot.LDA_VEM`. - -```{r plot lda, fig.width=7, fig.height=6} -plot(selected_lda_model[[1]]) +`LDATS` includes flexible plot functionality for LDAs and time series. +The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. +For all the available plot options see `?plot.LDA`. +```{r plot lda, fig.width = 7, fig.height = 6} +plot(selected_lda_model) ``` ## Stage 2: TS changepoint models -We use `TS_on_LDA()` to run LDATS changepoint models with `0:6` changepoints, and then use `select_TS()` to find the best-fit model of these. - -Here, `TS_on_LDA()` predicts the `gamma` (the proportion of the community made of up each topic) from our LDA model(s) as a function of `sin_year` and `cos_year` in the `document_covariate_table`. We use `document_weights()` to weight the information from each time step according to the total number of rodents captured at that time step. +We use `TS` to run LDATS changepoint models with `0:6` changepoints, which includes a call to `select_TS()` to find the best-fit model(s) of these. +Here, `TS()` predicts the `gamma` (the proportion of the community made of up each topic) from our LDA model(s) as a function of `sin_year` and `cos_year` in the `document_covariate_table`. +We use `document_weights()` to weight the information from each time step according to the total number of rodents captured at that time step. -```{r ts on lda, eval = F} -changepoint_models <- TS_on_LDA(LDA_models = selected_lda_model, - document_covariate_table = rodents$document_covariate_table, - formulas = ~ sin_year + cos_year, - nchangepoints = c(0:1), - timename = "newmoon", - weights = document_weights(rodents$document_term_table), - control = list(nit = 1000)) +```{r ts set, eval = FALSE} +ts_model_set <- TS(LDAs = lda_model_set, + formulas = ~ sin_year + cos_year, + nchangepoints = 0:1, + timename = "newmoon", + weights = TRUE, + control = list(method_args = + list(control = ldats_classic_control(nit = 1000)))) +``` +```{r save ts model set, include = FALSE, eval = FALSE} +saveRDS(ts_model_set, file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) ``` +We can adjust options (default settings can be seen using `TS_control()`) for both TS functions by passing a list to the `control` argument. +For a full list see `?TS_control`. Here we illustrate adjusting the number of ptMCMC iterations - the default is 10000, but it is convenient to use fewer iterations for code development. -We can adjust options (default settings can be seen using `TS_control()`) for both TS functions by passing a list to the `control` argument. For a full list see `?TS_control`. Here we illustrate adjusting the number of ptMCMC iterations - the default is 10000, but it is convenient to use fewer iterations for code development. - -Also, it is important to note that by default the TS functions take the name of the time-step column from the `document_covariate_table` to be `"time"`. To pass a different column name, use the `timename` argument in `TS_on_LDA()`. +Also, it is important to note that by default the TS functions take the name of the time-step column from the `document_covariate_table` to be `"time"`. +To pass a different column name, use the `timename` argument in `TS()`. -`select_TS()` will identify the best-fit changepoint model of the models from `TS_on_LDA()`. As with `select_LDA()`, we can adjust the `measurer` and `selector` functions using the `control` argument list. +`select_TS()` will identify the best-fit changepoint model of the models from `TS_on_LDA()`. +As with `select_LDA()`, we can adjust the `measurer` and `selector` functions using the `control` argument list. -```{r reload ts, include = F} -load(here::here('vignettes', 'rodents-example-files', 'changepoint_models.Rds')) +```{r load ts model set, include = FALSE} +ts_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) ``` ```{r select ts} -selected_changepoint_model <- select_TS(changepoint_models) +selected_changepoint_model <- select_TS(ts_model_set$TSs)[[1]] ``` We can access the results of the selected changepoint model: @@ -155,7 +169,7 @@ selected_changepoint_model$rho_summary # Raw estimates for timesteps for each changepoint # Changepoints are columns -head(selected_changepoint_model$rhos) +head(selected_changepoint_model$focal_rhos) ``` @@ -167,20 +181,25 @@ plot(selected_changepoint_model) ## Full analysis with `LDA_TS` -Finally, we can perform an entire LDATS analysis, including all of the above steps, using the `LDA_TS()` function and passing options to the LDA and TS functions as a `list` to the `control` argument. The default is for `LDA_TS` to weight the time series model based on the document sizes, so we do not need to tell it to do so. +Finally, we can perform an entire LDATS analysis, including all of the above steps, using the `LDA_TS()` function and passing options to the LDA and TS functions as a `list` to the `control` argument. +The default is for `LDA_TS` to weight the time series model based on the document sizes, so we do not need to tell it to do so. -```{r lda_ts, eval = F} +```{r lda_ts, eval = FALSE} lda_ts_results <- LDA_TS(data = rodents, - nseeds = 10, + replicates = 10, topics = 2:5, formulas = ~ sin_year + cos_year, nchangepoints= 0:1, timename = "newmoon", - control = list(nit = 1000)) + control = list(TS_method_args = + list(control = ldats_classic_control(nit = 1000)))) ``` -```{r load ldats results, include = F} -load(here::here('vignettes', 'rodents-example-files', 'lda_ts_results.Rds')) +```{r save lda ts model set, include = FALSE, eval = FALSE} +saveRDS(lda_ts_results, file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) +``` +```{r load lda ts model set, include = FALSE} +lda_ts_results <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) ``` `LDA_TS()` returns a list of all the model objects, and we can access their contents as above: @@ -189,13 +208,13 @@ load(here::here('vignettes', 'rodents-example-files', 'lda_ts_results.Rds')) names(lda_ts_results) # Number of topics -lda_ts_results$`Selected LDA model`$k@k +lda_ts_results$"LDA models"$selected_LDAs[[1]]$topics # Number of changepoints -lda_ts_results$`Selected TS model`$nchangepoints +lda_ts_results$"TS models"$selected_TSs[[1]]$nchangepoints # Summary of changepoint locations -lda_ts_results$`Selected TS model`$rho_summary +lda_ts_results$"TS models"$selected_TSs[[1]]$rho_summary ``` Finally, we can plot the `LDA_TS` results. diff --git a/doc/rodents-example.html b/doc/rodents-example.html index 1e83d20e..f6437a4a 100644 --- a/doc/rodents-example.html +++ b/doc/rodents-example.html @@ -308,13 +308,12 @@

Renata Diaz and Juniper L. Simonis

-

This vignette walks through an example of LDATS at the command line and was constructed using LDATS version 0.3.0 on 2019-10-12.

+

This vignette walks through an example of LDATS at the command line and was constructed using LDATS version 0.2.5 on 2020-03-23.

Installation

To obtain the most recent version of LDATS, install and load the most recent version from GitHub:

install.packages("devtools")
-devtools::install_github("weecology/LDATS")
-library(LDATS)
+devtools::install_github("weecology/LDATS")

Data

@@ -350,27 +349,23 @@

Data

Stage 1: LDA models

-

We use LDA_set() to run replicate LDA models (each with its own seed) with varying numbers of topics (2:5) and select_LDA() to select the best model.

+

We use LDA() to run replicate LDA models (each with its own seed) with varying numbers of topics (2:5), which includes a run of select_LDA() to select the best model(s).

We use the control argument to pass controls to the LDA function via a list. In this case, we can set quiet = TRUE to make the model run quietly.

-
lda_model_set <- LDA_set(document_term_table = rodents$document_term_table,
-                         topics = c(2:5),
-                         nseeds = 10,
-                         control = list(quiet = TRUE))
+
lda_model_set <- LDA(data = rodents, topics = 2:5, replicates = 10,
+                     control = list(quiet = TRUE))

If we do not pass any controls, by default, quiet = FALSE (here run with only 2:3 topics and 2 seeds, to keep output short):

-
lda_model_set2 <- LDA_set(document_term_table = rodents$document_term_table,
-                         topics = c(2:3),
-                         nseeds = 2)
-

LDA_set() returns a list of LDA models. We use select_LDA() to identify the best number of topics and choice of seed from our set of models. By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing list(measurer = [measurer function], selector = [max, min, etc]) to the control argument.

-
selected_lda_model <- select_LDA(lda_model_set)
+
lda_model_set2 <- LDA(data = rodents, topics = c(2:3), replicates = 2)
+

By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing list(measurer = [measurer function], selector = [max, min, etc]) to the control argument.

+
selected_lda_model <- select_LDA(lda_model_set$LDAs)[[1]]

We can access the results of the model:

# Number of topics:
 
-selected_lda_model[[1]]@k
+selected_lda_model$topics
 #> [1] 5
 
 # Topic composition of communities at each time step
 # Columns are topics; rows are time steps
-head(selected_lda_model[[1]]@gamma)
+head(selected_lda_model$document_topic_table)
 #>             [,1]        [,2]      [,3]        [,4]        [,5]
 #> [1,] 0.008303695 0.466475067 0.3431302 0.008585984 0.173505077
 #> [2,] 0.005769837 0.663030049 0.2480563 0.005808044 0.077335746
@@ -378,25 +373,25 @@ 

Stage 1: LDA models

#> [4,] 0.003986846 0.183762181 0.8042557 0.004034794 0.003960483 #> [5,] 0.005016414 0.005116156 0.9210663 0.063795689 0.005005489 #> [6,] 0.004157612 0.105779863 0.8817614 0.004170617 0.004130473
-

LDATS includes flexible plot functionality for LDAs and time series. The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. For all the available plot options see ?plot.LDA_VEM.

-
plot(selected_lda_model[[1]])
+

LDATS includes flexible plot functionality for LDAs and time series. The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. For all the available plot options see ?plot.LDA.

+
plot(selected_lda_model)

Stage 2: TS changepoint models

-

We use TS_on_LDA() to run LDATS changepoint models with 0:6 changepoints, and then use select_TS() to find the best-fit model of these.

-

Here, TS_on_LDA() predicts the gamma (the proportion of the community made of up each topic) from our LDA model(s) as a function of sin_year and cos_year in the document_covariate_table. We use document_weights() to weight the information from each time step according to the total number of rodents captured at that time step.

-
changepoint_models <- TS_on_LDA(LDA_models = selected_lda_model, 
-                                document_covariate_table = rodents$document_covariate_table,
-                                formulas = ~ sin_year + cos_year,
-                                nchangepoints = c(0:1), 
-                                timename = "newmoon",
-                                weights = document_weights(rodents$document_term_table),
-                                control = list(nit = 1000))
+

We use TS to run LDATS changepoint models with 0:6 changepoints, which includes a call to select_TS() to find the best-fit model(s) of these.

+

Here, TS() predicts the gamma (the proportion of the community made of up each topic) from our LDA model(s) as a function of sin_year and cos_year in the document_covariate_table. We use document_weights() to weight the information from each time step according to the total number of rodents captured at that time step.

+
ts_model_set <- TS(LDAs = lda_model_set, 
+                   formulas = ~ sin_year + cos_year,
+                   nchangepoints = 0:1, 
+                   timename = "newmoon",
+                   weights = TRUE,
+                   control = list(method_args = 
+                           list(control = ldats_classic_control(nit = 1000))))

We can adjust options (default settings can be seen using TS_control()) for both TS functions by passing a list to the control argument. For a full list see ?TS_control. Here we illustrate adjusting the number of ptMCMC iterations - the default is 10000, but it is convenient to use fewer iterations for code development.

-

Also, it is important to note that by default the TS functions take the name of the time-step column from the document_covariate_table to be "time". To pass a different column name, use the timename argument in TS_on_LDA().

+

Also, it is important to note that by default the TS functions take the name of the time-step column from the document_covariate_table to be "time". To pass a different column name, use the timename argument in TS().

select_TS() will identify the best-fit changepoint model of the models from TS_on_LDA(). As with select_LDA(), we can adjust the measurer and selector functions using the control argument list.

-
selected_changepoint_model <- select_TS(changepoint_models)
+
selected_changepoint_model <- select_TS(ts_model_set$TSs)[[1]]

We can access the results of the selected changepoint model:

# Number of changepoints
 selected_changepoint_model$nchangepoints
@@ -405,55 +400,55 @@ 

Stage 2: TS changepoint models

# Summary of timesteps (newmoon values) for each changepoint selected_changepoint_model$rho_summary #> Mean Median Mode Lower_95% Upper_95% SD MCMCerr AC10 -#> Changepoint_1 212.93 216 217 187 225 10.03 0.3172 0.0066 +#> Changepoint_1 208.11 211 204 187 225 16.27 0.5145 0.1138 #> ESS -#> Changepoint_1 360.2996 +#> Changepoint_1 161.9439 # Raw estimates for timesteps for each changepoint # Changepoints are columns -head(selected_changepoint_model$rhos) +head(selected_changepoint_model$focal_rhos) #> [,1] -#> [1,] 220 -#> [2,] 220 -#> [3,] 218 -#> [4,] 215 -#> [5,] 213 -#> [6,] 216
+#> [1,] 409 +#> [2,] 76 +#> [3,] 76 +#> [4,] 76 +#> [5,] 76 +#> [6,] 83

LDATS will plot the results of a changepoint model:

plot(selected_changepoint_model)
-

+

Full analysis with LDA_TS

Finally, we can perform an entire LDATS analysis, including all of the above steps, using the LDA_TS() function and passing options to the LDA and TS functions as a list to the control argument. The default is for LDA_TS to weight the time series model based on the document sizes, so we do not need to tell it to do so.

lda_ts_results <- LDA_TS(data = rodents,
-                         nseeds = 10, 
+                         replicates = 10, 
                          topics = 2:5,
                          formulas = ~ sin_year + cos_year,
                          nchangepoints= 0:1,
                          timename = "newmoon",
-                         control = list(nit = 1000))
+ control = list(TS_method_args = + list(control = ldats_classic_control(nit = 1000))))

LDA_TS() returns a list of all the model objects, and we can access their contents as above:

names(lda_ts_results)
-#> [1] "LDA models"         "Selected LDA model" "TS models"         
-#> [4] "Selected TS model"
-
-# Number of topics
-lda_ts_results$`Selected LDA model`$k@k
-#> [1] 5
-
-# Number of changepoints
-lda_ts_results$`Selected TS model`$nchangepoints
-#> [1] 1
-
-# Summary of changepoint locations
-lda_ts_results$`Selected TS model`$rho_summary
-#>                 Mean Median Mode Lower_95% Upper_95%  SD MCMCerr   AC10
-#> Changepoint_1 209.26    211  215       190       225 9.7  0.3067 0.0104
-#>                    ESS
-#> Changepoint_1 380.3491
+#> [1] "LDA models" "TS models" "control" + +# Number of topics +lda_ts_results$"LDA models"$selected_LDAs[[1]]$topics +#> [1] 5 + +# Number of changepoints +lda_ts_results$"TS models"$selected_TSs[[1]]$nchangepoints +#> [1] 1 + +# Summary of changepoint locations +lda_ts_results$"TS models"$selected_TSs[[1]]$rho_summary +#> Mean Median Mode Lower_95% Upper_95% SD MCMCerr AC10 +#> Changepoint_1 209.16 211 215 192 225 9.5 0.3004 0.0677 +#> ESS +#> Changepoint_1 441.4974

Finally, we can plot the LDA_TS results.

-

+

diff --git a/notes.R b/notes.R index ebd30a51..f666dfa9 100644 --- a/notes.R +++ b/notes.R @@ -2,15 +2,14 @@ predict tidying check functions and general usage examples tests -what is up with lda_ts_controls... - ...oh is that how its always been because of the splitting? tempering vignettes + devtools::load_all() data(rodents) LDAs <- LDA(data = rodents, topics = 1:2, replicates = c(1, 4)) -TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 1, +TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 0:1, timename = "newmoon", weights = TRUE, control = list(method_args = list(control = ldats_classic_control(nit = 100)))) diff --git a/vignettes/LDATS_codebase.Rmd b/vignettes/LDATS_codebase.Rmd deleted file mode 100644 index 3d3e1634..00000000 --- a/vignettes/LDATS_codebase.Rmd +++ /dev/null @@ -1,208 +0,0 @@ ---- -title: "Latent Dirichlet Allocation Time Series (LDATS)" -author: "Juniper L. Simonis" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{LDATScodebase} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` - -```{r, include=FALSE} -library(LDATS) -vers <- packageVersion("LDATS") -today <- Sys.Date() -``` -incorporate this! - - -LDA_TS - - LDA_TS_control - LDA_control - TS_control - - LDA - prepare_LDA - LDA_control - conform_data - run_LDA - LDA_call (replicated for each model) - LDA_msg - LDA$control$model with LDA$control$model_args - topicmodels::LDA - package_LDA - select_LDA - LDA$control$selector with LDA$control$selector_args - measure_LDA (replicated for each model) - LDA$control$measurer with LDA$control$measurer_args - - TS - prepare_TS - TS_control - run_TS - TS_call (replicated for each model) - TS_msg - TS$control$model with TS$control$model_args - sequential_TS_control - est_changepoints - TS$control$method with TS$control$method_args - ldats_classic_control - prep_saves - prep_ptMCMC_inputs - prep_temp_sequence - prep_proposal_dist - prep_cpts - prep_temp_sequence - TS$control$response with TS$control$response_args - prep_ids - prep_pbar - update_pbar - step_chains - propose_step - proposed_step_mods - TS$control$response with TS$control$response_args - eval_step - accept_step - swap_chains - update_saves - update_cpts - update_ids - process_saves - count_trips - est_regressors - TS$control$response with TS$control$response_args - package_sequential_TS - summarize_rhos - measure_rho_vcov - summarize_eta - measure_eta_vcov - package_TS - select_TS - TS$control$selector with TS$control$selector_args - measure_TS (replicated for each model) - TS$control$measurer with TS$control$measurer_args - - - -## Overview - -This vignette outlines the code base for the **LDATS** package. It was -constructed using **LDATS** version `r vers` on `r today`. - -## Installation - -To obtain the most recent version of **LDATS**, install the most recent -version from GitHub: - -```{r, eval=FALSE} -install.packages("devtools") -devtools::install_github("weecology/LDATS") -``` - -## Analytical Pipeline - -The full LDATS analysis can be executed using the `LDA_TS` function, -which is the top-level of the coding pipeline's hierarchy of -functions: - -* `LDA_TS()` - * `check_LDA_TS_inputs()` - * `check_timename()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_weights()` - * `check_control()` - * `check_document_term_table()` - * `check_document_covariate_table()` - * `check_topics()` - * `check_seeds()` - * `LDA_set()` - * `check_LDA_TS_inputs()` - * `check_control()` - * `check_document_term_table()` - * `check_topics()` - * `check_seeds()` - * loop over models - * `prep_LDA_control()` - * `LDA()` - * `select_LDA()` - * applies the `measurer` and `selector` functions supplied via `LDA_controls_list()` - * `TS_on_LDA()` - * `check_LDA_TS_inputs()` - * `check_LDA_models()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_timename()` - * `check_control()` - * `check_weights()` - * `check_document_covariate_table()` - * `expand_TS()` - * loop over models - * `prep_TS_data()` - * `TS()` - * `check_TS_inputs()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_control()` - * `check_weights()` - * `est_changepoints()` - * `prep_saves()` - * `prep_ptMCMC_inputs()` - * `prep_cpts()` - * loop over chains - * `multinom_TS()` - * `prep_ids()` - * `prep_pbar()` - * loop over iterations - * `update_pbar()` - * `step_chains()` - * `propose_step()` - * `proposed_step_mods()` - * loop over chains - * `multinom_TS()` - * `eval_step()` - * `take_step()` - * `swap_chains()` - * loop over chain neighbors - * `update_saves()` - * `update_cpts()` - * `update_ids()` - * `est_regressors()` - * loop over unique realizations of change point locations - * `multinom_TS()` - * loop over chunks - * `mirror_vcov()` - * `rmvnorm()` - * `summarize_TS()` - * `diagnose_ptMCMC()` - * `count_trips()` - * `summarize_rhos()` - * `measure_rho_vcov()` - * `summarize_etas()` - * `measure_eta_vcov()` - * `select_TS()` - * applies the `measurer` and `selector` functions supplied via `TS_controls_list()` - * `package_LDA_TS()` - -Each component model's function (`LDA_set()` and `TS()`) can be run -independently, as well. - -## Controls Lists - -To minimize the length of argument lists and facilitate simple default usage -throughout the pipeline, we implement an options/controls list approach, where -each of the main functions (`LDA_TS`, `LDA_set`, and `TS`) and its subfunctions -have a `control` argument that takes a `list` to replace the defaults returned -by its `_control` function: - -* `LDA_TS_control()` -* `LDA_set_control()` -* `TS_control()` \ No newline at end of file diff --git a/vignettes/paper-comparison.Rmd b/vignettes/paper-comparison.Rmd deleted file mode 100644 index b5b34072..00000000 --- a/vignettes/paper-comparison.Rmd +++ /dev/null @@ -1,649 +0,0 @@ ---- -title: "Comparison to Christensen et al. 2018" -author: "Renata Diaz and Hao Ye" -output: rmarkdown::html_vignette -vignette: > - %\VignetteIndexEntry{paper-comparison} - %\VignetteEngine{knitr::rmarkdown} - %\VignetteEncoding{UTF-8} -params: - run_models: FALSE ---- - -```{r setup, include=FALSE} -knitr::opts_chunk$set( - collapse = TRUE, - comment = "#>" -) -``` -```{r, include=FALSE} -vers <- packageVersion("LDATS") -``` - -# Introduction - -This document provides a side-by-side comparison of **`LDATS`** (version `r vers`) results with analysis from [Christensen et al. 2018](https://esajournals.onlinelibrary.wiley.com/doi/full/10.1002/ecy.2373). - -## Summary - -| Step | Changes from Christensen et al 2018 to `LDATS` | Effect on comparison | Recommendations for future users | -|:---------------|:------------------------|:-----------------------|:----------------------------| -|Data|Paper adjusts abundances according to unit effort, while `LDATS` uses raw capture numbers.|None: run comparison using adjusted data|Use raw, unweighted abundances.| -|LDA model selection|Paper conservatively overestimated the number of parameters for calculating AIC for model selection. `LDATS` calculates AIC appropriately.|Paper LDA selects 4 topics, while `LDATS` finds 6. Compare all combinations of paper and `LDATS` LDA models and changepoint models| Use `LDATS` AIC calculation.| -|Changepoint model document weights|Paper weighted all sampling periods equally regardless of abundance. `LDATS` by default weights the information from each sampling period according to the number of individuals captured (i.e. the amount of information gleaned about the underlying community composition).|None; use `weights = NULL` to set all weights equal to 1 for LDATS| Weight sampling periods according to abundance| -|Overall LDA + changepoint results| All combinations of LDA + changepoint model find 4 changepoints at approximately the same time steps|Choice of LDA model has more of an effect than choice of changepoint model|`LDATS` reflects best practices, but the paper methods will produce qualitatively similar results.| - -# Setup - -## LDATS Installation - -To obtain the most recent version of **`LDATS`**, install the most recent version from GitHub: - -```{r, eval = FALSE} -# install.packages("devtools") -devtools::install_github("weecology/LDATS") -``` - -Load in the **`LDATS`** package. -```{r} -library(LDATS) -set.seed(42) -nseeds <- 200 -nit <- 10000 -``` - -## Running the Models - -Because both the Latent Dirichlet Allocation (LDA) and time series components of the analysis can take a long time to run (especially with the settings above for the number of seeds and iterations), we will use pre-generated model outputs and turn off certain code chunks that run the models using a global `rmarkdown` parameter, `run_models = FALSE`. - -To change this functionality, you can re-render this file with: -```{r, eval = FALSE} -rmarkdown::render("paper-comparison.Rmd", params = list(run_models = TRUE)) -``` - -## Download Analysis Scripts and Data Files - -We're going to download analysis scripts, data files, and model objects, so we use a temporary location for storage: - -```{r set download location} -vignette_files <- tempdir() -``` - -To replicate the Christensen et al. 2018 analysis, we download some of the original scripts & data files from [Extreme-events-LDA repo](https://github.com/emchristensen/Extreme-events-LDA), as well as some raw data files from the [PortalData repo](https://github.com/weecology/PortalData): - -Main Analysis Scripts: - -* `rodent_LDA_analysis.R` - - main script for analyzing rodent community change using LDA - -* `rodent_data_for_LDA.R` - - contains a function that creates the rodent data table used in analyses - -* `AIC_model_selection.R` - - contains functions for calculating AIC for different candidate LDA models - -* `changepointmodel.r` - - contains change-point model code - -* `LDA-distance.R` - - function for computing Hellinger distance analyses - -Data: - -* `Rodent_table_dat.csv` - - table of rodent data, created by rodent_data_for_LDA.R - -* `moon_dates.csv` - - table of census dates (downloaded from the PortalData repository) - -* `Portal_rodent_trapping.csv` - - table of trapping effort (downloaded from the PortalData repository) - -Figure scripts: - -* `LDA_figure_scripts.R` -- contains functions for making main plots in manuscript (Fig 1). Called from rodent_LDA_analysis.R - -```{r download scripts} -test_file <- file.path(vignette_files, "rodent_LDA_analysis.r") - -if (!file.exists(test_file)) -{ - # from the Extreme-events-LDA repo - github_path <- "https://raw.githubusercontent.com/emchristensen/Extreme-events-LDA/master/" - files_to_download <- c("rodent_LDA_analysis.r", "rodent_data_for_LDA.r", - "AIC_model_selection.R", "changepointmodel.r", - "LDA-distance.R", "Rodent_table_dat.csv", - "LDA_figure_scripts.R") - - for (file in files_to_download) - { - download.file(url = paste0(github_path, file), - destfile = file.path(vignette_files, file)) - } - - # from the PortalData repo - github_path <- "https://raw.githubusercontent.com/weecology/PortalData/master/Rodents/" - files_to_download <- c("moon_dates.csv", "Portal_rodent_trapping.csv") - - for (file in files_to_download) - { - download.file(url = paste0(github_path, file), - destfile = file.path(vignette_files, file)) - } -} -``` - -## Download Model Outputs - -We also have pre-generated model outputs that we download from the [LDATS-replications repo](https://github.com/weecology/LDATS-replications): - -LDA models: - -* `ldats_ldamodel.RDS` - - the best LDA model as selected by LDATS - -* `paper_ldamodel.RDS` - - the best LDA model as selected by the Christensen et al. analysis - -Changepoint outputs - -* `ldats_ldats.RDS` - - the posterior distribution of changepoints, using the LDATS LDA model and the LDATS changepoint selection - -* `ldats_paper.RDS` - - the posterior distribution of changepoints, using the LDATS LDA model and the paper's changepoint selection - -* `paper_ldats.RDS` - - the posterior distribution of changepoints, using the paper LDA model and the LDATS changepoint selection - -* `paper_paper.RDS` - - the posterior distribution of changepoints, using the paper LDA model and the paper's changepoint selection - -Figures - -* `lda_distances.png` - - figure showing the variance in the topics identified by the paper's LDA model code - -```{r download pre-generated model outputs, eval = !params$run_model} -test_file <- file.path(vignette_files, "ldats_ldamodel.RDS") - -if (!file.exists(test_file)) -{ - # from the Extreme-events-LDA repo - github_path <- "https://raw.githubusercontent.com/weecology/LDATS-replications/master/model_outputs/" - files_to_download <- c("ldats_ldamodel.RDS", "paper_ldamodel.RDS", - "ldats_ldats.RDS", "ldats_paper.RDS", - "paper_ldats.RDS", "paper_paper.RDS", - "lda_distances.png") - - for (file in files_to_download) - { - download.file(url = paste0(github_path, file), - destfile = file.path(vignette_files, file), - mode = "wb") - } -} -``` - -# Data Comparison - -The dataset of Portal rodents on control plots is included in the LDATS package: - -```{r LDATS data} -data(rodents) - -head(rodents[[1]]) -``` - -We can compare this against the data used in Christensen et al: - -```{r Paper data} -# parameters for subsetting the full Portal rodents data -periods <- 1:436 -control_plots <- c(2, 4, 8, 11, 12, 14, 17, 22) -species_list <- c("BA", "DM", "DO", "DS", "NA", "OL", "OT", "PB", "PE", "PF", - "PH", "PI", "PL", "PM", "PP", "RF", "RM", "RO", "SF", "SH", "SO") - -source(file.path(vignette_files, "rodent_data_for_LDA.r")) - -# assemble `paper_dat`, the data from Christensen et al. 2018 -paper_dat <- create_rodent_table(period_first = min(periods), - period_last = max(periods), - selected_plots = control_plots, - selected_species = species_list) - -# assemble `paper_covariates`, the associated dates and covariate data -moondat <- read.csv(file.path(vignette_files, "moon_dates.csv"), stringsAsFactors = F) - -paper_dates <- moondat %>% - dplyr::filter(period %>% dplyr::between(min(periods), max(periods))) %>% - dplyr::pull(censusdate) %>% - as.Date() - -paper_covariates <- data.frame( - index = seq_along(paper_dates), - date = paper_dates, - year_continuous = lubridate::decimal_date(paper_dates)) %>% - dplyr::mutate( - sin_year = sin(year_continuous * 2 * pi), - cos_year = cos(year_continuous * 2 * pi) - ) -``` - -## Compare the data from Christensen et al. with the included data in `LDATS` - -```{r rodent data comparison} -compare <- rodents[[1]] == paper_dat - -length(which(rowSums(compare) < ncol(compare))) -``` - -There are 16 rows where the data included in LDATS differs from the paper data. This is because the LDATS data is not adjusted to account for trapping effort, while the paper data does, by dividing all census counts by the actual number of plots trapped and multiplying by 8 to account for incompletely-trapped censuses. - -To confirm this, refer to lines 36-46 in `rodent_data_for_LDA.r`: - -```{} - # retrieve data on number of plots trapped per month - trap_table = read.csv('https://raw.githubusercontent.com/weecology/PortalData/master/Rodents/Portal_rodent_trapping.csv') - trap_table_controls = filter(trap_table, plot %in% selected_plots) - nplots_controls = aggregate(trap_table_controls$sampled,by=list(period = trap_table_controls$period),FUN=sum) - - # adjust species counts by number of plots trapped that month - r_table_adjusted = as.data.frame.matrix(r_table) - for (n in 1:436) { - #divide by number of control plots actually trapped (should be 8) and multiply by 8 to estimate captures as if all plots were trapped - r_table_adjusted[n,] = round(r_table_adjusted[n,]/nplots_controls$x[n]*8) - } -``` - -We can run the same procedure on the LDATS data to verify that we obtain a data.frame that matches. - -```{r adjust LDATS data after Christensen et al, eval = TRUE} -# get the trapping effort for each sample -trap_table <- read.csv(file.path(vignette_files, "Portal_rodent_trapping.csv")) -trap_table_controls <- dplyr::filter(trap_table, plot %in% control_plots) -nplots_controls <- aggregate(trap_table_controls$sampled, - by = list(period = trap_table_controls$period), - FUN = sum) - -# adjust species counts by number of plots trapped that month -# divide by number of control plots actually trapped (should be 8) and -# multiply by 8 to estimate captures as if all plots were trapped -ldats_rodents_adjusted <- as.data.frame.matrix(rodents[[1]]) -ldats_rodents_adjusted[periods, ] <- round(ldats_rodents_adjusted[periods, ] / nplots_controls$x[periods] * 8) -``` - -Now we can compare the adjusted LDATS dataset with both the original ldats dataset and the dataset from the paper: - -```{r dataset comparisons} -compare_raw <- rodents[[1]] == ldats_rodents_adjusted -length(which(rowSums(compare_raw) < ncol(compare_raw))) - -compare_adjusted <- ldats_rodents_adjusted == paper_dat -length(which(rowSums(compare_adjusted) < ncol(compare_adjusted))) -``` - -Because the LDA procedure weights the information from documents (census periods) according to the number of words (rodents captured), we now believe it is most appropriate to run the LDA on _unadjusted_ trapping data, and we recommend that users of LDATS do so. However, to maintain consistency with Christensen et al 2018, we will proceed using the _adjusted_ rodent table in this vignette. - -```{r switch to adjusted rodents} -rodents[[1]] <- paper_dat -``` - -The LDATS rodent data comes with a `document_covariate_table`, which we will use later as the predictor variables for the changepoint models. In this table, time is expressed as new moon numbers. Later we will want to be able to interpret the results in terms of census dates. We will add a column to the `document_covariate_table` to convert new moon numbers to census dates. We will not reference this column in any of the formulas we pass to the changepoint models, so it will be ignored until we need it. - -```{r add dates to covariate table} -head(rodents$document_covariate_table) - -new_cov_table <- dplyr::left_join(rodents$document_covariate_table, - dplyr::select(moondat, newmoonnumber, censusdate), - by = c("newmoon" = "newmoonnumber")) %>% - dplyr::rename(date = censusdate) - -rodents$document_covariate_table <- new_cov_table -``` - -# Identify community groups using LDA - -While LDATS can run start-to-finish with `LDATS::LDA_TS`, here we will work through the process function-by-function to isolate differences with the paper. For a breakdown of the `LDA_TS` pipeline, see the [`codebase` vignette](https://weecology.github.io/LDATS/articles/LDATS_codebase.html). - -First, we run the LDA models from LDATS to identify the number of topics: - -```{r LDATS LDAs, eval = params$run_models} -ldats_ldas <- LDATS::LDA_set(document_term_table = rodents$document_term_table, - topics = 2:6, nseeds = nseeds) -ldats_ldamodel <- LDATS::select_LDA(LDA_models = ldats_ldas)[[1]] - -saveRDS(ldats_ldamodel, file = file.path(vignette_files, "ldats_ldamodel.RDS")) -``` - -Second, we run the LDA models from Christensen et al. to do the same task: - -```{r paper LDAs, eval = params$run_models} -source(file.path(vignette_files, "AIC_model_selection.R")) -source(file.path(vignette_files, "LDA-distance.R")) - -# Some of the functions require the data to be stored in the `dat` variable -dat <- paper_dat - -# Fit a bunch of LDA models with different seeds -# Only use even numbers for seeds because consecutive seeds give identical results -seeds <- 2 * seq(nseeds) - -# repeat LDA model fit and AIC calculation with a bunch of different seeds to test robustness of the analysis -best_ntopic <- repeat_VEM(paper_dat, - seeds, - topic_min = 2, - topic_max = 6) -hist(best_ntopic$k, breaks = seq(from = 0.5, to = 9.5), - xlab = "best # of topics", main = "") - -# 2b. how different is species composition of 4 community-types when LDA is run with different seeds? -# ================================================================== -# get the best 100 seeds where 4 topics was the best LDA model -seeds_4topics <- best_ntopic %>% - filter(k == 4) %>% - arrange(aic) %>% - head(min(100, nseeds)) %>% - pull(SEED) - -# choose seed with highest log likelihood for all following analyses -# (also produces plot of community composition for "best" run compared to "worst") - -png(file.path(vignette_files, "lda_distances.png"), width = 800, height = 400) -dat <- paper_dat # calculate_LDA_distance has some required named variables -best_seed <- calculate_LDA_distance(paper_dat, seeds_4topics) -dev.off() -mean_dist <- unlist(best_seed)[2] -max_dist <- unlist(best_seed)[3] - -# ================================================================== -# 3. run LDA model -# ================================================================== -ntopics <- 4 -SEED <- unlist(best_seed)[1] # For the paper, use seed 206 -ldamodel <- LDA(paper_dat, ntopics, control = list(seed = SEED), method = "VEM") - -saveRDS(ldamodel, file = file.path(vignette_files, "paper_ldamodel.RDS")) -``` - -```{r} -knitr::include_graphics(file.path(vignette_files, "lda_distances.png")) -``` - -## Plots - -To visualize the LDA assignment of species to topics, we load in the saved LDA models from previously: -```{r} -ldamodel <- readRDS(file.path(vignette_files, "paper_ldamodel.RDS")) -ldats_ldamodel <- readRDS(file.path(vignette_files, "ldats_ldamodel.RDS")) -``` - -How the paper LDA model assigns species to topics: -```{r plot paper LDA, fig.width = 7, fig.height = 6} -plot(ldamodel, cols = NULL, option = "D") -``` - -How the LDATS LDA model assigns species to topics: -```{r plot LDATS LDA, fig.width = 7, fig.height = 6} -plot(ldats_ldamodel, cols = NULL, option = "D") -``` - -The paper method finds 4 topics and LDATS finds 6. This is because of an update to the model selection procedure. The paper conservatively overestimates the number of parameters (by counting all of the variational parameters) and therefore overpenalizes the AIC for models with more topics. Comparatively, the LDATS method now uses the number of parameters remaining after the variational approximation, as returned by the LDA object. For this vignette, we will compare the results from using both LDA models. - -# Changepoint models - -We will compare four combinations of LDA + changepoint models: - -* LDATS LDA + LDATS changepoint -* LDATS LDA + paper changepoint -* Paper LDA + LDATS changepoint -* Paper LDA + paper changepoint - -Having divided the data to generate catch-per-effort, the paper changepoint model weighted all sample periods equally. In comparison, LDATS does not force an equal weighting, but assumes that as default, and can weight sample periods according to how many individuals were captured (controlled by the `weights` argument to `LDA_TS`, and easily calculated for a document-term matrix using `document_term_weights`. We now believe it is more appropriate to weight periods proportional to captures in the time series (despite the LDA function returning only proportions of each topic), and this is what we recommend for LDATS users. For the purposes of comparison, however, we will continue set all weights = 1 for both changepoint models. For an example of LDATS run with proportional weights, see the [rodents vignette](https://weecology.github.io/LDATS/articles/rodents-example.html). - -## Running paper changepoint models - -We define a few helper functions for running the changepoints model of Christensen et al. and processing the output to obtain the dates: - -```{r paper changepoint models} -#### Run changepoint #### -source(file.path(vignette_files, "changepointmodel.r")) - -find_changepoints <- function(lda_model, paper_covariates, n_changepoints = 1:6) -{ - # set up parameters for model - x <- dplyr::select(paper_covariates, - year_continuous, - sin_year, - cos_year) - - # run models with 1, 2, 3, 4, 5, 6 changepoints - cpt_results <- data.frame(n_changepoints = n_changepoints) - cpt_results$cpt_model <- lapply(cpt_results$n_changepoints, - function(n_changepoints) - { - changepoint_model(lda_model, x, n_changepoints, maxit = nit, - weights = rep(1, NROW(x))) - }) - return(cpt_results) -} - -# Among a selection of models with different # of changepoints, -# - compute AIC -# - select the model with the best AIC -# - get the posterior distributions for the changepoints -select_cpt_model <- function(cpt_results, ntopics) -{ - # compute log likelihood as the mean deviance - cpt_results$mean_deviances <- vapply(cpt_results$cpt_model, - function(cpt_model) {mean(cpt_model$saved_lls)}, - 0) - - # compute AIC = ( -2 * log likelihood) + 2 * (#parameters) - cpt_results$AIC <- cpt_results$mean_deviances * -2 + - 2 * (3 * (ntopics - 1) * (cpt_results$n_changepoints + 1) + - (cpt_results$n_changepoints)) - - # select the best model - cpt <- cpt_results$cpt_model[[which.min(cpt_results$AIC)]] - return(cpt) -} - -# transform the output from `compute_cpt` and match up the time indices with -# dates from the original data -get_dates <- function(cpt, covariates = paper_covariates) -{ - cpt$saved[,1,] %>% - t() %>% - as.data.frame() %>% - reshape::melt() %>% - dplyr::left_join(covariates, by = c("value" = "index")) -} -``` - -### LDATS LDA and paper changepoint - -Run the Christensen et al. time series model to identify changepoints on the LDA topics selected by LDATS: -```{r run LDATS LDA and paper cpt, eval = params$run_models} -ldats_paper_results <- find_changepoints(ldats_ldamodel, paper_covariates) - -saveRDS(ldats_paper_results, file = file.path(vignette_files, "ldats_paper.RDS")) -``` - -Extract the dates of the changepoints: -```{r compute changepoints for LDATS LDA and paper cpt} -ldats_paper_results <- readRDS(file.path(vignette_files, "ldats_paper.RDS")) - -ldats_paper_cpt <- select_cpt_model(ldats_paper_results, - ntopics = ldats_ldamodel@k) -ldats_paper_cpt_dates <- get_dates(ldats_paper_cpt) -``` - -### Paper LDA and paper changepoint - -Run the Christensen et al. time series model to identify changepoints on the LDA topics selected by Christensen et al.: -```{r run paper LDA and paper cpt, eval = params$run_models} -paper_paper_results <- find_changepoints(ldamodel, paper_covariates) - -saveRDS(paper_paper_results, file = file.path(vignette_files, "paper_paper.RDS")) -``` - -Extract the dates of the changepoints: -```{r compute changepoints for paper LDA and paper cpt} -paper_paper_results <- readRDS(file.path(vignette_files, "paper_paper.RDS")) - -paper_paper_cpt <- select_cpt_model(paper_paper_results, - ntopics = ldamodel@k) -paper_paper_cpt_dates <- get_dates(ldats_paper_cpt) -``` - -## Running LDATS changepoint models - -### LDATS LDA and LDATS changepoint - -Run the LDATS time series model to identify changepoints on the LDA topics selected by LDATS: - -```{r run LDATS LDA and LDATS cpt, eval = params$run_models} -ldats_ldats_results <- TS_on_LDA(LDA_models = ldats_ldamodel, - document_covariate_table = rodents$document_covariate_table, - formulas = ~ sin_year + cos_year, - nchangepoints = 1:6, - timename = "newmoon", - weights = NULL, - control = list(nit = nit)) - -saveRDS(ldats_ldats_results, file = file.path(vignette_files, "ldats_ldats.RDS")) -``` - -Unlike the paper changepoint model, LDATS can recognize that sampling periods may not be equidistant, and can place changepoint estimates at new moons if they fall between nonconsecutive sampling periods. We can estimate the dates corresponding to those new moons, extrapolating from the census dates for adjacent census periods. - -```{r construct lookup table for LDATS output for changepoint times} -# make the full sequence of possible newmoon values -full_index <- seq(min(rodents$document_covariate_table$newmoon), - max(rodents$document_covariate_table$newmoon)) - -# generate a lookup table with dates for the newmoons, using `approx` to -# linearly interpolate the missing values -ldats_dates <- approx(rodents$document_covariate_table$newmoon, - as.Date(rodents$document_covariate_table$date), - full_index) %>% - as.data.frame() %>% - mutate(index = x, - date = as.Date(y, origin = "1970-01-01")) %>% - select(index, date) -``` - -Select the best time series model and extract the dates of the changepoints: - -```{r compute changepoints for LDATS LDA and LDATS cpt} -ldats_ldats_results <- readRDS(file.path(vignette_files, "ldats_ldats.RDS")) - -ldats_ldats_cpt <- select_TS(ldats_ldats_results) - -ldats_ldats_cpt_dates <- ldats_ldats_cpt$rhos %>% - as.data.frame() %>% - reshape::melt() %>% - dplyr::left_join(ldats_dates, by = c("value" = "index")) -``` - -### Paper LDA and LDATS changepoint - -Run the LDATS time series model to identify changepoints on the LDA topics selected by Christensen et al.: - -```{r run paper LDA and LDATS cpt, eval = params$run_models} -paper_ldats_results <- TS_on_LDA(LDA_models = ldamodel, - document_covariate_table = rodents$document_covariate_table, - formulas = ~ sin_year + cos_year, - nchangepoints = 1:6, - - timename = "newmoon", - weights = NULL, - control = list(nit = nit)) - - -saveRDS(paper_ldats_results, file = file.path(vignette_files, "paper_ldats.RDS")) -``` - -Select the best time series model and extract the dates of the changepoints: - -```{r select paper lda + ldats cpt} -paper_ldats_results <- readRDS(file.path(vignette_files, "paper_ldats.RDS")) - -paper_ldats_cpt <- select_TS(paper_ldats_results) - -paper_ldats_cpt_dates <- paper_ldats_cpt$rhos %>% - as.data.frame() %>% - reshape::melt() %>% - dplyr::left_join(ldats_dates, by = c("value" = "index")) -``` - -## How many changepoints were identified? - -```{r} -nlevels(ldats_paper_cpt_dates$variable) -nlevels(paper_paper_cpt_dates$variable) -nlevels(ldats_ldats_cpt_dates$variable) -nlevels(paper_ldats_cpt_dates$variable) -``` - -All of the models find four changepoints. - -## Plot changepoint models - -### Paper LDA and LDATS changepoint - -```{r plot paper LDA and LDATS cpts, fig.width = 7, fig.height = 6} -plot(paper_ldats_cpt) -``` - -### LDATS LDA and LDATS changepoint -```{r plot ldats LDA and LDATS cpt, fig.width = 7, fig.height = 6} -plot(ldats_ldats_cpt) -``` - -### Paper LDA and paper changepoint -```{r plot paper LDA and paper cpt, fig.width = 7, fig.height = 6} -paper_cpts <- find_changepoint_location(paper_paper_cpt) -ntopics <- ldamodel@k - -paper_cpt_plot <- get_ll_non_memoized_plot(ldamodel, paper_covariates, paper_cpts, make_plot = TRUE, - weights = rep(1, NROW(paper_covariates))) - -annual_hist(paper_paper_cpt, paper_covariates$year_continuous) -paper_cpt_plot -``` - -### LDATS LDA and paper changepoint -```{r plot LDATS lda and paper cpt, fig.width = 7, fig.height = 6} -ldats_cpts <- find_changepoint_location(ldats_paper_cpt) -ntopics <- ldats_ldamodel@k - -ldats_cpt_plot <- get_ll_non_memoized_plot(ldats_ldamodel, paper_covariates, ldats_cpts, make_plot = TRUE, - weights = rep(1, NROW(paper_covariates))) - -annual_hist(ldats_paper_cpt, paper_covariates$year_continuous) -ldats_cpt_plot -``` - -The results of the changepoint model appear robust to both choice of LDA model and choice of changepoint model. - -## Report changepoint dates -```{r report cpt dates, include = F} -cpt_dates <- dplyr::bind_rows("paperLDA_paperCPT" = paper_paper_cpt_dates, - "ldatsLDA_paperCPT" = ldats_paper_cpt_dates, - "ldatsLDA_ldatsCPT" = ldats_ldats_cpt_dates, - "paperLDA_ldatsCPT" = paper_ldats_cpt_dates, - .id = "analysis") %>% - dplyr::group_by(analysis, variable) %>% - dplyr::summarize(date = mean(date)) %>% - dplyr::ungroup() %>% - dplyr::rename(changepoint = variable) %>% - tidyr::spread(analysis, date) -``` - -```{r print cpt dates} -knitr::kable(cpt_dates) -``` - -The choice of LDA has more influence on the changepoint locations than the choice of changepoint model - probably because the LDATS LDA has 6 topics, and the paper LDA has 4. However, all of the models agree to within 6 months in most cases, and a year for the broader early 1990s changepoint. diff --git a/vignettes/rodents-example-files/changepoint_models.Rds b/vignettes/rodents-example-files/changepoint_models.Rds deleted file mode 100644 index 7d832a9960e0942820ca546827be5411640fb097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459100 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

u}QU2Tn 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

hDwO$9Ou5os{qW1%^>%m7hkRgJ&$xgj`(bd@ zYBs5G76xty1~LEegVahJ;c*jBn0UGQMsA)iVm_+ZdUrw@CJwGgIwoF_Ss-x74qrFo zoVg=@X#`?A)fK(~dxKcwy&jaWzlTU!!m8?%@`$ug;nsSaEEsttG^SI00Fgy!x02pH zgaUo7jp;WOU`T$E>!~&p^fKL0=!=Ml+2L=F`s=KrzwC{jfFXim>p9W$>y{w4#Wupm z;m2TLJgWKys~XJ7bYy26o5T2oQKVSyH~8sud~?IfaJ&zGLFTE+fyp0Bmp^`&1i1!v zS(n-U5bI)NKmG5wVEV_WeW!R|!Wc`?GMk(Hi0zT_22E`hL^a?DXP>o!xw{)FVvoIG z+}PH@a{dvRI+~sN|B#ft1sqXnK zh-zL~fUPn@?A7KvZQqt4%JU)Ry;MBjq%})0IpKX;_lAS6aZ3^D5N~GXm&Y)6d(Vr@ zZmo!oEwJ1{j1wjjR_Y!~?SYwsVY{MF_K4lZtA2x{JWME(R=UpO>$dIo+>x094S5O! zwN{_CF&%^fcbL8Pc-QJb5WAm+AIQGV97Fv+%6B&t^u zdS!!l8V~wHV}}{JYu_!Hm^?i!U1bDAR#8pCzFg2Hp1Z;IiV5`TdVD#OArIrL2mMrB z8xd2`VwXi%^bkcR=|)~FAM~GCq?j!H5s^>U))zz>z|21L52sG`!?4YYyC1_Ep?iN_ z4r@*XG%B9dKcR1mSQek_xp1HbhB3=|E)jUX@Hu>Q--!yCczA>T3->&{-V|Nm)q>YS ztPATJhcaQx%1^mdvk?Xsu9dB+NPy8<*^L|{b%;gtRRjO*9E^FF2QU5Wd#b_g;ZOEB zL&tTi+gT;iFgS2o?ct4`&@&b}xXzpmLkebb3H36FbbDBYD<%Ub-`_Jjel-(Dr?zRm zyRQzDmEqUqYPAsM+6~ILQVMh)o!7UKCk$qlcF1yS`9ZOJ(E1b;UBo1qt<2V*0bO>( zByMqSsA4|0rK+SJQFPqi?&h>W)H=`Mv+kb}lkJ_Fc@c{cwZK|gxZ%EP2IoTPyC=mI5S0eAWdr1_ zPk}HsqJ2_EHyx2*pA*fRAAqNX)**4CYlZDf5WqaF!?xz7Jc!btwr( z^SM~vs{~-`N870-$OJ~O>iJ~6l82f7FMU#!4#Nohoym2P)iAA{y*8WkGz{yU{$$?o z0duQ;&r{W&LEp{oh1)a*q5r^&Jv)V5U`)+-y+zMvm|ptw^swwG-VX-UEkLUfX+UVH z-;@B1^6&aQa2LbtmBtMm`xZjyK9;H5x`v3HVdkMda2Zh)pLZpnDuA($gB1^0Nig{N zs?v2&Q5dt^m3HUo4rt01rMflWf&|+|_YU1khRKf>H3p|^5ZN|WfkVm?h8D9g@mzNu zChcD;R0b?YOq{mwc2lNdTu-Eb>56igw6VukQ4DkXu9OQO!(m4Ml$8P7V;CG>ZZ7s- z9j2~5whQd$fT7$N4(+CTL|uJfSb(Ahb0O89^-m@d(=nHYYjAlDi|(`O@@j#>sYUCA zYw`Z!fjsLA&3G8wwT$efb`2&JIyY(j_1)yogUi<^HNaGrkey49JB<2#&zOHk1F>nJ zx?RI7iN~#--{wtRftj1{xmj1mBXa#djvAY-i1pad9h=3AV2V3%=}m51n8~@nN^OBJ z;6)iBV; zKj)M#3IoEZ>ekukc)a^08XP5tIFzQoyxX9Sn7!hT&Z1DI2G3}o)l@hB`G86{g zo15~&leDk|g}XYKp#n7f@;O8X*1}-#nz`sFFJV%xUf`RyBMe<#dUJJK5R7wL@SEN{ z0%LVgy6;bUA+kdI_qLsQ{jp&6-k-ubh-;<#kiueFNOJL7svmEGNV`kzYs)Vq@~bCp zt&!e{bZ1_=L`^&lof7`EVagOnW6#zvU5wXxrkZ=znUWxL)?|@@urgv5jE>EIO~UQf z@3fTORYY!c&AGp995MIxLFRtEk5>8=>bL{fuXmM({P$$2vRS~Ce~AQRwz2+QTeF~Q z6^yMlPll1B<0n+-t|2ngzT{Tth*%#>+&3b5Atv#H>XTwCp~X?VFCak=ns*27FA=PV zi38GaME2ov_e=gywy;+)n*2<_*ETz#`U~YrEl>WL|Jvf zR!86%j4f(t_mr_ll*7Y3lQxBj@(^;C(SE}jB1R%;+c&{VkiTCr;A!>M>o)fO!+31*rm=wu}z0Qe2TT?J^edRsGIqylF z&Ke6CZSmFJq^^V8MbhR4Z=Il>KjnnuUK1G6Jh(mQ^;#I|96K^3Ap!l8?}hEUKg0A3 zW0m?R2*&5)g@ue7VdkD(`VoUML>A6*uoiv>D zUVfZ^6H9=py_^RkcV9syvuCFkbQeR<3FTeUssb<*vZ;8ti3ws^@ow3sjTp==;G5K5 zGy)?lw%gQn7Q$TiB)56CE@Hb@x?4eh6j6t>bD0D1dT*OveFv*L%=yfFAd_GD^EW$* z!RkI+Z}DG&IX0WGft<>Sd2i377g4pi|LAN#Ah!^Pbb>ZsFEK{U&o@RSlu5&2B$Gp> z%Ms{{^dG;tO$5(3`Dv{qrHCnU+~}#>L+BCR=SE$)3c5dB3a`uMht^vQ=9c!ag_-3$ zSG~VF3Ilt&)(d5f!`#Ous%@TlTyQELTTw%W<}!5(^M>J7xxvzoGMMv*^-E(q9ARAh#`13m6k+D|nGN$_ zaAWmWlQtPQ6<}iNws$vGcEaT6$)Q)4d5CG7wL1BH5X>#}OI2R30TVVBbIlPvFutN} zM}2K9-jA9&WzQPJxO4SY-V_(;f4k2+0~De0oWbL^U4k%e+1_opLJ($sznwi1RSaXN zk45Gw;&vFj>{`{lBp6*O`s7r_c9_`n{9xI$Mu=@bSLU_T6R+DW{MHU1hpCI}MH==6 z!kEO!C)@7x(0!6K+BWJYVp{b|mV7D&X5MDhY3@)$BwwAavFrN4KWA*~`rc&3yhU|h zS=J{+zUVd&0^Z>DeuMV$CQTUN8=SE5DuYQ0lKY)5FBpg|jDOq}iN)V|cq>F+0Y(m7 z-{w@c0VY$A+}Y?@0W;xKjmWGCS_CgG;u$tVOk!uX*$=LT;kI%9)VwrACg=Uk77K#W zsQn9+Z?M6{O6gSVy>c+Qrh29B_EAK#6wgcgm<6-v7HpB<$BtMYu${?I>4pjHv1S|7 zV?<71_c`kS1t!95jhbC=!Jxg=wVYea5NU#WDW_f^RI5i%2RJFiNT9|Vts5Wke&x%f zP+4A>liVJm@iYUmERP+J*2n9g=z9Y0o-#0G>~4MDRt`}gpFcRhQUwO@y`+4~(uDCG zl|J;j2eBNFAG+>WjYuvv4Nc5TV0z2vOL}izV1PVXB$9m##$LUY_2|L-=EYVTA#2=W zgc)-`VZsKZcJkNs*ZX75{L6y(;QsLQ{IHA1HEkGAn0l!mI)*5(!vrng#z0$KwUI-k6DRKJvQn6VmTg!8ER<|D7lONCDB5eu-Mtqm$qDNqKj7Mh1`ViFB zCYWh@@xkEo<_||~@p!nWQp>};3uemQ#jbrHK%|eNpPzy@3_6E8wMcZpptw+P)Pr7_ z)o^D1)^ZP#_l>3PZ8{9I9M2*j?)VJ-OXJB2trm!U$Udw@ta~>PvgLUrs^X-o1p8i?6Wu%%o^%O1>I`0# z{X7IcUb|C`PJ|)q+|T1(XLX>?yXeW)A{i8UqITsQ(FPq{RcbMX54)-PT%qVDc2{=AMOa~RuiG-fOdHoz>riL2qkC}yTY}@JAEsBWBDO012O(13q!xRUhe3+JZFz>pliO5$AjV6wk zLY-T$Mc1u7#2o!z-6XaVhO1LL+!E%X)6&u^j0f-MH?k-MTH*YPDa+q>JPL!4q)Q#= zPr{^^g@)@FHE8rVZL22-!4%u68G%(Zh=n5aJZ6#t0~@C$UteDWbx7HJLvtid`W(KO zv%Cl@giY$DuR9`+%Pij)GYi8Et55ht&UzT-D=a{q0?=7OjWFR$#_JLXQUB46Fnq+i z_>Soz7~dvLIX=DudKY)jQ`X-Ovq@rC!)>_{+ry2%@$)lbVAFe>@b)Z3YJbx%akvb6 zbu9vGm=h4`^}+~&3vtkVKBnbnm~L_2qrGD_jHOvBEPQYXrXMK3KEEj!M$Cug73Y6LWZk(&-HUB7CUP~L zJnasXJlFGNPv+q9ji0n8?JCqx-Am_n*M+f)E2e2q{7@r#1`T#tLtm*>%RSL$FsJe? z%6WPmQ6%0Ou1V>Fp_?ZRkA9Gc$#Rh=AM$Jv`PBY9Z;p4toP>kWXe1toD7dx zu#cRp*EGZM#xc3#s@*WOsdei!by*m+JHxZ0ItF?Jn&mc8>|i!})%%-&{rg$hLM=!6 zBQVVUod51H-tTy(`jcThA~`;E-XqQ}*rL$mYMCR}zML#HVu8zNO6z_LFZBsA{2|}dLCFQfS(lA>q_hp~yJVgFL z_Hx>E0oq+chWm|t5ZfHjpq;opUf+8nmJ7=fYxH9g<5#_iBrs)R6P1rRO)ndYxOPIP z^&2bB!q~NmitMx6Y;eZlBAMoN+OXYp;8H{BuNrN zlILS&@0Fds_c+$U@BIEe*TFf@bC37yb)D;Sj&5o>+Q;-|g^g9mr=($J&l&Eazov+k zwxKrU0pnKd4z01b!069j zS@8IVXn*(ar>~^LbkB{?ild$|R~~hZCnyA;&29u(H?rd10BXVNyi!rHrn5uuc;JeTd%hM_||2D5jWcjgyE5Q$8 zp;F@f4%wH?y0LCmj@tkX%Ao*;x+J1q^xMNN@&U0(wI|pHbHIX({a}t70V}#(t!GgH zqRa$s6nfu=SWi9?>MLP#AjdyXA>KMzqW-;Rcg`DT8=o%KNs1%#i@`}%%R?~Rs`DhF z^BqhD-^^y~=!B*85K*<^y|C!b>HN`S0nr4~In1k$A~MH=-RXisw$%(rV zt#Rt(P~3hP$|R<*i}%CS7q|QM?o8R+vC+9awF!~S^JhLhD96QWC%1JZH^Jg<87rkDGLSvY!mNdcCvgOqM&-AC+&ub!*qh{IBI_^k5e3QQ%^rY1f6 zVKv>W3&gr1J!i}L=HO1436R^EqNfA&eMU9f$QdeMUi-(HG6>6G2A@5wV23d`his-m%rANVHYLQfg zjxwTnY6kh$7Q+&Uj_M7r^@y~0R{!1Y?})VaEBBGbQJ6L=oyzo7Mw}%<>Q%Lm5o=%F z@sE+8fU#g^-Oj!PQEul(oxh@kNISB3?I~f-mEaRQC)LZaR0=V!9nOg4^KhrW9U0N= z%TKPovWIyos}1=TR*1@Kuu+=X?}NFmGUUQ2#37+JyUQXIk@|5+g#-nW9qswIlNVq) zO(-eJ=?h}D_oG}^bU`GAUVSaAB$%rZ`~lX?zdwX;ubm(vD&H9vxl0V@oZYl+zaRv2 z`=<>B^j%>w)FDVg>^KZPZ>fyvW^&m`%|DaYQKtVpxJ6T#TuRx%RuQcYQ=WUKWGHMf zbFO1(-pU(MZr<_y^|Bti!y3K_FK{EuQ*jx`txTVm%YXViSr!I*E!Mj>GkHJkQW+Z| z4-@}lwaa*nnYp%E_I$HDOkD|zeY>+82G@8cgR**H?&E74rRrJeIowJreVhp`^zOE3 zPeJH26xifm#}5mA9^`4WyD(Fltg~yE4A7UXd!jtl{{MNWW#f)(h`s(dLv2tJrYD}b zd}%oh{ei!p2;~ejJ?Bl|DT~`MHQAyrHMEy`AG{|Wy&Pci@H+u%Cws`$PRcfnmS z(Bj!FT7W(#z4wKu9&Yz8B_Fu`rb>^+Hi0zr$-ubKNVPqt}OX;&W4E-u?y}u&` z7DU?9rq6GMWwMoghiod7N3N%xGBRcQcwOzu0~WCIB=_OrsCi(lIs|a3M*}@8dCIzB(rU zsQWDo&?`&bj*X=w(gg!43pOT4its=FINu2KmUM?BCz-w=vq`UQvkFXEo>fh`P07{8O+zD)FG~>t9&mu&!CFeuK!n_O1xX(qOUueGF&BHbnA0TkAV-4$JFO*a)%^lGht!AcEwo98rDqYXCh8IHMd7&89-Lw-II+3D&cV)to<>xQoG6P|rr_J%`Cv#jh za_?MWG&gjbx%lRmBtV~R|5ZbhJ#G*d3EkYn^xv0jH)5nCVBYgmc}Q{;Fxt%a+@#p! z#-b4iiT9bf^!|T&PydNQPn=`ruwF4V@T>3!Z4W{e!)G&>Ug*Nubb8T%Vn41uRL7!a zya0oR!g~s}5p??d*YV3rLgh^LfBfFPurf6?W%HX0k-o8Ct!YiMfZ0ye01NI;q@O0re@Ez|EhV+l}79 zc>|3(HyQ5~j&Z|uK5;nra3U~n+_&G4x?z4@njYH~XJ~cy+TY#z6xuyM_8uHyK!v`< z)Y=XP%)eWd*&nxt*r&|iZ$DB1ZSVLg8pZyw@E*)RoY)S_!3#SBIf8&L|5N{N`aI#@A7w$OC=L6;k85|(~N`#sXP z!JRHQl6PK;f?36i&(ChT!-6m6mfKBx7>^4w$S&1_l{;Aqhxf$c$%MWQ);o5z73C z`gs?z#W-+o*!lqaRS#aDjt+oaf^VywbsLP%vesPv)(k`UH6n6?{O~`$ucn+QZ@|(I z@hHl#<1i!1ufOoI8|c}7jZZq#vA=xUiHG3`j~@IzGsjW`(@Iheny(Dtp9V`N(c%u} zP7->yK!OIY39pJACnksZOua255H)<%^q@}$Ox~8;Exs=n;vy$@h+%IS6ZpRR8b)#b zP;Ed(sRHg&sB3sXV+jo3tlYC?67v~d&A}_Izz__((ZsKb$WJb)O|BI{yO!mO=jTLN zeQmal!q40nFaLWOm8by?4ZF2gFG#}N3Fu+W=|b)&@v*B}X)q=Igy^-OYof*dfkGKTnu_rP2$ zIiTn-(-*gY%RZI&3|E*4C+)CVVCL}FQHvekP<_Vcu8>I@{Pjq@Q;>NHMpD(EWyBWX zq1L{H>Q_84nUuctoh1y$)}7mxwVev9UO#PjsUt)RNFK3Wt$jml)0)O#sdXE+J;DiE>ukNdxJ@wi%lUQo(Ak(_ z*XvpZ^!&RuC5NSO^!tPY=Ou(|KVNz9;9(-nI#@is$N2%~_Km*$5_1QUju;xdm?c5e z38x#*8?&J__n$M*&?I!+tV%q(;S)>+?sio$*@(mZl-sV0k#N%I>)$Wb5Quv(&t>ly zl2CeaepPeH6Y*}l+T&r*jX(6B+C-hQW%{Zam-_mhOb?r>C&~cI+rD{+@Ww#c^LtZg zlD%=t$wd*~c0=eX__te8+7owXd;JZ++zWGA>n=~ar$S4i^jj8#-|*vn)6vth(y$;g z_vMVs3SxgF=RjDP!OWA5V|xyKgbv-e1rloP(2zoMaEva8%AfD}cNn|k&k^fe53P`3 zEo`Cf_n}Z&F*Km2jCUb&Y-ZggzZd>+lJ%kYuSxvr!i#GkQj%eyyVXlJ!W#zfpXA=k zza5u%WzEVtD8RIKJZrxJGdH$y?Yt!|1eIGQ&h-Ti!s0={8*`7UVVdoCuGJ%d=t~PJ zqMVI`Vek7^%1H*$eMqd_`<)=n9y^^Ib9)uHM)Xq^yyJkuH$eU69}bhMwu4k#Jw#~> zQTlO-A7(o2+DZSe!GcX_(24XQ=o8hwFr(Il>jI+RZm`Hf9R82HtX-mEQG0Qplj$iu z(XR4or9cnn-aI{OcQ69y_I`T3e=C!ljhsSsp2g$7dA~Ccb}2y*yYxo8eJOY{^QA4s@0l)hwm=NjUXyc|#mXJPK8x5vPa0O+3gId%SVB@F3O#KoUp z!jqGXG4iGm=o|J2#?Nt>Fm*Y$;XpLZH@NZrYMh0s0~0-DmKQ)b7A40|Fg+vr)3Mio zm2rMPRf9$*nCEHM?`yb(3)o)261emVrbT|XXOyo2{pZEC$3{$Vq`4g$W6Ogn*QYGc z)D59l!?L`_TN)UPjnCxYcH=*x&DQVFv*R|I%zHVnUO}~U{Gu?(VLI?`Wkkai6b<>F&S6!6wtY5#zlwgrwYHyy-%By;ax6SBBkB+g zn)1BP9lC-4;1vGcB6H}}U{8N&)yDK3U4}?oEYm-neRgXs!N~j6QwH1L;V+WyE^_0^ zuzX&UvSJ_%U17Q^bzjQyzg-#9KPS3jYSl*~(}f*6m2Y2-C(gp;KetFraapK)MZKu` zz!ui7^OwGT!40il+mDTq#&E->pEddeIxu%Kp<$wCH|}!&nw0Xk8J09pCq}si9mm2)S^h$;XOj3$-X@qA)vTNxzXV;UoTe+?t`n?jHsW)= z-mtKKY-`TSLs)1yL>GF;2@HZGQYPmVj9-#WAk}w5P0nI~6-NxL9m|X+zN$h`B@eBn z%nBCO?nVSkCL^{(BTXGz{gAuW{`1+00+_}heeMkQLG6Nwrri??4BV$@>(ST2yt%Q) zft4(rY06X6(H8>a)zVz;3b;f9Jl~e5LRXUgQF)bJP!<@i zdgBU0)cqeGAN(&ArvIuJ?7UzD9V}n<uyAO{ygHaed?bO7eg?lS133zxUyfhhWx2f?0?5{e^WJ+o7}W3H$0B14KSG zw^hl28)lqeERggfVQyFC<&kbzn7nY~Z(DvF^qh#Ddl=8$W1onx${akNGCLjzf=O_o+X!oKQZrXLgUw0`yMH-+fXh z1K;L&bu^TcVU}I?EAOzJr!Z#1?%EWCA^opSZR{WBgR=9RA;f1xQN*891} zJKX5~_j8v(6O6~~iD2OWU~25Q@yCzV(CXB%P5)9FEY*F!vg1!0ENDuZ-m)RVpuyX! z#Gn_rW7y*QEsHjoyjtK~l%)eh1#tpJS1!VgAn!}dtDbne;xW%}2NxKSS-W-S*8+U$ zPWxjS!_3F2rL*S0kHUP5WxBoz8`NCd+;Jo`5V62)L${V3^sG#HJ+Hb73m=Bpp<8|xxXbT2rD=mcROGoBKQ=fH1JBGWG{QWfhdW&K@`Xx> zTgy}1nq&*}?jJtHszky_6X%Q8-2qUZM2nu?Tn&?apA!a5H1K>;`qQFpS?G17Y6kls zgwdSZ@c)Diplj1#-P4Fy$p4957-+6;Da%=XTYujxY zzd7?r!Xp|JvP!a6>YdPUDU;A>t`B|pwzP6Y8^N5i=!3v(JTNB3x4X&SABK;IsCHB^ zy+}7SmuI9CSEn9|)~;vf;pwAr!oLZc%Qf!ZF;RlKUKg#xb*3=Ad{U$I>vpJ{3O+g% zCW=cG#a6h2GGW;?(N#>R9%k1I?Wb33A=;pd8|ybw_qaPw zNM8ZER72M6siSgsJ>0d$Aj~A`GtN5g@}J-{ zcF0|C|GJk|8OjYjE1hk6p{K*&Bwd9c29g9O#h6%AZ zmskU?AQt0Y@ZgH^%>>&Big#oU%p#E@wmSx*XBH-X=gl*;i53 z5eh?vW#Z-)F_5aiW9R*}co_M*h1z(B6?&EhAEz8VjcZmU+cnBuU}im+mYvTaqB`V1 zcG+PEE7eA01MWI7et~P#?bOS#ux@Nm_2x^k8YoljJD~?_TKDgZQkiwQyH1qvt~vgq zVv@Oc9|^ICUkx437=!86%ZG=PuHxY^L1T4J2k3VZd?8_43sdgD+TMDtL2~+^^_yQ* z!>mN;)#4s;#F}QY`H1Zk7+$nZ40^>1ec>AWEXP=J+YhNfBn=&?4c#2GmH#+Q6H}5K zWbI*gKlgEyksMq>i_S<((MA*#x#f|Y6Nm}@uXENFBT{|N(Zg9cpk(SK9k&<5z`%_? zQxoj4+MprW%dr9e9dIdr+ZzHSR(YFU!nAP1{J!1ypDVyZzSp^dgQGB`>}*Y@{fE;+ zG}&8@A?SSe=SZlr7c84K%cUGifr+VtoZK=~M2&lEboi$W%rDh1T>0-8&>e}$?S{NK zF{v& zYwZ^_@^`AvcF5wL~8#FL|+ARtb}%@;*0yEyK76m%)jybm;S3 zrtata3Qbp!wx4J-grPSPZ_kE#!3_J6mTPyDnDzEaP>8Yzzg@WWH4VY&nV+}5uh0-l zMcNH(gu&FQ{3=`FQbaOYaVZ8b_%{@Bjx{0(`uUGDb=w<~cV;m1`VKSm>EPx@*=x`% zsa(0O^a-=Sm8*X3(u4`)BOmt^I>WGS6fI7k4pY--^PW^NU~rpi=#{S`xadH&M?-WZ zo^+LHx=p$S6Spmf9&OeEx^kg{60H=soHRF!U=+hzQP<%8Tt}D^7TFgS(FKD!sXV{` zhC}atLCHyrJ{WOhHx7_kfEBMhdflBrVO2GI$RsKgRvw%{ktVlbEapsYWz};;{;xFU zezyk0!|?kZ??tA6+rpxzVAM}tewgOp*l~BN6=vtJw)x23g;Aw2La#v|hq=G-t`FjT(VCHJamBh@gfe*rkyxH;c>yhGB+lyoisA5gkiAJ z&(-|A8E#|uMAe$Zo{?d+E`~H%u;+R}7bk zsex%WevZ?Z{9$^G`@9R#U{qM#P+;UEEMHwWNC`pdS>`W*_06k00O z;I$5h$`!xCojK@amHc~9Rt-jXJLSnoy+IV4k41YIuff!jlQZweHoyXxy8k9~TU_gS z@T%(!E53C}uFPsX39)#uNbh`U=1^W$gBKy!_dwm(;$2MJ)-h| zc3dwK1q+UL_FOf3FlqN}OR}C1FgC}t^4T-*A&u?LY4aN}__$c>-oEe5J*DugE+hkH zPUh}pJ>mr`L#KX7z3_&X;)$?HH!DR#O#b>bQbbs%Et-GOXLGR0;wjQ)4_WX|M zH~^E^rTv~&P+-n4v0vn+9W35$x~R4LC`{`FN~vX9!>VK6717^cVD;UX!v{Wg;8cO9 zLG&TdtC)&2#T&5&4fUtN!DN(EXRzK0>QfzJ7J@h_lR zzD=nOt+% zKosivMviDd3_)y@CjLp^nLN-JeDwC)R`_u9cf&SGTlm)-JH~R16~?9xTV~sp!;;d* zsE1>&(9AA0e2$BWy1^RtE(dLyyf6MYNy-`MjfKa5q-(>x?=q{|(go<$Yf}JR*LLS^L=3Q!duzSTM3FV&-FFs z>j#7=lfehRl_et9=u-VnRva+*{gT-6k!MIm>W^SOWj9P8xn8m5q7x!DIQd~G zhQ}RWCLz|38Krw8g%BmT-TFx7e~4Ug@zxE}5m@X1o1vUaM2mfMXdibnqP^kKzubvn z@+4)8blhG%VsphXEm56*c-OFOg z879pfj`+y&!DL8b;xWcGSe&#I4Rx16ENU$`vTL^@)&LvT-7O=C!#&zAUZa-D!RzJH z_hZ3hu`u4iw^*yIgLt2b zPkDLoOw@;_CBC2Gt*^=}&#GxpBo|Y|wSbYC*eZG7crfi;VZf?5^tD9=r<8O!| zo~wM_7H^h;(e`3p(nt>?H(WAoNHRiX&i*&4jXJRG!WJwp+<-U@AINodCn7#4RFs<*`MBFJ~1ccT1!^-dWxAf9ah`LRN=flEbSU%N0JCp>_=XadeeP$5mpI8LX z#5w`JS5;DAmbphZ?yA`Co&a-J0jy+SBcOYpkGx)(hDcvJOePx=5Y>P9^P|1%5t}kg z@is?wL}9sY`)J!u#JaR&QR;^aB5jHcSlKNF-SKk%BKod~JTxq(rSJ_F?>}>Qkz(e- zu*BQff4pF};)rb)XBaGIKc=F)9#ye-k65HRr zOg#R zC+nA{UI~bSi4DcgacSAGqEXPdx3vK#SB-Z>0+6Z&5JhCjco`{v^bk@1F4OX}OJlf5-j41xp6R{C-P{;Q&RCzfW z<~Bq(9+aMi*>!u&^(%`Jn}gMcM+qW`)L1`uwy+j{2Q^MTT_O;*LCNoiRsu{_#Lq|k zQAg}2vRvz(x)JqG{rbwQiim?OviRO223EUDw>|rM0$>%C0QiOJ0v? z!O7Tb zFXMItarbQgb2QtB$+dqq^Cr4rX#>BhK>S9;a%9h5XA$Nej1l*D=37JDj9r!ePl8~Y zGn@3Cs}+_y9~Zx6{fBr7!Hj9fEyOY`+H-=77qJ-~dE0ie4CYiWE}yI{hN-f!J4Ssw z5$%&%(;=TySPsxDIO=JQ_}V-jL+n~$E%DB~j%pKF=&g+Cx=;!OhnMROIc_2HdQ+9B z8=k?~b^F&c$#O97<~Zp0)f-mwcPbWb9!EUIJAC$u^}?*^!&2fO+TjSJYiQ5M?{JTKzyfEXGF6d?ByGlF-vJQCx#)t9Oif_x2zX)t~iFxe6>2 z997)QVK7@$lWi@XggENC+z&Y9BDP&$=BhIYM3XC~h&vpH-_kKSCqsx)NNVDCV?0yT8M7m~1 zuIj_;*I2`X7JEc9@_P_-A?mnp9QVfah^zMeJ>yLX`mAbsBW#(x@N2sH#v$gpx1Bq6m;C`S zl)m|1{2dANe=|DQ6`Uvq}CfJ!+2S9m>t|_zF)?j*7K=|^qceZrfYu?>9e|Fx!7^UA#5{w zSFS2bjcz;x;(>_vVsB#f=@dj84VEh~y9zzc;XjNIGxPh>-{>kkH<*27 zH_6I%0&$OjdlVVVeC*AoWqPm?(e^$IR1^Y4RdU<6fABP@}hzuw42WM;$Y0#|hNx}ofmgZ->H!uxGef7V5 zUAqSKcpmeOw|B$x@;xo-9sP*<@W|fVzguAGxYnn|k7bB*?iuMw&s!MW%<+c!qycN! z6W^`*io?9q#?f+(ILKGM=42xugJ@!Fy;&-i&@GeaaI}3pA~~I~^SXgyb#(Q9Yj+qD z7?`$r5&0Og@$b`Lye9_>*E~LHn=8OV^?vKW^^J&f_W3@pBi67|T{2a@!xB-%j`|2@ zjlkUDd!A?Ijw3G6_q(^#80bWr!Lve9SXD_AJiN;ErKT`G&qET3wTB-S`e(!1sbloO zf+AR!xzQ9!4~OOIgxYH-l@YhbnHh8IOvIj3x;UB1i#SJD(kcJC5lit6M)Y(RVlT*L zXA$*>g*vS>3inMo#u5j=5{eOt<<=p^* zi55g|ck5GsRL|tkjwKh_XNcA2=x9U8 zN$*6*>JUX26$r`u!^k)(a9=?OjKBZ6a$UU~X8-+B=hAP6>Ce8JLCQ={{pun2O?MJ; z1}I*Z^=?6|$DUncd-9I~)ejrY%&?M<83s}-2?fY3n zfx-174{kXL!f5nae95B;md<4wN$g2Ml>AS-*u?k28pBpsDESv+vreu{n#n@s)$H_L z;Sz|{`_=mSR0`tpSqx&FW^!Ak%%h5LsXz~ERsSMU$gJP$(Wn3AAf60`!vgcnTz?)T zHxP3TW<;+pbN*v;_Oe9E))UPzYx2iYrn3>TeSW#>lFN_yk2r7q`@SBr2P!@J^q?Ah z)^FpgNF*`6?s^xMZ8IW;hzf5ny$s_=IsMTS_^7xgRdzBnCPH(e3DP9e08@>j=iylPepzMigm3l-PUOKeqq6*6e zGVT|t-7w5kT(q%29kJiO|6K5z0V2iw4XW-BMdWQ-a-ac-jE~)TqJ0OEk8|v~J*Niq z-h2~@bGv{sJT`Sf?kLP2+(l|8nENlnl$?YFUR6yWr$|vtSu08r*CKOn;h>5GUs}&mzv*l)L^h$znu_et&agCz;2s&wvPMC$vImH24~Fsg`H`?ptMdBOc& zxQ+da4G~Qfni48`O4FRh&}Dm3CW!g5RGk0$3F5n zVy&~%)2eesTykf$$%*5Lw`jszMA#ZpM~Pb7bL_BO%(piyTN36(mb-T43;;dL#{JeM zIi@f6T-KU&faS*1kEHzQh-_2(!}03^q8_`$8=`3slR5zl_V;=aWzK3uz;q1e1KLtn zv=tFq_f)qw970^5#C?+6nRDpV=J)%JISj5v>hS5PE1fODI-#SF~8UwXgufC(bq zWrW!&9feixkx1!hOwYOLeNNw08VOO)zU}N?MI4Lz##d3Y12A^s6FMI z`%T<{zWQJN{D~x}elfJrf5aQsG!3@CexQSBdn6wh?ca-7YOl9MjXp%wt1W(A?cWi5 zZe;Oin1y!H^_T9p$O64fs4$wQhp4-}w6_FsBewa@ZYSg0u%O_r(0tTFjCUvwi7Taad+?KR?OzZ#712@i&;5WZWLqQ-?u=8w;OSs}bw)o_OjY zE6l%$4!2D7MC5@+s=5o4i*rWRTXnTy$kZ|Nj)olKWeNHCYbOcjQ>SjNNK3#J-KaX2 zo9VsB^ka6qH^6L&$SHxXWr*{>@az0S55&=P$N1SCJK|V;u2cNn1o0bQZgb{a4~x%D zpUm|d!V>36vBTCShy{(WTx2*yk2332o|zsjCob!H4^P5cp%L#cWpS9=i*yr9U0}^p ztG<(34|5J?oc!lKV9uJmE3QxmCS82__1-)|)aUkXb4px@XAzmr9t~%5nZo5CAM|ic z$%5Z%uPx$o-~8euE+B$z_!oex#sAjOfknDN)o8ToMpmY;v{&->&J%OzquYa$7VmvJX- z;4uS{g|x*OY!pNde4`T?bO-TYmbFR@;DMQukNm!8{FvV8c3abG3!;gu%i^b0MAF!M z=_=6)%es7B3ADog3nr`yA@&!pWRt!(dh&SHxd>_CVshBTVj{6ktnb=8nXH9|kHeFnMA9 zCgl)1q6`mh*{632R(fvdn0c?l+83&fMDabuvZ?arx4EsbEEe8m{C63V60GtzFMIMqz3V%fyzM9q%~W@`S@|Q1WRqSGvp-iRtCxyXY7wP#*Wn%( zW}gTBxVz-T%#&W4iNyFmM2&s-JV5FKFy2mnER6PsX?QJeG+7B#TX$be_(VdK(3;@L zUx#4OuQkD}IsuV>zK)F9cO6mA5BmQ^+=yDVdFW*P1k6u$&o=p~!^A;yjf+nUj2`|k ze0B%(=Yzg;3@$SB!^e>Kiiaa2i{1RG-ogUoEu(Xf;sRl*Gh*Rf=qj{2HS_&la)LEe zZO_TG^)So(@V1xQV_1`84Be{Q0rU7NC6zZ1ak5>Zn9RDsVy>phgvx6~3r`xDGdqrG zP21m?c8noGh0qpD4>!dAL(=$T({`BF{A4W85`-J%Z7uwKt|6+yqQ2R}E5u{i#7dLr zLZmzS$_XU{Fvoj>Z-Hw!OjbOcyQ(LTIJi7wq&NIQ=F3uH$J2nM~oljh73})5ZUc#yLvg3w+;`c(#BE| z?F`?kiH+VcTJgKB?W7mtev(!t(Ec3e*S4C(t|lWcU)Syiom}P|UwSnC)c|p8v$pY# zYr}jlBBvZpfr;u>#Ol+GDAaT_<$Xek5=D9Gc{2rOWF^8^ZwkQZpAQ8*^XkyA{R%Ig z(MB9qCLTS;#)xC3EbMQN2@Hu3OS?_dVI@WPklx}j%-8?O48Cs;Q(L|(Mc!cUiE;e^ z6{loGAt;KC?wf$Iw|B}Ydl8XKUGMkuvLmueZQCEs7@+5;4^;^$z)XBq;=9@ZfNoBo zs!cFQEO|HNQ{~EG{-JM%!Ou&u1pXV69y0q=esS_pbUxyAq%PdzK8a`sR+0bdc*6AF z>l67JoQU*zqYE2V3)VJ%*l^+M2^`^aFsaWA!NAAJpRsODOkU4G@2m%L%ZWc7Hw1+d z>;ApZ>P#Lo`}fTU^~({kbUH%HL?{AQ>di!R&ip}?h+U!nzj=WEA?0%5E-u7Y`k2?C z#1K|zxr@Swm4I=+^5cvP(+_!n{N#UsmB|rHtMM255u2JWV{4clj1?}n470p~*={4w zJDkx_^iRZsQOvwgu|4nqT_>QY*MEzOt`m%P9I}4duZ_sQxuGU@I}vIBmyOsX6H*e| zZ5Xem5yxW-?XmiW%t1B)Ec^*mcs=13UOhdB&OSG<6} zD{&QlRzWnuqZ*P%$%xdI(qL{bggCn%<{Q&AU~-Rysie|Im^|Ay)#?5cCc{=TKP7o0 zHrGJ?&?Hq@6cp~)a`}U3k`8Vw8ZQxv&@~R+XpYDlyhnRxU%=$}T3?P|DPsG6!Rfe6 zDOA^f+Icf45%HZ}{~J%X!n|%=n;6qq7asjme4}QHXmL_^V9$C)I{h(X&tra=jym_! zwc{wvcx_cGa56wt(JJ{1F9H!s@6+wJxD=@VT5>F!MGWRIUyRZ`eH>8^%sJ@go<|%4 zeIGW4U|`4wdCj++L@cvygoB_O;;Q>F<)y`Z9iMOY-0S3EamxFEyuB&RK0KC6w)H@q zDRj#t1k=mPWVGIIJC4ZfUkMylNr6=bZQq8cXAwsuH~UG)K=d-uKk@q z`j~+63Gx1|=WGy-rL$jN(;5nP8-QeWGOPw%pxN-00^_yS2A1kwh?G0!d-mI9#FrlP z`M7y7qW-t2;(Pf!^o?7}xjkk2h~kc;g4vab^+53Uny}x9g}-&L@c}bL310Vb?T0EN zXD0q*vAm3E7or{?URH*+$M%2MhE!l)2_%FMS|Rr7m7u(+(?}r8rgU`J0de*CiQ0%U z_p_5IKmBPW^ZC7`;g8BN#a0$Yi@b^`H>Ywp|CK;|H&nK~5|(4~-HrU=!f9BH(w4jy z&W5Nt0e?^Hrb4^Bs9$wpHewlEuW{=1d&C*NKB;YM3NRX2+Mh}DVm zPS8{bai2N%*`ittv2BeD$k5Y7q`=ssC8PDQ5S!BZ;mTn|`53z`t(IBOM==T))>MI! zOx<~O)TK7D{nFTv|oT?Jn#XrSl;MRa$|Dg7NdgL`%N(4__&D0 z4)D*^TJ)d8fw}x5Oh4H!5T(FuFe(Tq(1pLBp-GlNH5-`@;sa-R7V|uT| zzRklo5Sg9ui~ zNy)(Cj^81>+@=w^=V`jVSv;)O?2q5dAAo2F4C(ih;}PxK8m;JxIgDtodsA|iK-^_f zIz{u>fRT9qNykS^L`&yn%j03@(QA9PU}TJVEO?G=at?>#4eMGj`02tV?;cZ)ylG%$ zhl=hJVTH8-LO{L0?60K1`E+0$xx~9aJqNKWtPe`n4MnV`2i7_kp1}lfsdLqT%$#`G z{`|lXBUtsXew?sP7m+t~etPMD32|>pvC^w@K%{&JyIntP5W8#C?o|JH=xM3>67+ll zR?p@RtbY8)oPQO*=L_606L|4b-KRW6eKg5p;~{|9I2{RjCC|qRTkKXrP z;UkFStkRB-b2*60nbByWah&M~zuSy|okr{i;}1@%=OFUk|4yuh&=A{(b>DP)8ewTp zBsk8b5V0M=coaq*hP;DUkyRj z%RXia-DeQ>$(>ft2bqY}d4Xq8Bnb(4l_xH>I3czJm-keh>PIZQB+7RzeS?K}XC_WR z>Bl#xQq$71NCelP-EWjHgc7W)qPIqLZE^o;p7!BQhJ^6&*2m8dt`I`*as|V!DfpM3 zXit&6E1oVdQ}u0Wf^6$f+41Kjyyn~y_4$SeL5m!9QqZ}IyKaZ-?%B@F)fA&;hcqwT zDf8B~JAzKIAK&vYqx?R>WukwGapD5O8nb72@#cAAo#T$<#=j_dMEvsagC_3@(T7=A zjmH!S5&e|tmffCs{FTcqvme$3Um%CF>YifUKNF?LZre$)jVN1gI;2CeHnyDLI1&ZD z;ir@YQu7GbSGiL1DT;W$b;x;l$p?b(mCoP&C5?Efxv==w7A-=s{z?30Cw{!>eDy2~ z5Cr#>(nyN69YM`J`aAAnG44_MTVTF50RLJE8)v*={@l3o>N#Nzf@FB|XHUy@m|rRN zAm7{ul|kpjUdY)JloyIOa<&!{B=!xo%1a3Zr8Q7cwv&tC{(Ae7ZjL0>$j$Q|GWRBg z+b{FhJX9dq0(PyWF3Aw&BGsZ(+3E!Ubvd%y$qc3uV}yd z6vbrRd*Yg3r64yUXy$%(qgXIO+4@yCu%(<8a@#mLJM}o`rbdjJ~0Kv8{#_nf#Ai?`g zgU2-L2*Ll+Y3QUbnGn!^_EO&T8lL*5UwTD+6t5)eNqOA7K?tzlU+=xN6^P}#uLWNQ z;KmgCG)Jo}AyjMT$8zQr9vS7iGk$}H3vUVz+HH&>SQhSo5_2(~x=XFGI_@j?lg$)2}M1h-gv$resdJlznf<<&&sp}8C5I@?_c zcKgQ@H~xzv_&wT08?Kw+3S%58GG|M$FBt!D+nz?S{)p-d|C2><=3LyCpkqpiZrjBs zv|%4!Fcq>HM79J!+x!2dzdPU-%e~x&Qiu@vqpGj${Q);5ehlR`iN{0xD~pdurx4^# z)uXkl!MJYnPOh6nH9;}^wNB_3g`nO}?V-Bkg8QXQ+Gj}wwej<>>HAjD+_6{u zWJV088;PI0{4kqgYZm_t^>{Jh@eZjj7W_ef8FJM~xF7Z`weM3W*c(6eXL?fbT)@uWgxSpm`$qpH zmU9OPs+0(&IYyh{-~Uc9tvdv#3OYE9Gqyv-h5h@kZzBkbw|w{BG7W;(b#s$BX#vll zNWSo+Rgoa~SfPx_a?CKe@ppb=k{}7PrflHtBY0aHM$P0dFy~q8<eaaUdOP+y`; zJ58D(!-+eaTt^97b7GwD&NV!htsMHz$cfwcI#ehP?GX#%zN6du*Z9EvF z+p2VAn&4`wF*W<1j+cBx@W7Qrcy&j(DS1$VAaNTA8d`-DT(*x(-~2m_XA4W(p1i7r z1wn!G6Q33cPCR+$f{Yq-??VWhQNW%H-t9XKcZ5{1{u@Uax zwDQ}drk3FTE5EL?As!bS^%RwTH6$pRc(YtvHeTLAwJf_w;8K~?yGQugah=`8mEBtq zUa)*t^Xtocyfm*kroO8Mdfc7t-WO^?-vjx%i#Qlwrw9G||M%q0Dmb~V$q)pW;h(9; zv)A!T*IDmB`>x_Sd!y^@b;t009@>+!ewAR^^^YMy-9YeWT%g1-BJu1q)xTfsit+Qa zy|PBlh#)(i982)-Ap}f9xE8~e@Z5g^wF=mlAZxfR+&CME8|sRrwMl7s!9IDX?&ld| z-Igb7bzCnX)%QrR5}P5x@5xTAY|O@g|A>|B+GLAs%8g~iBqs@exqCmWqQh{D2Mf+t zO(ggaj_Tyyn`v4KLRC7S|N!CR&ICt8*?x1WZ?)R77iFbJ5<)t4o%5O=~ z{p+?#=C?|MYvte1YBxiIH1t`)?1~Crx%I&Ny_dlDqdMoEKw*wgctQt@!7r}Jd2!*h;VL#>%cZ%*>jn=#)P_I zH$9CY;SxE#tp~4l{kxUAyAIR8ax1qyyhd<@Cv6|SaUW8*yldK_Z%EJvS6hr7SO}Km z|IQ`24C0k4FFVP)9D?2Y?0^zw6V%?9-o8OSli)I&3)*ACL2$~x-60#|!QA`C^KMxO z310m-_Y8~>p1xOZog*%Xi+<9pKMTbZ?6HP>qW#|x+yke5oPM0f3^Q6qoen`z4YKS` zKmCEH*E`-~H!&qhkp?O!Yg2H2%3R3!w_ZY^`tix7&O(A~cXrv0cuRu%cSU;O$sw3i zl-YXoL@(~r);&;lF97?c&)5G<@Fr;6U$CTa8YOscrZ-b1MhNyN@$UN1qwo~_f%vmu zZSdkVv;7<9AK@W;%L+R$=3c%$n7;8;DPFF$FhBhI6rPG_eY$UgjvHSHVUbgrc#;;i z_48FbLa1|3l|pwc!LsxH^@!{Pc+JXV&G&0O?u`}av3aov}M$xpUL_q1`a|{=i0;kX?95L~n@AiJ#yJZu+-> z_6ETwAHPMjxDBsJJ`KO*w}KZmM5Uv$Ch_7s%@U{VEIiP%!-aHT2G`oqma^DG2=Zv` zgE$2{&^cq@SoTc$mbS|XB_(PP4>TH`g;l^J0ugoOxx^OrA-jR zN+QQN8aZ+PP{79gGwgV(X~z1_BW5n1G;*&x{*>UD^zn|daw1r1&3BbWd@-X&tX?Kn z56_GAJaE-vBLp5DbCD3rAXv$p5~oPb1e>g|@g#g9*v{`*{a|E<3#X==pFLS1_}e#? zMm?(|xXl~yjyh!$+(QCcI-iRP9_Noj_w`Nja=|S+eP=vDUR6KdBdAJnI0oHzH+YKw zrSx?-U+lySl#Qos)8E2`z{>!Ub`?V4Y1~gKL*~5cC7z9_`9yF=7Tr#i3?f*&BQ7xR z%HqZN^8w0Q<9Mtk`=r_tL%dS4Jam)Phf8*Rbc+5}j5|-T-~I2#0zqN1P51N)zyl5X zGpA2P5_}45Azx(g5Y*Av-`s*Y@wl3LxWoP|La-n?_CQ?)o=NF;_S(0J;61$B_*o_6M|N?Gruo6;+2o8Z=X2l6C?v4 zOZ~AOc;syL_b_8^f_33|nRP2Sp40UXw@&pYI8JVg{%`#`yi@b}LIghvx4x+!NY0qV zlUK`baT#k8RF&>iiO!`k>RLH!b7qv_R%_utd}IJG@coMW@NqNlE?$^kdr?cQ-{h(y zy>lEd2iC55KTbs4KMkx8o~C1ZKBei4YZ6|g{qCJoE+RNKB=rsQe!}hcVl*s%3(tKl z{2a!?i;J%{C#t@1!i(SHL=tEH@#?7uf#$Bq@nU%5YwosM+!pz<#x#w`MS^Dp5)=dPQ@` z)b~$rH*p}SiRXW0ZFeBpXEUvfkG&yiI^FWs$5?Q(Sh-orFhOvn5?79FN+n3TXcRcN zLDlPqEBiCW@G9``y*oP!uc!h+^HL;&wdLZ{2rV7jyvUb-`_|*>$P}^tfiZZvCHm9l z&5pQN@Id&l+x!IS*B^yv9@YfQ$Jo)gezADYRoKQc>Jz~dIHEc~_7~T#5!#v?>+xLn z>muvb^8{P)r8CMV#kfguHooShB*Cvnc(eVNMyxyJmh(v0kYMApq^qpi;Dy_x<9=?J zaNpj;y47u~1Zg#cd&fU_yePh#q~J4-d+)j4QOa~6XjjAnuRV1kNQ~Dt&xBv%F;;`& za;YeS;>T&87_*n)sH>Y`U%f}rE_XMmh4{jt{;^j9R!puIOxiX1^CZD`^0SfJ6F-8? zb5iNzpE80Y{ZojLKnPw`=xG?&V7hGTQ9N_Tr{t?YLGT_^mDKe! zgXKaw4JTgmrw<_; z3_1E|&IM*B<1c)>^s~3b5Hu~+oA)V_AloP%6LYn}^wkw!zI-jbrayXXMnj)qYpZV^ zH0LMy@5&PPq`i3Hs%K=c;}Whd^FAnEW=(K>k{r4k!yvfZ3_XvP3*t4gGgq7#bfioq2(C z6ONsFP?<^4qOMX{btVapiVdo>>+j*VsfVmmVI~Bt&!HE`TSE!a(oOX97XEnRjm##Q zSBiufOMle4WA%`1GEtEeu$|!Ck-qpqa1}46D^93dC*djMyqo~LGqA=Yu*Tx(OOWRy z5^rvB#?$%XujvOb5o~*{g*w+P@tO@^>7#w02~I&>2QDXW%n)I9xBmDXFI{%Bo3)J~ z_>S+}sg_hjkWEwdN7f(4(@QQluUH~xAIQq(*=sZBXzy}Xem)_%Aw&Jy*(QQxNLKoY z{vX`6^{e~DZyF)6^RAIwiZj73GCS@0M*-Z9u!yHQGI`IX&W3z^6xZGV6!|qMp5T;= zvp&7d^q|4G-AY?HaOcG<@%llTc&_*%-Rn>lo;U2ia7%H3p!qFDZdRM9> zPB)2)A8W60qq^zmGtCObx<+=hHx`Zrryu>!Gn+Jmop))&2i>Ct`P^FNRAMl0c(i)u zqVp`Cs5tKQZDu<`^^9xyHENC-m7|91ww#B*I}0=lwkJZ}yQnIYc1c2zH{kra$@_S& z>FWs6T_pI=yQO@4&*YZ3`&cb~eh@<9vU$(mR1vf{mYZLe2IKZ~FHN$v7w}5JqToW- z9)hD%oy&c{G{N)0a})0tXIwVXm__`2g*)RJYN;O85F^p+!@+}aOV`Y_&bH?SFUOWh z&KJ80wiUVkhaFxLlzZA_rQMkEWW62T{Sa=AWAUBW5hhsw`A*1jI$}n6y>O9`EY9@{5KAF5^R7r97u$Kd&Gp~SA^#?zN;#*7h{Ic zM5f&GPJ&-!WR|bO9M2l}ZV2kM$8&xWXR{6j;-wdHjjUOm1X~qHVno3JL9Kf_JlV7a z1^wGUoo>s-&AzCP&e=;)4rMN_nUvz@tABl0)%QYgnyvi}eF~mgJJ9l9)-wJpy*H}O znwucsOl0i8BaD}eLNBi~vPG0#FIl$993|LS>aDF5>+o0>hsKF|LxM}QKllFZMLf%o z?S|%b3BmaH_}^6!{49Gu9{wRqaB-N>sYlW< zz0ua(IMbfsVe8^}fH(;u=QRTdLp6d^Y)LBd^man@-JS>9YC5HYCEn6-jUHtEF^TP#`037!tDz@(>!jpVga$A2g@ZyhSQR*rQcp;Yb z&GyCuUefc@k6Vty%W)edR&SFCZl^alcvXFIwcgo@>X`)?5Bzlcb{0Vhavnc=jzWg& zXm#CwHhx@I9(zzq(H8e}$_}2R#S=7DnRU`958wrtDU;6jT)c8l=DO*(3Orr`wio@R znfGGnUg)QZ`xGgDa&D)99u#K~r9&lH_HS+ojUw>elxr8-G0mJOU!A61%>7`$dtTpc z7*D)zbhCTCkytl@BdwCX2{w{cjE^fKxPIN+egWIyxg(a+T826>v|gcdvL^u#4Ie4w zeRn+AS=^u-Nf7LJ*RFfT7BctJ=WuGcEnZ2T z6PC(8PmqGua(3+JCCJ|nZnB7dNN|u++kU*;jTd`f?`=lt&AmnOJ<_+#Mr3)gUe>!#%Po;FOc)|RM==f`Us)*lty zVn=YwpEXrrG~$`+J9B%tsKTJna%jNMqmcWOi>G~yHo+IPBR)yE99FsFaa#fmQoz>bu+lRL?8n244%eFRFu736(v!Z4mk_DB7+8`p zKyZI=+or56fM-vzFEnU-;{IlbhVxCPc%kKh!FQ%lFJD;`3~eoELaNN#M;mE86Ff3B zobN(#&!(E2Snb1;U!KmVemRFf`N><&T1evspVsbnk0m^YMZ=$n8{qLO#_99Y!-QZj zJB#`iT|D)u4%1VW2^P)JM&o8%Tt9ZM$n*YQy!fa582QOQf+Ov}ulwhd3EDOHCdDVk zxPLjpSpD%SygG2s+*99DocCWRPV0U9E9ZwaUjCkijx_ARd36omI=2k*!t~W! z#}{ZYezN$*i0O8`w)v0Bq22j-b(_o2bgum{J#jXuId3Cw7;f??2{y;em~+c}T{;;eJ4>NAcn+tK` z5d~D9YUfIjn;zUqy2g+DF8?CGS7C=2H&eG;TN1dTB`Pyl!jqte*L1vjdm7X8+%9&` zHNo`Ua@FGU5MJA>URSU0$;`LNpjUdY2$E;x$J>Rk@uHizTVdo0g1hYEV4UwM+_NuB z&LvX|w+Bm#I8`zCWnQ&3#|{-(5^OwAJ|qQ|W64UVAM(RjmLswb_hRq@`yZ~_JN!6r z-d$MERDod4GCCBsX2tZW15)-IlkxI+rOzi0=DF3MR|SO~C)l}7qb-Db2-1%dv4V*M zcY!mf!QOda?%cZf_zz3%T;~B29*bEJcuuC`smDJ1 zj)+^r;=0q}=gVCQcFP~m4S7j;RHJ~JDL+VXEqTOB1XbcSBVL>GOfQ1-o4szkgdM@% zoF?`G?C{OT?>~2QkziEX9ndAP!>dJW zf#4fBRjrb75-(WC6o_-j;;F&%_?c8Of})>wL3X<&o}<6v6X>_ZbbT>4J@HtAe}CIV zoZ32gZ+^bK;+`#p%l!E3R!iW;`IM(*@^?Jx(b3xJoI=nFFP_;g5QzJAs%-N*od`Br z7muC|w$L?P>HM)h5ihLEeDAe62G8phBt|cOX1@QCpG3GZrVI4X=A?8HWDbgCbH)~e zb;am$Hn$|6CU5y&b##yr>=$|KR-;J>xg1TroEl8ft_F=Cem9Rt&0YL@_#E*>^oCZP zU4VZ(?(m}R48a4}?L)clP7~BFo2v2V(**l^lE7)dHi9MVO8=%sCMRs}R=+Hfju(pM zDW6;T3D(DFgcIto5PSkwYk~Pp|6{#7=XtAu5I|aDvpcI{F6pt9*BCEBlkMLT$Ttr2 z-y9N%lzjxtgL9(ywgf<1etS!_#R5T{(0nw>af~3_zjL{@b`P>=d3PPG3c*uJ1z|Uo zOELX)vE#m$!+37ujO>Xg6x{Y}ubBQmTS8D@UNKy0BudJWtIhpB^h4u0`=*J1pxoumg&#~hfBiq@$K3O~y z&Nz33F@@(ol;}I0T_AY4(j+U+oFgdnA9j@)@et$;p3c+174WEm=lc6w&6$4sbrbt; z3%t+}<8AOxg5ct{ti^_b%zYeb?k#yA_x-Cqp>KbjV3~ZfEO|~8uljDC*}N@?V82tb z`Luusp8uT~x9_hOjvrN9H(zdx7xNzIRA4{_EnG|Ki?W?wk!p8qLvQ~+Y1Ph<%v26Lv7sT=ltr| zf;sNI_TAq1+)?S9O6Rx`TQ@)UD=c{oKlE4Hi2PZ3E#Oa>$?@#@E0>pJ#+BX|#9dlT$`g_-xlVs7iXq5keu z*V4HVSZ!atmFt{@Cljtq+jYExdi^ij`^(u0YQ{yS6!K;K@3o6&M2iO^d7OF2|0N1n z3V)ctDJp~5j;n_8uRVgED~3j#$}ce8q2>|)-9$VyvsdMq`x5l7YUy`M2f&;wb%ds< zf>%gqhn$?eFr&wiy!ucFQQJy(s=Yi8^F=b$t))4zmXkWLkwpWq{&%=L*;O3oBy-fC zhIHfcJy%?$CFXF~`9#zIw~Id|`-4-|d`TK5v4mvS+Ok!qs>%T6pF2h3$CG zMMa`|_X{L)`o%HTbp_DlddEKJs|${gwJG>8T8+r;sZoc6vk}|j`0aC^UN9OF5_r%z z4SLFND-P`#gfa33YC(80!JF6=oyFCS1SyF&hU6c(q_<^g50fuf%{(~HEuO>EpWhS< zJ{E_@*)~1y!g0LZH@;&=P?KQEKI8eGZ97bA8tfHjO@qm^3cT6Y(FE7jm*Phy{qXm1 zR%wvlFv0m;`lrETD}wX&L8ZF)G(1pjo)^)chr8Dr`Fe9an4Zy;`=xjkFHI~I?f7Gf zyRsbqZdX@jK)APkSIx;&r$%7FxOw(0~-so;tHmp(rPh4E~$|HmxvYWNeix;?8n8>aq_ zE^;{KVn)y#aUXMe_$c)DapP4cx4k+u%wyPrC*sHX0uHl4={N0xlDmRpmW;}+V zbvy1^r}Y~D_i)#bjaNyCeW%WecD7MSpSQAE8qveO-$!kw<9T7c@$`o7dxNm5wO>WA zV+Pkn-Yw)Am`CiZTV)j2UqHMUpSbUge+je0YQw31!MNFetz__cI7~-|scc$V!80d5 z*twoIhTea_RO{?!5!d@qyEFb)LC+TT&9~4KJVUEo{-RqAvv*2(v)SImBBS@tnpq=G ztDH5O`x1hCPt6?|DriN6f{Zx5B&>JQ$h{^s(@Q5#p$7$pup7@dIV67NDJ#KmZTFyU$ z^>#+>_O|O#J(nZVxLF3zp3F>ocgP#2`zKGWTJM6sD^)fw(cVycq-T8FenFUKcP0KC z>qI1Dt4~=TX}H}wLd|3J4-)QbbqoCR9u~4ciST(akm%=g%QA|ep>%%iUZ#*9u^yDi z`GOUpMV+b@sV)VRx!)4^(U{z%_Ua3xa5Jp3zn0tU{tS^4PcWWwrXo_yg?80$K3t)B zoBCqFkKbtB|keA}3DBebm)j@(TA%J&e7q z?*lWx7-deK7m!%)Uru~e1CO6?kf(3yz*Ro7e@0y|!34Uu?sJJU;_O=I;ybtt@vID} ziKv`~)rgcI?caAG5!1>x4X2BUi%)RwNK61ht7I!o+w}+Wbld4`teO)1M~j2h4v*k* zmIRhen_O7o+gi$^!Gn9;6n+G~B;lz$nTKuCeGzA7(|m408=jtT(EaOVrwsA>0!MYuzek()Xje4 z`?i(fBnSN|{$z$|!zS0_0^TAPp|2awgD*fkFZZ(xLCcs<<+HLocbTBYTP2oV@5IFx zN+*O^EAi;hGoOAjyqTW=qW`#^AatP1)anz@2{xIaprbkaVMOh0+bM+~&{ko0J(Hb) zhDNq^#T7ZYCG>!q9q$2HdU-cj{DcaO76ytq6mEeeg`~6x;|c_orsU46eFZOzZ#{AM zcQ8(*aB6>3FD3*M1ipTsK7xc6X4+34o`L0OD#ES2k%)R(<=l=$UBq`jYjk-_E2bNc z&|ihABJ#Rgd!C3m#MWXv(d}Q4)_vf)A`$){(0^4X%DLXeqt`NAl2STgM6378oG5{N zzMJszsfHrKZL>PbXWJ3`9<}YpBMs0^>|OCP3Pqwat8X9d_<^Xpi5%~E)A4F<#?oQY zDLf@+6!3)pcy$hFb)!KPIh1_cmf06g0TF< z>Dl~?lLQ51Z{C>KMPgmv94pD$u)M`SR;s}SFB|0Me^o_LS{=1hWJ5Z1Z_T+@+(vwPoyn08Rq-IZyv@XNI3hQsu~*%kCisjhEq}%QRTE|l#G^zWVPaa$Jw?P}i)k6Um+iTr@d`osWe^~y|~IX8qv zY*JFgrHygfTM46EULMe}i%WAP?g1T4meFiR(qMj|ZSdG`EttytLVCM{j0C=y`cGLn5S)CLEb5ryyRY$P;IR|EmYc2Wp-X5=xQf#s3IkaJ}a0AtUjak@fi#ssV|F@i$?<2f*09$1Q4vb1LtdvDR|6J zspqMqGh)#nzLm987_si!(yspd8%&*k#wvK=CZ1Astrbky!V7!NsnrQI=-KM?`On-0 zbbq?V`uLs@&?{|qpZND95tkbZDVBes*2w##_4p)APHg!*`SvhD7V~BKl5-cg7JvDa zRTv0!?lhk;-y4Y4?~cUr<`Cli#zwFE= zSW?T`wscQJ`;^<%Ku|X#$$Dlwa6ZFpe*=B4gtfqmRzC&L-h*zTe%76L6`@D9y@ zHN^Al$@VKngNXmlV~L~39smD-yl#HDa*3cQY+8P)p96zGu6RD2d{3~Jd3|X;#fBSB zfA#gY&x69Z%Q0x1EKM{gBL|&Hl&&6A#&e*1HU;z(AdmEq5SxjhZLwClU~OcvwB;`Y58+f3ylnHA1APx2jjl#*v8mjl9Y8 z?uad)_LI;186ndCyh%UxA?~?lM(eT4#)}pywbQci5i9XR^tl=fF7;q)=TvcR6YALWmd=bUPZfZO{)- z?#%xo7A=Zc_w}4T&Kk??_cM>L@2|$Iimu8!lpT29bofTI)Fs6IUAbjJ?i#elhW?WH zx(lX6skBxTDy&Gx-HY~YfrrJSfCrNuG$Kt?p^=kIs5g$olf!N>V3HfG8RPe zf)5_+chNv3&(n`(Q{&jj{m;4l6 z3^jVEO|QKZB{)ON1y$0r5ZSjn^xnN!FeY%U_U`g8)VvK*n(zC`spdhah~_3Pr7FZz>-Fj{4>v(8-@ns*zcWl5=az|B8N;&4 zla0I9_rP@et>G-TKA5OjTrxpT1o?DInd;3`h;Q}WwyQ=o#Io*94^{mX!E^PIgZx?$ zqGgy~j-z!TE{^*Q`u9;NCqJy@pxq~UvM5@;j`4h;Bb2=Ym@sj|M*- zbU?g&Plazx*o!FJwMVbjeZrF#i{1ZjIw4_d%NMpcW;V`oO=dS z6)A??r4+=TczMqIiychl$JhAEzrn2)m*0BJY{kiB$(^iwGjU_s(5Vvrc7pX|+ZEM_ z<9Jf`9G^@_6Ji_bdfK-CJ7RUSb(cTi0c$RIesLE&hJ73@x+7& z=jh@o%#gpEZG6=o|FS3$Bo?jl1XkiIme<5<&je#)$_rrfaCTn?Js2+>yE^gh&2z-@ zwx)Mx^%&05y&=V!XN_1c%_OZyo`}-&UnjSYJuIwi`Q0QHj5uwwb~jqAB0hRS37i^Y zdb5_Z*n|tBZo}R?{}ke)q+1@J3_5TFwSOp^DvShn_x)3neTB#Wj8^O^)WVarN}ck~ zjRcqZ*TpM`TM@Y^P$O6)0Z}uLUGN@VhbQ-Re8=>+ctPx1?=hZcSh%%vK6uOt&m^bj zaD~ml_#sb+*r7Xkdej1Qh1p6;vC)&An(6FNM zTY!;?DjfrIyP|C*A?#bYLjBe~v2SY{AW*-O=&PfX#? z{{Qyyv46y~cA6H^T!IAk$q(HRk>?1*gOm)J z-?QV;+xbKJ@l7pU*L{hXjra*apWeHu^FD|m)wERE-JFL-xucWMQhp*TWzO4*?+EnN z@<%#TEeRG4cee+0KRnUITe7)s7?ED>v8c#+fcx(W9(Q}o2J}~Sjrse@h;00+xAq*< zE5qfoJshl{Dtq)on6U+3j9gegbnytDP8}#LOZEmj7Yu(sp_!L>a_NR3aCeAdOa(v`Pe4GAS&3(H7-I?k;h0j_LRP*S_vuA#}g!e*tdqq4(*-eV=*g zh&{x7kgq@mmRakDl$LJ8k3x1|qdsBWUB$hl_4;+(;_6_UTpR}@JNF&eis!;(>vO-f zpPj>f&Ju4J4S{%MEML)oIEP?+{x=pmVuB;jV&egiaXjo|(3i2@6)*Fgq|b{>AuhQ{ z_W++rT6{(wYYjAD zAfNljskY-Vr>wsr%}E~#E^kP@O}UN7Y}TsQNiqlf;FZT~4y~`y;?hh;1DI>d?>KRgbp@j;KrGhgA=gUy#p3f>VE zYbl|%m;5mIVl<-7l^4=7dM`W_5Qh2dU#{@Bhaj@eln6>QK@_k4AInPN1j`Y%SNp26 zaPOms8DBk}p`*S>XzkH7o;aI4c||%L@fSV$`GHLacOQ@26>#S$qEtP*NiR{wjqZ0c zb?PJ$+t>T&M5QaB{+OGR;F;o^ac#5DGtt+Q zgvdQU`pKVd; z8=gko5e$Qyp$oWCd1arka4OW4*iicxwDO4T5hgd&khS~Ps!vCc1 z@5`WWL0q+tLT}dh!(y;%mDJ)hpr2(ClwUSL?AMYOMGU(UKYv8fa>)j$J~Vdu{XZwb zCU;|wX}KcG`5*V2d9T65*8aQsXH^jIyMmslVp(`>4|&5kx;<_a&AGKW_zt&Uz~m<; ziv&CS)oU$D>X=cbGFYe~1D3+`&8c)nwKV(~*cUfH#1 z9C4Ee)>Je38#mS=(hbM0TaIf&pUTn!PjWY&S=q3CB~le8Pcnvs-fbsn@Xl328|N5!U&E<-;wd}X9%vaZ6178XKT37xe5S%s#TcL8PSo$CTfTcsP`CB7LO-*4}UaHXSVv!(Ki?QYu^ z%ij(oazeRpNO2BsYvRq?bFm7sh4Wb+o6NzhbM4nW_NT$(vUq~{i z!m#wZJH`+7pm^=z_%$wn+$vLbNK|qV&*q)rh~2h^hXMyqUi#vVTje>me2%ce%xRX* zYU=l)JrraM|7AZV*KheAPoH(Wn%o;nfPZB)gNn2Wm+X<@CvX}Ld zyLeCydj@dsB}kIdR%+(E5vl!$Yr(FMFw?c6L~GC$k*D^{aM8ONMpm3-c5 z!|6ySuavvc-j~DQLvF@g9BMFDwS8>#p%lz0&7ZiWAcW~frq&_T2|gYE;I?+a!26Kt2}#a{W0BG%(Mvz|&*NMQ0(Z)Kz(5^x#0PX2C#*pC|xZxY>s zX!(P+_h`wuex|RwwI~sqnkH_}eLqi7yy%S|)=eT2;ry6mSu^mosPo_lgz&86ON+!S z`*81;H{&NI#Sq^gWP7DC8v4)q=r4+8AsThshC(gHGlJxZj}fYfW!Y@xg1sSPIoC9Q zxW@_gpu-}mLh^C6;Wd}vJX$&SM;`98x9 zz;cTuS8AIn61XDLc2(INW-it4m*4Unabrq5s#w1I$0BZ@%Nu{Pc|&KS_?^z#Eij*8Y9(TvkEb#Xp9IIT1P1i2BV! zTVY!$UQ|D~=igg@+)f=m#d^UG@z=7P5&G&6%lMa~?7Rj+(Nb@i;K(6ZmL5J_bv+LY z8={F{{hJAvb@gpemA>QYJDfFEB5}C){kHn^H~bO%-#2@IIi81V0g;nG+Z_?7nDRtH zsV`zD2|V2MmKRY+E4`dT_9OCvmQ}6mBT)aGPcyB}gkUR)Z&mo&gCtoigZ^E{h}yXv zT=n7`!MP*Z!7uJ1FjBvAyT25MWj5tkdt+P>>%r<1{4b`VN7pj%_3%+3@DcpGQ0o*R610_y7|F!c^jyD=s)4?$w%3 z!^1_dg*7%Q;l8x157k3C5&zT&@j|XW1Z(|)+U~Vsf>YgeuhVD%o~9_(RHc#-`(e%_ zF}?^E(;_+62}wf3HdT*@GUa$)!Zust*DXB77hHI~v=>H5g2`6--Z1y}2dS5{oS>@I zMz&nN1ljioCVr%s!zg(Xe>^gUyWDR`J$c3Soqa3k?lA-i3O~0~sgNYH>`85d!67uH0Ls8HmSn~{dPne4WJ;lO9(SZ||cU{-i7k!PF-c9p$2kV>;Kb z^SqiRh`%r2^}K)$ER5E=NHx4b2?33=)425`rA1Cc$U2-6(XaolKh0^{%Rmek|Zn2 zXs9G4A<0fcWh667LRKQJVrc!#e0b9hmb=pftVBPC9 z>EEeJPI#zfqI1g(F|vlf55A0tHgI4Ir}(i7pk7d|l~rhsC*zeSeVT&YX_VRlDo z`EGSg*yR-UzKhEkU)aL>^%-u3l~ichlk%M$ycf2{jpN^2NxITA(Bv} zVX;6OZ1dg}3wk<6;m}_2k2T@L7Ja5?OHK8$wP}wu!Br(}@ODebQh7dN3XD#UXMBdO zxY61Nr#t}n?$5T@82Vr|;6L6R-3^#~@yVs@JRtIVUqw-6JvK|JJaK5_E_9~STktLt zun9HSmwA*a3O$#W#i574u`2?I+c20D)$laiA6xlinz0t?DJVak5u(DqY&f&aZUw#W-|)h+*EL; z;u1UZ%2L`D+aZ0f-nXQL$k}DaLN*hKmgDMFtdlFk(fuwjJD3EUb+$=4b^l>4AE(_m z1q2YAn_$n1S`6aie(6Qi>kgZ;e?3c*+F---9IfpbLiCl&Tf8RVfKF-17$yn0%t8qkhiLcn$P{wwAUsf(e+rp}h3C+YpCOW_zU-V4- z24btbY-zRE2Zo{)G_Hp#!PY?omgp2-*x19RcQRKWX3w(7z2#s;d{&ps&;QqlXt+OI zXE}8r(LL(SSR3}o1{EI{i}9r)LX3>xmVgYRx#@UR{g^ql#}1mZ@CO3r+%1OA8x@H6 zDzlp3-#A2;d&4ksB?D_`Q$!1z!iZVrp6Zem6V?DvK(N2Ocq-vJYa(p$rBsfo9ire( zgVkd8QhUkLWXj`3D1}_9E8)HS2WuST;&T{Cq|g|+pXohy49#)lcauWELFHAGbP$xBH#W z;^Ty9znzerWViwAN{S!Hp4nrgFq?VuEE{5q<)TmHIRh1hPwCTpi7?lj6nLJx$K<(H zGnY#qFju^huQoc0IM_{=hB>n-xIt`LazK(o^3NP@sq=^B^N*PB%{#;Dcv9+CO9R9l z4QpMFrof8)OOxzbMr@R0aji9hh!}62}Ih10(Jg4bmb*|fe;vkHeusdEp$vpt~@emERF%20<0jt7iJy3bSaU6T7h z#xB5;{4R@v|01mYk(9DgRyxJZN7!0$1V?_#aSC3d?bO}o-`KiP z=jLrn8a5Xf;4>a43nQWGKVRIw51Ub1{V|*l!tvSF}annPqV_b;sl3eKh+uRWT?3Jy>Pd98xIoZ;14-+E#{R{ov z*nzliunG^eKSKD4&0|I^SroP=17<4Xr3NZ#uf+GqCUK}hF_|a+NCe*VCeoB zGs(dO;h)L>OCpp~I8<3>N@mVdXim2M%Z|E@RSM703JD~_vcaX?cZNK$yK=RE%%L4| zI9L~@vuYqRO}RF$SQw%?6_L;J_$A_T;L~_rjH56=n!MwBUJiCiDX#Awl@RTH;I4TKn-VICw2bOPj1@_7s7Myte}#?gd~8BI52BrZ zK2E04#{`;DFnVlM!Me`yV;6-etze#fy%l;>7Q`H7+F%!y8~8t$?{X)KJ1h?Z-HlI`6(1=-Yj1`ts2g#KEY3N0LAb+s~O- z>JRTh%(hDZ)=GU4TgIBK*(H4n;qg6F_U||-IrW*F^H!iF3Mdlp+#Oq_`P4W&b1UPKK#izO`s22<~Kc@zP7`N&e6;( z@#w$>#TVvOjxVOW_IB{J5!Pn^@O?m%Higg|BSyJBhFFh1sA^h7Xb)W=`jRn^SXZyT zWqTt>ecq0;yfsId)0&e5MKU(_=E$PuJ`h$%dUZ@#sa)yfd3O3al{4RR ztTiZ@!-hFqbw!>BVtE=q0(U(Dd7%@n(2pG z177hj$CwZ2?d`ipT)aNZism1K)8oT3bs>Z zozoy}gz&Lim&cBuLWIwa2{}@3&?9jBlDVxmtXs*3+%ngN)y-jvL61PhtaWW*JNXRE zM|fXn>rjVIe!(g17C-bp<{X{N7=oflZm(YBsej*vPD^|tHJ3VwANIMm!;Xzq`h8S| zSeY)i@x97IY+rekWM(@N?OQi*dF?H1-~tvBDXWZV`pQ!LFb!c*{GGRL>fVez<9dX+!L&WqJBk8I4i1wx~>D;9-ggY@- zZ03@SZShLGdwX{ynnW2(!#l|oCh0Lr6FXBxlyIu`(Z2=rA(QMM-daGF+e=TrN_|8> zVO_}QZ~=OD=@^BlJJ6nlPBH07f5a+#srPgZJ+!?Nkd>4n!b-^vH~$6$Sk~nf5Bl#6 z)*VixTdvPVVb31vJW_QFHdHUFow1dN`RiEJlUD>-*I8N${-}&_tKr${TK3pZr>~aA z1t)~_ya4+GW+;p+?wUdBY|!KWm)ldG36T!?U0-C+!M;2$vYE*5L$s03VF7e?h@AE2 z&3}dquwWfoA>U1bqW5lnUt`q~L1%h-gzh(D3pV>rk!eD#0-|F3aF;1WrM);dNe!U# z?aA($Fet4pU_{}mQDcdr)ws z%AeO&=g?li(B<#Xzhk|n$MrQ%@WOobF$UAE844r51bE-Ja#-0?m(PaNNz745>7|Kr&G z+2e)H?Q$LM=4Hd?a;gN5-1CPGD~+x&7{?ZF>l->$WWtmpOJ}u;B!yGvcIt|s6nv+B z$rR8LgZ(_tTc@>dirBAJTl&W9P)HMsZ}lZ{uq1uta^IjDBD(JKvWSer?on({6xI!c zgY#6wy@^PP0hbl__)!=vX4Y9k4r5(UO06jDugx9#F5#JAVV=}&Mtwlr>X zC&sD=>r37=z#ar+Ga|ne6B~M9{`}L$9O7MAsDIIW!N3AG!cSk;dq0Ed@;z~1c9me5 z|J5~r_abb3g6RJkZ6NYH&0tw^0a(dD$baeT3v4D~&;5|Anur)LN0!S+h*12X=b30H zwr4{A!Hq0;YOYFI zyWQr?f!2$fT`qHF*sO=`eO>_#M9cal>#lki+A|Tv=}hB@4T`7_Uy-qa`Nwy30w(Vx zd`je<{-O#*-rkXKDvp3QW2a%`AudE)bo^BBG&f?34}R6jq>BxT(MdaRS;A~K7fB}9 z78Xuz=RfEFh?pg2IyLRjB8F&JfnZI3Sma%*6=>7P*6AV>I5{$~xBilfgb!}ebj!7L zI^`&$4KVCXF`1#zh-K+rjog7TK51VI-&=?r)Bd@5As8!SXn8kM;RwS*x%&=B8AH$B zNh8`g8LU`+V1Y%F4l!lb>g-jzi!F55E99Ryr!cTRcTUuQ2+PA1iwYMDXcv4@SCJr$ z)jfV9wRg$}G5m?SMmoX)OKj)d%D&?Ijfl-Xc#^bq{w9SUxDROa$zzLgCM}l|24T&{DDZPnH|)C6 z*nAMw#AdBu^#}7(y*Ft2+ga@#3f@o0%^e+qkpx34+wVGvQSIE0pBt5v)J7`)_@z^b zX9;Ym)*8`Xup{cPg;DTV7PQ11;t*$g9q+M+U5I>E<;N*oGTOK7M1SLl7i^v}Tip3p zg2*==*LBn5C_F*I4-Z6_L481>m06WMj4W$fg)}Bn$m9R)&+m`G>LTu@bjtN%OUtvP z%`5K_p3u+!gu56KBl9ckGqwfiw}hjJLtD8K#mZVqDM z*`E+EP=PJu&NUo!Ife*loBrD75n(4uY~1+q5H=J2x%KQxepmsA)0TO{*huTx(bzOP zSj?gOH5z4tn5tNR@ka5ZJr02z4JKLG`im}}Zu$f4>)xXL7!qVTk@eXtj45A;^{LsgnN3S zL?Z4mHlKGZ*Umu|;jRr<>|`Ios^#QkNmXu$)_`>N6_s;VqW2csb+8~7or5=tukIs) z``KG39flCgRf$urKQgd?4~2z8e(ECz?qFB%uYT11dHJNDMG5Ab2@!)Qr_r7}E^W(w z8HlmN%<#<7jV&vl-oALT7Iw_<>srsbQE04>MqWP{2TKQ| z#bq4zu)(W+LZ%c4#Bgz#{At4iRy2S2YLIpiIY^H86PGdci`kv(OHf9nyeh4(h7(Zt z<0S`q-z|i{^IxQZn_Vb>4!Z-`MQ`1s*6Cq(Gk^G9jV5;mt2d42Yk03tHC z>ac#9fSuDH@b+;-6z0<`MZ9Inh_2uAMyfRr-|O;#McVv$kFq=H zfVZ)9ZgUvas64|B@7=;iOs}<{v~fqIv*k_fItQ`gH(N0qba=EUbhWGP+9RyCC;e2b z7!f9W+h6C2KEq~(f`>KtXCwR|@o~`V7$RNjicl0Q#fEz$WpONeu<$FBpW$c;R@BrI zc!CE99hIJ&{W~LApZxX2@&Bm%IrF6G)6Ew!xp+Q}V_n6}=_TkH z|8Ljjmo)5Z8(3;&3BZKvf2WJ2V_+wYzwXV8YFNHJbBxF@88`x*}K`IQS4totCPo6cK>YQQuUoEfK40>t>JtZi9`*%*q6U z38HPQeI5QEH--^R??2lXKpbbLD^{f^5mPCA0rq`}oG)_4q3j1X5%H{rd4K`B7Dk%Z zk_IU3X13xX2kWrKlT`e9zyOs#?-vV>=D_Zan%@!R1#IX$h~4T@S=xpU^u@>t)pJL}`i*8w&dpnBZ?gEwVqXfD z$2U7L%F71xO@YC7)t8`uB~;~xh%sW<h+6Uon^iV?-R&I*YKCZy!~9`0^jIIfMOr5j*A??nc3L z_?rwS^21m|;foh@-w|`!f2NYRao9Ls;_%{+0jR`{HFUF#JbJ$&$j}N&K1ewZ*TQLs`bZY6vefsN#$PZD$Z`q@;9cgP_ zGAn}EbZ*E_7^=e1`4`s5OtUE@QAf64XRl(7zH0To);L&I5GvaE&QHO$9^qt562?Z0 z_3_Vm9wJ=%I}O{^Y6>CJYO;2o4Qm`o@Zqq)LAas)x$mx2{@GvI?|x zz!^T?L!ptKNf3SL3NxLzHNEox!tTwI%op}AvCb31?qiQAQ18sI?@+Ib=x&eQroXO@ z=)w+o%TBvv9Z#dakKM^Z^y*KIY*iYuHfFm$CHri!8J?rWI$s&Y-tnzktyLBqP!Z{F zNB>~MFK5X4q$PCkKgi5fYlKbA;aK*E48fYhP~@@yL;%CKTs#UW*qBXjx!9T)VzgfI zzuj_&!Zcec_hIlYwkRZ=d8RWFmY+Q^Jm<^^m7@24eAeNCoorWM@445Ay*OC4nWzQ- z#P>5KHz^@<_<3(j9(u&a^ny6_CJiPnxsK2dX~JT|;;T$v0}9TjJflKF4w~E-eVEtG z5ohH$Jqw#A#BlU%d3q`y+D7$KEB|@G_VG`>F41<>p8c2Max@0kNERO_C$7NLE&Ws% zV;oi<`Rcn-XBw6*P;gR~XAasgg)O~XalncaPsi#r#=!DHQA4c17DgMsm!B#PM6`Ys z#^z=>3d8xrRLSt8u=N{>RwO<}IF5TwnR@?G*bjW3`k}**4f<(Z%$H@L(A}Qv&=F@q zq?k}kW7%x1n!5?(<$&D6$tc{o=x?{$M{kHfFUCV*k(Dagp=pH**dsXoVKO2hZL%^49>JE&L zZgicEc16Uv!>5Lx$YDYBC*q>TDX>_@epIpT0<7Ks67jOfgF@7{{?)lp4|eLu=|R>CM8OT6jT zN8>1Ln?_O}E-xVxwskK+rw0+v@0V@tS%X#P*TS!pAH%|}b6?8mH7WFYUpJ~-j#C)D zgulGs&VWfjy}PjlNi1DKQ1p5t4z^>ZIE2DpA-vV@PrgtkSV?aUyA{)pNLRfc)v+}o z8hw3ziq!2?PAL4kzZ;^#?#4@JVL$9&T^EQ3&g1uo0yISgB z_zPS9GDX|g6o+V@l&!E%Iw3A`fl!XZGl-q7f2{D65l*hqSu!UT2DFcBuSRlXn{IpBCGL44 z+C4b#ZL&EmUcC|?<$V@0k}FnVe+I(y<#Oi5C&1jGvGqQE8|;U3#r>o<1gkKMnEso< zX0fjQG9v$A{KVD1yTKYTA1Rc2X80ObBN_gSmW2l~mhYY)%N&8N$NuMwCG-&6KBK>R z%fS@1tlG=TooW@@BRw7#38%q2?Yn3OVo{ z#>DIdYmYd)B~-)^iMBLDXFvm1TF(3aJ#rY9N=v5{-|8aL5jrOc>j}i|cH;nUuPW^N zdkAA0NwDja#@Vve01H=oMBXr8L?ptAp%{ENwiZ};qcNfiTbeI>qjW_c?bRXTx4kkE zo$ech1>X%s(z3KaCD#C3dUd}aM!RD@rjeT9d+T_R#42 z2p-XSb*pfYny~F4uUX5A4TLMa>Q?-l%BkV!1}#TFQOHXlcB}6rm|XtF*O68X9hTd< zdt+h{yA1PIW$7)*NuV8+wMay){Q;JnCEAGH2alOp?#I@1q|5d^RmSSVxp^;dH6fPR zEelf01gw~E;Ad6v(0`on2LH$w%)PHpFtL9Dy^xstpJpARi?_4gEt#S6V*ele500>~ z*=&(?jvcnN_Pvfa8Kw|}#tP&mxvDzC}BYeIYvzKo? zY*(2|kCX_Yy({uMR_aNJ{7bY#iDHR3_;^%I+%*uBqs@Z~AzOqGcznwtd=0nU&8;46-y%9dh zdG+ME0z_(hDs|(7AtG_qrk)FUgcwu><6NJ=LyY@-q$9mV5kc&{kb z(VZ$#*=(~%OtH_EijGh{vn2Oca&JCjVE%o$#7YsdhPef}R1_m}=KSEksjyX1dsuA60?u;7?lW4mj1+f7^P)ON z@_Za3AI;OieU3royaTej`=24QOs)ViF$$4qb3c0+eMC65sy#~k&LOtIrhrSe@ zMg+Ri49&nK#Oz+;Z)%wX+t_Nb>Q*CSY0>ul%_)rtg@P^)qBjv;jSFMJnmZ!Dbj;K; zOhyE?m@Va0PDC6WWjk~H3T%XiFYLcjfoNqXI%~D=BYe4=E`!J;g!8y6v3A=D5s!%G z{l^iFh`-3U$-8QZNIFxJz)g>6R!?K0-!CDubNFuZCmrH~@(8zj zTyLp;3Dy}dh*&1IAUfJS8?z!hMC-*`<%T}VKqXwN7j zenc~GR>NRN*Oc~T`yWKQ6%<#5sDDnce}{5*FQP5o`{ayC1EOb5;%eJ_0_I7a&VLVl zL$phu{}XneL(G1UNd3|W5sB>}-D+J4!vA`a?p-p6a1B#EZQP-VL7G@L+;MApAVbg|e9UdjaKU*22sr6VB* zcGisHS9Y-aRQ8U+tTuK2R;JYK#bIk|DuP6>2}>u9wF>K=A-bCprgJh(h+KIq`^e24 z*pUv{Te3?%$D5Z}T-ZJ$vXND=y6$hp(26^x;WCF<=&E0S;B!OxuF1mXU&>)O z^$$bzOYvVhYo;=#MH|qf0LS@&*l*e;~`)@?zJa+7KSvw*e zw>h>R+lNRZ@K)dJ4I&D*RO{_2KzP!@&t8bypJ~5q&ilMYMCs77%*U|^Um0bXB3y(R zYnl}w{$@aIvL_^r3&s(X2ea(RK5Fh>iFe`rCQaQ#{K$hK0YsmDPBeSd2oVnnvt(xf zKx_>axnoz|5mClW?1<4mMAzvjXKN9U*topIIp&8Dfo0qL4zoLAN)B|6bJm6(52hgj z!MlhUbXfSj`ywK}Jh5^>O$5>Ocm6q1eGW02F|)mmzJq8|oKi-lI1x+7zEa8&4QgK4 z3o0MiLgeRP#T^-C5l*0ivv(U1qv#fqZ&n)7&fjAUc1%O;@(kGTLvImb+rq@4i4);$ zi@ZKR5Jor#pLWl~0SKS=&2_Y3hMJd_L)LRC2=~=gPe9iX(P%`54KLav;^HN3Y2tIl z@W4<`e@P!PY4i45E_J{TQ%#=tAxT89la?=%IE84%zRz%X86)ESRfT1SEZ8}sd|0J= z1vZzS3Z|L(Af^H1w!EY%gtMr*T`RtVh;PaXx^7{Ju)p%3>E~ob%ebK~sb@vaiR$<1 zBl{5fD%&o%sSP6X?JaD*PecUU>7Xq6b;N2K5u=(t>-PET#)y1b zhi~RUIimls>=OQr36-a!eRLc}5dB8o)5Fz)ur+>BN~A0f(bw=8JSsR0yT`XW3tyzd z(kkY(`)Ul)lj5$_)jmh`U!Pmv4{<`|Ny_nIoFroFd^;VxR|nx|ynYJmnj`Wh(xXEj z{;+fWjyuDzL`3$#e`%Yx9T7Kcau`jQ5SfxR;1=Wt=T_&e|m(Ee0cf5A}=Ca*?(bq zJc`JM^vgPBDTwg#QOo(Hn}}@hqO|YwJ4Be?bAP|22qMQ)M2e0uAbg%g$49dUMA!N- z>uvrXMDy1CE3J+#wGV{nB96X8w9sRq@i zlWXIz5s6u{k#8v*(fQI7FLVDzY^Tn7`X?r8si*Fxcv~r(p^Qh`m=~`>G1yR-K&U1q!E~ZW)17>WYIKBTG&Zr zP@cP52J2G%;s5EWxAh>p>W_VRWIqK$ppuwnKH z(OLez@2*;d7?58OFQ_1nvvSovO@XlX8m~UecLI^t?h zVtj%s?rDfDa<8&oKopUd7tY^VVMc^S4c9F%3xxORse7N#j~I@IJ2*~zAlesmVM_U5 z5tEoGartl+qV?|4Bo>`S449tgk#E#}v6s2~{c#Us#kaSzHhCa=H}TY&{9Hs7rSIYs zdxe;D+2-Sqy`^$qBFS`=1Ha2T5Tuj{5HZr%zQ|LKRL zebfIb2f}Vj#y@Lb)WZ*2qO&OBHw%riZ zCBdsgjVp-po@4jkqF6-C{Hv@VYL4hVKOT8IJ5JsEDJP+Ydx%x8O&TpUA!79Rdyf{L zBHH6z%*oeUV5gL}U7SfD;d@__*wW7;ykoYO$eAoei2n7?%*+KbvRwKq$=8L5&t&c0 z7e66V+Y0Z~U(|e6Pz);M`i+>=INm)e^}`@$?vIv^%{Pe%^!1w@K@UmyRJ2Qfts|KT}3jYuBu3nQ|d zh^|EsKE9?y^onV8KbbGV?!HnsnPbY-{mhCwkF$o|*WBX!((h3D@KYE*Qw`CtNhKtt z`Xk0GwBgr&=^%#X_5DOQs+WILO5t;*@{$@4rpR#=;V#Xp>ogoj1hcEg*>k3dbgAUq z{m-wdULkx@Ao&<<#T@_Wn|2Q2Mm;H~z6>CO{?)7DMW+y*IsX18*IPuxJn??=zdeX9 zkSI9*r54e=>FR%ZpXv?udnSc0Jf?EAq+9OJ5UjX&kz`IwKmU48$v`!!&B$3 zrXx~&%Y}+fRzwGTYi_YJBI43r&Eo$aAX=@B7#%XTw`(aH%3^q`7dU%e#RL(4-uiAv z2oIvEEcX2RG7;9C_`c0L?fZWpIBar-BRW>+4&P{cMC#14y+0s~$bu{1de^fMJ~u(^ zt^~DTXbd0;49|-w{#8)!O~PL4@}oq`SF)7ts~@ zS7y#VM0C3B#tk3x5Q*{U+qGFw*!uT6xi+>GF)`Fn{FQR0z8^ZGwCWASDC8K6+8)8~ z2nSu7y&oc^JYT;dM?v`KA(J=r;$f;jX7Bk9CPah0rw?8jLyUiosd+h$=sC1&trRm5 zZbu`sjy)PNyIJK5dUhhhbq^AsU;rZV9NIOY^FsK;@9`|xrx8^ZgpP!|ATsO7O23yf zH8(h}6l@M4(ig_Fl}EA=JCFR_pK5JHs(By2B=3Pp7;n$XV(PhQ-QapZO`Vr_Pc8a8 zA0W~{+J}Dk24G9^8O^`t!-&Xm=Wy$1enbp)kh}Wa5#jT(cS@j!7)*@JBX1f;}4UG8=^B* zI3Hg5jml>)L}|3XA%dqXTmHR%MECk=+zHMwL=>MFdLt)^aBs#|Lb1K`d(iU z4Ie{y@yS3$=sDiNIo?mrlZBkEFH*2AxRGfoXp6|dRvX)X>QkRXhj_HQnws0%PB|=8 zu6=l^6}cQjbRF$0A}YyW7z33W<=!fn7k_J_&-t03gpu#|% z2jl3u6*}06c**S@Vuonq3%-B*tbrJ=n`bx=mmvnI$K=_4IgRCb@ z5dIEVm;P)IqUYPpTX9WA3_HDY9Trlsb1vt%gcOwk{D_vhu0Q@j3}OiUjijmbfGZM68BUa>`oDfVYeyBr?9Yu6zr+O!fLlZ%x0BIUz!rRvdSsF`})FC>+HEE zX~ooDT6{Cre2VJtKUKC>oT<-w?x>nYaUdc|%jLdXzKKY7k1nk2zlrEI_zty}Q#}@M zAwz$V%0XA7Mo9nJBGN{vI6Dn>A2un`&wURfeBD%1{LdL!uZ-E3C*+8TogR2zvtHP2 zP6^Q2`h;-$MZ9&|RIeUfemguchv-Chx$S!IBbw&|cR2qUApC!i&Dai>A^M=vma^0^~KDhqC zdh;D(y!PmEjGZcC{qT4y^{IOh7fJEb6)2SA;grWAI|zC4tCT}$tum7 zAcnZ{cV&Irh}q+2L08NqqNM|o+9ej)*8TdKPmtPgd3%JS4aTUvUp#Mnf)|G!BcjpCkO=osL?B)`_a6h*H{)xv z#BbCg`hF*9zj}*0Z{vH3xr&HX@~P^$_cKH|Su@qoorM_8aL*k1^APQ!-i11SB}6xY zGxxddM)exA6m9vrU7hE<;m{3c@)w521ot1SU`mIb*pkb zBVv?~3ZJ4|Ky-icS9da_5o5xnqV-oN#2B#n9Q)md2tWK;_K=JaQSVaO(dXP$KiCju zu=79+CMOCPhSw1tU0Y?28#^L#g=rd=DpT{;nAUQu7coVxlV1;gBP;L2}EIx);B%(yJ*9A$HnUg3YrsL=cWkeEG8tc1$-5KHF3w`e?J)T&LY&DY@$O zFUMhO&aZwpcbq_k@6MiCc2qwNJ9znrrZFPj5Y$-Ac!9`DpHr2_BoOh)ZFQ!h9>kKw zc}8w<3o+dp>o~}6g=o2oEX_|=B9aRSdE&%#MCwz`-25(s=q=O?>egxyQ}t=O3Q2xM zj@;2-I&+ljhnSDsSSq4dWk^*!+K-6b_r3`wnjnrvojkic^oW%sfA2>b^lzdE5@eYXi@QmoJ%0_NS?PX} zRQVFod7A4Se6$C)kK24*!V4pIQQYB$7%jx`%D(?Sy#}HWe}|GDe6w$xC#k#Nf9->X`4H#||L$oz9o=xSy5NXrkdU)3Vzs`G@#g@JR5x$t&;O=-M zI?1?Bxd?CAd4=PryyHf=SA7ySD?^CI$oJ3BF>1fIwBEcQTZZs7%R_K@iygq{P zw&rs(1xKj8ev@Z?FdO0SZIfFAOAwRecdpH5Z7P3<^X!+-hQ%M=Z_X$yAbetEn$6L- zh-Et=_ud#cqEXYA$a-IeNKcZ4(ngXIb2h7?(rXu3JJ2i{^jQ6`}^jIHaTL8k39{M>y-9CK(r4E|Af2Z5s8ylZ0(X7BJb>fP~!fU$`?`w_Gf$$&fok;Rzw|@Z)$k; zUs8K3^i1hLw-H1-Kb$Ki;etrMTee>nlM!Jp#wH;s2GLp{7zoSpr}{?dX@!A7#Pa3v zg)4JZKFC{mrMVkV_37M07F`}xpVYeeCD4cZF|H-tI3F=SI2TWuJ&x#-1adyT4502~ z_jP?O8$`1cDILr5g6d;|XW%fE5AdOsmw&7g&GN&V_beX}-QJQ%*h3>&oYWENeZzwo z#GT8ktPddOnKPy}WkrZ_?Qk2{>tV!DOFMb_a|U91PCi+~Muc`&zFZND4Oq~j6G+(; z1eI^JgI|?c!{o9}Nw(H7G%DtGoSJ(9f8=A@IWOwKa^DyE;x%rVcmJ*Oo#`SpVzuXP z8hnOvVz>8v$7^ivumt5^Ho#!0#0W0mM%U_@OS1h{|iqSn7@z^xltnybI(1P^eX+ZjEvE|tq;1; zE?J%_OJan2!@Bn0DcM+)$G^RAP8-39x$xw-YilsEyC?pz{0~@MEs;)1JdCvr2xJE@ zb3;+dP}Vb+Ehs9e`>T7wANzNO;GOra4|ZY?vR9I-VDPC##FxJeSo6`C98ZTe7@II} z{3zrEPD{E{CvZ5dUPV>t+fPZD6TUgP_~b64f$9m2=RGWSQRGa&u3(L71p{4H&Ip&* z{62292%~&ZH4^g{hI-}KYyDUz%xP~%2tUk#iK2n3#$|++Fa?>`c*#KhS<$W^Du-d7 zhy93I#C;h1a!jy?x#x}5a^7BZ6Jbox6oSRFU z&w#G#J5D3hU0CZm6TuUB9xUzKML$an2S3X{SJH<1!{C#wi%LaYSfgx!Q5&ZZeE%TU zX*!+*Gm8>t>=P#uj#0!fnBh2#Ce(S}JR=G9On-LkJyfx>=&Sv+=7A7-r$yoDPg59A zE#@oTGC{b&yT49LB}3iw6u8qF0#jGhnqOUvg4JK~BZhb)EEfp39?Q39lYtxbtzL)VjX z&b;RuAFbcx}&3HcPJvt6L#o9!Sb! zE%n=CgFfAe=FQ9dr^AP_;WJ-at@-}JqPR}T;_<66*8?5_YgJfF=HdFhU}_O(>OTD3}9+`R^9pHU5UQP79=n9LgA8;7t-X9L=nvqP{U7-dXPS%CUV zq2gP|55SUp)1$2?N>FMz-{h;wg$OfuitxtrQ2OeJ%F3fP=$G$G5qXgcrKPJ39Mpc= zj4QIaozwyyoiBP%``2Pq4^Dr%kn{?xWRCl&(^Ckwmme$ISa`#>qv!YTf+Ns>%t>8o zLI6f+`hTL}8LV;itGm@xOIWV?em%^3i0a9NE3(#fSOcY^$L;A6tm*j98>h;{uxQ!A z<$)q#E$@|fO~5=%((I@@E!4p97e^VpvOn13Zj}CVavmZD_BW8@vQS-HnW9B#!@Zhq(`e#gOF5ub)}*GFgy;r72>hR6E2NVk5(8N!5Oy{y10 zHw=Z?5$G76!jOfayDR4mR_<&(%G7rV>x*@AzH+1m29NSTSD7w`{;%V)V;WWP>Bd1H#WM5l}W*_XYKbA1Vx z>|+;(xND)wC|pHr@hmhxa|>Ne)Q81OGiUU-bFdEUdu3zQSE1D1sU{$(1M69||2Gr; z5i7SI|7uXe1N{QKr&#`DK;&1~25WGoFq5JgG9d1VWw>tl=SzCPfLVC^`1miFe;8!G zUE7B>ME7*G)LQD_54mDpC)!;g1d9u|2+}bqymPobkV?a`}I?? zg7sMDhQz@``_ix$yyb1$utY>tk7uFL^MeqQCgs;s!YGm~j8`dxxlS(Ut?jujw4vT)r7GjjU8{ej5C0xT^=U0VcDL_|Z zRO2RWUJ0z^3vq@CC#^Gfxg)R+9*0gkNW#1Q;QKC!4GPqy*sqPp!!YCC!-s0du--rU z(vDfXSZ2o8qfd@lLxV@YtgEFs*4#P&{f?L=*7q=e?1ACdz!+BU3N@9O8= zI1WUc-qd-3o(ZOIAC|n?x`SwsHChPy{=|AI3Pqt;ZoqQWhS|lvyD(#Su-7w)4x6Gq zHudH;6PAA1miSg64eLMG;=k|d703~1pW@?)!G>;s{@GLB2}@(uYO`0W;BO1ti)-8A zSZ5UB_5+V`SYY*+R|^+K#QeG(y&Z2TnP!(({?G+;%EK0~Y?ZOLI}y@nJ|$A;ecX!s zI~O*7|Ji^T=^#v8{`|Zz=@5*qj65k5*MZ52il3bA`>~F0t;fS>Xkqd#6MLtw0knj@ zR@(Pd6Iu^VJ^AxZ4(nN1N?G@M2n%SyEFm!=%`T=YS6;ID<8^ZjZiMLnoTEaSGe$Sl&Yp9{A4fm_b$Hx0cg6Z5H5Z)BH z`Gi+s?Yp)|$6Oh<7V1wh3*&~d+!RGHO~cA-zI}712cl#8)GUOW;ith%anxBj7MLv=II*o(>(E5Tiwfs=F|DG z;59cCt$Z6B-g%y1RICP-efPE*mwv;NxN=Yi&tKR!Qy*!p_zE2*Rgu0Y8nM>#|2}>c z*TV8Y>wILA@54qi<`ijW+M!%lIPBPb3zU?#To~w=fr3H08@zZMSg8+4pVf`SCKA-! z|5J;G@{1+vPdQYf-$6CaK{O1O$U~oRP`03}3)8m*Jy_LwcifR@0On2?yZd>mLAFju zV_E7Pef|l3h&a0pm07_A(37(80TTuiyI=tUY_Yz%{=H3kg*ZpX^k@ z)JRx*r{8l}%lv3CIqriEsNMQC^!qqg-+rpMej@`L_+v|mPIQBXzmFFqEidqR=}PSz$2PE&hj)#SN=%OSVNIvsbbTPC!MKmgK`W+YSe@*?$WwR_ zdKVe`>IVUSu047|xE}_i-iI}XOJ@N)=idInJ`kG<%v@9_+=IE!XnNN(-q4aKbamK& z1-e&K9j*2rfi4wtdFcUmSd)0OZQ^4BHT!RwtB?0$gJ~5(lomypllU5D=KTtL_s8ea z?H&X}^z%n6I4{H4q@9LnjvRcl9&iZyVyf^j z!c<}4tDuZ*=l^@uLF9sD2UdSAexIAZG|WD8sej>U4!fF~Wj|^4u?E=(FU$@9L500u z#0d{B=ohoTuzO7ftLMC54N=XoQe7wXZ+8#O`+wAZ&EyFqmr~_bUh6`K*vEC>gl#Nf zH9=9m5zyJ2_ouUBC`HMHE; zA5x**zqn`MLq4Y$N=FtwBE9Sk@>jfO_!SBpAws0k8}2Zw5qI?Fb}`KO3Ti!D zTY}m1cBc`iB7ENZsBE&rhK&*Rm!@b#ungQs8BOOtSTg&2w_#8ho5?LK<)0CPG0xBN zmxXhn5X+ao?Ia9+ruF0EFXN!S?b3Nu%1bD(+->$oT`-Vcl4U4uj5U-7U3nZHh;Rj- zyzcmDtn~4c-}^tMu-3pnlcwwe(>LcGUM+~gV9~c1C-ykNf*kox^BI1~>-ap&=TM3z ze)X^Rs)&K+?madPEmhcLr*6kHJu+7JG**)LP6jMr8FD^6odokTKP8|3WrpSf2|@=? z7IZm`dK||qW9?efbP4v|SS8O!Aa*VownBd#WcXf*EhHt*qL-ss^J}SDo$C8g&*t&; zcAXBazolqou`6R8BfKv*#KNGYp~=nw^N01#17~Jxys!xoUMpI$Ev(6Ccyq(#E&NT~ zv%YtC0md^AxZMk)avaChhrI_Pp+6XV@kOT?hO+<5jcpTys#(|BYzs?lz)I9Ua{NBl zeb(VfRMk8z{)!DvoSA|4xDeq}S{8`r4$lDVs}r#BtGsSu-$5AAyRuc(Jp%*BQ`ppQ zoPrVeeCA83S}6)?4*$fGII)yF(v3uwvDPi!*7-P5+!#%F_Q_Fq0hQV7CI`>u+#oXmoCiwmCu zYwcm+hE(8pu`(ECtW+VIY(cxHGEZG=A-2Gn+CD+ei#A5h)1Nhq;ScN2k=sin5FafW zdU&1=nhtj;tVL7#Gii@!;REXY$XT}EdQW{{rQwBLD|OHi-f{ow6dB=WWB;8wybo$f z!3kz7{4hoPt8wW#KbGqK`^vN+_52B)TR-mHf?8Uc$e?ELB+Ottg`755}g_qpD&86tRXIoBz$J zAA%wImg(&6IvD<1KAC^Q3LB_f_!>DN1;e8U*nTtJfthOp3Au}<@W)If{*etLA;Ae#auF;Scad=H^2JK@2rB|NNk*x%TeY=w23I|AgGVVD$Y zd8s6Q8Yr)-zvZX9V`Vk__mMSYVCZh`qw70{EgJdNpLjHj;Z03WIw6Dc8sFxO0OjvP(8Gdie^?fkIbxnf)Q_BYsQ`w9y-!2ulp$_vJ$t!k4p#PW z-L7?Mf)R1)D_8oquy&TT;RvZXjKY7>v0CL5EGyK1E!PZzd1g16g6;rBcwFLXnD2=V z?>83MddUhSV+YqI#sXo^mUXOMdJYCNTUM-H55x9Cr|)cEHbxN^v?JY9hL)n%)hDlW zU>81-xe~Nt`7LW*A!&#D{35@P)pbHudvWlUmv^AgW^KUlX$3aHDQEu4&63L5t5F6) zL|DmVLXIdM5hGb^&Q<2Y;7ubgvsqEB@$`_?EtrAT3ktVBHFm=2?RM_Fck^M$Gmp3Y ziajitE$u4_iGi#k{Y}DadDy;vmXBdT6U*itVe{(Xfu5_&$B0%_(0ovEfTv@gdSCRa z^^tT`Z!M%z>Xn7oO13Lj?><5L-Dmxy9cwTa#n8a9kqXr!&FvH!3gnygUrdM#gQp!fX0FWEe|_VJ2y(%LH z{%MpdbDgVzm6}Kf_4#6$NIxIP@YNdY=TCYUJRb->+?UFW4~0Rl>p<@3fFZ2UH@7v3 zoCzahv>A)3WiZ$FkJZE21f~!CnmSi)0pD$CgN}V|gQ0!=CjK_LSZv6)4O( z7uSviJr0KPTb~9(f&*YQq~mtJ!Y$b0jJRC<+5r|5V(*r4HNkRvQNl(umD9#-uI;%W ziw#KYe0Q)sihcW_)cfHB1*WuLzB!`&5k@}*$ipRRn4I;ln|sI&6++^L2XwR$@ms{Z zb4p*Kq)DD5Ji8Re_PRb>O$);2%KF}AY4$+7evrz)K^>TDx);C#FJMUF+*P~u37BZS zv^a0Oh1H3x?e+XU4-<#$8Tz;UVQAtEoc%5cEu`mhWlZBR()l|pAy*4)^laf)#b&UX zOI{KxDQ{qGBg0=vOB>cxpZYyNYygXANWmV>co_Nk*!}pUM=;qIbfl)f6jrthw0f&7 zVaqx4!Yy_#Sl;ukV2tK5)|H?gt@rdOq7w|adUzar)v(dcWA1DGdRXO#>i?aydD8#6_{|8nqW>`b>R2KTx@-EI*5V3hj z;_mKqW9)C+fJJ3x4NPb<{P6zi1!dcslHR<$(6OAgLApNzn?E=mZ+0Dmt?}V^aSb7` zcznNE`=_H&TpC|+?wu{<-XM8C4$+1w*1%U~4qO;T@sRJLU>J0g!SI@o3pT|0{PJ2!}CC(KLxCcA1{L%C;Eu2NkpOm~Gjq-gWQa(zD!@2hbb&-Xa~&&vcB@Z`T2 z%d=trbBfbk{|#8k{gL`+J|D{pcP;txy$0HQxO!Z#m0|tQ2fjYotUzSz-7^MuS7FYV zF2qD(4eLF24!^oElx{Hs!UJ>;bht1-Q8cLxt*<6QC%W6e^q zN$$utd%up=YQ1CN)=z{w1gf7`!?1>5tC9P=EwR6cwJW%0lVPqQkgKD*5UV4+xXvcC z2K6dh+IkO-U|ct1HgF~#{@%6nI?Nsq%_>0=9CAZ2;2GjY_&WfLYL2FScizARr}m#= z8aeFWvoE0tw4h9zwo3nyIV?VXb^XV_0W727wZ+LxMzE}Zx<&VV2sTdpV^sfv1~dnJ z54v2thz)F;TBXi9!_XP;U7JQ{7`ZzWx^1M6Xk2*r@Ci9%lx25kyrV3Xi|7ok^Etx! z(Rc22nVwj#w^~~C(>bgwcExwXQwUpZR^YUya&y;X{t%@#I+!mqy3TXB1M7KXWbh>1 z2Nvu2PNZ86!Qw3gOU6ZUtUfW-$m-5{DzC?H(|`F68Lrt)kz8D`b}8G0#k&}Gyp61K zR4rkS7_fXXI|?Rbt;$a>7Q&X_$rF@LN2*8mhsMMw!pi!|Y(GI9e7;}smsY9{HrOT_ z6NGr7j5+<-B=HNB1=HnMGAO~4op{;Cq!hFc&x)3*8A7jAb-apyKMb01sWMvi!aVoo zh_}ieSp1V#k>#sC&?!r^6O$8wwf0y$-v8JFoi5&Y>3zyzsy|P|244ytfcrTi+yaAd zG%f9=m0@V?tKJ*hK&(SSvqLzE4krIzFOjI5h7mS*mTzvPvCWg zeu@cut7oPg~ zC^Vm7aB2DEfoPJG$foLp&@XQ+{EY;0(%A~fy@56mdm{P*Kf6ry48Etl1$a_fZ0 zz4|;4nCQ5@zNw%E8~CJJy699GIyF4NFL4+;aoR_7mF2NA-OnHG=(eyDIeYryIu97H zwm4qtyn%2cX^s(lYhdwygagRC!@T9&2XZ7fnEy?>ZvEgB3`Bg>+nP&*CHlU9iei>n z{Y;$uY(XkaYMsen_F;#0SusK&Aq*C+3TK1v4*^A0szbd05Y$~MdOq=5A2uI9)%#+| z50e^a{#C!4fRz?fT`!w9R%5*GpVS!-<*uw(FDc^?;nuZrxr`R9$3up)KCKTs6-B9@ z??$2THKS8I-s7TJ{fD{9avy(Kc+VAhM!yXj zh3cGExT=IrU{ zWd8ywp!NHMQXN!QovqkNFSqM4*2j2pl7I0Cyd+6TOl(kK zjp%GTqH7FeX#r0B)nU+B)21tX-4(`roa>!6#GrENapIb%1Pt@M9uH)o@=WHW0*kEz zEYL0mF0a3ba%;XQa=8Jve3eH^g+~bH53wj*mivv3eJ&Dv7E zEfL`l2tGIRt%LPXy{f9;tg))4H!{ao+Yk-+L}ZJ|RhS%8;PAX-1$i+ypHpy4#lyP`MpuvGT*og3GFtetJ;nlWoFTaP8@s~7 zm+fc+#VTyzz<>AI0(fEJXqIqx_%B3rf15&l!~?VESp=3+v|x2K^v|C;42I2X!xb;O z!er0#vGecVBcj!VTbY*+U?DPwWrN`Y*m&%>H-kc~&>l7VBdcl-X1)^h2tB$m!6!FT z-L3~KK^IR;mvTd;tGyxcr$GQ#@LJsy2SXr{8F+M2KP7r zR;a+k&L%IIYtmtDHmhb1gAPSBosY5{ZhwMI31+=%U}sa5zD3N%wF zk1lnO!1&G4`;2OBSTD~H_3h3hupC<)BxO1ZtDgj1F0;tP-1uPpSi^nj|Jdo0ZvO^W z&AYF(AC-qyirj>v2eoHw`Q+MDe#7!>)8qPO%CN?J#X#kHEbKg0QgiN_f;lS*P7j4B zsCwaSR`}N+Rv4_Wi7%ap3P<{;Lg6;Z<$M+-BdrgU9|^1TAb!u*2m*0B#eEwV4S(+pUao*Sfp>DbvS(o0B<#QcUOa?;jZ+uYJ6&Mq z)u}~Hx&@Kdot|$pPC*3+z3LYWNkpSdU`Zd`fdPGInbqoiSPo+>h!Lc~oEG2kSy?A2 zvh}@?dZr5oAL-I5+6!V`e|y6JO~k<3`!$2^bVHcCGW(~{@d->t9{gycfnbcq{?ntb zX;|_x^G$hT1S@=UU$?*1z##w79ej8dEL2NA?}{03R61EIUOz&J8n*&jTN39)V6F>E^x9G+=Rc5j{5?M>IWxGe_-XVK!$7 zuTs{BWjq|e`tN!jtoRO;UDkODbBABlhaY9s`-aF+<#bx;z>!ic{mh@u zV=Fw+7iCzxSnGk!*|QBF&CG&6M?(hMSK81wU{(CE@+36f-}7uvSP7fDf45Ae?;lJJ zQ5G06M(C&2bNS$?25pCRwly5^SWy?-ZI!+uZ1ndz?rHpem@?W^{q_7KtXqjL?d3Wh z{7i0T&@S(TNt3gGPFml970s8I3&>OtRO}0T=6(j&gr7@m{Wk@>wxWfBzQOR9kFclX z7aJn+@2ebOe2W;{G~a~xFJhHnl<0#aond40Z-I%s4_0r=Z~r1(4(4*qoOxu3(Es`| zxQG3PRSV;xBeiX?`Rvr1PUIk@ROxwMZApWnrY)a;y}Yn}KqS8Vxe3g_H)pQ*V1@~s zZ?E_Ytgul&@_X_XBWN$Uc>0p{QRo}B(b-^Fg6-+;!D~_3F!VmU=~}KiHt8}`tQI>2 zGiB#~{A(YEj-H?4BUgM7=@?nvc|#r+Pp?H^{?&!>Wy^fJ@l!B(hCIb*c?IG6KlAiX z?!~&3sya3-s9yekq{(#d2@J2AD6-@x!eUmh&2GCq^gd{z%%2Q^k?WVA59W6wdfDFV zXDV?pH^4k=n~sCEiyGot1vL<-t(ua5ArQuixBpv;Fonf^HqJguwpjXWYty?f@>qwm z+9@&J4k~wgd?u*sAesXe^maXepg$q`7gLNP!XJ0^=KGP0h}7A;aehB6-Azzk+ZPO@ zdlVgJ)Olg!?TCQOoqw=?`_%H&kwVzeQ2ySvRDqRWvxyw3WkNVLqYsMQ6j%^lK6s@; z6?W{Hjt_1cAY%QCq2P)EL}Zw#-9gmc-{9EW!0C$py`jlvnez$Oayr<~`iH=R*06XU z^HoH4SuU31tAXqfvNzWj^;M|9O@+pUQ6Xx@$jXxq9#`yX{av>~`FYhG&@PiS>{p>#T9{@AL z4kcWPfoX!yiwj&Qu;PLl85J=}7*xMIpW5>d<{n3UqzNiO#0I{{B#SrDy3;GO;2#V_ zxARKH9yh=c>1vIZ>0e12~1{-v>EVI`jSNG{yVU1@2<6}sQ?>=BcFaA^@61n^^y8z2&+FtORs68 zhxJlksBwf-VAgGUOFn1?8uvN3ek3FKca>|#?K&F_gg?3Qcq0el);gzX>SSP$!@KJ! z{Zm-($8{NbN<(kp$AiW_j4-rI^3r{H28hH!091zN(NLhxJd5s`>K7~=f*yXr;+ z);v5{@{lDN1|Pe-JXH*YA#DpsUdt|MRm0!?2{EvAyMn)oq5{)=1$!zKT%mvSN_P}} zGVI=bP*u#uLG_J@qeNag7`XT>W#wJ~)Mu^)ZR*Xyf=k$C=OIQIS7d9+^WuS_5(OTG z2n~ei&u*~~+eJ93!S^JlN6-ru76G!3u=3{SR=Vt2SZ8mNxESUHT}Ktz^c2W2Ev2qW z&;AcO^4$cNVs9bh*3V+g=pQhr=0Eb^HCGrdx5$X{NQR}ud=_^T=doTmw!QSc?K0sWS|H)PG1Xp4=d>xRsEf!V5s*-z5Wpk zSXR0nSMo^^8qQ_b8eOCAx3^H1Pc7BE?|FE|-*^DiEd|BO6AZ9;#H5z4Lj;xu@yXIx zj$#e@k|HlZazmZffuDOBR$!QylF*{V4BO7{-E`kJ!zeLzustjnwk~cLS0qKjXX`Y9 zH~-RLUU}sHfZAtR|rWu9$ua(eU8<{2uVKuMW_ zWpjaU!F(&2Q`Hi!v95%Ee1U{Cp$FlQbdKdI2f|j;$X_}SA4J&mH7ow-8f@|>n+S(= z!}bTdwacV0hVa$}ao90`#J7sihk-9eSGICfVa#|uuE$On z=IhfsNiVGsPFM9$@cL}m7042u%c4D&9Df%eV|Mz76|LchB2 z59L1-h>);F%zq#RyNfAW42nL`*}y6_qoIeb6_1#HK7+x8#crF|qzs}__|>j=?;ea9 zYSsU{SBzyFizxlIqMmb^!f^PYE;Ku#^yMBhY-zZV-1NL)$~!%zOWFnPz2|UvH5uv* zxpQksRj_tGNj^tj54M8$%9Xqn!20*&?xd=mg0+a`B-`dt7}@*~!}9zM^y}Z$4z=Qf z(coi4g#I+DCmZ$!7C698fkdcVh$c+A_|+#_Gr>^#(le*GRQ@FNy2<@phE<^_i@d2d zQ1U|Gyh{oPi-h128dV{vl@e&))Kh}F3%4%J965^(i_H{&72ShP0$mfxqp*=7U7z7y0^6TU|XbM zStx~w=Zw-ToXplRJ3IHwR&`iwmbs;rK@WWjpH(Wn5u$l?;olu+Y1rkS*m7k) z2Rp*oXB?Ch5e@&^{(!q)h$bqd`|H zy59n-ucfE{zA*&ZEpLLWHDh3$OJ%dHdIYAk3M705WT5GL#LS)dys+{gO}v3>31+qO zpVR9l9Q3=ce3N^siik~2*E`)V!|>kMTgh9mFp98ydBsO2Y@;?})&ABN%z3d5<=c!w zllrmOyF>igh|le5QO;%96g8BHp|ORTy~I1a!6VoLy~}fB+Gtq5zbvdZPy}s0mpm8P4`b+A=%ET400g8Dwj7zX^a5DkZQNUlO9Ea{c{y9~U7jroiu-$VDPH43Kq&bDov-h}rTz2@W75jGoO zy!c1!5_As~Vi)$`f`#vUl75o^!tS{L`>EDqtTtU?pP#%utQ`E_?!fBQn- zbJX5xvSz*144qyf%2Mhh*idf8q3`bXFlZ$$Wq&;mR^*QGCk*7l+-j}s(4{LdZz49d zGOUa6H=RE`6ZnO7knWz5R8@qw^@HK#)`hUumhxIFAq3Vt$R%lt?l7>|ZYV;)9+ruQ z$LyCiVZ&D0;RNjeLfLSZeDIeB()G>?u`W)!S!F?znp{B z$7x1c$;-l)xYGiwR}<7YS$*j>ruxz5OYxeweX#k8f9NoU4t6Uk+-Alzh={)ZFT&%i=*7rO@$VGT|74u(;I(0?Y&b&72X)?znXMP5_)_}yM1qwg88@VuG) z`t>Vp-c#~}t$aT0(jUJ0;lB+S>R8=GN7E3kUBJ5iIRmH?33y-6IfPY6-58Y%bcBU% zuF&fGL}*H~bKL)13zqCV2Qs|7vEfg)_K*Ha!lcAYL*e}yF#Eg40JVQXxXq>I)r3Q^ zT$6wE5&ui9e3SIhoZGzfh^oWg#Ee1tjQ9|ws0E3t{}=AdFfR@lkY z5%axL3d8&f0vaN`&{z`vfF{Nq)~+?Ym!^>ZPi)T6`bD|Cw zo?JLGr%L76!Cqierrd^*++BR*9Z4?i}522+)y#g#OeVy07A^@xXALZiA* zxiBJ*T>ZQdHwFvZhIwWgJ}_^cH&jUci5T}!58baXgSaZfl+wLGmm-&M8B4!Q!?J2-~34GbqT_sOU`}Ncn`K7 zIv>8x9gN7d8_j9f0#t6{+WlQ;j}7B$`}khs8X>AN$08JDyH725bNPs^}ld z2v#SkvAAx9)tfw!ojpaJlWDe&{g+?CN>IjV6X6ETgimKuy*D$r!-I?Nfy3 z`k*lP$xxUx9gO-7pDulP5h?^*jajGUVM{bpqSL(%rZ^soMio7QDIW9SmpTU6=;zN% ztFhGUh!+j|mt2HK6{(TC_2MuZId|9^ykUO$zu7&#&WNU^dUCe@G_^+sl1xX*dqf#q#D_Gf5p7^Rg&=p}?*zi{ zWTkn3vV*zvYaHF30Wib08WB6n1{L+gW15quh^E@N6AyHtFn1>D)v0gt8HrQ~rqdh|Bb6@m6eXq~qG% z@mxf+BjgzzF$B96X^Z}QieRT-yS?`n7nc3nLn;5V0F2K1d7SgAfPV3JY+8SvVf}=J z+ux`Du*y%~JmflqrG3ff{1elLXq-ftxxZIoSr4sGK8&HjR=`zX4aq845Tcl^MRFoS z%->3Z?}E^DAj7G_Hw*gEjc_K7E?9V7`bhgRB?U$Zhwla75r&PxT(;Rm%YG>O=_S^6D< zSxLP&H3ueP2V>3_J39i!;Z6>hU5~&JkIY8M-Tg3guVyp$+z%L#7<|XNa}LHFd7l**5$%^0JijmwHsz*R`rkc<<=4g+IL4E( zRu#b*(fK;qxe&8WFOZ5IzrKtK2jXDKvn1a*0)z4QLR!}^@WJjzR+7=WIV`xXrGMqk zLA1A)H-&xn!d!6g%K5|*=-n&0yI+&o`Y0?e4wAg9r_ojb^`_Kx@CaZ5t zXri#mPWm4*qaO9!(8Ft zj|G{oi1h0@hvmam*w`_-Ho8X}iY;>@Gdt*DM^5+r<*0YCk^Ft#?&dvMtDW(5v@nGQ z+5XahBOjr!WVo-adM|7k+~P>P@)26gqmLUU$3R_ciE2!N8^TK*viR}xIbxP>8u`q| zk8nSV=GPL9U@?AAI7uP~;Z~jPkAIzl_%|Lq0_}k?f4k%M0k;f9mYt;=m->ishdw3Q z$e)JZ*@1>>WHSkJMdxHD(vb@IxRG5!kD;T9R1@l=#_9t z`K56ewmT0#**kd^;mu=wkNPISTGjX#bGHyI%1zn;?5ol)al%?q&?>fn~D8h68H6BNs}e&%=1BPbpMk~!5$SD zAx+iWmcgsQ}_JaGJX)r7@x#wgJ-h?IL9nvMaldydIKgnO*BUC?ddAWS{ zC=C9UHRCvy0;_ngxp=txznd=7o z7AnEu)82BEh#Y{L%4)PI^~y)VO-$0 zzDI2_*3TSEI1H4d$Mc+PkEFbGEI8}CFc?-tg zoLR~JK<#&!zUvZ34+B5%9xOUm06S`S+ZB$#sQ&xS;n)pH7)TZvQRYL?_UPh!yOt?f zg7oheT9Pn#vdQG`H)&X1PIK@JrtVkS+aGoIH84=Fcu71{8zuypIQ0S~piRnvoww2h z(eSwPch9Xt&)h<9DcxO|C@}vdx_=E?n(zgJ2X|oM;*AO2Aa__1$bBl3Nsq;q+|()Y zr}kn?GxjC83oDkFRVxcygH0)wScjiM&^$fZXL~jP;a1$GOF4qE`mFc*s)icaSQfjD zkb*2sj33eZY^DU0$+RMPpp_KpjoIT zQXwD^i(Cmd!FuksAoV z5W?zgEJQu$tdv$2dRTe(nRaGD71m_vR9x(-TwFU4rd?*Tb%~ z_hGAeql4~)HEbPjwIJ(;B5IxOM0>cwn9Y^xK`BNU=5rq2ulp7j#(r$B4TZtnr(avO zJ2^0)8hj#G>;x>*Bz@#_nSsR?=M#^x2-sC=86OF>K)5r!*1s2=VPMwf{p(Eu*jCTz zYw@yyf0g~B2m5(o@yk)AreGiFZ2730V`2vbp>E?0CE^IzP1iGVLk>n$2Yt_eK8nc0 zkt^ElPO!}S_M@0$2rT7?{@{`Q04vNfQb&u*5kWS;%rAZf;T9Nf$={@UL*U|7G<+X+ zYzt2PTM~lZEST}0zZJNqGp40CfYY)|+^A);R{ z&?wx4mFQj9y*sNgg(v736i*^rvI_gs{C-+?Z=|^bXRAmuuwqxek^MWuZ^h9aT32Q`nd-;(b%T-vrIm}WK)&Sc9<$50% z1z>YJWBKvkIheUl(mS*75-f~2sy=CngQ3|y`rRj!VOFf(>bkx>EZleF(-n+|)*4<7 zl|)@wmk>RcS(gTzF~p>MtJbh-ZmD&_LK~Kz9(=s|pFXUeJl9p;UJNtGd5UcOt6=T zxRYqdSpzowJh{TZ-GpWJ^Z>fq{QpsOrtwg|Z5ST=Qc*%ElFIfkBviunL`g^z5{iV7 z3dxo|NhR4*b|ML7$u4gDmVMuiF&O*UciwqF`7-k?_j6z8c^rPsz{o?hJ%ckI=GIq#lN?P|ij1V_*OO zeeLI>>?2{}$eBtJ<|vH%*Bs|nv(vDh^KS5y1Q$l7zm`RVtAuT?7Xc{;RWKUL39i@N z!03AVejACL!5G=5U##jyz{<@J^UKU;l>7a`B{MKOz{}(n$r_7Ix{)4%3 zKBv-}SI}%`DDWdi5(aDBr0mBpvj6qsV6~L%4{ebnj9BqqW@e;?C84r{3p1B6D&m3z=f)yNEA~3iP0}8= zES?Zl0_!oHrJTo))GHYE(;R6}r3nmoZ2wKa16?pJ&8^Toy6gNL zY_O5{2$ z(>E*yew~7u*E;;~6Ar<$OmJK0+aL-DP2^?G*udU@jJz4i@fd@?r-;$RCm4<21d(m2 z5w@Rlw6Ps?ht>6dI_o9<_EU{2ICU72`h4!* z-CWo@xAf?8Py>dWrBU{zeh6Elx3_)n7XTqJ-!WB33-GQFhdqe?7`^${X_X#zn95|u z9dbScyM3=NqJvgI?tC+UQj8C_#N{?eEfO%C`u$j@jaAq%+A=fx@Cx<@^YPzx24KbB ztpBieA4W~`IrZSzPZ%}Ci8`=8`={$6EeMls0`uSV2(Z!M6BHblhfy1FWS?9X15(@D&Jouq z7 z5qbbSw+*6>bZ=t}BLP37{Ka5B#Dz+b;{q(Wt`r2X^+Bty@V=WWhOn_qpOLSHgEiBL zJtw2*uzuoMZ11^~ux{fQ@x`7Dn}3qOC3Ka*#+UxnLYaCP?n^1>{N#^Gd*jyaWptJmp(e$_uE`E7WS(jI&G=^-9>RME>1@Aa4$TrRGm!;hIkI;va zEh;b~tAAPZydFj~wdr*9<1A%vXJw2zTVPEzp(WwdE=F@EttLm@7*>|WGzqsoVO3o0 zNdra=+d*p$?Io75%k9k5rY1qjrMxE}e7Rw--EKHw@*a>`ELc3)?!fGBm-)|@b;|sG z54=yW23rS*)a)23`N*r6R^GsjQQMYuO>S1embd-jT2(u&-QM@e{(Lhmu(D1169-_6 z=lao;TduHCN89(7a=fiC$}6g3RWKe|&!+X47Z%QC&SzDH0?|V%uWdRCdip=6_3E60 z2|1Ez7}W{b6V2m^dGr78xfT?7@Noq;{T|kjKFoogz(ZZrVmTN!Pwpwz*dAEjR@l7a z+z+b`S6+NLM(MwM?BXHYda%OTZhq$n4=gK6Pi{Skg;i5#;lWIAj49peAe(?AhU3p9 ze~9eGs6v{Jx3q&{bG^Z0?34t|qP|JW_etCcpx4iTdx8%R&wY{KX;Z0?~1W$u=(6Mt~} zW7OCEC)pnPV${wV$vUSW!@RBVNe9kru;dbPMMF3RqY}?&`bEr#E%%nP*$F;ad-SU? znYk2*2xGZ>@Gr~&LqNR0OS;wOYly&lMo3$qmO9Ma-HgTmwuSXJZKl!fd5liY_2B~x z%JbZnJUjdPF-9$SnLXeTf;B@W_Ym**FyZj{em-Lt`uoTB$$fXX?M7*$-P6>3HPSD0vY8N8;l;W)_!73rxu2t62E*E-okGirE3i})P=JcgHL$jV`o8F`yOd&_wpPpsDJXy{I(5Cc`;@^ zLC0XZp|VisSo174vvqn3TY64r zNvft4FH*WaAvFjK9Gb%5^34u0^2)S{`#c#K^`UV%QugSDqCO- z*OlMQyrNwHP1Qjcs%Z@OoMV^$;tp)cvX)kqoy4fOTQvWjr##2BJ1!yTPr+s`o9(B? zb=Ytj{_|6K9i!R#s&tZWm(p7=T|~%}7&Xr7(~-OqSW7HaNLaZJtCd|2p+my3Bcrv? zWa&7Nb&mNH)eJEDK~E+IUMX0>J-TYOF-75rk(G62a|#E#c==eHz&0v-yGxYBa3^dx zo2eLJi9XV@zVa)^q%CRvT(cIIsu*X5f(>CsR!L{{v@C2Ze=>4;k__vEPYut84RZLt-h>Vo z0uIMWBB6AyPXd=D8<~N z?Azh2i!@}IKYh{d!h#KK%D6lA9zTngz2nzhM2BFah`B!JT`(oLY#mPKyrKB(y&@}t zE)3^!GL8OqA?$dt5DujSY*=YsY6~^!eZsi50BL^qP8;4 z;e%?16u;k+I%psZt7@9_+EExx{u|?3Jb4lbaetRB3|n9?FUIX%egy0trcbkBl7}^+ zK@zoC3`|)0G5m{96A^FRwR&NG2 zz|QN?VRh7SJC4`Sff2~F64~=re=*#~+sA&sM_@N}^Z?YywBurw%J< z`T|Tl2$+O6JcL#Gf#iov+^}hMb=b?65jIuBd_Cg(V5Zx7AMwWkZ030d@Z>0AR9(?+ zjQ`wW@l-@~gP}e~T_L46lwyxDt?FkCKFh_Z3jCRF@=&-u_K(U%vJ7kzCwHCsZD6I4 z*V^S0BW&o=Mn`W-!y>=ek%DSvn3I!AVRqL-1I65_Jz+jTx_#P9NNy3fcxRQelsjR2 z&tUvauOO;1xW;tDgCBN=`rCgbkHFHH?ydXw=P~*_4Xg*OTVScJEzI(h9IWe{FSZT5 zhS9tT2t8t;1Y2^V+nn3av3J~5gC zQ%g883ZNA#Pb}|YEGYU*5h7&QyR-9m8=M0Q1oiVsN zdjgi|j3m5MH(`%)H0izaH08PJXBnNO_`;2r9{LLuUv79p_p;?LkQId$x2zc`>nL8p zqT+;6vw5k;zG8%-HdU*C1{6nXo_`mz~d^Ny%Mn?w{wd$eSi@Lm%3zVo!mmlH5t zO5fiQJr39#+9H~6=wNipBV##T-(YzlB85JH!b9yEW9`B$uoD;jvS9B$#&C;X{Cunr zMlDSnuW=8D(R@6<-rmg(+j@eJ0^SM1^rQ3}YnK0EbV;rz;d5dbt@KE_mM>sbc8ynF zceP@;q_c*%kvIx>{OT;X;fc{$iG;<=QaEBxEL%(S2pFAfj95;_!4}QO*lihS*xXcU zdnNuKtQ>lK?eESP3|I59aA&X<=DEJTcTDugsFvx~N0p>72FD~H&o_8jw5$J`9%chA zVDUup`&ZZ339SjdnG4il7vxjoJ&mPQ9D zeQ2@2xb6o=`(4$^HQyei5%fdGgd;E|&yfAx;~d2=G==Zh<1nglhhn=%df2FJ4o!HP z4l7EAGR|L8VY%f>Q8)+16Xr{ZQ<67fQtsCIW2er-8j`VK;r$3xoiUH9t?4k_McpRa zGmNnG1K*Ot#s}-P0W=}b=V0D#^y^KBA&fdLn?A>#;vJ7(Hf%;aL&sO`Izc9XjOv}8 zU5jNoM(vx`^VyaG_RJ@KjsEu<7W{VTyRaDOxfW;l?yL%sZ|d^%p5KpA>$mRk@J`jUdp@TSNq?l9u8*9q8^;DzDM!ozMm<^-(c6F<=$!0RE)-ShMt<*9HvX92PQLYF`VG& zz3ZO$F`A)AR*4pQuxwbg9rShwzU`jM(vaqdZTZ)Z{C8Jj_sgTqyQENx-~XpMIV}O3 zYKeYvtT8ZGC?$K>XcRVzBX-ye2^bYQd%Z1?pTc#vtx}u$KyF$?4_R|zk5F|~#;X@L z?ykPj4I{%UbFG!7$8XqrBrL_vtPG3C9vA1zQ|41V_-Du4gRr1gAlXEef{{1h8cDTY zu*@`dxq06$SP3F;*jNd`x>vex=A*07VjRrVGP4fbiO|TPS`Euqinnw=ZejGIEYFf{ zDgIxVaoyNr1$Gx6lt`V4#&EftZEwqN!K#Z1Czaj>SZ~HFhmCQ;uCdiowXzb7O3!@o zv2!z!Egj$A)7*k3SpU6xECi$8DqY*MUkB<8Q+YSOd7W%Ew8o3!e z%|+p|@MZLZ-i9T{I`;>ZwXtu9vF#R4akebyt$quTpwW zZARj;K`d;4o;Chu9*xluY63c+f5d3n(H*PSNSK}s$e5rd!(ssW-DT5zFqFshbC;jO z>9das^a?nb`*-->p||Ql?mb18Y+R8{lj!>B~X z{rMItp5YbBeTDfPhTARs1tBM)ID99WpIkfPfocW-=_)h%Y*Oce8 zpm`|UXapAjd-TY>*#_n%&Kc6qGr{J8f`WU8`!E_Ext759PO!f306o>&I*h@?Xn9Y7 zAH&&vd-7`Z8mt*NI39Psjxo39@{1@3Q06r6;0lGW=WdU2yLvyzsOrqx&9g2*Z)*I8 zX$==_wqNK=kkN-3T6=4jKsoR?Y4UY?j)UFAS1Pv0SYU1U#7p@*oUm7sbWQr~MU1vt zGmKhK45QXG5>2ps01Na7;&NyJ_JqW=s@T84=6&%?bD;_twYMMbomm}>w!Mqy!Vw~D zc^fl6w>}7a?+YF*S9!y()wjVB>qH>?UdZoyKaDYYzDvv1q{SG6>_0Q}Jj1B=Rfd*& zcw$tOHID`uo4wMEmN5WEdL8fjK z4pt+(C)9-ZVAdoj(Zd(Ph8*FSI~^Hgc+6*>S!)biF7$KuDvmIjec>;ARzGaqDIo?V z7*IUzmv^7!JdApY+Kz8h)=NHk>&1WnFq&$~UMCxC7&-7fm|r^^w$H2*y1IRkQ#bEd zCOI4sj0D7u(uW63|5&8ERQ+csge*A8lHt0rUg+PH%KBKu+Hl@PUZ?HVlJ zQ*WLcE`+uCIu5U*128+Rf8$+?42Daey7a@_9>}sA34^7s(0{jAl7#bN`#%5hEzcVmjiTrEpyd>p^{zN>-#h`MdDfQ_f6c&ZH1U|S zcQEWWuiiaQPYqi;x$}w7-C*_lR`64ULfE*K=NXx&OX0dtWN3Z}b3C$4vBR3MH?u;# z^kN00iLu29_MWg-)4OMW+#Cqnx9$geKZ89f>6;TbAHlqhVr$WYFou)8^1L|w7{KXcO>qx*FK+@lZ^KqKmR)Ao77#>iQv&S_&< zX^`(dxK@TyUp}1bTQ)$+vELoHR4G1RIlERAr-f0KhVKgyp@q>PQP0%lrLfG0JL?dY z4{NknjXtcT!tOKv;Q-ZgSU+zy_ZJz#{1x4{uLiWRuzxZ-=y4`2ruz z&X-|=y%Zb$Hkk=n(UH#YJM9YFnTz2xdlc?y#OrKLlw(vDIuVgu4zRnDx${P<8deM( zzAQc}1@d3+pLRDW{w&Rk!*(1n+SYDcMsW&<;f`8gY4{5pCLh~(BQ8R{YyJ60(-&c< zoE7LYY?_)tnEU10h;Bn~y^=CB zw>*q0Ibyi>t7u*8;m0z}0>4ytp3J z4LlG%xL6L2mkeY6}jiZ>3vICCOv`8G@pIDad{0gM@{eI*zdqoHD-BK-HO z;1`@R;3w~i;`Du zzl!Q#CK(4yok9!uv}3I&wJCm<<`Yr0LI~&bLvx!>cN;P!_1CY&;mj{>(F(4W_ zeK`5f7?ysTXkzZBpEw^9)sWH8Tav9AY-}g>N z1J1(Ttr|XPA>(0)XU`oVc$mNaS~mv$Zc*pB*&Ja->?+QUH5iRP(77>%VW`iqHdOg+ z3`$$5`O_MqiKZRJp2dCSL6c-R_lA)?=;C(0+`D6jstS+$dy%S9%R2U-vQP=irat03 zN%t3)&gRAVy!3_TTQtmf&X2=Xt!K;yR&f}tiI}E(nT0yocMcz@h(-97{fW|`2cxOa zqOZACVz^|LCzo=apxUiWT%2tR$bSwW+>#N(sD6eE+7@&G`Nd?^)Cy((__OYe59mO3 zuw`3IXc4Mh8~JE_%O5q@tPpWhVlevX_}cewGr(Uij5TQKhDH0enP>q;jOLl36H7=n zB23I)Dn1+w1RBxTX5&Pd8IWk(uNDfU>~E;1!>ADHvV&vttt3c$pref3jnNEl^4_|% z40KHHF3rS+*Bu)&~MZFQfHZ((IUqLLLu1TgO=^-M0zU33zL|8m+qoY0X6;^9j z%-?^lL`01#F&4)dG?-ui-fgT2$X-rsVt@N6b16EO^SS|u9Uk4-w-U6aUMu?Of*dr2 zHQrpfZ3fdPgj-I@*F%>P@#Bu@HP~e9;Ck;{frc;H>m0K4fU(5~M_6(!QD1<#@G#3Q z^e5!TqrWF;QSqqa&(yjG*t2pLVfdPjB3}p4rds2npY_l)99t#Su&pQZJD!Ctmg7%O zps&!%VLflU>W6lNvWmm4L{QBk^H2O&?V#dPoAIyweXzQ9!#{zL57P>j@Af@UfbsTE zJ+rSBpdyg$HehSi!`TVfxd{j%e|s&%vsp->|uk*h54bU?k|)ipb61DE4u{KI3#v zSpC{JYxPYRMl8+KZtoaF?wjTyFEE8aGmadOzMg{Ryt@y*T{~d;mF0I+ULDwG;K_Kn z^#tY5*VW^XQ+j6o&@&DV zgJSvE%7>f zLkzWay!fK7&x6rCWM&b);0Ke#XUiqkBj8{E$*GM$127r!&?sQ*I&5HqDe^6U(74xs zmg|GNsIDR%Q{^>A<2l18AMI+Ono#$t$oI)G?;Ya);@=%g-}e>_UD<$$iiLADwHRtO zw%m@hO@+P2GWXFGN2s~A_I2>gNx+jZw69AX#?G%k{>YmP#4-8M2q=XSFLl2Ew0}ca z4k`NRlMiUVBqDJ}cRxmDdl=uxKaTodA5YX zb@&)sT-;z?b&rD-nxlN9H$4$y98dSXEEoCTi1%DSR0?YrA7^t$3SqI~b7PpY19bEh za2Lzn2J$H$?kPeCYEf7xu{_;pY{z{8q;KE zr+bf4Cu+@q3RFPtMm=HEg(a}kHCJ)tO*t&;D|$U4%%KGn;r6N=2lOXY&dKIQ2I{O< zEBn!y1hYv7tm4$4P{#w)cenFOV9_-59DFxGjq7gL>bO-`h z8wG_vkElX-|4d%n@>5vu25~y}L^M8I!)q390-Z&3aa#we(R}>M1zV&5E8K1Fxh=0y zADi~O=fdW&R$k|>W6O;QGrP$KXVsxxx|h4HNEiB|zr-=7*FxVhQ6=sW8AJ^9x_HdV z4`!>ssPY}lgpq*=9 z&VM>=u&Ly~^^DmS6%Fl4YPpgSk*{Z+N3JYK zi#h*oJG%+Np8K}3kg+i8mbNXD(d$F`IGvlX{EcBo(LGl5-7U26L__v!%S9;tb3E(* zz8LuP(xlzQRSPDlmpd;{kD-B!0yk%QUqOYiXh_Jl>!@dMe>%q@Lo|`^5wzIZ19{R) z{;#hsqAq#wB+Zg&%DS@%UVW@W;b#HWBkXYqU%4$nO~z1}mgwo)B_b^LebKob#R+Tl zd3~=ubYRq+`u=qrbC|l-U-F$`0u5$+#=9cf(9_*s&C?u+Iklylrvurp$Y%;@!~COm|r-QbNmJiEF9L^s?gU! z#rqi^e~gYpdnqi7m*|}l*811zpBWBF-aPW8PCF>#+_xPP!iWa1_)=rM2!=+DQpY7j zVY*PwBq07cTF)kKKEL<@1`^Uqdx@s7VD|1^^JOpS<|8PQzBQqiH~v!3_n(E$_6Oqr zisLXj(6!Hy%^j_4*qQlWFoUHBNTFbzk_!e8#oph03SG9dX00zO(bCYRg@EJqFm)vB zHh27AjOv}o6S_a_uy{N2FLT8vEZ&gsYd3X;QJ=iZb|Y1aAKHl+?7IguQXIy2ou!~} zy;UU?F2R^i?@3`QQ`BC=#@3ls0IO*N9)61gFs1rW_U2KZQpU5FXEKm7kU!+Sd6e}Y z@?`ESo_`Vut66<|1Ndg>ihgZt_wNGy;+?)+@mhl7fr66-=QmM{tfJPfZHo8DDlXO7 z`eIZE#y;Z>{-PegANvd*uECbuLUyE+91J^+p1<(&7W9Ox+A$hb!+Q7PlMe4vXuaNX zw$L&U7PT)B%IOARXOh?X#QryE=DeQMgAblCc<3=HPOlPW;?l!{^@I_A@pa+*VMW;H zJa#eDLk`A~y1}53E5#db(A_h>35_4_n`jEDqA-`u%bX)*_=_(6JIJpG#h!~{0>_dO zVW%tNXoWEv_N}rGin7SG4;1 z0TesN=6>8!6P8&>7N1@DQ1)mucGJ-nW!A=h`msif#_8rfW*uo?%wMW#I>#@}H4ixksVgb`{{?JSOw_JaXo=PN3k)~GdmEp^^47&a}E zM)#^4V5(9-jIa7JG#-^VJbT0f@WHV%GcUw}V*76^6g*JdkZAQv?ipy3h@k#<0uM{g zKM(x6yaHnmeJl*K0qAFc^X8YADlqo!@(+eE2AG!Z(Y5$?8}+W=xuv#s6?#c2ZKsa9 z0EzKj!@1+(u>BmWu6(A3nXQz#fINLRZTl zxmBY!=GnbHGe5)RfBBhm3FqqgD5>~kG0H#3r311yjAJn!98jF z&8?R>i0->Q@a5h?6!f3}fY=W*v_FzPeXu7P!>Ozqwp(+eQJEVD)-Q2GyOdD`VXFZ) zCe4hwZac%+c>LXaKc*<$pz}~vu?D(x<}UZv-$zpkr~V22twp&GKR6EYkkN!8%TaTm zCuqJ%;QVSQ4#*@j{EjJx<+FdfDmW~lJCHo=*q=t3ms7RA+ka7u!&P2a(pg0Cdk{tC zrUh#b;g?co)e*tAzeCZUA9aY&osvd!5XN`l;h8crth^RY(U@RGc^9guW*e4K_0F-B z^@liEdt3V_^ppfz8u&SLT7tq^HH8Uk9WPKmL;nq5{)^D<^|vi&>MIo7UHo~1GXhGE zeOIwB^?@GYEWsDf!6=L8YIH>-3C*POv-;Eep^luhT2!RJkfR?ImM&Nc{fZGMcCvh6 zyH)W(&zrYE;t|O$CRV}_i-)}4Z5+(?nQhXd8W_0|xk)wU2+dP5YWJ+=Vg2d?-@9mk zAVf)wWcTKy2L6PAvlZK@gv>Mb^h_Fzn0h1_Dh;6&@oLLvcR%R8HfGFU76*$qY%%2? zLTK*%25pt923mD)yROb83@zQ#)7|}6Fm|=`TUwe0%vClo%*1Lzk(BfwrJRpw+@P&p zwGKn=GI2L`TX=$ptWP@CD>Yz3(pX1?WtNe~qJU@QWDd9rX zFC|;%ISOG=x?eCPFaUbxsl`L53eXRaH&G_-$p}9mu6wIQ0%qwVFAZc>!_eMW(}KJ^ zkozj){hf2J5WhoP@$aS|?3`9gu(+rJBsBh;Bb@|^d)r-iXl9ngD;w*G0HFeJ=1GCJHOq2Y4Yb3dOXqea`7hB~dj$oKPw+5d6^5lL|PrBx9P z>VCwPB+uOm3%2gkNyJu|{i*u%Vof%*=f2M9XP1ZmF}16TQMqXJ>eG%wDqrX+Hh8I= zdIOPclS1>gHegfFs+jL$Hw+iAM#s}%g!WFZQs=J-V; zbPE1JdPI6W{$DRlsp~WSy?PH87n8*MxCUS}$aB=Q;}WDV96u|5N*IP^IW5hK_0ZxU z;kGMVJutpeIW5eq55zy3c0xUpKxCI1PCV8EBj`K2oO%}~ZY>5i*ndU%^061i*Syf8 z=sSlM91D;i$C>9v&_a1vcUhs-br_@mD#qM#6J^<4UP--q5v`;ga$l%AiKepaGW72_ z0R9ED8}=&(NaHFWW*@s^R7nbPr+bpnc=x>A@oG^-P(SyaDZB?Jv&Z*KJJSI9U`qNx z>@8SpyFJXIDh5q={y2Y)JO)+xqz9J&++a<>%*=UM8CHi@`1GST5MF}!h`jnfXu~#S zw2C&-n7}y}GrlWm{-UMlZqO$5?9EcMsk^}1)^ZQW0alDQ;#T9d`FAKe7hsxh!VJTY z57sbn#=u5#y2oSm9|~J?F+LHL0Yi1#<$Jt*KuBNl`fPU*Rj*tQGpK6=QdJ3Cvg3Qy z-5}7xoW6=;2iYA>Df_7NF{9M(jVf3;pufCHK7#@!?j4H#&JW!d9H#?r|9}=@tHo~? z;ZT^bQPJ_75A~)$^q7Cnh^p=%OrmAj4NPw zg-m`f92ktgVfM4Y+e2}{kid2ZCCBN?EV=nJVX(h^H#X!LR0`ofs48W^eEY_5#WN37 z*&U{Da=d}kn<4M!s3~(FK*K*=lnQIT8-GM1pP`BO4?b7#lR-mGmsS4Z8`1o3L`)B( z5QVE)ZZGifz_362L6>!rU%y@c5l57_>U&!8<2|;h4R3 zT0)=0$SkW{_|#R{tSfgC|GofA&d1|lCq|?BTNeMQoR`qJ)sJ~vbAYy>j_JPh$6=zd zsbpY-o%ktv{=<$&(TNvJWPoy%)8 z84-I83JMNTHvA{EG?~DXWxy5>GKDzSy(Wb(^(Bf@9JT=tTXC}*-cbGx$v4? z<_!J35@+;$_8;}63chcRlenD>u0`6yh!V0%eE1(A2380qU?g~g}HR8TG$x>qJA`z3_| zZ*uJ46_qO(uJB;yQ7Jt%6LJ3*`*I#^1~s!NnF}G3xI>(H#zEBErP&wvY8%zw>PfmB z6o*z0w#VO5KMEuE)k(!-?r59J^Vu`6%YautX0+1P1e04iHBFZ?V1#IaZtn@eSl7j@ z)+ep7u>1bJ*)2*Ap9(pC{NXb6_8pM^vd@msY#Pi9&BmN2>Y=XE ziqB`2mSK<9X!_{SLx>ce6}`i85Qb?QKd>FsK^<#MUd{F`P}u6Z(x~eL{foV6->khc zoO_d>lKM5&yuZ}1#QgypWjD82d!Y&|MAuBW>-K12_$j|96r*Llc*cWJE;M^pw?yy; zWk1m5i~RaX;l+xVL7VaZhe}cUJbk7>u+6IsDhcsd};%YT_9z8rKGXHfwgpb$3kTZwEo-r z+=V$FzT5uUFh*uB70Os>pM|PrUo1Fti^nmq~jZxHbpN`y_WCWitZe ze)XaCCKoh#Bwd`d_lLsc)tjun!a%mUc*sHRI%}i;})wRkZrk?Xa;j2mcQ-$*CrfHITl=z*rTks5X)pgb zuYkn;lOtMN1eTtaJ#3I3McqHB?pUVR!i4a@3k~~a5z&%Z|GD2C8FK%6d6^Lh*%Ikv zyObWQH@l8w_Hl)`Pxos2ocNp6mFvx)naC2MlHV0 zs|vqqFluivr6ZSypl^aI($hB=*0n6?4(~TdguC8vwofvm-gBdem3BE{NM!ci*()az z$?)joZsmNGa7(TDNvkYne}63h7$plU#h3QA-%WtI+wYCN;5Uq%HRI&ZG=!?J47;k2 zS}=d$|qtDE7iApEhMurs#A_ld{hZA`e1rS@^1sITbdfY zjuM0MzU*7_;p#BIKts0tH!>8K)OQ|nDI~8|Q z8ciujhDX^_qeUJK?vE0WpgsQQ<0H2KD$T2lsLrpTP7xgs3lP zK@1kvuV}OA zNJKWOu1Pvkzgr38GQy8Ybj%q2{n1Ouwbx*p?p`0>#SgjbNx$w}!C(W#0kT3Pqrl(&%<_j z%)|2RX7EkraL-ty@UWT4EBo(xK>YccJ?)_&s=Uly{_WN>DqS3=b7Fl4?Zg7Is}|Mrj5n*Zw8E^2V;-&w zv}Zxfodg3Lv0>Cv^k7cDXB@>u(#2`+w!o~VAKUk;m(Vx1#v(KqgEEeL91)AMMoB9F zG0CggK#Q@+^>DXPs1!3UyH)!HCd^NznhKu*a)wlacE1&xKLhkSr&Q32R(jIQ*Z*LA zY$K!Udmoy=ldRCrvEaNTTvS!Sx|evZ9@cq3c=L?;!1AqOp7sDARJWaNv1z^v zJ6gBeN;Yj^oXTS5$(sh~NEE-mT*U{?Z*#v+u&F}Vq28-|&uU=iVj@mFc@vch_I37C z%b*VPnVu`_p5QC6etFyrgBf2VZuSLXm{0oN)jLn|!OlB|SK4BrA3gDN5%7jJo&+wx zEJIiq3FQ)Ku*PW4Ji5Xrb`U1(zMDVPYJ-J0Z{88=&STVm=&x2Y9e8!(U)y84%j3^H;4M3lsFsI4#I)(rD{oNno1FQNH zHdzN%pnO>_LdNYY#_-j-o9lBKY^YTEyn2&@QGL$VbE!{+(X2!4a__#vhPSWV+G&a} zsvD`b<;TFv^xmTm(FYhyg65Y<+d&GarB`e2r-u<<372c&+}5VPS~SU5O*#h#81mP$jV%cD~<2I?<5cn&RCZIo86br6TOXZTXi zD=%R;dflbCPamW58>0GoZx^N>KRHuv_7Julyq(Ofg<;hxg(k++2F3lXFa2p}3?u%} zruxqI8=FeT!2Sb0%JTO-?jWp4>lb_-JQ=A z!b*TjM`1mFLs*rLEY>Z(gwcHE_WdkU0rOugSL=UsW7Mx; z@-1c#li{ITer_jVwS~&>P`ecj1sw?cz83&NmSN2+<(@ze(i;2mY!7wC{;Bt+%79Iq z^0K>87ho>_+Jo3p2_OgF%9b|rhI#HRrS*&_u<1A1BG+CGOA}r(oTv{rulw;A*al)$ z>OZTrZ?wYvN;CapnFO?i9C(fGCBo9-YmQoeQ!o}7>~Smw5C1|eQlfPIV6w9RUibz* zOsm{K!P&tCYh`WUK9T`;yMjG0-1LRXL%-v7pLBr^mvTh|9tS(Gj3}K=4a=DP$<&f_ z7`+Ym+1~B1Fxg`HCOVA+O;XW5-DtfETW!^5p&~RG-GSR*QaRGm*h^#vRHd-CA( z&wl4-#;C^Mczt~32Hge=tUiPR==|m8Kfojjb>#of{e0hpW~V*R*eyl?-dn|RF=!3Q zPTCR{unWsCUZfXTK)P0aOi&w%4qZ;VjtsLgV=(^r@3-Ou5L~9T`)+vWk1^#C+ znfdoEU+kB zZC>fu1=~RnYl8pO!m3}~3(ew5m@(_EId@eSDuWCdl>Hc?FF-~iTT=^0O+s~x`Z0|9 z<9>baRWI0B-chSytUzxhOn6ss;9!09Vw_*iI#h>n`MS}TVl;0I+w#KlVP~VaJkshh zh8y^~Jrkf0Q=GQA3&lrpN1T9VtjJ7 z1DEw+qbe|wYhV|Cm_0kr5bcSYVqRG9s+7V;&8L5IDU2Ac?a!m%-?~5t8&34a%l#OQ z-t3>A;!TXs=&pKF&I4G!Xc5QcJ^*tfA8C1V0Csq`RdHX`U`tde?;B|tR>x0iDzx)J z?SW5(@K6k+%Aa<5@o*jHVk_=^$%}(s#Uh>2`c#aGx&N|cp8-Zyy3G{Zn+sbyjis5s zr7)={rCOC=3p<*3-^LvhhF#akFJ200V+=FP!>C*Z8tLnNY*mF}OytCt!mcsK67*lf zrOHZJInM4PdS?UHAKzeMq$Q({te=)tsw%MjO{{ITMgpTY;$W0_?}On$|KA!XQ!v^a zA$~4gcY*ZZ;$*ePT_A)Bs$I?C1MQ}k8HPBDSB}zI(U-kLd3(=H)*|CzW)xRzruG&V zw^>e|s5Zu^hrB*U$aljcwXnslGxuR^_VLX>v#(&3rKduuRSp)tW(AzX6k)@@en)6U z49Jf?E^1Nx0kP~?wuVp&tXR+t-OS$)8{>Dao@sK!(%`AJh=!{$*>r4qQvN8$n zt~~uRDQMLJ{i!W!xxW;EAe~f@rjdmHdB@B4R5=0pgN^v15*`@GE$%VhOMwL!4Z`bl zH&N|T=hrW`@-eEj>~9KD8!UYj;eEVM7!h9G5!{DNFkJ7xy`FE=7-KME@!j@=i52t2 z?~z)pp}jWi7|pZt4~=vCQNi;E+W#FehK2pNt5WKm zpwTt2Sd_<~VV$vFxn;z~Q6*s~dtRGm;3guup5!+S0X% zDuBIasfT@kLtu@SN})dYEli#Y_`_-W3)UQVm(s&{P`yw&w_g>dHv{i#fEoayhAS=4 ziVn8^k?$=>S;4w0v)H*0kucu%P%rt-Ukqm+I`@`I8TFLs$E8%}!>YThP5p2#jBq%( zJ>jVYVyZi%Ron@fqE#|zGzrA0ACxq5Di}lg%u-EJK_G=&Uw!{~s{^C5y%8}N7Xpjx zHz%3n;~?dG(&rcX{IFM|*86^qvi>&imapW7Ve9k;`|hkH)E@NQ_adtYR?2tSeFNEG z?j29@-*kSMu;t}E(n0B|_5lU;OP^s`LZYSgAQ!3`v`Z^+^Mv^k50#8tPOu%<*js<< zBJ4bEw|czK4VKmZ3eu-GVbqsf++A&FQRfNtS4dU@)?W0@zcfySHQHZiT7{26Zq^DN zQ)mlJ#mN!2S4siD&XvVa;|8my&3o4unPJ}2xAVktW{mj*XM}qIg@aUbQhr?|!Df1+ z(bT(cAa#BlI=^R(;o6t?Z2X?X+Mlb3J${pAgzejsIAK77?R_JxD_(jS_2MgTF{fPEaR{}$>BfgqC8S#q zR7PRc0$LH(J?^Oe>q)XQw;?Pmor}@9$^?tNQoKah0N7R;WaU$|r||i0jh?rBK(>mz zBF1V5!#lU{nFs3udB!D2yfYL^iZU52Pg1<#lWS}E3T4incP>8KyNuBnzHoTAG6sW3 zwlZZnOJIY%&Jy)z3yp`{2~kS~Vl)OPO-{)2!{8|qk4_~v(4_w)-cQN96>aRw7=@3w zDqlYNb>0s4BH{)(YW!eT^(BB5?~y=zzEwBt6VnbKQIQ-wD!aQ|NJhF%3m&b$B@ahQ!&=-ILO)J+h5tJ2{Si> z58rx9;k;+s8(n(#6dtQJUcFrp%XaQ3%gMEXPp7%`gO|cnw}Y=mKJABDlhQ>A%mH-U#{ZicPJ&VIFR{494w4~bbdPwFl0PGcdO zw-c$7&Gli|jn%^Xa}tnF3;)bH#sWmgIU4P0ZWuq<+E*9&7DhfTz3YvcEtzKzL1t!JWB6Cod#RA*yS+f`s9#W}&M zFb&rDzMUSVsz$B-bU%i_8KdETt1c6EGOXMilc{QvfrV5QHuNtX))Y)H4e~Io^obP9qP zy@yT3aZ?w{Iv=^{a(oaiFcf5#?0*Rxv)L>=l}s2li@i_6W*6)()wm6O$;KG8uim*Q z;{!`$@$HIDS7GtAjEhgg3yfArS1eSC!uRLBj-4zC!f;fFF!4+qj9MfxaJ9)BqtRc| zz_clONUHfTW~Kn+1|4o4g=E-hG+u9Fb%m)7Nu!DM9-=D*(aW`Js9l}*YObM3#a?aMVFxKGWSfbQV)j1Rjih_3d8c; z8Ki3=hT1{~FYhYzqb1jcz>K^NSnG}b<2*0~3(1xr79bq}LqNR0jT^9>S075mXndN* zNt+z7%swuSnHzy|+2GRuf6ue)+3LaA#|@)J=LUZ>_Q8_7cv!Ax9jyBDp`$J#u)QO3 zIy2oJ+jq-+@*C42Y81aQqEtVOElV2SuI%^cQYQ9Am!e;W=ah5l0OE$Kpjv#;Ns89eIcOINfT zDuwmG@pe_8cwmFm*|U3~8s-K2@&~QVV9lc{V8T)Z!(B>Uwma^E-lg#h2M6GQ{Bq~y5AFyz*td5{L~9-sBXBQexJSvwqr}V*nC(J-eWgg@Ebd9NNmUuKdHj9 zRmx@47+M&5vr*L%s)sTA4~N~p-VRkwRU0nTp6Jg*i~arI$p8P`iry%GcgQ^dFnq$! z6QhYqka^Lrg&&+W>NWIBKoUPSamN6kEVnf*CRY4VDH2k8WrzmAVe-TuM${2=orak6gtOKJ$nl#ookDxq}p5J~YIM~!WV;++H7shPX zHa*YFVl?(K|9*8V0P+2P<0Ih*P|*mtal0QLHXdA6Co5fmw{NPd_>?KUUsgDo{4oMG zdCD-lXEQ?k&%Vgn*j3p0&y`NWpcTU%@RHX2pp4<<3EJan)ld^X(NYj(fl(cLdZy`? zC~UYbXVP@;$7lzQ1lBtXG2G3m_)b45j7Fm0tw7li+F1?ct-ij8^_wEyd?P9l9rueo zceoU~9;C>x9_7NQj&jD6RV&fpg`@jAd1fGU<$TS7!4{aqy{b3HRxz4(*}HxUim>c^ z^`OR=A(;AZ%du1R0H#c2zgZcY!|49fS;k{{jNV*fQTMY0Y}^{TJ~(Ov)x~b^mv2$- zS3k+sG@S>wj)+c)cF95e{Trua^RiJ@{IOnTIt;d3PBxM&N`Z7AV=hg{L4UzQvU`(0 zkTZ#`^*$I(KWbcfa{Vo=l?&hfNh(E?W-@Q>{=@-+)&64=&5)@rZ0V3B6TXIHBTV^G_t&v4lrR#B``;T9Q4CaX75 z-fxVd{BOoPRf>1yi^xi!>8+2Vdm=u=a_R7bnupNT{3gU7$kFR z8`WDd8etZGuH`7G_oVLmwSmKMdNv8W&nY>pzyDq7QZCH@ysu{dj`AEci}h(kcu>WY zc$c<|l-CJ&#x|ay@U;w$4XYPBv^|t*E)Tzmf+jUMZq;G1XjQ%Tb~YZG51c#2c$c!D zCDqxk{ZNAVq=FXeRDP)3v-xxBlOINZ;_xl*WouYGZ2zkK@_#T_UwG+yi6}_RF+`#nXGhevusYwApKKS8QU9}K)~n>gn7jq7bR_m*In-s=;L8_i z|3oz{l)nva78km5q@7^xnXlxpbCodKcvxpTBO9aU3a&M`4~9K6PG-+BN$6|4zzSdLQ?{Wh=;C!8Z=W7Oq^}od%GLrgoWLd4^i4(>nYpk!B)kY~W%g!I zUkk(P98;dx7YW#Ox6Y*bSx@m;*)az1FzCK{Yi@Ae3i6SA?mC|0v3tf6S;{1s%othW z5wXPRMXCyLa%U*}V0rxadp;QXvD;5gZ3OjFwSWBQ{eYb7n`DQwU`}VW`t*w@u=ZUOWGum?)^)c^Srm=4@kskE?Xbd|nkDVk<$g*Md5-er2?;m6P-*pO4q_SbO z#=`2Hg?6wMrY_$cF+xU z!YF^Ndd|f-jHcH$^`WdP%yE#)&Fzh_{r8OIg%5whXkM=Cg!6yL_L<|d&)su4k z8#qh7yD&!FVlN$L!)R(tm}A~ugeqlj>Aq+Tqt{(`a1Z|seMq|O?F5AfYqn$PQl7!e zJg$x^O$Wo3u}?&s2*PGS)Vb~cHZ;(EYAzw=7_{2QaQ&)0hEe$kCU(Vt$7tx7SZ@AP z0fPKyjKqo%>=byH{1mteq>tIR57+I7rlXI{j1}}?ZOLi#V15|v;{L5@C~H!Dim>K) z)eg2&_Lp6IWCGh>F%9ikjbW^x<6)F+3{1ZKPF+<{0dw6C<1c?~#i)h&o}7P@4of1F zOZV9PFq&X)y@#q2Kvuzy*fLqdE|(ET^~o8-G18}h{CfdNZ)X;MTs;M&neo!wJ1{Fm$XHo3QSk^;2#;5G~o0`%EAI!I+KA*VZ3Xdiift zUC@{mOzCmahWEu{IESNRk7{F3{Z$R+cUKR>=yRI@DupvZlqRnF>@R}#hq}{>tFK@^ z;ZLv1iXKM)gTDWJs2t3FVou{ZCkUTY`(x5WJz+MUL&0K`9%B?SX^2@2hF9xeQeaHs zmXnK*R6mx%D(jJn`>cn6{9knV!KpqVow{W3PeK)=3faq9!u6n5Mqa6uLN1K4Czdzu z5v5;<_1hB#hOk!o%z1OT5_T3D{)I0D!>nfPb`q-=j0SiT)hrEQE>8$AOIn0gLEa%9 z1r5L}37n0U+(pAj&P6+>xB@ZfqQ{lB6R;C;VJlI(1j7}KvR|D@q+D0slt~UHug2V0 zkAJPiSWK1_jb)Qy`wyx0{B|L%RSz^DzB7O(y{>-5Rj|Wu;$!)z>968Kcr(Xz&b(f_Wsc z89UMl`G1*{rnmSho?=P6%Uy`=|2LlaoS;wPJ=(<-**CDa9y2px=!Vg1x5lmI%tIFK z!T%U0@zYgybZKPn!fwSeA$qYuvtaMzluM}1-&%9OV zGl3OakIP2~UIN+sZMJRobyykiUJls_!>Ch7~%zjB?QF zkIOQ`X4AP~&I=b|+kkDZ-_jpdQazn;6xU&#-K}o%6JD0(M+WxP$K(Q8@m(v8+@Lw3;kXKTHG zcC!|vdi62k@9#gbE_Qm>@CPSqW4rs^kj)Ut0RdNct@>fR;!v(4|4AVFehLsAqj>Ce zlFoHU7mWH*Fo)QG^{|;chT==Kpy~Xh&v+umA2oSJisWZt&avJ)U`Gd*gSqTK6o)~} z#$d!&Nv>hO2zbn5A`IE*f&$e_gTJrJ6gxP@peVX2qbQbZ7g zwFmy$XH?{1b-zVo#l{zmUZej>?UgF%IofB#QC^AB5^~dXI<%qNlR3sp_5VE0KKI9Z z6ecx0p3PbaV9eK!=w6G~K;sd3v-8?%D6@@W`iKJ#cA_lLoWGq6>(L!AwBGwdXUzr6 z?c3w9CeneXmo8yA^4FsMzFaVWSG&G+;s=at)0`mIpG1{>+MfoV1;T9Q2cs(|?!eAy zIW>v=6=uYIU5p3sVARp9c54+F`bS5TD$w{97X3vonjR;^dR8}fux}2=KhMY0P2Yr7 zH_h)~&9*UIqn(9MWiV_Cv^1Q_r-hv*+NO%cb_!Q`e2aec45MN1-4odp!e~^UHJ2~9 z!NRu=^B0Pou&a1Y@AeGBsAdfoQYLg^f%gaJy9YNgYI->@ToD=8E_UdC{jy4#PeZXy zc0r7W=W6+}QV$@JEN@$_U4kteK+N>7VdaW@uc`BEjQURJ-yz*9=(V%C>tZ;B(TlqM z=>Gm5qYAgWw(1xKyS!|DPk6QwIq{^6a&jLUDm&03Fn14)IKSn&S8)y1_j69oN=6{O zj~6v#aX6Zc%P;I=34=rW8Nnp$_n& zL$h_k>2vu>|NlF_9jgTwG^I0`SH?)>}bgR2JLC@D`-+LxA$0mJsL5izBUmSi6$BnpS7hdBLcZcbNVP7 z>i;rAw?1|Z5h@Q1M>ymlypY_Ez|n_jqG*(GFAYNzlCqKa>gW*R$`cc6k^!3f7Mp+1 z#|jbDx?eHfKa0j3PAR`1-9^RO#bewY%V>0OfG7Fx6e5(HcUph@hUP4pKOOnPh1$Y| zX^vc;LnC}=LK$EAAp94mh2TH2i1;pL^c5)(5fgc18a1ZS*ypc%+ESkp>7(%b`&}BS zC0238CCLVLakK}m3VcK327y_FWRj*J)dT=85p!pD*=#-86?Z%G=ob<&HPhLk8FYVxgkpv>LANlV%-(}R` zT=4sYg9aM2E6wV0R7X|n?^)gIjM0p;I_v%^Geor2vz5J@hMMMslI|xQMB|(jDqH&e zsG)p2E@^KS4QhFh6=W--F|t%1>4po!uMBg&(WysxzC))R(_f&W|6Z{E%hg9EyRm?? zI)w;cF1~>?mr$poaa_wuT{Qbq{)|@LbJQEHdbm_x7m=uK3xq4lXt-mRU;WSUjrJQOHs2rsE!C9I$6iFa?yZ;JGCL(C?d8sQHiYyqOpew1Pvu= z)LEF{UR{)i`X!wi9IJiMq`$gWMV2YT>qf5E6pW&JDNT(^4SGc2^843(N&$^?h#5Kk zeuV~GF0XM1OCUnCVt1^q6Y7QG2)8?`6KG=yRqMUTM%_^xn0lOCZi^fGfOkf?ufKhIwJT;5A~XH zzWeYy7xmc0&s4nTL!-*n!Z%;NrR0tFS>hXCG}axSAL5dY>N2!j&Jk77)LzBT&&i)? zFqos7i{&pGynCgqWZ52(g%4C1T-iVbp>0}u;%7uSr&%F-ZvZiJE>&7#c|ziVZzUgGTbb z%&Q+bq6V7zzxvIbh(KK=vw5!)jXilXEKKi;2435}_Wv$|h}Vh+HNDwT-|yE;ap`)f zjmztat8_aWqPO28;7n2DnH+mva}pY^F2pgc>Z0B!ZfC6y%AnEn_U(=es%WId?D{S?Eg+V@TlG|?SHV7Fo$mj6bPo0Mb4RisR7S&xp5ztSwxQA2ZfQ?={n5zYU&-Rs z188LPTqwZD9+7BO#Z7do(P(?xLBb#-8uQFFG$}cSx}MgkCsK1F`~~LO zX8|rKZd>QTzAF}}+fr$_rzimZ7FPW9o(ZF@2jP;w*mE=zwm^Q8#)rC>e{|__hNAAF zRn9MdYN+qjhXcP4{zgN>=c{9)R?$T9oVEF885&gx5|8CEK{J|PA5GQuquJXrXDyjW zQP=(RGM{drM`JBiKcb7-&}4cdr)Ro7>eES*X0JGonw#~(P0#|3L{A>N7m|#IFs9UG zqBEKkeZB8`g%z5(q&~FKfvEDQgB@OT^Ao33B0cNM%#;$ zhXRIrp1O!=A(&uwVjB@u$rtUuoI&Frx#`PShtW_WwMorYZZz=ijUh(2gL+lI-}phJ zj9Nmtf(bQiB4dW;x8ngdLHaz(O4R+TlS<=d*4*K7G<7O98&+*^yB_)&4XuR8y z;R!=DH2#AOB^tfhM*nU90o1ACq#R6$Lz8_|3`$kl=CeYxsL{;hUq@u5kth8!jtqa*HDk#&?8$LQPdSc9sgFq7mBF&~=! z^5a7O8(lQBkW0)pw?~6J<0t6|KT*#K!_Qa!pP?zH^<$ZAl4$(2fWgn8&uAE1$h|@O zfbgC9Gm6}cXv8hOkLBV&GhVXSvhC9<{8IJdHoapjmhK zU6oViX!OR>p19woX!7DcP?kYxWL?n8P;nmhKGt^#I3bKCGb?{krUH$7njbv+!3PcJ zo>zTq+K(m~KtzE?4)r_|QgP*KL3pL3Pg@1^5T1PAc&{6w_E-Bz{lQ6SvM80S&Gx6{WM0}0kX$h5u?+yJ_B}Z{+f*g2X(y#~hJ#Q~|UVnsI-qcr% zDNuOyoVJAEL@*k;Z*obv%?x#pEu6{=D@KDoqPy(h=h5gOe_X&tYBUnwLTkGcNXfgE z9hL(_XaJWI8~aKfjp+YY)mS@?IzEg&*4HXWQ``a*qdU5&$rLR8E^eaX^@m}M>Pl!d zkgo2)V>}x9S+&^{YER)xPG7GYD%3*S|8zVz3=u+8dfvY1MstyQj1#rIs7OiKr-S3ychQS&Q&14r+mrWpi`~tm(R6d&Ev{9;AsX_SVzl08| z8MNSYbvtg(9Q|{8%DQu42DR;A9ma|jVQYl{-S@TjMu z>4F+7GaB${{kd@cHX731u@IV)M57+;N57svg7BXg!g8$>5y7Zm;%UPL)OB69X+VJu zEkD`%`cg3z4Qi^4+cvbKPMZ5=)WC!4L`IXJW(lJazs!ug4&Tw(%1rZZhj*wo=eCpO z=^{j`ldE_xMd295NuHd~HE1T>Wp=XH81>C}4fQA~q5&SR;rmy|P?z151m|5oL=Z7s zZD>%;lz8(;3j-xj zZJcRNI^9Gqg~yI8gg-$eE{_Y9*``qU_+9SXX;Wad= z`RJb`V&RXEmmip*PJjIL$yOaS#&+A2kEa(6$mgftdNP9g`ulI3P}M+n+I_CuF_eAx z)<-?Qq6PJKC|(pQ$wPDYj1>bplpbnP`_GeO9CdF-CEa)OL0y7dp1A8$XpE55?;v1= z#%~`}tI(j#QM2-f)G8zDRn1Uv@@GX;P67ERq%9EsR|u6uSRZQ0lBo5)OGf>2G0u;S z8_`UV)L2`W3F=n6o4c28jY!8?4Z2q_G~6mr`_4)S5$j%&^(9--G$juJHdZb)k@*Alg)wjcbV%8cqI@~!4I@n}L#nQ)bn8ghc;-UiL*h*x5>+> zZ}OVyH+&X_BZgR?8swnvYh}G*azr%B&HH?Ns1bEuiuK-JP(sz`XSL-`=Fn&|tx#z1 zMby<-dC&HkK81Vh@avS^BzQ+sr4z`g)+>_WN|r#KiO|3hptEt;aPce zu@TCBYwWYFXSuefOWfF<8_^gzwT1=I6c8 zNP-|P5r8|7b z4~?5-+@EA|Mfke*v2*LfsIxXLx-Ik&s#_7_J9xbw5&8OS${e-P_@M~b=d{L@G^Ok6Mk-?_a-p8WB_E zBp!+{qcIUuLWAcWRFL>BE|NnX_4!5&akvsuw@Q)F`xE78g2|Vz_7^)Ei}_IBY@39} z9!Xnzi{3&6T<@JMA!^i@twq|Vp`|<*f5*z~Tr~77oy?td6SdaAjk)S|70nN{(8aka zprKfEHIDKQH2R?RnZR-jA~HpathIWgp+5s7?~?ALp~gQ6R|9^b?&k_3T6YD|2<IpQ#8ua(INk1aZ2nbzr9zt_9 z&*sO<{m|^}2HoimZ!|2ERl0uu8)aXwpH?0YLQ{vk9PiGYL^ImI{s@*_LI27&6AcC%u@bNEnKMQ->cT)^*m4|KRj-M26^wRD1V`NHEDpxe()KZc=KG5+(OxZ z3&Pa~unHtiCx+dS5qO*l)w02~pX#|JH zx&(Ul+Lsa0QsJ4(3r9pUi#YX?nc_=d<31{`-b6ibnjCPMc+|}qm~k_s4|NRa_={6K zoG3LB)Y8g`+CT6Au<$eyb-PS-C(QXGyxe6~w_X7>^q^t#Y7P!f8LRzgR;P-3BG=zN z^1)(f9zIgHJ_Ou(jP*7%D=wQycb7=v{!cCA3mVg7sIJ) zr7Ea1=2)lx^fNTxak>F#GJuGhk#d*arBLUM*LupICs6-g-Q|vr7F57%aO{&fI~qM= z&&+Y~J({9_qwtw!6E%7Ky*f5XL^J1bjTT`%s5|LwjFW3S8X30d@xk)ZnE088bU{(5 zXL_GdCmRdO>1=v2T(gWC4jdaJFM6Opq2=I!=ikxn;i^+Yr?b#d)R+T*u?}jg#*{_X z;wbwi^sft!9g%7slBu-$(1dnHm+(hF)X#n(!OSZkb(O!m*PXA2TFo6DU1}-(%=P%d zuZydw4=Vv`}_VFIc1p5!?6om0gQL zgSQ7N4xK)RCPw;A&GC|G+DUgbKr?iUU+j6-dQX;@^_X%KPaenOdbB!#a6 zniO<75y8?&31=%$@iSYOazSgf$aG8R+KX&7i(hbPq;ARC?hv36d{f2X;Ru8uJ)ZVbD+3M3K9lO9et=poCAGBtT}OC2&ASE< z#?ipeMOKqvN6?_S=wP{|GwPT++U}A%gYXfPw*FM|h|oHIt|GY?4e87kO&q2}U5iWu zW(6y#>(Jp7r?$Ef`8ZyRchw9v!Svw{ldA~-s#k1@GDn2alhqu<#)$awj~hG{K||6~ z=h|KA5s}(c+Dc&`8cWGJ_tGm75j8GeRR7+GraunLh3S~0&VR~2qHCK7&;5-3{X2>$ z&x>7RVz5PnYWIWFGSbmN`L>>htP*O^NXx=xi_pl@Va4{^STr6Hu3&m71`+qV)HMG5 zL}U6B?k4-1QRfAMMxqL(FOL=#t`1Q6?)y&(5qDNJK>W@I&4@Bb{^%>bw50Z#>Kubu{TH zI%i9w)<$NZSnD3tiqCIi~vILE^0PfAoXNtcWekV^Df=i-;+OcW12Qnb*& zIF1O(H9u0H{y-B%vnj^)a@6C0)l=ymCEq6%q-73IA;KN5-8un5)QiqfO@@!6VcEq} zZSgJC@y)}m|KD#!x)fq6^MM6vI?WaG^lK?&54rg52fxKX>= z!tReN8i-hQ@#L@cdenL(ZKZor7!5CcOvQ^?Afilejj>r4B8;bXKi^70Bd^Un{xPti zq2}{*t*=+nh>@AL&;1TW<~AqEmzAPU;rhB;|6M`&2_XRs%Pd3`$)?w*dQS1*9TwT? zn`n^5=ohPx9U2}>_B_6K4~=Rx<+u+jqVCXQd+PjysIRd37xA7X8u8k2chY}~hS?I;kkK?4 zi>yQ`BYb(CfP`HY!vD^^759eXd%wBLGZQEr_2?t_$KVJwQzKsW?yEZ@9N=&JP$htR zJ{SI#y;X@u4<8zmAyK$-*ygJ_b1cFiJ4E~Sgb*Tx9L+dbUyR1$%ZFYuY@-p>cC9~& z3RMwhSgDoTQ0xB2=Y@@ms8^`0r-EArsFASQiSg4%b%U7B-L`_cw@$=+v5d z@Q5gyV3tdOQ0`)4XN97P>_;c_|Z=V}r5 zF1m#V3i2$@EnA>rrJv)@>?IkA2)pz{qg*LyOf5XzG}{%8pF8zE_lhqXpBw2jeLaar zcCg*F21;Mb+ccMi&!CahO-uUPx6ye0)s845el&6ITJmcVMl_OFisGf4A^&&t2}o~2 z<6l=zKF#l;j+ejA{C-K{us!i_Zb6QSF!9^}z3fNSzQOU*?ME`gf9)ygTy;caKko@# zoJ>J2k1uoWwOJ?i);xv1ai z+XEy*@oSk|ujLA9(a5Who+R(LsL#yAXwNMY^~v5~J};AxhGdFe`1aCK_rh43*1ay& z^6MT~(S=gfAaU+rO6DRWmeb+(s?VZv)n%>4o6U$6F6AK8Gl}YUecy0&JD}kg)BBHW zQaC0~t|{987HaT4w{r2FKO!-mRXcMq2F;ACO8k6Pjfn3KTxm!uLnG5pK|Rb*Q3w9| zXwj{0G^TL)!%_l28Y1!6wOcUdUgDcN1vKN}Ho z3|%#PjA$ZuE&l4mGn5|SxyI0EiYBz?be>g&A%du5pq2r}PX&@cTFv!PIHo$q+3*4y zUzPX~A4U^mM5?ZLQb|Z<}Js5RZEEr>=Tgx4}rjzvQL4E;R%#E%eg1s>Lw*^%HH?({z|W^`rY< zLp|W>@;r)CC7{i-q%U2K4Mszkc1W`b2wC3}o;#BPKg#>DqvAdgpgGfZ!yLvDp7c?w z3i`UdT)Ezyg;8mqsD?MJFd%t%Kh3fzjHIXR8Ko$qW~q<*sl%R7`T4SCRUi*^yw|Ht z;b=sm8|+a*p`|dT-MTn&E(6wNwMWD=2VgEbWAb4hHH_`kJryU+48**rSsxs8Vea&; zSodRwFc?2xAbma@@UmN6-%|Gj=}7U17g2LC^jIcGw}t>o$F&I@85m64eqL8P5C@~O zR??fYUeG?{%6Mj?4SEF9?vSrI1JSjNHeav?ItG7@Jtr>1n8$Wz`9VP-Y3b#fyu!ms z_`XZNZ^dC^XKArKG#K#Dtgf{mmVl0|&J!HdpOJFlHT8*Q9CUOJ^EyhJ!C0N^yq4lS z7!NcJ?|PF1(h98EhXeURn^uc6!g8g)55VWVi4;lYh2!o8n%c#==@Sd-3)rM3+fug@m ztYriAJhV0c`6mVKXt$tVF1M~_r9Xc4R4h>Js zc+Nzu!${{^Q@O4TbjfA?#TaY=fBK4jq|j3szANe@``H&pZ0j0QEY8A2Na5LtUCs*S$I2lY0hcT@`DTH3eb%O8D9!-B}n{IB~bb zmHife!T`U-+FKc-3wY<*c!uU|m{=nHZ27MN#?OR8yN51}U9!1w z)&vLRF0@~^4WGfNOpi~z;7O=_tt?PcR0wrTSX(}MKTI5IB!{OxhjEVT7kVcxVL)_h zBR<|4W-3m3e^BXy0d?WmrS^wmKFi-O`nv-R68)3qe>1`e!6DXIY!ecW=O!*}9RyNX z<#C1g`qqvN1AZ5#rhH2h{{%im8B$<1lsde>$+Rkqv zl+Sku$7;j$o0tbP_KcMIIo{n-MGZAO$~;ZNrZ7`IcU5Mg5+>Mp3$_MjfVeHMtVk^b z{gw;5rUp_lVpP$Vq#z7^Y6sXii?gAtWVh8vt_lc08Q;&|?1L_vl%l5hl=b@dbatD^ z7e-5G4T~+Z(PtSoHK{wEKq@@;?##g_5Pu_<|KiuFy1`hH;MlK)0GQW~rqz2P3v*rKEYn(B(Alu!9b-f}uLB1J z+S)+*+{e%tTeOtt{RCqY(15YXYAL~<5+E|N2zFfxhVfcWmFkcv7(YNQbTn2NYESws zPwP*iQs%_0v-J7U%+Yx`N8>L{>g{yOEK`0iM&+vB+5}SkG4DfVJTT~N)_-vBDs(JH zw=hLcQ`VEqZ6EO)5T8(MNnGcIUKObW%wK1qPby)~U+pO6b#KbPdY^)pCv>aA@-{Hd zDz4?!rUdwlT~#ZxH84Kedf-T%EeyS+-{&mP0PT{J7shs-fG~7VdL7GA7KiMHzF!kX)c#{iCNB2imvG%~&guKE-<)fDm#-w4MQg$=B6#%qL^z55~_ogxu+4Ex~ahoJ9Dr?SN3f3&j+aRIz{yO_5dc*OrD^GW*FsE z;de{-1oCfbTbs9HFv?)ZSmpQ}M(91PFI5La*HN`x+q?)M4kqJdSr5YGYcD3OK?9n+ zHm_KjjKioY*Ln_X2eem<3-vi=139M#n~@lT$`CG&b=4%8zWKwI;PDEkKWLswU>*jt z#^9 z1aoPLNuPTZfyfo!BwB3`_Lpfu6m~7Tx10x4S58WrHeCcl!%K(qZb9gbA3WGW zlL4i#Pb8k^kAZReuAmG1Ct-Z*J&5<~Lzz!d_{f<+ASQLs`+T|%vq>vg2B)r~(qKIP z!VyEj2Os)J_tp`zJ46dRUj@RL+%epb2lrsO_?+XL&Ck#=k>ZoHl?)BTSE88zYQtzv zmC%E`Z=thF_O7^dG|WzZw9{)71A?5ue~CI_Fq}~O@JNCK^c+9)^eSovyncYRx4jhf zZrlcsOGABPFmW>T-lSD3mv&0>8Z9j1&FY6^~5!Q}qeT9%HtfxygB#dl;D zNFndep1h_Fq}$G?9&-dkCn|Zvl=2OxEVc~wZd3Ljzf93KxWXuLCGQnmE%XStt}LG= z!l>cut!Y^)82eZ`c6%WTCQ5igHC_UyjI+)pXCO#C@^tt9bsP}eju$=s#SMM5wuD=9 z_kj5Q5B<_JOIR4WbB%7(5&SYoLYDM#Q1)l%hOw(2jPyon9O_JlPF<_z_EuMv;cQLw zXI28nb~wH@_lrW%4qfB_C^+x18vj3xpL3d$l+r??foLK{^*%^NN=jJ?r6FyVgiz^Q zsf0vRT9gpVtez($m9+QXdz{YR=lA^nIu}RJ^ZC5TeZOw5OYI?5Xve4IrLvSB7%dd;LvX7j+4;hrSA7WbUh5o>~82?4ui4yUvry8>tWrR+pDmIp-`9SyY zfUPlmF+HEJrL7zd1=5>qqf@c>0lh{1l^REc$t|Uu@A+xK?Ag8kpz{reg5Sj24{~5| zmz3_KQF|DXes(|j&;Tr`zW&(3yAHi_UG5>SPS7Cbar-ns2Rchmp3o`|hJg=9WjimO zfnje6%b-m{Fzz!Dda^GIMg+5dju{3RXXzTQtx$(C<+avz{d=L`y0x+F%MGYGLCj#? z(Zcqyy{CQ79OjRwF8^zJ4Sm|;+Z3WFVD#S6&xJLeFdCiFRdnJdjCLdn`8>6QX*pS? z)Fvv-IwlKU8c2eXYVl{j3u2S;&%kVi2Je2XCIdW<#>iCQkV~jzgvB(p9!?xiA?i86b&OO z-P=uWyTkauQhHWzz}{a#e(>ol zwE5WM^~3(aT#g^7p%sA}KY(6r8B;aaLUj5*Ed ztt`C^1EKdsD_5?BZl6>C($=zIu0T!71&{G3>1eEcE*S~iAELC$4hIv|A8Gf+pTU67 z8Atd>hN-QWsyZGX#rEV4tH9tmjHUkCcUmqJx?VBQ-|xB)O`_`cv4vJJ5hfv{5-$(E z$lJoOFBUC>)m84k^Ur@RQ1gKBeG{=1`aF)wm(*kWmi2S?W)}xWS060e>^ua+LHiHe z9M6T0Gb!U2)Qe#H;~J5cE735Rn|y8T=QZf-JGSchRs(404>5SR$p^;j4@cTy{yVsD zj`4QmcNn)9l=R%zhrXOADjkKnFm+=3!bZp2(7k)bMt?_Jm?ZR!zI3yO60`lHclutz zsJ4)rA+G?bG1;>x?6(i}I43y9IIF;r!q=;aVGGRPRTtU6`2)1ws9bA%J`j3rPKdgM zoPbdm_lWz))f7t?nr^vBvVyVwqO?klGB>$8M5_WP_nU@|k(y_gEP5xaxKHn>bKE$N!lpU(n6DeI zOXoq)_tj^1{&j`n+VOLDE~Y`l;K>aSKeAy=?Rfa#|CC_bcf(d!IXjr*Yf5$P_z7bx zZ?z$*y3p;N6Lx)LBMdXv-w4sEf$1$eyJdH)K!>6*E+q={9q+;kOOGcoom0H=fLjtw zw|(}E1}yiz7V+ADC=a@NOUcA77huB7>+z3Me$ac(w=T{^2d2*-Flzah1xt?`ONBBb zp}THgXTv8m7&@R{)6Dt+lkKdZ_mwfO_1~VFdc+%AJ}*DrCi?_tHH=I1=hC6Q=*B+D zOCB)Vta_#E00+jA>do;Ri;(XspGmV(df3nBQN8271Nrb2`LK~LwAP~&OZ^(q=6sB* zpTvOnx~nV0AFqI}<4aEdFG6AX;tBHu9&tdr@#N>LZP75iULZuY{tXMT_*d?GD9qf& zcSm>NFx~Zg|L+A6W(zl^jiyb)(CKfIuH>@R2kW6v zT}qk#;RAG1jhio)c|l*~&cHBYJxmnVxW#`Bfw8Z9`;N9d!-Vp45rJPmOl>?7L;SG| z+R9XVv-A$bjQYvnGxAa}aY=9c%mphz{)?_lqKU(#!>83x#E!wwYm}B&g-jR=Gq{vL z?Fo~PTVe}cwnFp6$Gn1qgRt~*%fX69A6Tm6+5Ntp0K=cI?<#z{6^1SQL!3#6;4kI5 z)sCmbF!64a`f3e0628OnB`?Yq!gv9%ZKHVivQlb_JfRfX_) z-NWFjy~Egi*9Lx?!}#s)iv-zLIhZ&C%X;usPps z!!X``6&g}(>XPE5VXCMk&DjIR~{cMB+0AuhjFcERYe=`}}gu7bYIm9pMr=`d`QDY0%}1q@ODd|2`M z8O%kP@8MXwKp%_{E{FQTc-BsfWCE5)axYYlos)(ozV3S`-GA`cs3ugV0psSU1e&eL zW@vSi$De-o8v4se4oP+7LzixDV|(ETNIo!AeQz%gNY0)sYE9>$$NS*^oU}7AD7i-! zr9Hyt@N#^e^b?p%PcB^8ngZi8pI#*$dj?dULMw|@Y_I$;`K(m+1kyiy%edF_SYEdY zH}*(_;gB_R1unxdy92GbE_@bd@~o|(F${jKqkI2)6A4pOxZj6UreV16x3KY*02q2V zp4&H%>GgS4yj*q-^rn6z-8gLsE%Uz48~y*mNMh5IExH&7Bp>j8Mjwa95Q06V=EB(E zQPn*T_h4xs_wakyVwl<7w7*_r4RmVq`1XWn(72~RI?Toy2J^Vrl{Rvq`EeuV)B1-{ znMCci3wj2_omav>-tvbwN!z&FJEEX<=F0DztDIoWZ!X`+bSq5Tg;||kbq~f}*XAY# z3&V7RZ1e}ux6oN*9cRvWfiWZdN1OnRW1~k?w`!@v^yduqShZ`=Ec9-4c=Z*SkhU_8 zd36%TnPpA;TkpYQL74?TMh-@A2fni%UI7CajlPmkX2I;O;6(m3A7;PA?B##@1#|Xn z9XF+In2uEdIY7q07clFJV173FNvjSDy++Q8p_}bs^u<8qqo%{qGtb|nxyJxIN9tLt zn?GQxs9p5^x-w{P>2)!_UI0C{bM+ac5rAZv?{s77qWJ8;V(TqgN z*NPhOYt~S<>>U9HLVBcYjnBi<<%x$O;=NFAd1>9T;_|Z~n-A1Y`-zqXq-IZg~FRVr#!Q!c^yNWH`?OhNxQ zB%wD|2fE_iQh)apz}RgTBqr-Az z+6^(Ox6o%M`(^U{K4?2aZNN86z=VF12D3B@#sVlEtEw)*+|fYs?T58tQq!P6>8h=F&$+>HN~6@f z*iZ1wD$s5Ffn?|_>~?j!@dL)^Co`4@?!&CGcc99 zj=ksP5KN|h%zHGw4aOvjqdGqN!jfaE$(6zhm?cpCEwwkn;E#{Hk^OPdpQjvlH?#pd zRFi*yORIqP(7raI9jY)i@7eQssUJSbOo{1i6^Ds{j-#Eu-=N;*+rcY0Kf(Cl6eW|> z7%xA1*?#*E7rM{TJRG`i!gw`rwR_rWm_9hH=TI94jg_fQo6yZL)_i(<$6+j=-8OX1 zm`;E`q4?iQTW-NXowUM3z7_PPcl*CsVF{g!S@Ha0Ll~`%t~;3Y2hjW+Rf3-)OkUqm z6e{x&TCN_m6dgMO)x694!Ef)tl%?0Y^s|+)w0qr$AUQ6~JrgArC8=x#iE~OvZ55QP3TY=e#gQfA92o)s)Os<%Ij>y_VbM(BtcGYE=lCt37vkhP=JayBK zzFKH$PkI-)fbmnmdo$lz4kp82u)W3&VOrgip4~))kw$v|Eo)ay9}wQk>JFG)qWCnm zV7X0f4SBag2#iQYCyx1YVS3GLhMCqPKv-K6!hpV5? zb*X~C=iio28@I#o@w%mMdm)${(9l)0b%dVV(()%>JcIFP8^urCIm1{+0o|=~1x!r8 z+tpL^2fDYDZ+9$2!o&>fanfD~=3SI8Nrvo%zgL_C`1|BxP$MULTp!y@4XQ{*;VYQ_ z+eY|uO%DDNWFP!R9FI0EKaMaViW$KTi^^lR5vYIPQ#!b|oRr~+n^Ds3~&o3|_wbq2^%Yf?XBBL>! zG>o@h3@sX6fSJ!O<6>PhFrf47MCQ&(7|B*I3EDCYy&JAHeBYD;eN`crJ6p=Id~+d4 zBaj7cMF!SaEj6KQV$XWsOgoTuYh%MmrvVkwOl@0p3c7yRelE^3f^k{NQ{7@!&?`_l zrO?cS`3_wdzuW*ApSq2Yz4;o(P2*lk*qOs*xpeVbt9>vr`g%NqwgTqAe>L(udW22`$Re2OPyP5rsv8!*p08KGr~)mO>IY3S8=+HpiL9|j3MS8}IZH62U}9@T+|^^> zpy_g(V?zi?p#C# zrVD5D3%2<;!QTym_kG)^VThz&7o~(ioz>%R&*Wwp|Mttnjh_UwHaGvi3C@Pm@Klpx z{usQhOt2m$s>0;_mlVaoA!u|aD_<`xgK-tAq~JgvEJeQGpzS0J6XWlFr)VWG*MK|R z7Ow*{zs9dw|5^tf?JtY^!!hovNqH4Nl?n4nlbe^6!=O*F=A!*dO&H%{abqU#G*)NB zTptFOho~L2XL8S>$M21M#Kl?|%WeHJVKD+-M0txEF$!Jc#(rLuXBQ~K(tGi2&xP;s_mBMr zjcX0iZtv@IRssh@AC8ddkFdGDNMb#fIs|R*5tS2}+0gSKRW|;V71pn zPh>5f2QSC63b&@sG!x-p#{@-)fF=@W-_2_{iu}8;u-k4U6-JG%LnG# zjn8UgIk|HoO~}A;943^^C;n($gNfy`Z$;1#6JbkFHXVKdC--=#udI0sSGS6sh?|_ls?d67A zG0!)+ZdW5f8q!2ris&M>?BK5ylT`Dmd=M!KmZOjd`)s zSY1Q=E+6-S)+4Fpt4nKO*mx>2TH*uroC(m3`}7!wtNN|WNC#oK#ei>s{|*`s}qZBlSfXEool0 zN4pcI|1@47wAu!@**8DY0+L;gNZeNw7&qUcefjPym<)cdc+gE9 zehgl`n%QmvldG+r%O;*d8)@};s^U)=9(`El=>YJv?j}>CH3HM)lF%B@LYTpYbkv82 z!^rs^(Q9taz})xAwR)Q_LC<=VJ^wBL08(#MP4_ij7**0efxmwoCbx9jP2a1B{$59Q znP2+Qm9lXEkU|d3THKs?cQ*`LdAogg$q;~*BkH|=5`cAs@Wy1jIMCn83TeOX0gkR! z@jBscz&OAB=AYajp!%%|`i(ai2m|{f_x4k98K4jvj|44m2AY3GN5n53pfOEpq9NlzPT;Q5j!Fkop;(iLQVB4P z3ldIjT>{4SeshH+0LFh;#$qEzf!n_LW@;@LXa?Ip#(n$@oSSpm>Jo!MiLqT;7vcn* z75#2Iyp90tsjG{|!&;#2d^<Ljhe)vz=(f!LQggvSop@i-T*6L ztL%*5J{1Z)(V?AJr9FV18Mf&sq77_WpK)2^RY1Ks=Q0~141C>1U)&QNpf&~J)E;I4 zo3UYrf5I3@&2NHpa_fQo*HUAnF z1KLEpdFTBw;0CT_Wku%#>+{3DMy>;pW6u!?yfz>o84_RpFdpbyo3>{v^#db{I2(>r z2HHCPf7adr3)^%`R*jzm!5-lZ!>{we^Gy*-7`q0nY+U+`l`KpbNp_b0hX;Yo-lgC} zH-V+K^sI`#30RjmrQ~hz1ls&ngUQSDz^+}jul7X?FumkOEQBh66nRR*_%auk9U^?H z3fBVbcTHf@{BEHBdsF25pa7^*KEDzl&H`7|@wpD^Ei8NGcu6)`0BxUIxcM~pp4H{+ zUsgVVDKGJjbMx4IIq3Rc&iMrFLF>qwQ4?UD(2aOHeH=K4MAx*v!}`n$vzqxf4qR^1 zvPxn-2tLW33*A-)q>^1dDrLFAQF-6Ll#>oj{U48qdX0hnBk+geqYc16bUVMkDir9{ zH?!v&-T~dBI`-`t3QTFs+g;l~VCP?cn#!;M#%TNbD)V?CtCYO0zd8u4wn#*Rb{wXx zTWtQlbO&bt=hQ^AdLV@#D2!691%~En^>z6Pz=*w2q?T_9^umZrj}{AH$=R~c!mqr6wjB^gnmX0=J zbG7<_-PWT|fd1_uZ3AB%$mwEX>=Q}Av_|Nnn({5v?UuMseN>iIUc z!cgEurvA5L@!$Xde0xE$3Q&CM9!fQrfoYSbHY(K%%n-e4^HDuu%02pb`G_zugJ1WU zF6;stJ(=KhH4ey5p<-87+XCGyq49-_EAWl#L$6FV09~4qDpfB5%p{SXF+B<3Z0z=k zD@A~|{{70M*gY7}zr-$X3jwO^Oye!BB1~_l>}!WN1ACac`||Z}VB%GTbhfSo*8FUA zk*5W)E8i6GM}n}=%eZpeL13)gV0m3}64=vJ{tw@6z`Xa&`q1(9K-!%2GE2n^xG|pB zKmIKQ`k&@!IiFGBslRQzs?iCQqU8L4*_uELopU((=^jwdy>D18DGa>5hgA!%V)s20 zmzSO(4a?Qk?B-fcAoC~NE7oEIVSu~eWt zZd)yP;RguL+=;4-SOqkfcw@pvjBDQ6Ej?Ab2y_vv0_`nXz;Y|v{IjhPNIT2)QoxpcvF(nNI7~M@SijHc8?Y}O;A}Wj z3?%o-B;xi*K&}{FQn`2;$X&?#gmN-0lc}{yPqDpRv{>}qvjB8*(5h4l1q5$Sf06Pk zhJ{WdVV&K1pfgWjwpj26nqO*Z=*IKF`ibT#r+x+oNx7v*Adl@;=u;WlPr$1`7oGN+ z0gNM#5;wlc1Gz8A_K*SQQv%+&z4hv_=Mmj45kYkDURjwk?S?98s`|5|{p8_80>y91Wc zrz0f305}1w)BBTO0ylTggp%q4w9I;?GijkfwSN4nC3h?42ec`XN-3bd+mv{8YA>)^ z4SI%K--BRxat2rU1#nI>2OiAd2F9x#3ucNnEZFHK{I)s_yjOvmMSsJ9k-aM>?06E; zg;GCQI&TBAbEWak4Y5G|Be^!>fi#dJB<^q8(=^v9X{H-`+|gI3YRWo-UZ4j7CD2LNaHFYBhe|A2`QFP5g< z1WxP%z9ei9@SeQqXNFk;*C9u7yQ?`+!t<;HlOllo-GWc+!SuAgWwcM`12Civ+qaKo z0%Iq;)8ZNxm=4<4_=~53W?_psJg){uXOxBNnhqdUX9%3$+5u(f6Y~!X=YVl_<1j~1 z4eV9CFGE)+fqAOK>gpOR5bWHqKPkQiXuD?^jq%rjxp`$^^?@2#5b2THaz+wp{6X`o zGK?o$_O5i;{u!uOu01a?ISj0XxN)3sC@>Z}yiS%n14DYrWAW%gpbq6+I>enJ;$$-e zdI~V^Da$I*k*)(;*eB^n-kXTHsgCDi&c47t+@>fRq7Tc4-x~XRDu8!seE;S!6408O z&u?bM1M`m16H~Du;6+>8GOxM-MYDS9^z0g-FBhZ*{JaB{g-hNGnx`rW61tvS-HTCi`W+Za3}EX_l{ok!vW>8bm4PW9q{72)5D@}0OztzYAt#k z*n10m&W~8ZXktoI_OWqbr?D74Wih~$cT z0b5%nPvd6_FfU1mLDacmLV%qrl1LyW9ubVLW}xu19HJv3t@ z0DZE$Rlvf0aDGL3wre&}JMp8&yE|Y$TzR~{L>A~be*Cl2K*2azuh5h{RTfEi>9ik-CG58b5TVT8&_ZuC1*S=>wvZSZzX;m z1sDf&9ADdEK9VM>d+A*@Fsnb;N<=jRJ74YD>A-71TQUB=;6M;CwH-|_g_;7*b4=fT z6LyZ6$aZUQI?&pcWL~@30B!JqNzR*a;1pPYez}wabf5mmKZJ~7^l4tU1ZNAd@5^uc zFK7v9mD;U6ix{80D_?)$Z5K?p{kl598;1o8;kzq`?0{1n@?hPX9N>HTrvKL;0}NLg z1cc+<@9FDX^dxbmsg286~Pjbmget|eV@^A zY}F_q7~i(9%1)~Ro;CTkC$9-ut!H(At{MY+m2~E-Fm0eX&k{1P6ac$3>APeP87R$$ z2Lirz!*U4etVKMw$9)}xj=vm%B<=RcU>bW~cZ*`0@l9Y{j9OiMvYUugitQRxA^>Cc zp0}dE&jYtGrI=7~6_z_?%}kpyt|ObShPi2=@Ys|`Of#T{M*V)Jg!#zNH9=#Iw_w@s z#+tuskAP(2^;^vw%K^mCmk(NEyp_;E>A^n*YVydmPPsgha8IK*(K8Zgawo1HXqN!S z>-LF~!8u?QOJ2Jt{Ser%eBYiua~{~AsM;&|w}2s`M*dLOi}?dt>T}sI?B{a*4e2P5 znHo1eA4(B%s<&RIep~^3n%a(4mzH5hleBF_UW14`#VFRkPy)+(1+H18H-PqM^;n{D z9k6?vr!wTSfIf0pg?s_ipAWyPp4IVycc5zi$Lo1mX8yOPdEGwXKeH@i8{`4A^-Nu4 zX&Eq@7W`(uxB}_vmOWuVoPaAkOQ*%0g5~AHpvQtL;8}`yYGfS*wmKr_k1K~|T~4?9 z4NPyN_r&rY4#KkLk)y|y9|ME>@X68nMc@Tq4^(Nz_V}zx@B%>}m_dIVqY3%IDBq^e zY}y6%HPHv@m9fC;cUJbY>I5>3f3X>J1zNJZk3|EvhbexMmn@hNv=ZpCBZ$%}_esK;PDC9UcENe#Fo)`t(zRs*MOgU|O7%-<*$E0F0TSiW(I z<#zW3kYzfrb~n5P*4S^c%R==)v8_JV7Py&+tJ_$}dRzlE3Tnw(Vgk!~LT4dP9GC{& z@5hv5v3x2L)46LJm~LNpy6;c{T2Uoth`n3wfp-v7q- ziG5GGD@GM)uifb64aGo?vDY%O@dKt`q?3sVmV2LvubbPW3akg09#@Mz1Kyk@J2m(? zEa!W(6%Mul{r-HfYB>Se`gINpx3hr!>s!9X*=AsEHFP8v4*}f`FO3rygJpTc(;N3T z07J5;aA_bD=q2;vgxQ_I+Vng)${@+7Vq77hvw9B-!&=j~GZ-`3?IG}E9FQu&V z0kYvc$>ozhFzdW6``(cZpeY^Qdh7lfB2Gg=`+@Qopd8!zJ3bWC%R5~aOO_qL5-8DJ z@y~%$Njv6oB@yV)DOc7@djmDxVphcRG6>?XZ@O_n2w3eEai^v4!s34)YrEgDVfn$- zSy!o9Af?@!+h}D4d_`LKmD)AH`e?t!O!Ee|f3_Pl?_2`f>8O?+`=ekv(qSsy54*SQ zsa_*3ECwpt|O z-MRw0BQ=1evBDuBg$1mAWKCS~svoMTi`AERSzZXnVF*0oWTlCD@VO*#52k@w37am_O|OBTDLk zT7L3j&=3iz&ljDP!pdN@+|;~84$BEspE{N@Fy8MO(;D!40Q9(a_m@{afc|C9VCV}D z(|_5~gNg01Ol-_AJ^ddMFB7URKXwz?K^cCha}NM>cSobdr$S73XB6$Du>6ojSCk-O zethpj6WpXU|-CC2)OJ^Axp?0ZsptN5~Vb?#7Lm3-hi5n>X?8wwX9krvpy# zU9Er}B|*p)ssmDm)j;Gvo^#{paOT z33q@Th5kNdvkvBr+9mLwCBT?qjr!4|fcIQ_e-ADJ=;xnOqg4(9x#&Xsy0A;Y*r-@P zcNc&;+&Mf~ssQAUcKLIzoj_k||8e7G7w|uK72kjN7MN>@->>Y?h9#LJ4vM1>fP8OL zbj39>puaV1-{_MLv`r&#Tvrl-rFG`9jbjT?K4^V?KJ*=yAHN+4&Nl;g)$;8Z?5UY(8U=ZX&@i^ODliy?4+4XX?~_5w$zZ;!&omp~7Ce){=~ z5ui2X3-u(e23C-ishwpGPb(NiamgThf_=G!Sq=_{Ibn3 zA7}w(do!FhfEi}|cX!S?Ala9gu2ZWA`i0a!VgwVIDIxpPPM-p{;N`xccbhPMCS=C> zZGi>%FdKshIH1{R9B_E`6sCj2*Sw!o!MN|NJmE|M5vPbBrGHlevPzEUvxP!fcKe>G zk{AVCyUzoiF&Mu`&#IXPti^KNfb+Y$B4GQSh?kGf2O3SD*<-pLmVZC4P0Tn4Ecv0N z3A=MZ?l)Cyd9@li?w7Yb`D_SGvy}{4=}C-7Y=)0KYXtIds}rKwe3AWcb*-Mh1I%+Z zcbU@|hxk@~w&@T6(`e2j`OtkL?&u$T*1=sE7i>Pbf42)T`v}?HeG$Mj&g@B!6b5#H zGV2Y&8I~;z0)EhU02MD&6cQi;Jn5TFA}0+Z34R3*Rz%YE(f)4B(N zv&zNfg}(`~&LG3=U z$IVU!eJ=)T#&`Tgy8*DTTp6rQ`U@20ZFZMUFrRO=#NV3n0UBfe&pLfoV0x}XPM2Xh z)AYe3Ut>9-ny5tS4by?*_u&^-J7Dg-+0e(ue8KRL+NTaJV6N79zo^|o#ED5H(9)m6 zOpe{pMImSG{qMq?{C{Envj2HJpbS_ODPv2?D!{HO5OI9p4;=9u8HSq;upIH0qCT<~ z^Jy>XgEg%{+T>yA@Cf6^O~GfB*UZAQpKy`NE$ketf-Iiw4#fC>`5L~C2He2Z=v7y- zbFfAe22NsrsiC^s`;Y|C2_2b}FTMd~{buXUHkhtOZ^vCz9tW1`))$Kh&co81_Ku;5 zX_$LT$}t?B1lreE?@D&P18SDd*1^R?K-$FuR9+D?%56DOcty zb4>;qG07Fmk-veiv*>x@TmcA_Pg%IN#|uDpceaUg#U6TPu77Z{g0zlO@~fpe8@ zaTqB9a*pfvhf#|_4I~j4Cz>%XUB0>Op#`kYS5_{~H(+VowGi2GSD-j)soDRM0#=gQ zn9Y;jK;O`_B2jS}mP`nT`=9ZFxiqbl^im4QK3=8GE2@AtE8T2JUc~g>DdXcZ#?u)A z@;PfmAdbMdpu)xWv%K6C1*S z4S8qcPc8$azGu>Iiw-Dpg>ZzlRdnF2UJ=xAfB|$D+)0h}d8|*hb(i!F zfg*nV>a9^sANT#Fr&>w?>9-S4ACU((Dekr#{sWLg?jMX6!|q|-TU3^R7|1pCpgcJWI8 zO8_!)|3FdFN1zQgPxzK{vAh=Rb|i2;Fg#=T`4+zh(!S~0kNIDKt~JXz?kf#cmt$*! zf75|6+Ckd-Ru0(lsGOYqYMZ$? zQ^^m@Sw7da8)J9El73CL$RcLe`FhWTh& zSM~A&&?~F{y!T;ZJeTQMM#8wtNBj8(^P50754W${{}j0LhvTZvw19K>V*PIWWLTaX zq=sH=1m@!2ueVHUftQ|jtM;xlP<^Gxg3LbwOSY6%+EfVhdgirLk;%ZkLim@ju>t7z zd#3XF&w;spN-NGN9Gicd$J2No(2f<}Vf+K2Fr$C&#Q2Z$=Z`6qS_vGRyk#8zFmRW4 zj&t;~h&UV9w-+a#0{OP8hob&gpxB5-T6Ap$@-Aob{=Nnf92q!)Us5HKLc?T?KM};NuY=HD3%+%(661L|KuEiCY4|bl4UoPt+ z;@X5IcJ3ts#nO7yHl%@wa}m9Hz3MYia+rhqaoIrPe@Yo?DFJ3(@Dq=NqClhi#=5VN z#Q0A9r{pywpu{`IRauz8(v|6#H+v65-wWl(CyC9lT=dD(y8ACI?(bC&T)c(xi>ZOr zF;QUVKQVes#`v<46L)qT%OiXj=h=oO;AV_e#dyTQqVB)Gu9Re8v|k#L|1bvZe?|%s zWo|$!E@6Az$NbI6KZ>N`LBw66humB!2bRX7#Cm=-kdrrW-|wM=ohM57Z2%rP_kA>6 z|BD4)Z{M`nKWSj6yKd@wi`DDkej)Y(tONkKc3s5tpkkGecv5Z`hXiARwbji1r`ks zB()620j==N)97+6Ka{V(bD;_WIx-nkRgwnGjkun$)x$s|%3j;jAdK~!w6}7vIIu*o zy>@(U1@uRq=LD%IfN?43_?IGkV7RRLAaw}I4i^xb?P)~7_LYtrI!!0XDrm3*ccwve$eDD6WeqiT16(`MM=Qw1)*F@vAuH8W7}B#0rIi`BKodW5^*1lKYjJUa`S^D^G{Z{Vf%P}&zCLT zz^NNczh8J3B?ymP+9}bB@a~DbhJ21fXm6)1uPfk?8I5<%LbMAgLI2OzujvmF{`%|n ztV^i~mrg>{E?J_uM>EEo6P8es9n!kx=YJu5&o{rhJpm{oe{`nn1Q!vUbohG2N)^R# zdaihH_XJ9)CU)%*Uy0&HGxwJ~DL{C2>poT9HbMz^gR_+La!~w36DJ$`1%$Uk;BfAo zE5dr)&?5Nu4-xEqy8ivIY?R;>C-cFGgc7#h>S>_KA$+>%A*)kdRCt9#LvQmTgqO># zYS1%5@%_OqM*}{fgap}KGlL0)(U87A#QZfPxF8nZAS{aF^R7Q|INOB?B912I#c3hT z4q{r0OCch-lFD~dS4V{m6@2`#a}(Cp>Dt_NLHL(L^@XOz5Z2CrzZ_SdM@5$G(r#FM zL<#9?r@o%aLAW8utneFyP?7elF0RQlsL-%|=zn^#sHoTKi*l3YDE^9_P+ye>!v9Mp zemJIsiqZM6+}c!8;i1g%LMts4xBcHQpA#sGzimdEeC~|mq)5*Msm%yWtVCg7+ig^s z(b#W1_!|+#NPC}eQ$%qWiN9x}w6N!Q2PLdQFZ$R7ZgW)k>9eu1QE!duCLoU zh6)#&&D**fp!hwBby?O-6z5W}X6}0s#kV;OoZ3c3andrcb3+snPGWd8`)3fsqrF@; zyHNw7PTo=S+m1tc4Z@n6#^g|;{NB48J6aKj!NVrU`<4iQ4|kHMRf>wP=u+-ju?Z1a z^`=tycA-MKKg=Xn(@=tp=aWO^*9hm}qd%|4MG=-`!~pIn4&gu1U2z~T1mPFo`D7|w zjf(%L`$C!i6k%;2_|tptDvCQFx5di&CBi!+G2?qMAH}_?m6K|5LGdD4<+rvxLJ3px z@?T_qQK4d|_g$*5P$4-}c{H7m@O7%yWMqFJTq60Kqt+f&IPqJ@t+_{t;K1OiB$u}c z$33`)e02h$GIPVfky)tleYR-WwO0t=w2P+u{t=2x2rKbc-i8X_vyGSTzlrd?vZIVi zVkki;;(B8z4dGHUT{iFEisE$4<;T5q5w6*D--91kBZ3nJwI`0r?tyvL5Kl*HgySXO9Re5XYrMw3v_@vG+Za9O` z1#?O{uc-+0h2Er$st}65pzeh8R78c&>lSL{IwOoJ?UGg;*$l+j{fjSO-+tZp7-xiAHQMPDRog*t}bDD|4Q*vH85g zcKMu)u%@#1Dj!iog~UIfIj-M=;$K?$%Z5sz;;&y0*D78>MW*ELjl{80{F%7xVR-FnWnm8g)t(&{sX z6)2%w?E9&jRjBB{ujM^C!6;$rP>5{KIaFk$4Ew#&9Td-y+w%UmIl?;ZcrQ;a79|9E zmYq0q3}K%RYC9X0jpBsw$>;yPhvL*5-N%W+DDFq}shD33gckMb@gvMe$9v*?5dI6(qwz-uP=fMbkZiL-STeWvYro+jOt;J29jBZSu6oSq;rTZx z{)8P-;|BKgQr^A#o`wiFr~L|r){f#%DECg+ou)sHKb#?le?F>~q^aTekD z+z8!#QyRso<{ni%osWvm+8tC`T!j+$KUb6>)gb(~5v5O0BvD-L)%=V0D-phKK-1TAPmv1Lkc^|2tTSvEZ8|3;l_$4-ba#A z{O=uGS0B2D@a`{0+zCxah2O3X%m^AocupTa<@Z~m!o|<_9%7oIBFfj&%7YRRR?CYQ zif6I8eY-}nuUr6tQh&$(tzSZmOrdLgF{$8 zm7!JvWeD}%LFKiv^C%%wjdV&u9Thp2WO_Tk7bUcce@lG-9($k2+yTFrsL+2477NbL z5blvZnpgC4P@$KNhkyM3j!#oN;cEzZ`VxXO>z^ZC}O z@Ds@fdC3x#&^TXk|AZAvP%QKn(r!h#3Wa&edv73&yma?I(hMrR^v*^xSro0oki`xLqoR94du4J>5st@Q9$B{u6<%0dzF~I)igWm4 zo2$@=&GBgyG169q6Ys4t()J$389(qmEEI?0-;RmTv>73S0-u(J)rAQ6_Y=D0- z??QznlQtA*{pTiYVG}CSWxw{K;yHxfa$I1NYJmu@el|C-6+wkw_><-hTM&-j)t8sI zokE3!N1rPPE26^dyA$7C=|x2xq>9C|bP!&`mg!^vjUyz>))!Hi?qmCzZ|o!5j?m88 zefG1UBZ5C?er&JKLkY7>t~4DK74ka!Qe3MQ#ce!&@?K>)BADG#EjLU;g(PZawoQLW z1gN~>@8v3lv2oPKcfS!Tc8DSW)A1_8KWP^GNVg7XE zqx?r%Ar$xa^M29bc0}O&`-j&}A51T&9__msj|xdm_jqsEg>YY{U!VBOMDgJV2F=Z| zx-na1^OfUK!plsnh?#AeZ+BlIx;A0wcggw66h;Zo9gD8pCsE;=mU|zI%Mez0bNl5H z7lf_(x9JLT2qi3s7?B%xBfK^zoQfQ#hr+ot-;ea8_#L9P&+~Lqf~v)b-4(_teqZZ{ zp63Eoc*C0(cXt6w@NyF$(3D2_%kDSD=7kVORpp!SDQ{51IoY)hIwAFk!VMKM$auAH>lyACDDiC$PgOF;2`cZ=$zFfMw#;^Xj1I=Z4u_GF2Z zH^SM!Jw24W5*5z8Zc_5(0V+%|PpkRQ17VFdHSYGbLUCcOAKN^WP@x^+Eqg9t^?CnZ zy?$~PBACBlVSnZ*=JS!q?;89?ICrS(% zkZwZF13gECKi_1sNkBw}X1`QKE$&9~UJh^lr}?N*?cZZF+FVS>{!?(uRz^kA{rwou zvM6rT_AQ%kqo_#o3C20!YJ{i1@vO6rEas;N>jZi7C|-I>aPB7NSBDwx?r||F&cAWW zHaiLtbZ_nVA$~-d51k~uv_cWVzWVWr9Y!dAb?r(Wwl%_&Osr|VfJbqb{S8ttdDwhR z9p3Xr0u^h)-K|lQ!gN5_{aRrz!YiBgJ~V=HG=n5=D6EMHTJ56N6$qoa&j!|ds{rA1 zB;_aBWvFocmF;C2D8gTKPF$KegNlDR_Uw7?H-uYcF|E6IE5g$}v$$bO9pMpTh=sRR z5rOLi_Q4+yQQ^|no?P}Lgi_?1lM#mPN9xbIfmhhQ{^(}0USk}{r4Fcd+(l?w-}gKI z#OBOs--M>I3c{Y3>KSX0K=Edu@|R@0QPJ$nld>@xC_!4UVWF%VA>Z8f(r};?#rN9T zS0oFegrR>Yg*Rim(RpVzE(+VDaZCU2=dkZLN~V^5UW2fmv-FKiG2c@ACBFSXcSK;; z5%4klB#Qf(rAR#V8WlcY+aX$|gm9i1%@{uKM+C?=r|Cl&-#%A-$!e`b1ag-Y2iE*R z_y?^d6GJKy!K9Qz<*s-XzpxT#-0=$A+j>fCXEBP$?Q*u##5luP$0e-N5XD!mG3>N^ zg|Hh}G14FuCA1jjU3XJOadE~PVcYXik<@7N)}b{hp|svKkNgnhuO_M7xGxB++cbTo zCK=oBEm|?#xhQVtMx?=ZY(BW#(WsvR2tCJz5^5!jigesOJ59#8Z&Ebk?U$*Z9~xab%wTl0XRy<}2u|E`+u1_20k;0SG@=%OT!uS8#aOOdm=J3p!DZ-+>BcoeErjgncG)!giO5pu#5MUx_m= zh@iPj+tBJ8#v%P@1P`#jYh8Ud{5T60mL8~@`IdnSZGRBhBEYyj`Vr~UzjTz~4!d5Q zID_Jp`;Qzbe~IFpl0U6JcpTx%2&Cm*g;62@fRqMTjQ@@euFd?HisI<^g!L>U5Wxt< zs%)d6!jF&Jtu-4$g`PFf4(NNL_%)fF)_zlj{ZnDpAx|Sz*q)YoGzrTO#b%cub*7;N zdX)9|tyujIjh*PP7{u=u8#4B@xX>h}Z-p(4c}{>>WbV!o&>;)wAo{$M=%{@G82 zXQY47#z_w0bt=E;JkX8`?T!h&@*kETHXbdh$-9H_mhNs(ICU8nvK~G-=1D+!&1H7w z=}ib<>+_f12bhm%(qCA%VSHFIPW_(n2;rpfdT{AoJR;C2-FCId8{xaIRv!9q85Iug zO0R3ec>Sn~jv(C+p)u}ejK|2L5=|-H4m3Z6oVR_diDZF_KivPl^|>9wT&bIv_A&>> zIadY%5z99xjWWYks!_tzf%#|GVo{utV~OGlVT5(eY?q(JBUH3i)m|kK)4K-EeDiFK z7i&~*mpr7RLYl#A+l*RKq43UAJ_IJlzsEP1%bi7q71G}ryT_q~J9ij*NGQTju*g4` z=Y#NhqT>=(n-ET6%=~SZIKp4b2}E_w5c)owM*o6-R9N$}@z-H&&Jxa4P2ZnGg;Zl{ z1mjTN)m2v1z^ z=0`mfRH$3ZI^bsv!il(3W>$6y6%q01S`izD@Nqg>Q9p60@R1+Bb|lOXG@WZMgl|QK zLwsL5n5Q9JwbbWLT}+fPXBzhD-F>W|Y9ht8S(xsdrL1_PgK)XpPm^LkAbfAB>+7^< zP?5T8*Rp1?e2DIU;&JgU!k(JzP_*eq1h<~P*%i@?`CCFqyrUMvu2uFu;&c-gxe#kO zw?`G>?Z2KLO)y5q-|h?lQa^}_YJ6YFUCl;Vs0Modh%3TbD&MDHa0;vYx-5H_{Ro|7 z+!ofc2NlawSlsYu9K~&8xAm+pM+rP91I@T46c-`B^DGbZKVeF92UikdT4oS26hH|k z0!O=tSYL^6UhVxij4XMUk5lexp+XVPp2YJ?I}_;g^g?OqI-`xbJs6^LHemgztO3X>>n?|Ai7(q-%kS%7_Pi{)q8zmS$E;^8K5-RF={_p)ityqq{6K~Ei zMscTagio|!d^1GkC;t16aKf8A$FkZHhIjG58((HoyrpZHmrFdt{=Tqzw%Z+H40wC= z1!6jwvgUN0>i{am)KrPhiABYfs?Hj%^+gGu3$O0QHlre|^uo~7 zb^y0U5D}IhbLvxIjD%Kxxtu`I+g=E*Rc{_p<;jXeeVrDLIleNJs)cfP=e@# z(8(=zSe|ZT#@Fme2{tR<=d15U1o9i>UP|Fnp_27`ceJ}ATt6fK?p{rlP;Ga{$K)I; zL^LYxu1G|9FM>DDmtb6)cQ51cx%JrIB2mTUT!e4&B~>gH)0s_LeXg&udW+fOxb^`E zGkAGTXQePIs`O~;fVU2&H(R3*l%=5}Tg?5R>0sQv^VC+^Z~7=M2CdSlFhX%V)GLGV zS5T3SziU-#qlmyhTd7613*p|yd$!JALnsEhBhP{{e{0i9TwRWF<==C55s$W_xMQtJ zrxwp49P%qYGkPbAJ9D6{x&z}Z(uJWP6QdZP@6$i3JdP5S;9*L82Euw(owjkM3rZ-N z%nPr@bYSt=#>#)#JvaYb;I%$PMP!*`zqJYxe&msbrwcn#oaSZ`;yFtce<4P{X%gd@ z|K^Xm4rpV(_Pp4u${gd_6YsVRZo=kgxmU>?S+~!I2-T{`x=ahpgSI|1`;I(9 z33^ISEB-&Hz1@kQjRsJho=&p2h9&l#j+lz&QB=rcbAme?%TcSfXr*m0P(pB_%ih~J zP~6ov_JOMx5WaFu1^osS;f9V^0i6SD#rStxu1FO%VA_)fkDozQC>y~}z z5%K~RaguxbdejTy7Y?a}|5t?K2Uq;;l95NnM<g~|M^SgA%YKUIyuCP2>FEf<5zF~Agu3QJLiOa5FRcjqw&wY&l<~Na`;%u!FQ<87S*7n z=A)=k%(j|a(OAAwTK9GTBYVtuA4bS-$wKk7*KOafJcreHXP|$UKPq&wv`uE-1r=H| z-gHs_AByAEM+tPiP=cY>vvg7~ircVN4OL^HIG^z8d#@}JmQTn);6;6e;rY6Ip-~dZNw7+_D9m3;tg|1bVAj`$=RqNWNQK6N@l7Y36 zDB)i37k#fBROqYHAL(nD?)GXbb8~VK-j>!K3yf}5xZ%{pFeh15R5?Fec|s8p1UVB; zR$=E>%8L593d{Fzw`IOR>4ggaX7gE^x(JUpG`sEbEQ*sokk`flROG+5)|MO6sIZZx z=Ydk}`;E?ZFQaEr(J@!ah_k^6zY-OG>7|b1W@`)O&tqIwSp8(w`_Ch38O_eGK8ty51;GDCFUWZy5;ffR`t0 z`U&P|MP^dD?+`)FmNnleUZWzUCUX@p1%y9!Pxq3jE{Z=am0(?g@xTk~?>lSVQM}}3O+c78=u7KYK0pcEg>_YL zr=en3pDeFQcSE>4(04Hl8?pIqxn+KtkK%9st^99#5yb^Nb>rezqCx?y@&jjKepZC> zxI=bfz&C`s>dml>f;_^|EV)~0lY`=QB!bo~zC{?qk81H^7%$$LF}$mpj|iT{k`FX| zM1>?gqas}}epo3W${1t(VL2JZd4##3l=W7k1SOo?9{(%o z4#GKC^c}Zf86~{#Rs8yHGb-#DU`!dWL70x?RsA;%FdqE36hx(zoRljzQq@-hc zIZ|>|Wei~*$6+?y7i{3vAbwWjm*;)yN zUkER%`xok0iZFgnoeoLsLpa6*Yi(aJQPJZU!fG!Vq2i`vj-nTDp@jEe9pxXiqr$tZ zq!Z=!P*LLOWA#r*5VFncBs*mngnv=Br#XwDEun?t*Ln#*{J00j zpUVmgWFr_Cr7tR`Vf<}wwCitjAf|IiSA8CpMyM`7>7rB%ROrzS&(}LJ?sGGV9^*4n zd`#{BBO}2G?+!eR4J_$nc;@;t( zr)yE6OM`F2UOJ)T@9(7;$U38VTauY+p%~VGk%^p@wFqmiL-r@W94d6Hd`9Wl8Z1AW z$LKys5$2YviuEtBoOkbx2AyMpaH~9i^3qqLc)p&if@(ZMS@)A^YbK5ow&o1yR$}@7 z=aYWp1wO*+y)3l3>){+>Xsz&Mh+u3$}Zc0P*F`!k0B?;j%gXs)P~lYuZj3K>6c<4^)8q*Oac z7{!}$rMzRCwLwkwzsfZ+!cf zP<3Ae;g{Ex?IoW_MI869G(LlIwA8S?b729(d2jdgztsV#kj_WSNjQV$=Tc{1|9nhu zEJo@3oDi82?+c8*T#n?M=>4C2~d}pK?&-|O?#{QFuk$vk=mCB z?c^8lZyEUj+j*ObVNn!}i9gx5hv^37BgfMlV#%-&btl-L?g`W75+W6|$uO61_hyW39;Xg$F_!za)7n5DsoVIq-4V!U6~1%c%P=>+N_$k8 z4-}L6TNhjHfL`$9+t1J}AQE!fH3OE8>oUWKc_zGY+olRTFItC1Oob62DIE)~W4o&hf1rfn( zL%fMNiKgnL$Y@wBx_foCk}yzTbiR^^ECKRmY3~8^b3l22H!*MN|MhNAm`BGQY#zwo=K4pm`t~hl*!Y(N$;MP} zpTR+(^h-OJb}Pb|U#uYJKLCc^bAP}2d3ZtTuJ&@hRx}PLXGdAV6^m+ zp2X2aAQ?QdFV)Qj+E`E6`l)f?cE#;_^_K{oRq7WySyDjCV2L>E2f~v4B#C!W9>(#0 zH*!l;q5Hs_`Hc0WFtjW6-C=7c5f^-H<0z#JC^erSdut5<-Tb5DE&c_Vve{DltpR)A zuA$r;4JUy<7$s3M@eJlF8roIvmjU&OEd0J zz)Vi<>LfM8xV~rbkB_aeJkC`hxQ@c2?ycfi17<{=@@GkXr3#>Mjy2q^FaY{-MYo2J zGQib8cY4L>O_&bRK9Fqh1=EihdN-t;80f9}a%C z%|#2SGhr=j&E#RE+4I3V7Z0Fc6cHY;-wZSFRuNAv)WYB6t2zra1E4WNf`9JiE||N< z2=LL>#p?JlZnrxQsKToKP4~oLVFNHbsw9A^Biy4ez7eRWGsE`0R0R5gWSwJ2wSY-o zvWfLl0A^k8Y132vK+$2!zxgQ)^Q9+GB|d+SyvW$jJNQSHh>MNF|2c!zqoHtrL{=Q| zMMkq8Nj-(WW7TUfs<;3Zzgc;<;4N@M=l9vPXaRYDQ^XbBjX=KLF=F0z8Yr$UVl^cP zVL6@uhqMCg|GD7{KSh>cartu%9n+yvjimaPRgZwJn^sqCo&sd{!n>H~4`Aw@epLIf zY@l!I7P)Xp49I2wk$ii+VdnPN`i%$5fL-IlIvMu^#y@72YMitIN<`>lnX(})SYBK? z>Dvg5qvK8XwwS)v>G;d=5`ZVJTg%_CKmV#0U1~JuiG&dC1>YC!A!xj9^&H zCE&MfFi_Xnyd0P$0$F}N88PYyQlzCL?dEf!T-6W!*Zl=}ci2V8rOp6(ZO-U5k0t0G zKDcN9m>f(}GlcgYk_3MDwGUc^U08qIe7qL%z+L&@OE1qvpcC3OUUdb*yuoH(&xIpE zwQ>E>Yi~=$OT2$};kOC!LL^#!B$r@T?{bw)@n&Gv^7qZye+Ke;^RCg0*I`jFD$XY0 zDA1a>_oNyrLwlb23*STO*za$R^N_QGc~-5>b;=2ta8X@*^;`hZu5gpyU3mu0PDkW^ z3+!R3_i2zqHV)=Y@#%l}7yv`@L%m_jZ&)f3c{?d>4U_)svqW9=f$1jXU6T<8G|%w& z`(-{6agHT_zTRd4`JG;oaEm1Luk~EJzeg0<`8!&@h8ls!ULG316%Ew)AAeH#Tp;Z| zlp15a1}LjeX=j;O5OGcvt%w8Rz{5F~?S4jp9ttT*=KCGsrasJV>e7Pc)W_E^=#$|u zFYoT!%o3pAd8?yv_Bb#fF0anWihzaMsjoW~W?{U}z3}1NL(n1PaUsFyD3Jd&xNPW0 zpg%kF__cx>plms)O1NSTGp?KVoAOS8peD&WBCQ)1o3E<>{k;ZQYn(64{u2Re+U^Rk zy;49mwy<~=Pk<#06@^8{L7<7LhmG_N!AOQ9FgNyOTs~0;$Xe9 z9@zsYX1n6k`em%oaWbwJRWKf_dByq9Yv62=%4;NV2bRJqE1kg8u>4{-Gr`gdXzdQ7 z4(IT&e7Xcx*zgkQ&%C$>8~*{*toP1(1w?AJ)JXrF;6CvGQ>l6)K=hl&d$#meihW%UDvICe|iw_}F3g#&9=TcpVfn>aC zWcN)`=>GCmqSHDY22xJGNTf`|#LmEKzhMT#-U(lce>CoSe`%kI>gLgD8QBM)553DoG1cAD-1-`x7S8lM9WyZya}Lb z-}z6-pc2R}xJ9`PGR7^(yt2C<0|(9BX0xLZ*p~cH$I4J>k>lF+$ulV@aV|3iXjA<@+nj#^)6Xn5l#m1TE#a+O9(w>s zpZztkDI2TP+RdL7DquOuD*J{-CyW;dZrqjf0!aRmuLR%Zft;2vds{RWNPeQWQ->eJ z@`-;tZv?%BDcg%)Ht&70zTZ5US+omg*1UfGcI*YP=8N`AnEVIqGZR-2^A~{e`@GO? zPYSShD=O=DR}*m)r9vZ>>tS9l@>ub`-LS-3zO2^v4dxREHizp!hh-1@zXnTOAWu%1 zglxVI{Iy2Bp~OO6|90I|Ez(YvFB^XP27db+UgQ-1*vu{p018GcJ{aE7% z7>l@3XVvr{%w_RuLC5o8yg>3mmuC`C`?pr@*ee6Gdsi++^?L)8&@|gnwGk-I$%2|~ z;;@{MzNH~^HIQEFA2^)g1w4uKt5WXU0xjX*=c3KIFx+J~qIO&zXzQZAckgKf+K_$7 zj&pZ`mdB9F{reDRRZ0wk?K^;>mK8dhnvUta*=vUoGa|la{#ycJ4n~CHY-X=2V*Y=2 zB6`Dnn0`||5gwQi6xzw(EvB8ov-~cFWLyQ3*Rn5!yTJ0xw-w2%*mF}pZ|_aE1#0QV zdy7Z=VdzT3#;EWz7`ZZ{Nc!>^3e`xw#Cn6wj{ywpU)zW zqd$O7ei{4P;1tYkGxC18Z5NR7rXGjFi-FzNKyw^vhry5&G4n-VV2SLvr53e^Npr>` zs+9-iJo-7G?SEnX=Io-+CTo~qw*|jbfe4)oyZlXr>Onv}s>xL0!r0{y$Jt^fAnizh z_>N!>Qw{jogNo@GPg)rGYam$em`F`5-ValoRN@ww^k8(_#eoI>BPvO@N61ftjyP+dKW% z10&b{o0Um9Q1Y$8O5PAAT^d7vubKkB+?rR5q5r|sRKVjX>kuMtQGE6rQ4i)R;~85{ zq{Ha=;|IRwzknt}e>~V349u>w{Wo630xj!P=8rTp==hITQ1o3M1bH>bQ(gRkd8NN) z)%|K9S3k@#*YpKW57Bx&=rizy-F9xVlErkuBuA{F6qu3@QDZ4#K<53WG^o16TtKbc zjn_YbY2(IvE8h-FiMiK<)vSOKkgUdTCP4j$n&*;gTwoS|raAg~0_nTK7?~6XjIzKI zNq1S`hgHsqb84`A>Dk((V7Z`(cjr%)Ei6yUKh~D~3QHlx{;LV1Ff$%tq`h1W^pkyZ zkAJ5Ec^Y?myVnqqaZe`y`C@Z{pBS+;Zi0oWe$iCTt-!Z1*fRQp475*DH%;q;fyca* z)!M5LOQZw%)gui+`_{&IwkMp3)9BxKM)v?V=SCyJ*D;-M|4mbRFaZ^4F>wB`x6fDVt~tCJKO&?2p9@llNI%PFu3P!+EtDm z2-3%Xo=jQ9cs9xePr3_?(KYI&cW(jR{ycZvX>*{kverE&pM+7fn_)(`cL8&dB&Nr& zg88Zs%dSH*(84v#yQ&ibeECR|w*fa{NzLaMP2nm`peldXEFJ*1)fI3155}+<_Bq+_ zU>Hyv#Pv6;?16d7p|I%QLEsOK2Jcfy1oFs%W7<7cKueo?SZv3l-ac z`X^t7_S+kkL{n;ke7)Asz~Xh(?x7b2JZe&qngqx@3vxt~B2 zy}@|U_z}oYZ;O3vIR&Ju^C5#rNkC6omouf=3sn1-15Xa2z}jOP?Y%W0tCt%SAEE{P zbD~ZA<5XexXupSeZ8FeIULO`wbq310wJS&H=Ft4rdv3xp6y~1q5!v_f3Gl~d^mAjF zMBER{HgomUK<@7Pd(Ea5cmeSFl^h|^C3GB2D_cpJsPE9#`x?(p=d6aWBmSp zRK5V@yAMo)5r3FAS(rSr7t6J}&;KiXPz+?1FoEmqw?H${tozxa2b4N)5p&ev;qfKsNi zRo~qj$j(7W&!>3;qpKnDqKFJEe#xk1?v4g>XuK5uk0g+P46pVza)Zf$4UrZ;)4)$W zco9uafF}39pDDZDpxtea%;e)& zuv~LPxVY5udx;HyT*SMDyOX zs{+sQj`pQtWgw-=33r%i!pxzizf;PX9wv>PGWDzhDqn6#yb%iXDIb026IWoI72Ln> z@&{OOi3|8^z8{+dq1%l}I#BgCU($8K_F-fJuS59+vyOVb?~E=1DY|I=)iEY44IEv2 z+PM)XspDdl`_nMGkNw80dIIy&sNL}syMeE6I{1CioP{|_{QL*o-@tft%l*5|HdvtPMB3R`0kh#Q zzc@Vx%LNtrca&a2f3ny4OOZ~%*tX%{bmo1atgG1>EM9@-p!ZRY+lqn3BJ1AC-3#1< z&&BI!)&MEw@yxH&D!?A!W$b#h6w5DDUO%?5F<*#%bLB!LRBu(7bbFc%^rS$$O9MfRn74&@b>tB zOKo+9+W%C3RoX}c`B#7~ZsQeL{=Sk_ec&N9A6tHQAYTsVireFB$rdn~d}~-P7|Ycc zG>?_tErFpuQfi*=l0@9GJ*TDTx`BNne21k)1?FGJYRaqCfjW26UC;70EQ{YQd#|92 z<)->TrC|x+glN8AcZ=naYjm8a#KJUIxYH)=axCLe;u!zo)X4fw-&mC0{wu?V1Uuzh#0JQb*2^95G^ z6d30XT=dD_0rXJM?)5fPz;=4kUvtC*^Ktt1`KwL9$gJ}Z$PI@MQ@f?>H?dr!QTM@W zLCvp^pq3@7M@b; z_CgBiYFEA{>AV1eC;HG_x)jh;I7y}CSRzi#F|ma=0!v4dT%WI74(+ z*EctF-dP%^)7p^z13Q3Ap)`HCA`Fc7gO9wL&46`bXU_t=9p-B<(oD*9fYo|_!|Txx zuoTzOekHvZT1R=+$Hs**KKPs@ABl&F`voc`D_npd{VHQ*$_@C+Thw=Gn8AeRw_EW) zBw%_#TOfjCV*6WpYJa>E46e@tp;#xF&X!K;{DZ^x&7|jDQ$MgbD=nW@k^^ex+6P;c z=s?%|fD|<tIs9C(U1a7t|9!_tt^vuiP#Fu&baaX020R7s8L z*B7&Zxw+LK_v^+Dc`uaD_nqRVFeNoD9oGC!M&ZE--WD z3pwJ}667)PwLs}STD<#&GSC)!cQkC4gk|%=CsxyT zL|mkl?8#npV8z}r4Ecn@$aPzY732fY-64tcu>_`TDKFZIISAhAdht0Xq)u}K!)C^R)=N2mcYA`_Hd0V_b z0&{(dj%W-GCheY__r5O+ljTcn-U%0=(5(Bza@2{q>@IU%KRztE-Qd)G>Vk<+uT_4% zHYXC)*NQ$Xn1b2o$)DaE1_Nmi_V~s>upB!2{lrdHB7SUt*u>Yvz?MI?=Wbp;491@J zTyg#m^gm5VOOee5PT0XrmH0BCW?!s&IH3nU_x@a~wde-!#)FE}i*|<%-vNSKRaHuvi(XxczTB%#Aon{Ed18(;q^=92KtyK5Q+-eKZ6r z{87U1Q-S)(Z%54k|L;UAh_>^WZ^QDKcbBeJKP(GHsz9VW(9fY}bDKU9abHjL22`2C zqVaa0=`9jK-Jf}h+N=$uZl39;(~2<1mZS;RX#lI>zg5R`?d>UoPTM6op?Mil4uKpNF^46Qv0^q}*J#O;{RIp+|}Z>j=kx4&+p#3q=X5*$(( zBEe)?@HW%A^+3MQinZKu2T$-&;z6 zd*#2qZw{*g``Os+4a0OIo=6oizuyJURD9v(S64w$Z+mopdJS=<*wz=ljB`Z%8kb=H z@ry*9CsCohb|q2h;AZjSvmD^xIuzix(*XEiAC2{j@`2U&#`Y$El1OM%Rkw*$0+z$y zLWjIr;I4AE$O=d!5{?<4`h430_{Zw*evQ!pL8z%v%k9lXp>{Ke$cvAO!iVSk|IXV2 z)A#y#ltM4C(55{f@1Foi+#@y-{BHk*0@3Vkx;KXfm!rk(N<#O|0 zv2GI}yAo43s96#5$vezcdU!Cl{^`Zm3XI?UqYBJ*ZUDQYmSpqB4mj&hHmzxW1cI&n zr;=4gu>5>iP{^)GB5uc<%6_@czzU$|cN4scLaAaw8;b^+gUe$qGfHj%I+>27y*FK`!rv{!i6!SbzWr>(d( zATYR?Vxv2S@x$#wKZy)rciq?VUQ`BZh(|)*Ob76T88@#M*@1w3+tl~jE+DaL%hk7( zfxz`+pyvXah~M{c3)gHBxR1A_2=|>P;%`{YeeJCU-mxHZ%ZYPD!p#sA z@#cUM5QG@nKGIMmiq?&s`MdQ4EHCMAlF7Y56teR9gy>^BvVu_HH<4If_1>o z-S}^Mb2btGs86I$Ba$dQ_^{iw+n$J1Tf4wW`34ILU%0>0J_7ru!GB5TZGiJ}f@b#V zIuUpC#=27n?TGjspR>bB5q8= zZ_D&gqNw8g7gt@r0W;--nTGl_P)mpPOn&(j30EB_N>FS*^HddPV;&HNr!8lGRaFyl zY|);hl|Dq_Cj)26tj|DCK7QjltDGprG(tHDs)d3ey!;)2@9kL>x1`eKgl<1-~u+bmdEuS|Y%ClHvDv$(d1Prxs@K6H7mnJDz_@r|y$ z$3$GK`PaV!Y2a)N*WML+1h`%ymk;E`5(#TELl^hHCkoeaiDKg0fwB2bzGbHiaNa1S zQ+`DP(^EpcQ*jpf&8*1vmWIHx-<62BeoYj+|DR$tmqf(fe={gE@Qa8`eSa@zbq$da ze<)&fr2_Cbc$KJ5OArZj%5FLb0*D0P4HsF}_Q3yL+g`q9jwo`%H9>dI3;T6%i;2=b zpbM`2q>UT{+K-y@x39Dco4SqlrY^@Xs&BnS3I_qemgLPJt-IIqdq# zpc;6)7oQT(?gjddt))eyY*;3XS!$`CAmYz&)rO*FAiu5IV;uJZc(?AGNf}|hgG-#G zG;9Uho1Z(IR?vZ0Qj@8cl8fbllN)vumVp^^c_od32SM^a#DA?bEG`#)y7*}iP_~Uv zmW(t5tx@mX51}Lw+<2tZe)$@(o6J*+*@3`5Kexg4aw`bpMiA*Wtt7`>0S%`$6;@;GCPT)TJNqdzc2&AlTy_zVIFWd?BlFa!F2oU z3Ss^0pMm_X%OTNjh(aGSv&_+G zU>Oz~p8w?ol==3PP1cuzf5Yoz+Rh%L@aC@1!R3oY@l%ObcF**Il^A=C-?tYyk;b=c zRk0kucaHz6*OZ7Stv}N{_YC;g4rZCMlZg0Vx=BmF4*_3x>(7gO9s%#AokDJnIncv0 zhsB>!L9qWth^!vwH#^N&{mZWdW^%+}p7VO5Q1oFLNt^RT;n_KgkMJZBr?Yn7z9bab zyQ3V{KI4ga<(X}VN`i>EA0Gd-@4g07Mz7&vkyeb0{k_=j$AKCAZhl_T7I~NT_C|$@}+Cmg*sBOINy^Saw+v5;Dod@junuibF z_(8;1@Ouy3+zq_C$b#3|&#`>vXf;$2OBBlcIo`hgGg0_}wOe!>pD0?=c&pFg8?d5F zHaQ!7A>tiEyAsFqfIpQMk(j7S#Fc9aubR07JeQ#NzRpWTyobJ(kaq-8%t=$sY}*T> zP?n7F!JiSpcKq`6a~lB|zZ6pLnok0Q9@ag7!;&ca$Vt(0PYqG%(vYSrt^qh(tM@w= zE&|8;){G2M9R&H2N24Aq6LI-1V_mBWMBLRwEisQrfUOe6Yjy6zc>P5@;rSilXOZdG zckBmFw@yOau3JDpnz)@`Jx&x!(yi;=Ur!{&x;-%aa{yQ^q`l8?#{#q1GLYZk{gz<7c0V6QI7(TCXvmJEhG|- z9@{+jM+}(6u+wJF6GX!9II&;V)xg;>o-Az@1Ds$vy&XRv13Q_)X*Mnb9@~7XO3@zE z$)gz!=iXrNyJ9Z-WdtZCe|NUAdtuq+SE2GF6qpUiOoK*#1NG{Wuaft%96RIYdTX$l zNGNN%zFyxP82^QQXIFR-@$X+q2kB1&?V0U=MJ+psxV+>13?(7pR#A<~t5y^7ZTl~# z$3Fp9TD_IiTRGt0%tZpyl`!4>a7(lO7m=W!iu)GJ2AaJ`+JkjZiDFUuV;}UN6Y+15 z&#$6dh&cB}QFB5%@OLcNtt`GtB#heWUv!lPy1MkH@BbANh0M*}PJgQ-;*up>gpOwd zd#^}bm9i#~w5)erI-O1wvSg+l%UBO=ZQa+|M|40Sp0O^VV+;hf3#13aBfy;^{*>n!H4~suH1 zjnDNDB}Cl511r)L&j87@!X+&66%l7Vn(;mk({&ipFdW4=X7lZ@sXtDEAU1#3L@LJ9 zE?H_uue^bxpL**__$FXM^R7s$3D8QfxC?sYL2#JXr^C`Ail*J})sP}!zt7EJsrCSC zSI70A+w*~39pl-ej`^*z{*MI2k4Vssa8_>CAmZ0slwz|Ag4T%cQ*oDI`Q}=w!~i2~ z&lM-{CesuUzeEhgd$RSKqtwSfEQyos-?JW+_9u%RO80ulGpzg5)P zkci*ib4FQNfr$Ghc=x4pB@rhpF6hy#AmTnG>s&dkMij0z&*o&jCgSFb+9O$3z^&N8 zw-UV!w5M$2N-qi#H^0VLWYv9O^DAquR45>DySq=>wh{zSDKFW#9Dova^isk*E27YU z;{wMw4}jeQI>W7nATSF!d6;kqm~Z0Oo6C$5MN(xwV}4u!c18~_^{^LF^sN0G@ihuS zFaEmPB|jSDAmx1ua&tsn9b4SpJp{Nt&G_7H=YjGn*?Hsq94u~eRog3dfwWX~lMW($iiI-VvH><)*2dD{%ETG5^E2g`u{%{WWWijU<2OT&RJw}3j% z-rP9w3Fh@%lII_X5^;}Zhu!MTf$ebT#C_9zqVV?y580i&LC~;*ygD$ID15|QCuL$C zunvV#THKm|;rdy1T3Z_9BdMe#qO!oRu25dy5ermPgV@2pSWdb-CtDu#jws?ci+_Iv z%SEs5ZZeoWK@>L8s*x+wBH~33lszzw0oFT<9nZq|1J@&8Ih>RX%(22vyPAcFg#T{+ zIHa75apU%f8j~h4A#v1@~wmU}a1`UD1Z+KZ2#wrvxIw?O4!iA9W(( z?Ai@FuUWwSAYpeZ{RdE^RPH9pV$b>S+WsTgG48s?-1^#s2prmxP5p%hz_I$K9&D2d zyx@$mjL#QLPgp6;x9ug%IR`^P!pOXf1<+mNq@t26gYRSng z+-Bf^cAkycwwj3h{9ib66-p$CJ(cs_vky2DZmVnBFA)jzO6z!vW<=bcsMsX(JtFS5 zAhFKEmM9bz6e3Ha0_}citCK&*m#aCJt^0C;>Qp^qjvEGkj9^9oKsFKgu&KKKel9R9 z@KIL6rNAQmlN#>W2K?vW*}=!xf*@d_#ULRXnDKclim2;BP^A3HKo!ehu9wqpOL+mi z_p86}d=YR&ttBqrzDE=`e<9Q@Zh+`{(yBfp=jfV%$v~ z=n)O)_GXI%KarS6ZhA<>s||`;r;P(kJY@}2>^2dv@%&1wWjD}&B@CFBkcqC`K&@E^>)*AXV(4Fal_ ze@oc!|50?F@mT(C7`OM{QIyaU(vsA9M?|Gi$|_l*e^Qwlg@lw563X5ydyn5`@4ffl zd#~_Z&r2WN*L|Poc^t?0c%kIrpT5lzW~VLqr_I&aThvKcI7q4DJv8fp zz5LePcRnZZoU-59meD2&M&g9viI>M;UIaD27a>szpMEMDsM z4SbI;?*~y!fW>6i*-*z;dpQaTAEgp04<5 zc@Rj0sNOx?pd(PR3f)l9mVmW;X1;gFZsWaJ^mbP&4}KpTiWO#~a8Q^xtm27t_s`eo z-YfipwZHQjyrJ?0qJ|abS?WpHwk^n3ciV>T>VMDNvtHx@e(F#!f!1ez0t=$>C@5k9oT~s>` z2NB5~>rn}~-+Zi^Oml!uaXCs5#C_+3?U0MSIjqT0-uFw~B@n0T?|pp81Bas3gF_R2 zaL9Ip-^FtZmhY#0c4dD>ps-imcro~iKQ^qU&;(|MYcs6D;V73^>_dUWc(~H37Kj9o7mTEYx-7Q+=BFFFSx$`NrAlTQR zxc26cE8Z*VtQ1o4T(>)V)$1@HwqlsWUJt~>p)uK8n&MxuyKuDMV1BxKuwqT1 zFq<0>iU@_xA%kzlfk8N5@4fl;RRY$fwj3)J;^2Va;5UiZFdR1g7!u6HbEI%8I`5qj zEQq8JT*}9LMn)oW-dQ`?iBgo?{EF}ETaU}EmllEC`Np5+iX1phpbmYI%@6wuAMbh^ zIlf5`g?R%`)i1DEHdak+ z&`BV>6Kyzo?JdspV#!g*FTr@rPGC!e0IVC5WFtQg*zY`*yW{i__CM+9oMWel?L<>o zwy+)o(TgXFckimf2L0mfm7A-unoO0W-(^Q2zvNpfKIacRHEPPB`i4NNEqS~=&5%GI z^2c%OXaa%w)bzOZ>jYSzd)xP!<0BlzpLZ1%wu7xdNj-*~jBv>BKpp0Mi9m5i<&rV8LKLvuDxf-hx(Ux=)wAD9q+$P`iq!q*O0czcM_gY z&PY`DMxGeD7B~!5QM-BOJgnSUI$48iVSD<-R`0|O z0!?e#`B(q{|Cs!X#wiOaV5@{^F}4BE{fuALLV@=PMC|Reb$>+(WaolDCrD?*o}d7S zAG;%rGykf(`e>6tv`%qq&|`)`ob^NPR4dLEHLkyj95e_-w$D1)7_Pvg;_@%9m@+(H z1xptzY+)lUhPK2b9sm5MPS?NT9BSKn^cxpG*E3vKvv~05UHR}{GB=h$GIipqVnRE# zkJa~i<$Na)JN9&h2dBe9(_W!I4MreWJ=-^9Eakin(9t zDE_)fy!e+FV0UdNSwIl?zx0zPRRhHY;^VwWFMaqxAWm<{|I+o0KvK<1wXz=vTPOYv zaw|6DoFA}I-sk~aH_QCRZt}sn-J(D<(j^eRvUqRCJpgNgbb{1!Aq3KR_cuq!zrsN; zWpm|5JFMGlXqgV2Y%@GqwIn^GJf>?J4}h1(Y5^ZE8C;e`o-xJ+b@J>Ua@ za$}pstwxDJk;onm+RiwinLK1#9fyBWr}FG_?-MBQcNjW{nGlFnv=roj(hx`@k0!l8 zZvi{~Sv(^*p20quklwxyErFCpzct{G4BmG%NK_IK?t}3irYhH9`*3Y0_?|!PF^pPR zK2?Up)QES;ObSMvtmQ6#cmw|$O$6Pqjygn+)~L$S7GB7#cTFyL?C;je;Iq14C{&Y8b7a< z!(Q=-NqZ*V|MnT&x9-}&+JOF+Ug#?V(NUF~zqcO}hzNEE|1?_Qz*(xyrI-OWzSQu` zkl%&1r@vKP0-IpPdHWW(Rs|dw+V|RCe@dWWD$q`!;efdhvQYs!39z$rj7<3d|Ne5* zz^gu%emE3=`^~+Ql0e#)vCmqp2#2}%Jw8b#5J=rf(n~n=3FK$;Mui_r!v1G5!;}90 za2R7@Qh2uvb_$;d{SKtUeTidEf2baI^>fW!`j5iC%+F84&u_tYqyOFZhouC{2ST!> zKfdEV(@Ke+0?((t)+*LWb=WId;#bY5BoLXsl`ZODC6KB~GZ=?D;~Y%T>2lVArQ&yn zg|{;ByY)DK;`R~vC&GX2duj`;c7MoUwrz&3TSl2lDG6A!l1;rC^&p7_=rA}Kz4M&@K^x>)*OF| znWmS+wyLOg_&F(9lRt8wEPRVViZpqS{ksKw7ouLgdpZgW_X^nm^GbqE^=c+{rbyTi zl&Y+Ee+}CX)Zgg-;Jr+!HC(DE8uq0#lAbhfz#eqSK4iypV37W-Pu3*@ZSdTuE7yf# z=TZ7k(KiePiq8?^wZciTVY@-1WvKvrwXU9Lo~02eX1ki*PWHp*@e`cCMo0+6^`S;n z3g2MIs$<&vohpIUhf*cs&M@pvkM<7m?*tq}w9)bA& z$E?jKdjyg-@_Q$LW)n!nrWR*ZqzP1yVQ9|jKI~Y!1WE0V;yKWN=q8EJm#A^PqrDEc zzR(qV|FwnvD~lp>WNonh@>`|Mpbcyklm#E@qlf)70XG0M$z=z3}YGW+nrgtcmeOd^%CQ%%S*65wQ12{od^5RRZfZg z!T?V|u)p_ZOyT;3;U%na&5xxo;{9LlLP%k%EP?#I&-1&TkpvQvonjK^bePp!tNxgX z=L(TyU~+{!9Fi-fTC!-s=CI-yE`JhO5hc~(iCHF)uJyI}$VCvSh^yDno_2==9aBdA z7;gg6-&bC|+#d;~RbmB}uW4X6!{SE=Pdn_#j5cd?tiit*`92xi`S8zPdSsbyoK)(PwBzJig>=c}K6nqJ(nfKz)GhTwq^9w~!$8%BR{Ao5` z#|c!)cgB8X${nFt;>X$){iyiD&)d!ibI|eM-OG|6IU(9~{P;&#VQ9>SF558~C|w;g zx%J@*gl!z*cpjMySn#V$h8HVPt4aaW$;%t4U7EFIw|E@I^fCXW^}LEw3iZ#qhKfO( zzzAo|-IIU`5!#v+2q>U1#D480BdWWe)k~uki+&7?d36l$qb$mOOKz9+%7Sn$ zA*fL1Kl8)Z5Mg}o{-5K1qHJZye_k%`@K%1wgiTfqWtS8y##(4Yc1WzwEs0UouoO2f zn2`ac+UKqm2z5i+ZL10A3LR9!Ia3!HYY(ZDtsl2PTt|o{UgT5RGgSR`AS=Ll66M58 zn@Y`5pl}wcFAYa(pxLUzIn?q3`elE<9)*RHpNzRlQNptCwEecm6j zbN%N_Ll264P2=SuM9BSbtUo>X9x5N3`t0es4V^v&wat4X5S7zp`ds5FYM&e^KEF$f zO27Wd6zl&EuF+J-8Xty| zQ?pQ%rcfW}%3~;vJ)gb(q8;A84HB~~b%C@=o|be)4;CxS^!_I*M z(gnE4$!L%-1qIzSO$x-($jx$4`k+?Hm!0X(JdhknENt=WKh*I2>EQ(bLx|zd{AaO6 zfQBpj4lAnisQ$)Kd?DE&czdo|i^x1drCL7cnO0a(^C}uik;#Ravx{GX<0ByW#K@gz z%50E1o8drxZx??F>N1$-( zSo&9Ew3LKOJ{ti4w%|A|Df2I%wg?h>J|6Y4Ts|bs~ z7RMASQy07=aI*$lUwSb!<{Uw-Q;!~g-$Ll`g(321pH)%WA%!ve|KH7bw)BY7xS z<(0MFQ2v)QaMtz!QoVk)9r*Y{om}sFV|+i#&~egwF4_Tqf02JnIA}xuOLz|50RN7&y+r9Z>%qe5<@lK8yUd2M-A?R(hPvcrbT`;XH- z*0MvlgFVjG+);w4c&3$t*+EE9>h6CdcpN(UZmBse$e=2R5Sz;(4ybwHhhS6WHgxFh zc?$>xKw%cm&c});C{e-t-Ghl4RGo6&nq*cVFsqM(HC+49dHf7jZ-qBF#p}Fimz+Y* zJ&isb=ZH{86Vf{?GlJ^%Lb~4{9zxC{-LSc8Jq#1Q;XXF?7x{ZKo&LgXh)SQ1q!P1O zpt=alO|I{esG45gRm+hWVQa)bUQ9A5=S~d&>0Nb*dWVvSG|W);Br$jGO-pE9C*;a} z2uH0mrYCG{?n2(xM@}!o@1nBsDeWGs�ocBsczZCDa%@-u~`>6WZ+r-SpHyL5mP) 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%0Atj$6Qbm4$C%d3d4_xZF{+zq?~7~T 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�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 XyS?0OU%PwV1HSVd9*FTg`|E!I)s;&u diff --git a/vignettes/rodents-example-files/lda_model_set.Rds b/vignettes/rodents-example-files/lda_model_set.Rds deleted file mode 100644 index 8ed7fb87f438d932189c638f270f57b809bfd843..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 797394 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 z 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 DFsl=x1K_gSzXF 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

(X`Ms=C|ognJb16lz{rr%c?td$+A$ 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∓TL`M9fT(IzD$^Z2Bw&H+*1~eUbumuZNZN9p$hd+oG%QtOsjDrX;(K zSqQwAx^v4IwZW?50?pgvn+9;<5UuVJQ=*f!*cDchkl_Pe3xERb&YAG+LWrX!;)hm84H{AG8 zr+RFAES#1mR_YK59aIU4USktxvQ3Km`x&yAmfnE7%U&cg!Hvi}B z*udEnc5Z|{e76cpN?&V3M#C$*C=Yregs}HPZ;N58;K4cL?*W{v zIX{M6aD{!uf}fl}i{KPz<^1TxM0~bi==|~S6tV-~am`zI4^b|wEoBAu@jQX%ThO~p zC}O-{oaDP5Rdd%DIk}jlGLwgcTI>~WUWwgG?U4t+ukD;$))~QfEKqFGCmAHx&Z{_b z{XHHoQwx%KdjU0qJlkc2oRNClfH8!98=k!rRlBQn2bqhHX%{LjM8?SW^NE|CaXx{? zNlTIrzMSuObk8q^mtgeEv*lai%klb!MWQjz$!o^Fp4k6<6hsaMHm-r^?a*qYr+G+n zG*9yNqMg`}@(g6pyumrS+`tk^L!3`!T&OUSCl>a6blpC@6~$Z%=OfPVMRI@8;o9y# zc(p0+SICx|Sl>#l;dh_obpL1h8ch~>U##6BM3oFr=3TNvX|LfKwWOGn&VHhQx31bQ zdJQ5b)YK)z38}W0u^K#E(fCqPBy)5H+V)8s+YG3ose+$hDP|w4l^UCSmR>>Z!3u{^ z!v=(wiZ=ZCx(qgK9Y@#Gu0X`wA71fRxyY~2uBi6zMZVb&FGlk($Vsa1<(kOPi+%3Y zY;}o32~*vp$kat>9@;P7*KdGA`GukD#dDDOeaCL`Edj8K^j&>#mn5tPvz8~_ONVYC z>*?;ISGYT;uVi)kLzK0A=`3F%fqWAm3D0OvJkvih*V5etW%1_0n{UbC`7Xn-p2{VN zX?gH=Q^o_B6*Drftt^7soKLM8Y2^+vYv zDio}YZ4Q2*g*@-px}d`FwqaK_*J?+u(m6|rp9^+4`$B^c-^jm%!Jb| zwwhhY-|8>;BHJFFo~z%^|Go;X-G*%9RHx7$!_M|O>N483xLoVvBv7?E?dYF?D-1oX<1t{}PMG zXMa|`s?tD6mbuK?_6Rs}Ui0C(^%Ji998P}yUV*fI!rZ%uoKP+GV`tjq{U~XVaT`tb zLy_-=;>Wb~s1sXB+hVc@Ew$_Jw8pMS!v(>kC3SkJRZTu0eL)VnzP^_>v5ewo{-Ed2 z`!PtlDmThhX95rA0|Z^41nwD~JE$?Q5yai0)6b8eLshsJ;r!7Q6$eAFT&j~m&9LQ}2=W)Fjh^wG$8b?W}#B6@gU! zAoei>38eC<_CB1r?^J9q;@z`~ej=~rsuGp>ifU$+ESmZ6P+v-QQR-3$8Wkm+Yx6&$ zo_S^A1)cNA?&+#(e6tSe)Z21jUrV0w|A^f=(BJ%rOkuKk%lJ8c7gC2plPM;A;OJTf_{P4(?;VEJY zL0uYXZQT}8q24y-}_$GN^VHA86Ce{OLo zAPh}AFI>se`h1aNoG?k=jE2DA z1J}-4pe~;JWbgND$ZR}dp=P-cLHsPzG@RbBO*ymbz)M=#RWI|7J0u3%2NmhLY4ebi zp!{J`!E4m+FpU1P%NjLJ0pI)uexOD7O7Wq&U(j@_VRQPxW4t)n6TLm85SeV_{x?$& z;hgpZMF+NnIHx;*r1Iz*TscP{zt@Zffg5<&&k2x6O7Sz{r2fOmJGF7yrhsBJad}^T zIw*kF9My}wL8<8N`B?Q?_a%n5M)Ng(`-XO_h*vHvE0M6%Sjm~FfWP2Rm+ajK@o4+V zebe<1(7vNz$&1{S|fZSyO_kW%Km06zl^y!N_4Fs7rAQR!w`%4>8jOz!*nRU2j9a|<3_ z;>W`^8=kxEegQl05!`4xu+`TIl8vSKG*aZL61zp%BF073@{Jy z?Voi5{W=%FSW8Nx&B^$Vhx2yCFA&UL!s~*7DD^WIg3&1MGUjUeN}!RmIL~3rS+s1v z#gTKm0DVIG`6hYc7&Lon|I}d{x}4suagr#t{)|yXtE+XPy&(>U#(! z_Zf&={AW-yHn@OeUN6#ZgfpllEKs;H%;fz<{$EpHG?(d=BFaSa^YR$2P#nK9@cR=> zv_4najZLoTF1fyVOK~E4)b?#!%JK!h=RJ4OsJuY;l4I3}o-v_o@SNrY`Hkos*uDCM zU_J&Hi3WGEC7`#h-pe`63WLp3ZVE>J7`PO2TPpT01_HO7p0&jRy{o!AN5sFNpLI5r zEIiR2^s~rwF%t&;0&Fu%RMARvFWkJ|3GHb$qSteJ@bXwKgGRUqMsCk$SMvIaSF$Vo zTXrgApuP8y?8G{It+FhvwbKbB=@Qyidd+B4b$+(u!Gs^w1v%UAv!gqu@KNkLYqXAs z6kXl76;0#oGZ^<-q1zZg?%$+F&y5~B^{le)v59T)ZdQmSh<7^&8>nXJ4WQtq;DcnKd%Tq5o%-X zc2O8wC0co}j{^ghfybAbUPVvrj`Vnyd^FJ>xT;-|iIzEL7V$#M&{}JymS^_{t%05E zo4AHibx`Q_4SO@xxw9RTT)!F}HW^+=uDwNPvd}tB7BBR(I8f+ z4=CRbkM|o4n4zT=&anu zaL6`z;@oikdHdiOR1kCN7ut@ZF7+{Ai2Q4`S3KocT*!kKv-G}QLi5mhuILcA`z=&d zH`2xLd5J3L$5|IDg3$V-Wh}|@C+e=xGF@@F8qJYoYg}#(qs!5QWkHc0I@(}FbBY+6Yp{qTu?Wa(Ml z8bV2$@`mg5yvTj{VpiDOBy=33Sz>#72^wB(4{B8oM$7#KEB&}|)EDo0RF%9AwF|Ao z+V$R{h9Pk$XSO(=2m2U=99o2$mdfB~S?Z`wre%EkZ4TK=OzroV_lb<~dLl0Dne*3@hEERh!l0qo-|xAP(IKPeG>2%4TI&BczwueZHEKg*e$8i&tKrgFB&fS2b(g!$Z{-`@eA2 zBhiLIGrGD->JNzS9%_{xH-TOH zt!r=h@!^hx?7^iWzKB!mPzqZ&gm{TvfpSUrkag8@O}f@cB-QZl+`KaqkNoCZ(Is^w z`*t|>$`pBIy@G`?_fO<65(ba|Uxo3PTWvCyCgQ41j z9ePNwc>j8{z~+hbt5^0%Tq@G8(N|XPmOy%=Rpk2h`|&8p)&AwHV&r-!GJTXih!n9x z?QlV6czf~ObG1>2_g96w=-0{cGaFXooyeoSKkZFiX>k&sR|OvM?5Bn2d*)<;Q%iAL zD=9ue^fNr-3^#B@-hyXvLpp7{4Q%fY>%T9jhE3iV<|Rywuskd_KJY39mhJB&>yKK% zwyq}X(8H&&cN|K!eaa6T2PJBzv;DASupiI4W(AwZ{d|u%#lYa_{LP#1mBM~>O?xPj z1nVBEfIA!e;IuKmndAOkxXzB|cp%9Pv*se6!>{RJjWq8h=P$5!+U7PI%)t%la|!PXtpUeH-VpWEV|487R&-Tl0#(A~61sZ25%R~9G7-S84dMDxJx zOQOn%yh)7w6z4`1kJy>&Yk*PIr8)gb=)0cOEPWgm^K!%-)ghyhSB4o~+lkvjZ;O+3?QqLb z(#0>s17Y9Hf@+I95V6ek^yRBrh;V(#wdnkA+{%r3N%zhb5q6BH<1*cGuWS|D;o*CT zxbyKg^`do%@jR6-XSEQu?19{EtjlncYG+1th#%}2pDXW};|y0WzH@_nonias^O3W6 zbzzxRxxDMPBg{jE)HhvT3M-B$`XACVVU|%Wsh{HvV{!NBM`?hwyKARr`&k&9_xdP{ znZugds50`7FYMx8&+R?I1!oRLIgYJna69^;ll#?vcpAU*(Ph6>tJY3_|){x~@7w)`l^8w~x0C$ejAzJ`(A(3_k&L(s2?>=Asw3?|G1 zU$-@g!#!FgB58pQJbDewmcL+zwZ2I2CXt6Qb!I%rGSmq}4m}&;eiIn1y%%|{{V)t) z#7Mv9H;2Lg{fsMq9)SChijasc4a^qkeVRRf1tz&wG6pI)U^0C0$0Ofh*s!QQ$?#tf zeWA`rEk`7v!=fhdwqQ22mk)h2}LBmI5^pOy95JnF-HTb2Q=Yy+)Lnk z!BTjf@LTpW*BtJaXZ8lI2OATmWWkl^U=xrx zY@coki`3;dI(iOpzjm)Pzb_SbiR*;+fB6W914;@JtH z;?AW$BQS5|m#~|)1x6K}7v7BQgic?9(ykqkp&cP5Z?vNsx{su09k2F>{<#}0+KewgU-#cpbbbS@OW7FA>{wyv-?dG~{wk~)zPc8(G{U55@mJv+2{1d5qR~Se z3#X?|-o_lnQSt38QAD`Sg zd(RWtEw*zpFHwVz1XsxM#%8FwezJ@!F@WYGMHcy|f>5P8(E0iCTPUq%@cX!f5sJyf z2RlB^g+bH4SbF0!D2*tY8R{oNRdvTsOZMeZ8C`fLII$SoD!~tE)#f1R?XuXb?nMYJ zKat`=uZn>2+ab$&d~mbzdwteNL)_*r3U+w@3DFmSY?%F~19wH9=k`CA!mSPqy)9Wl zhDz}=+8bSXxHMeryl^w}?sm0lKAMBv%!dm_ii_}2rnz)Ey%$mi>b(|}#N)0Ix9+>T z^{@>RJH4)c3Cu-S6s|h+3dTZ1J0h;WL8#i|<0-yfE91_@ep%H z7{59vZ4;dWqmZ?{G!>&bM}OqRg>{*5P+BeAUYPi?pnf1k@I}kgBTc7ucH<+ z9)VHel~)ojMHBPF^Q~x+J5-)wO?7KIG=ex6IUUr8jx*hY?w(AS~X^fzj-gUGqX3q3^;{ zQg81F!yCo7e5rz9@i92ibUXl8K&ZbTwpK=`wEJJeEKOCtYmPRIW0ZM6eK&>vl24;P z>vur6FPAXB!VBHyY-iCXQ7~6_7 zvatl|9#Lb0iJZDgxEj_fW&U1P!>4et0kNHK(r~mWs68S%WeG%RN z{9PhE6LmBT|5Y|2!_f3Uf49|tKurP~63~)?jtsM>fqok1Ov79Xm^X>})4(tdjMK1y z1WXjbJPj;lU?ssq5-gemwkcRV1xqHuPJ*Rm;2^;=5-cad3JTyP!%8x6O~Wb@a8JW( z67Y~<%`~hf11}lYO~ZOJY#_r%GVqaL6A3m`06z(~OvBbmY$L(;X%L_QK?)F>h8<+s zNg=yt!0s8aheGyJ$i5k{pA4V?VG21w0SCz-LII)_B1Qq?({N}S4o|}oGDu8=J*?s22C<(kwKdR zbV#5}A$n7wPX>c2FeHHy8H}gFgbb!+Fe8IGg;}H5Pg*Z@% zBLz57fb$G+A%iOgxKY4K3OGducM^C|h$n@3QHVE%_)viF3^+{zeq=Z^1I|*wIWnA| z0T+G~e+s!shD#K1nL@72fB*`(N`k;iTqD8tDF~W^;3){1g3xKWF%4m4xJiOrWC$n2 zZ8AiVA(9MHWQeAK7z&AoPsPeWRu_#2_BOmXBwW6;OQ?AzmPkLylKdvf`Tb1{Do&zP&A3+X?Q+~ zl7CV9FJAnMvMDH^M8z*uPC?Zqs!32Y1+~*qM}m4XG)zO|G&D^^GX=CzKr0E_D4?AL z9h2yshOTMorhuMl=%s)@3hAeiff+DJ0WT?FXa>BZkYO^sCc_9B-jLue3EoY?dlG!0 zfRAMOM1s#`_%aQnWcWG--$?MC3_r*)Muwl$Fg`t`e*F4>m^BG%63|Qo?KIF$!)y}J zPs5yPm^%&greHn^7)ZcKf(2w?ngV7LuuK8#G%O^;A_`z5!D13DAp`p~ETsSrGAx^h zsJEvjSH0+*+JtWvW1^cF9KM6nvVKN+;f`d~aG6kYj zAT|x+BsfHZ!xV6Y0wgFzk_=K5AWa4tG8~--Su)5?LVgMqra*BLN>gx*0*;eGnF3TO zK$Sw&DCEQpP@f?hzk%iq(3&CIzk$vlpgTkKW{Ca_G58G(e*>dG#P~NbnIWbWU`7UW zGFVW6C52c`gEbj!D8QBsb`)Yi0~{#8kpi5^;5-d3Byc5x8wpNM;uIO&C*d&(&tLGG zg!d$TCgD4Y)BnP65@)91>=c}v#Q8~F_yzxead8rtNN|}1S12HW0tml9to-Onf;!(aEBzwA@8cg=JUA|*3bJvn_!>@S#s z9J#gg>zMyTZn}NwS6NEs{w_cNlKVU6XR7i09T{?a4yk$ioxYQjnQonu+jlA1JAQY) zkQzHm%m4C`T&(}e`9w2?&U`X@)74EEFOy?;a^3IflF}jNI#^_g>zsnA#GUU!8O3%TWoR>3c zpVBjX0fqJ`k@-8${a zX(t5V^ZJx%yvYeAX0mHPhVbA2Mve$dSuYrn?hNu49{_?o{6= z%>Jb>lkH9S{SUeCA1JB+YaFL)_g8-4TyUzfBKQ5tba6nb-c<82m5)=k zL&^A&%KxUz3rX3U+%`4U)a#to-ZNdE`)k=$bM@DJ&Yon4(sBDWm;ANwq@Gj7%v7Hz z=cs?RHC5YxjRC_Xxv9oxs<@_}Vk}w6=&($oH`N{bA9{1BrrwjL`yPan?};dpp`)65 zUHqjxXA1pa$92vWx>JoQDOpPENaYH@>XNGaOP6s98B%SK8cT9=#LH(*5QfPR?s5*O6L(L9@_PE!HYG9syL;+P*1_y)>d2K-x>hM&!{o-2)cyVME}P1inU2wP zYl)J*gVHrTmG6|?>!*^L$`96Q>Pd~oRCSZr{p7ivJQq{#$y3eQbaxbTeV@r0N@`yq zXM>y!sqe(6n=f+q{*t9+PyN*{rDq%C6gsn}(VOi1udBUVUCu;FAIRm*)9L)~xJ~6Nxp|_*&*@|*-+!jc<0!E~ zt`C&TkefSl<4tZnr@I$U^>c{n?zEJwm#Jh)jWM~t&GfqrN^|*N%cr_;(N1cInriy* zElBzN>*vY!)7AYozQ2B+>YV%aGpTZV61wER&z$VfU+<)RCKdlvor%Bh>rdWyN3?(Re`pQ1E3Cw14E?%qdf9jV-dR9~jEONq{Ot{J#8wT1^@V68@#3ZKYxT5O?pyIdNTj>`IkIdJ!T5!D3vGor20d>Kh&SG z-!s+woBaG^I~302jP+-#x9B(Zez%=J^>>mU*>$vtvU*CNQ>531jkC#Cmy?OT+}{i)u6TmJ8!|Nlq&Gv4p0 z{_p3E_rbsXovHp`?f#)Y#rr2S8Mzty`@8ouisxm9dX%o~|N8yuclWWsc|Rl--<0bA z@qYYw@6Y7yG5@AL3fJXt+xxrMAvr&1>hEMd5_bP|UnT3`+cQ{_nI$ zGEe=@_Wm@!Na|5dE&r!_|J&`(bbpxXI{V%D`rn@CKR$Q=a9#Y{kKb+oPxUAHKT|s- z?alN&{LS|NU+rW6&-PcUN##^iKgs2Z|IhQ4nd<#!98qkKoSpyWxc=X=^V{p_Z}N{) zd;jtL-ME}=mz4aU#yy4h$gV?5=ZBoVKefX=b^YHqzZCjM^4$8x zx9@S3?%T|hKL1VU!Q}kuKgMwm8GB^rht$3GFS|3IpFh<94|^2aA*KJnWpAeaB{_b7 zXophy-?cYWyX4l_pZ4Q-=kI?@?@!kO#rrLV`x&`;BHR9?`oBI?s!w)b|9_=F+0G32 ziQn~OvfO{zBVp%H^=Eqi%v6t*oxiKy8Ot+IFHbg3n14^6oPU439x1$kQM#}HTW|7{ zj6XAuZxZ$>_2;+yG5JYKo`iohUI&!gp;V5-{fF%Mkdgb{{`}qXH&g#+y3S@A$E4b! zbbqGQ4@%Fwnc5|{pHe!0ll92{|CAK^OU^E(<2%#mf3!=&E~WKk+hZov{-kdkb2_)~pK_5Lk4XVPa9PjYcV_IvOD$98^q+(@=d&QE4C?M@zd67rPVo2lLZ znjVSg@9NK3k3{(&_k($Qdy~um)ZX9i-=Es0_&g?M?{BvA@6VI+(#hZd{YN>4cK_7R z|F7x)sr-NV!#us*Z_EEnPMC_slY||zdFf2=WhDG28IP0aiA=xA&iC)?%~1dEijV() zkN-c`XZ}sSzbOv>Bft2Y)*;z=W+qWi?)jG<6&d?~b9*yx=MVk+ul0*k`9JjMPvyz# z|K%Um%-WmjeoHofC&~Tkz2?8BPvV|F({q{PI3wZbe_j7i^(N`hIR5{1{rv7a`cprt zrnf_BJpJxG{qcBBw)eZ|%1rf0^kc^7APK$yXyKCQ!no|GC z*_)}KrBJqqP#>K8e=|5|=SsXr9z{cY_rlX#Mo|IIl0)42Mtwf8s0&;PdEjPp23_5RfU zAMR_veUG7ZpQZGiA+cZnc0B&B{_pPFRFj^Q{UGNLDLLjDw$J>3KS}1b6#7r;{zuNA zKVE0#>VJ1V{g?JLlH)!3GpYF_CHKF*4*qVx{#*Y2UGw*M?@Q$5|E_i@ZEvRbNy(8a zXC_hpr|nFBlIzFsmQSvyw7oxVmy93(v42vU50SDzN$$7pQ#ej!?f=dD#*Even)IZw zo&Ttx>AXy?pJDrd+)oPI`)`dWDZ4ZMKK(zQ7pmcpQPhJ1p_GW5#hH*^R4!L+@rcj@ZKcwb;rvHBixprsT4!L+F z7w44Pn`wV3u4kUQo>V!d^^@iPqnzr`^nX{L;&#c%k*#N*Sv{rmK(d}{(vwsF-?l?a{$J&!=8MvCqckqa`9*2G&e#v;sh*qkV*bCMGmWc1 z)}Q3Z|91OiOX$A7=;TAKaS1oK}e zX8o&<&DPl5%1mF=&c=A+VW(-XJ@Mu=QStMi3TywNu;3s55TahpilY@Ngyf47!O`P1@A$P>|3_AlaA-&~z4x0ocp&&_n zII-n8A*LcC{ZRcaA(tw4I?CRIkbf?Dh&kjPA={tNylm+_;^<4>l_ec+gzCQW(GnqH zLQZA(9HtmOLZ0AbVipu9915eLCr zWsD=l;a&#&Msq#lz~F+;FLF)9p@Gk_?4NXq!;daL>b1%wB<3CGw!bo)kh;6-3v13N zLW#L8rJDafp;~p8*0;r)kQ3c|J*@9IA#;3|HBGAran$2&m*eYPLRN(7wAcMdgzWRJ zoPMdRCdMQ1_WDd!LOMpkV*P4sLcZHqzWA6FA$yf0FQUGJkbk;=a8>^}p=7f8<%NdT zgzTkjZzDCE2t_l$k@orxg#6$K9gpp22)W{Cv&v{U5XT!G+FE&X2-&i4xiWHV3CVe` zG=mu##KE=aTBG(YCL}c;53+Kw5Q?&iKgJk^31y{LFUIBX2^CSzO@aBjgfhEt|1FdE zgpQHI4dFYN2z7?8WLa)rLZvb^`r8(9LPbk}Wldtfz{W5vo*M!aOXt5L(f@>i4e6B(xt$ZT~o` zM5qWe7=8M-nNXf9$=0#rI-#KF!+M|Q458e4=Q549520CI*l^u=HF1LTqQR0lZbG@i z#mxUkI&o~z4*Q|wM+o^<0?psIZ8;`-q@dHwUdxtL0`H2 z(py53QzZGOqYfc^;RHwG;os%XbO+rD~^ilud}EjM0tRVv7m+BYfR7t9c0d zqd`{EW?KpQnlW98dFI5CCo7&^%Rfv=4Q}j}jOZ_$P_VvJB;+l%LsPQ;Pa zke!7V(i8Ju#UdzEP8^Y<5w8yGA|$#mtur1LBIJ!kR^O}=Ae61jj0RO65K0Ti_X}T@ zB~MAna;BIoD`O}h~Zg{lLD);_hx>*ZAm-M#NJHs#b1n$B;Wo^yauM~S@w-&R6h z^P77{rahs~F0xGT%LhW~;VqhWePcpx5nJs3D0V`rA)@_2`F=vJ@anwc&?khWm(Yp8@&V=?=t34Ou(uou9 zg*!IJQ4vadby7v{9JxyDZD`Z_|rG45Il>nlQQ%?r^1x(edh z;lkr|&EF^Dq<5Ei+9N`|rtX+eg9st@s8U2y`Ur8vS1)|l#zsOsEt>9jIyG^`;fNTQ zr7v-)z4Dq_FD;?sv1Q@j&+`dY#lw$#%B~Q{t~`OKo(mx-Z!V>Hl$Vgd!gS!LMJ6G$ zeaD(luW1Nbd)q$R{`Z9JgW}})hXI7_jxhyU>H0q( zc}yG|-~F1~aT_5o;W}UDZWp24|LSwov8RN5(OVgDaaKa=bM^Pk7Yc-gWq(;=&R0S# zZrhw~19cN|{RK?i_JIGvoRLhaf_Dz-6U{<2ypUt35aCsU2}JL??ZDc_YEcwk+&h zGY28CsA+gMe+{ww#R5q^9#2BTI5GP{Ts^T%Nk>$kpgSxACt*{{u z9HNdH4qH#``nZn9`158$`sS50{y(D#VSdT){Uv>b(6xN;ifBhdaI=jLuCWpV?^vo- z0s;u(Zx0WJs@4$u@>Yp2YV9KgG_qNiKG{!*ZND6Kh5G=3xl9c|qAwE)>+MdYe=sDJ z1{wQz)iMz3^~4@pZGupDKBz)`eMTtB*Oh%)Z%Qbv@TJrDe@-YYV0(#Ug@mf5yyN}{ zL4?}p1I3=h3WNd6hqU=dHH3VlNk;@n8=-#Xk+6i9BXNxLJ;c9`5mL_E0}>up5IRDw z?`13}_JjELa<*^>;>3;v^(RYGh~wQ)4fVV>5C#$tBG2=g|PSD$^? z5|$iM3Y%VkCd@P2UNLXqMwq|Zy8EbK31O@hW^v~98p7blrZV=kwS@MZrcw5&Erhz; zij&)JbQ8+_j`;yc7zt(hlV>#Zs|n?cZQZnIbcjQzxekwv^%3$}OBSxzu_iRr<^8Ik z-y~G_8b}?NRwPt8nRIDrlZX><#|bI2<10rRb!7H6KWqf?xQa8B@}KSN$rze zNeJlYeCm^TCuAf=!^#aRh~u-*oIG&-0wMo;tKfK?KA}qY+INlY1wy^Ovd;64EuqED zd+m~l4WV&NNO&*n2%+_i=2nWP7NPZsQ1(xxCggP9AR#N(xTNm>M?!Mtv-Z)T`^2%jXKCABN)w9g!6*BejuC1r zl#<*}N)mEj2WHKt-9#vrWgi;|?I#QsIxFd9eF@#U!3)dY>>-Sg-`&dBwTIAs!z}Fg zQi@Pu-CXma&yA2(mQ9T=t02^?%xvVsZxGrwd#U*De+wF%kbtend=F@(;^jE~9hBnUkot@4ZyJcRC33(d7VKM@+CwF_>^ z#Sq5qvv)DjzauQSk9ou?=MmPTsSWWtR|uQDCu(!q`3al%?4Q`RtO-kjEQ6IHriA(8 zgsm#YI)uSb)7NRUl8K2`6;8Wh0ioU1o^j==J)yi=r%?acK|&$*oZI`xenS3OQgH^O zGohq&WWhVNSA^t#fBBSVK0^AO*OJV2^9Z$TyJdrDn+UBNiKesrY6*?RFUf2bLWHs= z&z1`cA%y(?1vLI%O9_qQqGK0>4inO1ybrI=9Ve8T?o@Pd&Ysxc-dplUf%N zgewRwem-B7=xc=5fjvcejXs1#WI4mBEM`LU)A|%y&JyCldV?LIm)8(t{Tf`0nHq^> zYq&qV)Ugt}XDzp%JQ+h6)ybx|#|RLb%g=1OKIxHi<89&rym!4 z9jv_wyQi>@8(dG=(yLz?NS#G!eJI%@J^K@(N!J-aH+&PJt@`5YM&4LLGvKQmJD(b% zv2NIv$wrVkcEFu~@a#k4xX$7y2_X*%6(5`TM%(oWwGO?N`-(0TdYWrHw(Q+S=-2L) zUX*;5(7qn;>2hKZp>a_qeZ`(w;`sKrrRHP)#F6=ZPb3xI5C;wS!hOZWee#?v7o(ak zu{Zo|GVhNQ#P%$8$$5nfiG#0K8#Zym0QeC&V6Q zc{X2YBP1EwZ?#1!5+eJfy@?+}#O_j?j7QA7h_wnzdb-w{~g85MnWb^aCDyh=b$82`AD9~ z9$TMwA;k0#y=mrpN*pVzHbBUEpVw?0%&P2#gw~65uQNaK6T0&c9$VjSKxnRMxpX`?oY1kh+ZaPuNmPMyx#@LO9SI_b;r{{b#<$JN`@Fxapr| z>;9F){o~I+KCk~pM&I;*5<}`=6GM6_(F2;t#H9aO%`!P}oNs4oWvpv%si$vd`_F7~ zf>|_6|0zyA{y*@_(sjF>vLQ&t`>V&+Vxs|TG;lV?eCk%|u^aZzU z(-qvcb;nlyEkge^I%kT8=KfmtFX!h?(V_WM=rT+p$N0;@Eciud*2jOAG5vdB_9s94 zay#v{KZ)s?cT`qU*V4ky=C912vKjh6qO2sGpc$O(1UQ7cUo98e^j~md;bhU-Hrf_? zmgXdyTJW!M{N3jMC*n{_H^|X&HS(Y3i~dnQn~I8U{GXo}Pdu0W>z(~ybxZ&8ocPS~ zujjJy|FJs}=~T;q`Mlz<@udFOcQ|an*!n9#=>A#8`Iq}_|8k%D;DNv1M5X`zcJ$wG z3jcbekvXvWufn5J|9(^a>rM9Hzu(0E{U-kJx5NK_JM!f4#~7TUY+y zwetUVOX1(O3jemOaP*&DTshH2u73^Zs(;MsKc>K#SQ@ZL(|wGKU~LIJD}1$pke7dU z!R<{YvD?O*`g)@?!M3N#jeDgcLA8vNe{9p@r>~>j9JY=XKYgF`s$&1zolk3OsExQJ zvJdw~>2lf5T1CvFu^xPKh?=0gvCBK&%k1g+{oT3_KJiaS-EEy>&Gr&f zy>`1J=j#w#%9~fYoUeNNcK7zZQar-MR_%bNeaD{=A}dUMu9j^jcs~Ud(R8#Ci8X@}4>U^rd%N=AGwM#9}AA1K%FJ zC8$r+?WWRrK`>WeT_-6gOmOUa^|g(64#CX*wd(OPabnSieH|y|PY|^6+{FF%Zv?}- z7T(R<4-$*Gu6#GLWgr&bdVc%L!D!-e_uJ|s84+SRy-Bb60a-$LpQ%i+Wi7F6QDUak zpb;V6i*JS{p2QL%Kl=!CdqS3~nLf{M9-%kr61$<}%fwZa-Em=_3$e)Kn@vqtA#qq- zm`8AV6tO?Up;-QMBcYPr!4$N~g*bf2{WJB~&BS8q)gGQs9fW{5y}f?Pb0b|$Jf4;?>wflV^dL5Wt5ps=`iS5kGSLp;t|!(P zs)laLo<}UQ=B^AV&nDCoPdV+b(nX-n^@wq z>3I8F2}1Yh*}A&r?S*+_cjTowyRM?%McVS9p+M-A8jn*EEvg$PZO+yX#5p)=zfum-i=_ zlI`q7kE9X@O8q0=OQ;YlHNFH?erzMan0kJ)rP}9#eqcSwQy+u!Wl~3hR4FT zJ65|j;r1@fNVCWg9*gKz_perfr^1*l+huMz`@Ugbd+{Ptf{LQGijE_pTPSmHl^8tc zXK#popocqx*Ee^>Uqej5&jDrH*@)2e^4os26IP3;pNE`ifb;2vm%mwL!1;nwqJa60 ziD%)?2U0iTP-7zA+;trG>#a1$Yy9DIcu4j8Mk_=g_TyArc@kNR-U)@UEJU;?N0Q|u z5jfNr&Z)JRhK*cwE=TV7GSI#rbiL4*=oK#g<~-#kfHo6R>QY z1u5Gk2VS)$AeG8WpJ{0fJdZDP(20Kv59Vb~C7sf+e~_qnLuL-F*d9ITxV{S3v}Qc@ zw<=(*QOA06WIOc7?}(n4riO*%hg-b|w;_H=>ilz#?+9t1yZz>36U1EdO^VPvj=Lqz z)Cx@*NEJ9=b7}btm!%dx;80F4E=OWJ_W6 zB66QdIScM=H!cwww?Jrl&BIw+cOgCNOPEFH5FRp7ah|udMAYKX@!SmCVP^Gh_vKb4 zm=D_Mt?{yi^+Wc2KJP=YzrR9dR5@$2rr(5s{WN*SPE;tkXKuhb&p(R5T`~@=XqQF&-wVejKn%JnMCx zSriU?)>&MTutzk<^ZEuSk%@8pa)iOI7&Z>49LiUUB5l1YHAnk*q+JShe-!VEh_NFN zLulk+JhUb3vUwxS%`SXm&(cTGvI_nU%6_nMUC`M|ZHKUe4EF41D>yyNV_3P<7B_dL zj}LvKg0r72wVv8-IF)Spw6Inek(-Rx^qku`;pd5j5^4t6B`ntMzJ3c^AI7dBwYCVty5h`pueP zzs~MlRcANsdE=edpEW>Kzhu4WZcf-N6kgCQQVN@vx)<4>Pr-B*M_Ssu2Qag3_3^s0 z5>~9og-v`bV5Qlb?enz(_q@Gt$`$h?Wuv#u{G*AuT`?ZXKB9>H{dZ_m&T8U`)CJk0 zIm1ZtZ2C z@m0LA=YKMHiJ3AU)65e3GA9I4SN3^ne4LAt{+66AZ(2~io>6>!?_*T+^^BN3H$yeE zj(?e%>j56Tsg z_Oa)_S+zWh9X|8k&)AEs7we>B9+x1irlE4vTo;_Kqi5TDy#}6Ib^bgevN+klVC}O_ zjPO+9UQ;#O1HOqx?{c}i;gRfqAY6PQ++JA{DMlZVJZr zZF86F5ImR`r5?Fh4mYX~%Ij9~!R^D%CEqKQ;Kfe&-6q@=c`MS-2z}Q@I=54{pF=xZ zw}x8BF;}BgXs~{4WC2<;uf?C}=0&Z=ei2p83y3S=GN%_D#tql#6}=8>F!%a!e)e$& zM7}wHI(1bY3e7Z=y$>Hlp-Hgdd1nO>dmsL2;ya7dO2wma{;(Q^NBM^pvg z-B17dF={%;E-cXxM@t;<>gGkPx$2B|t&&R-O}*USpW zBP&9m*08|zT8=W)y`wO5JMpISV+bC&yiY24zW`Y*Di^u3jv~LM`=YIMJG!=4oe|#r z0_~V}-h9CjI@!|e-@cbc$Crzt=`7b!^}@a^RNfv{V?z$5bu?(OmOB{{qJc7%)c&!~ z?`S$a9(7{B2HHo?m~LM`8+FTM-)yp6g2oJ*J8)i!$8Rz?75g#}_%>jO*Fv{9SviC;FY7c2Z=xRsb$CQBkccE+El# z>}CR=FLGUyvN;@fpjy9VeOa+SDvhi9IJ&4&OD~-p&|imkMu&5kIqsp>S!iA@(+AY| zkL3w;2;rHNcTdMA8DwvMH*3y02RxJ&9B;W_h*bTJ-#Qhw@$ie(E;~ndRD4WlIwp1l zH4I%{jAw^XBkdx;B&iII9I^Iq-WQ`ubajd(n;#lNt>vT#;eXm&eC;*r?(8<;n6n7go@G+D zEL>>da%J9ed@r>~&v;j4G=A5x*|=4e>k0v>b>v1Q6Hjz_o8_@mWJ>(Cqc zY_G}a2)Yi?&vV&z2_3@WH!~|3QGWRboqW=BL~WwJm3ZC_5mn&@H`v9Ixb&o*l5jMh zX#XhTU*n8Q2TysiD~#ycbmI(9atyj0TpAs=zsF0hQP-pMZ(@+YYrnaz6*^t$1?goY z@N%<`?ar%}7(9J+%~qF%7}V=lu66W4&++zvo1;rmwd!qGE4v8lw?sPdY*~cP4f~4@ zM~I-Y$NwzPwzFuM)7F~3`7|2dWNay;dxN$}-p#yh!f3k0f46Q>5KVbLUb>8u$o1IN zLdWWc)P#?F=Y8G+wM`309@3;h+y6n!(1u#*?)t3uG3Xs`({(ll9^u0?JB)BPXrtVt zQPa9B2BimiqId#Ny*Y;b%|bP=zn7t9;e$Sl!x`w{-WJMz_ayqoZ8}``DdUyl z!YGez3()!Uif1`}3KC2|cSfgu!5KE5PwqeO;IYx6qQSc|=+yjiYh~REVQ#$0-*aSS7~bXZ+KYyt6gNkGKH zgSbay^T9K62$f=DexYgi(e-KBaHR=5`V|thPigE#-(`2BL#jM@xh|(6(aQ zxB8WU5wq7A{PgxFM*v=?OoQ+|zPy!2Z^}k48#Y;WCin`Pgd_To?`>x*jPA$H5M6zX5f)w9TgS z;kJUK-t&5dmbdfZdCSw0*2EYu!k5=Bjf{bV3`0v_&L)W(5Tg9}g(Un^_6fCQVsx%@*gljhl(GXL~4L4w}-Lmc}r#$X! zpVICBz8;k>A3TrjSdXmB%RX5z+k+;x2<~V3K-&kkhi6CLpgrE^eV%hZx&xg1Thi^& z*gWhL-E$Jv)vL`;ULC-_F$pt+AywQJOC7&f8w4A!Ht`L9Eif6N+H--%74b_fpC?@V z4hwI8bHRnrad!t#LHXqjl;#Y7ExzS}v^tUIl{%6ro5dhnrpW@gn}xL!hr-}I+WfJD zZZq62_Bg-JWk&j;wylchui@}K!{P?ZWu*Dd?|QH;74@eUf4Fs96}94AX#dyI7S2MN zTxRf^Ee9vgsh@>(-nUUUa!jT(|1}Dibe;Q|OAXt-b&Ro&x+rU3vBYQtKb*yl?kZp0 z3)=<9V!D2g!g)Nvx%5>PoJD_>MW=+raX7$vr-2+gKGJv5yVs(v<6^z$+%|N!*3NsY zY>1xEm3u^veMEZ!4?}b89yB}|&pzGSkJfgtz)Ol2sAl~sS^Sw7t+qRpO&#)3pSAjG zGV4*~#ha+l65Wm7vA$zF4C3)J=~Suo9S6L8!}a9eo;7GW!M;*wP#KK}2C+W92UVAC ztBf-XQDjB);R=lr>aLaC<}H>1VdQ^tcySBr*E%e7^JGJ&Odta*8w(t_+VJ@gEkjod z&w|+>Sn<;TrrCVSG7Oz%VSch_2ZjSx&d_>K>?>wG>Zxie=)XxF8hmdQ^>5Z*x1P9n zcWskDuwnKcH1l`!2rbxyve2WVRkCA9&Rl&YK)N0+ZWh(1@k;24zP)t`?Gg;y3K<@; zHA3^ecdphK5>a)`|6a<24QL(}R}XgxMLY9g>V>-zJbkgE58L&;jmq6|0#3LQ`EiAjNafKf%dR1 z5BA^Rh8kN%AGV}Wyl}F;{^DxEL|z}48*_&lss3NjF+3kdE$7#S9@<-YkP@@wqW45z zrnbw~yzm6#>9g`p3X0Ge7~Yq7AOal>=3{dYxuboZ=cb0(612|OytevWK6)32u~-;Z zq4zP{>1U}IQTZ{b_b9ahvfI?w1a;(1TuobFF4I@VeR+c?LyNZ}C+U^Svd3+(?`$=C zp8Eh5FZ90c&1*!f*6z7xM?+96d$U00Stptc<~jpYp-ib6G0GOE37DB`e+Yazy3b*ZiYG)bLOc8ZQF@4@J$L?x*zN z%~vfgKTj4O^6K*+F)zS#UekPQ32Hn$wOLC^zXD#V#Sad>)Ie(L+qYf^JnVOyTY|&q!N`u8ZJpr{ zJn&nsmGSi_?r;Z1@qhF^!wM%Xud&r3txWjn+MQY^7YAVBSAQ? zyCHg9hXDq=J_YeD7J|NK_=cpNhKPyya#u0O4`%prs(yYS@|O<{MHoFpfwfbqxkC=p zIi<6I`0oPoVpK!_4v^bDCnk6?JJdFFw1-`M0rh;jOodWy=qThrd2{L-9+=D$6m;M~ z-rO7o-sQ}&QId9$tSp9&ge^;Q&`~@%Gh3>#y&JZV>onz;jKd}I`RSzt>2O}N(y8F% zO_(`<&3wmu8b)rly%!}X=10c;bXr9}%wOK{aQJ!+7W|iPaL*5h(X(WFNiR3J%pJ+- z&SQsF_J<+{qlrB5<*d}x)se6%y*7(U@GPuO$7TJwDPC3ieW7Hv#L?BWcR@49<|v!4!kg#*Gkw{n1R zN@$RjT8^T!Yn#m@&)~^6wUg#!O3?2=uVTYy2}7~wEKj`)u-kL*p=F@&L_XA9H{Y5K zzEpEG1}wJ2aaqUU=<8A#3kjz?YVbnM*x!~b<2_Df-a5NUOdG{)rZQA3&mo$#`{$R= zJcNE@512nDgEafEUc9pbB|ec*MvvDBx6htOtf9e$g3Kqe=T0IMN7X*@q1ZGo{fwa@GR%c~vbHj!%sVN( zvgsmf3_=%ijlDyW2IIGK+fh9FS^IOo+((!cmK87EW&zU!d3j<755QR3<-W~@{V-3` z%B4A44h!m~Y|FW3!OHbbp+u}bti3~Ta5J7kk=xIjQ~blQJX@vQYTW=sg>ocj`XN@RRPF1^gx+6U*xU}E=0 zKbVf2(!b*W3AcunC)+PM!sE!{sr zJqir4FUwAEyUgiIhhA%w zT-D3!82G?zwfAu;`ma;J%D0)g?_E7MCr$q%a$N428fs@E_Y1LX_wXT{Fl!bzj0lF( z99na;`dBEBR*%~3+ld>G#09)QWFhN|M##F$FOVmo`Pu$V1q%H&mKgcJz>BO|8=AN9 z;klpMl2u<>QP~>j+re}N`prkR*`BaNr(mSJOI#M(=RW2ctFl0MlloD)kBxZDFWFDa z?}CD^-VL)XWKk`$ep^xqW#hVS z!~J#$;@9-}=12`SMwR;h)jy%#@R)URo+0$&JvFz=MWI&6bbwlA4Z3>|dP?0~i7vIp ztCe;7G0@TeWL*&(dO6e#%o+92uy`@6ae5jWjv3cArt6@0wKPjq+(PuX*FNr>r;lOU zJ&F~o5_q+^eb}-y4E^Kg8}w{~@KW&}YZueR{W00OJ3vAQZ&s&7ub7pH!QG?5~ z#5=Gj$#wv*V-^^EcJ;@IYJr@#=WYzAu`J|KipGedhwjpa2IzIW`$p_7E#8R5Z@Mw6 zg--7)%uBdh(4CrPzF&JjM!t4zIBXJ$kpZD^)JK2f&6b}Nd#)#j^Bo?!Tr|h)z#om) zkG^5#+ePLt;y}05pk24l2J{tpFnZAf1F6OVZD_E%R&wK4GY}bxw*`B}R@e8$MO_ z7=w4$@HJ7Jqw{!iP&8{Jx|<)`(kJdl4@=Cp^cQc?`RL8p@Pmb@VXBRCw+=+J`0T^0 zOWn|ONF&v&bz=P_+GjpG%ZWih*XmoD^H9HFZ?C?I1$r||+q}H|@sf7gwj+vx=&roX zchbiZePOv*G`Cb@fID@o_fILbpINLukYS3ha|ibuCx~L;2k&vc?fK|*``)YD;)MG5 zcYPGr%tou;VF?WeMLg#bWdoi<7(2WTh9p4zEzD>!>Gvyb5J3 z$6`OL-b7QH5BH_)%cv{4Vawf@fhwDrZ3l(dp?&;s;YsE&s<01p7+TK zFN%z;)q8xsGLbU=Nj2lUAf9>}#47F4MjGP@oiBB5NVu+ZbMc@&VyTMnHeQWHa>+t2 zrf@67Z@J?f7P|t8yUdfC;%^~}PJXOd^av`Gw9;MYjUs13`O_c0+i~CXyC}ypMWiio z?g+<8Bs$%F>3QTl9(?23JJMH)n2&2)_s-pnXvSjISJb|+3jTC4X`?z4q`G!pIUtT0 z9V*d|llKvqr1d6h?|KjmLLJy;1d!ZneXZ=M6mn|LZ;LFf#-l@eNvR=@6XRN2a%9*S z&xbj7wHFY`f70_L=-VPZE*gDjZNQF7i906E@`9)eHe9aPDu)dHI-9uCd}M8yvtNVX z5c!R?)M1O)qBh@*{yyVdR4wd1X_!_HqGEa4%^yGE@h(zgi@zCKd0wb>eu_l7&ZDm@ z={WFA<1@W?(0t@e+v)G;`3m1Ikz+;L#qg;2d{y&u6Oxj1Zoj!Ii^uoOEA~1)LfYw* zV#ib}kR`mRH>SM>nY@ctgJoxWXO0M+qPgu)e{1Egx z1?C;EUM<`b3FFnfH;75f!a^zY>umZ`=$t=s(7#&))+w}FeRYK}>uF%=So#dMVGGpy z83W+JEVBCvT@wstmZ&iMP{H)cwL{k<^I=+`-d5zv57R*}1HM8BXmO3~8{LosRcY0a zA7?c|ed(EwmEyCZb-3?d@m_6coQ(`p`}Z$4Xe8oUlAG7bv0_;c?8EaG!1{ILdej^y;|FyVQ(ehh(%{$6-h5!y`U6& zeNGn`_e&v}W{*gnX9L1U+uE$gYGHai!l%;@PBxaI>3l-H2Z! zB8pdDkTvzd?ZTa()zzgCzT|}KJ-)e!u-(6a^=>Tgn{-6gFffh9UGBPTt3mzzB5>#*zp58Kls1<-#!TKR&mbv z%6H*>?ApiGt7KrX`{C34mEWMRd8a*WXCd@0G#{@YEQM+A`n_xyA42O(j=L4-FiyP7 zy0&c7S*X#6+*TAFgi733>(j4}L;0*1-Ph9RP|3sc% z#J-N3uMWnyMbmlH%3#Cr#qMs>c36L}>Qa8L2)i!LNGAKAu!Z+YU8jR^xwP1(K${89 zTTJH$*Q&rw`<#JndoGOpn*3+eIKy~FY<+M>63p{;S28tl!Gg^rRA(YTFgkaAETLi$ z&T&hb_GL-I>V^Z)>r2;QegAyuR`kLqVLLiy^I?ThHJSwbWx4s+_&FLrbD!A!2_PM1k2 z%#2p2KmQO3tLt(W91mh)dah$@b?I8@r*79aR_lU6LxHtMAT8`@y=)8~-G;V)+|l^T z82Gebetbb$6b@tGH^r2@z*xD3^TDonP}?PAVbHt?Cj_&s-B<@;c_y-Um+UH>824wN zccT$XA3h~A+pU7~({t;u9 z!TD@5Z3rUx-h7A=3_@H-w}8?_Jf?^rrG4r75RsN^2Q!R3@mSXSh~c?2NS}3<>ueJZ z3N0CVPOKb8flT?&uN<%N@IhZ#kWM<%V)h9gva3VFa{UTpnq*i?N1wYM*9k+8nBI`6 zInd+eW6-RwLTF-Q@u_#mkaqHt(xW&5Jf3rq*}3dC%33hCZO?wZsOi>a^=CoV`jX1M zpPEp^cq@I`i*LwV5EoF)u7#4vdQ_py@8OKJ%QuUR$M9&lc7;nX9`54Q7bNI5!MUW! z`);-&%np3x;k(BpEmV8=Iddl&03jjzZ)jXMMpN7XF)fPr8J*PAG)bVl_^&fN6J60n|4srRv_m2Du}`@h@v7P-QC?Of`nizsHmW%C~_!+&r^I^_GKe(f(RwRV5gxb*XEg-+}G9v%iAD7i!*BlKF_yI ze-YI7q+|)6QU|9?>nFnM+@U&`OUP@9BDhI(=l6$XgPSq8#6_*o;N~#h;~uOI&X+5{ zdt`b+w$Z($;dUx;S7wVye(eWt0a-GJDn;OOAaiHiu?}#jY5cUk@&q{FF%}kFYza-= z2WeBU_&~X)IavD8LD7b6{mRfWs0LBCD>wO}I<)a2^L=5kRUX~6dw&Bouo~R0XWt8L z+F{$B4c0-2(De{iHbOn4H%dCC9)s$)G4$JOT%m^Y+{W<%C9u8tG)pDT0ZPRMLZg*# zgHge~m{Bnbunx}nc(YFiY>%uQ3XtIio8D`x;#8bqd3N_6s%PKe`4IvAyTv0=Ajn|p zq_-0qoUg2E_UZ(~NhbPFAq&9tkd0{9Rez|s*-$iay&O!H*Iuf=`3Ovn1P`w<+5mP7 z6EwvMdiic8k-i-Vp+}T)(X9p4PxKB0>ZuFFvJ~cm{Ph9dWR{q6b3Fpf8)Ul$IXe*tk&RDae4$gG?hPh z+)9U`9m=Y<_qW4?l~ey5?YMc`seOfL+)EIGc?^9S@j2wMJeIU{uWgcVTsg+fQZ zy@}cBXy{&>S$ouL~;pNR|PG3T1ptSb7tvhom3_Tio_;Sf7=zDc@=c1Qu zpe<$n53LGi=$1L*kwW(cUMg_iPFej1s!s`h3J3~^>a|YiOn0k-%?#Zxs{tFZjqP5s z=gt|hrMlL(&OsDxqx`mLhpq&hPYmzcq&r#4E(WVb^}ge)UxS^b;O@kbXlR+*`JCO}7;0AY z9h@582X&UukrnYfU|=9kc z-DQKc8@F76!TTMW1|!4JlNoo=;{FZj6r?e2D!&3F+m}-O=naBNmPCnl56{7?v%U95 z8GB#?WK9FM(ZcxEO&|7cP=oPI{mzxPiZC&=zoWp71txc7pAY%W1AWh=^EDSuK*#I2?HwhMgT=emXD>eaM9$YvTQ3h|xk%-kA-fIf$ff;C1M>Q+wTf^eS}DEOy@`N&!6qW|UucDnbtnrxr!sVQ37F6WnQ` z4)s%aU-+vXg#H~=t5}YAz)%w{ZT^!dF!qRND@|b}^k>tlFgZCx-+-MED78Tk$6bYz zgKMFo+n#eRS2?r^m$h||o`SY*d&1kJPC>ob6}Af*r=ZxIXHkTi8}#Swpvie)0&Q{Q zPcIxH)YG_%)w#tAdg_*aq7qMmw&C|#Hy^vh0M|@z@6CAVX<7cPp650U2R#{I)%poW zQx@lhDl)-<<;ks@eb-E^#Uf0WWN;h+=a2F;=8@5IpCE?)UG%& z8W`HZp(4yC0pr7mdY)|JfgV2gb7_^r&@b=)c=H!!=$))h>NGHiDN5%>5sr*7`8DE< zWREXQ)|hD-F|`q%OZ%JR!(f!LcTHyI2N-=i)Z=sHB22bDuiEP<03)8s>mOg;31g1b z!7o4+de2EZw{q7L>VLi*LL z@$l-=LNE544`8IzZ}$RT85oKS7(c2u2}2dxSB8TvVR-W85smW2(8qtP=8e@1^c5W` zV}AP{ZaGt%7Y52hOZw7<#_@(wwR=!6>4^$Bdb2Rf1TTW(*WOZDy(b{0FgGt{LpbD* zczfxJg+N*Hm&<&daquGi^`Zb1TQFo_tX0yc4;lM%&n{ywgnZlGACi2|z)Oq%b(^gZ zLRVTnk26&|bZv9fFxr#}eV0z$=>K#N+BebV0Od>QGFUL}G%x^zoE&@Yx@@6Ge)*D$ z^=qM(HS$GtTNFG?-_pH)paRNP@8(lJDFpRNt2*sBRzt(PQktvJS3}bSdJ1PYVQ92m zS1pos2b$bXcf3B64lP4Jemr^j0lLf$m3jtQpmEvp45yF_Q0B_VEWIKbGMgW2aveDc zddDk4&3j! zOX0ct!l*C)VUQx-I`Yi70Ai9J^7K~QflAl(whY%Fkb1IVjp2nfNbpvX-0ztNnH2B* z8qFU-{#D*oei{oXWHI@;!H)sz2B>!`Hs676FFO7fWJc2IHGw~kbe)RF3%!6FQ{YhCQxJZ(&3SRCB-0beZ5W1z}igL3kpqDwY)^9r<^eFnqted<9 z1JwO*(~7vDLXkR=_U0uhixkY}&c6+Ln>Q?4c8wcKEl$39d3gdFKle~iIuz-Z3fX-dfoFGil^u?nhBU$R6rJ1a!R$$t%L0{^ z@I?5rvXMbA#Ba0ZoH95C1smDQzHbhKJePA{v^*AoO?>Tn`?WHVs=hhO>(D1CQD%KE zTU!DpT)c^*7K@-f)rcvwtQ>M0_j*0_$%9hbQr28rO{fxFaK2wl0O}?3jLx!KLGQxM znd+)R7}{ExAsC_qgZZ8rCnz4nQ09T59x89>7m9rq9Cr=cO7fL;m6t)2!WItYjMq?6 zp!Va3GcD9|*grk=K@sY{&~1D9{u&IZ?)Tsgy8r`+Rz-?$T@D@DogY*BCkXcpvGAuo zR?w=vy@i6>6zbyco%vj$3nf=%^ptlfL+d5F&jQIsP;u^7=POEYs6FSBG4{0rTI-+B z+%eh#^>_Ue)>Gu@Q zdM19nRUQOh$JIn?GO56cDh`VEmB2lxw>2U~Y5elGL-V8nT8waz*U zuxjlyj6X)GSC1m!8ks?`d9Y&Hy5U=3N%vStaf=CdW?X z!c|~sww_jLG!{(a;yymo{{q%V?0Yoi)xhMbe}>+$H<*0ljXSmQ71-W6*a*o1g;0Al@5EZg3~rvstU(w;LMGsT}GTr z;AC$ju*!-KY$rAOV(7ZTRZuA8Syl)*vMGxNzqSR3j-axpgiLVCdKVrNOH0^y0+2U* z2f*>iGO1%F?qG+E6;nJ<0{d?!g90wjVD<6-iv6A5V5+C}$(`pKm`Nw8Yo2}$mesvW zoOPdq<(oyqC$ogXF75{_MPmTiN%1gyeTfHG_FGxs&Ta;~?5^X_rINrkdI{gNJxjsm zN6v<}!+GE=7T$889s%1gJ7nLCnS;Zyeo>)GDA=6$e#r4f7i{;Zy^p_q4Qyi6$~7)X zg6*+KCh7A2U=y`vn`WOQST!)ODU7NGOT&uIKj=1sEscsn^`|vpv*Y&t_AlqbW*OI+ z_;GD8F`v-&bzuX`DajVSbUQ+O_ZjbW5G1U7m1zf~lfb6&f|6ycD%khmG_|w00^3Er z54o2sf`eAG=P*?<*e-r_Zp$l4I4#0W`;@m2oI>7S_0+ixHrYG4Z-1==E9GG0&}vz* zwC)s^w|D?1E{&Dqx+Y+m5_ml1ST)$bQ{_EJnFT<`fO82B)nbW;}M( zgZ)mS_s%(y;A#}(x=(Nu*l{^ANt9NC#fcc9)4O@Wtd2S%yDbpx_KlxYOcDos!K2zQ z2b(Zg~fe79z#9#~8rz?L9+}x`*IseOIXGjTJce9ljw& zKMZ!}Or{I-E`gOt;&^ZV7}%upovC@m2aXrl3%+@*3wBf&?dog-!NGhWB%Lc092G5s zXHLB(tS@U^1`?iu>q6`1u9G*w=~lbVC9gGb`n*6no52TgyqT_X`G7yzMR<&jJ|V=< z%%&2e^BjEAEj4DX(N|tbjn|)d5h&-HiIlhv= zpdS1RXx4N3Z3D057RgY}6X3xSO6$0j&<^s>*9ERWfwK-bif;Gxf?xTHRTOV0;M}*J zlzV)(gKtbp+!AdeI9GYmCOX3%oNtdH+O$33dE$bo6yYA|b@1YHr`YA-v%FGqPa)xX z&o0`~Y9~0&tt#ZZ zT3ldtd>f5+!86c1bAHp&_NQR$Sfahs@f%nL(cVh&T?*mN;|o%$Z-8Up>gv3NXvkyU zyZq8cWk5W8Q)gIfA&FPqW804pkV|Q%D(?CcUVNX~|MhD$#BWM%zp}Oq0(YLcxw!W- zAm2OeH5-_rpf}=Se9apuJ=DKq`;ts3q0I4a>0ZEpA`S97 zHoRNF-UcN-q36e2PeLgYbNRw|V^|wCunBrj+*>B&6bOC$9odY;ouD(vpRbyQ4!TDVbnN-y3LVh_F|h}@pvS&| zvdYv8nx`uj0=>teZ8#zA)h-#Rpna=QxM>u!7*|(aIq?wcHMZwax;H@$^1|=>t}tk8 z4(i}$Du>qZG^@0H9HB-2@pw_ACG_s%4lw>)1_L4t(Fr56&@W>xU?0f>1L1?N+xQ9P zZMhwp(a#Al&v*?9oY@Ag`^V`lH4>mJAgKLAhB5SID>v6GXhBZ_ZQ|Q+OwhuZ-#eu^ z3EeW99+u`bFjxtqO^vcJyezcD_2XR_y1Kp8GbI}OE$F{_>hQrpd6z@{(thYGiOuTw z-UmI^b^$7{*FtY8qs_+?Hqa|g$vyMl8G21t>NPG&h90K%az`^~VDS9X?0b(3pg*#T ztFHDS46R@ae0kCsx*v|VHZQb?R>O1mUPq2XccNElYl#wc#c8;0)0!mox1;dA2x@55 zRMdSz=LcP3_jO)LP($YqwvIKb%+NM4nw2bn2O3PT9Lh9lgx;t9%5slvV5Ix`$BVXv zxX_^Bevbj#JVcmJ zhb@3+H}jmP!?n=K^+B-oT`2VI+Pd}2x>OiketB2WiqkMmy@IZl?;s2(I+id6s=-jS z_7}!whoRFdcWZ4X2XqCqb<*A!hN{es3rj4PLc^E!?B~CKhteD4rZw9mpxW|+V{)!6 zR0{q0@`&LYl&y5znnKqHm1zRob}S!-s#1aS@aXgK@^i$?GyC(PcYCDj_pCAK4{$cM zZ>E9HnhdjGi7x0VJ~ySlml+1szcCkHxd44%)E)($?0}xf+;Me9nb4c75cA~NBIu`@ z*U4-K!1_NlOHM#&>Qc+hAHP2^h zbET1#u7okPb4u!mU*?0h=o7t`?B39_l687xgCex-;T+K%ONVZL?>DQLEQAi;%WKvj zI|V&qudlI5^gxHOEOmrmFti_5F$;}0fR+iv%jTk~P`mr4J|~L`)ClXqaw99~*vs*z zdSW%atPMN-tjHW*zT%EuwE8YI9G;~2@)L(9)+<{FMYcoD-d&3KqspQAYpt5h<+o6` z-IR4?wJg*+J8yF2^asR@p5n937*zH>x4%~74HX`nTUd7QhqEnv*LSuwf|r2jvvX$! z3Fp!D)d(Lin7>ayXcjyUr&o$be(j?roWHd{zfE(30M47=EXP>Ed(!M4^+iUoOFZql z-_QZ9Vs57I$TTLL`}dTFP&9+X3wrlR?MjRGrK)C!!Nc@dLFn14Hm2krz^aDBeyg{V8IrHXnqSNrbWG{d?2m z2RvyY+fC@5cIprma8}yw9dCrhv4>@f%3C0f$*IZpniS}2WzosLR)ojuoZFAAV+AeO z*ESaznn6W&P4mW}QP54aze^?a64bZb`Y##W53$L&i?*&FfP$+=rwc;`p(yv&O#4H6 zD5=-@I2xA?x8JX+RoV0fk_#*J^omO0v11Zt`=!GF{#_#f^XrRf{`0#;HW6f0Oa96u z=rFea=XYEE7nCSap+JoR4FKB z?HF)lz=OgL6nJs46NO!5;3Hx;3jAc)gM+;|*hdBd3h!f#CAc6tl z;1EtkaUh1lVH}9#188mUAg@HB(IvD8UKo13doEVV65CbC;7^7f`dXvUz03@^#h zN`^KZwBw)yg-#rFq0mi44;gyN(1(M5G7R8g5GO-88J+_pI2gsj*c=$g$tw&dFqp(( z3We7wydl9`6yD+BJq908_=v$Y89re!LxRsJe8J!=2H!CFPKF=kLHqIR|FD1vN))Kb zKurc3GSH&1kPLKWSVRVT5-^~^hyoJ|i!op(0SgMOBw!=M5)78&fE|TpC~#n~oD3^) zuo8n+WLS;D8XRzvVJ!~UVX&SI8*s3Z44W|6jFT-m;ljaI9Bi8d+vfoHJm8rlJLUlI z9N3AIT^R7;U^fQ*DC|LDFB$fcKmY|nGVCXV5E%}jaF7JTWDr3CFgS#PC<(+!aF_(* zBsfBbqbNwAa0~~>ac}}Bk{F!CffNSP7|4)87K2kn$dN#v1PVkbl0XRu${48NKotjS zI8n!m#vIU`BUuEWC;EA;Omk zKO)Zkg+CDiBsfok3q)Kb;?gWG|HTy|uA*=ah3hy7#6b`lZeVZ|2e&W?M&ULJcgS#; z3?UeVlHnc-_sI~3lW;Obpb$xdC=x_t@PG_4ICzMYM;OH7AdU==aS%_21Pl_%@C1XT zIq-CjB+rqQd6GJJ{{F5FCB=Wf3$uvg&+nTsQ~c+9H9uvu^YQ4@QvCT{n4dam@;_v( z7;;JszjG~f5t(vlKmRO$F_}7I)t{7X5zaQ7Z<&ACFC`@sIk6qqm_w738#}ZpGUBmJZk*$>!SaQt{=Xuh?_4L>?r8mj zRxX}c@vdih+i><;^V2_`wQH_x5Sk7tIhH*h|BL6Khc$O*xA`A>Fr&#MQp0#7X^98N#@aF%F5o@gf%Kk(}!iE9Ej+~6# zcp)CU#IpI=qS>IuNPK1>uKRrI{Ii|0<{g%gUtJf;#eh|BtT{NJdi{>^`csBA2k`6% zOD;aNJJ@VF)?JWP zTVcIFAvX^2+L7u9QZbS$2T%K<-T%nl3(>4Wv-3#x)zAKFMit6k+7fLu5=`9Nwq1OE?ybhU17E@n(U`76A2x(GSJ!*OApH* zJ5F6vbCqr$I^@o#q;#?L(Bx?MXuNWA`LmzV#s{8pL$1w8or|!1gXd(5YO z$-QsIBcE$MNZHcNvk!^ywZt;C`G;lqyZz0Up_TJ1aiNWGaxs(2`>9K+&RFAnE^@S= ziJ-N^T=oG{`w%G^-gt=H6HAUJ!|Ee6zgYX?&$A1;xUlMu)h>)=bV$i&?}_BjQM2Vs zNYsJU-uhD)P45pm8wnj!e$dWpr0Pzt%tf>Gi0|K6eo4K*Ak{|m)hDG(u8!p1qo9o^ zEIBD3Smz^hV~%(}&GwCFjL&yXoy$C+B_qSi$2(W?&S9*!L_5F#?mSYl%(ack%_Tf* z2i`eMDt0{QdQv*1;$R~qM{5gGGU9np+?T|CL26AV)o0|+C|Gr$%N~lhE@1h<(m{JC zPOiVO{QcC$v!>4Wi+68hB4M+Dj2&_8vvrBb1rx=8$4|~TT0QXCFp;psQ{L=*`0PCt zZ69JnXXTnnltUEI~oB6gIsaUc42~V8lbcxSDr0#Ked|=f9uMSqbM?Qtue?7AhrFix6`p3}w$5M*_XU?n}gS z3Y>Podw;=-m*p4r=R2OT${{XquKK^)Z&>C2d?u>TzjmHMDIas(QK00{)ecSmPnC)$cF* z|Hu5X5T)~-*Jyr-?TDU#d4C{^19Kdr`NbR8&u5(NG~fFZsy$vm|5iL`_GtOU_4w6& z1h2pOrvHEO_p9st&y8#TK0u^D?|txRI?w*Y z?H_M>cvBXl6r+EB*&fXwmLD|xf6L!|{mwT&taPsT9K8PU`u*z}_xze~J<#+hFrNP{ zJG}OI%lp;)GRiaVa|p4VVvhF2`M+vE*Z5J&pSK^1|1+JpJ&He6Kfh}KtM3`G?9lS( zYL6E09Q85#h1iZLf3EA;ua1LXzNcfY2WWmMNT>5|KVp3>e|XO;#Qx`d&iU2%Bxv!> z(a*f^kwp1;-5t9EGYVDdRXrxewRMlGge$g_4zx+vM08~@;^uUZ#!2}5T#iD zP}&{q-#`8Gc*CmCucj0zDVE+m%lWT*5&6Sg@1J^D{!q(BiEqAkb6p>P*&eUm&-|sN z?a|^vOXqzb|F`_Gprmsxp9P;D=J;ERq0fR-PMqTP`w!Wnrt`I*s~uWCnjf5TV7{*> z%EvuE{^|IBmtSH#w0#xD-*5LrL8SM){m#`NasDsH^RL_gsy>l?uItBK_xD2-7;>ET zAwDnQwnvK_t$m2|vFeS{{_~zsbG83nWQ~LzZ}o6>f?=%VvhDK7%B0(g5n4FxoNKJHHqfeLV-{IyY{zVT`zz8dW+W&#s8W9s{OBy z)48r^XyXV=AGdst@&DWFCRRJldp=QMJkNC=&3F9%;(GmW`TN!MA3vv}#EW-c{p0O| zVK-O*|Jr_nl~0uZWA`ay`CQBU)p*eSun;{H-+$)npIC3c{_&QB<^Olj4`Ml1c@+O= zI`96TYrhc7@s>Z|b|o$sZ+X914(|7!Xg}A)SZDrg-NA?t^F7(GzF$E3Ip2S!X#dXe zSN;5A`{K4oi;IFtk652LA8mXR>!GDY@#1|Ciu*k;R=dn`zR&x;*L>qc`*+8`c|4=O z=Ry1T&c9mj9LvERk7)kq>Tj;~#VJR-SE1gwP~=#8c*~vl&q;CW&$Zn7)_=b8-|mM3 zCB-@)VCdtv`-l9X>7({5#sB#{XL}YDJ*>FU{1C-~cRb8>{{8BF#a#{siXRGm@e$jj zj!!ImymlDn{kC%OmPhOdr{CYzufKbI{bT)%wQl`txxd>Faf;#(wcmetJScvCbsd`P zzJ_}o5!d4%E+6weg`)po@yvBSA@)Z>$2zdLTM^mm;<=2;%zawz`% zzxWmq{-*xtGX*;Z1vMoF#pWM`&ny&w{NFg#fBt`SrawQJ{ruqc*9U4VJ8S2^KkHjt z{ON+_r;7!D$=K~pEp03ewH@qC35kQYr7q!<3qkPxPlGLg7%cuH9zXK0Fh2@_uJILgecJ6T+Hvi5|RDRa*4T+0Z|a?DflvOi^ygatrM~pLL@(*-RYCY zipa0olV`y+iHLg|9&cYeiky<%S7NOuh@1))7%xvsL1ZswSh!esAu`S{W@tSZA*#}i z=CSJji0r-sf8l+{5qZbZ=-3>UXiBohlo;6m}K*okBIE@B9~kA zy@(`Npi$mwB}8nc>cBYlIYiRzS$5(~HzI%Q)(df!SVTpk`XRH!rrKM#$jcC@g`gZVJA_nR5@BEvj5M3wP4W2i05H-f0g8T1&AUf|SqqGDrB6pPokrOXBpW`XAK~5$%81)5NBC=|W zzp8qqBa*W2@(wlo5ZSzY&sNArA<}YN1oQ7~N8}DIyf_)0Na&ZDRl(U~h#YrY)YVUf zeEE1?^QIX@?#TnUo6X;l6Li}@Yr3Q&QtQ|^s+cTCl_y>x_b32s6w_)SFc@7bfr_ngNxp$8l5Y>9p6_>Y+_nLc znUL;$s@sd482EfCpi~smj1Gzy_b)@V56UFg$hjaoSv_CU)p!woE1SOVj*E!ydM1fS z)T+{_a#K;VXC1rFCC() z{Bpq&C`9zR;tdAvB@tca#X0>P;)u%Oi{E?2cOmkAHAvLUAwlBC6hxjLe>EA!w+tlogI3tWVD)ye0NhBC=w7KDtkyBGQ~!B3QFW5M_%)HGB4jAes#8 zLp;WM5v4G7?M3!xh#a%y#3%n0M8%mhek+K~7>hq%vQJ7wMA^&75qO!^%R%3c2qImmBk>cn*MD)8) z`O5B7$dOJtT5ivW$Wi5SF0QZQ$SH)D=8y=2hy|qXP}wYxNZuA!T13Hw9L|5kpNK%(N7kLsHn!%*d5o9LvLov9c;Leqb)A}gBeYTSe{qx(YP#x+o*+e zrpFZF|FWuW$JwihP|Qi{&m#|z<58I+ulI!_``6XVOh0NZ-OYmRJ0*C>Pq72pGxf#W&S3|#=fRT; zmgo5p(Vdq(m1eGV2jdmS9F^p+-bydBAJU4b+Iy{e@hYlrJHcUdEE*TSO46%|1KD zw@x6|Z1t_%mb)RA9p7@68rdOM0?NaD1(y+1JiZ!Lmd_+5FGU__^~!lPypJED2L zna$UCF`{zpSoAU*6-331W21~7q5osoEIC)^gh-t2$5jEb4k?!?eh=zOGmhId&h>jWqlV`2bJ zw*@&B&}6Fp@DQRHsBC*oS`{(+^eX!^VZQ4X4%()CkVi~6id)}YAcg2ptXG;&R3VHb zFZmA^Nre5SG*)dx3!>SwN#NMFc0~8m#r1RpWF+}#mPL9`f+Yvocn-S#AG@}0{!0GsnRzyE*SKpzELPV=(-9YEJF~pRe zL6-Wi9b&CemEIFNirA_z@hjc=8L=x}{n)ca4zYW?I4C*d7-H2~_~m-@1H_`HSzYXt z6=GDXZS5Jq4$)tpy{TQ{B%<5Ch3&9U2ckmLvm!NAk}$5lPV(&-LFCSzy=Z&z8=|Pc zam$hOl8B_hms2bIKO$1;>jJjM?m*O2sDwA>97A*-^m_6sFF>^1+(Sd-o+BzcG>7Qa z1ql0Re%$@uPDJam`h%=$TI6KGbbI`EIYfCparvb13q<)%ZbriUXhdOq`SCBkFA;?x z4QiH!W{8^LV)gq;2NBH;-x#0q86yVoPu&o1a7K(3SsB09KSoTpzZYNe&>1oDu=OZ3 z-G`V4mW&=>o{MPn=&mr$NEeH}URT=)Cdm%50ysO75j>pmi)l6m4{yzR)5ZdEbK+9!x&YnSD< z8%&7)g9~0QX@?P$G&@r%0Z&Bh`Nz;eR{_MzX>(pk^eaMpPox}AD@N>;WgJ4v)*y}x zlJ5qdOh;T89_pojEJqyU1@*u2-9e1lw{(ndNkE*_q_mtYz9TN%d91CMLRvr7ge$o9S}2bN2TQTK8X3vt2Pgx77@moOHT74Tg1+!Txmf(AL7b!V#D>lWr)Mu zJQ2s+dl36oodz>YjS-#U#)TAnFCg06_MLZ}bV77_TIH9Xl|i%*dAxIrXGOGFN^9zE z&LB#@L{qQ4_rgZHhDZ9))b1Bi6WK7}0LI~u$Bi6b0Fz*iUTzpg|ln#-0)mEbzvP9%KFZgA& z+9OBq?cHCb;f5$jei`-k5kb_8%f(Euend2Eeh8>)M zFD~T2Lo`bndansiAoAbV6fm;)A?j2hrn<2d(NlZyF30r=Vz71f3B?VOh|z%c$8_rv zL=V0v1Wh|42BO#6Ll+R%>A?-3HqcTa`b&C)eEdZa?Ne4Cw$8jp^s=Eksg51d4S#dO z`)oF%^W^k>d6Bb-VbYaNqkh?l9h;H;aknJIp;I$`|3;rb?`vE?X5Aat{F%4)uRGiy zfBtyhHcQ9Q{67~%%Gnpgg(t;DwUv%Y{V8T8zBe*BSlgKDTUr|!TG;=2TO_c6YQ>-G zlt2FSnd%Qy`oAJt@Mj+N&xjTr+Vu0{`$s;_?C2N&nMXT2?=QWD#Nh}Z7Sd3(H?*_Y zFwnKJG1L&Xu@TpG(A79;t*>jLpj`kjzmF=X6OACJUxjDF_5rjB%#MNt6>(;vRUx{&phV88%89lcse|7;xbD2(96gw z=v!Mk*!{fO%^ruKMvGzl4!av3l0? znxE}S`PVxf_F2Au4iK6@^EiKo&;D2VlwzVkKZ#5I{YmEUPx60#qLLQn{h29q^6yUy zKR?Ne{r&04-=B{D{pr}>pN{|i>2EKxe-|t(`}33B-?nmpOXdC!Oa5=E{NJACW&W(< zT0#}q{nec7|LD^{y1*1!ma_ZAM+rYf)Uzo{mTNJh2w|y+MJ&Qv({svQ-F=IPu^IY1b+tdqd^gI6{JQ-{?NG z=#?Bn_|zF5FMN3)k=fs5we|cLWHHAbzMYY05T;84ZHJB>L#WnIeAF^@K$v~q3;Vze z*VA{3V0 zTWT&-B2<&*(P!>iAau)9cZU(KV2eJA(QJuVvSRKfE z2vKrZPy2e$6A@mr$;+(H0AVaqy_0;(0bx-x8A#?ZKvvy%D=8h1Mc7gvp9?oWflw-K zh~e(Ng>VQvbFg&rAZ%e(lWFH%5IRbZYVG662*YXaP;L%AWb5l1twwVfWPJ$#hC3&u z5xK+Et9bUuBSO?cXHUN0i5#2ua2U>wMmR)wH2ayaLyot5E}Y<+M3(g0-5EV|0g+Bz zgq(jNkC+X9V!s=kfXHrcWGmN>N0$4VX`P>nK$Z!4-?ArM!H#aekhnKy4AFRZ+jOb@ zHAE2JNk1ytg-C`LP5SHGAxn8Y?T-11A#5Q?57l~ighTR+l1Gpo!g|r|cEsHe$lefP zu24}2ggvm1^~xD5WQ$+>tG)?CWZw$KwfPNR$ga;PzAZ0!m|K}r=uf%Y3o%n*W?(cv zhMdSrJR>df5ZO!9!+z*%455D{%(PA@BU(+HDfGozkahWQ>}waPKpDZZ5n5h=7AamrAKWVw8I5Nx4!FpDxdd9 z#9Dw;&m{q2?duO!;lG9){WQ=TwM7Y$6G|`K@#Z1Is$lQid&>#gec$sk|BFn7`C9Y! z=n=v=T=CTJWk?Ugshqsg&P)hlk!eJBgrQg-opcAN(yUx2W4AF)7I1~V=_Zy1Ce zsXSnE=$r$>pJK8;L1-m%EL<|BFsJ#?d9`8IlJh_RZ94mZmZOb-%{e+>IJ>}~VS%s- zI7hDTXchAY2cP>(<#cX>je>XKdG9OWaEU{o%4t2=E(|n(RkR-LFKQl1fP8R%qNy`_ z<_0*#$9%I1lK>a>5LT_K`(VFRq~n{IKGZ{e!p7mvaz2 zkLgAwY3YE|^tLC5mOTQW3$fF$SMbA`Ll8Z^q!2vTRhv6kM!*>{Hjpq3gLYM^kDPEBm0a)1UT6V z$Jir;`c|0LE9iTJ-LnFv=U!L9?&w*LW5u~(wZ-T;J7X<4go?kR}+5~8N9)ZP2r7ZUSi@+-8^UfJYIE4&og5Wu)ga0 zPR)NK*k`ERn>y19HjJfGG)($n++z^8YRU>sYa;v?joX6xj<+8we}sb#^Kn=!pbGYp zhE~Ti3ck{QEgzCJ64J0Zv?yhXTM%L%mfbn`=vE~FM~68=UJNX zreGh%Ye!`&4mJpfq3`oUVB4K`+|`gD%x?wOt6cB~qktFu@)^EhY(Dz(s*@L(1y+Zv zY`PC-;oUWA`CMQV{eE5heQmHgr8wj2{tcWQsijY;CxOk2El+44CWF(bGJWL(gt)b* z75vWCgTs@2vpoTVV6(uIU+xhP*gfDeIQZZNSh|bS9lB%zRFv?Zsf(%a4|W)gG$B zj-_s3`_;Z~@E8|ZiJKG@$Hah3$peP4r-b>;|4C$<(I!^CxY1q zf9A0UDKLB?TkvqN6_}mADrs_T4OqX;pV_fl32a*mDl(T;f!)3JkGMQNz&@7yUi*g+ zV9TLb?8N8-PQh;v&;?|G&9cX5w3SwXDf8N(o2wpyaj^k~)E92BS$V=N%Jm}HE~C_= z&rAdJm7F{|9xY&UZIeodG96eAh|;WV76v<+w<^WEoxnll!WG}Ka;otBgwn6W7jj&-8=9G<{X*t8odiTp}+x!ek?RyV?4oqPe`+PT+OHqXO_T-u!-zipG+~^^FkbDr?+CV3 z3xx{{C*W+VnaOkM4Db?rx?T6aGoW)Tf}0SV=EW!@ zIJ0bNhNu!@{iD&6#`!Q-P<ANReh436uvdR1Tag8PrrxJ{Z$;IV$N`a+WwoZX}!8pU`T zJeHLH;P&(b*Ml#w~pSwVB~lDMB!c-0adA9`<)6%z#4HPSCV&+i8dr!8{M zQFp-1(q~ewMHP&w<1!l;TZ7RNpIj@U2{0e}@#@Aw7hbU+b5*Tm$yk{Ad}>tRR=| zsk}XRJLK>>OtS1*3Q5ANcZsG;Ku#0$P359=cwsgiAD|x(k0p3lp6a85i!*6&vyQMq z{+lgD`I+fZc>K|d;WkYuT^Erc)?f~$Y7zyF#iLNqpUmWRTo}sI`(;HdO`*hMTx&gB z9OMbUiYgWzhjhQolo~NNpvXL8^qJ2Y$Y9)SE?Pba=?T6z6_I+NzvebItK@1o^$-cV=|S{Ke!ZU*_QDE7&G=!B#zH+OvX)r5iz zt3CGLKL;hY;z}#Oib5Hu*Z$CB7a>obt0D6uE!2N5wdhP!hw5cKG5Zysz_a0sKn_<0 zC^EEqX0h1{>X-tFhpphv+iG3$OkytJ$7 z;@Q3yy4gN-exuNVLEF$r)6tVK6w{`cv4Ir^_dmCPoiPP{)xD=zyKjL32gl0$4o1*x z-|vu6%?v&KjCT#bhd|H!H)&eISE1+Ij~}MX!=UHQ&UcEBjzISknGog3w-tk<|!!VMQ z!PT|Q0{R2<9Ukj9!)WfQg;{~3&_2!B2K%o<{r5Emfl{WT-ob(zAg&d zbcK}L(v+ZiUzhih)|b$6ZQa*$HWBFYuwl?%xgG{4yyTpYOu^vchHtEE*Vp~~a< zo0v&ys4-tq|rcCUhH&wA(!cLK?}H_#K9xvX1b9C|N%He5fX z1bw~jgF5kRpx@7sfi+MY`gt0&7%LT_D|6H8(ABKacl1<3>c?XQe{#o0_~f9MImdBw zQ3tf;MjTsUH4ZPouvotKD}gq-*0mcxJ%$$k`++nkw!_Q*c6a8>RnS?lI+D{A2pzke zt`~dQLQhqA!%n%^&^c9m#K?yQx_0<|>{?Y19Xmgterrn&)xyu2JJ+{DW6)m360x_? zww!70xn*|H^6Y(cnYuN!@$!r48OuZCb*tt9&n?hAklVj4JPvBlhCBejr)T4~j+_UtuM-zSqsG7{ zd7aPJ#mm6laNGU0wS@h2>z=Dja@=6&aF=tt-V7M0zZ*_oL@QGgde{NG-G;jCp8_sZVZF2#>cJSX{tdt`C-U) z0clX_%{_k7-5cbd_j}X$g@DoqZfjqjX^3(;(Az}G4w1`gcTw%W2v5JHb?xKX3h`|1 zUu)u+A*~dtN)l;=_){87viPXs(Q?i>`|yXL_eCew#HJZ^(u^!;8b5-zcH9ZhZbQ&j zP&&(dlLxXFI(|%)4upJ@Z_AjbUqhn!TgkYG-H_6iOquAp5VUT8Tg8<21`_BR+Qy#= zfLdK1cbPjKC?4(B)TrD6+LAOba;bKpJl#tF*zqAe5x+LAy7CL;f0(}YCcp&>iXKwF z_A3M=MsLa2F&?#!ujd_RY?dD{#F*TmoTr}vV=>**kMrMLiwv9PH1d! z9e;l11C;pr4zG>31c&zt4-~&OK=xAo(6|8_s8C!qAaUt3lo0mTb1kpIVPv)bLe1~s zQhhlsZ9p9CP0v@~lD-IbM!T78T5f_J^^KLsW)#7`S=qNMNf|6OtJ98_Z371lB*iUF z3QCcFl@%Y;z@dBPO!nX|Xl7ebQRx2(>eoJ3e{EL)9{TIIE5)0E=k1CGqc`Zm`ABwZ z{~>Ac>0p=nu!;@N7-l_wph*98aQhm4|1At24{nZ0~>A;>QU9zKeEFN?6sDNJPykQ7dqbouq50s z*W2TffnG|3dVGGr93lwP$z0|ROa>xXh{>Qd)+St)jAJWKR<2{ zMtTL-v0WWd($c!fhUGHUB}A_H%5WZx;)|XQR*Hjllct2!a2Z%XAC$XP_zc<~B%fch z@iSCMQJ-WExdA3DwkEwRgrVuHS%BV3CMdZ|@rgmy8Ega@k8tid3HAdmQaa~?z-4`% z-9R%nc$n~tUZ6~dX2yAlk1&sHVgD#N#w3(t%bg8 zRYDRpd_|bXbE9lIOyFwTD5xz4A}Gg#rUa0kJoLFRUTE) zeg1L3ymTJ)If|MyNti*WJe4>DUo6xG*AG^2ZGig7Qj>x3{HM3OH-Obym))-f7C_BqSB7nQOTnU6mHx|zX)s#Q{=|2m zBA8X*YP$GI9dZ(-{Z2hfgR-Ec6@$AY!E(AzTIjtTl)Ld~*qN*WEAP^}*hBZBX>o5x zSn(UMI(NTnRsTEa0#;!+8WtFKzi~j)I}0p7Fh+4MeGcYglyaGu4}h5l<0Ha+VBh_GyN3P_=vlk4N|60M z^i`Qzg?7~|E<^xIwwy_UlDqdBb5)<2;7aLN_B4)HIT6gxy{hxh}84IFwuvC5qkxeVRb zuGI;~-ryBdu9MIZ1-+))1A3>mVVHMqP~fB|w9;H(@YpI8dIO?gEF7?au8DrbPx&APrIBMf5(+guHN!hmcyvu>aTJm^e`Urm5oDW6Z8uB zj(lQ!1br3qLPrq7d5`-+VTZaYOs%b6S|}k6Qyd~}O=XfWIcY(;E8+~{*&jX4k{WQZ=cIipQW$DA6f^ z;W6|&R)?~#>4Q;o+WLXd+Aws^-*ii|It*7jt~Ha}3q8XZcn+KyfFZ37I{R!{VQl9} z`?ZagFuqw}dNl6~jHyT)s@cuJP&lG0w^SB}!ulPa(&s_f#?=S>c80+aJ^%IKcZ@JF zv~&CA3qH{6YoEI0Sq$`TuHXOU%eOmp^#}hJ8i!BVRm(v5<`d?yFA00OJ+=i;{bx^}V(! z8%->J+Vxy9NPf+lEdE(<(^#_5W&??)t| zT;a(yBSkjYjhdFOelY}vD^iP=b~?h--9vj{m~4T3oeKwT>y|^w>+$uGLDwN8!^2Lq zt_<{io;nOhyn?i(Et)}WlaME)yZ-hJR_;B!?>St&)HCWG2{)j6r3|)W1)il23`L(PfkF2 z-=bc*rn6B0U|ihaA|9GOdYWde@}aT4gYx--VrWo{88J=R0M%ii8kIk3LlcY0OqAaz z=yb_@oWGZF@5{WC#rL%l3V3hwiSw+5ln_=)PsWX)!?DdEf3qCaxlM1qc;zw_Nbz1z z;0q?4r|3e@Tb4n7{jL=oVtznT@ZB$N=S`qUvD)b3xpYFRAAel19#n+ZHP(*DL&Bb! zGr3PiA!l&tj9`2hWYAZaEXn4DWJf;cX^Xv(x#!>%^N&+dc&;dgsZ1H3e^}kK;R+kn z`7j;qv1o>_v1K75E8h~@Y4G!ebON;G+6;MUUVzr6Pje21Cqnm%UJbbQO zPs>)ri?ww@AMcAptyy=3@!=!zOwqK6|6L2@OTv%PWdV?SG{sRd$p>`bwWUAc*9LW? z@PyZ!DM2+{^CVw%Mv$vnLy`~Cz?LAe_mrjBmy^+wBfXkrm@Z{~9nPDi2aNS<( zxfLAJolV@nEe505!>4b{=zxlj$lJcNiJ&U!!sxV<1uUrDWNt_h;`t$W^QyQK$Y--A zN?un4r30(fr4{l)F8^TP!v~@uebH%muyQO&70SPo?(hKZZ_f{gbS(lIr18SuOnAlT`a6H`wnL9$p&crl9Nke7Z zqN9X;*;db#^|TMPUrBY7(d2@TsxN$cOM;hR-@OUt0E&~(-24{ngV;-R;RwiFa; z51i@cR@;vCY+I68UkPZ4By9XcL-wC~Yla8brmqOP%vy;9#Qc$ZyW9hM} z4l<5W)hEYiKquR=p>?4MOr#$d6TaLElTispo3}>5_(iLOZtJw6v*ZPal`lc~EagwRpW}EVP=&FTJ{XIW#P+a967uhN7ylmSArw}ppBtDc7HRBC5UF*fK%s!Y7b5JU$@M7_oL=@lFOPJob3skcuH#`zy2RFJ2A# zH}~Z1AAJPj5;1ISPNtyr{epm!ZVfbjczMLp#20E18L@#yuVG+?!ns9HzrpBpC)@o? zxM9LodopWDJ7M3}&#PKs03&G(F0zhxFdClU*4Oi^C)|bOD;hiy4 zI&u{zZ@yI#sUtimZAyA@*A*tsoLhO!55TKj7mL9VCYUr4d^oi40Q67qPX9!#l8 zo4)gRgI3LF`_ED>g&}zX-k_s{FtsdrZ|j!TFh#R*xWj)tOi8%VQ}UX@tKnV#8%ln_ zL}Cz6#Kk3q^8n@DcNPlJcf+ML;KmV{q%_GzuAhM6ulwC;HdesE?io6RNi!7mr#Cnr`pQ3FlFSBZm1LnQ=>vq(Ao21V=8oT(0$UF34#up3#k-L#xT?rGjrVN6^wDd<1AnJ z04CM;6^(tggI8ATg}uKGK(9mTR{gdW(BJm#4dc>57>FI{EIBAmIA8Q_?9YdCr_!?1tnz0mF?7%O=BrP6vG z4CuksiqHC;beNJ7&2wG(I3+#x02Qo>AV1RCmvxJ)df;AOSQ9g`R8&>jDI;!enI!v1wq z`D@g2sP^3AdvH<=UN&bxwpH2;EsNsp?{ud^eZ4!U%i9*{&G%v$urr3fsl4lFV-`Yx z;faQRN>6C6rK27ajXrH*%me7~P@89^44|=!I>lpVWLtPo`qJDk{ zXpEh93AG7?);x3CgEm#rSR|akIFt|C>ngRXEP3_W;lxe0W|I zYK6vI9Bv<)d7+gm?(Dm9fUXB?Cmbc&p9Ls3O^a%vVVI3@-)R=y%+eV{4($@P}uJZKT)YdDc%1`SK4svJMjLyZmEFTxYjE!x4TB*0qeGJ+|_AN_%U{mRA3Mw;kxeZDk6}0 zEyMh6E6maF@ zwoj0yZoFb5-4&{KEqL;|a4QsTS;R=W{s83eby@IZ%}uCnNmX6(E&&?zRk)sc)xfhA zAD-Bhd%?58mgex!c~H#g$o}<;1k`=u-R0w21`TPVhf)jC`7h+e*MEg6iXT(d%aLNQV^UJqVs z9{yLE+`wtUsUbf5A#i=J>>T5@0xZ1aoo?Asf?56N(n}87V5Bq26}z4jjGWH~Q?h*n z3#Cn^E3G8Js?_(~?c7&j77^ocWVI9+nH^ZrdUiXQv(`F9P4R%vx!kTjX^+9$(QcZp z#S2WUvv+TI)dpMpX@CG}??j1(U#4tAlmcfJvy_S%g~^O!~fd zZk;#^8u_~dkWvLuHce#wY}*B@Q$8hU!+Aktq{Zxp_6JbsOip%;IRt^>>pi^vCLlZ} zna+8O6GU=*(KPmHL$vr(c^V5X2$Q*47judWqTO?KEaWzC+xqL^(>g&IQ)w3^k<05vMN8Q z=nmnZJ>R{lmV|KceKZZr;vmZBnD&Ox?GSlQHHXRM1%$smc`}vIFHs6U-vrC`A-SZO zuZ4FhL`zkFW@1liaVcb>Y2rkn@6ro5SunnbYJ z(bcc%U|kKSu>D!RJLny<|D2#o4|XRP6ddqf zMR-n)cyY}LOwPSE9Vib5OP;SUoS+VD`|sv_xibY0yf*D(44c69 z;m5BCfS%mQaP+cNaQuAYP_Vc>ICuI@C3!S~$=zN1)qGEb{(}HV9+yj?W6)sD)h!6x zcE^-=KWzq`F-3*gZ$Y44alcr4LJXXO?pq#?egpcUlGj(dUIx8Jw~OPiSwQcH&zY{_ z88A5*Y0$f(2ebq@>`eWILA8L1KC#&XRH$^rF6E!R#9P4EU#g<%?$Sp(G(F=%Vp^{inSU(N+hz~t)i36kZgnboyRA94&<{gE|Ua+B0eD+NJ0NCk8 zrc!>c0Nb@Cdo@Cf!MUhvQs-3~IC*tz>$b^)sVYJ_8Fdc~JHOc7fr`f;fwBk>K>DYZqsHI9NUqKjHE)2&}y=FAF&}gH5vU`-t+x zV9CZ^*=bh?rdcIQH=Mh`(2MPx${_~OElYoKeLEwl^KRp-;5`ParhTIecjtfxi|nO} z(8HkBD(-TFP7zE?Z|Hhkr(@;D)TB( z5$EUG`pp1TS3Jshb=Lt4DsTP*CPPpyO8Cquv)!a;eXML@qN2Igf$j@-0t52*7`NA$0dg0##Q0n_f9!M#OW%U7y6A5apG}8a2yxJ+Agt9;~j&i z?56u3ZzSaZu$OW)eF`};b|)*m9U=45uwkE65tMkZi*cO{fMQKGzS=JlkRi+(?ZRya zSu2|K+7+oGfnHnU`escqm&jOOKphGOV5PvblL~Zuueo1c$`9e(F<*v{@<6t9hg;r$ zK|rRg`Y+p2L!F+^@cYvrpf+}(s@x?L8tC5f9TAO(#=e0G#Z|sga7<}Q_K+!54aw?X z4O;|$b&GFq%Uus=cr;|MpWhCrDb-qI2erVNZDJq)2MsVivdH+hr3|>rIEQ}X2?7sR zpRs1q=ipZxoX{1~3ul=p-*~U$2Aik8re}>;g1NWLEpFAjV87LZB`WA3*qu0#D9XPX zjLR*Yh59DJSbp85^81FMm&mG|x^NhDAHe2Kytd$-bBCknjW5_RH0o}vzXg^8e7Cz; zYQWetjm^R#0CaUKHP$^023@bb5Xxd_P$|B?)A&jf$l0%89r7FqesC?)O_3HfTM)<#Yk&o*BUU@wfE9`m?tgX`#_ss$8&1{8|c#au3CF25DY^vya-X-3lr=gP{Qdp|;w!Wd)SVIi<(->dyb|2^0@ zKFHQ=;s6(hj?hnP?ov^Lg_`sRr9aBqNeu&u)lj@nC~rNN1UU45n{raugql-Nt!zbBf}2Am!>*J} z@UZ)?rsHP~p2pOsjHWT*ymrIc;B))ICqb6gb8s1)x%l?M`>P0e>>d|itj7#zL{F-V zd>91Rvo`cscn(7O1$&3gleLg*VHm(9A`fk~;3HNiok=>Mc(!qIWuEI&pN^nRQ z&fw@^0(%Iy9pQWe&SNWH76+z)^S(;^MTRNhxId!z@cKk>9yq`EYx)&%D5J_+>oN*9 zy?0ve%x*%Fpg)^cv@#(1I$xB8-M}tq1@jmFwP2??-1DB-2&}BG{H{?tQTXUUqbq91abEKHobh zhdiG{?=y-}<{WG2^}ELx-DD0`b^%K{^p`+^!3tx#mS8a36q&0g$PBTqY-^R0H$qm5 zH{aP}Z@@C1z1E zl+_%(mD@uP$z7+{mL|W3xEo8V!tx5ihNbyA)A~p-o{U}Ed2s;DtbNA{1g#1C>4f=- z^?M;rTO=o9x(!~|yx((2I0I^;y6aP?N+5q9bNp)A)!=&bp--xNCp5J%TG1ci0N2Y4 zA~TK{L)R6@y8>VCfrEU!#M&)Kp>+E~Lp#e)(EWN z1go-ar5P_c8}2DzLrVwgvW};F9;<;Z4V`rE%yqD%z4q34e?3%4E|H~vk;TUkW(2r-Q+Xy`o06I<20I|?>B{^Y>_Q9t?n==gh;a9UIu-|*V1=N3&5c0 z29BEX*U%#`I&~)LEVN}l*){351iB-pZ3gb&hi(-)i?`CWFi`w($;Z#I@E71&7327V+=oV5I8f z4jRI^89VErthKxl#$&!Jxu~$f#ImT)bj5NQjlTJ!jd>pof7{CYe&aLfEf)O{IpGN- zD(>bqE1$wZuuuU7^+RYHFMGLJUIl7yXsK*;4T9d4O)bf37hv@DqpO-F91D!M>-PDXj`#t0aE z+kNtRU^cWrQk`1z^*S_!_N{fiv>57`UX0pQszdHKL$S|!`p_w{=ym886L8qpZE~)s z0_=m9T#sg~g_twht$prJ&>-F@ar?_CbQ&|A-NRoAy&sMDWL@3@{R>ZAFF79qLm&4y zc^=G%iB~2MLdMOZGTk&=v4(IjyS3i`u-`gxa`QULbI}u?@jp0yc)LE-IsUNgwfPSA zhRZ7V#z#QDD|43P!5paHTxYJ*xB;q!$|6>n9fE;2`9MagF{p14kyp5R3Ni#Izw+F< z0~r?wZN#s1K&nEkd~0U}oUwJ-Nin_v(%Xd2rf#8zGdr9I9^@_s-xiZ~yOoB)^I=d| zri~4_AFd(Inm@SdPwA)OWjzWrv^URM;s(U#-kG5?crdaK1|=_3>1 zAxW8^%2^F(1+S|KkOrUw+p*es9{j|I2R&6)u;L*QkioF^Ym4Oy8VT4<Hx|4wWh}&^+L+XrMp7*cfr9%On0TjJ(X$+dG}Z)NH#;hb%{Udh=}avYD-3sBrA>np zoz}BHRc%mP!6Ux>QzvL@M)n?EwF1;7)-QD2+5u{>+7$#%LP5u}`3}dM6wu$JE~<0q zJ{TTp)UpjrfRtE+zyh%*crVx3p#$46+Tadd1lZ=Nh5r7X}(&`N()x zKh+rMeHfN}^>q`Nl?+6E)b#+9D}I;x-sOQw&<6eC)z`uB=+dR#4qRYz`;f(#{3I|n zTko~|@*%KbH?sd;oD2_xV@4S3Xb9(boo}bQC%{ZV?|z-^ZZO`J96V*b9!y(zbi0@L zf=zLyOx?xX5cFd6t=&F>;E?ykGCxcjEJE587E5p`qgL|MSqqb2rQyc7LqxUa6p#^&4(i+Uq^$GEB z7_-^i57D*XntcVogKbCeqU2#IaCi~4|NN3lh(5w|;A{0Ku%We0UL)ZOwnI7l*YEvO-iCyxltx5&mbQ$Jnw(g+4-QeaxsXpl0zDU{V z+zw7#TNiOg(?E&Ewe49QMv#4H=cwqDG0=a?pq}ZlA9Tz=JV^5G1cd*O&o)8DKyz=zigM45% zGtn*D^vCxWI+hH(Q-bq>lrvMM^kCW0$<~?N2-cMiTazp+~B?^(gs%e?Jdsm>Mh!=GzV0%fAi! zS8s#*0FTFd1q+sfrE0R!?VSn%B>QzvdBY3Gv)(%WsJr*3Jz6km@>gfslzk|W~ zFZ7970bob@Ptq8l)D0nw#S1%*ne;lG-9X-DOAQ;(eC*^290~K|{&GZ-Q zK-F60=oZ4fDL<>tN^f-+63X?K9KKczw@xj++Vt@NJkvcEGqCY9$i+U?p!_xkVTX%r zORAQ`g=KbCO?^7>&}#Q%ZT4=EiP-hPhWs8&A(CKACs4EKZy^Tsxz;-oZ~so7utG;s^eE*naU9W?+;ql^5kDg0o4=)+}} z1`&9f*>mXXM+12J`emvC9V6uC-tHL?-3Ph5`yYAQYl8txXYisk%wV#@-l&z&6l{k3 z`lqb_IQM!iTa)(+eA3>AP1~#lpEAlSTV@Hk@No-r^Nv4UIT8JA=>dB1sXs6JCG{Qn z4QvgjRXGZ04$x_;HjKjQC6rs3rue~mr88$paU7T~^=wQAMR3(BUcKysHF#{BF&0>O zn_$Ow>V&{@IJ<`5LMrtY*c1gl-TPt!%&#V2y>y5l><{qxa7*n4JIe_DM+qOm_?63g zhUhO~thx618+tav{Vcqdoi_+{^M&_v`96V>DG!;WdzL~!zhv2(u109upj>}LiZCQw}-E0D+^0&gGpEbJMzHgZr^_aA@QSPoFkcTg<7>R%4oHH%E45T< z_!u~c%0AagYXt{4BGkZhb34_t#TDQ*{BFgL31@h!KhyqVbq~ZQT@7Y<91Eu#&rPz_szYo6%a7>E zn-C+;aNF+A1Vn7&s26Ij28;UjnTo4!gVWH6#Z%oha2h+1Qn8^DoJN-0ZeRX{P>)wJ zA~wsx?pu-1Czm>KzFl(lrl$==^T}z9g?)$2iW4hEf_ou)>23dnW@B)0rxSi^E(11K zV+Plc>O<7Tato!KYapB@LU@@O!H@rmB~i;AAl&MJUD{!)m^>ZmYe?4yy=gh#cW>graI9%l3{5ncS6a*RE7ySGNUJNu=o2s!q^$Uo(*|)+ z)o}m)EeKh8tw%g>31m3$lsKq&4^lR1D27H)K~&-j#tybyVCwm0yU({4Fl&6;ZOGUF z)9-+vtZ(W?k#v9QR%u~W{Bwg!tNT<1=b}@8G_eWfzzSQF3b84fn7j%n$|NTu)CyQ^Q~|@*iXk_ z{_496qD>mtO${J~@@~AOiWUN!>pU!8DZ!97sntKos}AX6<;leYZ4h}0A_lhUDEigAo$sa<4YSGz$R#Y7Jab^+!Kyf7u@JUD7R^O{?-<_S2V6|vHKf1 zjeB|s4Zj5^(HZy3z6^*waL(yoqbVWI`u$(TyTR^a?Cpm-XTefibZznyRj~4}6?@{G z4Uha*UOiKP9b)Y^(X|~YfIAuW+4KP{aJ&DR{Tr1C2o?m(FWFz=uJA6}%#{}*eOtoT zP=jM|J7{TYnA<`yyjw2ewQdoZ>6{o+S_fe2=l!@h>@D2fpwAt{{Q>SgvReM*Efd^N z%ScRZKM!{c{e*`^7Qy`q5sEDvM<8~y(Eg)ihapvB?JZ8`9I&6M66{p42TQHf)g~qZ zgno0R*MGAIOefcQyft?Q!`p7lGzVXUnQC)wPQMa_6k8Q|Dm8*_iu&;*;WxqVGCw7+ zr6fdHELd=9x(@D@EfQYG_XU#mw?281-3}oGOBf;X#4Y>I1ZW`Eq z=jIVIwIj^SxJvj~0MRE!dv2bW1RH^tjVEr=TR^10Sr@%du+-hMr!@5~B#c{iR|gxz(~u9e)<#Dmf|e$3OIH;Xc&i0u=@vtd z^@v^evwnDbJLTe6?jw+r?bQ9@Bw?J?Dtf)h?*L1U-8Fj11+e@2JmSh;SFp|>(1Iu{ zu;YAaP$x#%mwrSFz56+S<{`vi{N~2290sWtJh%G3ctO*7 zYhD3uV@PX?>7dXIgEH4*b;FcT@QlH0(~m7WkeL~~!{gq1@b$Gg!{Sg6o;#wox)1As zTYIAjgUD;bI)mH@>Tm%cuOt-}lS|<7b$R7BqgRA=)?#X4=o=)lC8ci@S_z)K`YTUy zodX}w8x#Ac+QBz~BmAdP{gxxN9ZCJD747RU!nI3a;G-PI4rsf6>FV#j~=dt3SU7Q zw~#vMJmS6SWP%bDtBe-)Cuu=K&;dJsaaO|k@zMBH`y5O%uB&f!;scGVhfUq&;vwFB zc+(bR2B_uuEJf{;4TZKIKaLb{fs&+}8&;b?L(So*q3pgkgmWH)%Xs$&co5>x`0em& zFr?$^=q1b}gVXC6c8hbMWv<&m-_b2Qd_4^zU$)(tV=p}O5?~k2y9q^cW1Cr0 zHb7xgWzmI)Z=hasdBFs09W=&>r@xL-f=1TwWA=qy(4g=Bq?pwKqH44RSIe1z=~~C~ zui>>|Ucb?5S;A2;7G}6%5J;#;CZp80Pg7v(A8%^v9R?}8o*NZe&_ULw6=yG2Hb7x% zUtMpKEA*NvoK{guhwdldcm1QzK~G%Q`*P(_=rR4;@Om#l)VDXkJil@V8rELr?yAd% zmnI?SIrqCk4P`hWKIzcbvXiOHb~*H{k>~eteGSd0!pD1iPC{!c^TST6WXM@Nsq5>& z2RA<%A8BB?0=7@hcC|kCC9Fe%hqS~bAT5n`P*mIn8qSQVi&}b$~FQgp^ht**RECqnhZjDr5Ue7 z*EB1OIENTCX%=Pq*6xDl>GyIMr30WiA?S?=#XiXTQnq2lh5=F+xxLvrzzu1K_9+OO z`ar7w@s)I9@lcz;&$sEi7&NT%+^Ze=8tTtI)8{pHhnK7-T+TlpL#t%Ta<14ZX!-1w zchw8vIm126J66Xaedu82mli(=cIMh9lI#T5)g@H+GCW|nX58ib(OwAI>*P#V8wfeh zzMXqLhM@Uu<4Gl@erULA8~e7W0bc56j(5;=Lr0*|vX8+$(AzAazRX-4hD3SZep6wG zPT^!}D%<@~-sbb%Aw&!^d!lcaj*CO`IL}r;mpjm~oI&fV5DWCLnmX8ABZAQ5?ZHL5rha&`8Vs79TETJ@fdtFs)TH_n{mos|mo`U~~x88O1x znSK`s)m#{{Z3|o+H3_{jVFMnQKEY^=za8UaI~eIr4>Pf(fRPY4Q|pju=r7;Z^~0VD z>b5?(WS3G2&0lx!u3WGVdi2k=^UCglR`-K#_v#v<<@}BP-q*w6WxSO@*FAZ33{4M0KRp$D2;EDIDb!V_q2t+8i)@=ds99CvUtHM^&(z25 zUDs|0AMbbK1BrBm^uY;pq0exEIiKl*ZV+5yZNK{6@-RHDkA882Z#@+BI^|?P`UV|a zWLBi6=R?m?Te;;^F)*}wQ{glBDR@#fd1Peu(b)48=U)KSSMXv_y=w!)DPyaF&~aVc54sT`)l9Rl|ReuAmUo7P1i zdSK#Rx4pl?J(zI6vX$|=8{}Qm7gK*M0P%OKE#neaLbXo%s(|ZnpyzR?@PV#U7*gQb z&3tVe3^rNoTy8Fa(M-|H9Q;x+A#uty=nePx(CTV zj=*UA&NFw^bzpRXZ%p`xDd;hLW3w%C5yY-pvNy(6YhbAcV(-}GyeN`iTuy6 zFQWO+?-JQWkWnr9E03VV*!rK}ZS`MJqCkZLH3l>o(2`*x8R*Ec2nX~;FpzNV93Oi8X#lcP#c9DUPh}|gglVJ}I_Tpe483Zs8#L50S zAT$RK;N&1qgy(<=27rS@I1$Bx7zT%NAdZtGI5L7EIQ zD9B=P3I#a~sw6#DNwD+8F3ypo;@N6!dXoKmtPy zj7VUNf(ZtuWH7_P90LmsEOBCmfi+HSaA1oQJDk|##9@v&;=~Cj&Ny(vf$JP_!@wN} zr*YtcgEJU-qTq#-vpDg_i4RVEao{%x&f&lxgMc}39tRgNxHtzc&6CSGxq`t}99+Z6 z^*IoTgCG=c5OEWQTOK)z)1`l z9+Ke^2C-y_L*X$Q;!#K-Lm~!GaFB$Pr#MJPA%zU7WJtq7Itel`$Rxot46;zjM&UUM zFUXLCLhdY(S>zFsPlf^#6q2B57R4keA)=HFWki(!Ma5rK{zVlDs)?wXMJ);Hh^R-Q zfdq|YXhNYGgBCKpBtt71+Hla0gANoranOZAHxWH#=p{oR4*JP3fP+Dt4B=#W4vgSn z6bEB-U>ql}Fqpt#5`!reUZe1a1aDDzhlBSRd_dtN2GeBtgux66KBMpjgRdBT!{9p^ zevk+4$FKjx0wO3;pdte`8ED8ri^4)O(2-#g8R$vCfC3{5OeieIfSCj=D6o=%jSNdL zSc(I76qcdDfx&VztiZua3|5h0H41BRz)6O+I9P|ldNORl!A3G{!eBE_w%~*d2U~Hl zZ4PXo1Kjg~XO8Tc1H5x!Cr)-@z=wm~81SR82Zg<4*hc~Z6a>kzpA14|IDo=I5(tw) z1O>q05C)(T@pfg8w=YifYpg%_p=7`}OF`5U)^T6a6 zF`WlybHp4678qD!V1)x~oY;`T76UsR*kj;;6URB=gacEh_kcsCc=jZUn2a7IQJL+L7(43g%+(>annM^ffV>fHJJyEc>*|M@P=B8or1Z^BIRpYPTDl+Dh^ zqfblm=XYU#>Y&O0kg;OODKY%cwai6i%ANiEv;4(m>WEc;QnE!j+ibpN{$anAjC^+f zY#ZYI#YA~%?Mm#ExE+bd4_eIRiVe z7oPh6ihRCvom{)4^$S|Lcw)u7p5bl7*=x;D|9IA}xvoKII;7-S_IUg+o`W9N+?n0x zf9R20hi2>I)%#s>{?z*&{X?q#=A(nP=AiY{eCm#-LvEg8t-E;Ej`_|Pw6?>W|1(Cc zvHmOj6BP*?1`IoLGIHaEc8MqXCR|PYRt_=k6gXU`THp+zITz@Q;7A@_9wKnBc42RXFI$yw0i!^I3ss&#ae@~ z&f-||*<*YGiN2ca-RTb<_E~yZcNB7G0%95a9BoOxPoSMu7h-?p-v3~|f50RE*^Z>j zogFW^_|WcPv*lQKK~imn_5Ot1IKXR1svk(jNU9t>?T2>%BX=)E^F>@XB?akuj<)uY zyXVf%Bh^yruJs^gOEb?tB)-=Y%h2W@mfi36H(Q2Q&acFUHonQl zOe*iEE~z?Wjqkb0(S9a^)(&&o2T1Khq-1#GA#P7BIhqWskI?*L?TbIpF683EsykM@ zFp|+BC7Zn`k~>GumM5z(pjf@688nEHJMbOkvpSc z)qO5|DB8M!Say^V>4%>puZ#IeuTB_0<{6#pGRIp1jY zz+=Ni!VXV)v+v=v_fWKbhzX^AN$Hb{iQJtDPaUxC%;aq5+is*{#p)+Kagx&|KL3!q z$KmmTRR_E}Sbc}p-dOEP?p#Rf=Md!1w0PzVDP6QS#;V&~-(}#v%g@dyb>5;TDurWdPo*sX%jN&u_4}vlJKui% zx9on`IQzHj$wHLQ)t&;w9!rj<|Gz!1|EYeSuRR6M{C|7g{UvBZ7uNH9=MQm;rH3Y`z=#V? zj<+7adp@E0`Ca=F+W4VB(f^tMyY|!h+M&hwPmS|`YJb7fpR515+EL8W?x#Llxx{{d zKI45~L|hKBAFStJEf239-gvO|f7K2x#k-Eq)sBKF{nd6vt0$H|v3#y}zuM1e>*mkr z`Ob^E+W%_##QIqFziS`DTP~U%TKN=2DcL+5{`0%_(Aop*988>#m14E~|Eu)1|CXP*`a|*{$1nn zpPCmG7=DQ5zk6QI_dfTl_GoeauJK0f?^pf&zvl1%mihX>9pA6oW7UrW#V-Yl9L*oG zKH7Z4>ksdF{^#>QyJ#oBqtp{HFpU-&54caqtK3;p`biV8GeCNx2?SH0dcEoyU`dIx+Y)70w*LCby z$HDJ<&xUtiV72dj+Ye12?|TShIdOa}MEY3c3oTw^Io|e1i*K%ee)S$nTppG^-tmmK zpQFV|oX&Op&GmfoyY*R6^jL^eG<&@1T;nEAfA_hH1*aZbKViM6|JCt^R*&D6vS2*_ z?sBl|g}2^IQS@0b^yeD)T;rLm|9?6@mOoQ?{eM0a%hBvm%R}>n<^Sh1)_VH?vG*tN zTy9jhu**aP9Qy@ zajYoz%%%JL z{dd{7R67^TPd}&qr}=-Ce(v~U^T+QxPnTMk;m45-uJfBveT244o!770w^)A= z%17vY{!Q*8=kcrbgxa@gKjY9tXg@yvgvwj;{Tc^9!FJE#$LE)&#sfY(30yD zwIBb}`xRII{MG!s*!v{Td+1X0&o9dPUGfONZ~v$6lfNrZ(l0!|RQZJJ!8=a^`TkS$ zz-QNgx}N&odIQZ7=d^S6&ylxOKMm3(8q5J2r_r>}VZ{GSqb2ma!BX4*l-&O{`9%L2J-<31qCfvF zK4R?uw0}Jlu@DiFkq{AW{Ej{UK}k+T_UFGhXY=F1_Q!+AUk_xCE>50*Kbtw(|0#n0 zhX~@o##mf!9GvYfjNDvou*S{E!32Bq!UkslWZ?OOf$k4`kd&wwMU?F{I$RcUoSW`D zQnVGee^~Y%sdGjI5kC<_%Ka<#t}s19>f|(gFO>jNetCR<%`69!D>))96)1t!K=d2w zv%lU-o&*Fefv$Nk)l_>t1JAU1LF14u{al^n;acSxD8 zRZcGOAyPvJZ!}uBAeA1<^0eVnB<;$Ry1Ysd$)5R47r{e-V=dj?soRSdkaYBlj3zxNnIrWD)}UP)^4OeVqV(A zHHdU;v`Tj{2_Tg;nrETh5lGR(_QSMsB2swKRLoTN2`P@2zw;y~LrSN1ZHbr)K!+zv z>yo0CkivoJ!%3c$NM$l|in*y6DQ`%=rNR9csf_QRGTp|E)Gyt&?H*G`%Ez(~C4Owj z{MJR9;Mo5>X@lcXx}~%59Ow zUNNbea#mzYy!N|K^(&++7<%;*-Ew5|^4J?T#S~;(7n?2cBnau4J$i0u`Wk8F+^70< zV+5%U6njm}1JY`{>3qn;9vS+6J!d94iS*LwGq{J@k+y?Ff`cX>(v-fzwcP3=ww{qb zhls0?Tv+iZn-ddAw&=G0?LB9Z!oKDQ4Rr!YIrXM>PDcom8xi_^TYDE$ei8D~rYs66 ztqRz~_{p%=+R?B5isZQl|@Rk!;&}C!4UXNG&yUoI$q)9dwN5G zB&XW=#sA0_r22{I%YaTW(k8kvII0wZ)F*qF&1}?1y8I=FYIL!F4rgxuj8bI4G8O+m zh!^Qy)xDna_7yUq`Yg2FJ_G66QgR|{U1X?w?}{k{J<_LqeXRR>4>Bsa!T;=fDl*Cn zb8$)fgiO=4vWF( zQuA#!>OL8b^v-jOPI-Po2B9K!8ln%8=62fdnhYPLD5`ywra2JFJe#TIE^a|e5Gt#Ij zUL}z(gjBAHJAV@>LuyKT3}?*tA*Fqh%2(F1Amx(Bjra?b=F;5kW%-4ugFGH zq{t2S4|0zoEtjSQdk<{Ac6Je~9XpLQPc=vDtdK-1125!{I7A`swXa`i?UF+(qvb8z zJ|98~CdzfLBKk;<&R%_pcoRCbkHs^yydEhhJdr=1JBk!~*Y3EtECFe3*GM^6{|;$y zaWS&#A@7DW=v0)h?h-9!hm1!Z=(K+-b%Orv%_M=J8~l|LxjAc^Q#f>qT= zkzAwGgW^FqBt>T*8P#ouRxHSoh-_-OD+j1Deh4d39NCrtumhEMH z7LO#xQ}dzVHQLT}*}}7=8tqc}=B#@DI1=63x|W@q9Ua!Yee6>`BNCxX7U8M=fJ81| z;%=`~Lc2wxg4dj>LI;)|Rn$r5Ln7L&cRLTVoO?UQI4uc=2nr!#K|I!2*`of+}230Khm@FQBU zS#KlN-P9+nE<8h;eA9QIUWr8pb}LwYPDdjBv$Sm|C#{fr@%V7I+6Sa6CVM>f+dHJD z`EmbQK1HNAq2kHKwHFzjwxOWC_!3#0i1lCY_C=~){w?n)XprG!@8bd+J&?vZmaU5L z63Kp4UXk+PJTeioIj`5h8|mH7{(3?41=1Vdv&@?9J+|(R33SiJkfo2Ae*Ak2}$gI#FUC6hkdLYj@Ye2*45&nUg4jRC0oLCzSu!z ztYGi7d$%bvBoE}db%+ybKMTlVzw3^4cFS27-Eu)Xu?kV2R?;Bp{7U9*vKXXB|6%5l z;v;0V@rFa)k)ueLlIqU7{oF{`H1MjtG8@u|E2b-}za!(|P4-XDy+?Y1M%tW=m>=}U zwJJ<@Af-|2!m=;RkWPt(;9E_5q^HgXJ~<+jz=yl!g_dLdt0v@$X^>Srt58x-8#1p+ z9VUIRjVw-a9l9kLk5t&dhYn0|B-4VNy;; zHmja)bI9;QPG*6RIx{8F5dre}tyQm(OL0v^Zx0)CWg8+J9BM(1b%)5`Juyf2Je47bwnvj0Pb_c`Hw#d*TY-{tC>qz%0U3TpGH^|svypXG?6dAqgr@Xdt z1{rf!>F8_;LbA&)-QcT02Zl|k9E=pe$H)=gX?$lyBSyEe( z7p;=+3u0M*G!FknsMbYcjaXbs3A1RbpEINB_=8p(Edtoo{W2}v-Ign0SY zA<+}t6GX3MA|9E>cpmL$B*?OwCu~p-DV(|a#j~peDQK1Pchqqssh3CBZ-ogY!Mb;6 zz9Ko27Oqm$lHfrS&!hDF;+7#rKT>JMujNS9WTP`O%0^P(Io5l6upn(lWz)2G8<4?? z8UdR3qR2oA-lttZiwr;HFN-ixMn;c67@R)mjEvL18obN@ip-ky9z-xTA>+u$Ux`cH zk(m|8+GsLrWLD}^wrn^883eUm-~EsuX^Mtg&hly@m5a-RzP)*ml$UQE;zBw|X9I=7 zx}LR2kET13^2~Q+C|&15oUjAwSf8IR!6z^qk!1Uq-w_N46?utj>z zQ=hLGHX>7nl|xp&UywPm+sf&LZe;ms)#cD~V`OUdl7^_#1(_fC+_fs!4VlpMiG4a) zhRhVZbNpL$kn0Na5hu5l8|=Nx3sah*uyViwp)PTT+r0a@=u{u^C(*ObKhUaQ_nLYnt6C>=b>Bv zlVj+9;vs(jXWxpy9V3=p^eO7;_(dGcL#?E&Zsz3Z=JKPmCv1iOhm;YA5u`(Njeu2x zJ)@kGy#E0snC6mFxR^MaJ2~J`MfX=YE>+#XA`WuJB?=FicK+GV{6{|p5fRJxKi^rg zmhG?Sm4A(~|IuRatNv;^zW+-u7U@KsKfQDP@F&S%-*8xdlJz4%{@Sanf0)nmm-!?T z2Yx(BDg6DU^!Jn6Ur(fp2X_4ERFePuN&Ux@vc%s{2mgLL^!Jm@-%p4Ce)?OA^52S; zm47^`{>`iU_o(XMW~u!>s`j^JHKjkNxCWcz+P~bn?vFM7V+m}~p3a>Xg4G2`;*b;R z*MM?Fm1U7|yO9oYvEQ0`g&p6%v!Y5 zY|9n2Ba(fyarIdwnR!j7hPDEU+S=V5uB=0cfrEu1Tr}scCJp~tk7TrbR8!(XBsW_A zy)iW8nG|AJuk|j6;TGCJcG)}T?s-HSQ;^$o!xSxFWAf>f;0R*N*&KB_l@`%ct*%t4 zyo5OPY|G>`b|8vnyw~p(H6RK>TU}$i4T$JU{gx+otcaW{L}8$+39VdhM;r0n1ySa6 z3V0jdLc8uqG%6j?&Kdi>I^K?bWzI(j*1#LL_z}Ir7DZE%aHNvQJ7i6vfvB%X?&7vj zMfA_}{mo=z5l#9k8P?7Kv_^mRo2bo#Xhr-f>X|BEM8o;qIGy)1V#?hf>(wKN7{aS= zoO>*V*l3vz(sCye?Y=$3xtwBXRgvdqAr3}l+43MqwK)ihgl7iqcceg4r_V(n8rN`zd_#7vxnRuq)ZIi)UAG z%OE9J;#>v&Pl#b-(iC;H1d=u9WBb|{h;&-AwZ;tx5JQzPo$b&EwCD7T!!$Q6(ee*Z z&UqHAB0*|?*{4mr5$nq%*J{-6pl#-o**bChh$3Ln!s$jAVl&v1PU^5er)+1q(u-;$ zv~x;)$LvKm#Ig41mUaF_$eM{E;%Q17I?Olvu;oAx(vW6g^G+(;RlrUPj;puD)d7B_#Ocy(oasgss#{3sOkZ`ZNZ4E@bt%gvP!gJOD$2+Xai#D zV_aoWq5fmuKK+T#g*U>|ct@z~L6DBb(6aQ%r#;9xP((Ifj2x^qt%aPJv|I`NfF zdru{UTb`<44YxLU*gGH6p4|%0P9c6VUuD2|eS~S`+1ucLNxbhZ`C4$x8KU1ICj;&w z4|3bdE`kf4(w9um8L*o$UXxnz73w+deA6iup;o0+{Mp2EaCTD)vP&oCM&_&x$W3cL_0Y0@lch2+6m5+4Mg>(9N=KSUs&$@ z3#fT~K!)N}062Zni--4jpm-}|A&+@E*oKrPl$5xE&4+WWjeYE3;h27w$?`N5ZhKh! zP=*nzF1kcycxyv-lZyTk*3aNp*mjP;C?4}KyUVtmF{pj+<|<>Q54G`XvrHY@(8E`; zT~U_>x&kk)P$kWP?lg;xoXa-w>QWRD3T_;RR*E$)35ASMN9Ff6URME|A7VK;$q9`|gq*Ig^ML`atG47mdC*4pK%C~n z8kpd<*CAqefZpInt-{s~FjOO;F+pk$V;`T32p6cpc$Z}JM&5NWwm<15Ynu*?j5ON$ z9i4@Nn6EcGmio&Op}%T(wFG55w7lAFe1~rbG_MWSuxE>eCT2CI?w5nmzx%_PeZn80JDT}=bY;1sW8Jf59MJ7OU~WQ5 z4IM|rh*g_npx(>$q&X6rdpdct zt{GwLOUt0Wb_7O*>z}XM&kDn|13h`G3t(tSRVG+!7DoL2UZ*$HK@(-b+f&n)(0f)| zMYs4ebiJk6dCVmNy1tBiu~7y#cI^o8EB#;x4@G5u>&wx8G4 zf?nR{H|N&t!00L|x}d{CFj5%o&%v7wgB8ouUvlTepnfNNj71KNNXR>8To8l-mGf?g zY=~ei@}V$K!g?4^N)&sh<^scej&B&+BmyI^C&F`I^1uX{>c^{LnlQ%LA{rPe1rt;h zcC4Eaj1G_RZCjc(o~h!2^glf=wW6ahvD|)E{&?KF!oFd433h(VEIltJl})L=sXDryqoBeUQA($YDM7iCr_d z6`F?5SjFkXoA$ww-({{716eSp%5nNx_g3h?(8R3DbRI?nb{S>7p@9*t=8>ygW?+=u z{+S}Ig2^?9_SySyfl0OMTj4F=VccZ=>GfkbV7Sm#hk3Otj7hhyXAmjN(oEHFl2!~>JM0&Rs6;xM^y{LVRY z7wlcI#-i2-CY>4wdJ{xp(vGxj)#Jx7c@W+8WAq!( z!@yp{73o9|q3`;R3s08yK(|UD^$8aN=-yV4N|q`JJ#hj~@s68e(2_#8?*3UAeBCy| za9}MA^AU-T?hAxb@yzW(w1;4*B)Xb;hc^th9G##c zFv*+qmK}aDWW%&Csht;#ZyR52oeMCqX18#I$R+4{o+C>X7YVz-+)rflGA-7!{dsrig2X^c4(3G!=zlY!rTk z;j0Sh_f}K{oXP;5`Y`dY3_)P?_GIFeRVnDSRH>+$?1Tzy&%UbHSUxt9D^N5w7R~8h!dA{!) zS0LzlH>kadaR=R_$pzof>Ozvr0Cje}96T2$wT)%rfY<320v~QgKnbza;ZwI>LMm%7 zuk$h)$R0hv=cGLiWR1~%+90_dlxyx$+@O*L)#E2x+0`$BW>R|79g+|5(&X!G?B%ym zW=wxxX6+_;WpAos+wc(Dq;_9lXW0i`DOHoJPXM$Vca5FBw+5;vdnF&=+6FDnx5*wk zO+i)frY{L^C%|y<`7OJ&OJJny(;jx}4VZSU73tXL17_Ruv~GF$gJG{QY5w;%aJJjA zYv0K;kQeiS%&2EISSrRPNe-z)(NzP-Z0tNUzq?vL!PW>&B|`4UZIJ-OqvA1QTw6hB z-?W~kiUX+0Zb@f&5eKT2%|^y=Z-d&sT-~1Y%RwX5%CVj=0bbwR;}Uyw1r%}JG*0K+ z0%cD9lMHMV(8#}rU(oRZHoxq+^rzE+wi(6I^=|=WA-dto+81D>mzQxL zX#o@uOskbt85g%_Zh-ZVotPk8H!fT+1Dt|Vt;RO_RJ*9nM z#0TYN%XpQf>JHKroG6C*89zC!wH$k|kA&?4pt z<~4#A^Frxxft%1*W7x~;AP;S3$^}P*?n94g2+gJFlh745xan(r6SM_w+uoFz0fi4w zlIQfsLPl5jq38!$&>B}1yYu!f7@yd)hRfnEOpqP$VU{vX*M|Ey4j6D!l zu)oL+V^i-0cpmG)sLzoG&ihu-lo;$4%Q6Es!GWGL7tTPTN8#J8(|e$(fJorhx*%xW zxvlpjX9#xRa#7#1TNB0^re0_sA%p(HOB4@_yrDFcYRN6>z!Fg>Kw3o31`OSvMF z0mb#bTq~RgjTKhB-lHB+V4dQ_&&Laer2=Q98784&%Dk+u;y85I`+|B@Bs7F_IKAS2 z1w%$3HXhxO0^PKQw3w&O30> z@$^p8_zrGaE%&#H7=cUV!?6d0Uf`DbhVdguHF#KFmlF$-2WK1m7kLR};LFYtZ2{N7 z{Q^_M^cx{?%MQKx&i*jCUy0snc-{eAXog(xdY=Njp50V$>lwiOR&?9F`vDmLbNa>u z#Nce*xV7c63OL)^IND+7y@PiAtyPA8NOzw#W*^#kr;c4AM$k&yzhu;l&ByT=a9XS?-0 zUcUlU;TPr;0UyA4)u*pK*gZv`<05Bz>J2ctr+4eS2q)+fu&?i$2o0NuspoxA{Wy#up6Wn{^<1tEMM?n`^*&# z#w{eYWTDJpx_@=Lu}UwP@n`j3IUo*}&qG)?O0j}n*W2gnWLR8{pPQz?j@8duLB1}o z#o)5cHDBjsDL4&l1*Q~j!QM?T4+L)nS4Dlt4FMfsfAh?a+qIaSEOH*bx{cs8=p;*4 zdKGLhD4pB0jS6hfobev(atHeen}bHrK4I(A)<(6v0n5qD=P)lX7Bfp8`Z$Hb=v0)Njq32OGotQ8(?v7 z)3=W!2b}t!_7@pdf>qkag2HcISloPJH@bTXocc(HLYYOu!N}4(vyl-jGa2uYVENhh zjOBX^*+MY?`a0M`kQZCGxJsqk1~C7g%&gk90W9ivO?``R#NMa<`1~(`Ss;m2rRFCv zJ*SfOQl%IyY}xe$X|Om2?a4^puV5~!>C&z_1cohSyT0vV0@J44#L2B)U@G#?UqyHY z7&i&|)=?yZ1*!L0#ZQ@FT~v%fbWOkfiC z1=eL>2jhl}e7!hQuzWVf#F{LC<&li3O}Dpz8LyR(aHSEL7^YK}f3(8LPC)9_x4k#8 z{IE~%@GvLX?G9@@@?9DncdY1`oxB59dm6l%4c>#~nx9cxvw!to>vKR{R+c zeKW?eJRKdb&?gQq_lQPDI^DtjY~begv)bT(Ml3$7u^oHo&*INBg=4qwh@Cm(2p$&a zkxUjpxXNUk*Y6Ag536;$V-IV=cV%wzKvNI6pWeiJX+R%bqWgs2x~#(dyeH9Q^EoUZ zQ4ZbTa07hVa$@u8E#X-Bnu6HuF7SDF@0gSSrURkA8jO8iQb(_{51&dn$ ztE`OL5Mg~xIb`K7FnU4B5;c$jX4?-gFZWRgExqQz{VXrQ@<5QRQrRjn)uxzY*%k+P zUtLfUP1%5*Uo=#F^xi{GQT{OYWbF2f2#udyQaS92wFlD(>+hPkrCp1*+A(Y%zKBT+d1kehlGBuh3$c>;M zY8tZwU76#ZdZ#2H=6Tvw(SAXwA0(qqedq@bCN@u!ypKcU3YRyj)RoY}Xn2G|S_cXa z9v_fZDuguiu#{~#WTEJxE9V(h1Fw#aPG-c1Lz!g3OFcnXD728={wjVIG}3u@S9p*? zt?uE8>LCuuE4F>fvnC5(`+b!>oFxYhr>hQD6F-8EC_(%9;?FQ3E?*fwwhV^OJyoAk z*$6$xr29@h-3~)45xVsG}+g?`fB>V3iYppTyK;zcw91I8yw z+HZA2PjDZlb9WvLn4~K-XUIW2>x=2L#Us$m6I*Tla0aTo56_(anh!allb6?Xu7cVC zbU=&0m!E7z_T+WA~OjTD)4uH=$c`RAmyWK}XTo_ZutBpig$BEH!a23`%g1 zTCCj#!veQfBy4yA{S1{9hef2Jr!92q@=P^!G3@zt&|ece?&VyVJRbo)0bhD9DdfPQ z*7V+W@mM`9!r>Ecr2^folCO)>rJ>)t@osv-3K+h(Yt80JeHfkIv*xv50}Oo&6%LvV zg&~0hTD~u2pf6Ctz$AMmbbB80U9V*cUG#B2;|*faJ^Fo&S9Lq|4pvTdBy54+;Flvl z%txS4IWK!A*b7E#$m!l1kiyWXTc0-h*TJxHdT4#P9(3Q#o>7xs2^~a@Uz!7IpqrwT z-ph11^viB?E$ADA3KcG%UK%54k0|@N{GBNDb1N0yGg$$>{Jw^KAC^N`5lz?Q+gKeS zRvUSks}y?Q6to`p)PzyjBdW$E>tS@|p={N}aTr&svf*c!g6^q(j)!jUgqGGjkCKP5 z^`I{qC$=<%&UOz&LvCs4y3e*%kCzwPI2(u_DHcFio|Vv{-Qv*mtl!G;)Mpskd%=Vz zCJKhud{(fp%!Cn%0`|AkW-v6d?S|X?HPGE}8Mawy7J9mTHT?syIwv9jA=h&p?ZulTIo=oXtDC)jtnSwblvN!#tMy= zG*Uf*Zcs0CRnXIw1)B4&Ob(ImgM1bCiWnDNsLa2@C1^Vf&Eyml4Zdd3+*#rGmfjn> zlxB|JXk>#3&`psOVntFKoO4CDNPOJ8IRT zN>p@k=WH!>o-+7&*g_kgpAB2P^#cPO{_r7+f&MBKMvd0+RZT$M{rn!1j(bp{(f`1$ zsSP^EoJv18ZGs-%ao?KH=V4HVbr)EcFPKYkQDgO!S2YnRnX~S`G z5&~YPDsC0(=dgR08^!uP*!|(8dcd?fcHi6esl|Da8EnbxA89

d4k9DT7a4U>q!G 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 z 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

2($%!FN>=aUCZRA8WuBvHE?8 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

7JBcQYCVSR{O^E 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 _A{Ri2qv7HHpBONhwuj$*hv=V_)B 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 z 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%0Dj6<%pbKk@D1+7uTs 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 RT?PgZ8ho;Pe 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 jb1jAtF&G!lyU~&FLw_;fb zLD{8KSf;dxpfBT*2z9*-GnIMnJUyjYqT^R~%JeNvX-Rpv{(UN1qhtD!;y37=s|=23wIyiElcIbI ztl^c|&Y=ry4g}|GZ`sceVhF~{>N8qfy9thaQKJm&46v~Gq|Wm90!&rEQ%6xJ2quS} z;;%0a5j6K7yJrQOLHD@y{-4_=pm(TA$>r>0NK5@f#$M+lXy2;tn|fLY%lzkaqONVi z^0p=W70(HR!pm@9JmSiRFaLeT_#|v&Kf^t&qU~Vef>mj5Km$R2^JYoSS%To@s;+;2av+^KoREpsZi>G)l39oTp|<=kl}(%G~Y!j@=hw zsf}Zqj)o1U{tkWr$YO)bSJ=m${sEOzyej zALcMs@g|^nc$i>k;JlHi>kTXK+o!^J6yw-ZZiZ~5FHDB|eS4&R1eOvG2G3==!)W^z zBg$nyn97fsx6Hjw(93T6E@jz=g_56#JY?lyGVGKlz0fesnBSF=Fx7;~W7_6v;csA` z%e(&r_b-C+*7GUjx9RYa_I4)Ae-vmCkDepz-oos|>js7+YcRv|VrhN35GPg_?FXAT zd|b@Iyl~A7qJlm?4cqPjU5oc_hu}q+$k1bREy~*9R(I}$$`QCyrBT1*-e-boyzQg7 zYa79MWlLe!?K*-opZdp;uLWyEzq$&1|Gy)u zXnso>CAh8?YFVtym5X)CG$iKkCHUK8e1tnRXF|rZ^22sAecGaZ=0+xhAW>= ziQW0bg69q?{Ir{dq(R@~VZW-2c2LC_U2$_>XOcw%{Z@ zUiX=x2yyZ#X^g%ulUF37uVbg>iT3zoM@Y_l z%Fp#&@(5b3hnKd#v?rKd?$?VXc#!n|15xx}Bd|l!KvF9;hoBK?D%SVg=#3+id>y-d zaPm$|=!=I;*q1*Ys(Q#8XO9o6&3fo!vYMgKW03}u-P|!n<#-dx@c7EBnM5`GB5rb( z*;)jL8k_iq^b=sw;HioojV{b}PJ4S<4UjBuR~_DEia_r$qt>$}FM@t^uG~+a$Jlw% zQu*E7Ns?}JckN>LL6Yu*5>LpP7X+2UtL)Dqi@j~#=E1u-Fnhvn(84B;r7Rc6Xe*`C!7? zcoWVhR|vHvxa06|2aVpV#n2%j_U%W@64u=AdE~W!8_EB`GQs41I*#7YY%iM4!C9_A z@?POZY+#Z(Q_QiEAMxu#qB=3;R-r}G#Bw) zhNSD#x!{;hB`Gtz7A{;|gn|=3QlI2_Hfj1wWNuG$oaQflHI2Tgg zHSBr{dd{g2N#D6j&=h~N>XUh(J}&;C5DpNzKSc=VT~i5N*d^FtZu-D`TEQ?p3= z;oH8^uTru4h=O~#MjaM~{b%_hVk3|ICwJVsYESa+KH%r|C>3YkYuhbM_TegbhtyQJ zDlGTxe(b2U;URsRR#!iELA6WKC3my)7~G{6{K-QMr^`2{1B_YMzSTwY%SmH1T)gk0VM=bOj zO6&-hk@&15_MW(+#;bV!>PCLP-}S6gw;ks`A6C(FK83@+SrXoBdr6KCN4NJedL%{v zmuQxn1`Jr(@^`$sgmu@49=`K3$KH3v7UoKuNt#=^(hg&yB&ARI-_6&CxX#k%*W+SK zQU(voohkf4a=!kYy6f=>&Xx-85^e&5=8I|eA$3I@%dna}z4-u1U-X1Qt>rB)eLK>a z|7?V0{1wkGl6@biGhVQdeLoIaYn$eU`S`Fg|Exj|FDEXQ^IS}rn!uTJ!I4?HzCh0Y-zOr?jr7mKxrq_cB!(o^WOOjB%^$3>sc>K4` z?g7EXyqFzPYD-f8y&0F9io?Ysc?rKTA?PmiylP<*kISDt^~{^ zrMGVcE6NOt4JTg1G}9x~ZwWe3qWax#He(Zv`|Xl$@D+oJ&L`<2T3IB+p2|VZGG~}9 zV!rk&%$wvq`rns~ojVEU>lcEHhM@XUGVyIdV=1|;6N#Bq{JvWFPRgjb%2YEIWT*8V?W z(EieLVGRi*zt{Svja3MW1^FqmI2p19E}r+jDFT^SlL;=HEx6ju8S|-eJHc@2;Z$qv zM;x`gy98CrI6WNmIj=tw@>F~O)EV%>tl#OHAO<;tTlg4nQ+ottxt?LVz*qyTcSo`^ zpT8v;u5PJYqlSRqXc9?iEwr@bb{xE>8PlI9Tpj$e9F^b&J1$;-v{} zE&mbD`ePg>t20`ST})x^Qv7Y#US}B9e{%ZWIUa2OYVaUMo$-Miawkkl z&8lDA;KXJfzRa194_KX@^PGMD7OaHwvPzb0!pVg}v6>M#$SjP}b2hAk08c=$zlpz> zuZvxl!0x>k{iz@92%0*x&)T^{1e4^hKCb?EICGC>@d~ASAAL8R zkdzN>qctNqJeS7Q)S98yu8aw+<| zJxSZ2M+P6T!xhWct=zXZxG~ae_qJIMSc)+0Wp!>NDYg;J+Ak_d#+wjz>BLTgNh;^r zlj#MLL7n$nkIX~(ssHNrwtoR6(_y{YFg|+dt(f1-_53SIwHABol6HGW7N%P=NUnm7BauCccTq^rnoQe zre`K;Fq`4~SS}2+4xPNgUwvehdkE^*^_{MJc0pT& zm9U(kB0=r0mi{%qo21#+L(fXVh*frN3u?0i z{zUvei%StSS6*+Sf$6Rj!Uw_U+t>mzsJCUa#oYdxBIy6s-u_s zg8_O>c*^wni(uuOsIWd|4krir7K1OSLxD2?^I)jJ@1ALwl(&k&a$4qjqxYLO@|Mm~ z@Rlh2-tL=mC|n==dq?#JgXUo7(AKD5t-jF5du)Hvjb0emqh_ln|AIabo|`L8S|nBI z@6%F^Lg*zboZac|@!zJnxXcZY>^OaZzB9#xVB0SImN&kXV0*-Kx<5G`SA{(;Mdl4d z?I*7@HS7K)vk$*eVWvGv*|p$5TjUPQf9!AEe!mSt8D(Os8SQ9VvPzmV2b!pAQZ3HLJI)CA_RU&BUeH&Bxdw}#m z5&Ef(4(2{bUD}%ZjbyR9|Mr9NB*B!GWs%5gMlkQb*CE-{Oma&3GhbHVAZWe{sxMSb zVUwe^j!lIUE;Wsq6pzl5^ygE|15fUSX=aB3xoeCh_lj-VqeOFpYoKHMkAi8KV=2A9 z)|I*8?U%UTUGT!mxi`M5Quff6Z1veOILVV08AiPzh7%{#X>5+}gN~Y*swTP#g5t_??$P94f=W|JJ*!SUFhuMpU*J7v0lk9N$xL*}5Y%_@4&BT=sF(Z<+Ru^YU*cMb`u8 zl!ZII6E}QkbIT^GjRdB(g}7eaN5e!WmTO?XbLbsa?SJ=fySoqbGo>N1T zG}>7>ZQKD(ZShtG0%^GBIh!QMVhxKgFZW%pZNecXO<^6kJp?aZm(29rI+)is`}zER z2aHR*vbbt2L6=kRF}4(MobOLK5|McX-?sNgbUtt(s1r1PQC(&@(Rr_Rhe{WAb^oFA z(k+sd=*E$gFP_0j9lNXlB0sht?9G*Q7{*~PZniVcLy#T$tuep82^UvB{i^=Q4t3l< z`oEVnaj7QlJA1hX$=TE6!6GRDQ#FTdOpcktsL@3ZajqJYzSQf;Bk^^tq~D{N>f8ad z$3!_YJS#|+Q@--YD*|vhHb&m0$pz*X_4*m-luAk?t{bWo7o~HB`Mu{ zqGc8*Dcj#=JavMR%=_0pDj(vcp3-I}E)!TgbYaiJ!w0yS2);l6sE`b~FO>uI>qxG& zgM-Q=;shAAdQK^L01jxCXtO-~tKgmc5xiwXJ5gPgEBldmq(HB55zH7jX| zHiIv>VW{XY0+us|y;`5>lT@CiciNOnm|VIdC$&R?peVoH?yaN=gF@QnCw_16Z}(>D z77J^VL9;Hi;Ee~d`LLnF$nA3kLv~HnN#PA%aAw#Q7HmY)KOWQFIaZ2YTuH_~4F^cB zEwA&>?207mY7d%S?=gk3Wi5;>a)Bxpj`)$jWr9QhppR!71C;N+%aC2VfXhpwp^j{h zB=dNWK+8W*==^6XbeH=*ELN<4V2aLyg>^Rrj-(Q-EmFGXA~^)@R{YhMoA%;NeihmL z&H|iy+2T1oiH-fXzi@Sw~F2+XE_6?o_U5~mNvib)^NAt=IbS#t5-Buho9j$KN{#(AnLw(~L|8GVd2KfDgY ziqg$7{Gj5A>TJ+;`E^ zlb~I{w?qGw3`ya<_fV6w3?@<}0yVC>LU)#m^1Yr=lK7Zez(x1Nl)1HrqB4pWuLlT`~6~SI$7A@Wp%fKR02g zZtk)6r5yxK+(io)_D=+ZtHUg~ox?WS#!Y9(H<45eP5w9TE4cF3;e6k*P?Bpx!%21X z5_Wuiafzqt1uj+oVhGD7}+xqFFnqM4=IvZbuwVqomO=t|HNe2>?BC$W$VC(b5BXu(7qe7r-ul} zbHdyF zsEqsO0k7W3Di>Bdkjz@0od3D|;S$3)h6a}dI94&+RsW9yb5wD&iz*^ewUrX7tr>tL zmv~XzDwJdh`oWmr`UQ*DY=0@9sKVKt?p;$&79>wlO!sGS$NTQ<@r3!Y*-9y^f{oYhuk2sw$GL#t&z3bVk$lI7iVs%Vz)A&U*l?;zWnU~W79BnNbKGqwrVc)xF)2UCOiy~(<`{YW@{48 z(3F-}_1%W9s%Q4%=1e4Gi^R^*cmLtQv_fh0iCL2Bd(Y9)SrgYk%;xl0xA_V(57a<_g!Q1;W`wOq8@W_ z^Aq_Pw;i||*?LL#yd_C*e^tsRiw?RM@3$Xr@P+Iz zO=gs*ayWWf(I$$zj4jW`e%!R7;E2S}nlH!du>TkTQi{iG=o!;GaHPA3q%!Q78}%QA z6@OU{tJ6&w6U!0o=zb5zx6UXvN%3Ks*o{LW>Yg~u-s)n*D@#&ue>kR+sYq^Rii&rY z)P}X5$ye7nE|a{MObmU#nc@1_nkB1>2WEc=HErx=z-ebi3)2=p9H@@o;@}#FJ%5=p z0<)3MQ71u}6~owloybk@ zeYmuwcc^T)9Z54{`e5p~7BrBTjhj>CHoS~(KrgZ#yCgdQ^zYbDQctF?2H9*SC_(GJ z*X$QbzT(7-l>zLynk4vpmi`;b6bjt-kP7FAe>p3Kxy$mzl@iM)4H^I#9 zR!(zf5t1(VrFKm6%MD&oHj<=PKsNsw+FmUx!7dv4Wm+vBgXez+v?Lsa^-zn2w7c4v zdd+%Mi7yk$u%<04F6~RwyjL-`%}55)aoqjYoFPG5r0KZT(gp^vKP+##%n6IO7bOHG zFTmQ(FM63j<#8(Zl&a{qC|oul`_D-K70F(7jYBi(0YPb)mpd4th(q%+pUocU;&jTd zyR?+IB#mfh|MVbnWfRg+r*D&G1sNXY-fnOzfJ zfA%_I@r$V>&C*!R{IB$O(r;PJsrx5%=e0GiQ&@UA&!~~qsAdKSDm|3$3D?h!^x4Cc2d-J9C0Siz%5e#H%Ysqo4@JF z0qlJ>oSMARr_IU7UN-Th;>4LX+XkPXB#XrGVd2y(nCcN4W_ewMWH~&RGnH`*@-9Ba zJzKM|eOKYrvy>{x`1JF#LsSjHqfT=rnFuE6Q?njV1%4xW4P3Pfk(p%vG@9gncZ{HF zsDDV}=EEL#8McT!>^L(qu5$74249St_Na!TzRiK;5`GA)ryTr z#99HT1V?AflVCz3DF0W@B-H=l)LnS-p5&%KUv_ozH;(v5zLhq!gX;+=iWZ+ya9;0a zsJi?{|I&SP-PGGd(zUBKxfeN*j69X! zK9Y1sMVq>PTwyj%j&dwviKMF}Z)CW;lZ^jTMp|MuVOj3>$=wmwIB2YYey&vvmrUYD z=WNYzW>6sP-5pn)`gn?Y)5F);Goy9;)Bm57ZoRbV-R_B%1E2QG>a^fA3?@|G3Es%7 z7efhcBQO$pZ0An1O*ppqtLUNGO}KvPnv_D_|5oQiy#YOc=$vxBX7c=JwU!+*Kb?v2H`Ub*#l`JNeUO$eC`gD{wr|MeeF z>G|{C}U~wNu*Z<|E zeg1+iG;&8MKQ_axUSxzUnITeZwczl8dy!z-ea^_j8o)v z@WW0&l5VS2>gYZroOl1vn2t#R2R=nI85V4X{(*)X&IlKh=4sy^IiX-&Zrmhp(5*z$ zI_^56*JucnJj-vtcG_+1pSF~Z`In9P>#rWy@Wh$fL4lM5-X!I$Jk?WmgAZRU33Bf` zyK%oI@qIT1XWj%@Sx~NHiyxoHuAEqyQOo{pw@l)Ie)&DFSC?@5YZ zX-m-89a7x9tU$6{*uBcHvmJ(G*S@3|}Jy%V4TZ$|ZfI4rlu9-nH1<;(Wl@ z%@wu{BqgfQ_;q*>EVbRA3(L?YxlMYSmCMhPTT-M^I zV>r9%V${_t3M?L*(UbD>fRWQnjzZ101TC%3Yw6=pAl_i$k?n#V7HcIxeLUAk(tL`R zJt^Bl(2N(ch<#omn7ZEF`1URw=UI1^3h$&4440ooy}9!gXYc&5=~8KfrRbdHGuTIR zEsYkQOvoh}N`=~ARJ%gw6XWE&Q`>Rswc+$j2QwI+1fhAjnIJPb*$i%yTLviwNuQ47fy`JE*1 z>)j;BWBRQrPSsIVKB+=_g=E5(7NTD8P- zUB8dZUa23KY@2Xo?VZY*kWO4T)ZBbDa~NkMKL;h85F)u;-j@GfdQ7q=l$F>J&q+#s znA|3nTevP?@ZICE7fBHcjuqY{hckb>DV3+U;JPtSk;|$Ic5eD-W*YYtmeRC$=zWyH zS@)kW@J=(qGQb_W9Oe#Fjv4zOv>bpjlbN4FBj;i1Tl{{rUUM8D7@*&I*OjFG81yE_ zBZuI!lH|HDjALtTby;wf=hJ`a;v;D;+*0 z-Pv`)@dj^P{%|7RsxyzIUG$e$9NI_H1|FHrpu3Hg{uui$(+o?5FJwMlsDat)Z3<6( zMo2cRZ%Rti`*1GjzUY8j7EJoH$|iv&F7})*;vC4qx#h{v_dm+vL|VNmjlBlW&t-$; zsT6{;_1jtvzb0gga5MfHg5jWY@RM_=aV_*Z{b8y+$vy0NV`Nm7q$@nju#HC(J6or>TJiVeBu`YlLCH~) z<(=-pj+_vZyUb9G{st|s7Z*YF7Il(4C#5`#P78)l%yE~q)DVo7ZC>HVa<~?^wV`;C zm7pK(3Ar-#9E!${$zL}UBkAvae(|+u4lMjV4}JHfU^kt2$kPK2;374`zNOuPq^tjQ z-Doin=LA+Oot%>hrr-L`3~sMU%6w(vmhlpplXiQN)>s6ibT;!ZZ!2x&^Z`3#-(iy0 zsEOZH$%UW<>$jHm9VMxomGA0$Ws}TpYnfKZ&%(0t;qALj3{7?=inNywZAJam&zu*xokiNK^J12SwPo2X|ZIRQZ3ETc5Syh%<-h zX~rR#(yVRg=h20^A0C~L1RmnVfbu?`bR~>BK6Lqb*B0nYt#CUR=8jWk5k}{C*u$jV zw16h77%ctH-}>`U0?D%X`)k_rA)E*vm~^>1N7DAFM|d#05VXl}ofn#yU>M1;nK3^M zoVpUA@zep!_H^?!N&3Lty=(R^<-XWMCYE}uH(~yg;)vfzS@7^UlrPFAf~&E)h29b8 zpmwvU9P4pwk|{b@nck2I+fp8MIXszz_A3^b6Kia+rD@=n0cRdbGt=PP&eBOx-S$Se zF~s2FQNtrX=EWFska?I(j0={W)O);Ss3gsuS8p~oOp(myXa9!nJdLBgdm_(|jpF3C z1PA9z36ilt|tifCb0273$;& z^a!_|4oeHd<+SMU4Q^qWX?5f5@B=P_`fks)nf`wy{g9T(_4|o9w6O41?(ub8mkpBg zY0|^h0)4JmOpdrzT~*Oi`5eCwa|+Z1I^fC+6aRt>-Z;AIaYOabO>DekaCv=U4-BL~ zq8o3o#Lh?-X{qHu*seCGca}qdw~ zPUy)3|FLy~S&Dz!G1G-)Y5U|#H`2PnRp;z|Res^*^tMAzKJ3u#;GnUbq6X702Jbpc ztx3lCEx}XcY%r^5G_6@;ixXQt{kp#?0D0-bL(wEblIQR%)U_cKko2vK32 zx>hBBYMVX`zk8Z-tLH9BUrpmEvu8KS?*1(0V9p1eI3j%es89s-l^zqnt@Q$@gnG-D z@fohplrrvO=);+Jt<67DHh9B3O6DTXG|q00^rm6^2BVJ+&Kh1F!o?F!_pWmnV2|OZ znUqWURmm~p<-@lH*HWbgaXZn|aw zld3%hvoA-mc0@Cg?Yt25x;MSDHJ^v3{ZG9wO&uY*TK0Yp&HRk@Ot%tl9CX8>S)ncDeo4adp2n?5pf=D2<)Nb7-<9Z5^rir$zEA$ibp~pg38g?t2SNc=lDxc5EWqBO_@dFN8pklMPGZH%^lMhrajh$tTcZ z@?Z1geX%fhA$|D~gAK`*8tI+$XM_8Kepi2%(}2sd;E3_<&M15LH0IE=N}>KJDkfOF4}U%RQAMbN=Bdfnz$T#T!T$rH|iF1@n3tnbfZ zR(Bis;n`nU^7Y&GAXihE$jtv{>3sti&WaWk8+H&39ZpAJs|nN(mj-RS>_E~|j4!=7 zS&xg?cUdIfG=ydPU3%hIOxR;}Z91fBLf9mDw}BwLqc^f}&ml16LnDZ6+tWV$fE@)QUonPQ!e9d74@ zZZGEIg=4}5ox5q+t8E;ZQWH2Z*%?Z*9{zm6sY8@xna#C-Zf_1LgP}(R1(`6jXJ@X) zS_7^YJKP_6;!m=wJ8>Sk{s*RQU%SNbCP<#`S6Zjju8~|C%*Ut)T_M3|&^lLX0SeCg zM=I?W#PK@|IdoDb8+^kYe4hFOy3@m9u{js!YMT4(|G1I#IUPxTjClmN>~R&#-WZbe z>@|gXr3sun`$_6zSryLb+Lrl7o+2nCAJWF1t4Nx%o-Y(I#wEdF=fAf;l8iGZ-ur^i zV`jYP*GERO(5oCG&**)VWV&pAVPu6D#8_1=l>Qr7vD6GhSMRo~C4SuSzck%j zCd?$0iF%s9moaoIf2l2dwc(Shw`jI+mnGSKew}KTZNL>(>FeEd?KpkE+HYaYev*5z z{JeYPS(4=(^?B>VdV=npleE|T1Cp7h_m!BF6!gjKSC{KoU^5rL#@(eXB|#VJ#9}mHO6M)AI5=4a|oJ-)qYL$KZT%IM+FWESyM)5-9PSz=h8fLt2G? z*k81z;N2H>99OUy&tS?SSx8UE<2S09&i@W;h_oy;*@6|iE|Ca;mlh->_Q zJ5`g1u*O-NZgX`R6fY%i8Zh(5w&yg**nB*3g!bK=$0h6}Rp55X%LYbRFHlrVjC}+P zrMvsTa5BNFr}*_l34J8xaIEHn{~TsAU#R@@Jq%~sMj5hW{0N%W6&Xb`9vAx}-l*+8 z0a<&Ws4+2`LIZEKx?B6nWEGT%}6<$zDvMRg@B z!(&Lg-AffxzF{O~bz8jkU^*5a)f}BO*qE=W$mui2&tO@@WD8&AADnx&*~ZcDDD;L= zwE}})!*FDx>2C!ql1k(8#?vwsYO=!$=kknk80S8pZ5+W#pZ|gba~=>BpOhcrO>sCE ze$F7<%?-vjJ8~!{KEc`b-&WeDi#T)R(k!i|5_C?UDc;7N1*1udrsFv(xF};<67B8| z)h{WsYKsk+{m72`^(PlWDW~f=Q2Y#=_@zYZIS)eJ{lY6-?$F^xm$340fhJ5DRkjqZ ze1M&Mdg%V@7L$~ry}ohJ8VE+`l!0cuY^a=)(JNGGB3WbKrCg}5hBnobl}pF;u-#*v z5|R>5GHbfr(WIq;Sqhh@{?P~6kyq{Gntlprw*C_MW?PN5E?Xot3N>NXHv(N}}z>vn1WqcNMRa+XxDF{JnWBdV?409qA>EaY*ypf)HOS$?z$npDF1a z$>VkXj$BnS$$r&wGwlx(l0UGS#yMm=!TxkJ)8&L}k~*HAO8+KiqnDnIdvi@ee|rs2 zyUPiz>!H5*c3FvJpgks-XcG!mw-is@US=Y=G}McwNkd>@D}K4Sy7;qi8ndV|>PN zYQt3@94t&vQxp6}(nq?foHwq#WrN84Q~JV)^l(^Pb@b_cdi$L_qRE=Te#Z~gM)@O6?Is@^?0)K1Xd zw&SLCvA|^$!#6L&L`mwW>gb@yrUZ>jWTyJAHyb>m`L^D$8|O4-6jVmulN7O!y9F1E zND-m+<|vgNB=djTDOwhsB-4d!74Pp}#;$;o6AZiNu$vmr-mZF*q_T?srZ(+@u^EBL zp!Wx1{M2@}-VaK+@{_?_XypJd+I0MN-+dC7d%m`=SIXkNUqZrZ<~Wj(&HHZ1zd4d~ z^U9r3wi~!QoR{3U=^Qq9yB(yL7sGZ!Cil|Tzd*(wGh#Yb083Uive^YBN$2opYuLwH zNDggt5o|Xld3N%j{FiwNR~qeJJkHM{w>C9L_;JUP%=5-XzUyC-*VR^VMZlb-|C`Wv zcSseNdDB%*Yz#@Z1A4hE=4QC;e_!!hNdWc)>>S;(`ytN$bs9f9mq&7|#q8hK*9FTV zEKdIoH;@!RvP`5$1J~S7J?MQ*V#i#0d5raLSP#-j+xs&VXSO{|-+y@oXWU}cE<0zE ztijqZ2lFB@Mu1CF>x>9VUGw_N)*y*pLhlLV&IFh^ly-k-fE}*q+Pu*^vqUhZtzIV& z&66}o7bW`~Qek=gW?E3O8&0#tMkp}IlJvQSd+v`r5)5W}@1o0va9A(l(#ZxD=-j^J zeZ!Xb(Dz+ke$&xjf<_&UwJx}k)B$U9>}NSnJQWV&dE|=Z{ZUa{@FwX>{3{-QYloG~ zi_P%Rk7O%+Pj}(9GeK)9++*aTgH!LnHJuHx$EkJ7OWPgtB#TDoOt6eMuGzEl+}WH; zGV%U&Q0csb<8Cu&75!_V@=f<#mvaF2-u`KlrelSrPYbq`yVGIsc*?KsZwv{VHlqh8 zJ*8n-SaW=6;ta`lJH208=MGM$Bs}WeEDZ~7{JNPBRuvMY(F7FF!|M@R5?ci{fsQ z`}LRh_4ODibofjs*T6?IP(@wOr0pT7ch5Qvya>ZFRR8_lqY^sYvJCUiKPFkWHkc9r ze@@mGO9dV}I_OGFj)=>BgX=WT*Ha!fVdiS{UzM--aOTjSuU9l`NRCZhkLwQwU{~?w z_VDAzxEw$KEn4I>O#SVRj!vy4sj%Np=5hlr6w%1YX57HJhb-qlt5@P!&hB|5d1k0L z{?&2PdI)Fd>Y2-gJ+Nrb@BXozBwT3m%(1wniYwG$bw<{Yux$ApCAV!Mx%N3~^z`(R zRQG}VB-0Qk9KA?W^QhwXuT z`dFW3ndBBIOL7f8InaA;2`8J?ohvRo;0%^m=IO+clnJSf?`I=PO0n)(vYQ%KciSBr zcVNQ*S1=eZ;AHv3yps714&8vKB7QmSw~bfq)s?^*`^8E5G7;!HwLP$7)Dg1cZB9P$$!pu}E)*XX*e9+KpKi{p}?giJ4#5m+q0Y53_FYS4coh zJL`qNiKZCcn44R)TMcJ!2XgGKi^0Xj-TW8Dtsr)rcx>hc2ON0u>f~FRG+c@(<8G9> zOLE)4XxElbCt0|7LaMo`INO=V`_s)7r|tF^-Wrf0nYpYLKAUwy+uc{c-h}hva<)i; zL`ezBL&tla=6M%EGvBGcM!ODqLE-fct#(i)?8SfMU+)KbVsbomXYg=x?Dw?Y8rD&&~uu+?BeQM`s2| z%2?{Lf=nwM798?jqo>0@<3o2(7`bBJcHIl1D^Ucc>)X&nN&>W5mF*Iw93dE7b#JWf zn;>}Fvb*bB0ekaPex8|qfprCZg04qbaOG5Y>h?i`l<62cU!JP5bWBz-W5giI`X@;Gi`Wnf-ikW{4kC!9-TR{eFnOBDJ!@Mb-}{3 zo#&REJYnc$&M&ri+ezlMGwwk&fh3bLiP$pOaI2%71-=?=CS`we!&4)+x)OUkZXlxm*@4^SELAw+~%(qZgarUt=*26 z>z_%6q&Ghe^F^`I{rR4WJ}SvAb#*8xEeh)zqdLOkQgGn+9}Ys5`a^Rwa;1~JCW4hd4UVfsU$bs=l{O) z*^oSHx3tqAd?#6GHz$AeDS=g#YFa8@#X6>(syyzE`Ou?uGj|)2)Znr6SJ|UT{stRo zk5kDc+qY@PSmHmNYj8Q`@HL&F>RssYHQ*;HzqqeG-d6@|68$FphY4stW*sejUmK@s z66pFz1ff|(T;S~WK3ta?PQI}-mZXcH?Am7VfMgifu$X!;hRfV~eiDZTNEWYh9xLa~ zB-i~#hgbWlB+u6yH{@;$lB_7-FB{!TGF)&@%a9eoM*cP*;E5pV63f~>)9Xmi)9-Wx z!3CGHk2&~dbznip(ckjXRs>gcd>WCSh(+O7f9{^xg43>bB8g3ZNv6u#xS7$tB=tZr z-KE+OB#)@Lq^0PMjeNQIGA%xbWXv3XAt-A_QY@d$ACe1zQBHI1;?vi0afI&412IkP zzZj6RCPG6p*qf%v(@x{G*SF}PH%mC$;cKP;@h)_HU>11dK#$Xn9}~`&ZSX~AVhrot zKbSRTpA~7F!D;i8Dl>)G3CeUSpTvYY$$lX6#22YBXno$Um_zvt4mawV+_XuXz zDLJu`15kQwwELXC19TN`Di1Y0L^6t`g)7;$V88gf^UFO?VdVJR=(|o-k|W@+>kR{d zg2MFQZ$|A%X3=er`Dpc^j;84Yb7d33c33pxpf3x~!-#QiAs@*s&D~eKqyRZA7u)0~ zC!l{g{+cI;B$TX}HRzQ#rx(3|kqnfB5{oY>6k`+JWs%%oI`mIR!J>AWXi z*Y_TQffaWJDbppAcl6{2O^l>5cHY_2Mn}-ZYdxL_@4z`GABkhn*sxyth|}jqCz6qV-j;j*ER4xd?<-*4 zMbf=}5NY+7f=j0(9u;rP!(vU9pHh4qd{FF^%@kveQ=NBeGiAj|#wxDO`DHUC4V%ER z;jdmRiQgOR5}djHWd{1~_ei|Ulf)jq z*5K_`qqv~|;_FP*D{OAyKgIU?2+qEAB**E~d6p#`y|?GS?XAr#I5Q?R&hbJCr{6FAx0^N;R=viL z-L2b3P_OMSXl}J5xo?+@aZCRrDKFvJ7S(=|65=(~chQVwKIlX@_OAm0A@av1vaohvnRm&BO*r{*Mp~t^ z9;b}&c$^vvfjOIn!DBxEuu0tU<=Qb9XgZQOex_83r1G7-`kE;ohlCg@PegTb;AYBK zd%s#3w;;RTzNx}>L4on5wsR!cIPdQ5Te(Oc^9x69gNjJ5-G>@p#3S!=_E{N+grl?bf?a-XznO(o@ox*r1bLK}Sl95vOfk z1ENoVhWRTQwR>f4NSbF2B6;=(IL%PmplupO&|G2qArL)6(zzaF@fR(?3SN4XS1FY`%E+#dkvy+=MXA0CBRNBM zZhLv-9rz_U4u4jl;JV`tWtsOEVfZS2;`QHq!RKy>{pEE6YZK3E-;xo)nVI~0Y)K}OAhVx>KX6fV!g1c* z6$V)?wO+Emf+n>hmW8!2l6Q&Uzag#~v!0$?dGMeICr<5t}NYMgQ`GBpRiYTIP)>>;>)8sFz;u`li|0B z(~&VQnorG1){NCWsbe!ZyDyA?O}v6+il))Nr?*0~eW`K$m>P_$mcyM#?=-rok`}u=F&>cJ&zr|_|XHD{gJkIIEP;>~Z_U_*#-N{&*qK7Ha zIkheF+mS0+-I+&r87ASxaRDA_8)J-09go{FM&jC;+C64Zy-n8u$(Es%3->J`TJ4+PYVa}^t@kQ_dzFGDyTBLc z0eviaZ1-mATpYO3#U9z~x`0&&osBq6H+Ui7W6p!Ymk`a;<$JBC2^ z>04WZg0{u*q3@{|M1p368FTFhbD!1u?letmdcZgpM3o`U7aubh9oT?5>U z*gyC!Xk)bR>FasW21Tj-jy5MwVJ5e;OtTIH20eUvU4T9UO9oEP6%^gT$fDx7=b1iO zJafO(iPH-1d2VUlt3yI!(Y*Ad{zpLWS+Vy2rU-x4k5{D|4nfu=JJ;sLT}VpnUc4~n zicvh*FGuCvgDCxkuc^=WV)~?i%drwJF#1|Ie@pf)WD1;!G|_gzVs=xld(9mfT_Km< zJURyH@fG&2MXgvYwe_lmL=;wpa=lSIWB`p3E*W&`EfDcGT=}3aNy73v)~P+=*y?JjQwGy&AYrsVV*`7z1)k zn%#k!M98o8pj{JvgQRf~-J#eq{M9VTtlZ9k`CD(vlfpU}Pac9V)kiTWw0*~}Dkm%~ z*O6!o_QBwRubzeNjZkqqnew$t6)XOGvNOXh4t#C=Rrg+Zz~&dW$JgrpG4}5#hu@Kn z5I($F;_R^?_}wzh^t3Mq3VEDuKaV9GE86?)^a9*`ghRbIcy04!nF(<=wS$?bq0}{Hahg8|Y zUl z%||k8@=z@kp{(O!7>-E-1u>)iOUj8}!*Q?(Rto_6yBOM*aEy zRC5ZlYCLA@HeH2~?qEvk>z9z~A|dH_vjrmD7WTYn3B%fva$ee9NsxG*{qe)7C3s-$ z5F)}5fcXlE4JSlRkbL^~Yo^{obP&AYS`A|v)cqF zaXr~&a^??`EV>FodXAXon3|UsP=lFWhT0dk6*l-MmD6kcIcy5-?0q_rj%nfd=QbY> zg}D5;L;l-^Ao~H=cP`y+nET&T0oTrZkhJ3`j$NXMcYkDlT+$oB%%IDmx#mwW{#_5} zi>*76++MW%M7S+x4F5QG>)1W;pJ*#9-2N87Zf$q`W%V0#g0+er^EDy2QvTGHwn8j_ z78iK=yBA2GKe}Ix#Q{@)@g2VKdl@V4X12T()q}Kolg=owZp;kV6?M60jpbh0|7WfM zGpepD3HBL4wy66F>q81iIw1Se^#v>}Y3gbeX@anjytSV#d%(W_u$4#V1N_{(rSfvm z0RFL-4X*m>gpqR`2dX1ZLa?~MwPe~kK&5S8p)3-VXd38#GF5A!Pos0klZO;d(uJ@|MgZp@xS{Y zrgpqkCf1!W)?U`=x7JC;bsZj8l0t#Md5YIR5aQ6q9{IXi|2tMII=?&X$&HDD9&_}& z*s;}e&6oM}ZY)@R^JEnlu;`>gY;g-eMwg#@c*}kb{@%^H&|n~pffgq=o$OD>Y>}%% zUlX2U?h}6MqNX^eM=^iU+c^b)oOH{Km@Y#3s{28)grGn6EMqZEmGt&WEqxFZgW7 zVrli4IxB4O=C=N=%6kNcp1`WZ(sr1wsy8gy&W?#D+D$Zz$1rBkfIwB-Y51ITv%u-S z8rGf}9f=x;+`ETRv=Swq)< zPV9k@$PdL5oHrn|s-A9-hco21b=bVz5)G+cj}&Vr-LaxhdFAWU9F}gq==|_`7m{gO zSJmE_WAUhv)ZBMB^xE-h@8|3-7$tF{^7UK(kK>0!Fd;lO)oP4MmPcK4S! z0R?-s-*%`6;Li^+IzO&OW4Qi~(=+uv=#ple;l;fLYdYG5eZ0D`!tCq5`O}XeOp5OK z@rnT~zf}t^Jt0WGs?;b*JA+lQEXe1PiPd6$uXh?YVdK?H(?`rSAkXU3V1lPGHtdhw zl1_6LEA=iF7m9OX^C!J+;|~hJvbBiJO$O^_@zM1(tmhDVI5m2k<773aUS)g~C;A5~Hfg<=l$OMT=Q;n9o{T^pm&d5h znh3@peQ>AeW*6qI{Wq;p%Yzjfa~bn=q7Xx7O7)w(hpOk_llRn;;JT$qHwOYB{;Ngy z+At5;KioGO^Ww!u&PW8jTsn)m_1`Xo?{=d{fzq z?*h861sJJe^z8<5ii{>!v+l_{`kx9m#hEj3>3)LT>@DGYkDtb@XOr*#-b=vj9W?S! z*Sw&ZdPaQ6b_?V=EnGb7`5AKO#60&iOv0a)r@q2ebFB2VJ-u-07sTY;@f%pYkHt-g ziTi6InDW*#`23q?h&5E-)%ep1&PFL?JTR>*u8)ODuR78AWUp#T*~E%GpE%ENYNFESlR4+5g2GToXHw znZ`p2zOGFe#p12#>9KK+XI5FP>C>=iWLD|^sVb~`{9{Er`wWz>zeq~44}%2l6J9af zW+2zCkyXm54c;%uyh}MDhcO5DYSAjvV9u5n-Rid+oMzO#Ezi*l%idf6-m8)hAu8JZ zt`%FLI9DoNNs|WJ?uSPBkoH(PBqcm`T_1DAt?wFN*oUS2-rt$t*9r0N3nGt?hhecz z9bJm0HC8pInoC8Wgl%5Kl z--*RlC(;-=6(F6nyZygx2M7xvWAt5d#Gf)pg)>V0F(U~ap3UvUEd9qLR)O7^JN{bc z>RUPt+L4pEI4uFu!=kRzLk(EH)N1(dk`n}T08>D$zpZD{MTkP~t0$Pj-w6rRemfs{ zZuD!_ZbF3f78X74|8_Rq5=z(F(=)98VdcH${iSa|VC_q{N6*Z|(eqiE!iiUshz1`U zKFVvrzg_ws&pr=h>(*`=yXhiGWU=N>6!62ufa6o;v-*f1!VkX5{sw8;5tSsh3lnQ5 z?&=)vhP3p#AGwWcP!J-1#92lIbJPFIimKY-?|u9G0-oK+Tz{q4dSQPdW*f_aPkWZ2 zJaD>EPe2@fbgL?^Ru^DxsO4*{WWy|NDS;Cv*Wh=iYCZRLAuO}W-tTye1IhID(&T(5 zC{XGi(ic4iS;;5%ScS{uXOX#6i{3HlKl@Z{tXcy8lB$cN{V@=8$@tmP5IKx1etjVS zj6J;6;-nEy*zmIF_0C6!__5%{<(vm^Wx$)t_eZWW0MV4rR6p1S3k>63jO;FB@l;g> zjfy4&5PY8h7+tUkxa1C{BPOz^&-k5Yg9|A$DT6m1F!Z=b+ifOSEZ{%s)&0d7Qu`Rh zBnOx=*Djad^3+?1Z)ReMPx*&6Jp9+|cf5dVag#g^ju`lN_KKy#QBm|OV7a=D#Rj4q znWJCT7htLNg`|BZTQKm&)-_djXM8=z(X*wJ33IC~7T3qiF#7$iqqQM1So>yIN5zFJ zSg$W}oa0`}#y*%`q;e`?MVy$q+A9oBf^8lMlCVDZ%2v!(^;(W74Xy( zvBt7J42#tc7MQ=NzsMBNkD=mr?^HZg@gujRL-L$8*6xT{T~)2Z%0H*6mk-B7TwxdR zomjijA#QbfUZ=y0$K9>#+og z;f9)~90tr4yexG2&<@Oz@`~S^xB&XER?qi;Ca_3s@nEciDY%cFw9l4kfy$@9j}q02 zh)kJ5|D?JxpX4&DwcL-b{_#Rj^RHqSs)|P!n1YwW^vBpI$`HFnnU{WVF-9oV2HkAt zM4!an-$TtEz*NwE+t~trEa`JA)c5{^*}F>u{pS8bQE66s?W;VjY}h?{tuhUwd%v!9 zm8d~oLD8!BJ~PZ-`hG>iGiQU7WK4g3j?7(0<{HJ2 zvZvS~);&rtl>P~ZMl5@sZ2S)v_+ah(x?7VOAAk(}d718+B}Q09s^4Yi!zWYCuTR~Phrf~?iM-x*P;hQx z-}?0^ta&YY^0hGqQ>UI}*G3$~a>`{^O;$eivtIa5abE%?&$Y29IsMr1rx{~Pn+)Ka zcfGuic(FR?zHj^L!GDKHXE6F}_aTQJm6%5?1*OD%#Ev>Kj&H;C znE#6PR7R;SSc!5@$u*>5>WI=ijX@qr*>h-XhcjUPj>#jcmkTlJ(ft_~qbpc(G9`As zw;4<29kxgcU&5|m1BYqFD)EtWZzl{tfR#Ow?gP3S1=-?OXneCfR)QydM0GhnQxoDjaa*QbN7oW zS19V6Z8Irb!n`xKFINQ_;7@&lMcvpn%!$0s)V4_+qg0ud?@RMQ?50CA^&V~*b<$i! z>}o8AtxoE>rJTnq7MYKNTNp5J3wywi%q{RwLEJ*wQ31j~eLf>tdIfWNzOIE?9mL9O zN#1I!^mxbP^x3UO;*eM3Z@+BQgHBuLY_xh7Am(q~W-U!0^vQWCBgbC>b-wAGyRVu; z>|(5Q+WkiGns}J?u-F^(8JJu2w<%$eM)0%Bo92+nAzCI99)rc8{_9v97nFq*NZr2i z0Q@@^xbAf&VNN^Kqtj#3m>D>sCR*_kZ@iC_P<`rve^2mS<^C@i_3RHdQ<^&=X|E3bJTD~vM_bSzz=jorEDCGISD+w5IqQ9wA{6EL z`Y!k0#o)?_$&|Yakeu4SM~8V3i%(B)SC+fQd;VeBUQUj{nxW&NCl&*oSt zKULDKqqGU)#X{P59Ng%?*_eLbS{8`PIB&=o@*J{tx1QR<`47InUQX#bAqJ7n-4lgN zqEJ<=Lv#+XW8jC+T*d=j5K3oyQDY<(Qj;0`&0?-%s+}lvIISS2E#7!>kwqFpD$lR{ zT<8Gf^)~gnRR<{0QTbsv^cJ!&n~4hbTZ3DswouJ8Wo+;e^Kjs3!Z^dekH=Sov0`fM zW9soFC_a1L@e{u}#$8h2wzmw2*kfC7$qr3m&h=!IM*r^^J*zr+h`t$O10yMhyS*Sd zX>gAPUc?lpbR~|x6+q5N?sqR(!w)9yx9(X>Kw_+w+?z~1n25Uux@7MW+ zDF&XmI_oAka^KBl>=Ol2eqHNu>fek7pa1qPvbkWAeMH^&gX$Z+VjuKEfEn{|edve_ zX@dV=&%}BkA~1bnGRPZ(fP7(d^8)QYh}th|7h-z^vIjI@jop*P>49Zoh%C>MGHRKin`m zmyv6_|X1 z@$F-c_r%??NZrPz^qLanjV>LDJg0#%r@aktPt!ndF#Ta0Np8%#TNK6=cNe_QZ>H@} zmcSujr9sem8(2sUx9Ex zYxf6vpE2}+=oeL4d-Q%6=@QSr7e1O7ze}j|!Gd5x20uAh%%Go5XR?!kCu7u z8u;VQ^Df1n84K_9*A}Tgfe45FjVcT~u`avK#p$>MW;{6eRW!#Q{W+*V`^iv<+3oSv zjHek3fUS++8!+Zdvg2qU1#&XBCu36&#yz))zY{5qIX5DEe}8=qpO5yg(*+TjdGM0h zii-+n_usHQf8Z{BFy<|PTO5ixY)Sdz56m#HrA@7Q*AV%3!pn6g84QvNsx*4*rTaW>%qr2qQ-w;@3mD=RGW&u(sliuxFT>1-*? zr&Mk|bo&ziRIIxqwk|Go&G<7xLGd$QuEX@U=aRX_hn=q)eiU0CdTxXS}_|7~yNeW|(O?Tg#p zhKf<0r{;`#S12a^Q}K`F$bjIruAZ`wDv*HQ%^hh+p-B6-MwZNfSZ?6==)k?B7$d)~ z&>!9fx_e}#stQ){&*jX1*VPm(PiEUHll2Z$bv>Te{cwPP^V=1&*ZZ(C`Uq371B)Hf+1ML+y9WE7@v1W)`!-i7BPRT5_1)HQRDFhYj=Z z9->;WR$+CZn^g6PGRB2x87??ofxO3xH^Tj$FzeARnXfe&@MGl3g}M9Mn0kCzFSAM+ zTV>Jdb>P z2AGvhXD;TmhSk20bW7TtATNnw`n20W%s;cRo5{o&qfK-Tg(5le-?v$l4#l5q_zn2ovQ8Y$PKxA--B6&|Gyt`pApCPqR$HZ!+tP#b-1y;}T4DA7a4H z4yi8o|M$&tbAM}f2Fzd|)DPR-f+;<3&kUGKgB^eD0q2JkSa6zpZ(ipcxL-XsQ$MVX z`P^rIaJNKmaQQR$oaA5du*z}GW6uPV0=V60e=5d*pOXy|Yk?TIi&w0E^I&T3+k6K8 ziyOZDm}^f#1%BKsV4qv83JLeux1UX~z+5(|lTXbnAY#rvx|QDs(uP&MdQC+zVP@q_ z)Y5Z^{%s`iqcH_jj>jxNkq%Q_+|QGkixzdqD1Sj6~+keyFYWMXz? zG3G}5LqJB465qE32*37CnNgq!ef0lWtPCk**?TX+$bdiid*abLbwnSs&k1b0l;e-M zt1v+R-vPv&H}f=N@9__>?B*8(avO8P!RqRK3^VWEOEEsO7n3!P2daq`VC7V-e-@K5 z#)co6FLZ}sRZ zKMYMS@3)F;AB3JAd>-ZRt6*qMXR*n#59-p-P2a3g0n{3NCc|9;6)Mx$^#0W0-LN8E z<9!a$;43wI+gi$XdV2+rOd4PMKla@g#o!9VgN|s14nj!{<{tNvO0~ z|Kj;^7P>oZKRtZa1hM(ERy*l8LG8R$i`7&p6nAm9vdCi6Dm)q5nFI}LO)|F2bKo5%YyI$P2echc?Pk#U0ksVZ zQ(3JCphDQI*(FT}aw~%6I(I#XrY8#}Vl0;-Z^wQe*L!&wDABUtNcbRBT+a+>_~ZaJ zoO(wi-z7nhx5xYTNJXgX|H7oO&lF48ly_!HQSn{U6w?bc5oq{z^z=t1C1?=+#5L!7 z6v}LmM&;DiK~zQa>XuR}bTA*acrIuRom(cwO%}MYf@cSpkJUV6$%`K9p8Ww0>gOx2 zvbbT@iSG-S^qinB^Nh<+q88FN^XUEF%mr`6B~MA)=tGI%H!T_?G4!+`6K6KA8%I^( zr4l7j@hg1aJ!@WwzHv9#(rgbjf8>0|qU!>MTh5gnqBVewbN%~lcpcEVcjxJklN89i zQ}yRR$Inphbn(0sr!D@}h#)D7rV#(-jq+jZ>yS|5S>N$`0R4x(kBKdaK%Lw-WoEHm z(7Mxg%eNy3p!Sfs_(3jrXyrb8m0N!n@{V7KDLZlkI${iuWo73<&Yp7%14(``=pQL$ zE+z#%af-hm95sVj2ipZ{l_97*oyF{CDhNIA$`77+wg#z>*eN#Kl%c#}g+tL;9m*Q* z0{p_#p!vorSDO$eXl8#ccD?+#ftLNo(+m`un*6o!s0|5aiGr@X?8YFkVd?rU6Ij*f~`w?WF;oZU>@Dw=Y7jyL24mrH|11 zwd<=>Rtxk=MP1qQw*zV>c1sZx%TV$pm2;2E0Vr2a@BCp_4-K&aKj*avpy2pXyPv1| zprV7<_zC+c=9$XXof7^Ab@f*kCUbv7;dB1=l)swLoLgl=v@T!{rT0*rY#n6E|B}D^ zN)#${vc~40e1!T*I``+D8~IebE4J{)LC6;R;ZyKf81geNDmxxdfus{Jp8aWSfao(t ze};-uptkZSJxu{K^setX;wY{R?Y5ypk2>riy}amNn1Ul9%`60MNr1+*uiwOlte~5t zHqk~-6aC{f&GWn{P~)i`QYUK-Zyt|Gqmqd=^V8gfV^$5R<1?^6#a@gy7#<0kRsd`VR?t3 zq&n^C^#gVIM{|&Md$=|fSmvboX6=B?3g+A2_S8UoWnAsMFb-&&KU3KhWC?$Dh+8ZJ z_aO7mO@G3j5A^r!Q#gN&0`f!Luvu(h zxV0Em=h?pDuWp0-@1xd=RvuUxv@$Ko+y*TRbKLg2=OESYj^*|B0;mrAD7}k62C7?h zxpO|nL!K)#yU0aCl#x$hV}d1=?u+!${ds#ZYq4tKTWi4r-%;()wl(RA=1$S<`0(O?t9(4AxPQSWkZ>S8xsDe#f6==P`#q z3%%3Z&(=ZJ6S15F*Y<)R%mgTli9yF%&D$SlmBDMlv;LU!0#sV35#nplp^)9(B5#g> zau0^cW74l7<<~;9{3h>I|3`%6*QrCb1D1&fI=v1lSLU^Z-(w;P9mrL)}UQlDgVKyP-y4m6cYZ+22EdCEvAYzpe@ZR z{Iq8$H0&Pv|VaN%P+Eo|GMExgdUCv-3OjA3RB);BgQd#|HMV=S@RGKJ~fy zPF|>ZTXV{boeU-et}fg8c0#kfu>YvSb0{ZkP}+VL3~2Dmn~waWFrIvw`}eLIMA{up z;1qO)4((3;!}Av)QSL3pH;GcBkB%r=i_1c58cWhaLk3j*mH7>2Dm|3`ddBdnh7^T5 zCSJ2t3V@pDzbDqq;$fmWTtq-f6nU7L844aVfUY;0%5kr2Vc0<6JD1)l3?aLziYZpW zQHt9Zb?YcpPm*J+%n6$Jd2<*=Jz(Ht2iGIYIjH?aB*cnHn3hfAC4V9W-LD9f9gLSC z<>RBy8kKuc?_=WkP*Mvz6jc69T#klj`joiG*FGUkveNpY@d;GF92Z5wSl^I;2hU0ST`0FcBsci3O6v_xiN3yc+ z4ssE>o20MK0sc2#lLzV zB~(^uv2Wuc49zAMV;rBfP#rnD)qfPVFerI`FxH9}Ivg75B2G#}d*+}3BgY7|8t`vM z*ttNzdo`C;Mkch4HaE{HPrz{3>E0ZRUZ~Gs<4u0&4dtqX&+U7qAU!}OB28Zmnr{@6 zgn1c5-L=zIOIwW4@c#2|^tDfr>U*#2Vww~5#WxGQ;t)pPlHQt=CO8r2+jd@J{V?+P z()n_TK!BF>uJfOFN1;;W4D0Gn1a#TlaA2m^g68YsuTngS z&v_%^_Fr}A^lA(v|LP4Pze|^2Obvmf= zDd_ueh5V--C$z4G-BDVefJVVceH!L|Xk%Q(qkl$Gz{ecNe`!}>ihXab{+t^$UQN{1 zI0WGL`(L`+oDDQRc$^*6qXVU%3cSwdk3v&S(-x1nDlzBGsG4F1VDKix_GK++l=w($ zCSKGAl_irVd){(DU&yllJ*jbmp}f_-?9D+KmNqkdJt7G`g=r73xH}W~lUUCWMO9ue}jf8igJk zw(oX{3DDTJ^@wZW7gV}NYMZc#LdzHZu*bBNPJd=v>RFqY+z*vqG86p=MNl3u(yIs(hd$Bzt;hof(4S~YuWfS} z2DFbm$v$_7rhnnaw8Wen8cd(oXd~)yUaSdQFGF3Cbh)CW5cDVr^vRJQhF-Zyhw3lY z5X(e;<$~R9MXQrV0iVxE4>&Y$Y&2U&SvmIncrrrpIPuii)-?o zicgnd_C&brzb6NwYedKYh3F6H;$!%CYwjtG7@j<8FFy@!*O%fI&sjpljp3NRuWZnk zYZC7J_aOAv%c`a~JtcC4o&F8FugJ&O#gs$P4Vv;h@)P2YLbYVfFMhLwQ2IPbhVhFo zv`8|zF0J~(09Cn>r;jsq8GkyYzhRG@_6Wh@bWYH#`~+JoSV2YHY4Z4?eyD#!-f+Qr z2zqpd6P?uzpz7&mo=o*?&^4nxrT=yn8pkEBY94=pk_({O|FtVrwH~!;PrU}c-)P9l zXm+6IKPn;rU{$Csx4PCUcO9xZ-#%04?SS-e@8&n@e4z1WikKVS5%U?}H#W?hy)6#Z;bux#>$Oj-S1uK0Fn38}7RS`dXHRrcU#Z3|GD zWj^_FMjzU<%EU-3dZ6UeNYt)hW(z z7kp2oZ@+dTLGDpoo|<$9&}&LocE^YsdP_8@jRppw@nIF;m#eZ+cXt%IF*ZSindf(o zqD1I8rLNELt`J694Yz1|%%HLC)k-b5G32gtr+#osh0dLad`(xWVIcW7UD|*Hbh?MJ z^=>=Ds9=N$?=CsiM$SB!O??2r$v&UXSqg=5CFdi4E(s8vMVFqn&J5kVE)LgkJ%JXn zq~SAJT#%vVVj0E>_Sn8+W&}l^li+E#K_TN`_W*TDix0jL_=SOZYrLfYj8dKX4r< zfhr#nfzSKbkv9p={_`CSbt>n`*|$tl8CUQ8LZ=1{l6j76}= zb?ZUsqzjZyix3B7lcJ=Qs0@81-Ujc5UqXY^YBAx21vIDSR6P8A8U}|B$!-NC!&o*G zgYGoZcXH+_87QKmFXLo=ypS#w6__1c3`~IDTimP%yCUB0QEBgD^DIDgx1T^L-fM5P)n`#s(vT{+SpWLWSYXE|HpxD38oWJ zExw;>zcLQx=e)&F{m81Rj0>0}N*7|e0dyVV~A z^-uEIE+C6GbEZz$OJ}gos zTgCugpQwYX>iVED)&0i~Pb3VT{~)8;um@EwWZFyBNiZZIr^aH%2xT^Z_g624qsG}A zTDAu&p!Avb*)iLfF!JpE`W>=#D3^MlM)u<$^k(@p$X4%xYuqETG6iBD(tQ#= zI;sH$8xKST-ULHKcH_E~HxIP`Y*~1~vyBo*T8L9@|X*9_yFNxeWD;zCAok#3x zPx6mOKY-frVrAQ2iRdYm4%6NufiB5jmzx(%VCbyV-WiUoP_484FJpuZN;(wzY3PW$ z)0lfmrs4z5K{5xHnU6tnL!GoA=(?8=K--C@mUO%n(9>JN_gbzR zdY`b*PP&*Oti@z|B|;85*WGWp9NU43|0JF==of*f@i(t-UISE7KbWE8;sKrNiMj0- zbWqoQ{RY{JIJ7+Y{3Rw+8!EznbTsg}!kaT)RyPhfp=z?J@rH~bXxz|N$Sw`O8hXYUejD8|hRzRyDWN(c(1Pa67_MqV?;rjPY)qcek`bY1C6NNXaRLUsipk)? zaqu#u5{6!_hlL*giQp7Td5_DQ7p9*DhCS6wf?3tQD}PF=k>jLkEI~&#*cfQ zZ+M|7`LpOn4stJj-QgYHCW zV_-duEBmzHl(vONGW>Fa#u*yjd|tni?17QjOKq2om!XLKrjYziDyZe&JO0ej4@v_m zI4>9ffrjr-OQsuGA^L7%fSk%M%(4WJ1Rv3b(BxPOS5gc$_K)g}IAl@XL#pY~WohWw z>1sO0YD3J4q0hZz=`i4S>`v1oFBloOW=c&x0Lj+KR$oB~>Lt=X_D@+s52It4>gRIk zdl?TL5&c9T?BlimRt(Lj=X+Djgo!>7(C6Vl2Ni-x)afIGphBqe_NnT181iwv5u54^ zsTQ}@$t)F7I!uVjAF_s8Z_sQyJ zA(Z_rQ2BP*916(_R1R}Hz%=EAV?gmdv7&!%Phhl?<1;Ci`lt`bsD|C=~eC5gtN^6{M`4Z#MoqSEw4O4lLv@z0GbglcH&*EbaMkARkd z{G{juf1szK$bdbZH6yk(5H0mHX08kqVSuICk2mITJdSF}+s}9~3{PImC7&2^u~RUvl3g z>hC`jp&PpUkoKErGqRc!sxqu}ImKQ>eUi3~b+7~UzK>6Teby8ji%NbrNK!&~LU2;f zolO`$MwQ*a_!nAfxE~*@y9!;`!#@6gSPT8F+7A>WLc!(aMenQXyeKXI!{G;g`N)gg zvLo&4OBi_cs3ubI0;KFS@6D5|LQ~O8p_GHiApdCgExJ!)Fk-?=c|iR;v`RjheSOyt zGQ=HB9VB10b1P3Vdjj?2Q}^up#skS{dG*p@90ti#x~7_u_^!_e}^ll6-! zKeVgqye^|(f-2j0ryjd7LOqB6>AZ#4Q0lVbHrD4#+|l!4Ztz)%x&)tebri1?4^S>?e>7?Yg;Lc-_@<$Hg)t7I??6(zMCDBgmm zz8Ud(*I-m~e?gA_8}T_Ft6HxF9fhjfg)Gsk9#F&oN&3?nX^3e~ANoG|lIW{JgBxy4 z@QuDyZ$Aq|qn7tW#c$)#c;r;-ec~K@#vJQt%Vc3FK~?GVF-9mBx%GQ1Jq9Wh_qo3g zNkg;Kwnyf90ys~fa9h!Dgen`p?^{}mP&4vSt`Yj7$nMy`YW+ZH;km%zs}~IEAMt;U z9zIYpY7`fh-i8X4JqsV-cZ1yfqPO{o`qLPpI-|}{0>!7#9lD$51U*OJg>oM|0VCZn ztGVMXA)eMFIb+!v%5o!4sP-~L!daE(urOB`q~<5*veiJDVng!b#sM(6V(z20>kE~_ zKX36^^g@S(c*0Y1J1AzlK497F3QaU|13QnrQO*5;ryE0wFm$|yNiWb9de3dCRB`PS zIXeEFqGutLh?|QRS2q%SJ70Mun-Zk@WhR(8AB4XFl74g2iZEUDGyJS^CrTZynpWN` zg@J=~9|MYmp-S)Rjpy>D(C|;9eCa#UuRh$n^{J&5Iwj+$UzZ$)A&(MDZw3$OU=DDU zJIx50T}$@wk4HgncBR0_NgXIt|IM}`PvpjczZ`kGzNnV&U+1?RcSxPIK2XqL3dw8A zbSxs(PWfhkF%i;y4 zhV>WN{zXBr<$pyB)1uJmsG{)r5|J|f&S0Avu}K5 zVBBYwx8;&3G*NBwXs9O=dx)@Xz1bAXwqGcCz-bR7qc@whJ2_Ek;l}NoNDG<|)7T7W zgg}?}1C=w=fiV0_aQdzjJ9IeS9-{&Vn(0^v&+7B~fz}NMhWJ#qVCBw=@@?(_!pDf5Qv=Ewtfq(&`>Ddowip2J#^-Cca1}# z`(9C!n0yqxo6C}{jU|COr{2niDSJq;HyXe1{tVjr-_?1N%tNc*?VS)2J&3-jYl!hP z6iSuVq{CW{md@j20^ESiqii7ZZbMi{5r2>P z-zEBd-h&ugwq1K@=aIf}W4IIoD+%0*mXDxO&$Q2ujSr>$60Bs=;D<3P^Og5PFQCZ! zAY*g;b*LQK)A(g`7@CKM?RV`{0MRkuysFa}1=EdUIA(;!pZn zTig=rL)k^s^-aNSRwHoQlmvPN_`{^%W}!H;+t%BEeW0m_U4&Pv68fH33QX!v!VsM_ ziIYJs6g^R=?CCLw^8P2Lp2jp#bU2Esr}2hWh` zJoN9_^)fVOquTBJgO(|l(3AdJH+{_lgiO@Lf(5x_W6dIN716S@hK+nBsQ)6B==;%^5@K9=mo?*A+zQH>%m{Fa0 z+-Lz>TEolTBt6&)h zqgMvojK1T%&@J~UuHSeX`pa7qR$gC#-bj9^d(Hz5>+gD~dy*iJL+nv&)+Q>uFFx$} z%ne%K|4XmPv4G+Ke3y#Z`=E~dEk7SO4dk4fP|exofpSvOupXWk=wws;a-~oWrYuiR z-ygaFgHxYqW@3*+m$ZVf=ZFckhvyA#k+;F%8KJzpbH7mmjkA@~Zw;t3a802*4vI51z8)G2hp^!`vwr1GXs1YPs+PS1*reS%FzFBs zN4;?HNgIYvN_N6Ir*LR%3sUtkI}BYc&yH4|Q6yftdKzWiJ#-{r(*Ro8ho=|H-67{p|AA?h)6k)I)keuG0D8NH zM)^lZiGJ+5o172?Wu+wH2IPa#Yd2t6a54r(lAq35Be8PRcE-hSBv2*L)+4Og3+-G7E{X=lK=P-TK{NZgQ1It@AZLR-5Ye&tXN(T? zP-{#`t2jW~)uRSCo?$56QTA144uDEovg4`j>nPjd;1V}~GgLHu35?;-h0eOSzFg%TrrRSCWsE9rM>~e~TJo>9U zx1BUu35~*U9*ufmg!bD7r{71kLLMV@qn^S5uPC<60olY-pCGJBv@{4L&6o#4xwc8g>01F1?D(i}pL-A{FLTj< zjU$DWsEBy4{9$M}3NR~-<%Pz8-Ju(+B=F0uFSPXm0Y&{SFeldthSsYuzVMs-LBDVA ze2K_q=+BORmIEJ2-^z6MhdT<%8L`#>MR z!p-*GWEkM{pYJPXfX-^37^j^t(AoIf*>N zUrGwbPNY~zQV2txkUUqwRbDX9Q@;G)V<#9UQa5$|M|1e0B<8v{viGXcrYQY`{_IVte3N@;QC679_cW(2 z99@Lw7_~?4vH=#?OO zB{Sz8s1|)Um@;b(Lpm254;&PS4%^v_+)=C0{UJgwTBHP;k2zeSzoZU{D#>f@zEV(r zrB|e{+yMGKIEOv=gdjyQIxvN88_FMXf41T;h19{R+2^ghFnm{%wX&8HTBWj@K8xfd z|3CU%iUnt(TlV(YYvb$Cnf$?*H6{Sc9veDMs41cJ7tB_LITxTORZRK-MKkoY9iR}o zuZqeO)2>-7o<>Cv`2I`z5rRTV_G52~HNp&g?Bm7_R@4)D=NbK_P3YuhPn`d^k4kSj zg;h3BLQO(JKuf`GR46jqQxu*JL(C)>P+Kpw97)~Z{X^ug+NahZx;@Z0lCQgy4rgH` zu;3Ch@Q0S?z1PDzyISsB)3s@%}OyiZHt~!aGe5 zm3n-l_xQh}HkHa9ZzCu4h21+&oPbeTJ4fUB@9U6yP3>HM-!s%4IHCD-_yKgiPXhM0 ze5hH2Lgfv!8?^aMF#G!7hn~v>5w{f`XujKT%r|=m8iu7#Q>Wd7zqERW?*u&{FJIDk zq9_#Q3<{YX(qV$uk)Rr|Hq-D@-rJ>BP2a-z=98+2oObU*ZG8CLS=JpW zI_Jc9d;Tl5-fr)oS&D?#)<^7wet)3s)}l zvw%!xq}|780c|V1-#WJqH9E&X-u>+k6K6UkPXv@gpa1iSE>m?V&VxG6Jx@q-wY`vT zzz@#1s=b$ML!qrlu;~?kT?L*x88rHEun`IlWNrvG6v}CqWREqV@cz~8fuJ*nA1oVq` z;NZD=FR1HdJmWtg4n^Z;{NjE~P@^jTF+QUeIu>6arPO@_wWgm+izt3U17QzVw&YM$ zh{L~fWCNW#WF^HJ+o)C1U-{7YZ0IsRr@pb;2E&+ipCN^K z4pY?1S-qyya{!*qg1b;Q2X&8)y# z4?}iBC(1g1k;+QYLu%vKFxU-!R?F{VW~pI_Q_MOj zrW|F3=alJ5O+uxn>y@8H6i}V$@;R^81Jyik+-1@F19h&C26oD~po?6{{IdfC3|$m@ zQ$C>!EwTUlZO6Ev=BzQa{d0u=W#7{tVH?mS=4?PWElb>M`rVrsd!UK>Yy9-|5$M{< z92);E1ig3EcAf~wLi@2&H2&!y)L#`1zGEH+O&`j(J|%pB&KH@K>b?CikbV29*0vBz z_lvYy6A*=N(u>vB$;8|-Y#F@3b_hxbwD}ef^1(1;)V0gZt4VH`CeZ)f`Cw7IJG8uW`6{oj23^Ew z_4!x~UAJee@NYmBzefL{Df#Lm2^0x3R4$# z-woSchhN#w4@HK(VCD{4utNzM%9OsKx%8zKStTh%C@GOZ`3H6VI@ViIA7JNi;MxLX zGCN{bA`c<|A#aqOX+UH+d`RAEOu;ydF|;#-bR8>UkN-mWl!0eH9utdjf_&oL~(4@(&!= zBr+=s22r8IH7%t>e$duw09in$zeV%Df!OP+jve=sW`ypTnZ0TcO6Ut~R!e_Y4W+Ts zPPHF$VP0UmT$HHeGPj#CW#i|eI^$GYaK?Wye4UclR02Vp*CFF?#>c>y6|>I?6a6Q> zRa1s>8b$`C4(}T^L#f_q`gKpuL^D>qaS4p8u@={f^_;iO`E*U6#hI0uJ@kOT}^Bs6Y+N`r)mZw*m5 z2B9W)kfV(;AEJa;Uf7AuLjQxmS0l_05;?|_o;5)bn$8Fsj_jQw@=e=T&$JR;Wb)d3 zgGnHNo=mPkXcam75BcNvjh4F`c4I^w(5XZZpmU6`W5Yup-|MLjCh6}^!U#-Hhm3se0c~(gO z{vqR&oD7WUn!S;>p@qQ^cK)8q0Cdgm&nug55~3e+r>s?WL)Du@EcNDUFkyAIPax$1 z)K>^-^e4Ze}nv-S>Je z-K!WOJcFTKmAVSXROlHu44M+H-K;)*}`{gH44_^;d@}xk8(-8ca{R2bZ&HM{&BhZi$PjdXz zN$B}bb$5eW7;@gqG;i^U!hnCH&2P3RkoNwYQ>aJ?v^))e)g*S4*vq*XdL&n&k+SDY z>*o$grxMrab4x>GyE{* zCfs=bsT!*IdNkBNWFNZa8@Spo5PP)5O18~zJ7m?6pSoT~?2Wg)H)Ntbp^v_^_eqwWV4hO7{&

p9 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 diff --git a/vignettes/rodents-example.Rmd b/vignettes/rodents-example.Rmd index ef390a6d..fa046ca9 100644 --- a/vignettes/rodents-example.Rmd +++ b/vignettes/rodents-example.Rmd @@ -21,26 +21,35 @@ vers <- packageVersion("LDATS") today <- Sys.Date() ``` -This vignette walks through an example of **`LDATS`** at the command line and -was constructed using **`LDATS`** version `r vers` on `r today`. +```{r download files, include = FALSE} + vignette_files <- tempdir() + dir.create(file.path(vignette_files, "output"), showWarnings = FALSE) + github_path <- "https://github.com/weecology/LDATS-replications/raw/master/output/" + files_to_download <- c("rodents_example_lda_model_set.RDS", "rodents_example_ts_model_set.RDS", + "rodents_example_lda_ts_model_set.RDS") + + for (file in files_to_download) { + download.file(url = paste0(github_path, file), + destfile = file.path(vignette_files, "output", file), + mode = "wb") + } +``` + +This vignette walks through an example of **`LDATS`** at the command line and was constructed using **`LDATS`** version `r vers` on `r today`. ## Installation -To obtain the most recent version of **LDATS**, install and load the most recent -version from GitHub: +To obtain the most recent version of **LDATS**, install and load the most recent version from GitHub: -```{r, eval=FALSE} +```{r, eval = FALSE} install.packages("devtools") devtools::install_github("weecology/LDATS") -library(LDATS) ``` ## Data -For this vignette, we will be using rodent data from the control plots of the -[Portal Project](https://github.com/weecology/portaldata), which come with -the **LDATS** package (`data(rodents)`). +For this vignette, we will be using rodent data from the control plots of the [Portal Project](https://github.com/weecology/portaldata), which come with the **LDATS** package (`data(rodents)`). `rodents` contains two data tables, a `document_term_table` and a `document_covariate_table`. @@ -57,36 +66,36 @@ head(rodents$document_covariate_table, 10) ## Stage 1: LDA models -We use `LDA_set()` to run replicate LDA models (each with its own seed) with varying numbers of topics (`2:5`) and `select_LDA()` to select the best model. +We use `LDA()` to run replicate LDA models (each with its own seed) with varying numbers of topics (`2:5`), which includes a run of `select_LDA()` to select the best model(s). We use the `control` argument to pass controls to the LDA function via a `list`. In this case, we can set `quiet = TRUE` to make the model run quietly. -```{r lda_set, eval =F} -lda_model_set <- LDA_set(document_term_table = rodents$document_term_table, - topics = c(2:5), - nseeds = 10, - control = list(quiet = TRUE)) - +```{r lda_set, eval = FALSE} +lda_model_set <- LDA(data = rodents, topics = 2:5, replicates = 10, + control = list(quiet = TRUE)) ``` +```{r save lda model set, include = FALSE, eval = FALSE} +saveRDS(lda_model_set, file.path(vignette_files, "output", "rodents_example_lda_model_set.RDS")) +``` If we do not pass any controls, by default, `quiet = FALSE` (here run with only `2:3` topics and `2` seeds, to keep output short): -```{r lda set not quiet, eval =F} -lda_model_set2 <- LDA_set(document_term_table = rodents$document_term_table, - topics = c(2:3), - nseeds = 2) +```{r lda set not quiet, eval = FALSE} +lda_model_set2 <- LDA(data = rodents, topics = c(2:3), replicates = 2) ``` -`LDA_set()` returns a list of LDA models. We use `select_LDA()` to identify the best number of topics and choice of seed from our set of models. By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing `list(measurer = [measurer function], selector = [max, min, etc])` to the `control` argument. +By default, we will choose models based on minimum AIC. To use different selection criteria, define the appropriate functions and specify them by passing `list(measurer = [measurer function], selector = [max, min, etc])` to the `control` argument. + + -```{r load lda model set, include = F} -load(here::here('vignettes', 'rodents-example-files', 'lda_model_set.Rds')) +```{r load lda model set, include = FALSE} +lda_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_model_set.Rds")) rm(lda_model_set2) ``` ```{r select LDA} -selected_lda_model <- select_LDA(lda_model_set) +selected_lda_model <- select_LDA(lda_model_set$LDAs)[[1]] ``` @@ -95,53 +104,58 @@ We can access the results of the model: ```{r LDA results} # Number of topics: -selected_lda_model[[1]]@k +selected_lda_model$topics # Topic composition of communities at each time step # Columns are topics; rows are time steps -head(selected_lda_model[[1]]@gamma) - +head(selected_lda_model$document_topic_table) ``` -`LDATS` includes flexible plot functionality for LDAs and time series. The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. For all the available plot options see `?plot.LDA_VEM`. - -```{r plot lda, fig.width=7, fig.height=6} -plot(selected_lda_model[[1]]) +`LDATS` includes flexible plot functionality for LDAs and time series. +The top panel illustrates topic composition by species, and the bottom panel shows the proportion of the community made up of each topic over time. +For all the available plot options see `?plot.LDA`. +```{r plot lda, fig.width = 7, fig.height = 6} +plot(selected_lda_model) ``` ## Stage 2: TS changepoint models -We use `TS_on_LDA()` to run LDATS changepoint models with `0:6` changepoints, and then use `select_TS()` to find the best-fit model of these. - -Here, `TS_on_LDA()` predicts the `gamma` (the proportion of the community made of up each topic) from our LDA model(s) as a function of `sin_year` and `cos_year` in the `document_covariate_table`. We use `document_weights()` to weight the information from each time step according to the total number of rodents captured at that time step. +We use `TS` to run LDATS changepoint models with `0:6` changepoints, which includes a call to `select_TS()` to find the best-fit model(s) of these. +Here, `TS()` predicts the `gamma` (the proportion of the community made of up each topic) from our LDA model(s) as a function of `sin_year` and `cos_year` in the `document_covariate_table`. +We use `document_weights()` to weight the information from each time step according to the total number of rodents captured at that time step. -```{r ts on lda, eval = F} -changepoint_models <- TS_on_LDA(LDA_models = selected_lda_model, - document_covariate_table = rodents$document_covariate_table, - formulas = ~ sin_year + cos_year, - nchangepoints = c(0:1), - timename = "newmoon", - weights = document_weights(rodents$document_term_table), - control = list(nit = 1000)) +```{r ts set, eval = FALSE} +ts_model_set <- TS(LDAs = lda_model_set, + formulas = ~ sin_year + cos_year, + nchangepoints = 0:1, + timename = "newmoon", + weights = TRUE, + control = list(method_args = + list(control = ldats_classic_control(nit = 1000)))) +``` +```{r save ts model set, include = FALSE, eval = FALSE} +saveRDS(ts_model_set, file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) ``` +We can adjust options (default settings can be seen using `TS_control()`) for both TS functions by passing a list to the `control` argument. +For a full list see `?TS_control`. Here we illustrate adjusting the number of ptMCMC iterations - the default is 10000, but it is convenient to use fewer iterations for code development. -We can adjust options (default settings can be seen using `TS_control()`) for both TS functions by passing a list to the `control` argument. For a full list see `?TS_control`. Here we illustrate adjusting the number of ptMCMC iterations - the default is 10000, but it is convenient to use fewer iterations for code development. - -Also, it is important to note that by default the TS functions take the name of the time-step column from the `document_covariate_table` to be `"time"`. To pass a different column name, use the `timename` argument in `TS_on_LDA()`. +Also, it is important to note that by default the TS functions take the name of the time-step column from the `document_covariate_table` to be `"time"`. +To pass a different column name, use the `timename` argument in `TS()`. -`select_TS()` will identify the best-fit changepoint model of the models from `TS_on_LDA()`. As with `select_LDA()`, we can adjust the `measurer` and `selector` functions using the `control` argument list. +`select_TS()` will identify the best-fit changepoint model of the models from `TS_on_LDA()`. +As with `select_LDA()`, we can adjust the `measurer` and `selector` functions using the `control` argument list. -```{r reload ts, include = F} -load(here::here('vignettes', 'rodents-example-files', 'changepoint_models.Rds')) +```{r load ts model set, include = FALSE} +ts_model_set <- readRDS(file.path(vignette_files, "output", "rodents_example_ts_model_set.RDS")) ``` ```{r select ts} -selected_changepoint_model <- select_TS(changepoint_models) +selected_changepoint_model <- select_TS(ts_model_set$TSs)[[1]] ``` We can access the results of the selected changepoint model: @@ -155,7 +169,7 @@ selected_changepoint_model$rho_summary # Raw estimates for timesteps for each changepoint # Changepoints are columns -head(selected_changepoint_model$rhos) +head(selected_changepoint_model$focal_rhos) ``` @@ -167,20 +181,25 @@ plot(selected_changepoint_model) ## Full analysis with `LDA_TS` -Finally, we can perform an entire LDATS analysis, including all of the above steps, using the `LDA_TS()` function and passing options to the LDA and TS functions as a `list` to the `control` argument. The default is for `LDA_TS` to weight the time series model based on the document sizes, so we do not need to tell it to do so. +Finally, we can perform an entire LDATS analysis, including all of the above steps, using the `LDA_TS()` function and passing options to the LDA and TS functions as a `list` to the `control` argument. +The default is for `LDA_TS` to weight the time series model based on the document sizes, so we do not need to tell it to do so. -```{r lda_ts, eval = F} +```{r lda_ts, eval = FALSE} lda_ts_results <- LDA_TS(data = rodents, - nseeds = 10, + replicates = 10, topics = 2:5, formulas = ~ sin_year + cos_year, nchangepoints= 0:1, timename = "newmoon", - control = list(nit = 1000)) + control = list(TS_method_args = + list(control = ldats_classic_control(nit = 1000)))) ``` -```{r load ldats results, include = F} -load(here::here('vignettes', 'rodents-example-files', 'lda_ts_results.Rds')) +```{r save lda ts model set, include = FALSE, eval = FALSE} +saveRDS(lda_ts_results, file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) +``` +```{r load lda ts model set, include = FALSE} +lda_ts_results <- readRDS(file.path(vignette_files, "output", "rodents_example_lda_ts_model_set.RDS")) ``` `LDA_TS()` returns a list of all the model objects, and we can access their contents as above: @@ -189,13 +208,13 @@ load(here::here('vignettes', 'rodents-example-files', 'lda_ts_results.Rds')) names(lda_ts_results) # Number of topics -lda_ts_results$`Selected LDA model`$k@k +lda_ts_results$"LDA models"$selected_LDAs[[1]]$topics # Number of changepoints -lda_ts_results$`Selected TS model`$nchangepoints +lda_ts_results$"TS models"$selected_TSs[[1]]$nchangepoints # Summary of changepoint locations -lda_ts_results$`Selected TS model`$rho_summary +lda_ts_results$"TS models"$selected_TSs[[1]]$rho_summary ``` Finally, we can plot the `LDA_TS` results. From 30a41698c0fd5ecafd4f6ee98dab98cb3735d9ac Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 23 Mar 2020 14:37:46 -0700 Subject: [PATCH 34/43] streamline testing start back at square 1 --- .../base-lda-plot-bottom-panel.svg | 64 -- .../base-lda-plot-top-panel.svg | 142 ---- .../base-lda-plot.svg | 196 ----- .../base-lda-set-selected-plot.svg | 255 ------ .../lda-plot-with-time-x.svg | 196 ----- .../base-lda-ts-non-interactive-plot.svg | 765 ------------------ .../base-ts-autocorr-plot.svg | 80 -- .../base-ts-diagnostic-plot.svg | 286 ------- .../base-ts-ecdf-plot.svg | 75 -- .../base-ts-eta-diagnostic-plot.svg | 293 ------- .../base-ts-gamma-plot.svg | 63 -- .../check-ts-plot-functions/base-ts-plot.svg | 590 -------------- .../base-ts-posterior-plot.svg | 63 -- .../base-ts-rho-diagnostic-plot.svg | 254 ------ .../base-ts-rho-plot.svg | 527 ------------ .../base-ts-summary-plot.svg | 590 -------------- .../base-ts-trace-plot.svg | 56 -- .../check-ts-plot-functions/rho-line-plot.svg | 59 -- tests/testthat/test-02-lda.R | 72 -- tests/testthat/test-03-lda_plot.R | 66 -- tests/testthat/test-04-LDA_TS.R | 74 -- tests/testthat/test-05-LDA_TS_plots.R | 36 - tests/testthat/test-06-multinom_TS.R | 95 --- tests/testthat/test-07-ptMCMC.R | 262 ------ tests/testthat/test-08-simulate.R | 92 --- tests/testthat/test-09-TS.R | 227 ------ tests/testthat/test-10-TS_on_LDA.R | 230 ------ tests/testthat/test-11-TS_plots.R | 193 ----- tests/testthat/test-12-utilities.R | 165 ---- 29 files changed, 6066 deletions(-) delete mode 100644 tests/figs/check-lda-plot-functions/base-lda-plot-bottom-panel.svg delete mode 100644 tests/figs/check-lda-plot-functions/base-lda-plot-top-panel.svg delete mode 100644 tests/figs/check-lda-plot-functions/base-lda-plot.svg delete mode 100644 tests/figs/check-lda-plot-functions/base-lda-set-selected-plot.svg delete mode 100644 tests/figs/check-lda-plot-functions/lda-plot-with-time-x.svg delete mode 100644 tests/figs/check-lda-ts-plot-functions/base-lda-ts-non-interactive-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-autocorr-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-diagnostic-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-ecdf-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-eta-diagnostic-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-gamma-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-posterior-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-rho-diagnostic-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-rho-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-summary-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/base-ts-trace-plot.svg delete mode 100644 tests/figs/check-ts-plot-functions/rho-line-plot.svg delete mode 100644 tests/testthat/test-02-lda.R delete mode 100644 tests/testthat/test-03-lda_plot.R delete mode 100644 tests/testthat/test-04-LDA_TS.R delete mode 100644 tests/testthat/test-05-LDA_TS_plots.R delete mode 100644 tests/testthat/test-06-multinom_TS.R delete mode 100644 tests/testthat/test-07-ptMCMC.R delete mode 100644 tests/testthat/test-08-simulate.R delete mode 100644 tests/testthat/test-09-TS.R delete mode 100644 tests/testthat/test-10-TS_on_LDA.R delete mode 100644 tests/testthat/test-11-TS_plots.R delete mode 100644 tests/testthat/test-12-utilities.R diff --git a/tests/figs/check-lda-plot-functions/base-lda-plot-bottom-panel.svg b/tests/figs/check-lda-plot-functions/base-lda-plot-bottom-panel.svg deleted file mode 100644 index ca522d20..00000000 --- a/tests/figs/check-lda-plot-functions/base-lda-plot-bottom-panel.svg +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -0 -100 -200 -300 -400 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - -Document -Proportion - - - - - - - - - - - - - diff --git a/tests/figs/check-lda-plot-functions/base-lda-plot-top-panel.svg b/tests/figs/check-lda-plot-functions/base-lda-plot-top-panel.svg deleted file mode 100644 index 00c4ffee..00000000 --- a/tests/figs/check-lda-plot-functions/base-lda-plot-top-panel.svg +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -0.0 -0.2 -0.4 -0.6 - - - - - - - - - - - -Total Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BA -DM -DO -DS -NA. -OL -OT -PB -PE -PF -PH -PI -PL -PM -PP -RF -RM -RO -SF -SH -SO - - - - - -Topic 1 - -Topic 2 - - - - - - - diff --git a/tests/figs/check-lda-plot-functions/base-lda-plot.svg b/tests/figs/check-lda-plot-functions/base-lda-plot.svg deleted file mode 100644 index 46cb6bc9..00000000 --- a/tests/figs/check-lda-plot-functions/base-lda-plot.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -0.0 -0.2 -0.4 -0.6 - - - - - - - - - - - -Total Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BA -DM -DO -DS -NA. -OL -OT -PB -PE -PF -PH -PI -PL -PM -PP -RF -RM -RO -SF -SH -SO - - - - - -Topic 1 - -Topic 2 - - - - - - - - - - - - - - - - - -0 -100 -200 -300 -400 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - - - - - - -Document -Proportion - - - - - - - - - - - - - diff --git a/tests/figs/check-lda-plot-functions/base-lda-set-selected-plot.svg b/tests/figs/check-lda-plot-functions/base-lda-set-selected-plot.svg deleted file mode 100644 index c2c9b056..00000000 --- a/tests/figs/check-lda-plot-functions/base-lda-set-selected-plot.svg +++ /dev/null @@ -1,255 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 -1.2 - - - - - - - - - - - -Total Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BA -DM -DO -DS -NA. -OL -OT -PB -PE -PF -PH -PI -PL -PM -PP -RF -RM -RO -SF -SH -SO - - - - - -Topic 1 - -Topic 2 - -Topic 3 - -Topic 4 - - - - - - - - - - - - - - - - - -0 -100 -200 -300 -400 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - - - - - - -Document -Proportion - - - - - - - - - - - - - - - diff --git a/tests/figs/check-lda-plot-functions/lda-plot-with-time-x.svg b/tests/figs/check-lda-plot-functions/lda-plot-with-time-x.svg deleted file mode 100644 index 014a20c1..00000000 --- a/tests/figs/check-lda-plot-functions/lda-plot-with-time-x.svg +++ /dev/null @@ -1,196 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -0.0 -0.2 -0.4 -0.6 - - - - - - - - - - - -Total Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BA -DM -DO -DS -NA. -OL -OT -PB -PE -PF -PH -PI -PL -PM -PP -RF -RM -RO -SF -SH -SO - - - - - -Topic 1 - -Topic 2 - - - - - - - - - - - - - - - - - -0 -100 -200 -300 -400 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - - - - - - -New Moon -Proportion - - - - - - - - - - - - - diff --git a/tests/figs/check-lda-ts-plot-functions/base-lda-ts-non-interactive-plot.svg b/tests/figs/check-lda-ts-plot-functions/base-lda-ts-non-interactive-plot.svg deleted file mode 100644 index 91e43445..00000000 --- a/tests/figs/check-lda-ts-plot-functions/base-lda-ts-non-interactive-plot.svg +++ /dev/null @@ -1,765 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - -0.0 -0.2 -0.4 -0.6 - - - - - - - - - - - -Total Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -BA -DM -DO -DS -NA. -OL -OT -PB -PE -PF -PH -PI -PL -PM -PP -RF -RM -RO -SF -SH -SO - - - - - -Topic 1 - -Topic 2 - - - - - - - - - - - - - - - - - -0 -100 -200 -300 -400 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - - - - - - -Proportion - - - - - - - - - - - - - - - - - - - - - - - -1 - - - - - - - - - - - -0.00 -0.06 -0.12 -0.18 -0.24 - - - - - - -0 -100 -200 -300 -400 -Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - -0 -100 -200 -300 -400 -Proportion -newmoon - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-autocorr-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-autocorr-plot.svg deleted file mode 100644 index ba7f6802..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-autocorr-plot.svg +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 -2 -4 -6 -8 -10 -12 - - - - - --0.5 -0.0 -0.5 -1.0 - -Lag -Autocorrelation - - - - - - - - - - - - - -Series x - diff --git a/tests/figs/check-ts-plot-functions/base-ts-diagnostic-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-diagnostic-plot.svg deleted file mode 100644 index 095203b3..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-diagnostic-plot.svg +++ /dev/null @@ -1,286 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -5 -10 -15 -20 - - - - - --0.1 -0.0 -0.1 -0.2 - - - - - - -Iteration -Segment 1 Topic 2 Intercept - - - - - - - - - - - - - - - - - - - - - - --0.1 -0.0 -0.1 -0.2 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - -Segment 1 Topic 2 Intercept -% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Segment 1 Topic 2 Intercept -Frequency - - - - - - - - - - --0.1 -0.0 -0.1 -0.2 - - - - - - - - -0 -1 -2 -3 -4 -5 -6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 -2 -4 -6 -8 -10 -12 - - - - - - - - - --0.4 --0.2 -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - -Lag -Autocorrelation - - - - - - - - - - - - - -Series x - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-ecdf-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-ecdf-plot.svg deleted file mode 100644 index d22097b9..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-ecdf-plot.svg +++ /dev/null @@ -1,75 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -270 -280 -290 -300 -310 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - -parameter value -% - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-eta-diagnostic-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-eta-diagnostic-plot.svg deleted file mode 100644 index d3df3dfe..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-eta-diagnostic-plot.svg +++ /dev/null @@ -1,293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -5 -10 -15 -20 - - - - - - --1.8 --1.6 --1.4 --1.2 --1.0 - - - - - - -Iteration -Segment 2 Topic 2 Intercept - - - - - - - - - - - - - - - - - - - - - - - --1.8 --1.6 --1.4 --1.2 --1.0 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - -Segment 2 Topic 2 Intercept -% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Segment 2 Topic 2 Intercept -Frequency - - - - - - - - - - - - --2.0 --1.8 --1.6 --1.4 --1.2 --1.0 - - - - - - - - - -0 -1 -2 -3 -4 -5 -6 -7 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 -2 -4 -6 -8 -10 -12 - - - - - - - - - --0.4 --0.2 -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - -Lag -Autocorrelation - - - - - - - - - - - - - -Series x - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-gamma-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-gamma-plot.svg deleted file mode 100644 index f92c1ae3..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-gamma-plot.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - -0 -100 -200 -300 -400 -Proportion -newmoon - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-plot.svg deleted file mode 100644 index 1fe5c64d..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-plot.svg +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -1 - - - - - - - - - - - -0.000 -0.088 -0.175 -0.262 -0.350 - - - - - - -0 -100 -200 -300 -400 -Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - -0 -100 -200 -300 -400 -Proportion -newmoon - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-posterior-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-posterior-plot.svg deleted file mode 100644 index 35a70eba..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-posterior-plot.svg +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - -parameter value -Frequency - - - - - - -270 -280 -290 -300 -310 - - - - - - -0 -2 -4 -6 -8 - - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-rho-diagnostic-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-rho-diagnostic-plot.svg deleted file mode 100644 index f701ae6b..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-rho-diagnostic-plot.svg +++ /dev/null @@ -1,254 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -5 -10 -15 -20 - - - - - - -270 -280 -290 -300 -310 - - - - - - -Iteration -Change point 1 location - - - - - - - - - - - - - - - - - - - - - - - -270 -280 -290 -300 -310 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - - - - - - -Change point 1 location -% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Change point 1 location -Frequency - - - - - - - - - - - -270 -280 -290 -300 -310 - - - - - - -0 -2 -4 -6 -8 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0 -2 -4 -6 -8 -10 -12 - - - - - --0.5 -0.0 -0.5 -1.0 - - - - - - -Lag -Autocorrelation - - - - - - - - - - - - - -Series x - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-rho-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-rho-plot.svg deleted file mode 100644 index 5d69c4fa..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-rho-plot.svg +++ /dev/null @@ -1,527 +0,0 @@ - - - - - - - - - - - - - - - - - -newmoon - - - - - - -0.000 -0.088 -0.175 -0.262 -0.350 - - - - - - -0 -100 -200 -300 -400 -Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-summary-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-summary-plot.svg deleted file mode 100644 index 1fe5c64d..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-summary-plot.svg +++ /dev/null @@ -1,590 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -1 - - - - - - - - - - - -0.000 -0.088 -0.175 -0.262 -0.350 - - - - - - -0 -100 -200 -300 -400 -Proportion - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -0.00 -0.25 -0.50 -0.75 -1.00 - - - - - - -0 -100 -200 -300 -400 -Proportion -newmoon - - - - - - - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/base-ts-trace-plot.svg b/tests/figs/check-ts-plot-functions/base-ts-trace-plot.svg deleted file mode 100644 index c5925f21..00000000 --- a/tests/figs/check-ts-plot-functions/base-ts-trace-plot.svg +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - -5 -10 -15 -20 - - - - - - -270 -280 -290 -300 -310 - -Iteration -parameter value - - - - - - - - diff --git a/tests/figs/check-ts-plot-functions/rho-line-plot.svg b/tests/figs/check-ts-plot-functions/rho-line-plot.svg deleted file mode 100644 index 219b91cb..00000000 --- a/tests/figs/check-ts-plot-functions/rho-line-plot.svg +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - --10 --5 -0 -5 -10 - - - - - - - -0.0 -0.2 -0.4 -0.6 -0.8 -1.0 - -1 -1 - - - - - - - diff --git a/tests/testthat/test-02-lda.R b/tests/testthat/test-02-lda.R deleted file mode 100644 index fb59c390..00000000 --- a/tests/testthat/test-02-lda.R +++ /dev/null @@ -1,72 +0,0 @@ -context("Check LDA functions") - -data(rodents) -lda_data <- rodents$document_term_table -lda <- LDA_set(lda_data, c(2, 4), nseeds = 2, list(quiet = TRUE)) - -test_that("check output from LDA_set", { - expect_equal(length(lda), 4) - expect_is(lda, "LDA_set") - expect_is(lda[[1]], "LDA") - expect_is(lda[[2]], "LDA") - expect_is(lda[[3]], "LDA") - expect_is(lda[[4]], "LDA") -}) - -test_that("check logLik for LDA_VEM", { - expect_is(logLik(lda[[1]]), "logLik") - expect_equal(round(as.numeric(logLik(lda[[1]]))), -47889) -}) - -test_that("check output from prep_LDA_control", { - expect_is(prep_LDA_control(1), "list") - expect_equal(prep_LDA_control(1)$seed, 1) - expect_equal(prep_LDA_control(1, list(seed = 10))$seed, 1) -}) - - -test_that("check selection via select_LDA", { - expect_is(select_LDA(lda), "LDA_set") - expect_equal(length(select_LDA(lda)), 1) - expect_equal(select_LDA(lda)[1], lda[3]) - expect_error(select_LDA("ok")) -}) - -test_that("check check_LDA_set_inputs", { - expect_silent(check_LDA_set_inputs(lda_data, 2, 1, list())) - expect_error(check_LDA_set_inputs(lda_data, 2, "ok", 2)) - expect_error(check_LDA_set_inputs(lda_data, "ok", 2, list())) - expect_error(check_LDA_set_inputs("ok", 2, 1, list())) -}) - - -test_that("check package_LDA_set", { - document_term_table <- lda_data - topics <- 2 - nseeds <- 1 - check_LDA_set_inputs(document_term_table, topics, nseeds, list()) - mod_topics <- rep(topics, each = length(seq(2, nseeds * 2, 2))) - mod_seeds <- rep(seq(2, nseeds * 2, 2), length(topics)) - nmods <- length(mod_topics) - mods <- vector("list", length = nmods) - for (i in 1:nmods){ - LDA_msg(mod_topics[i], mod_seeds[i], list()) - control_i <- prep_LDA_control(seed = mod_seeds[i], control = list()) - mods[[i]] <- LDA(document_term_table, k = mod_topics[i], - control = control_i) - } - expect_is(package_LDA_set(mods, mod_topics, mod_seeds), "LDA_set") - expect_error(package_LDA_set(mods, 0.2, mod_seeds)) - expect_error(package_LDA_set(mods, mod_topics, 0.2)) - expect_error(package_LDA_set("ok", mod_topics, mod_seeds)) -}) - -test_that("check LDA_msg", { - expect_message(LDA_msg(2, 1, list())) - expect_error(LDA_msg(2, 0.5, list())) -}) - -test_that("Check LDA_controls_list", { - expect_is(LDA_set_control(), "list") - expect_equal(length(LDA_set_control()), 4) -}) diff --git a/tests/testthat/test-03-lda_plot.R b/tests/testthat/test-03-lda_plot.R deleted file mode 100644 index 5405e3ed..00000000 --- a/tests/testthat/test-03-lda_plot.R +++ /dev/null @@ -1,66 +0,0 @@ -context("Check LDA plot functions") -tenv <- "cran" - -data(rodents) -lda_data <- rodents$document_term_table -ldas <- LDA_set(lda_data, c(2, 4), 2, list(quiet = TRUE)) -lda <- ldas[[1]] -xtime <- rodents$newmoon - -test_that("check output from set_LDA_plot_colors", { - col_default <- set_LDA_plot_colors(x = lda) - expect_equal(col_default, c("#0D0887CC", "#FCCE25CC")) - col_A <- set_LDA_plot_colors(x = lda, option = "A") - expect_equal(col_A, c("#000004CC", "#FECE91CC")) - col_grey <- set_LDA_plot_colors(x = lda, cols = "grey") - expect_equal(col_grey, c("#000000", "#CCCCCC")) - col_grey_and_A <- set_LDA_plot_colors(x = lda, cols = "grey", option = "A") - expect_equal(col_grey_and_A, c("#000000", "#CCCCCC")) - expect_error(set_LDA_plot_colors(x = lda, 1)) - col_extra <- set_LDA_plot_colors(x = lda, cols = 1:3) - expect_equal(col_extra, 1:2) -}) - -test_that("check plotting of plot.LDA", { - if (tenv == "cran"){ - expect_silent(plot(x = lda)) - expect_silent(plot(x = lda, xtime = xtime, xname = "New Moon")) - } else{ - plot(x = lda) - LDA_plot <- recordPlot() - vdiffr::expect_doppelganger("Base LDA plot", LDA_plot) - plot(x = lda, xtime = xtime, xname = "New Moon") - LDA_plot_xtime <- recordPlot() - vdiffr::expect_doppelganger("LDA plot with time x", LDA_plot_xtime) - } -}) - -test_that("check plotting of plot.LDA_set", { - sellda <- select_LDA(ldas) - if (tenv == "cran"){ - expect_silent(plot(x = sellda)) - } else{ - plot(x = sellda) - LDA_set_plot <- recordPlot() - vdiffr::expect_doppelganger("Base LDA_set selected plot", LDA_set_plot) - } -}) - -test_that("check LDA plot panels", { - cols <- set_LDA_plot_colors(x = lda, cols = NULL, option = "E") - - if (tenv == "cran"){ - expect_silent(LDA_plot_top_panel(x = lda, cols)) - expect_silent(LDA_plot_bottom_panel(x = lda, xtime = NULL, - xname = NULL, cols)) - } else{ - LDA_plot_top_panel(x = lda, cols) - LDA_top_plot <- recordPlot() - vdiffr::expect_doppelganger("Base LDA plot top panel", LDA_top_plot) - LDA_plot_bottom_panel(x = lda, xtime = NULL, xname = NULL, cols) - LDA_bottom_plot <- recordPlot() - vdiffr::expect_doppelganger("Base LDA plot bottom panel", LDA_bottom_plot) - } -}) - - diff --git a/tests/testthat/test-04-LDA_TS.R b/tests/testthat/test-04-LDA_TS.R deleted file mode 100644 index 2fb3d2c2..00000000 --- a/tests/testthat/test-04-LDA_TS.R +++ /dev/null @@ -1,74 +0,0 @@ -context("Check LDA_TS functions") - -data(rodents) -lda_data <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table - mod0 <- LDA_TS(rodents, - topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 0, - timename = "newmoon", - control = list(nit = 10)) - mod1 <- LDA_TS(rodents, - topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 1, - timename = "newmoon", - control = list(nit = 50)) - - -test_that("LDA_TS on 0 changepoints", { - expect_is(mod0, "LDA_TS") - expect_equal(length(names(mod0)), 4) - expect_is(mod0[[4]], "TS_fit") -}) - -test_that("LDA_TS on 1 changepoints", { - - expect_is(mod1, "LDA_TS") - expect_equal(length(names(mod1)), 4) - expect_is(mod1[[4]], "TS_fit") -}) - -test_that("check print on LDA_TS", { - expect_output(print(mod1)) -}) - -test_that("Check LDA_TS_controls_list", { - expect_is(LDA_TS_control(), "list") - expect_equal(length(LDA_TS_control()), 3) -}) - -test_that("Check conform_LDA_TS_data", { - expect_is(conform_LDA_TS_data(rodents), "list") - expect_is(conform_LDA_TS_data(rodents[[1]]), "list") - expect_message(conform_LDA_TS_data(rodents[[1]])) - expect_error(conform_LDA_TS_data(list(term1 = 1, term2 = 2))) - - expect_is(conform_LDA_TS_data(list(term = rodents[[1]])), "list") - expect_message(conform_LDA_TS_data(list(term = rodents[[1]]))) - - expect_error(conform_LDA_TS_data(list(term = rodents[[1]], covariate1 = 1, - covariate2 = 2))) - expect_error(conform_LDA_TS_data("ok")) -}) - -test_that("Check package_LDA_TS", { - topics <- 2 - nseeds <- 1 - formulas <- ~ 1 - nchangepoints <- 1 - weights <- document_weights(lda_data) - timename <- "newmoon" - control <- LDA_TS_control(nit = 50) - LDAs <- LDA_set(lda_data, topics, nseeds, - control$LDA_set_control) - sel_LDA <- select_LDA(LDAs, control$LDA_set_control) - TSs <- TS_on_LDA(sel_LDA, document_covariate_table, formulas, nchangepoints, - timename, weights, control$TS_control) - sel_TSs <- select_TS(TSs, control$TS_control) - - expect_is(package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs), "LDA_TS") - expect_equal(length(package_LDA_TS(LDAs, sel_LDA, TSs, sel_TSs)), 4) - expect_error(package_LDA_TS()) - expect_error(package_LDA_TS("ok", sel_LDA, TSs, sel_TSs)) - expect_error(package_LDA_TS(LDAs, "ok", TSs, sel_TSs)) - expect_error(package_LDA_TS(LDAs, sel_LDA, "ok", sel_TSs)) - expect_error(package_LDA_TS(LDAs, sel_LDA, TSs, "ok")) -}) diff --git a/tests/testthat/test-05-LDA_TS_plots.R b/tests/testthat/test-05-LDA_TS_plots.R deleted file mode 100644 index 44bd0ea3..00000000 --- a/tests/testthat/test-05-LDA_TS_plots.R +++ /dev/null @@ -1,36 +0,0 @@ -context("Check LDA_TS plot functions") -tenv <- "cran" - -data(rodents) -lda_data <- rodents$document_term_table -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table - -mod <- LDA_TS(rodents, - topics = 2, nseeds = 1, formulas = ~ 1, nchangepoints = 1, - timename = "newmoon", - control = list(nit = 100, seed = 1)) - -test_that("check plot for LDA_TS", { - if (tenv == "cran"){ - expect_silent(plot(mod, interactive = FALSE)) - } else{ - plot(mod, interactive = FALSE) - LDA_TS_set_plot <- recordPlot() - vdiffr::expect_doppelganger("Base LDA_TS non-interactive plot", - LDA_TS_set_plot) - } -}) - -test_that("check color list creation function", { - expect_equal(length(set_LDA_TS_plot_cols()), 2) - expect_equal(names(set_LDA_TS_plot_cols()), c("LDA", "TS")) - expect_equal(length(set_LDA_TS_plot_cols()[[1]]), 3) - expect_equal(length(set_LDA_TS_plot_cols()[[2]]), 2) - expect_equal(names(set_LDA_TS_plot_cols()[[2]]), c("rho", "gamma")) - expect_equal(length(set_LDA_TS_plot_cols()[[2]][[1]]), 3) - expect_equal(names(set_LDA_TS_plot_cols()[[2]][[1]]), - c("cols", "option", "alpha")) - expect_equal(names(set_LDA_TS_plot_cols()[[2]][[2]]), - c("cols", "option", "alpha")) -}) diff --git a/tests/testthat/test-06-multinom_TS.R b/tests/testthat/test-06-multinom_TS.R deleted file mode 100644 index be6416b6..00000000 --- a/tests/testthat/test-06-multinom_TS.R +++ /dev/null @@ -1,95 +0,0 @@ -context("Check multinomial TS functions") - -data(rodents) -lda_data <- rodents$document_term_table -lda <- LDA_set(lda_data, c(4), nseeds = 1, list(quiet = TRUE)) -dct <- rodents$document_covariate_table -mts_data <- data.frame(dct) -mts_data$gamma <- lda[[1]]@gamma -timename <- "newmoon" - -test_that("check packaging of chunk fits", { - TS_chunk_memo <- memoise_fun(multinom_TS_chunk, TRUE) - chunks <- prep_chunks(data = mts_data, changepoints = c(20,50), - timename = timename) - nchunks <- nrow(chunks) - fits <- vector("list", length = nchunks) - for (i in 1:nchunks){ - fits[[i]] <- TS_chunk_memo(data = mts_data, formula = gamma ~ 1, - chunk = chunks[i, ], timename = timename, - weights = NULL) - } - packaged <- package_chunk_fits(chunks, fits) - expect_is(packaged, "multinom_TS_fit") - expect_equal(round(packaged$logLik, 2), -516.58) -}) - -test_that("check logLik for multinom_TS_fit", { - mts <- multinom_TS(data = mts_data, formula = gamma~1, - changepoints = c(20,50), timename = "newmoon", weights = NULL) - expect_is(logLik(mts), "logLik") - expect_equal(round(as.numeric(logLik(mts))), -517) -}) - -test_that("check good output from multinom_TS", { - mts <- multinom_TS(data = mts_data, formula = gamma~1, - changepoints = c(20,50), timename = "newmoon", weights = NULL) - expect_is(mts, "list") - expect_is(mts, "multinom_TS_fit") - expect_equal(length(mts), 3) - expect_equal(names(mts), c("chunk models", "logLik", "chunks")) - expect_equal(length(mts$"chunk models"), 3) - expect_is(mts$logLik, "numeric") -}) - -test_that("check check_changepoints", { - expect_silent(check_changepoints()) - expect_silent(check_changepoints(1)) - expect_error(check_changepoints("ok")) - expect_error(check_changepoints(0.3)) -}) - -test_that("check failed output from multinom_TS", { - mts <- multinom_TS(data = mts_data, formula = gamma~1, - changepoints = c(50,40), timename = "newmoon", weights = NULL) - expect_is(mts, "list") - expect_equal(length(mts), 3) - expect_equal(names(mts), c("chunk models", "logLik", "chunks")) - expect_equal(mts$"chunk models", NA) - expect_equal(mts$logLik, -Inf) -}) - -test_that("check bad change point location catching of - verify_changepoint_locations", { - expect_equal(verify_changepoint_locations(mts_data, -1, "newmoon"), FALSE) - expect_equal(verify_changepoint_locations(mts_data, 1e5, "newmoon"), FALSE) - expect_equal(verify_changepoint_locations(mts_data, NULL, "newmoon"), TRUE) - expect_equal(verify_changepoint_locations(mts_data, 100, "newmoon"), TRUE) - expect_equal(verify_changepoint_locations( - mts_data, c(10, 50, 100), "newmoon"), TRUE) -}) - -test_that("check memoization of multinom_TS_chunk", { - expect_is(memoise_fun(multinom_TS_chunk, TRUE), "memoised") -}) - -chunk <- data.frame(start = 0, end = 40) -test_that("check multinom_TS_chunk", { - expect_is(multinom_TS_chunk(mts_data, "gamma ~ 1", chunk, timename, NULL), - "multinom") -}) - -test_that("check memoised multinom_TS_chunk", { - multinom_TS_chunk_memo <- memoise_fun(multinom_TS_chunk, TRUE) - expect_is( - multinom_TS_chunk_memo(mts_data, "gamma ~ 1", chunk, timename), - "multinom") -}) - -test_that("check prepping of chunks", { - expect_is(prep_chunks(mts_data, NULL, "newmoon"), "data.frame") - expect_equal(prep_chunks(mts_data, NULL, "newmoon")$start, 1) - expect_equal(prep_chunks(mts_data, NULL, "newmoon")$end, 467) - expect_equal(prep_chunks(mts_data, c(10), "newmoon")$start, c(1, 11)) - expect_equal(prep_chunks(mts_data, c(10), "newmoon")$end, c(10, 467)) -}) diff --git a/tests/testthat/test-07-ptMCMC.R b/tests/testthat/test-07-ptMCMC.R deleted file mode 100644 index 372fa947..00000000 --- a/tests/testthat/test-07-ptMCMC.R +++ /dev/null @@ -1,262 +0,0 @@ -context("Check ptMCMC functions") - -# use old RNG method for sample (for test reproducibility) -if ("sample.kind" %in% names(formals(RNGkind))){ - suppressWarnings(RNGkind(sample.kind = "Rounding")) -} - -data(rodents) -lda_data <- rodents$document_term_table -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table -topics <- 2 -nseeds <- 1 -formulas <- ~ 1 -nchangepoints <- 1 -weights <- document_weights(document_term_table) -timename <- "newmoon" -LDAs <- LDA_set(document_term_table, topics, nseeds) -LDA_models <- select_LDA(LDAs) -control <- list(nit = 20, seed = 1) -mods <- expand_TS(LDA_models, formulas, nchangepoints) -formula <- mods$formula[[1]] -nchangepoints <- mods$nchangepoints[1] -data <- prep_TS_data(document_covariate_table, LDA_models, mods, 1) - -set.seed(1) -rho_dist0 <- est_changepoints(data, formula, nchangepoints = 0, timename, - weights, control) -rho_dist <- est_changepoints(data, formula, nchangepoints, timename, - weights, control) -eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, - control) - - -saves <- prep_saves(nchangepoints, control) -inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, weights, - control) -cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) -ids <- prep_ids(control) - -test_that("check prep_proposal_dist", { - pd <- prep_proposal_dist(nchangepoints, control) - expect_equal(length(pd), 2) - expect_equal(dim(pd[[1]]), c(20, 6)) - pd2 <- prep_proposal_dist(0, control) - expect_equal(length(pd2), 2) - expect_equal(dim(pd2[[1]]), c(20, 6)) - expect_error(prep_proposal_dist("ok", control)) - expect_error(prep_proposal_dist(nchangepoints, "ok")) -}) - - - -test_that("check prep_ptMCMC_inputs", { - inpts <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, weights, - control) - expect_is(inpts, "ptMCMC_inputs") - expect_equal(length(inpts[[2]]), 6) - - expect_error( - prep_ptMCMC_inputs("ok", formula, nchangepoints, timename, weights, - control)) - expect_error( - prep_ptMCMC_inputs(data, "ok", nchangepoints, timename, weights, control)) - expect_error( - prep_ptMCMC_inputs(data, formula, "ok", timename, weights, control)) - expect_error( - prep_ptMCMC_inputs(data, formula, nchangepoints, timename, "ok", control)) - expect_error( - prep_ptMCMC_inputs(data, formula, nchangepoints, "ok", weights, control)) - expect_error(suppressWarnings( - prep_ptMCMC_inputs(data, formula, nchangepoints, timename, weights, - "ok"))) -}) - - - -test_that("check prep_ids", { - expect_equal(prep_ids(TS_control()), 1:6) - expect_error(prep_ids("ok")) - expect_error(prep_ids(list(ntemps = 0.3))) -}) -test_that("check update_ids", { - set.seed(123) - steps <- step_chains(1, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - ids <- update_ids(ids, swaps) - expect_equal(ids, c(1, 2, 4, 3, 5, 6)) -}) - - -test_that("check proposed_step_mods", { - pdist <- inputs$pdist - ntemps <- length(inputs$temps) - selection <- cbind(pdist$which_steps[1, ], 1:ntemps) - prop_changepts <- cpts$changepts - curr_changepts_s <- cpts$changepts[selection] - prop_changepts_s <- curr_changepts_s + pdist$steps[1, ] - if(all(is.na(prop_changepts_s))){ - prop_changepts_s <- NULL - } - prop_changepts[selection] <- prop_changepts_s - mods <- proposed_step_mods(prop_changepts, inputs) - - expect_is(mods, "list") - expect_is(mods[[1]], "multinom_TS_fit") - expect_is(mods[[1]][[1]], "list") - expect_is(mods[[1]][[1]][[1]], "multinom") - expect_equal(round(mods[[1]][[1]][[1]]$deviance, 1), 43.9) -}) - -test_that("check propose_step", { - prop_step <- propose_step(1, cpts, inputs) - expect_equal(length(prop_step), 2) - expect_equal(names(prop_step), c("changepts", "lls")) - expect_equal(prop_step[[1]][1,1], 198) -}) -test_that("check eval_step", { - set.seed(1) - prop_step <- propose_step(1, cpts, inputs) - accept_step <- eval_step(1, cpts, prop_step, inputs) - expect_equal(accept_step, c(T, F, T, T, T, T)) -}) -test_that("check take_step", { - prop_step <- propose_step(1, cpts, inputs) - accept_step <- eval_step(1, cpts, prop_step, inputs) - taken <- take_step(cpts, prop_step, accept_step) - expect_equal(length(taken), 3) - expect_equal(names(taken), c("changepts", "lls", "accept_step")) - expect_equal(taken[[3]][3], TRUE) -}) - - -test_that("check step_chains", { - steps <- step_chains(1, cpts, inputs) - expect_equal(length(steps), 3) - expect_equal(names(steps), c("changepts", "lls", "accept_step")) - expect_equal(steps[[3]][3], TRUE) -}) - -test_that("check swap_chains", { - steps <- step_chains(1, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - expect_equal(length(swaps), 4) - expect_equal(names(swaps), c("changepts", "lls", "ids", "accept_swap")) - expect_equal(swaps[[3]][3], 4) -}) - -test_that("check count_trips", { - set.seed(1) - expect_equal(length(count_trips(rho_dist$ids)), 2) - expect_equal(names(count_trips(rho_dist$ids)), - c("trip_counts", "trip_rates")) - expect_equal(count_trips(rho_dist$ids)[[1]][[3]], 0) - - expect_equal(count_trips(matrix(1, 6, 100))[[1]][3], 0) -}) - -test_that("check diagnose_ptMCMC", { - set.seed(1) - expect_equal(diagnose_ptMCMC(rho_dist0), NULL) - expect_equal(length(diagnose_ptMCMC(rho_dist)), 4) - expect_equal(names(diagnose_ptMCMC(rho_dist)), - c("step_acceptance_rate", "swap_acceptance_rate", "trip_counts", - "trip_rates")) - expect_equal(diagnose_ptMCMC(rho_dist)[[1]][1], 0.25) -}) - -test_that("check prep_saves", { - svs <- prep_saves(nchangepoints, control) - expect_is(svs, "list") - expect_equal(length(svs), 5) - expect_equal(dim(svs[[1]]), c(1, 6, 20)) - expect_error(prep_saves("ok", control)) - expect_error(prep_saves(nchangepoints, "ok")) -}) -test_that("check update_saves", { - set.seed(1) - saves <- prep_saves(nchangepoints, control) - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, - timename, weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - steps <- step_chains(1, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(1, saves, steps, swaps) - expect_is(saves, "list") - expect_equal(length(saves), 5) - expect_equal(dim(saves[[1]]), c(1, 6, 20)) - expect_equal(saves[[1]][1, 1, 1], 309) -}) - -test_that("check process_saves", { - set.seed(1) - saves <- prep_saves(nchangepoints, control) - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, - timename, weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - for(i in 1:control$nit){ - steps <- step_chains(i, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - saves <- update_saves(i, saves, steps, swaps) - cpts <- update_cpts(cpts, swaps) - ids <- update_ids(ids, swaps) - } - out <- process_saves(saves, control) - expect_is(out, "list") - expect_equal(length(out), 5) - expect_equal(dim(out[[1]]), c(1, 6, 20)) - expect_equal(out[[1]][1, 1, 1], 309) - expect_equal(out[[1]][1, 1, 20], 270) - out2 <- process_saves(saves, list(burnin = 10, nit = 20)) - expect_is(out2, "list") - expect_equal(length(out2), 5) - expect_equal(dim(out2[[1]]), c(1, 6, 10)) - expect_equal(out2[[1]][1, 1, 1], 309) - expect_equal(out2[[1]][1, 1, 3], 301) -}) - -test_that("check prep_cpts", { - set.seed(1) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - expect_is(cpts, "list") - expect_equal(length(cpts), 2) - expect_equal(cpts[[1]][1,1], 268) - - expect_error(prep_cpts("ok", formula, nchangepoints, timename, weights, - control)) - expect_error(prep_cpts(data, "ok", nchangepoints, timename, weights, - control)) - expect_error(prep_cpts(data, formula, "ok", timename, weights, control)) - expect_error(prep_cpts(data, formula, nchangepoints, "ok", weights, - control)) - expect_error(prep_cpts(data, formula, nchangepoints, timename, "ok", - control)) - expect_error(prep_cpts(data, formula, nchangepoints, timename, weights, - "ok")) -}) -test_that("check update_cpts", { - set.seed(1) - saves <- prep_saves(nchangepoints, control) - inputs <- prep_ptMCMC_inputs(data, formula, nchangepoints, timename, - weights, control) - cpts <- prep_cpts(data, formula, nchangepoints, timename, weights, control) - ids <- prep_ids(control) - steps <- step_chains(1, cpts, inputs) - swaps <- swap_chains(steps, inputs, ids) - cpts <- update_cpts(cpts, swaps) - expect_is(cpts, "list") - expect_equal(length(cpts), 2) - expect_equal(cpts[[1]][1,1], 309) -}) - -test_that("check prep_temp_sequence", { - expect_equal(length(prep_temp_sequence()), 6) - expect_equal(length(prep_temp_sequence(list(ntemps = 9))), 9) - expect_equal(round(prep_temp_sequence()[3], 2), 8) - expect_equal(round(prep_temp_sequence(list(q = 1))[3], 1), 2.8) - expect_error(prep_temp_sequence(123)) -}) - diff --git a/tests/testthat/test-08-simulate.R b/tests/testthat/test-08-simulate.R deleted file mode 100644 index 4ab35466..00000000 --- a/tests/testthat/test-08-simulate.R +++ /dev/null @@ -1,92 +0,0 @@ -context("Check simulate functions") - -# use old RNG method for sample (for test reproducibility) -if ("sample.kind" %in% names(formals(RNGkind))){ - suppressWarnings(RNGkind(sample.kind = "Rounding")) -} - -test_that("check sim_LDA_data", { - N <- c(10, 22, 15, 31) - alpha <- 1.2 - Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - Beta2 <- matrix(c(0.1, 0.2, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - Beta3 <- matrix(c(0.3, -0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - Beta4 <- matrix(c(0.1, 0.1, 0.1, 0.1, 0.4, 0.2), 1, 6, byrow = TRUE) - Theta <- matrix(c(0.2, 0.8, 0.8, 0.2, 0.5, 0.5, 0.9, 0.1), 4, 2, - byrow = TRUE) - Theta2 <- matrix(c(1.8, -0.8, 0.8, 0.2, 0.5, 0.5, 0.9, 0.1), 4, 2, - byrow = TRUE) - Theta3 <- matrix(c(0.9, 0.8, 0.8, 0.2, 0.5, 0.5, 0.9, 0.1), 4, 2, - byrow = TRUE) - - expect_error(sim_LDA_data(N, Beta)) - expect_error(sim_LDA_data(N, Beta, Theta)) - - expect_is(sim_LDA_data(N, Beta, alpha), "matrix") - expect_is(sim_LDA_data(N, Beta, Theta = Theta), "matrix") - - expect_equal(dim(sim_LDA_data(N, Beta, alpha)), c(4,3)) - expect_equal(round(sim_LDA_data(N, Beta, alpha, seed = 1), 2)[1,1], 2) - expect_equal(round(sim_LDA_data(N, Beta, Theta = Theta, seed = 1), 2)[1,1], - 1) - - expect_error(sim_LDA_data("ok", Beta, alpha)) - expect_error(sim_LDA_data(N + 1.1, Beta, alpha)) - expect_error(sim_LDA_data(matrix(1, 2, 2), Beta, alpha)) - expect_error(sim_LDA_data(N, "ok", alpha)) - expect_error(sim_LDA_data(N, Beta2, alpha)) - expect_error(sim_LDA_data(N, Beta3, alpha)) - expect_error(sim_LDA_data(N, alpha, alpha)) - expect_error(sim_LDA_data(N, Beta, "ok")) - expect_error(sim_LDA_data(N, Beta, rep(alpha, 2))) - expect_error(sim_LDA_data(N, Beta, -1)) - expect_error(sim_LDA_data(N, Beta, Theta = "ok")) - expect_error(sim_LDA_data(N, Beta, Theta = Theta2)) - expect_error(sim_LDA_data(N, Beta, Theta = Theta3)) - - expect_is(sim_LDA_data(N, Beta4, alpha), "matrix") - expect_equal(dim(sim_LDA_data(N, Beta4, alpha)), c(4,6)) - expect_equal(round(sim_LDA_data(N, Beta4, alpha, seed = 1), 2)[1,1], 1) - -}) - -test_that("check sim_TS_data", { - tD <- c(1, 3, 4, 6) - rho <- 3 - X <- cbind(rep(1, 4), 1:4) - Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) - expect_is(sim_TS_data(X, Eta, rho, tD), "matrix") - expect_equal(dim(sim_TS_data(X, Eta, rho, tD)), c(4,2)) - expect_equal(round(sim_TS_data(X, Eta, rho, tD), 2)[1,1], 0.18) - - expect_error(sim_TS_data(X, Eta, rho, "ok")) - expect_error(sim_TS_data(X, Eta, rho, matrix(1, 2, 2))) - expect_error(sim_TS_data(X, Eta, rho, tD + 0.1)) - expect_error(sim_TS_data("ok", Eta, rho, tD)) - expect_error(sim_TS_data(array(1, dim=c(2,2,2)), Eta, rho, tD)) - expect_error(sim_TS_data(X, "ok", rho, tD)) - expect_error(sim_TS_data(X, array(1, dim=c(2,2,2)), rho, tD)) - expect_error(sim_TS_data(X, Eta, "ok", tD)) - expect_error(sim_TS_data(X, Eta, 1.1, tD)) - expect_error(sim_TS_data(X, Eta, matrix(1, 2, 1), tD)) - expect_is(sim_TS_data(X, Eta[1:2,], NULL, tD), "matrix") - - expect_error(sim_TS_data(X, Eta, rho, tD, -1)) - expect_error(sim_TS_data(X, Eta, rho, tD, c(1,2))) - expect_error(sim_TS_data(X, Eta, rho, tD, "ok")) -}) - -test_that("check sim_LDA_TS_data", { - - N <- c(10, 22, 15, 31) - tD <- c(1, 3, 4, 6) - rho <- 3 - X <- cbind(rep(1, 4), 1:4) - Eta <- cbind(c(0.5, 0.3, 0.9, 0.5), c(1.2, 1.1, 0.1, 0.5)) - Beta <- matrix(c(0.1, 0.1, 0.8, 0.2, 0.6, 0.2), 2, 3, byrow = TRUE) - err <- 1 - sims <- sim_LDA_TS_data(N, Beta, X, Eta, rho, tD, err, seed = 1) - expect_is(sims, "matrix") - expect_equal(dim(sims), c(4, 3)) - expect_equal(round(sims, 2)[1,1], 1) -}) \ No newline at end of file diff --git a/tests/testthat/test-09-TS.R b/tests/testthat/test-09-TS.R deleted file mode 100644 index 85535ca8..00000000 --- a/tests/testthat/test-09-TS.R +++ /dev/null @@ -1,227 +0,0 @@ -context("Check TS functions") - -data(rodents) -lda_data <- rodents$document_term_table -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table -topics <- 2 -nseeds <- 1 -formulas <- ~ 1 -nchangepoints <- 1 -weights <- document_weights(document_term_table) -LDAs <- LDA_set(document_term_table, topics, nseeds) -LDA_models <- select_LDA(LDAs) -control <- list(nit = 20, seed = 1) -timename <- "newmoon" -mods <- expand_TS(LDA_models, formulas, nchangepoints) -formula <- mods$formula[[1]] -nchangepoints <- mods$nchangepoints[1] -data <- prep_TS_data(document_covariate_table, LDA_models, mods, 1) -TSmod <- TS(data, formula, nchangepoints, timename, weights, control) - -rho_dist <- est_changepoints(data, formula, nchangepoints, timename, weights, - control) -eta_dist <- est_regressors(rho_dist, data, formula, timename, weights, - control) -set.seed(1) -test_that("check measure_eta_vcov", { - expect_is(measure_eta_vcov(eta_dist), "matrix") - expect_equal(round(measure_eta_vcov(eta_dist)[1, 1], 2), 0.32) - expect_error(measure_eta_vcov("ok")) -}) - -test_that("check measure_rho_vcov", { - set.seed(1) - nchangepoints <- dim(rho_dist$cpts)[1] - if (is.null(nchangepoints)){ - nchangepoints <- 0 - mod <- multinom_TS(data, formula, changepoints = NULL, - timename, weights, control) - mod <- mod[[1]][[1]] - lls <- as.numeric(logLik(mod)) - rhos <- NULL - } else{ - lls <- rho_dist$lls[1, ] - rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) - } - expect_is(measure_rho_vcov(rhos), "matrix") - expect_equal(round(measure_rho_vcov(rhos)[1, 1], 1), 572.4) - expect_error(measure_rho_vcov("ok")) -}) - - -test_that("check summarize_etas", { - sum_e <- summarize_etas(eta_dist) - expect_is(sum_e, "data.frame") - expect_equal(round(sum_e[1, 1], 2), 2.52) - expect_equal(summarize_etas(eta_dist[1:3, ])$AC10[1], as.factor("-")) - expect_error(summarize_etas("ok")) - expect_error(summarize_etas(eta_dist, LDA_controls_list())) -}) - -test_that("check summarize_rhos", { - set.seed(1) - nchangepoints <- dim(rho_dist$cpts)[1] - if (is.null(nchangepoints)){ - nchangepoints <- 0 - mod <- multinom_TS(data, formula, changepoints = NULL, - timename, weights, control) - mod <- mod[[1]][[1]] - lls <- as.numeric(logLik(mod)) - rhos <- NULL - } else{ - lls <- rho_dist$lls[1, ] - rhos <- t(array(rho_dist$cpts[ , 1, ], dim = dim(rho_dist$cpts)[c(1, 3)])) - } - - sum_r <- summarize_rhos(rhos) - expect_is(sum_r, "data.frame") - expect_equal(round(sum_r[1, 1], 2), 253) - expect_error(summarize_rhos("ok")) - expect_error(summarize_rhos(rhos, LDA_controls_list())) -}) - - - -test_that("check est_changepoints", { - set.seed(1) - rhos <- est_changepoints(data, formula, nchangepoints, timename, weights, - control) - expect_is(rhos, "list") - expect_equal(length(rhos), 5) - expect_equal(names(rhos), - c("cpts", "lls", "ids", "step_accepts", "swap_accepts")) - expect_equal(dim(rhos[[1]]), c(1, 6, 20)) - expect_equal(round(sum(rhos$lls), 1), -29033.3) - - expect_error(est_changepoints(data, formula, nchangepoints, - timename, weights,"ok")) - expect_error(est_changepoints(data, formula, nchangepoints, "ok", weights, - control)) - expect_error(est_changepoints(data, formula, nchangepoints, "timename", - "ok", control)) - expect_error(est_changepoints(data, formula, "ok", - timename, weights, control)) - expect_error(est_changepoints(data, "ok", nchangepoints, - timename, weights, control)) - expect_error(est_changepoints("ok", formula, nchangepoints, - timename, weights, control)) -}) - -test_that("check est_regressors", { - set.seed(1) - rhos <- est_changepoints(data, formula, nchangepoints, - timename, weights, control) - etas <- est_regressors(rhos, data, formula, timename, weights, control) - set.seed(1) - rhos2 <- est_changepoints(data, formula, nchangepoints = 2, - timename, weights, list(nit = 20, seed = 1)) - etas2 <- est_regressors(rhos2, data, formula, timename, weights, - list(nit = 20, seed = 1)) - - expect_is(etas, "matrix") - expect_equal(colnames(etas), c("1_2:(Intercept)", "2_2:(Intercept)")) - expect_equal(dim(etas), c(20, 2)) - expect_equal(round(sum(etas[ , 1]), 1), 35.7) - expect_equal(round(sum(etas2[1:10 , 1]), 1), 15.2) - expect_error(est_regressors("ok", data, formula, timename,weights, - control)) - expect_error(est_regressors(rhos, data, formula, weights,timename, "ok")) - expect_error(est_regressors(rhos, data, formula, "ok", weights, control)) - expect_error(est_regressors(rhos, data, timename, "ok", - timename, control)) - expect_error(est_regressors(rhos, "ok", formula, timename, weights,control)) - expect_error(est_regressors(rhos, data, "ok", timename, weights,control)) - rhosx <- rhos - names(rhosx)[1] <- "ok" - expect_error(est_regressors(rhosx, data, formula, timename, weights, - control)) -}) - -test_that("check package_TS", { - summ <- package_TS(data, formula, timename, weights, control, - rho_dist, eta_dist) - expect_is(summ, "TS_fit") - expect_equal(length(summ), 17) - expect_equal(names(summ)[3], "nchangepoints") - expect_error( - package_TS("ok", formula, timename, weights, control, rho_dist, - eta_dist)) - expect_error(package_TS(data, formula, "ok", weights,control, rho_dist, - eta_dist)) - expect_error(package_TS(data, "ok", timename, weights, control, rho_dist, - eta_dist)) - - expect_error(package_TS(data, formula, timename, weights,"ok", rho_dist, - eta_dist)) - expect_error(package_TS(data, formula, timename,weights, control, "ok", - eta_dist)) - expect_error(package_TS(data, formula, timename,weights, control, - rho_dist, "ok")) - expect_error(package_TS("ok", formula, timename,weights, control, - rho_dist, eta_dist)) -}) - -test_that("check TS", { - expect_is(TSmod, "TS_fit") - expect_equal(length(TSmod), 17) - expect_equal(TSmod$nchangepoints, 1) - expect_error(TS(data, formula, nchangepoints = 0, timename, weights, "ok")) - expect_error(TS(data, formula, nchangepoints = 0, "ok", weights, control)) - expect_error(TS(data, "ok", nchangepoints = 0, timename, "ok", control)) - expect_error(TS("ok", formula, nchangepoints = 0, timename, weights, - control)) - expect_error(TS(data, formula, "ok", timename, weights, control)) -}) - -test_that("check check_TS_inputs", { - expect_silent(check_TS_inputs(data, formula, nchangepoints, - timename, weights, control)) - expect_error(check_TS_inputs(data, formula, nchangepoints, - timename, weights, "ok")) - expect_error(check_TS_inputs(data, formula, nchangepoints, - timename, "ok", control)) - expect_error(check_TS_inputs(data, formula, "ok", - timename, weights, control)) - expect_error(check_TS_inputs(data, "ok", nchangepoints, - timename, weights, control)) - expect_error(check_TS_inputs("ok", formula, nchangepoints, - timename, weights, control)) - expect_error(check_TS_inputs(data, formula, nchangepoints, - "ok",weights, control)) -}) - -test_that("check print for TS_fit", { - expect_output(print(TSmod)) -}) - -test_that("check progress bar functions", { - expect_is(prep_pbar(), "progress_bar") - expect_silent(prep_pbar(list(quiet = TRUE))) - expect_error(prep_pbar("ok")) - expect_error(prep_pbar(list(), "ok")) - expect_error(prep_pbar(nr = 0.5)) - pp <- prep_pbar() - expect_is(update_pbar(pp), "progress_bar") - expect_silent(update_pbar(pp, list(quiet = TRUE))) - - expect_error(update_pbar(pp, "ok")) - expect_error(update_pbar("ok", list())) -}) - - -test_that("check AIC for TS_fit", { - expect_equal(round(AIC(TSmod), 1), 404.2) -}) - -test_that("check check_formula", { - expect_silent(check_formula(data, formula)) - expect_error(check_formula(data, ~1)) - expect_error(check_formula(data, ~ok)) - expect_error(check_formula(document_covariate_table, formula)) -}) - -test_that("check TS_control", { - expect_is(TS_control(), "list") - expect_equal(length(TS_control()), 16) -}) diff --git a/tests/testthat/test-10-TS_on_LDA.R b/tests/testthat/test-10-TS_on_LDA.R deleted file mode 100644 index 17157cd5..00000000 --- a/tests/testthat/test-10-TS_on_LDA.R +++ /dev/null @@ -1,230 +0,0 @@ -context("Check TS_on_LDA functions") - -data(rodents) -lda_data <- rodents$document_term_table -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table -topics <- 2 -nseeds <- 1 -formulas <- ~ 1 -nchangepoints <- 0 -weights <- document_weights(document_term_table) -timename <- "newmoon" -LDAs <- LDA_set(document_term_table, topics, nseeds) -LDA_models <- select_LDA(LDAs) - mods <- TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints = 0:1, timename, weights, - control = list(nit = 20)) - -test_that("check prep_TS_data", { - mods <- expand_TS(LDA_models, formulas=c(~1, ~sin_year, ~newmoon), - nchangepoints = 0:1) - nmods <- nrow(mods) - TSmods <- vector("list", nmods) - - for (i in 1:nmods){ - data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, i) - expect_is(data_i, "data.frame") - expect_equal(dim(data_i), c(436, 4)) - } - - expect_error(prep_TS_data(document_covariate_table, LDA_models, mods, "ok")) - expect_error(prep_TS_data(document_covariate_table, LDA_models, "ok", i)) - expect_error(prep_TS_data(document_covariate_table, "ok", mods, i)) - expect_error(prep_TS_data("ok", LDA_models, mods, i)) - - data_1 <- prep_TS_data(document_covariate_table, LDA_models[[1]], mods, 1) - data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, 1) - expect_equal(data_1, data_i) -}) - -test_that("check select_TS", { - - sel_mod <- select_TS(mods, list()) - - expect_equal(length(mods), 2) - expect_equal(length(sel_mod), 17) - expect_is(mods, "TS_on_LDA") - expect_is(sel_mod, "TS_fit") - expect_error(select_TS(mods, "ok")) - expect_error(select_TS("ok", list())) - - xxfun <- function(x){x} - expect_warning(select_TS(mods, list(selector = xxfun))) -}) - -test_that("check package_TS_on_LDA", { - mods <- expand_TS(LDA_models, formulas, nchangepoints = 0:1) - nmods <- nrow(mods) - TSmods <- vector("list", nmods) - - for(i in 1:nmods){ - print_model_run_message(mods, i, LDA_models, list()) - formula_i <- mods$formula[[i]] - nchangepoints_i <- mods$nchangepoints[i] - data_i <- prep_TS_data(document_covariate_table, LDA_models, mods, i) - TSmods[[i]] <- TS(data_i, formula_i, nchangepoints_i,timename, weights, - control = list(nit = 20)) - } - expect_is(package_TS_on_LDA(TSmods, LDA_models, mods), "TS_on_LDA") - expect_is(package_TS_on_LDA(TSmods, LDA_models[[1]], mods), "TS_on_LDA") - expect_error(package_TS_on_LDA(TSmods, LDA_models, "ok")) - expect_error(package_TS_on_LDA("ok", LDA_models, mods)) - expect_error(package_TS_on_LDA(TSmods, "ok", mods)) -}) - - -test_that("check TS_on_LDA", { - expect_is(mods, "TS_on_LDA") - expect_equal(length(mods), 2) - expect_is(mods[[1]], "TS_fit") - expect_is(mods[[2]], "TS_fit") - - expect_error(TS_on_LDA()) - expect_error(TS_on_LDA("ok", document_covariate_table, formulas, - nchangepoints, timename, weights, list())) - expect_error(TS_on_LDA(LDA_models, "ok", formulas, - nchangepoints, timename, weights, list())) - expect_error(TS_on_LDA(LDA_models, document_covariate_table, "ok", - nchangepoints, timename, weights, list())) - expect_error(TS_on_LDA(LDA_models, document_covariate_table, formulas, - "ok", timename, weights, list())) - expect_error(TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, "ok", list())) - expect_error(TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints, "ok", weights, list())) - expect_error(TS_on_LDA(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, weights, "ok")) -}) - - -test_that("check printing for TS_on_LDA", { - expect_output(print(mods)) -}) - -test_that("check print_model_run_message", { - mods <- expand_TS(LDA_models, formulas, nchangepoints) - expect_message(print_model_run_message(mods, 1, LDA_models, list())) - expect_silent(print_model_run_message(mods, 1, LDA_models, - control = list(quiet = TRUE))) -}) - -test_that("check expand_TS", { - exp_TS <- expand_TS(LDA_models, formulas, nchangepoints) - expect_is(exp_TS, "data.frame") - expect_equal(dim(exp_TS), c(1, 3)) - exp_TS <- expand_TS(LDA_models, c(~1, ~newmoon), 3:10) - expect_is(exp_TS, "data.frame") - expect_equal(dim(exp_TS), c(16, 3)) - exp_TS <- expand_TS(LDA_models[[1]], c(~1, ~newmoon), 3:10) - expect_is(exp_TS, "data.frame") - expect_equal(dim(exp_TS), c(16, 3)) - expect_error(expand_TS("ok", formulas, nchangepoints)) - expect_error(expand_TS(LDA_models, "ok", nchangepoints)) - expect_error(expand_TS(LDA_models, c("~1", "ok"), nchangepoints)) - expect_error(expand_TS(LDA_models, list("~1", "ok"), nchangepoints)) - expect_error(expand_TS(LDA_models, formulas, 2.5)) -}) - -test_that("check check_nchangepoints", { - expect_silent(check_nchangepoints(1)) - expect_silent(check_nchangepoints(0)) - expect_silent(check_nchangepoints(1:10)) - expect_error(check_nchangepoints(2.5)) - expect_error(check_nchangepoints(-1)) - expect_error(check_nchangepoints(NULL)) -}) - - -test_that("check check_weights", { - expect_equal(check_weights(TRUE), NULL) - expect_error(check_weights(FALSE)) - expect_silent(check_weights(weights)) - expect_silent(check_weights(1)) - expect_silent(check_weights(NULL)) - expect_error(check_weights("ok")) - expect_error(check_weights(-1)) - expect_warning(check_weights(100)) -}) - - -test_that("check check_LDA_models", { - expect_silent(check_LDA_models(LDA_models)) - expect_silent(check_LDA_models(LDA_models[[1]])) - expect_error(check_LDA_models("ok")) -}) - - -test_that("check check_document_covariate_table", { - expect_silent(check_document_covariate_table(document_covariate_table)) - expect_silent(check_document_covariate_table(document_covariate_table, - LDA_models = LDA_models)) - expect_silent(check_document_covariate_table(document_covariate_table, - LDA_models = LDAs)) - expect_silent(check_document_covariate_table(document_covariate_table, - document_term_table = document_term_table)) - expect_error(check_document_covariate_table(document_covariate_table, - LDA_models = 1)) - expect_error(check_document_covariate_table(document_covariate_table, - document_term_table = 1)) - expect_error(check_document_covariate_table(document_covariate_table = 1, - LDA_models = LDA_models)) - expect_error(check_document_covariate_table(document_covariate_table = 1, - document_term_table = document_term_table)) - expect_error(check_document_covariate_table(lm(1~1), LDA_models)) -}) - -test_that("check check_timename", { - expect_silent(check_timename(document_covariate_table, timename)) - expect_error(check_timename("ok", timename)) - expect_error(check_timename(document_covariate_table, "ok")) - expect_error(check_timename(document_covariate_table, 1)) - expect_error(check_timename(document_covariate_table, - rep(timename, 2))) - expect_error(check_timename(document_covariate_table, 1)) - expect_error(check_timename(data.frame(letters), "letters")) - - dct2 <- document_covariate_table - dct2[,timename] <- dct2[,timename] + 0.1 - expect_error(check_timename(dct2, timename)) -}) - -test_that("check check_formulas", { - expect_silent(check_formulas(formulas, document_covariate_table, list())) - expect_error(check_formulas("ok", document_covariate_table, list())) - expect_error(check_formulas(~newmoon, "ok", list())) - expect_error(check_formulas(c(~1, "ok"), - document_covariate_table, list())) - expect_error(check_formulas(list(~1, "ok"), - document_covariate_table, list())) - expect_error(check_formulas(formulas, document_covariate_table, "ok")) -}) - - -test_that("check check_TS_on_LDA_inputs", { - expect_silent( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, weights, list())) - expect_error( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, weights, "ok")) - expect_error( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - nchangepoints, timename, "ok", list())) - expect_error( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - "ok", weights, timename, weights, list())) - expect_error( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, "ok", - nchangepoints, timename, weights, list())) - expect_error( - check_TS_on_LDA_inputs(LDA_models, "ok", formulas, - nchangepoints, timename, weights, list())) - expect_error( - check_TS_on_LDA_inputs("ok", document_covariate_table, formulas, - nchangepoints, timename, weights, list())) - expect_error( - check_TS_on_LDA_inputs(LDA_models, document_covariate_table, formulas, - nchangepoints, "ok", weights, list())) - -}) diff --git a/tests/testthat/test-11-TS_plots.R b/tests/testthat/test-11-TS_plots.R deleted file mode 100644 index fbe92f54..00000000 --- a/tests/testthat/test-11-TS_plots.R +++ /dev/null @@ -1,193 +0,0 @@ -context("Check TS plot functions") -tenv <- "cran" - -data(rodents) -lda_data <- rodents$document_term_table -document_term_table <- rodents$document_term_table -document_covariate_table <- rodents$document_covariate_table -topics <- 2 -nseeds <- 1 -formulas <- ~ 1 -nchangepoints <- 1 -weights <- document_weights(document_term_table) -LDAs <- LDA_set(document_term_table, topics, nseeds) -LDA_models <- select_LDA(LDAs) -control <- list(nit = 20, seed = 1) -timename <- "newmoon" -mods <- expand_TS(LDA_models, formulas, nchangepoints) -formula <- mods$formula[[1]] -nchangepoints <- mods$nchangepoints[1] -data <- prep_TS_data(document_covariate_table, LDA_models, mods, 1) -TSmod <- TS(data, formula, nchangepoints, timename, weights, control) - - -test_that("check rho_hist color generator", { - rc <- set_TS_summary_plot_cols()$rho - rho_cols <- set_rho_hist_colors(TSmod$rhos, rc$cols, rc$option, rc$alpha) - expect_equal(rho_cols, "#44015466") -}) - -test_that("check pred_gamma color generator", { - gc <- set_TS_summary_plot_cols()$gamma - gamma_cols <- set_gamma_colors(TSmod, gc$cols, gc$option, gc$alpha) - expect_equal(gamma_cols, c("#0D0887CC", "#FCCE25CC")) -}) - -test_that("check pred_gamma plot", { - gc <- set_TS_summary_plot_cols()$gamma - gamma_cols <- set_gamma_colors(TSmod, gc$cols, gc$option, gc$alpha) - - if (tenv == "cran"){ - expect_silent(pred_gamma_TS_plot(TSmod, cols = gamma_cols)) - - expect_silent(pred_gamma_TS_plot(TSmod, selection = "mode", - cols = gamma_cols)) - } else{ - TS_gamma_plot <- pred_gamma_TS_plot(TSmod, cols = gamma_cols) - TS_gamma_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS gamma plot", TS_gamma_plot) - } - expect_equal(set_gamma_colors(NULL), NULL) - expect_error(pred_gamma_TS_plot(TSmod, selection = "ok", - cols = gamma_cols)) -}) - -test_that("check rho_lines", { - if (tenv == "cran"){ - expect_silent(plot(1, 1, xlim = c(-10, 10), ylim = c(0, 1))) - expect_silent(rho_lines(1)) - } else{ - plot(1, 1, xlim = c(-10, 10), ylim = c(0, 1)) - rho_lines(1) - TS_rho_line_plot <- recordPlot() - vdiffr::expect_doppelganger("rho line plot", TS_rho_line_plot) - } - expect_equal(rho_lines(NULL), NULL) -}) - - -test_that("check rho_hist plot", { - rc <- set_TS_summary_plot_cols()$rho - rho_cols <- set_rho_hist_colors(TSmod$rhos, rc$cols, rc$option, rc$alpha) - if (tenv == "cran"){ - expect_silent(rho_hist(TSmod, rho_cols)) - } else{ - TS_rho_plot <- rho_hist(TSmod, rho_cols) - TS_rho_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS rho plot", TS_rho_plot) - } - expect_equal(set_rho_hist_colors(NULL), NULL) -}) - - -test_that("check color list creation function", { - expect_equal(length(set_TS_summary_plot_cols()), 2) - expect_equal(names(set_TS_summary_plot_cols()), c("rho", "gamma")) - expect_equal(length(set_TS_summary_plot_cols()[[1]]), 3) - expect_equal(length(set_TS_summary_plot_cols()[[2]]), 3) - expect_equal(names(set_TS_summary_plot_cols()[[2]]), - c("cols", "option", "alpha")) - expect_equal(names(set_TS_summary_plot_cols()[[1]]), - c("cols", "option", "alpha")) -}) - - - - -test_that("check trace_plot", { - if (tenv == "cran"){ - expect_silent(trace_plot(TSmod$rhos[ , 1])) - } else{ - TS_trace_plot <- trace_plot(TSmod$rhos[ , 1]) - TS_trace_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS trace plot", TS_trace_plot) - } -}) - -test_that("check ecdf_plot", { - if (tenv == "cran"){ - expect_silent(ecdf_plot(TSmod$rhos[ , 1])) - } else{ - TS_ecdf_plot <- ecdf_plot(TSmod$rhos[ , 1]) - TS_ecdf_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS ecdf plot", TS_ecdf_plot) - } -}) - -test_that("check autocorr_plot", { - if (tenv == "cran"){ - expect_silent(autocorr_plot(TSmod$rhos[ , 1])) - } else{ - TS_autocorr_plot <- autocorr_plot(TSmod$rhos[ , 1]) - TS_autocorr_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS autocorr plot", TS_autocorr_plot) - } -}) - -test_that("check posterior_plot", { - if (tenv == "cran"){ - expect_silent(posterior_plot(TSmod$rhos[ , 1])) - } else{ - TS_posterior_plot <- posterior_plot(TSmod$rhos[ , 1]) - TS_posterior_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS posterior plot", TS_posterior_plot) - } -}) - - -test_that("check plotting of TS_fit", { - if (tenv == "cran"){ - expect_silent(plot(TSmod)) - expect_silent(plot(TSmod, plot_type = "diagnostic", interactive = FALSE)) - } else{ - plot(TSmod) - TS_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS plot", TS_plot) - } -}) - -test_that("check TS_diagnostics_plot", { - TSmod0 <- TS(data, formula, nchangepoints = 0, timename, weights, control) - if (tenv == "cran"){ - expect_silent(TS_diagnostics_plot(TSmod0, interactive = FALSE)) - } else{ - TS_diagnostics_plot(TSmod0, interactive = FALSE) - TS_diag_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS diagnostic plot", TS_diag_plot) - } -}) - - -test_that("check TS_summary_plot", { - if (tenv == "cran"){ - expect_silent(TS_summary_plot(TSmod, cols = set_TS_summary_plot_cols(), - bin_width = 1, xname = NULL, selection = "median")) - } else{ - TS_summary_plot(TSmod, cols = set_TS_summary_plot_cols(), - bin_width = 1, xname = NULL, selection = "median") - TS_summ_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS summary plot", TS_summ_plot) - } -}) - - -test_that("check rho_diagnostics_plots", { - if (tenv == "cran"){ - expect_silent(rho_diagnostics_plots(TSmod, interactive = FALSE)) - } else{ - rho_diagnostics_plots(TSmod, interactive = FALSE) - TS_rdiag_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS rho diagnostic plot", TS_rdiag_plot) - } -}) - -test_that("check eta_diagnostics_plots", { - expect_equal(eta_diagnostics_plots(NULL), NULL) - if (tenv == "cran"){ - expect_silent(eta_diagnostics_plots(TSmod, interactive = FALSE)) - } else{ - eta_diagnostics_plots(TSmod, interactive = FALSE) - TS_ediag_plot <- recordPlot() - vdiffr::expect_doppelganger("Base TS eta diagnostic plot", TS_ediag_plot) - } -}) diff --git a/tests/testthat/test-12-utilities.R b/tests/testthat/test-12-utilities.R deleted file mode 100644 index 629579b0..00000000 --- a/tests/testthat/test-12-utilities.R +++ /dev/null @@ -1,165 +0,0 @@ -context("Check utilities") - -# use old RNG method for sample (for test reproducibility) -if ("sample.kind" %in% names(formals(RNGkind))){ - suppressWarnings(RNGkind(sample.kind = "Rounding")) -} - -test_that("check logsumexp", { - expect_is(logsumexp(c(1,2)), "numeric") - expect_equal(length(logsumexp(c(1,2))), 1) - expect_equal(round(logsumexp(c(1,2)), 2), 2.31) - expect_error(logsumexp("ok")) -}) - -test_that("check softmax", { - expect_is(softmax(c(1,2)), "numeric") - expect_equal(length(softmax(c(1,2))), 2) - expect_equal(round(softmax(c(1,2)), 2)[1], 0.27) - expect_is(softmax(matrix(1, nrow = 2, ncol = 2)), "matrix") - expect_equal(dim(softmax(matrix(1, nrow = 2, ncol = 2))), c(2,2)) - expect_equal((softmax(matrix(1, nrow = 2, ncol = 2)))[1,1], 0.5) - expect_error(softmax("ok")) - expect_error(softmax(array(1, dim = c(2, 2, 2)))) -}) - -test_that("check iftrue", { - expect_equal(iftrue(TRUE,1), 1) - expect_equal(iftrue(1,2), 1) -}) - -test_that("check AICc", { - data(rodents) - set.seed(123) - lda_data <- rodents$document_term_table - r_LDA <- LDA_set(lda_data, topics = 2, nseeds = 1)[[1]] - expect_is(AICc(r_LDA), "numeric") - expect_equal(round(AICc(r_LDA)), 95865) - expect_error(AICc("ok")) -}) - - -test_that("check modalvalue", { - xx <- c(1, 2, 3, 4, 5, 4, 3, 2, 1, 2) - expect_equal(modalvalue(xx), 2) - expect_error(modalvalue("ok")) -}) - -test_that("check document_weights", { - data(rodents) - lda_data <- rodents$document_term_table - doc_weights <- document_weights(lda_data) - expect_equal(round(mean(doc_weights), 3), 1) - expect_equal(round(max(doc_weights), 3), 3.543) - expect_equal(round(min(doc_weights), 3), 0.151) - expect_equal(length(doc_weights), 436) - expect_error(document_weights("ok")) -}) - -test_that("check messageq", { - expect_message(messageq()) - expect_message(messageq("ok")) - expect_error(messageq("ok", "")) - expect_message(messageq("ok", quiet = FALSE)) - expect_silent(messageq("ok", quiet = TRUE)) -}) - -test_that("check mirror_vcov", { - - dummy <- "x" - class(dummy) <- "dummy" - - y <- 1:10 - x <- 101:110 + rnorm(length(y)) - mod <- lm(y ~ x) - vcv <- mirror_vcov(mod) - expect_equal(isSymmetric(vcv), TRUE) - expect_error(mirror_vcov("ok")) - expect_warning(mirror_vcov(dummy)) - data(rodents) - lda_data <- rodents$document_term_table - document_term_table <- rodents$document_term_table - document_covariate_table <- rodents$document_covariate_table - topics <- 2 - nseeds <- 1 - formulas <- ~ newmoon - nchangepoints <- 2 - weights <- document_weights(document_term_table) - control <- list() - timename <- "newmoon" - LDAs <- LDA_set(document_term_table, topics, nseeds, list()) - LDA_models <- select_LDA(LDAs, list()) - control <- list(nit = 50, seed = 1) - mods <- expand_TS(LDA_models, formulas, nchangepoints) - formula <- mods$formula[[1]] - nchangepoints <- mods$nchangepoints[1] - data <- prep_TS_data(document_covariate_table, LDA_models, mods, 1) - rho_dist <- est_changepoints(data, formula, nchangepoints, timename, - weights, control) - mod <- multinom_TS(data, formula, changepoints = NULL, timename, weights, - control) - - # doesnt work in 32 bit - #expect_equal(isSymmetric(vcov(mod[[1]][[1]])), FALSE) - - expect_equal(isSymmetric(mirror_vcov(mod[[1]][[1]])), TRUE) - -}) - -test_that("check normalize", { - xx <- c(1, 2, 3, 4, 5, 4, 3, 2, 1, 2) - expect_equal(mean(normalize(xx)), 0.425) - expect_equal(normalize(xx)[1], 0) - xx <- -1000:100 - expect_equal(mean(normalize(xx)), 0.5) - expect_equal(round(sd(normalize(xx)), 3), 0.289) - expect_error(normalize("ok")) -}) - -test_that("check memoise_fun", { - expect_is(memoise_fun(sum, TRUE), "memoised") - expect_is(memoise_fun(sum, FALSE), "function") - expect_error(memoise_fun(1, TRUE)) - expect_error(memoise_fun(sum, 1)) -}) - -test_that("check check_control", { - expect_silent(check_control(list(), "list")) - expect_silent(check_control(list())) - expect_error(check_control(list(), 1)) - expect_error(check_control(1, "list")) -}) - - -test_that("check check_document_term_table", { - dtt <- "a" - expect_error(check_document_term_table(dtt)) - dtt <- matrix(1:100, 10, 10) - expect_silent(check_document_term_table(dtt)) - dtt[1,1] <- 1.1 - expect_error(check_document_term_table(dtt)) - dtt <- data.frame("dummy" = 1:100) - expect_silent(check_document_term_table(dtt)) - dtt[1,1] <- 1.1 - expect_error(check_document_term_table(dtt)) -}) - -test_that("check error catching of check_topics", { - expect_error(check_topics("a")) - expect_error(check_topics(1.5)) - expect_error(check_topics(1)) - expect_error(check_topics(2), NA) - expect_error(check_topics(c(2, 3, 4)), NA) - expect_silent(check_topics(5)) - expect_silent(check_topics(2:5)) -}) - -test_that("check error catching of check_seeds", { - expect_error(check_seeds("a")) - expect_error(check_seeds(1.5)) - expect_error(check_seeds(2), NA) - expect_error(check_seeds(c(2, 3, 4)), NA) - expect_silent(check_seeds(5)) - expect_silent(check_seeds(1:5)) -}) - From eec3374d184d90e4084afa00623f8bc76a4cecf3 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sat, 28 Mar 2020 13:11:58 -0700 Subject: [PATCH 35/43] Update data_preparation.R --- R/data_preparation.R | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/R/data_preparation.R b/R/data_preparation.R index a5c7c489..2050ce6c 100644 --- a/R/data_preparation.R +++ b/R/data_preparation.R @@ -45,7 +45,6 @@ #' @export #' conform_data <- function(data, control = list()){ - depth <- list_depth(data) if(depth == 0){ if(inherits(data, "data.frame") | inherits(data, "matrix")){ @@ -128,10 +127,11 @@ conform_data <- function(data, control = list()){ test_train <- do.call(what = rule, args = args) in_train <- test_train == "train" in_test <- test_train == "test" - train <- list(document_term_table = dtt[in_train, ], - document_covariate_table = dct[in_train, ]) - test <- list(document_term_table = dtt[in_test, ], - document_covariate_table = dct[in_test, ]) + train <- list(document_term_table = dtt[in_train, , drop = FALSE], + document_covariate_table = + dct[in_train, , drop = FALSE]) + test <- list(document_term_table = dtt[in_test, , drop = FALSE], + document_covariate_table = dct[in_test, , drop = FALSE]) data[[i]] <- list(test = test, train = train) } names(data) <- 1:nsubsets_out From c301ef83c111d2944e8318a4f99e9e6030288d62 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 2 Apr 2020 11:34:22 -0700 Subject: [PATCH 36/43] Update TS_responses.R --- R/TS_responses.R | 1 + 1 file changed, 1 insertion(+) diff --git a/R/TS_responses.R b/R/TS_responses.R index 71f127d9..5be20133 100644 --- a/R/TS_responses.R +++ b/R/TS_responses.R @@ -110,6 +110,7 @@ simplex_TS <- function(data, formula, changepoints = NULL, control <- do.call("simplex_TS_control", control) if (!verify_changepoint_locations(data, changepoints, timename)){ out <- list("chunk models" = NA, "logLik" = -Inf, "chunks" = NA) + class(out) <- c("TS_fit", "list") return(out) } From 34a2ae2f0e15e53cd4df3f71e6d13bddf2cdc9ce Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Sun, 5 Apr 2020 13:04:21 -0700 Subject: [PATCH 37/43] Update TS_responses.R patches to do with alpha testing issues prevent dropping of dimension from data making an Inf be -Inf --- R/TS_responses.R | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/R/TS_responses.R b/R/TS_responses.R index 5be20133..8c406c64 100644 --- a/R/TS_responses.R +++ b/R/TS_responses.R @@ -136,7 +136,7 @@ simplex_TS_chunk <- function(data, formula, chunk, timename = "time", chunk_start <- as.numeric(chunk["start"]) chunk_end <- as.numeric(chunk["end"]) in_chunk <- time_obs >= chunk_start & time_obs <= chunk_end - simplex_data <- data[ , !grepl("gamma", colnames(data))] + simplex_data <- data[ , !grepl("gamma", colnames(data)), drop = FALSE] simplex_data$gamma <- do.call(control$transformation, list(x = acomp(data$gamma))) @@ -322,7 +322,9 @@ package_chunk_fits <- function(chunks, fits){ nchunks <- nrow(chunks) chunk_times <- paste0("(", chunks[ , "start"], " - ", chunks[ , "end"], ")") names(fits) <- paste("chunk", 1:nchunks, chunk_times, "model") - ll <- sum(vapply(fits, logLik, 0)) + ll <- (vapply(fits, logLik, 0)) + ll[ll == Inf] <- -Inf + ll <- sum(ll) out <- list("chunk models" = fits, "logLik" = ll, "chunks" = chunks) class(out) <- c("TS_fit", "list") out From fa2ce0e4dcffd88ac843e64e8c78ade3f3e157dd Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 20 Apr 2020 13:03:46 -0700 Subject: [PATCH 38/43] 0cps --- NAMESPACE | 3 ++ R/LDATS.R | 2 +- R/TS_models.R | 59 +++++++++++++++++++++---- R/TS_responses.R | 51 +++++++++++++++++++++- blech.R | 7 +++ man/logLik.mlm.Rd | 46 ++++++++++++++++++++ notes.R | 108 +++++++++++++++++++++++++++++++++++++++++++--- 7 files changed, 259 insertions(+), 17 deletions(-) create mode 100644 blech.R create mode 100644 man/logLik.mlm.Rd diff --git a/NAMESPACE b/NAMESPACE index 771ec713..a0155003 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -4,6 +4,7 @@ S3method(AIC,LDA) S3method(logLik,LDA) S3method(logLik,TS) S3method(logLik,TS_fit) +S3method(logLik,mlm) S3method(plot,LDA) S3method(plot,LDA_TS) S3method(plot,LDA_set) @@ -127,6 +128,7 @@ export(update_list) export(update_pbar) export(update_saves) export(verify_changepoint_locations) +import(mvtnorm) importFrom(coda,HPDinterval) importFrom(coda,as.mcmc) importFrom(coda,autocorr) @@ -157,6 +159,7 @@ importFrom(lubridate,is.Date) importFrom(mcmc,temper) importFrom(memoise,memoise) importFrom(methods,is) +importFrom(mvtnorm,dmvnorm) importFrom(mvtnorm,rmvnorm) importFrom(nnet,multinom) importFrom(progress,progress_bar) diff --git a/R/LDATS.R b/R/LDATS.R index 49cba36e..8bed6ebe 100644 --- a/R/LDATS.R +++ b/R/LDATS.R @@ -8,7 +8,7 @@ #' @importFrom mcmc temper #' @importFrom memoise memoise #' @importFrom methods is -#' @importFrom mvtnorm rmvnorm +#' @importFrom mvtnorm rmvnorm dmvnorm #' @importFrom nnet multinom #' @importFrom progress progress_bar #' @importFrom stats acf AIC as.formula coef ecdf lm logLik median rgeom rnorm diff --git a/R/TS_models.R b/R/TS_models.R index 8f057f17..d07c66e9 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -235,6 +235,49 @@ est_changepoints <- function(TS){ soft_call(what = fun, args = args, soften = TS$control$soften) } + + + +# working in here to make this simple, given the lm issue + +draw_eta <- function(TS, mod){ + mod <- mod[[1]][[1]] + mod_class <- class(mod) + coefs <- coef(mod) + weighted <- !all(mod$weights == 1) + if(all(c("multinom", "nnet") %in% mod_class)){ + coefs <- t(coefs) + vcv <- mirror_vcov(mod) + } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ + nresps <- length(summary(mod)) + resp_vcv_dim <- dim(vcov(summary(mod)[[1]])) + full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, resp_vcv_dim[1] * nresps) + for(i in 1:nresps){ + in_row <- (1 + (i - 1) * resp_vcv_dim[1]):(i * resp_vcv_dim[1]) + in_col <- in_row + full_vcv[in_row, in_col] <- vcov(summary(mod)[[i]]) + } + vcv <- full_vcv + coef_names <- rep(row.names(coef(summary(mod)[[1]])), nresps) + resp_names <- rep(1:nresps, each = NROW(coef(summary(mod)[[1]]))) + colnames(vcv) <- paste(resp_names, coef_names, sep =":") + } else{ + vcv <- mirror_vcov(mod) + } + + mv <- as.vector(coefs) + + eta <- rmvnorm(TS$control$method_args$control$nit, mv, vcv) + seg_names <- rep(1, ncol(vcv)) + coef_names <- colnames(vcv) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + eta + +} + + + + #' @rdname sequential_TS #' #' @export @@ -252,13 +295,7 @@ est_regressors <- function(rho_dist, TS){ control = TS$control$response_args$control) mod <- soft_call(what = fun, args = args, soften = TRUE) - mod <- mod[[1]][[1]] - mv <- as.vector(t(coef(mod))) - vcv <- mirror_vcov(mod) - eta <- rmvnorm(TS$control$method_args$control$nit, mv, vcv) - seg_names <- rep(1, ncol(vcv)) - coef_names <- colnames(vcv) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") + eta <- draw_eta(TS = TS, mod = mod) return(eta) } @@ -303,8 +340,14 @@ est_regressors <- function(rho_dist, TS){ for(j in 1:n_segment){ colindex2 <- colindex1 + n_eta_segment - 1 seg_mod <- mod[[1]][[j]] - mv <- as.vector(t(coef(seg_mod))) + + coefs <- coef(seg_mod) + if(identical(fun, multinom_TS)){ + coefs <- t(coefs) + } + mv <- as.vector(coefs) vcv <- mirror_vcov(seg_mod) + drawn <- rmvnorm(ndraws, mv, vcv) rows_in <- which(collapsedrho == unique_r[i]) cols_in <- colindex1:colindex2 diff --git a/R/TS_responses.R b/R/TS_responses.R index 8c406c64..6fbfe27c 100644 --- a/R/TS_responses.R +++ b/R/TS_responses.R @@ -143,7 +143,7 @@ simplex_TS_chunk <- function(data, formula, chunk, timename = "time", fit <- lm(formula, simplex_data, weights, subset = in_chunk) fit$timevals <- time_obs[which(in_chunk)] - fit + fit } @@ -156,6 +156,55 @@ simplex_TS_control <- function(transformation = ilr, quiet = FALSE, ...){ } +#' Log-likelihood of multivariate linear regression model +#' +#' @method logLik mlm +#' @param object multivariate linear regression model fit with +#' \code{\link{lm}}. +#' of class \code{mlm} +#' @param ... not used. +#' @return log-lik at (unrestricted) maximum with df as attribute. +#' @author Andi Boeck +#' @import mvtnorm +#' @export +#' @examples y <- cbind(rnorm(10), rnorm(10)); x <- 1:10; +#' mod <- lm(y~x) +#' logLik(mod) + + +#' @title Determine the log likelihood of a multivariate linear regression +#' model +#' +#' @description Convenience function to extract and format the log likelihood +#' of a multivariate linear regression, such as fitted by the +#' \code{\link{simplex_TS}} models. +#' +#' @details Adapted from the function contained in the old R-Forge Atools +#' package (href{https://rdrr.io/rforge/Atools/src/R/logLik.mlm.R}{see}). +#' +#' @param object multivariate linear regression model fit using +#' \code{\link[stats]{lm}} and of class \code{mlm} +#' +#' @param ... Not used, simply included to maintain method compatibility. +#' +#' @return Log likelihood of the model \code{logLik}, also with \code{df} +#' (degrees of freedom) and \code{nobs} (number of observations) values. +#' +#' @export +#' +logLik.mlm <- function(object, ...){ + resids <- residuals(object) + n <- nrow(resids) + Sigma_ML <- crossprod(resids) / n + ans <- sum(dmvnorm(resids, sigma = Sigma_ML, log = TRUE)) + + df <- length(coef(object)) + nrow(Sigma_ML) * (nrow(Sigma_ML) + 1) / 2 + attr(ans, "nobs") <- n + attr(ans, "df") <- df + class(ans) <- "logLik" + ans +} + #' @title Fit a multinomial change point Time Series model #' #' @description diff --git a/blech.R b/blech.R new file mode 100644 index 00000000..6282a585 --- /dev/null +++ b/blech.R @@ -0,0 +1,7 @@ +notes on vcv stuff + +do we want to save the names of the functions being used to easier ref? +almost certainly yes + + +whelp now its the SSD.mlm blech \ No newline at end of file diff --git a/man/logLik.mlm.Rd b/man/logLik.mlm.Rd new file mode 100644 index 00000000..40e76c7c --- /dev/null +++ b/man/logLik.mlm.Rd @@ -0,0 +1,46 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/TS_responses.R +\name{logLik.mlm} +\alias{logLik.mlm} +\title{Determine the log likelihood of a multivariate linear regression + model} +\usage{ +\method{logLik}{mlm}(object, ...) +} +\arguments{ +\item{object}{multivariate linear regression model fit with + \code{\link{lm}}. +of class \code{mlm}} + +\item{...}{not used.} + +\item{object}{multivariate linear regression model fit using +\code{\link[stats]{lm}} and of class \code{mlm}} + +\item{...}{Not used, simply included to maintain method compatibility.} +} +\value{ +log-lik at (unrestricted) maximum with df as attribute. + +Log likelihood of the model \code{logLik}, also with \code{df} + (degrees of freedom) and \code{nobs} (number of observations) values. +} +\description{ +Convenience function to extract and format the log likelihood + of a multivariate linear regression, such as fitted by the + \code{\link{simplex_TS}} models. +} +\details{ +Log-likelihood of multivariate linear regression model + +Adapted from the function contained in the old R-Forge Atools + package (href{https://rdrr.io/rforge/Atools/src/R/logLik.mlm.R}{see}). +} +\examples{ +y <- cbind(rnorm(10), rnorm(10)); x <- 1:10; +mod <- lm(y~x) +logLik(mod) +} +\author{ +Andi Boeck +} diff --git a/notes.R b/notes.R index f666dfa9..aeb4eef8 100644 --- a/notes.R +++ b/notes.R @@ -1,3 +1,13 @@ +VCV + what about fitting the lm models using nnet.default but with softmax = F + oh whoa you get a block diag hessian...because uncor responses?? + yeah, looks like this is legit and ok + when you run stuff without weights, you get nearly identical vcovs + but the off diag 0s aren't truly 0 + yeah this is all v interesting, even in lm things align but with more + actual noise among the response variables (still block diag tho) + think that's likely the place to go for now + will using the Hessian in the regular situation avoid the mirror issue? predict tidying check functions and general usage examples @@ -8,16 +18,100 @@ vignettes devtools::load_all() data(rodents) -LDAs <- LDA(data = rodents, topics = 1:2, replicates = c(1, 4)) -TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 0:1, +LDAs <- LDA(data = rodents, topics = 3, replicates = c(1)) + +Y <- (LDAs[[1]][[1]]$document_topic_table) +Y2 <- ilr(Y) +X <- rodents$document_covariate_table[,"newmoon",drop=F] +weights <- document_weights(rodents$document_term_table) + +mod_wlm_ilr <- lm(Y2~X$newmoon, weights = weights) + +round(vcov(mod_lm_ilr), 6) +round(vcov(summary(mod_wlm_ilr)[[1]]), 6) +round(vcov(summary(mod_wlm_ilr)[[2]]), 6) + + + +TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0, + timename = "newmoon", weights = TRUE, + control = list(response = simplex_TS, + method_args = + list(control = ldats_classic_control(nit = 100)), + response_args = + list(control = + simplex_TS_control(transformation = "ilr")))) + + + + + + +mod_multinom <- multinom(Y~X$newmoon, Hess = TRUE, weights = weights) +round(vcov(mod_wmultinom), 6) + + +X2 <- model.matrix(mod_multinom) + +mask <- c(F, F, F, F, T, T, F, T, T) + +mod_wnnet <- nnet::nnet.default(X2, Y, mask = mask, weights = weights, + size = 0, rang = 0, skip = TRUE, softmax = TRUE, + Hess = TRUE, censored = FALSE) +round(solve(mod_wnnet$Hessian[mask, mask]), 6) + + + +mod_lm_ilr <- lm(Y2~X$newmoon) +round(vcov(mod_lm_ilr), 6) + +mod_wlm_ilr <- lm(Y2~X$newmoon, weights = weights) +round(vcov(summary(mod_wlm_ilr)[[1]]), 6) +round(vcov(summary(mod_wlm_ilr)[[2]]), 6) + + +mod_wnnet_ilr <- nnet::nnet(Y2~newmoon, data=X, weights = weights, + size = 0, skip = TRUE, softmax = FALSE, + Hess = TRUE, linout = TRUE) +round(solve(mod_wnnet_ilr$Hessian), 7) + + + + + + +WW <- rep(0, 6) +mask2 <- c(F, T, T, F, T, T) +mod_nnetd_ilr <- nnet::nnet.default(X2, Y2, weights = weights, Wts = WW, + size = 0, skip = TRUE, softmax = FALSE, + Hess = TRUE, linout = TRUE) +round(solve(mod_nnetd_ilr$Hessian[mask2, mask2]), 7) + + + + + + +TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0:1, timename = "newmoon", weights = TRUE, - control = list(method_args = - list(control = ldats_classic_control(nit = 100)))) -LDATSs <- LDA_TS(data = rodents, topics = 1:2, replicates = c(1, 4), + control = list(response = simplex_TS, + method_args = + list(control = ldats_classic_control(nit = 100)), + response_args = + list(control = + simplex_TS_control(transformation = "alr")))) + + +LDATSs <- LDA_TS(data = rodents, topics = 2:3, replicates = c(1, 4), formulas = ~ 1, nchangepoints = 1, timename = "newmoon", weights = TRUE, - control = list(TS_method_args = - list(control = ldats_classic_control(nit = 100)))) + control = list(response = simplex_TS, + TS_method_args = + list(control = ldats_classic_control(nit = 100)), + response_args = + list(control = + simplex_TS_control(transformation = "alr")))) + plot(LDAs) plot(TSs) From 137ee260cb06940b7931fe7f726bcf53c48dfbc0 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 20 Apr 2020 14:13:14 -0700 Subject: [PATCH 39/43] addressing v-cov for weighted mlm the weighted mlm fits didnt generate vcov matrices due to standard QR factorization evaluation of construction based on alternative methods (likelihood max direct on the model; nnet approach translated to non-softmax) indicates that the v-cov is fine to be constructed by hand because the off block diagonals are functionally 0 due to the transformations imposed this is an assumption that might not hold for all cases and might need to be addressed better in the future, but for now allows us to proceed on solid footing --- R/TS.R | 3 +- R/TS_models.R | 120 ++++++++++++++++++++++++++++++-------------------- blech.R | 7 --- notes.R | 34 +++----------- 4 files changed, 82 insertions(+), 82 deletions(-) delete mode 100644 blech.R diff --git a/R/TS.R b/R/TS.R index 03615ec7..536eb46d 100644 --- a/R/TS.R +++ b/R/TS.R @@ -325,9 +325,10 @@ prepare_TS <- function(LDAs, formulas = ~ 1, nchangepoints = 0, control = control, topics = lda$topics, replicate = lda$replicate) } + cp_text <- ifelse(tab[, 3] == 1 , "change point", "change points") name_tab <- data.frame(paste("LDA", tab[ , 1]), paste(",", tab[ , 2]), - paste(",", tab[ , 3], "change points")) + paste(",", tab[ , 3], cp_text)) names(TSs) <- apply(name_tab, 1, paste0, collapse = "") TSs diff --git a/R/TS_models.R b/R/TS_models.R index d07c66e9..de67aba9 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -236,48 +236,6 @@ est_changepoints <- function(TS){ } - - -# working in here to make this simple, given the lm issue - -draw_eta <- function(TS, mod){ - mod <- mod[[1]][[1]] - mod_class <- class(mod) - coefs <- coef(mod) - weighted <- !all(mod$weights == 1) - if(all(c("multinom", "nnet") %in% mod_class)){ - coefs <- t(coefs) - vcv <- mirror_vcov(mod) - } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ - nresps <- length(summary(mod)) - resp_vcv_dim <- dim(vcov(summary(mod)[[1]])) - full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, resp_vcv_dim[1] * nresps) - for(i in 1:nresps){ - in_row <- (1 + (i - 1) * resp_vcv_dim[1]):(i * resp_vcv_dim[1]) - in_col <- in_row - full_vcv[in_row, in_col] <- vcov(summary(mod)[[i]]) - } - vcv <- full_vcv - coef_names <- rep(row.names(coef(summary(mod)[[1]])), nresps) - resp_names <- rep(1:nresps, each = NROW(coef(summary(mod)[[1]]))) - colnames(vcv) <- paste(resp_names, coef_names, sep =":") - } else{ - vcv <- mirror_vcov(mod) - } - - mv <- as.vector(coefs) - - eta <- rmvnorm(TS$control$method_args$control$nit, mv, vcv) - seg_names <- rep(1, ncol(vcv)) - coef_names <- colnames(vcv) - colnames(eta) <- paste(seg_names, coef_names, sep = "_") - eta - -} - - - - #' @rdname sequential_TS #' #' @export @@ -295,7 +253,38 @@ est_regressors <- function(rho_dist, TS){ control = TS$control$response_args$control) mod <- soft_call(what = fun, args = args, soften = TRUE) - eta <- draw_eta(TS = TS, mod = mod) + seg_mod <- mod[[1]][[1]] + mod_class <- class(seg_mod) + coefs <- coef(seg_mod) + weighted <- !all(seg_mod$weights == 1) + if(all(c("multinom", "nnet") %in% mod_class)){ + coefs <- t(coefs) + vcv <- mirror_vcov(seg_mod) + } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ + nresps <- length(summary(seg_mod)) + resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) + full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, + resp_vcv_dim[1] * nresps) + for(i in 1:nresps){ + in_row <- (1 + (i - 1) * resp_vcv_dim[1]):(i * resp_vcv_dim[1]) + in_col <- in_row + full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[i]]) + } + vcv <- full_vcv + coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) + resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, coef_names, sep =":") + } else{ + vcv <- mirror_vcov(seg_mod) + } + + mv <- as.vector(coefs) + + eta <- rmvnorm(TS$control$method_args$control$nit, mv, vcv) + seg_names <- rep(1, ncol(vcv)) + coef_names <- colnames(vcv) + colnames(eta) <- paste(seg_names, coef_names, sep = "_") + return(eta) } @@ -312,7 +301,23 @@ est_regressors <- function(rho_dist, TS){ nr <- length(unique_r) n_topic <- ncol(data$gamma) n_covar <- length(attr(terms(TS$formula), "term.labels")) - n_eta_segment <- (n_topic - 1) * (n_covar + 1) + + fun <- TS$control$response + fun <- memoise_fun(fun, TS$control$method_args$control$memoise) + args <- list(data = data, formula = TS$formula, changepoints = NULL, + timename = TS$timename, weights = TS$weights, + control = TS$control$response_args$control) + mod <- soft_call(what = fun, args = args, soften = TRUE) + mod_class <- class(mod[[1]][[1]]) + + + if(all(c("mlm", "lm") %in% mod_class) && + TS$control$response_args$control$transformation == "clr"){ + n_eta_segment <- (n_topic) * (n_covar + 1) + } else{ + n_eta_segment <- (n_topic - 1) * (n_covar + 1) + } + n_changept <- dim(rho_dist$cpts)[1] n_segment <- n_changept + 1 n_eta <- n_eta_segment * n_segment @@ -342,12 +347,33 @@ est_regressors <- function(rho_dist, TS){ seg_mod <- mod[[1]][[j]] coefs <- coef(seg_mod) - if(identical(fun, multinom_TS)){ + mod_class <- class(seg_mod) + weighted <- !all(seg_mod$weights == 1) + + if(all(c("multinom", "nnet") %in% mod_class)){ coefs <- t(coefs) + vcv <- mirror_vcov(seg_mod) + + } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ + nresps <- length(summary(seg_mod)) + resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) + full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, + resp_vcv_dim[1] * nresps) + for(k in 1:nresps){ + in_row <- (1 + (k - 1) * resp_vcv_dim[1]):(k * resp_vcv_dim[1]) + in_col <- in_row + full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[k]]) + } + vcv <- full_vcv + coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) + resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, coef_names, sep =":") + } else{ + vcv <- mirror_vcov(seg_mod) } - mv <- as.vector(coefs) - vcv <- mirror_vcov(seg_mod) + + mv <- as.vector(coefs) drawn <- rmvnorm(ndraws, mv, vcv) rows_in <- which(collapsedrho == unique_r[i]) cols_in <- colindex1:colindex2 diff --git a/blech.R b/blech.R deleted file mode 100644 index 6282a585..00000000 --- a/blech.R +++ /dev/null @@ -1,7 +0,0 @@ -notes on vcv stuff - -do we want to save the names of the functions being used to easier ref? -almost certainly yes - - -whelp now its the SSD.mlm blech \ No newline at end of file diff --git a/notes.R b/notes.R index aeb4eef8..25ae80ec 100644 --- a/notes.R +++ b/notes.R @@ -1,13 +1,5 @@ -VCV - what about fitting the lm models using nnet.default but with softmax = F - oh whoa you get a block diag hessian...because uncor responses?? - yeah, looks like this is legit and ok - when you run stuff without weights, you get nearly identical vcovs - but the off diag 0s aren't truly 0 - yeah this is all v interesting, even in lm things align but with more - actual noise among the response variables (still block diag tho) - think that's likely the place to go for now - will using the Hessian in the regular situation avoid the mirror issue? +to-do + predict tidying check functions and general usage examples @@ -18,31 +10,19 @@ vignettes devtools::load_all() data(rodents) -LDAs <- LDA(data = rodents, topics = 3, replicates = c(1)) - -Y <- (LDAs[[1]][[1]]$document_topic_table) -Y2 <- ilr(Y) -X <- rodents$document_covariate_table[,"newmoon",drop=F] -weights <- document_weights(rodents$document_term_table) - -mod_wlm_ilr <- lm(Y2~X$newmoon, weights = weights) +LDAs <- LDA(data = rodents, topics = 2:3, replicates = c(1,4)) -round(vcov(mod_lm_ilr), 6) -round(vcov(summary(mod_wlm_ilr)[[1]]), 6) -round(vcov(summary(mod_wlm_ilr)[[2]]), 6) - - -TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0, +TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, timename = "newmoon", weights = TRUE, control = list(response = simplex_TS, method_args = list(control = ldats_classic_control(nit = 100)), response_args = list(control = - simplex_TS_control(transformation = "ilr")))) - + simplex_TS_control(transformation = "clr")))) +TSs2 @@ -99,7 +79,7 @@ TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0:1, list(control = ldats_classic_control(nit = 100)), response_args = list(control = - simplex_TS_control(transformation = "alr")))) + simplex_TS_control(transformation = "ilr")))) LDATSs <- LDA_TS(data = rodents, topics = 2:3, replicates = c(1, 4), From a2c2b8d5617157fa5b1eb68aa5f23ed8b5617c8f Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Mon, 20 Apr 2020 14:16:15 -0700 Subject: [PATCH 40/43] Update notes.R --- notes.R | 72 ++++----------------------------------------------------- 1 file changed, 4 insertions(+), 68 deletions(-) diff --git a/notes.R b/notes.R index 25ae80ec..75fea6de 100644 --- a/notes.R +++ b/notes.R @@ -14,65 +14,6 @@ LDAs <- LDA(data = rodents, topics = 2:3, replicates = c(1,4)) TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, - timename = "newmoon", weights = TRUE, - control = list(response = simplex_TS, - method_args = - list(control = ldats_classic_control(nit = 100)), - response_args = - list(control = - simplex_TS_control(transformation = "clr")))) - -TSs2 - - - - -mod_multinom <- multinom(Y~X$newmoon, Hess = TRUE, weights = weights) -round(vcov(mod_wmultinom), 6) - - -X2 <- model.matrix(mod_multinom) - -mask <- c(F, F, F, F, T, T, F, T, T) - -mod_wnnet <- nnet::nnet.default(X2, Y, mask = mask, weights = weights, - size = 0, rang = 0, skip = TRUE, softmax = TRUE, - Hess = TRUE, censored = FALSE) -round(solve(mod_wnnet$Hessian[mask, mask]), 6) - - - -mod_lm_ilr <- lm(Y2~X$newmoon) -round(vcov(mod_lm_ilr), 6) - -mod_wlm_ilr <- lm(Y2~X$newmoon, weights = weights) -round(vcov(summary(mod_wlm_ilr)[[1]]), 6) -round(vcov(summary(mod_wlm_ilr)[[2]]), 6) - - -mod_wnnet_ilr <- nnet::nnet(Y2~newmoon, data=X, weights = weights, - size = 0, skip = TRUE, softmax = FALSE, - Hess = TRUE, linout = TRUE) -round(solve(mod_wnnet_ilr$Hessian), 7) - - - - - - -WW <- rep(0, 6) -mask2 <- c(F, T, T, F, T, T) -mod_nnetd_ilr <- nnet::nnet.default(X2, Y2, weights = weights, Wts = WW, - size = 0, skip = TRUE, softmax = FALSE, - Hess = TRUE, linout = TRUE) -round(solve(mod_nnetd_ilr$Hessian[mask2, mask2]), 7) - - - - - - -TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0:1, timename = "newmoon", weights = TRUE, control = list(response = simplex_TS, method_args = @@ -81,16 +22,11 @@ TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 0:1, list(control = simplex_TS_control(transformation = "ilr")))) +TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, + timename = "newmoon", weights = TRUE, + control = list(method_args = + list(control = ldats_classic_control(nit = 100)))) -LDATSs <- LDA_TS(data = rodents, topics = 2:3, replicates = c(1, 4), - formulas = ~ 1, nchangepoints = 1, timename = "newmoon", - weights = TRUE, - control = list(response = simplex_TS, - TS_method_args = - list(control = ldats_classic_control(nit = 100)), - response_args = - list(control = - simplex_TS_control(transformation = "alr")))) plot(LDAs) From d7c804d35a76cd843d03218f02be7959dc017899 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Tue, 21 Apr 2020 14:33:52 -0700 Subject: [PATCH 41/43] codebase vignette updated to the current codebase --- R/TS.R | 4 + doc/LDATS_codebase.Rmd | 169 ++++++++++++++++------------------- doc/LDATS_codebase.html | 136 +++++++--------------------- doc/rodents-example.html | 2 +- notes.R | 20 ++--- vignettes/LDATS_codebase.Rmd | 147 ++++++++++++++++++++++++++++++ 6 files changed, 270 insertions(+), 208 deletions(-) create mode 100644 vignettes/LDATS_codebase.Rmd diff --git a/R/TS.R b/R/TS.R index 536eb46d..85d2b4fc 100644 --- a/R/TS.R +++ b/R/TS.R @@ -353,6 +353,8 @@ package_TS <- function(TSs){ #' select_TS <- function(TSs){ +# use softcall! + vals <- measure_TS(TSs = TSs) fun <- TSs[[1]]$control$selector args <- update_list(TSs[[1]]$control$selector_args, x = vals) @@ -367,6 +369,8 @@ select_TS <- function(TSs){ #' measure_TS <- function(TSs){ +# use softcall! + nTSs <- length(TSs) vals <- rep(NA, nTSs) for(i in 1:nTSs){ diff --git a/doc/LDATS_codebase.Rmd b/doc/LDATS_codebase.Rmd index 0c736efa..5771b982 100644 --- a/doc/LDATS_codebase.Rmd +++ b/doc/LDATS_codebase.Rmd @@ -23,13 +23,12 @@ today <- Sys.Date() ## Overview -This vignette outlines the code base for the **LDATS** package. It was -constructed using **LDATS** version `r vers` on `r today`. +This vignette outlines the code base for the **LDATS** package. +It was constructed using **LDATS** version `r vers` on `r today`. ## Installation -To obtain the most recent version of **LDATS**, install the most recent -version from GitHub: +To obtain the most recent version of **LDATS**, install the most recent version from GitHub: ```{r, eval=FALSE} install.packages("devtools") @@ -38,100 +37,84 @@ devtools::install_github("weecology/LDATS") ## Analytical Pipeline -The full LDATS analysis can be executed using the `LDA_TS` function, -which is the top-level of the coding pipeline's hierarchy of -functions: +The full LDATS analysis can be executed using the `LDA_TS` function, which is the top-level of the coding pipeline's hierarchy of functions: * `LDA_TS()` - * `check_LDA_TS_inputs()` - * `check_timename()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_weights()` - * `check_control()` - * `check_document_term_table()` - * `check_document_covariate_table()` - * `check_topics()` - * `check_seeds()` - * `LDA_set()` - * `check_LDA_TS_inputs()` - * `check_control()` - * `check_document_term_table()` - * `check_topics()` - * `check_seeds()` - * loop over models - * `prep_LDA_control()` - * `LDA()` - * `select_LDA()` - * applies the `measurer` and `selector` functions supplied via `LDA_controls_list()` - * `TS_on_LDA()` - * `check_LDA_TS_inputs()` - * `check_LDA_models()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_timename()` - * `check_control()` - * `check_weights()` - * `check_document_covariate_table()` - * `expand_TS()` - * loop over models - * `prep_TS_data()` - * `TS()` - * `check_TS_inputs()` - * `check_formulas()` - * `check_nchangepoints()` - * `check_control()` - * `check_weights()` - * `est_changepoints()` - * `prep_saves()` - * `prep_ptMCMC_inputs()` - * `prep_cpts()` - * loop over chains - * `multinom_TS()` - * `prep_ids()` - * `prep_pbar()` - * loop over iterations - * `update_pbar()` - * `step_chains()` - * `propose_step()` - * `proposed_step_mods()` - * loop over chains - * `multinom_TS()` - * `eval_step()` - * `take_step()` - * `swap_chains()` - * loop over chain neighbors - * `update_saves()` - * `update_cpts()` - * `update_ids()` - * `est_regressors()` - * loop over unique realizations of change point locations - * `multinom_TS()` - * loop over chunks - * `mirror_vcov()` - * `rmvnorm()` - * `summarize_TS()` - * `diagnose_ptMCMC()` - * `count_trips()` - * `summarize_rhos()` - * `measure_rho_vcov()` - * `summarize_etas()` - * `measure_eta_vcov()` - * `select_TS()` - * applies the `measurer` and `selector` functions supplied via `TS_controls_list()` - * `package_LDA_TS()` - -Each component model's function (`LDA_set()` and `TS()`) can be run -independently, as well. + * `LDA_TS_control()` + * `LDA_control()` + * `TS_control()` + * `LDA()` + * `prepare_LDA()` + * `check_LDA()` + * `LDA_control()` + * `conform_data()` + * `run_LDA()` + * `LDA_call()` (replicated for each model) + * `LDA_msg()` + * `soft_call()` using `LDA$control$model` with `LDA$control$model_args` + * `topicmodels::LDA()` (*default*) + * `package_LDA()` + * `select_LDA()` + * `soft_call()` using `LDA$control$selector with LDA$control$selector_args + * `min()` (*default*) + * `measure_LDA()` (replicated for each model) + * `soft_call()` using `LDA$control$measurer` with `LDA$control$measurer_args` + * `AIC()` (*default*) + + * `TS()` + * `prepare_TS()` + * `TS_control()` + * `run_TS()` + * `TS_call()` (replicated for each model) + * `TS_msg()` + * `TS$control$model with TS$control$model_args + * `sequential_TS_control()` + * `est_changepoints()` + * `TS$control$method` with `TS$control$method_args` + * `ldats_classic_control()` + * `prep_saves()` + * `prep_ptMCMC_inputs()` + * `prep_temp_sequence()` + * `prep_proposal_dist()` + * `prep_cpts()` + * `prep_temp_sequence()` + * `TS$control$response` with `TS$control$response_args` + * `prep_ids()` + * `prep_pbar()` + * `update_pbar()` + * `step_chains()` + * `propose_step()` + * `proposed_step_mods()` + * `TS$control$response` with `TS$control$response_args` + * `eval_step()` + * `accept_step()` + * `swap_chains()` + * `update_saves()` + * `update_cpts()` + * `update_ids()` + * `process_saves()` + * `count_trips()` + * `est_regressors()` + * `TS$control$response` with `TS$control$response_args` + * `package_sequential_TS()` + * `summarize_rhos()` + * `measure_rho_vcov()` + * `summarize_eta()` + * `measure_eta_vcov()` + * `package_TS()` + * `select_TS()` + * `TS$control$selector` with `TS$control$selector_args` + * `measure_TS()` (replicated for each model) + * `TS$control$measurer` with `TS$control$measurer_args` + * `package_LDA_TS()` + + +Each component model's function (`LDA()` and `TS()`) can be run independently, as well. ## Controls Lists -To minimize the length of argument lists and facilitate simple default usage -throughout the pipeline, we implement an options/controls list approach, where -each of the main functions (`LDA_TS`, `LDA_set`, and `TS`) and its subfunctions -have a `control` argument that takes a `list` to replace the defaults returned -by its `_control` function: +To minimize the length of argument lists and facilitate simple default usage throughout the pipeline, we implement an options/controls list approach, where each of the main functions (`LDA_TS`, `LDA`, and `TS`) and their subfunctions have a `control` argument that takes a `list` to replace the defaults returned by its `_control` function: * `LDA_TS_control()` -* `LDA_set_control()` +* `LDA_control()` * `TS_control()` \ No newline at end of file diff --git a/doc/LDATS_codebase.html b/doc/LDATS_codebase.html index 1de2685f..7c620576 100644 --- a/doc/LDATS_codebase.html +++ b/doc/LDATS_codebase.html @@ -310,7 +310,7 @@

Juniper L. Simonis

Overview

-

This vignette outlines the code base for the LDATS package. It was constructed using LDATS version 0.3.0 on 2019-10-12.

+

This vignette outlines the code base for the LDATS package. It was constructed using LDATS version 0.2.5 on 2020-04-21.

Installation

@@ -324,145 +324,75 @@

Analytical Pipeline

  • LDA_TS()
      -
    • check_LDA_TS_inputs() +
    • LDA_TS_control()
        -
      • check_timename()
      • -
      • check_formulas()
      • -
      • check_nchangepoints()
      • -
      • check_weights()
      • -
      • check_control()
      • -
      • check_document_term_table()
      • -
      • check_document_covariate_table()
        -
      • -
      • check_topics()
      • -
      • check_seeds()
      • -
    • -
    • LDA_set() -
        -
      • check_LDA_TS_inputs() -
          -
        • check_control()
        • -
        • check_document_term_table()
        • -
        • check_topics()
        • -
        • check_seeds()
        • -
      • -
      • loop over models -
          -
        • prep_LDA_control()
        • -
        • LDA()
        • -
      • -
    • -
    • select_LDA() -
        -
      • applies the measurer and selector functions supplied via LDA_controls_list()
      • -
    • -
    • TS_on_LDA() -
        -
      • check_LDA_TS_inputs() -
          -
        • check_LDA_models()
        • -
        • check_formulas()
        • -
        • check_nchangepoints()
        • -
        • check_timename()
        • -
        • check_control()
        • -
        • check_weights()
        • -
        • check_document_covariate_table()
          -
        • +
        • LDA_control()
        • +
        • TS_control()
      • -
      • expand_TS()
      • -
      • loop over models -
          -
        • prep_TS_data()
        • -
        • TS() +
        • LDA()
            -
          • check_TS_inputs() +
          • prepare_LDA()
              -
            • check_formulas()
            • -
            • check_nchangepoints()
            • -
            • check_control()
            • -
            • check_weights()
            • +
            • check_LDA()
            • +
            • LDA_control()
            • +
            • conform_data()
          • -
          • est_changepoints() +
          • run_LDA()
              -
            • prep_saves()
            • -
            • prep_ptMCMC_inputs()
            • -
            • prep_cpts() +
            • LDA_call() (replicated for each model)
                -
              • loop over chains +
              • LDA_msg()
              • +
              • soft_call() using LDA$control$model with LDA$control$model_args
                  -
                • multinom_TS()
                • +
                • topicmodels::LDA() (default)
            • -
            • prep_ids()
            • -
            • prep_pbar()
            • -
            • loop over iterations +
            • package_LDA()
                -
              • update_pbar()
              • -
              • step_chains() -
                  -
                • propose_step() -
                    -
                  • proposed_step_mods() -
                      -
                    • loop over chains +
                    • select_LDA()
                        -
                      • multinom_TS()
                      • +
                      • soft_call() using LDA$control$selector with LDA$control$selector_args *min()(*default*) *measure_LDA()(replicated for each model) *soft_call()usingLDA\(control\)measurerwithLDA\(control\)measurer_args*AIC()` (default)
                • -
                • eval_step()
                • -
                • take_step()
              • -
              • swap_chains() +
              • TS()
                  -
                • loop over chain neighbors
                • -
              • -
              • update_saves()
              • -
              • update_cpts()
              • -
              • update_ids()
              • -
            • -
          • -
          • est_regressors() +
          • prepare_TS()
              -
            • loop over unique realizations of change point locations +
            • TS_control()
            • +
            • run_TS()
                -
              • multinom_TS()
              • -
              • loop over chunks +
              • TS_call() (replicated for each model)
                  -
                • mirror_vcov()
                • -
                • rmvnorm()
                • -
              • +
              • TS_msg()
              • +
              • TS$control$model with TS$control$model_args *sequential_TS_control()*est_changepoints()*TS\(control\)methodwithTS\(control\)method_args*ldats_classic_control()*prep_saves()*prep_ptMCMC_inputs()*prep_temp_sequence()*prep_proposal_dist()*prep_cpts()*prep_temp_sequence()*TS\(control\)responsewithTS\(control\)response_args*prep_ids()*prep_pbar()*update_pbar()*step_chains()*propose_step()*proposed_step_mods()*TS\(control\)responsewithTS\(control\)response_args*eval_step()*accept_step()*swap_chains()*update_saves()*update_cpts()*update_ids()*process_saves()*count_trips()*est_regressors()*TS\(control\)responsewithTS\(control\)response_args*package_sequential_TS()*summarize_rhos()*measure_rho_vcov()*summarize_eta()*measure_eta_vcov()`
          • -
          • summarize_TS() +
          • package_TS() +
              +
            • select_TS()
                -
              • diagnose_ptMCMC() +
              • TS$control$selector with TS$control$selector_args
              • +
              • measure_TS() (replicated for each model)
                  -
                • count_trips()
                • +
                • TS$control$measurer with TS$control$measurer_args
              • -
              • summarize_rhos()
              • -
              • measure_rho_vcov()
              • -
              • summarize_etas()
              • -
              • measure_eta_vcov()
        • -
        • select_TS() -
            -
          • applies the measurer and selector functions supplied via TS_controls_list()
        • package_LDA_TS()
      • -
    -

    Each component model’s function (LDA_set() and TS()) can be run independently, as well.

    +

    Each component model’s function (LDA() and TS()) can be run independently, as well.

Controls Lists

-

To minimize the length of argument lists and facilitate simple default usage throughout the pipeline, we implement an options/controls list approach, where each of the main functions (LDA_TS, LDA_set, and TS) and its subfunctions have a control argument that takes a list to replace the defaults returned by its _control function:

+

To minimize the length of argument lists and facilitate simple default usage throughout the pipeline, we implement an options/controls list approach, where each of the main functions (LDA_TS, LDA, and TS) and their subfunctions have a control argument that takes a list to replace the defaults returned by its _control function:

  • LDA_TS_control()
  • -
  • LDA_set_control()
  • +
  • LDA_control()
  • TS_control()
diff --git a/doc/rodents-example.html b/doc/rodents-example.html index f6437a4a..c44b6a4b 100644 --- a/doc/rodents-example.html +++ b/doc/rodents-example.html @@ -308,7 +308,7 @@

Renata Diaz and Juniper L. Simonis

-

This vignette walks through an example of LDATS at the command line and was constructed using LDATS version 0.2.5 on 2020-03-23.

+

This vignette walks through an example of LDATS at the command line and was constructed using LDATS version 0.2.5 on 2020-04-21.

Installation

To obtain the most recent version of LDATS, install and load the most recent version from GitHub:

diff --git a/notes.R b/notes.R index 75fea6de..890f3872 100644 --- a/notes.R +++ b/notes.R @@ -4,8 +4,11 @@ predict tidying check functions and general usage examples tests +softcall message handling tempering vignettes + data + simplex response devtools::load_all() @@ -13,21 +16,16 @@ devtools::load_all() LDAs <- LDA(data = rodents, topics = 2:3, replicates = c(1,4)) -TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, +TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, timename = "newmoon", weights = TRUE, control = list(response = simplex_TS, - method_args = - list(control = ldats_classic_control(nit = 100)), - response_args = - list(control = - simplex_TS_control(transformation = "ilr")))) + response_args = list(control = + list(transformation = "ilr")), + method_args = list(control = list(nit = 100)))) -TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, +TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, timename = "newmoon", weights = TRUE, - control = list(method_args = - list(control = ldats_classic_control(nit = 100)))) - - + control = list(method_args = list(control = list(nit = 100)))) plot(LDAs) plot(TSs) diff --git a/vignettes/LDATS_codebase.Rmd b/vignettes/LDATS_codebase.Rmd new file mode 100644 index 00000000..7d2ab8e8 --- /dev/null +++ b/vignettes/LDATS_codebase.Rmd @@ -0,0 +1,147 @@ +--- +title: "Latent Dirichlet Allocation Time Series (LDATS)" +author: "Juniper L. Simonis" +output: rmarkdown::html_vignette +vignette: > + %\VignetteIndexEntry{LDATScodebase} + %\VignetteEngine{knitr::rmarkdown} + %\VignetteEncoding{UTF-8} +--- + +```{r setup, include=FALSE} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#>" +) +``` + +```{r, include=FALSE} +library(LDATS) +vers <- packageVersion("LDATS") +today <- Sys.Date() +``` + +## Overview + +This vignette outlines the code base for the **LDATS** package. +It was constructed using **LDATS** version `r vers` on `r today`. + +## Installation + +To obtain the most recent version of **LDATS**, install the most recent version from GitHub: + +```{r, eval=FALSE} +install.packages("devtools") +devtools::install_github("weecology/LDATS") +``` + +## Analytical Pipeline + +The full LDATS analysis can be executed using the `LDA_TS` function, which is the top-level of the coding pipeline's hierarchy of functions. +Each component model's function (`LDA()` and `TS()`) can be run independently, as well as many of the deeper component functions. +However, most users should only need to interact with the code at the top levels of the codebase. + +* `LDA_TS()` + * `LDA_TS_control()` + * `LDA_control()` + * `TS_control()` + * `LDA()` + * `prepare_LDA()` + * `check_LDA()` + * `LDA_control()` + * `conform_data()` + * `run_LDA()` + * `LDA_call()` (replicated for each model) + * `LDA_msg()` + * `soft_call()` using `LDA$control$model` with `LDA$control$model_args` + * `topicmodels::LDA()` (*default*) + * `package_LDA()` + * `select_LDA()` + * `soft_call()` using `LDA$control$selector` with LDA$control$selector_args` + * `min()` (*default*) + * `measure_LDA()` (replicated for each model) + * `soft_call()` using `LDA$control$measurer` with `LDA$control$measurer_args` + * `AIC()` (*default*) + * `TS()` + * `prepare_TS()` + * `check_TS()` + * `TS_control()` + * `run_TS()` + * `TS_call()` (replicated for each model) + * `TS_msg()` + * `soft_call()` using `TS$control$model with TS$control$model_args + * `sequential_TS()` (*default*) + * `sequential_TS_control()` + * `est_changepoints()` + * `soft_call()` using `TS$control$method` with `TS$control$method_args` + * `ldats_classic()` (*default*) + * `ldats_classic_control()` + * `prep_saves()` + * `prep_ptMCMC_inputs()` + * `prep_temp_sequence()` + * `prep_proposal_dist()` + * `prep_cpts()` + * `prep_temp_sequence()` + * `soft_call()` using `TS$control$response` with `TS$control$response_args` + * `multinom_TS()` (*default*) + * `multinom_TS_control()` + * `prep_chunks()` + * `multinom_TS_chunk()` + * `nnet::multinom()` + * `package_chunk_fits()` + * `prep_ids()` + * `prep_pbar()` + * `for` each iteration + * `update_pbar()` + * `step_chains()` + * `propose_step()` + * `proposed_step_mods()` + * `soft_call()` using `TS$control$response` with `TS$control$response_args` + * `multinom_TS()` (*default*) + * `multinom_TS_control()` + * `prep_chunks()` + * `multinom_TS_chunk()` + * `nnet::multinom()` + * `package_chunk_fits()` + * `eval_step()` + * `take_step()` + * `swap_chains()` + * `update_saves()` + * `update_cpts()` + * `update_ids()` + * `process_saves()` + * `count_trips()` + * `est_regressors()` + * `soft_call()` using `TS$control$response` with `TS$control$response_args` + * `multinom_TS()` (*default*) + * `multinom_TS_control()` + * `prep_chunks()` + * `multinom_TS_chunk()` + * `nnet::multinom()` + * `package_chunk_fits()` + * `package_sequential_TS()` + * `summarize_rhos()` + * `measure_rho_vcov()` + * `summarize_etas()` + * `measure_eta_vcov()` + * `package_TS()` + * `select_TS()` + * `measure_TS()` + * `soft_call()` using `TS$control$measurer` with `TS$control$measurer_args` + * `soft_call()` using `TS$control$selector` with `TS$control$selector_args` + * `package_LDA_TS()` + +*default* indicates that the specified function and its subfunctions are defined by the default arguments, but can be swapped-out with alternatives using the control lists (see below). +Presently, the only function which has LDATS-based alternatives is the `response`, which can be also set to `simplex_TS` to use the simplex-based response models within an otherwise idential LDATS setup. +In addition, the `measurer` and `selector` functions have defaults (`AIC()` and `min()`, respectively), which can be swapped (e.g., to `logLik()` and `max()`) based on algorithmic choices; method-functions like `AIC()` and `logLik()` have specifics defined as needed for LDATS model objects. + + + +## Controls Lists + +To minimize the length of argument lists and facilitate simple default usage throughout the pipeline, we implement an options/controls list approach, where each of the main functions (`LDA_TS`, `LDA`, and `TS`) and their subfunctions have a `control` argument that takes a `list` to replace the defaults returned by its `_control` function: + +* `LDA_TS_control()` +* `LDA_control()` +* `TS_control()` + From a9be91020acaf7b0af6c08907fbea1b7dd8e2abc Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 23 Apr 2020 17:14:22 -0700 Subject: [PATCH 42/43] handling non weighteds --- R/TS_models.R | 65 ++++++++++++++++++++++++++++++++------------------- notes.R | 8 +++---- 2 files changed, 45 insertions(+), 28 deletions(-) diff --git a/R/TS_models.R b/R/TS_models.R index de67aba9..3f2fecb5 100644 --- a/R/TS_models.R +++ b/R/TS_models.R @@ -260,20 +260,28 @@ est_regressors <- function(rho_dist, TS){ if(all(c("multinom", "nnet") %in% mod_class)){ coefs <- t(coefs) vcv <- mirror_vcov(seg_mod) - } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ + } else if(all(c("mlm", "lm") %in% mod_class)){ nresps <- length(summary(seg_mod)) - resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) - full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, - resp_vcv_dim[1] * nresps) - for(i in 1:nresps){ - in_row <- (1 + (i - 1) * resp_vcv_dim[1]):(i * resp_vcv_dim[1]) - in_col <- in_row - full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[i]]) + + if(weighted){ + resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) + full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, + resp_vcv_dim[1] * nresps) + for(i in 1:nresps){ + in_row <- (1 + (i - 1) * resp_vcv_dim[1]):(i * resp_vcv_dim[1]) + in_col <- in_row + full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[i]]) + } + vcv <- full_vcv + coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) + resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, coef_names, sep =":") + } else{ + vcv <- vcov(seg_mod) + resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, colnames(vcv), sep ="") + rownames(vcv) <- paste(resp_names, rownames(vcv), sep ="") } - vcv <- full_vcv - coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) - resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) - colnames(vcv) <- paste(resp_names, coef_names, sep =":") } else{ vcv <- mirror_vcov(seg_mod) } @@ -354,20 +362,29 @@ est_regressors <- function(rho_dist, TS){ coefs <- t(coefs) vcv <- mirror_vcov(seg_mod) - } else if(all(c("mlm", "lm") %in% mod_class) & weighted){ + } else if(all(c("mlm", "lm") %in% mod_class)){ nresps <- length(summary(seg_mod)) - resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) - full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, - resp_vcv_dim[1] * nresps) - for(k in 1:nresps){ - in_row <- (1 + (k - 1) * resp_vcv_dim[1]):(k * resp_vcv_dim[1]) - in_col <- in_row - full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[k]]) + if(weighted){ + resp_vcv_dim <- dim(vcov(summary(seg_mod)[[1]])) + full_vcv <- matrix(0, resp_vcv_dim[1] * nresps, + resp_vcv_dim[1] * nresps) + for(k in 1:nresps){ + in_row <- (1 + (k - 1) * resp_vcv_dim[1]):(k * resp_vcv_dim[1]) + in_col <- in_row + full_vcv[in_row, in_col] <- vcov(summary(seg_mod)[[k]]) + } + vcv <- full_vcv + coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) + resp_names <- rep(1:nresps, + each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, coef_names, sep =":") + } else{ + vcv <- vcov(seg_mod) + resp_names <- rep(1:nresps, + each = NROW(coef(summary(seg_mod)[[1]]))) + colnames(vcv) <- paste(resp_names, colnames(vcv), sep ="") + rownames(vcv) <- paste(resp_names, rownames(vcv), sep ="") } - vcv <- full_vcv - coef_names <- rep(row.names(coef(summary(seg_mod)[[1]])), nresps) - resp_names <- rep(1:nresps, each = NROW(coef(summary(seg_mod)[[1]]))) - colnames(vcv) <- paste(resp_names, coef_names, sep =":") } else{ vcv <- mirror_vcov(seg_mod) } diff --git a/notes.R b/notes.R index 890f3872..6f1ff640 100644 --- a/notes.R +++ b/notes.R @@ -13,14 +13,14 @@ vignettes devtools::load_all() data(rodents) -LDAs <- LDA(data = rodents, topics = 2:3, replicates = c(1,4)) +LDAs <- LDA(data = rodents, topics = 2, replicates = c(1)) -TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, - timename = "newmoon", weights = TRUE, +TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 0:1, + timename = "newmoon", #weights = TRUE, control = list(response = simplex_TS, response_args = list(control = - list(transformation = "ilr")), + list(transformation = "clr")), method_args = list(control = list(nit = 100)))) TSs <- TS(LDAs = LDAs, formulas = ~ newmoon, nchangepoints = 1, From 06fde93174970c299e64bed1d6a9126c46e4cef0 Mon Sep 17 00:00:00 2001 From: Juniper Simonis Date: Thu, 23 Apr 2020 23:25:58 -0700 Subject: [PATCH 43/43] patch for bad starting values --- R/TS_methods.R | 36 ++++++++++++++++++++++++++++++++++++ notes.R | 29 +++++++++++++++++++++++++++-- tests/static.csv | 31 +++++++++++++++++++++++++++++++ vignettes/LDATS_codebase.Rmd | 4 +++- 4 files changed, 97 insertions(+), 3 deletions(-) create mode 100644 tests/static.csv diff --git a/R/TS_methods.R b/R/TS_methods.R index b5280c9d..61683c4a 100644 --- a/R/TS_methods.R +++ b/R/TS_methods.R @@ -350,6 +350,42 @@ prep_cpts <- function(TS){ modfit <- soft_call(what = fun, args = args, soften = TRUE) lls[i] <- modfit$logLik } + + if(any(lls == -Inf)){ + iter <- 1 + while(all(lls == -Inf)){ + + cps <- matrix(NA, nrow = TS$nchangepoints, ncol = ntemps) + for (i in 1:ntemps){ + cp_times <- sort(sample(avail_times, TS$nchangepoints, + replace = FALSE)) + cps[ , i] <- cp_times + } + lls <- rep(NA, ntemps) + for (i in 1:ntemps){ + fun <- TS$control$response + fun <- memoise_fun(fun, TS$control$memoise) + args <- list(data = data, formula = TS$formula, + changepoints = cps[ , i], + timename = TS$timename, weights = TS$weights, + control = TS$control$response_args$control) + modfit <- soft_call(what = fun, args = args, soften = TRUE) + lls[i] <- modfit$logLik + } + iter <- iter + 1 + if(iter > 10){ + stop("max number of starts tried with all -Inf LogLiks") + } + } + to_replace <- which(lls == -Inf) + to_use <- which(lls != -Inf) + for(i in 1:length(to_replace)){ + to_use_i <- sample(to_use, 1) + lls[to_replace[i]] <- lls[to_use_i] + cps[, to_replace[i]] <- cps[ , to_use_i] + } + } + cps <- cps[ , order(lls, decreasing = TRUE), drop = FALSE] lls <- sort(lls, decreasing = TRUE) diff --git a/notes.R b/notes.R index 6f1ff640..f29a5cc4 100644 --- a/notes.R +++ b/notes.R @@ -9,14 +9,39 @@ tempering vignettes data simplex response - +allow TS to alternatively have a data input and then run through identityLDA +turn the vcov code in est_regressors into functions/methpds + +something weird with ren's data having a -Inf lm logLik +ugh looks like the vcv can sometimes be singular +but really a broader issue is that most of the cp locations give -Infs + which mean it's not a good fitting model, so how to address? + at least make sure all initial cp locations are not -Inf, otherwise breaks! +hmmm yeah, think on this---how best to set up a way to handle models that +are just not going to fit +also we should probably allow the inclusion of starting values for params, +esp change points here....that's the issue + +have a stop-gap patch that looks like it's working, but finding the root +cause of that issue will be helpful in the long run devtools::load_all() data(rodents) LDAs <- LDA(data = rodents, topics = 2, replicates = c(1)) +rm(list=ls()) +LDAs <- LDA(data = rodents, topics = 4, replicates = c(1)) + +TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 1, + timename = "newmoon", weights = TRUE, + control = list(response = simplex_TS, + response_args = list(control = + list(transformation = "ilr")), + method_args = list(control = list(nit = 100)))) + + -TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 0:1, +TSs <- TS(LDAs = LDAs, formulas = ~ 1, nchangepoints = 0, timename = "newmoon", #weights = TRUE, control = list(response = simplex_TS, response_args = list(control = diff --git a/tests/static.csv b/tests/static.csv new file mode 100644 index 00000000..dee630fa --- /dev/null +++ b/tests/static.csv @@ -0,0 +1,31 @@ +"V1","V2","V3","V4","V5","V6","V7" +7,14,24,0,7,123,5 +10,11,23,1,6,103,5 +15,16,41,1,8,152,6 +9,14,29,1,6,134,4 +10,11,26,1,6,145,4 +12,14,31,1,6,149,5 +11,16,36,1,9,150,5 +6,6,18,0,5,86,3 +12,19,33,1,7,174,5 +10,13,32,1,7,128,5 +14,18,41,1,12,185,6 +7,11,25,1,6,85,4 +8,11,31,1,7,146,5 +5,7,21,0,4,97,3 +6,10,21,0,4,113,3 +6,8,22,0,5,96,2 +6,8,16,0,4,83,2 +11,16,34,1,8,177,6 +8,11,22,0,5,95,3 +11,15,36,1,7,151,6 +9,14,26,1,8,129,5 +8,13,28,0,6,142,4 +9,12,29,1,6,129,3 +6,7,20,0,3,71,3 +8,12,30,1,5,106,3 +5,6,17,0,4,73,2 +10,14,27,1,5,128,3 +10,16,31,1,7,122,5 +8,11,30,1,7,122,3 +7,9,19,0,4,113,3 diff --git a/vignettes/LDATS_codebase.Rmd b/vignettes/LDATS_codebase.Rmd index 7d2ab8e8..99f48b8c 100644 --- a/vignettes/LDATS_codebase.Rmd +++ b/vignettes/LDATS_codebase.Rmd @@ -144,4 +144,6 @@ To minimize the length of argument lists and facilitate simple default usage thr * `LDA_TS_control()` * `LDA_control()` * `TS_control()` - + * `sequential_TS_control()` + * `multinom_TS_control()`, `simplex_TS_control()` + * `ldats_classic_control()`

)F4vkP7)n1T1vhIW`GbihFIEjRx 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 Bo&`@n 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 NNKvK6KkXL;@C%()Saz@I!f9T)=O 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≶jWu_CGk0x8R3mQWY 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