From 71dfaa52e67003537fffd797286fc5b58b6c4918 Mon Sep 17 00:00:00 2001 From: antagomir Date: Sun, 10 Jan 2016 11:50:24 +0200 Subject: [PATCH] Fixed opts bug and polished build/check - Thanks for pointing this out ! - This closes #2 --- DESCRIPTION | 7 +- NAMESPACE | 20 +- R/PlotMixture.R | 8 +- R/PlotMixtureUnivariate.R | 12 +- R/add.ellipse.R | 28 ++ R/bic.mixture.R | 27 ++ R/bic.mixture.multivariate.R | 42 +++ R/bic.mixture.univariate.R | 47 +++ R/bic.select.best.mode.R | 65 ++++ R/continuous.responses.R | 23 +- R/detect.responses.R | 10 +- R/enrichment.list.factor.R | 21 +- R/enrichment.list.factor.minimal.R | 18 +- R/factor.responses.R | 23 +- R/factor.responses.minimal.R | 23 +- R/firstlib.R | 10 +- R/internals.R | 26 -- R/list.responses.continuous.R | 61 +--- R/list.responses.continuous.multi.R | 45 +++ R/list.responses.factor.R | 31 +- R/list.responses.factor.minimal.R | 29 +- R/mixture.model.R | 103 ++++++ R/mixtures.R | 320 ------------------ R/order.responses.R | 16 +- R/pick.model.pairs.R | 6 +- R/pick.model.parameters.R | 26 ++ R/pkg-package.R | 71 +--- R/plot-methods.R | 189 ++++------- R/plot_matrix.R | 26 +- R/show-methods.R | 1 - R/visualization.R | 41 +-- inst/CITATION | 2 +- inst/extras/build.sh | 4 +- man/ICMg.combined.sampler.Rd | 7 +- man/ICMg.get.comp.memberships.Rd | 2 +- man/ICMg.links.sampler.Rd | 7 +- man/NetResponseModel-class.Rd | 2 +- man/P.S.Rd | 23 +- man/P.Sr.Rd | 21 +- man/P.r.s.Rd | 24 +- man/P.rS.Rd | 21 +- man/P.rs.joint.Rd | 21 +- man/P.rs.joint.individual.Rd | 21 +- man/P.s.individual.Rd | 23 +- man/P.s.r.Rd | 21 +- man/PlotMixture.Rd | 10 +- man/PlotMixtureBivariate.Rd | 8 +- man/PlotMixtureMultivariate.Rd | 16 +- man/PlotMixtureMultivariate.deprecated.Rd | 2 +- man/PlotMixtureUnivariate.Rd | 14 +- man/add.ellipse.Rd | 9 +- man/bic.mixture.Rd | 13 +- man/bic.mixture.multivariate.Rd | 13 +- man/bic.mixture.univariate.Rd | 18 +- man/bic.select.best.mode.Rd | 14 +- man/centerData.Rd | 4 +- man/check.matrix.Rd | 2 +- man/check.network.Rd | 6 +- man/continuous.responses.Rd | 10 +- man/detect.responses.Rd | 6 +- man/dna.Rd | 12 +- man/enrichment.list.factor.Rd | 19 +- man/enrichment.list.factor.minimal.Rd | 16 +- man/factor.responses.Rd | 10 +- man/factor.responses.minimal.Rd | 10 +- man/filter.netw.Rd | 2 +- man/filter.network.Rd | 2 +- man/find.similar.features.Rd | 6 +- man/generate.toydata.Rd | 2 +- man/get.dat-NetResponseModel-method.Rd | 6 +- man/get.mis.Rd | 2 +- man/get.model.parameters.Rd | 4 +- man/get.subnets-NetResponseModel-method.Rd | 8 +- man/getqofz-NetResponseModel-method.Rd | 4 +- man/independent.models.Rd | 4 +- man/list.responses.continuous.multi.Rd | 12 +- man/list.responses.continuous.single.Rd | 13 +- man/list.responses.factor.Rd | 17 +- man/list.responses.factor.minimal.Rd | 14 +- man/list.significant.responses.Rd | 6 +- man/listify.groupings.Rd | 2 +- man/mixture.model.Rd | 42 +-- man/model.stats.Rd | 8 +- man/netresponse-package.Rd | 18 +- man/order.responses.Rd | 23 +- man/osmo.Rd | 12 +- man/pick.model.pairs.Rd | 4 +- man/pick.model.parameters.Rd | 6 +- man/plotPCA.Rd | 2 +- man/plot_associations.Rd | 14 +- man/{plot.data.Rd => plot_data.Rd} | 16 +- ...{plot.expression.Rd => plot_expression.Rd} | 16 +- man/plot_matrix.Rd | 40 +-- man/{plot.response.Rd => plot_response.Rd} | 23 +- man/{plot.responses.Rd => plot_responses.Rd} | 36 +- man/{plot.scale.Rd => plot_scale.Rd} | 21 +- man/{plot.subnet.Rd => plot_subnet.Rd} | 15 +- man/read.sif.Rd | 4 +- man/remove.negative.edges.Rd | 2 +- man/response.enrichment.Rd | 2 +- man/response2sample.Rd | 3 +- man/sample2response.Rd | 2 +- man/set.breaks.Rd | 6 +- man/toydata.Rd | 4 +- man/update.model.pair.Rd | 2 +- man/vdp.mixt.Rd | 49 +-- man/vectorize.groupings.Rd | 2 +- man/write.netresponse.results.Rd | 2 +- tests/validate.pca.basis.R | 10 +- vignettes/NetResponse.Rmd | 30 +- vignettes/NetResponse.md | 69 ++-- vignettes/fig/NetResponse2-1.png | Bin 0 -> 23187 bytes vignettes/fig/NetResponse2b-1.png | Bin 0 -> 25462 bytes vignettes/fig/NetResponse3-1.png | Bin 0 -> 19280 bytes vignettes/fig/NetResponse4-1.png | Bin 0 -> 27826 bytes vignettes/fig/NetResponse5-1.png | Bin 0 -> 8990 bytes vignettes/fig/NetResponse7-1.png | Bin 0 -> 4559 bytes vignettes/fig/vdp-1.png | Bin 0 -> 31324 bytes vignettes/figure/NetResponse2-1.png | Bin 6835 -> 0 bytes vignettes/figure/NetResponse2.png | Bin 6835 -> 0 bytes vignettes/figure/NetResponse2b-1.png | Bin 6858 -> 0 bytes vignettes/figure/NetResponse2b.png | Bin 6858 -> 0 bytes vignettes/figure/NetResponse3-1.png | Bin 18159 -> 0 bytes vignettes/figure/NetResponse3.png | Bin 15376 -> 0 bytes vignettes/figure/NetResponse4-1.png | Bin 21827 -> 0 bytes vignettes/figure/NetResponse4.png | Bin 20694 -> 0 bytes vignettes/figure/NetResponse5-1.png | Bin 8908 -> 0 bytes vignettes/figure/NetResponse5.png | Bin 8908 -> 0 bytes vignettes/figure/NetResponse7-1.png | Bin 4045 -> 0 bytes vignettes/figure/NetResponse7.png | Bin 4056 -> 0 bytes vignettes/figure/vdp-1.png | Bin 23329 -> 0 bytes 131 files changed, 1015 insertions(+), 1358 deletions(-) mode change 100755 => 100644 DESCRIPTION create mode 100644 R/add.ellipse.R create mode 100644 R/bic.mixture.R create mode 100644 R/bic.mixture.multivariate.R create mode 100644 R/bic.mixture.univariate.R create mode 100644 R/bic.select.best.mode.R create mode 100644 R/list.responses.continuous.multi.R create mode 100644 R/mixture.model.R delete mode 100644 R/mixtures.R create mode 100644 R/pick.model.parameters.R rename man/{plot.data.Rd => plot_data.Rd} (70%) rename man/{plot.expression.Rd => plot_expression.Rd} (75%) rename man/{plot.response.Rd => plot_response.Rd} (56%) rename man/{plot.responses.Rd => plot_responses.Rd} (59%) rename man/{plot.scale.Rd => plot_scale.Rd} (62%) rename man/{plot.subnet.Rd => plot_subnet.Rd} (71%) create mode 100644 vignettes/fig/NetResponse2-1.png create mode 100644 vignettes/fig/NetResponse2b-1.png create mode 100644 vignettes/fig/NetResponse3-1.png create mode 100644 vignettes/fig/NetResponse4-1.png create mode 100644 vignettes/fig/NetResponse5-1.png create mode 100644 vignettes/fig/NetResponse7-1.png create mode 100644 vignettes/fig/vdp-1.png delete mode 100644 vignettes/figure/NetResponse2-1.png delete mode 100644 vignettes/figure/NetResponse2.png delete mode 100644 vignettes/figure/NetResponse2b-1.png delete mode 100644 vignettes/figure/NetResponse2b.png delete mode 100644 vignettes/figure/NetResponse3-1.png delete mode 100644 vignettes/figure/NetResponse3.png delete mode 100644 vignettes/figure/NetResponse4-1.png delete mode 100644 vignettes/figure/NetResponse4.png delete mode 100644 vignettes/figure/NetResponse5-1.png delete mode 100644 vignettes/figure/NetResponse5.png delete mode 100644 vignettes/figure/NetResponse7-1.png delete mode 100644 vignettes/figure/NetResponse7.png delete mode 100644 vignettes/figure/vdp-1.png diff --git a/DESCRIPTION b/DESCRIPTION old mode 100755 new mode 100644 index f6ecb83..a5a1561 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,8 +1,8 @@ Package: netresponse Type: Package Title: Functional Network Analysis -Version: 1.19.0 -Date: 2015-03-24 +Version: 1.21.11 +Date: 2016-01-09 Author: Leo Lahti, Olli-Pekka Huovilainen, Antonio Gusmao and Juuso Parkkinen Maintainer: Leo Lahti Description: Algorithms for functional network analysis. Includes an @@ -15,7 +15,7 @@ Depends: methods, minet, mclust, - reshape + reshape2 Imports: dmt, ggplot2, @@ -30,3 +30,4 @@ BugReports: https://github.com/antagomir/netresponse/issues biocViews: CellBiology, Clustering, GeneExpression, Genetics, Network, GraphAndNetwork, DifferentialExpression, Microarray, Transcription +RoxygenNote: 5.0.0 diff --git a/NAMESPACE b/NAMESPACE index 41449be..2bee746 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,4 +1,4 @@ -# Generated by roxygen2 (4.1.0): do not edit by hand +# Generated by roxygen2: do not edit by hand export(ICMg.combined.sampler) export(ICMg.get.comp.memberships) @@ -42,13 +42,13 @@ export(model.stats) export(order.responses) export(pick.model.pairs) export(pick.model.parameters) -export(plot.data) -export(plot.expression) -export(plot.response) -export(plot.responses) -export(plot.scale) -export(plot.subnet) +export(plot_data) +export(plot_expression) export(plot_matrix) +export(plot_response) +export(plot_responses) +export(plot_scale) +export(plot_subnet) export(read.sif) export(response.enrichment) export(response2sample) @@ -66,7 +66,6 @@ import(graph) import(mclust) import(methods) import(parallel) -import(qvalue) importFrom(ggplot2,aes) importFrom(ggplot2,facet_wrap) importFrom(ggplot2,geom_bar) @@ -77,7 +76,7 @@ importFrom(ggplot2,geom_line) importFrom(ggplot2,geom_point) importFrom(ggplot2,ggplot) importFrom(ggplot2,ggtitle) -importFrom(ggplot2,opts) +importFrom(ggplot2,qplot) importFrom(ggplot2,theme_bw) importFrom(ggplot2,theme_set) importFrom(ggplot2,xlab) @@ -89,5 +88,6 @@ importFrom(igraph,igraph.to.graphNEL) importFrom(igraph,subgraph) importFrom(minet,build.mim) importFrom(plyr,ddply) -importFrom(reshape,melt) +importFrom(qvalue,qvalue) +importFrom(reshape2,melt) useDynLib(netresponse) diff --git a/R/PlotMixture.R b/R/PlotMixture.R index 107a0a7..61163d4 100644 --- a/R/PlotMixture.R +++ b/R/PlotMixture.R @@ -1,17 +1,13 @@ -#' PlotMixture -#' -#' Arguments: +#' @title Plot mixtures +#' @description Plot mixtures. #' @param x data vector #' @param qofz Mode assignment probabilities for each sample. Samples x modes. #' @param binwidth binwidth for histogram #' @param xlab.text xlab.text #' @param ylab.text ylab.text #' @param title.text title.text -#' -#' Return: #' @return Used for its side-effects #' @export -#' #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") for citation details. #' @keywords utilities diff --git a/R/PlotMixtureUnivariate.R b/R/PlotMixtureUnivariate.R index 709fc36..2959015 100644 --- a/R/PlotMixtureUnivariate.R +++ b/R/PlotMixtureUnivariate.R @@ -1,9 +1,5 @@ -#' PlotMixtureUnivariate -#' -#' Visualize data, centroids and stds for a given univariate -#' Gaussian mixture model with PCA. -#' -#' Arguments: +#' @title Plot univariate mixtures +#' @description Visualize data, centroids and stds for a given univariate Gaussian mixture model with PCA. #' @param x data vector #' @param means mode centroids #' @param sds mode standard deviations @@ -16,12 +12,8 @@ #' @param density.color Color for density lines #' @param cluster.assignments Vector of cluster indices, indicating cluster for each data point #' @param ... Further arguments for plot function. -#' -#' Return: #' @return Used for its side-effects -#' #' @export -#' #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") for citation details. #' @keywords utilities diff --git a/R/add.ellipse.R b/R/add.ellipse.R new file mode 100644 index 0000000..a0e163b --- /dev/null +++ b/R/add.ellipse.R @@ -0,0 +1,28 @@ +#' @title Add ellipse to an existing plot +#' @description Calculates and plots ellipse corresponding to specified confidence interval in 2-dimensional plot +#' @usage add.ellipse(centroid, covmat, confidence = 0.95, npoints = 100, col = +#' "black", ...) +#' @param centroid Vector with two elements defining the ellipse centroid. +#' @param covmat Covariance matrix for the investigated data. Only diagonal +#' covariances supported. +#' @param confidence Confidence level determining the ellipse borders based on +#' the covariance matrix. +#' @param npoints Number of plotting points. +#' @param col Color. +#' @param ... Other arguments to be passed. +#' @return Used for plotting side effects. +#' @author Leo Lahti \email{leo.lahti@@iki.fi} +#' @keywords utilities +#' @export +#' @examples #add.ellipse(centroid = c(0, 0), covmat = diag(c(1,2))) +add.ellipse <- function (centroid, covmat, confidence = 0.95, npoints = 100, col = "black", ...) { + + # add ellipse to a plot + el <- ellipse(centroid, covmat, confidence, npoints) + points(el, type = "l", col = col, ...) + + el +} + + + diff --git a/R/bic.mixture.R b/R/bic.mixture.R new file mode 100644 index 0000000..29a3e71 --- /dev/null +++ b/R/bic.mixture.R @@ -0,0 +1,27 @@ +#' @title BIC mixture +#' @description Latent class analysis based on (infinite) Gaussian mixture model. If the input is data matrix, a multivariate model is fitted; if the input is a vector, a univariate model is fitted +#' @param x samples x features matrix for multivariate analysis, or a vector for univariate analysis +#' @param max.modes Maximum number of modes to be checked for mixture model selection +#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. +#' @param min.modes minimum number of modes +#' @param ... Further optional arguments to be passed +#' @return Fitted latent class model (parameters and free energy) +#' @export +#' @references See citation("netresponse") +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @keywords utilities +bic.mixture <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { + + # x; max.modes = max.responses; bic.threshold = bic.threshold; min.modes = min.responses + + if (!is.vector(x) && ncol(x) == 1) {x <- x[,1]} + + if (is.vector(x)) { + bic.mixture.univariate(x, max.modes, bic.threshold, min.modes = min.modes, ...) + } else { + bic.mixture.multivariate(x, max.modes, bic.threshold, min.modes = min.modes, ...) + } + +} + + diff --git a/R/bic.mixture.multivariate.R b/R/bic.mixture.multivariate.R new file mode 100644 index 0000000..1cb776c --- /dev/null +++ b/R/bic.mixture.multivariate.R @@ -0,0 +1,42 @@ +#' @title Multivariate BIC mixture +#' @description Latent class analysis based on (infinite) Gaussian mixture model. If the input (dat) is data matrix, a multivariate model is fitted. +#' @param x matrix (for multivariate analysis) +#' @param max.modes Maximum number of modes to be checked for mixture model selection +#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. +#' @param min.modes Minimum number of modes to be checked for mixture model selection +#' @param ... Further optional arguments to be passed +#' @return Fitted latent class model (parameters and free energy) +#' @export +#' @references See citation("netresponse") +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @keywords utilities +bic.mixture.multivariate <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { + + # x <- mat; max.modes = params$max.responses; bic.threshold = params$bic.threshold + + best.mode <- bic.select.best.mode(x, max.modes, bic.threshold, min.modes) + + mcl <- Mclust(x, G = best.mode) + + bic <- try(-mclustBIC(x, G = best.mode)[, "VVV"]) + if ( is.na(bic) ) { bic <- Inf } # infinitely bad = Inf + + means <- t(mcl$parameters$mean) + vars <- t(apply(mcl$parameters$variance$sigma, 3, function(x){diag(x)})) + sds <- sqrt(vars) + ws <- as.vector(mcl$parameters$pro) + if (is.null(ws)) {ws <- 1} + + Nparams <- prod(dim(means)) + prod(dim(sds)) + length(ws) + + # Determine the most likely mode for each sample (-> hard clusters) + qofz <- P.r.s(t(x), list(mu = means, sd = sds, w = ws), log = FALSE) + rownames(qofz) <- rownames(x) + colnames(qofz) <- paste("Mode", 1:ncol(qofz), sep = "-") + + rownames(means) <- rownames(sds) <- names(ws) <- paste("Mode", 1:length(ws), sep = "-") + colnames(means) <- colnames(sds) <- colnames(x) + + list(means = means, sds = sds, ws = ws, Nparams = Nparams, free.energy = -mcl$loglik, qofz = qofz, bic = bic) + +} diff --git a/R/bic.mixture.univariate.R b/R/bic.mixture.univariate.R new file mode 100644 index 0000000..2405026 --- /dev/null +++ b/R/bic.mixture.univariate.R @@ -0,0 +1,47 @@ +#' @title Univariate BIC mixture +#' @description Latent class analysis based on (infinite) Gaussian mixture +#' model. If the input (dat) is data matrix, a multivariate model is fitted. If +#' the input is a vector or a 1-dimensional matrix, a univariate model is +#' fitted. +#' @param x dat vector (for univariate analysis) or a matrix (for multivariate analysis) +#' @param max.modes Maximum number of modes to be checked for mixture model selection +#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. +#' @param min.modes minimum number of modes +#' @param ... Further optional arguments to be passed +#' @return Fitted latent class model (parameters and free energy) +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @references See citation("netresponse") +#' @export +#' @keywords utilities +bic.mixture.univariate <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { + + # x <- datamatrix[, node]; max.modes = params$max.responses; bic.threshold = params$bic.threshold + + best.mode <- bic.select.best.mode(x, max.modes, bic.threshold, min.modes = min.modes) + mcl <- Mclust(x, G = best.mode) + + means <- as.vector(mcl$parameters$mean) + sds <- as.vector(sqrt(mcl$parameters$variance$sigmasq)) + if (length(sds) == 1) {sds <- rep(sds, length(means))} + ws <- as.vector(mcl$parameters$pro) + + if (is.null(ws)) {warning("NULL weights, replacing with 1"); ws <- 1} + if (is.null(means)) {warning("NULL means, replacing with 1"); means <- 1} + if (is.null(sds)) {warning("NULL sds, replacing with 1"); sds <- 1} + + Nparams <- length(means) + length(sds) + length(ws) + + means <- matrix(means, nrow = length(ws)) + sds <- matrix(sds, nrow = length(ws)) + + # Determine the most likely mode for each sample (-> hard clusters) + # save(means, sds, ws, x, file = "~/tmp/tmp.RData") + qofz <- P.r.s(matrix(x, nrow = 1), list(mu = means, sd = sds, w = ws), log = FALSE) + rownames(qofz) <- names(x) + + names(means) <- names(sds) <- names(ws) <- paste("Mode", 1:length(ws), sep = "-") + + list(means = means, sds = sds, ws = ws, Nparams = Nparams, free.energy = -mcl$loglik, qofz = qofz) + +} + diff --git a/R/bic.select.best.mode.R b/R/bic.select.best.mode.R new file mode 100644 index 0000000..2bc75c0 --- /dev/null +++ b/R/bic.select.best.mode.R @@ -0,0 +1,65 @@ +#' @title Select best mode with BIC +#' @description Select optimal number of mixture components by adding components until +#' the increase in objective function is below threshold. +#' @param x dat vector (for univariate analysis) or a matrix (for multivariate analysis) +#' @param max.modes Maximum number of modes to be checked for mixture model selection +#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. +#' @param min.modes Optiomal. Minimum number of modes. +#' @return Fitted latent class model (parameters and free energy) +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @references See citation("netresponse") +#' @export +#' @keywords utilities +bic.select.best.mode <- function (x, max.modes, bic.threshold, min.modes = 1) { + + # Cost for single mode + # BIC : smaller is better + # mclustBIC returns the value for -BIC, to be exact + nc <- min.modes + if (is.vector(x)) { # univariate + m <- -mclustBIC(x, G = nc)[, "V"] + } else { # multivariate + m <- -mclustBIC(x, G = nc)[, "VVV"] # BIC : smaller is better + } + + # ---------------------------------------------------------------- + + add.component <- TRUE + best.mode <- min.modes + if (max.modes == min.modes) { + add.component <- FALSE + } + + while (add.component && nc < max.modes) { + + nc <- nc + 1 + + # BIC : smaller is better + if (is.vector(x)) { # univariate + m.new <- try(-mclustBIC(x, G = nc)[, "V"]) + } else { # multivariate + m.new <- try(-mclustBIC(x, G = nc)[, "VVV"]) + } + if ( is.na(m.new) ) { m.new <- Inf } # infinitely bad = Inf + + # FIXME: compressing data with PCA after dimensionality gets otherwise too high? + # with around ncol(x) = 30 the mclustBIC is starting to produce NAs + + # FIXME: remove this when code works ok + # if (is.na(m.new)) {save(x, nc, file = "m.new.RData")} + + bic.delta <- m.new - m + + if (bic.delta < -bic.threshold) { + best.mode <- nc + m <- m.new + } else { + add.component <- FALSE + } + } + + best.mode + +} + + diff --git a/R/continuous.responses.R b/R/continuous.responses.R index 3195fab..0ff8298 100644 --- a/R/continuous.responses.R +++ b/R/continuous.responses.R @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2013 Leo Lahti +# Copyright (C) 2010-2016 Leo Lahti # Contact: Leo Lahti # # This program is free software; you can redistribute it and/or modify @@ -15,19 +15,14 @@ # "To invent, you need a good imagination and a pile of junk." # -- Thomas Edison - -#' Description: Quantify association between modes and continuous variable -#' -#' Arguments: -#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples -#' @param model NetResponse model object -#' @param method method for enrichment calculation -#' @param min.size minimum sample size for a response -#' @param data data matrix (samples x features) -#' -#' Returns: -#' @return List with each element corresponding to one variable and listing the responses according to association strength -#' +#' @title Continuous responses +#' @description Quantify association between modes and continuous variable +#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples +#' @param model NetResponse model object +#' @param method method for enrichment calculation +#' @param min.size minimum sample size for a response +#' @param data data matrix (samples x features) +#' @return List with each element corresponding to one variable and listing the responses according to association strength #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") #' @export diff --git a/R/detect.responses.R b/R/detect.responses.R index 67144bd..af59149 100644 --- a/R/detect.responses.R +++ b/R/detect.responses.R @@ -1,5 +1,3 @@ - - ###################################################################### # Before I put a sketch on paper, the whole idea is worked out @@ -338,10 +336,10 @@ detect.responses <- function(datamatrix, } # FIXME: if all nodes will be combined (merging.threshold = -Inf), there will be an error. Fix. - #' costs: cost function values at each state - #' moves: indices of groups joined at each state in its columns - #' groupings: groupings at each level of the hierarchy - #' models: compressed representations of the models from each step + # costs: cost function values at each state + # moves: indices of groups joined at each state in its columns + # groupings: groupings at each level of the hierarchy + # models: compressed representations of the models from each step model <- new("NetResponseModel", moves = matrix(move.cost.hist, 3), diff --git a/R/enrichment.list.factor.R b/R/enrichment.list.factor.R index a3bfa15..98e8c7d 100644 --- a/R/enrichment.list.factor.R +++ b/R/enrichment.list.factor.R @@ -1,21 +1,12 @@ -#' Description: enrichment.list.factor -#' -#' Orders the responses by association strength (enrichment score) to a given -#' sample set. For instance, if the samples correspond to a particular -#' experimental factor, this function can be used to prioritize the responses -#' according to their association strength to this factor. -#' -#' Arguments: +#' @title enrichment.list.factor +#' @description Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. #' @param models List of models. Each model should have a sample-cluster assignment matrix qofz. -#' @param level.samples Measure enrichment of this sample (set) across the observed -#' responses. +#' @param level.samples Measure enrichment of this sample (set) across the observed responses. #' @param method 'hypergeometric' measures enrichment of factor levels in this #' response; 'precision' measures response purity for each factor level; #' 'dependency' measures logarithm of the joint density between response and #' factor level vs. their marginal densities: log(P(r,s)/(P(r)P(s))) #' @param verbose Follow progress by intermediate messages. -#' -#' Returns: #' @return A data frame which gives a data #' frame of responses ordered by enrichment score for the investigated sample. #' The model, response id and enrichment score are shown. The method field @@ -25,9 +16,9 @@ #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") for citation details. #' @keywords utilities +#' @importFrom qvalue qvalue #' @export #' @examples # -#' enrichment.list.factor <- function (models, level.samples, method, verbose = FALSE) { # models; level.samples <- level.samples; method = method @@ -68,9 +59,9 @@ enrichment.list.factor <- function (models, level.samples, method, verbose = FAL if (length(enr$pvalue) > 100) { # calculate q-values - enr$qvalue <- qvalue::qvalue(as.numeric(as.character(enr$pvalue)))$qvalues + enr$qvalue <- qvalue(as.numeric(as.character(enr$pvalue)))$qvalues } else if (length(enr$pvalue) > 10) { - enr$qvalue <- qvalue::qvalue(as.numeric(as.character(enr$pvalue)), pi0.method = "bootstrap", fdr.level = 0.25)$qvalues + enr$qvalue <- qvalue(as.numeric(as.character(enr$pvalue)), pi0.method = "bootstrap", fdr.level = 0.25)$qvalues } else { warning("Not enough p-values for q-value estimation") diff --git a/R/enrichment.list.factor.minimal.R b/R/enrichment.list.factor.minimal.R index e7e2086..198a71b 100644 --- a/R/enrichment.list.factor.minimal.R +++ b/R/enrichment.list.factor.minimal.R @@ -1,11 +1,5 @@ -#' Description: enrichment.list.factor -#' -#' Orders the responses by association strength (enrichment score) to a given -#' sample set. For instance, if the samples correspond to a particular -#' experimental factor, this function can be used to prioritize the responses -#' according to their association strength to this factor. -#' -#' Arguments: +#' @title enrichment.list.factor +#' @description Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. #' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz. #' @param method 'hypergeometric' measures enrichment of factor levels in this #' response; 'precision' measures response purity for each factor level; @@ -14,8 +8,6 @@ #' @param verbose Follow progress by intermediate messages. #' @param annotation.vector annotation vector #' @param level level -#' -#' Returns: #' @return A data frame which gives a data #' frame of responses ordered by enrichment score for the investigated sample. #' The model, response id and enrichment score are shown. The method field @@ -25,9 +17,9 @@ #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") for citation details. #' @keywords utilities +#' @importFrom qvalue qvalue #' @export #' @examples # -#' enrichment.list.factor.minimal <- function (groupings, method, verbose = FALSE, annotation.vector, level) { # groupings, level.samples, method = method @@ -68,9 +60,9 @@ enrichment.list.factor.minimal <- function (groupings, method, verbose = FALSE, if (length(enr$pvalue) > 100) { # calculate q-values - enr$qvalue <- qvalue::qvalue(as.numeric(as.character(enr$pvalue)))$qvalues + enr$qvalue <- qvalue(as.numeric(as.character(enr$pvalue)))$qvalues } else if (length(enr$pvalue) > 10) { - enr$qvalue <- qvalue::qvalue(as.numeric(as.character(enr$pvalue)), pi0.method = "bootstrap", fdr.level = 0.25)$qvalues + enr$qvalue <- qvalue(as.numeric(as.character(enr$pvalue)), pi0.method = "bootstrap", fdr.level = 0.25)$qvalues } else { warning("Not enough p-values for q-value estimation") diff --git a/R/factor.responses.R b/R/factor.responses.R index ade6bc8..8de5b21 100644 --- a/R/factor.responses.R +++ b/R/factor.responses.R @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2013 Leo Lahti +# Copyright (C) 2010-2016 Leo Lahti # Contact: Leo Lahti # # This program is free software; you can redistribute it and/or modify @@ -11,19 +11,14 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - -#' Description: List responses for each level of the given factor -#' -#' Arguments: -#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples -#' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. -#' @param method method for enrichment calculation -#' @param min.size minimum sample size for a response -#' @param data data (samples x features; or a vector in univariate case) -#' -#' Returns: -#' @return List with each element corresponding to one factor level and listing the responses according to association strength -#' +#' @title Factor responses +#' @description List responses for each level of the given factor +#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples +#' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. +#' @param method method for enrichment calculation +#' @param min.size minimum sample size for a response +#' @param data data (samples x features; or a vector in univariate case) +#' @return List with each element corresponding to one factor level and listing the responses according to association strength #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") #' @export diff --git a/R/factor.responses.minimal.R b/R/factor.responses.minimal.R index c54169c..aab42bb 100644 --- a/R/factor.responses.minimal.R +++ b/R/factor.responses.minimal.R @@ -1,4 +1,4 @@ -# Copyright (C) 2010-2013 Leo Lahti +# Copyright (C) 2010-2016 Leo Lahti # Contact: Leo Lahti # # This program is free software; you can redistribute it and/or modify @@ -11,19 +11,14 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - -#' Description: List responses for each level of the given factor -#' -#' Arguments: -#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples -#' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. -#' @param method method for enrichment calculation -#' @param min.size minimum sample size for a response -#' @param data data (samples x features; or a vector in univariate case) -#' -#' Returns: -#' @return List with each element corresponding to one factor level and listing the responses according to association strength -#' +#' @title Factor responses (minimal) +#' @description List responses for each level of the given factor +#' @param annotation.vector annotation vector with discrete factor levels, and named by the samples +#' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. +#' @param method method for enrichment calculation +#' @param min.size minimum sample size for a response +#' @param data data (samples x features; or a vector in univariate case) +#' @return List with each element corresponding to one factor level and listing the responses according to association strength #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") #' @export diff --git a/R/firstlib.R b/R/firstlib.R index 5ad8eec..644dcef 100644 --- a/R/firstlib.R +++ b/R/firstlib.R @@ -1,3 +1,4 @@ +#' @import methods #' @import dmt #' @import graph #' @import parallel @@ -8,13 +9,12 @@ #' @importFrom igraph subgraph #' @importFrom igraph graph.data.frame #' @importFrom igraph graph.edgelist -#' @import qvalue #' @import mclust -#' @import methods #' @importFrom plyr ddply #' @importFrom minet build.mim -#' @importFrom reshape melt +#' @importFrom reshape2 melt #' @importFrom ggplot2 ggplot +#' @importFrom ggplot2 qplot #' @importFrom ggplot2 theme_set #' @importFrom ggplot2 theme_bw #' @importFrom ggplot2 aes @@ -28,11 +28,11 @@ #' @importFrom ggplot2 geom_bar #' @importFrom ggplot2 geom_boxplot #' @importFrom ggplot2 facet_wrap -#' @importFrom ggplot2 opts + .onAttach <- function(lib, pkg) { - packageStartupMessage('\nnetresponse (C) 2008-2015 Leo Lahti et al.\n\nhttps://github.com/antagomir/netresponse') + packageStartupMessage('\nnetresponse (C) 2008-2016 Leo Lahti et al.\n\nhttps://github.com/antagomir/netresponse') } diff --git a/R/internals.R b/R/internals.R index 90d20ca..6e081fe 100644 --- a/R/internals.R +++ b/R/internals.R @@ -1,29 +1,3 @@ -#' pick.model.parameters -#' -#' @param m vdp.mixt output -#' @param nodes node names for naming purposes -#' @return Model parameters -#' @author Leo Lahti \email{leo.lahti@@iki.fi} -#' @references See citation("netresponse") -#' @keywords internal -#' @export -#' @examples # -pick.model.parameters <- function (m, nodes) { - - # Pick parameters - w <- m$posterior$weights # component weights - mu <- m$posterior$centroids # component centroids - sds <- m$posterior$sds # component standard devs - qofz <- m$posterior$qOFz # soft mode assignmentd - free.energy <- m$free.energy # free energy - Nparams <- m$posterior$Nparams - - # For mu and std, rows correspond to the mixture components, in w the elements - list(mu = mu, sd = sds, w = w, free.energy = free.energy, Nparams = Nparams, qofz = qofz) - -} - - get.subnet <- function (res, subnet.id) { if (is.numeric(subnet.id)) { diff --git a/R/list.responses.continuous.R b/R/list.responses.continuous.R index 47db110..1c76937 100644 --- a/R/list.responses.continuous.R +++ b/R/list.responses.continuous.R @@ -11,9 +11,8 @@ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. -#' Description: Investigate association of a continuous variable and the modes -#' -#' Arguments: +#' @title Investigate association of a continuous variable and the modes +#' @description Investigate association of a continuous variable and the modes. #' @param annotation.df annotation data.frame with discrete factor levels, rows #' named by the samples #' @param groupings Sample mode information. Each element corresponds to one of the modes and lists the samples assignment matrix qofz. Alternatively, a vector of mode indices named by the samples can be given. @@ -22,15 +21,12 @@ #' @param verbose verbose #' @param rounding rounding digits #' @param adjust.p Adjust p-values (this will add p.adj column and remove pvalue column in the output table) -#' -#' Returns: -#' @return Table listing all associations between the factor levels and -#' responses +#' @return Table listing all associations between the factor levels and responses #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") +#' @importFrom qvalue qvalue #' @export #' @keywords utilities - list.responses.continuous.single <- function (annotation.df, groupings, method = "t-test", pth = Inf, verbose = TRUE, rounding = NULL, adjust.p = TRUE) { # Collect the tables from all factors and levels here @@ -106,52 +102,3 @@ list.responses.continuous.single <- function (annotation.df, groupings, method = } - -#' Description: Investigate association of a continuous variable and the modes; given a list of groupings -#' -#' Arguments: -#' @param annotation.df annotation data.frame with discrete factor levels, rows -#' named by the samples -#' @param groupings Sample mode information. Each element corresponds to one grouping; each grouping lists samples for the modes within that grouping. -#' @param method method for quantifying the association -#' @param pth p-value threshold applied to adjusted p-values -#' @param verbose verbose -#' @param rounding rounding digits -#' -#' Returns: -#' @return Table listing all associations between the factor levels and responses -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @references See citation("netresponse") -#' @export -#' @keywords utilities - -list.responses.continuous.multi <- function (annotation.df, groupings, method = "t-test", pth = Inf, verbose = TRUE, rounding = NULL) { - - #annotation.df <- annot[, continuous.vars]; groupings <- groupings.listing; pth = pth; method <- "t-test"; verbose = TRUE; rounding = NULL - - tab <- NULL - for (gn in names(groupings)) { - - gntab <- list.responses.continuous.single(annotation.df, groupings[[gn]], method = method, pth = Inf, verbose = verbose, rounding = rounding, adjust.p = FALSE) - - gntab <- cbind(grouping = gn, gntab) - tab <- rbind(tab, gntab) - - } - - tab$p.adj <- rep(NA, nrow(tab)) - if (nrow(tab) > 100) { - qv <- qvalue(tab$pvalue, pi0.method = "bootstrap", fdr.level = 0.25) - if (("qvalues" %in% names(qv))) { - tab$p.adj <- qv$qvalues - } - } else { - tab$p.adj <- p.adjust(tab$pvalue, method = "BH") - } - - tab$pvalue <- NULL - tab <- tab[tab$p.adj < pth,] - - tab - -} \ No newline at end of file diff --git a/R/list.responses.continuous.multi.R b/R/list.responses.continuous.multi.R new file mode 100644 index 0000000..af83b58 --- /dev/null +++ b/R/list.responses.continuous.multi.R @@ -0,0 +1,45 @@ +#' @title Investigate association of a continuous variable and the modes +#' @description Investigate association of a continuous variable and the modes given a list of groupings +#' @param annotation.df annotation data.frame with discrete factor levels, rows +#' named by the samples +#' @param groupings Sample mode information. Each element corresponds to one grouping; each grouping lists samples for the modes within that grouping. +#' @param method method for quantifying the association +#' @param pth p-value threshold applied to adjusted p-values +#' @param verbose verbose +#' @param rounding rounding digits +#' @return Table listing all associations between the factor levels and responses +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @references See citation("netresponse") +#' @export +#' @importFrom qvalue qvalue +#' @keywords utilities +list.responses.continuous.multi <- function (annotation.df, groupings, method = "t-test", pth = Inf, verbose = TRUE, rounding = NULL) { + + #annotation.df <- annot[, continuous.vars]; groupings <- groupings.listing; pth = pth; method <- "t-test"; verbose = TRUE; rounding = NULL + + tab <- NULL + for (gn in names(groupings)) { + + gntab <- list.responses.continuous.single(annotation.df, groupings[[gn]], method = method, pth = Inf, verbose = verbose, rounding = rounding, adjust.p = FALSE) + + gntab <- cbind(grouping = gn, gntab) + tab <- rbind(tab, gntab) + + } + + tab$p.adj <- rep(NA, nrow(tab)) + if (nrow(tab) > 100) { + qv <- qvalue(tab$pvalue, pi0.method = "bootstrap", fdr.level = 0.25) + if (("qvalues" %in% names(qv))) { + tab$p.adj <- qv$qvalues + } + } else { + tab$p.adj <- p.adjust(tab$pvalue, method = "BH") + } + + tab$pvalue <- NULL + tab <- tab[tab$p.adj < pth,] + + tab + +} diff --git a/R/list.responses.factor.R b/R/list.responses.factor.R index 4b4a3f4..7b2a0d0 100644 --- a/R/list.responses.factor.R +++ b/R/list.responses.factor.R @@ -1,22 +1,6 @@ -# Copyright (C) 2010-2013 Leo Lahti -# Contact: Leo Lahti -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#' Description: List significantly associated responses for all factors and levels in the given -#' annotation matrix -#' -#' Arguments: -#' @param annotation.df annotation data.frame with discrete factor levels, rows -#' named by the samples +#' @title List significant responses +#' @description List significantly associated responses for all factors and levels in the given annotation matrix +#' @param annotation.df annotation data.frame with discrete factor levels, rows named by the samples #' @param models List of models. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. #' @param method method for enrichment calculation #' @param min.size minimum sample size for a response @@ -24,15 +8,12 @@ #' @param verbose verbose #' @param data data (samples x features; or a vector in univariate case) #' @param rounding rounding digits -#' -#' Returns: -#' @return Table listing all associations between the factor levels and -#' responses +#' @return Table listing all associations between the factor levels and responses #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") +#' @importFrom qvalue qvalue #' @export #' @keywords utilities - list.responses.factor <- function (annotation.df, models, method = "hypergeometric", min.size = 2, qth = Inf, verbose = TRUE, data = NULL, rounding = NULL) { pth <- NULL @@ -99,7 +80,7 @@ list.responses.factor <- function (annotation.df, models, method = "hypergeometr if (!is.null(collected.table)) { if (nrow(collected.table)>100) { - collected.table$qvalue <- qvalue::qvalue(collected.table$pvalue, gui = FALSE, fdr.level = 0.25)$qvalue + collected.table$qvalue <- qvalue(collected.table$pvalue, gui = FALSE, fdr.level = 0.25)$qvalue } else { collected.table$qvalue <- rep(NA, nrow(collected.table)) } diff --git a/R/list.responses.factor.minimal.R b/R/list.responses.factor.minimal.R index 4a89b9f..04c6632 100644 --- a/R/list.responses.factor.minimal.R +++ b/R/list.responses.factor.minimal.R @@ -1,20 +1,5 @@ -# Copyright (C) 2010-2013 Leo Lahti -# Contact: Leo Lahti -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -#' Description: List significantly associated responses for all factors and levels in the given -#' annotation matrix -#' -#' Arguments: +#' @title List factor responses (minimal) +#' @description List significantly associated responses for all factors and levels in the given annotation matrix #' @param annotation.df annotation data.frame with discrete factor levels, rows #' named by the samples #' @param groupings List of groupings. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples. @@ -24,19 +9,13 @@ #' @param verbose verbose #' @param data data (samples x features; or a vector in univariate case) #' @param rounding rounding digits -#' -#' Returns: -#' @return A list with two elements: Table listing all associations between the factor levels and -#' responses; multiple p-value adjustment method +#' @return A list with two elements: Table listing all associations between the factor levels and responses; multiple p-value adjustment method #' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") #' @export #' @keywords utilities - list.responses.factor.minimal <- function (annotation.df, groupings, method = "hypergeometric", min.size = 2, pth = Inf, verbose = TRUE, data = NULL, rounding = NULL) { - #annotation.df <- my.annot2; groupings <- groupings.listing2; method = "hypergeometric"; min.size = 2; pth = Inf; verbose = TRUE; data = NULL; rounding = NULL - # samples x features if(is.vector(data)) { data2 <- matrix(data) @@ -95,7 +74,7 @@ list.responses.factor.minimal <- function (annotation.df, groupings, method = "h if (!is.null(collected.table)) { if (nrow(collected.table)>100) { - collected.table$p.adj <- qvalue::qvalue(collected.table$pvalue, gui = FALSE, fdr.level = 0.25)$qvalue + collected.table$p.adj <- qvalue(collected.table$pvalue, gui = FALSE, fdr.level = 0.25)$qvalue p.adj.method <- "qvalue" } else { collected.table$p.adj <- p.adjust(collected.table$pvalue, method = "BH") diff --git a/R/mixture.model.R b/R/mixture.model.R new file mode 100644 index 0000000..4eea4a1 --- /dev/null +++ b/R/mixture.model.R @@ -0,0 +1,103 @@ +# Save the other half of yourselves and your lives for pleasure and +# adventure. It is not enough to fight for natural land and the west; +# it is even more important to enjoy it. While you can. While it's +# still there... Enjoy yourselves, keep your brain in your head and +# your head firmly attached to the body, the body active and alive, +# and I promise you this much: I promise you this one sweet victory +# over our enemies, over those desk-bound men with their hearts in a +# safe deposit box, and their eyes hypnotized by desk calculators. I +# promise you this: you will outlive the bastards. --Ed Abbey. + +#' @title Mixture model +#' @description Fit Gaussian mixture model +#' @param x data matrix (samples x features, for multivariate analysis) or a vector (for univariate analysis) +#' @param mixture.method Specify the approach to use in mixture modeling. Options. vdp (nonparametric Variational Dirichlet process mixture model); bic (based on Gaussian mixture modeling with EM, using BIC to select the optimal number of components) +#' @param max.responses Maximum number of responses for each subnetwork. Can be used to limit the potential number of network states. +#' @param implicit.noise Implicit noise parameter. Add implicit noise to vdp +#' mixture model. Can help to avoid overfitting to local optima, if this +#' appears to be a problem. +#' @param prior.alpha,prior.alphaKsi,prior.betaKsi Prior parameters for +#' Gaussian mixture model that is calculated for each subnetwork +#' (normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are +#' the shape and scale parameters of the inverse Gamma function, respectively. +#' @param vdp.threshold Minimal free energy improvement after which the +#' variational Gaussian mixture algorithm is deemed converged. +#' @param initial.responses Initial number of components for each subnetwork +#' model. Used to initialize calculations. +#' @param ite Maximum number of iterations on posterior update +#' (updatePosterior). Increasing this can potentially lead to more accurate results, but computation may take longer. +#' @param speedup Takes advantage of approximations to PCA, mutual information +#' etc in various places to speed up calculations. Particularly useful with +#' large and densely connected networks and/or large sample size. +#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture with mixture.method = "bic" +#' @param pca.basis pca.basis +#' @param min.responses minimum number of responses +#' @param ... Further optional arguments to be passed. +#' @return List with two elements: model: fitted mixture model (parameters and free energy); model.params: model parameters +#' @export +#' @references See citation("netresponse") +#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} +#' @keywords utilities +mixture.model <- function (x, mixture.method = "vdp", max.responses = 10, implicit.noise = 0, prior.alpha = 1, prior.alphaKsi = 0.01, prior.betaKsi = 0.01, vdp.threshold = 1.0e-5, initial.responses = 1, ite = Inf, speedup = TRUE, bic.threshold = 0, pca.basis = FALSE, min.responses = 1, ...) { + + # Present data in PCA space to cope with diagonality of the covariances + if (pca.basis) { + if (nrow(x) > ncol(x)) { + x <- princomp(x)$scores + } else { + # FIXME: implement sparse PCA here to gain more generality? + warning("Less samples than features, not applying PCA basis") + x <- x + } + } + + if ( is.vector(x) ) { xm <- matrix(x, nrow = length(x)); rownames(xm) <- names(x); x <- xm } + + if (mixture.method == "vdp") { + + model <- vdp.mixt(x, + implicit.noise = implicit.noise, + prior.alpha = prior.alpha, + prior.alphaKsi = prior.alphaKsi, + prior.betaKsi = prior.betaKsi, + threshold = vdp.threshold, + initial.K = initial.responses, # FIXME: move initial.K into initial.responses for clarity + ite = ite, + c.max = max.responses, + speedup = speedup) + + model.params <- pick.model.parameters(model, colnames(x)) + + } else if (mixture.method == "bic") { + + model <- bic.mixture(x, max.modes = max.responses, bic.threshold = bic.threshold, min.modes = min.responses) + + mu <- matrix(model$means, nrow = length(model$ws)) + sd <- matrix(model$sds, nrow = length(model$ws)) + ws <- matrix(model$ws) + qofz <- matrix(model$qofz, ncol = length(ws)) + bic <- model$bic + + rownames(qofz) <- rownames(x) + + rownames(mu) <- rownames(sd) <- names(ws) + colnames(mu) <- colnames(sd) <- colnames(x) + + model.params <- list(mu = mu, + sd = sd, + w = ws, + qofz = qofz, + free.energy = model$free.energy, + Nparams = model$Nparams, + bic = bic) + + } else { + stop("Provide proper mixture.method argument.") + } + + # FIXME: perhaps the 'model' is not needed any more when model.params is given? Check and remove to save space. + # How about pca.basis = TRUE case? + model.params + +} + diff --git a/R/mixtures.R b/R/mixtures.R deleted file mode 100644 index 1fbc676..0000000 --- a/R/mixtures.R +++ /dev/null @@ -1,320 +0,0 @@ -# Save the other half of yourselves and your lives for pleasure and -# adventure. It is not enough to fight for natural land and the west; -# it is even more important to enjoy it. While you can. While it's -# still there... Enjoy yourselves, keep your brain in your head and -# your head firmly attached to the body, the body active and alive, -# and I promise you this much: I promise you this one sweet victory -# over our enemies, over those desk-bound men with their hearts in a -# safe deposit box, and their eyes hypnotized by desk calculators. I -# promise you this: you will outlive the bastards. --Ed Abbey. - -#' Description: Fit Gaussian mixture model -#' -#' Arguments: -#' @param x data matrix (samples x features, for multivariate analysis) or a vector (for univariate analysis) -#' @param mixture.method Specify the approach to use in mixture modeling. -#' Options. vdp (nonparametric Variational Dirichlet process mixture model); -#' bic (based on Gaussian mixture modeling with EM, using BIC to select the -#' optimal number of components) -#' @param max.responses Maximum number of responses for each subnetwork. Can be -#' used to limit the potential number of network states. -#' @param implicit.noise Implicit noise parameter. Add implicit noise to vdp -#' mixture model. Can help to avoid overfitting to local optima, if this -#' appears to be a problem. -#' @param prior.alpha,prior.alphaKsi,prior.betaKsi Prior parameters for -#' Gaussian mixture model that is calculated for each subnetwork -#' (normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are -#' the shape and scale parameters of the inverse Gamma function, respectively. -#' @param vdp.threshold Minimal free energy improvement after which the -#' variational Gaussian mixture algorithm is deemed converged. -#' @param initial.responses Initial number of components for each subnetwork -#' model. Used to initialize calculations. -#' @param ite Maximum number of iterations on posterior update -#' (updatePosterior). Increasing this can potentially lead to more accurate results, but computation may take longer. -#' @param speedup Takes advantage of approximations to PCA, mutual information -#' etc in various places to speed up calculations. Particularly useful with -#' large and densely connected networks and/or large sample size. -#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture with mixture.method = "bic" -#' @param pca.basis pca.basis -#' @param min.responses minimum number of responses -#' @param ... Further optional arguments to be passed. -#' -#' Returns: -#' @return List with two elements: model: fitted mixture model (parameters and free energy); model.params: model parameters -#' -#' @export -#' @references See citation("netresponse") -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @keywords utilities - -mixture.model <- function (x, mixture.method = "vdp", max.responses = 10, implicit.noise = 0, prior.alpha = 1, prior.alphaKsi = 0.01, prior.betaKsi = 0.01, vdp.threshold = 1.0e-5, initial.responses = 1, ite = Inf, speedup = TRUE, bic.threshold = 0, pca.basis = FALSE, min.responses = 1, ...) { - - # Present data in PCA space to cope with diagonality of the covariances - if (pca.basis) { - if (nrow(x) > ncol(x)) { - x <- princomp(x)$scores - } else { - # FIXME: implement sparse PCA here to gain more generality? - warning("Less samples than features, not applying PCA basis") - x <- x - } - } - - if ( is.vector(x) ) { xm <- matrix(x, nrow = length(x)); rownames(xm) <- names(x); x <- xm } - - if (mixture.method == "vdp") { - - model <- vdp.mixt(x, - implicit.noise = implicit.noise, - prior.alpha = prior.alpha, - prior.alphaKsi = prior.alphaKsi, - prior.betaKsi = prior.betaKsi, - threshold = vdp.threshold, - initial.K = initial.responses, # FIXME: move initial.K into initial.responses for clarity - ite = ite, - c.max = max.responses, - speedup = speedup) - - model.params <- pick.model.parameters(model, colnames(x)) - - } else if (mixture.method == "bic") { - - model <- bic.mixture(x, max.modes = max.responses, bic.threshold = bic.threshold, min.modes = min.responses) - - mu <- matrix(model$means, nrow = length(model$ws)) - sd <- matrix(model$sds, nrow = length(model$ws)) - ws <- matrix(model$ws) - qofz <- matrix(model$qofz, ncol = length(ws)) - bic <- model$bic - - rownames(qofz) <- rownames(x) - - rownames(mu) <- rownames(sd) <- names(ws) - colnames(mu) <- colnames(sd) <- colnames(x) - - model.params <- list(mu = mu, - sd = sd, - w = ws, - qofz = qofz, - free.energy = model$free.energy, - Nparams = model$Nparams, - bic = bic) - - } else { - stop("Provide proper mixture.method argument.") - } - - # FIXME: perhaps the 'model' is not needed any more when model.params is given? Check and remove to save space. - # How about pca.basis = TRUE case? - model.params - -} - - - - - - - -#' Description: Latent class analysis based on (infinite) Gaussian mixture model. -#' If the input is data matrix, a multivariate model is fitted; if the input is a vector, a univariate model is fitted -#' -#' Arguments: -#' @param x samples x features matrix for multivariate analysis, or a vector for univariate analysis -#' @param max.modes Maximum number of modes to be checked for mixture model selection -#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. -#' @param min.modes minimum number of modes -#' @param ... Further optional arguments to be passed -#' -#' Returns: -#' @return Fitted latent class model (parameters and free energy) -#' -#' @export -#' @references See citation("netresponse") -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @keywords utilities -bic.mixture <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { - - # x; max.modes = max.responses; bic.threshold = bic.threshold; min.modes = min.responses - - if (!is.vector(x) && ncol(x) == 1) {x <- x[,1]} - - if (is.vector(x)) { - bic.mixture.univariate(x, max.modes, bic.threshold, min.modes = min.modes, ...) - } else { - bic.mixture.multivariate(x, max.modes, bic.threshold, min.modes = min.modes, ...) - } - -} - - -#' Description: Latent class analysis based on (infinite) Gaussian mixture model. -#' If the input (dat) is data matrix, a multivariate model is fitted. -#' -#' Arguments: -#' @param x matrix (for multivariate analysis) -#' @param max.modes Maximum number of modes to be checked for mixture model selection -#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. -#' @param min.modes Minimum number of modes to be checked for mixture model selection -#' @param ... Further optional arguments to be passed -#' -#' Returns: -#' @return Fitted latent class model (parameters and free energy) -#' -#' @export -#' @references See citation("netresponse") -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @keywords utilities - -bic.mixture.multivariate <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { - - # x <- mat; max.modes = params$max.responses; bic.threshold = params$bic.threshold - - best.mode <- bic.select.best.mode(x, max.modes, bic.threshold, min.modes) - - mcl <- Mclust(x, G = best.mode) - - bic <- try(-mclustBIC(x, G = best.mode)[, "VVV"]) - if ( is.na(bic) ) { bic <- Inf } # infinitely bad = Inf - - means <- t(mcl$parameters$mean) - vars <- t(apply(mcl$parameters$variance$sigma, 3, function(x){diag(x)})) - sds <- sqrt(vars) - ws <- as.vector(mcl$parameters$pro) - if (is.null(ws)) {ws <- 1} - - Nparams <- prod(dim(means)) + prod(dim(sds)) + length(ws) - - # Determine the most likely mode for each sample (-> hard clusters) - qofz <- P.r.s(t(x), list(mu = means, sd = sds, w = ws), log = FALSE) - rownames(qofz) <- rownames(x) - colnames(qofz) <- paste("Mode", 1:ncol(qofz), sep = "-") - - rownames(means) <- rownames(sds) <- names(ws) <- paste("Mode", 1:length(ws), sep = "-") - colnames(means) <- colnames(sds) <- colnames(x) - - list(means = means, sds = sds, ws = ws, Nparams = Nparams, free.energy = -mcl$loglik, qofz = qofz, bic = bic) - -} - -#' Description: Latent class analysis based on (infinite) Gaussian mixture -#' model. If the input (dat) is data matrix, a multivariate model is fitted. If -#' the input is a vector or a 1-dimensional matrix, a univariate model is -#' fitted. -#' -#' Arguments: -#' @param x dat vector (for univariate analysis) or a matrix (for multivariate analysis) -#' @param max.modes Maximum number of modes to be checked for mixture model selection -#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. -#' @param min.modes minimum number of modes -#' @param ... Further optional arguments to be passed -#' -#' Returns: -#' @return Fitted latent class model (parameters and free energy) -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @references See citation("netresponse") -#' @export -#' @keywords utilities -bic.mixture.univariate <- function (x, max.modes, bic.threshold = 0, min.modes = 1, ...) { - - # x <- datamatrix[, node]; max.modes = params$max.responses; bic.threshold = params$bic.threshold - - best.mode <- bic.select.best.mode(x, max.modes, bic.threshold, min.modes = min.modes) - mcl <- Mclust(x, G = best.mode) - - means <- as.vector(mcl$parameters$mean) - sds <- as.vector(sqrt(mcl$parameters$variance$sigmasq)) - if (length(sds) == 1) {sds <- rep(sds, length(means))} - ws <- as.vector(mcl$parameters$pro) - - if (is.null(ws)) {warning("NULL weights, replacing with 1"); ws <- 1} - if (is.null(means)) {warning("NULL means, replacing with 1"); means <- 1} - if (is.null(sds)) {warning("NULL sds, replacing with 1"); sds <- 1} - - Nparams <- length(means) + length(sds) + length(ws) - - means <- matrix(means, nrow = length(ws)) - sds <- matrix(sds, nrow = length(ws)) - - # Determine the most likely mode for each sample (-> hard clusters) - # save(means, sds, ws, x, file = "~/tmp/tmp.RData") - qofz <- P.r.s(matrix(x, nrow = 1), list(mu = means, sd = sds, w = ws), log = FALSE) - rownames(qofz) <- names(x) - - names(means) <- names(sds) <- names(ws) <- paste("Mode", 1:length(ws), sep = "-") - - list(means = means, sds = sds, ws = ws, Nparams = Nparams, free.energy = -mcl$loglik, qofz = qofz) - -} - - - - -#' Description: Select optimal number of mixture components by adding components until -#' the increase in objective function is below threshold. -#' -#' Arguments: -#' @param x dat vector (for univariate analysis) or a matrix (for multivariate analysis) -#' @param max.modes Maximum number of modes to be checked for mixture model selection -#' @param bic.threshold BIC threshold which needs to be exceeded before a new mode is added to the mixture. -#' @param min.modes Optiomal. Minimum number of modes. -#' -#' Returns: -#' @return Fitted latent class model (parameters and free energy) -#' @author Contact: Leo Lahti \email{leo.lahti@@iki.fi} -#' @references See citation("netresponse") -#' @export -#' @keywords utilities -bic.select.best.mode <- function (x, max.modes, bic.threshold, min.modes = 1) { - - # Cost for single mode - # BIC : smaller is better - # mclustBIC returns the value for -BIC, to be exact - nc <- min.modes - if (is.vector(x)) { # univariate - m <- -mclustBIC(x, G = nc)[, "V"] - } else { # multivariate - m <- -mclustBIC(x, G = nc)[, "VVV"] # BIC : smaller is better - } - - # ---------------------------------------------------------------- - - add.component <- TRUE - best.mode <- min.modes - if (max.modes == min.modes) { - add.component <- FALSE - } - - while (add.component && nc < max.modes) { - - nc <- nc + 1 - - # BIC : smaller is better - if (is.vector(x)) { # univariate - m.new <- try(-mclustBIC(x, G = nc)[, "V"]) - } else { # multivariate - m.new <- try(-mclustBIC(x, G = nc)[, "VVV"]) - } - if ( is.na(m.new) ) { m.new <- Inf } # infinitely bad = Inf - - # FIXME: compressing data with PCA after dimensionality gets otherwise too high? - # with around ncol(x) = 30 the mclustBIC is starting to produce NAs - - # FIXME: remove this when code works ok - # if (is.na(m.new)) {save(x, nc, file = "m.new.RData")} - - bic.delta <- m.new - m - - if (bic.delta < -bic.threshold) { - best.mode <- nc - m <- m.new - } else { - add.component <- FALSE - } - } - - best.mode - -} - - diff --git a/R/order.responses.R b/R/order.responses.R index 73494ab..9ef43e3 100644 --- a/R/order.responses.R +++ b/R/order.responses.R @@ -15,13 +15,8 @@ #} -#' order.responses -#' -#' Orders the responses by association strength (enrichment score) to a given -#' sample set. For instance, if the samples correspond to a particular -#' experimental factor, this function can be used to prioritize the responses -#' according to their association strength to this factor. -#' +#' @title order.responses +#' @description Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. #' @param models List of models. Each model should have a sample-cluster assignment matrix qofz. #' @param sample Measure enrichment of this sample (set) across the observed #' responses. @@ -35,7 +30,6 @@ #' By default, use all subnets. #' @param verbose Follow progress by intermediate messages. #' @param data data (samples x features; or a vector in univariate case) -#' #' @return A data frame with elements 'ordered.responses' which gives a data #' frame of responses ordered by enrichment score for the investigated sample. #' The subnetwork, response id and enrichment score are shown. @@ -47,6 +41,7 @@ #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @references See citation("netresponse") for citation details. #' @keywords utilities +#' @importFrom qvalue qvalue #' @export #' @examples # #' # - for given sample/s (factor level), @@ -82,9 +77,8 @@ order.responses <- function (models, sample, method = "hypergeometric", } - -#' List responses with significant associations to a given sample group. -#' +#' @title Listing significant responses +#' @description List responses with significant associations to a given sample group. #' @param model NetResponseModel object. #' @param sample User-specified samples group for which the enrichments are #' calculated. For instance, an annotation category. diff --git a/R/pick.model.pairs.R b/R/pick.model.pairs.R index 5c3330b..7a5f454 100644 --- a/R/pick.model.pairs.R +++ b/R/pick.model.pairs.R @@ -17,10 +17,8 @@ # Seppa, Harri Valpola, and Paul Wagner. -#' pick.model.pairs -#' -#' Mainly for internal use. Calculate joint model for each node pair -#' +#' @title Pick model pairs +#' @description Mainly for internal use. Calculate joint model for each node pair #' @param network network #' @param network.nodes network.nodes #' @param node.models node.models diff --git a/R/pick.model.parameters.R b/R/pick.model.parameters.R new file mode 100644 index 0000000..9c11911 --- /dev/null +++ b/R/pick.model.parameters.R @@ -0,0 +1,26 @@ +#' @title pick.model.parameters +#' @description Pick model parameters +#' @param m vdp.mixt output +#' @param nodes node names for naming purposes +#' @return Model parameters +#' @author Leo Lahti \email{leo.lahti@@iki.fi} +#' @references See citation("netresponse") +#' @keywords internal +#' @export +#' @examples # +pick.model.parameters <- function (m, nodes) { + + # Pick parameters + w <- m$posterior$weights # component weights + mu <- m$posterior$centroids # component centroids + sds <- m$posterior$sds # component standard devs + qofz <- m$posterior$qOFz # soft mode assignmentd + free.energy <- m$free.energy # free energy + Nparams <- m$posterior$Nparams + + # For mu and std, rows correspond to the mixture components, in w the elements + list(mu = mu, sd = sds, w = w, free.energy = free.energy, Nparams = Nparams, qofz = qofz) + +} + + diff --git a/R/pkg-package.R b/R/pkg-package.R index 16d204d..b63d850 100644 --- a/R/pkg-package.R +++ b/R/pkg-package.R @@ -1,14 +1,5 @@ -#' Dna damage data set (PPI and expression) -#' -#' A combined yeast data set with protein-protein interactions and gene -#' expression (dna damage). Gene expression profiles are transformed into links -#' by computing a Pearson correlation for all pairs of genes and treating all -#' correlations above 0.85 as additional links. -#' -#' Number of genes: 1823, number of interactions: 12382, number of gene -#' expression observations: 52, number of total links with PPI and expression -#' links: 15547. -#' +#' @title Dna damage data set (PPI and expression) +#' @description A combined yeast data set with protein-protein interactions and gene expression (dna damage). Gene expression profiles are transformed into links by computing a Pearson correlation for all pairs of genes and treating all correlations above 0.85 as additional links. Number of genes: 1823, number of interactions: 12382, number of gene expression observations: 52, number of total links with PPI and expression links: 15547. #' @name dna #' @docType data #' @usage data(dna) @@ -32,18 +23,12 @@ #' @source PPI data pooled from yeast data sets of [1] and [2]. Dna damage #' expression set of [3]. #' @keywords datasets -#' @examples -#' -#' data(dna) -#' +#' @examples data(dna) NULL -#' Class "NetResponseModel" -#' -#' A NetResponse model. -#' -#' +#' @title Class "NetResponseModel" +#' @description A NetResponse model. #' @name NetResponseModel-class #' @aliases NetResponseModel-class [[,NetResponseModel-method show,NetResponseModel-method #' @docType class @@ -51,20 +36,15 @@ NULL #' function. #' @author Leo Lahti \email{leo.lahti@@iki.fi} #' @keywords classes -#' @examples -#' showClass("NetResponseModel") +#' @examples showClass("NetResponseModel") NULL -#' NetResponse: Global modeling of transcriptional responses in interaction -#' networks -#' -#' Global modeling of transcriptional responses in interaction networks. -#' +#' @title NetResponse: Global modeling of transcriptional responses in interaction networks +#' @description Global modeling of transcriptional responses in interaction networks. #' \tabular{ll}{ Package: \tab netresponse\cr Type: \tab Package\cr Version: #' \tab See sessionInfo() or DESCRIPTION file\cr Date: \tab 2011-02-03\cr #' License: \tab GNU GPL >=2\cr LazyLoad: \tab yes\cr } -#' #' @name netresponse-package #' @aliases netresponse-package netresponse #' @docType package @@ -76,29 +56,23 @@ NULL #' for details. #' @keywords package #' @examples -#' #' # Define parameters for toy data #' Ns <- 200 # number of samples (conditions) #' Nf <- 10 # number of features (nodes) #' feature.names <- paste("feat", seq(Nf), sep="") #' sample.names <- paste("sample", seq(Ns), sep="") -#' #' # random seed #' set.seed( 123 ) -#' #' # Random network #' netw <- pmax(array(sign(rnorm(Nf^2)), dim = c(Nf, Nf)), 0) #' # in pathway analysis nodes correspond to genes #' rownames(netw) <- colnames(netw) <- feature.names -#' #' # Random responses of the nodes across conditions #' D <- array(rnorm(Ns*Nf), dim = c(Ns,Nf), dimnames = list(sample.names, feature.names)) #' D[1:100, 4:6] <- t(sapply(1:(Ns/2),function(x){rnorm(3, mean = 1:3)})) #' D[101:Ns, 4:6] <- t(sapply(1:(Ns/2),function(x){rnorm(3, mean = 7:9)})) -#' #' # Calculate the model #' model <- detect.responses(D, netw) -#' #' # Subnets (each is a list of nodes) #' get.subnets( model ) #' @@ -108,20 +82,10 @@ NULL #' subnet.id <- names(model@@subnets)[[1]] #' m <- get.model.parameters(model, subnet.id) #' print(m) -#' NULL -#' Osmoshock data set (PPI and expression) -#' -#' A combined yeast data set with protein-protein interactions and gene -#' expression (osmotick shock response). Gene expression profiles are -#' transformed into links by computing a Pearson correlation for all pairs of -#' genes and treating all correlations above 0.85 as additional links. -#' -#' Number of genes: 1711, number of interactions: 10250, number of gene -#' expression observations: 133, number of total links with PPI and expression -#' links: 14256. -#' +#' @title Osmoshock data set (PPI and expression) +#' @description A combined yeast data set with protein-protein interactions and gene expression (osmotick shock response). Gene expression profiles are transformed into links by computing a Pearson correlation for all pairs of genes and treating all correlations above 0.85 as additional links. Number of genes: 1711, number of interactions: 10250, number of gene expression observations: 133, number of total links with PPI and expression links: 14256. #' @name osmo #' @docType data #' @usage data(osmo) @@ -144,24 +108,17 @@ NULL #' @source PPI data pooled from yeast data sets of [1] and [2]. Dna damage #' expression set of [3]. #' @keywords datasets -#' @examples -#' -#' data(osmo) -#' +#' @examples data(osmo) NULL -#' toydata -#' -#' Toy data for NetResponse examples. -#' -#' +#' @title toydata +#' @description Toy data for NetResponse examples. #' @name toydata #' @docType data #' @usage data(toydata) #' @format -#' #' Toy data: a list with three elements: #' #' emat: Data matrix (samples x features). This contains the same features that @@ -179,13 +136,11 @@ NULL #' in interaction networks. Bioinformatics (2010). #' @keywords misc #' @examples -#' #' data(toydata) #' D <- toydata$emat # Response matrix (samples x features) #' netw <- toydata$netw # Network between the features #' model <- toydata$model # Pre-calculated NetResponseModel obtained with #' # model <- detect.responses(D, netw) -#' NULL diff --git a/R/plot-methods.R b/R/plot-methods.R index 59607cc..3c7b0b4 100755 --- a/R/plot-methods.R +++ b/R/plot-methods.R @@ -1,14 +1,5 @@ -# FIXME: make general plot.associations function - -#' Association strength between category labels and responses. -#' -#' Plot association strength between user-defined category labels and -#' responses in a selected subnetwork. -#' -#' Associations are showm in terms -log10(p) enrichment values for the -#' annotation categories for the responses within the specified subnetwork. No -#' correction for multiple testing. -#' +#' @title Association strength between category labels and responses. +#' @description Plot association strength between user-defined category labels and responses in a selected subnetwork. Associations are showm in terms -log10(p) enrichment values for the annotation categories for the responses within the specified subnetwork. No correction for multiple testing. #' @param x NetResponseModel object #' @param subnet.id Subnetwork. #' @param labels Factor. Labels for the data samples. Name by samples, or @@ -16,10 +7,10 @@ #' @param method Method to calculate association strength. #' @param mode group.by.responses or group.by.classes: indicate barplot #' grouping type. -#' @param ... Other arguments to be passed for plot. +#' @param ... Other arguments to be passed for plot_ #' @return Used for side effect (plotting). #' @author Leo Lahti \email{leo.lahti@@iki.fi} -#' @seealso plot.responses +#' @seealso plot_responses #' @references See citation("netresponse"). #' @keywords utilities #' @examples # @@ -69,12 +60,10 @@ plot_associations <- function (x, subnet.id, labels, -#' plotPCA -#' -#' Visualize data, centroids and response confidence intervals for a given +#' @title plotPCA +#' @description Visualize data, centroids and response confidence intervals for a given #' subnetwork with PCA. Optionally, color the samples according to annotations #' labels. -#' #' @param x NetResponseModel object. Output from the detect.responses function. #' @param subnet.id Subnetwork id. Either character as 'Subnetwork-2' or #' numeric as 2, which is then converted to character. @@ -157,12 +146,10 @@ plotPCA <- function (x, subnet.id, labels = NULL, confidence = 0.95, ...) { -#' PlotMixtureBivariate -#' -#' Visualize data, centroids and response confidence intervals for a given +#' @title PlotMixtureBivariate +#' @description Visualize data, centroids and response confidence intervals for a given #' Gaussian mixture model in two-dimensional (bivariate) case. Optionally, #' color the samples according to annotations labels. -#' #' @param x data matrix (samples x features) #' @param means mode centroids (modes x features) #' @param sds mode standard deviations, assuming diagonal covariance @@ -219,12 +206,10 @@ PlotMixtureBivariate <- function (x, means, sds, ws, labels = NULL, } } -#' PlotMixtureMultivariate -#' -#' Visualize data, centroids and response confidence intervals for a given +#' @title PlotMixtureMultivariate +#' @description Visualize data, centroids and response confidence intervals for a given #' Gaussian mixture model with PCA. Optionally, color the samples according #' to annotations labels. -#' #' @param x data matrix (samples x features) #' @param means mode centroids (modes x features) #' @param sds mode standard deviations, assuming diagonal covariance matrices @@ -327,30 +312,22 @@ PlotMixtureMultivariate <- function (x, means, sds, ws, labels = NULL, } -#' Plot observed data. -#' -#' Plotting tool for measurement data. -#' +#' @title Plot observed data. +#' @description Plotting tool for measurement data. #' Produces boxplot for each feature in each annotation category for the #' selected subnetwork. -#' -#' @usage \method{plot}{data}(x, subnet.id, labels, ...) -#' #' @param x NetResponseModel object. #' @param subnet.id Specify the subnetwork. #' @param labels Annotation categories. #' @param ... Further arguments for plot function. -#' -#' Return: #' @return ggplot2 plot object #' @author Leo Lahti -#' @seealso plot.responses +#' @seealso plot_responses #' @references See citation("netresponse") #' @keywords utilities #' @export #' @examples # -#' -plot.data <- function (x, subnet.id, labels, ...) { +plot_data <- function (x, subnet.id, labels, ...) { # ggplot2 boxplots for each user-defined sample category (listed in labels) dat <- t(get.dat(x, subnet.id)) # samples x nodes @@ -366,30 +343,23 @@ plot.data <- function (x, subnet.id, labels, ...) { -#' plot.expression -#' -#' Plot expression matrix in color scale. For one-channel data; plot expression +#' @title plot_expression +#' @description Plot expression matrix in color scale. For one-channel data; plot expression #' of each gene relative to its mean expression level over all samples. Blue #' indicates decreased expression and red indicates increased expression. #' Brightness of the color indicates magnitude of the change. Black denotes no #' change. -#' -#' -#' @usage \method{plot}{expression}(x, maintext, ...) #' @param x samples x features matrix #' @param maintext main title #' @param ... optional arguments #' @return Used for its side effects. #' @author Leo Lahti \email{leo.lahti@@iki.fi} -#' @seealso \code{\link{plot.scale}} +#' @seealso \code{\link{plot_scale}} #' @references See citation("netresponse"). #' @keywords utilities #' @export -#' @examples # -#' -#' #plot.expression(x) -#' -plot.expression <- function (x, maintext, ...) { # was: plot.matrix +#' @examples #plot_expression(x) +plot_expression <- function (x, maintext, ...) { # was: plot_matrix # set color breakpoints and palette mybreaks <- set.breaks(1, interval = .02) @@ -406,16 +376,12 @@ plot.expression <- function (x, maintext, ...) { # was: plot.matrix } -#' plot.subnet -#' -#' Plot the given subnetwork. -#' -#' -#' @usage \method{plot}{subnet}(x, subnet.id, network, plot.names = TRUE, ...) +#' @title plot_subnet +#' @description Plot the given subnetwork. #' @param x Result from NetResponse (detect.responses function). #' @param subnet.id Subnet id. #' @param network Original network used in the modelling. -#' @param plot.names Plot node names (TRUE) or indices (FALSE). +#' @param plot_names Plot node names (TRUE) or indices (FALSE). #' @param ... Further arguments for plot function. #' @return Used for its side-effects. Returns a matrix that describes the #' investigated subnetwork. @@ -426,11 +392,9 @@ plot.expression <- function (x, maintext, ...) { # was: plot.matrix #' @keywords utilities #' @export #' @examples # -#' #' # res <- detect.responses(D, netw, verbose = FALSE) -#' # net <- plot.subnet(res, subnet.idx = 1) -#' -plot.subnet <- function (x, subnet.id, network, plot.names = TRUE, ...) { +#' # net <- plot_subnet(res, subnet.idx = 1) +plot_subnet <- function (x, subnet.id, network, plot_names = TRUE, ...) { if (is.numeric(subnet.id)) { subnet.id <- paste("Subnet", subnet.id, sep = "-") @@ -441,7 +405,7 @@ plot.subnet <- function (x, subnet.id, network, plot.names = TRUE, ...) { subnet.nodes <- get.subnets(x)[[subnet.id]] mynet <- network[subnet.nodes, subnet.nodes] - tmp <- plot.response(x = NULL, mynet, mybreaks = NULL, mypalette = NULL, + tmp <- plot_response(x = NULL, mynet, mybreaks = NULL, mypalette = NULL, colors = FALSE, maintext = subnet.id) mynet @@ -456,20 +420,16 @@ plot.subnet <- function (x, subnet.id, network, plot.names = TRUE, ...) { -#' plot.response -#' -#' Plot a specific transcriptional response for a given subnetwork. -#' -#' -#' @usage \method{plot}{response}(x, mynet, mybreaks, mypalette, plot.names = -#' TRUE, colors = TRUE, plot.type = "twopi", ...) +#' @title plot_response +#' @description Plot a specific transcriptional response for a given subnetwork. +#' TRUE, colors = TRUE, plot_type = "twopi", ...) #' @param x A numerical vector, or NULL. #' @param mynet Binary matrix specifying the interactions between nodes. -#' @param mybreaks Specify breakpoints for color plot. -#' @param mypalette Specify palette for color plot. -#' @param plot.names Plot node names (TRUE) or indices (FALSE). +#' @param mybreaks Specify breakpoints for color plot_ +#' @param mypalette Specify palette for color plot_ +#' @param plot_names Plot node names (TRUE) or indices (FALSE). #' @param colors Plot colors. Logical. -#' @param plot.type Network plot mode. For instance, 'neato' or 'twopi'. +#' @param plot_type Network plot mode. For instance, 'neato' or 'twopi'. #' @param ... Further arguments for plot function. #' @return Used for its side-effects. #' @author Leo Lahti, Olli-Pekka Huovilainen and Antonio Gusmao. Maintainer: @@ -479,12 +439,10 @@ plot.subnet <- function (x, subnet.id, network, plot.names = TRUE, ...) { #' @keywords utilities #' @export #' @examples -#' #tmp <- plot.response(model, mynet, +#' #tmp <- plot_response(model, mynet, #' # maintext = paste("Subnetwork", subnet.id)) -#' -plot.response <- -function (x, mynet, mybreaks, mypalette, plot.names = TRUE, colors = TRUE, - plot.type = "twopi", ...) { +plot_response <- function (x, mynet, mybreaks, mypalette, plot_names = TRUE, colors = TRUE, + plot_type = "twopi", ...) { check.bins <- function (difexp, mybreaks) { @@ -516,7 +474,7 @@ function (x, mynet, mybreaks, mypalette, plot.names = TRUE, colors = TRUE, names(nAttrs$fillcolor) <- rownames(mynet) # add node names for all nodes - if (plot.names) { + if (plot_names) { nodenames <- rownames(mynet) } else { nodenames <- rep("", nrow(mynet)) @@ -527,7 +485,7 @@ function (x, mynet, mybreaks, mypalette, plot.names = TRUE, colors = TRUE, myg <- as(new("graphAM", mynet, "undirected"), "graphNEL") - plot(myg, y = plot.type, nodeAttrs = nAttrs, ...) + plot(myg, y = plot_type, nodeAttrs = nAttrs, ...) } @@ -535,51 +493,47 @@ function (x, mynet, mybreaks, mypalette, plot.names = TRUE, colors = TRUE, -#' plot.responses -#' -#' Plot the detected transcriptional responses for a given subnetwork. -#' -#' @usage \method{plot}{responses}(x, subnet.id, nc = 3, plot.names = TRUE, -#' plot.mode = "network", xaxis = TRUE, yaxis = TRUE, plot.type = "twopi", mar +#' @title plot_responses +#' @description Plot the detected transcriptional responses for a given subnetwork. +#' plot_mode = "network", xaxis = TRUE, yaxis = TRUE, plot_type = "twopi", mar #' = c(5, 4, 4, 2), horiz = TRUE, datamatrix = NULL, scale = FALSE, ...) #' @param x Result from NetResponse (detect.responses function). #' @param subnet.id Subnet id. #' @param nc Number of columns for an array of images. -#' @param plot.names Plot node names (TRUE) or indices (FALSE). -#' @param plot.mode network: plot responses as a subnetwork graph; matrix, +#' @param plot_names Plot node names (TRUE) or indices (FALSE). +#' @param plot_mode network: plot responses as a subnetwork graph; matrix, #' heatmap: plot subnetwork expression matrix. For both, expression of each #' gene is shown relative to the mean expression level of the gene; -#' boxplot.data: feature-wise boxplots for hard sample-to-response assignments; +#' boxplot_data: feature-wise boxplots for hard sample-to-response assignments; #' response.barplot: estimated response centroids as barplot including 95% #' confidence intervals for the means; pca: PCA projection with estimated #' centroids and 95% intervals. In 1-dimensional case a histogram is drawn. In #' two-dimensional case the original coordinates are used. #' @param xaxis,yaxis Logical. Plot row/column names. -#' @param plot.type Network plot mode. For instance, 'neato' or 'twopi'. +#' @param plot_type Network plot mode. For instance, 'neato' or 'twopi'. #' @param mar Figure margins. -#' @param horiz Logical. Horizontal barplot. +#' @param horiz Logical. Horizontal barplot_ #' @param datamatrix datamatrix -#' @param scale scale the phylotypes to unit length (only implemented for -#' plot.mode = "matrix" +#' @param scale scale the phylotypes to unit length (only implemented for plot_mode = "matrix" #' @param ... Further arguments for plot function. #' @return Used for its side-effects. #' @author Leo Lahti \email{leo.lahti@@iki.fi} -#' @seealso \code{\link{plot.scale}} +#' @seealso \code{\link{plot_scale}} #' @references See citation("netresponse") #' @keywords utilities #' @export #' @examples # #' #res <- detect.responses(D, netw) -#' #vis <- plot.responses(res, subnet.id) -plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, - plot.mode = "network", xaxis = TRUE, yaxis = TRUE, - plot.type = "twopi", mar = c(5, 4, 4, 2), +#' #vis <- plot_responses(res, subnet.id) +plot_responses <- function (x, subnet.id, nc = 3, plot_names = TRUE, + plot_mode = "network", xaxis = TRUE, yaxis = TRUE, + plot_type = "twopi", mar = c(5, 4, 4, 2), horiz = TRUE, datamatrix = NULL, scale = FALSE, ...) { - # xaxis = TRUE; yaxis = TRUE; plot.type = "twopi"; mar = c(5, 4, 4, 2); + # xaxis = TRUE; yaxis = TRUE; plot_type = "twopi"; mar = c(5, 4, 4, 2); # horiz = TRUE; datamatrix = NULL; scale = FALSE; x <- res; nc <- 3; - # plot.names = TRUE; plot.mode = "pca"; main = paste("NoPCA; NoDM") + # plot_names = TRUE; plot_mode = "pca"; main = paste("NoPCA; NoDM") responses <- NULL variable <- NULL @@ -624,15 +578,15 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, qofz <- x@models[[subnet.id]]$qofz modes <- apply(qofz, 1, which.max) - if (plot.mode == "network") { + if (plot_mode == "network") { par(mfrow = c(ceiling(length(pars$w)/nc), nc)) for (comp in 1:length(pars$w)) { - tmp <- plot.response(difexp[,comp], mynet, mybreaks, mypalette, - plot.names, + tmp <- plot_response(difexp[,comp], mynet, mybreaks, mypalette, + plot_names, main = paste(subnet.id, "/Response-", comp, sep=""), - plot.type = plot.type, ...) + plot_type = plot_type, ...) } - } else if (plot.mode == "matrix" || plot.mode == "heatmap") { + } else if (plot_mode == "matrix" || plot_mode == "heatmap") { # order samples according to responses s2r <- apply(x[[subnet.id]]$qofz, 1, which.max) @@ -656,7 +610,7 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, mar = mar, ...) } - } else if (plot.mode == "boxplot.data") { + } else if (plot_mode == "boxplot_data") { s2r <- apply(x[[subnet.id]]$qofz, 1, which.max) label <- factor(s2r) @@ -673,7 +627,7 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, print(p) - } else if (plot.mode == "response.barplot") { + } else if (plot_mode == "response.barplot") { # FIXME: does not work @@ -712,7 +666,7 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, print(p) - } else if (plot.mode == "pca") { + } else if (plot_mode == "pca") { dmat <- datamatrix[, subnet.nodes] @@ -749,15 +703,9 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, -#' plot.scale -#' -#' Plot the color scale used in visualization. -#' -#' -#' @usage \method{plot}{scale}(x, y, m = NULL, cex.axis = 1.5, -#' label.step = 2, interval = 0.1, two.sided = TRUE, -#' label.start = NULL, Nlab = 3, ...) -#' @param x Breakpoints for the plot. +#' @title plot_scale +#' @description Plot the color scale used in visualization. +#' @param x Breakpoints for the plot_ #' @param y Color palette. #' @param m Breakpoints' upper limit. #' @param cex.axis Axis scale. @@ -765,7 +713,7 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, #' @param interval Interval. #' @param two.sided Plot two-sided (TRUE) or one-sided (FALSE) visualization. #' @param label.start Label starting point. -#' @param Nlab Number of labels to plot. +#' @param Nlab Number of labels to plot_ #' @param ... Further arguments for plot function. #' @return Used for its side-effects. #' @author Leo Lahti @@ -774,10 +722,9 @@ plot.responses <- function (x, subnet.id, nc = 3, plot.names = TRUE, #' @export #' @examples # #' #res <- detect.responses(D, netw, verbose = FALSE) -#' #vis <- plot.responses(res, subnet.idx) -#' #plot.scale(vis$breaks, vis$palette) -#' -plot.scale <- function (x, y, m = NULL, cex.axis = 1.5, label.step = 2, +#' #vis <- plot_responses(res, subnet.idx) +#' #plot_scale(vis$breaks, vis$palette) +plot_scale <- function (x, y, m = NULL, cex.axis = 1.5, label.step = 2, interval = .1, two.sided = TRUE, label.start = NULL, Nlab = 3, ...) { diff --git a/R/plot_matrix.R b/R/plot_matrix.R index 5f15fa0..bc6f330 100644 --- a/R/plot_matrix.R +++ b/R/plot_matrix.R @@ -1,10 +1,5 @@ -#' Visualize a matrix with one or two-way color scale. -#' TODO: one-way color scale -#' -#' Fast investigation of matrix objects; standard visualization choices are -#' made automatically; fast and easy-to-use but does not necessarily provide -#' optimal visualization. -#' +#' @title Visualize a matrix with one or two-way color scale. +#' @description Fast investigation of matrix objects; standard visualization choices are made automatically; fast and easy-to-use but does not necessarily provide optimal visualization. #' @param mat matrix #' @param type String. Specifies visualization type. Options: 'oneway' #' (color scale ranges from white to dark red; @@ -12,16 +7,14 @@ #' 'twoway' (color scale ranges from dark blue #' through white to dark red; colors can be changed #' if needed) -#' #' @param midpoint middle point for the color plot: smaller values are #' shown with blue, larger are shown with red #' in type = 'twoway' -#' #' @param palette Optional. Color palette. #' @param colors Optional. Colors. #' @param col.breaks breakpoints for the color palette #' @param interval interval for palette color switches -#' @param plot.axes String. Indicates whether to plot +#' @param plot_axes String. Indicates whether to plot #' x-axis ('x'), y-axis ('y'), or both ('both'). #' @param row.tick interval for plotting row axis texts #' @param col.tick interval for plotting column axis texts @@ -31,22 +24,19 @@ #' @param ylab optional y axis labels #' @param limit.trunc color scale limit breakpoint #' @param mar image margins -#' @param ... optional parameters to be passed to function 'image', -#' see help(image) for further details +#' @param ... optional parameters to be passed to function 'image', see help(image) for further details #' @return A list with the color palette (colors), #' color breakpoints (breaks), and palette function (palette.function) #' @export -#' #' @references See citation('microbiome') #' @author Leo Lahti \email{microbiome-admin@@googlegroups.com} #' @examples #' mat <- rbind(c(1,2,3,4,5), c(1, 3, 1), c(4,2,2)) #' plot_matrix(mat, 'twoway', midpoint = 3) #' @keywords utilities - plot_matrix <- function(mat, type = "twoway", midpoint = 0, palette = NULL, colors = NULL, - col.breaks = NULL, interval = 0.1, plot.axes = "both", row.tick = 1, + col.breaks = NULL, interval = 0.1, plot_axes = "both", row.tick = 1, col.tick = 1, cex.xlab = 0.9, cex.ylab = 0.9, xlab = NULL, ylab = NULL, limit.trunc = 0, mar = c(5, 4, 4, 2), ...) { @@ -111,7 +101,7 @@ plot_matrix <- function(mat, type = "twoway", midpoint = 0, palette = NULL, zlim = range(col.breaks), breaks = col.breaks, ...) - if (plot.axes == "both" || plot.axes == TRUE) { + if (plot_axes == "both" || plot_axes == TRUE) { if (is.null(xlab)) { v <- seq(1, nsamples, col.tick) # take every nth index @@ -134,7 +124,7 @@ plot_matrix <- function(mat, type = "twoway", midpoint = 0, palette = NULL, cex.axis = cex.ylab, las = 2, ...) } - } else if (plot.axes == "x") { + } else if (plot_axes == "x") { if (is.null(xlab)) { v <- seq(1, nsamples, col.tick) # take every nth index @@ -147,7 +137,7 @@ plot_matrix <- function(mat, type = "twoway", midpoint = 0, palette = NULL, las = 2) } - } else if (plot.axes == "y") { + } else if (plot_axes == "y") { if (is.null(ylab)) { v <- seq(1, nfeats, row.tick) # take every nth index diff --git a/R/show-methods.R b/R/show-methods.R index 58d3978..05c09aa 100644 --- a/R/show-methods.R +++ b/R/show-methods.R @@ -10,7 +10,6 @@ # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. - setMethod(f = "show", signature("NetResponseModel"), function( object ){cat("NetResponseModel object\n")} ) diff --git a/R/visualization.R b/R/visualization.R index d70d33c..4c734e2 100644 --- a/R/visualization.R +++ b/R/visualization.R @@ -1,10 +1,8 @@ # "The language of science is the language of probability, and not of # p-values." -- Luis Pericchi -#' set.breaks -#' -#' Set breakpoints for two-way color palette. -#' +#' @title Set breaks +#' @description Set breakpoints for two-way color palette. #' @usage set.breaks(mat, interval = 0.1) #' @param mat Matrix to visualize. #' @param interval Density of color breakpoints. @@ -64,38 +62,3 @@ ellipse <- function (centroid, covmat, confidence = 0.95, npoints = 100) { -#' Add ellipse to an existing plot. -#' -#' Calculates and plots ellipse corresponding to specified confidence interval -#' in 2-dimensional plot. -#' -#' -#' @usage add.ellipse(centroid, covmat, confidence = 0.95, npoints = 100, col = -#' "black", ...) -#' @param centroid Vector with two elements defining the ellipse centroid. -#' @param covmat Covariance matrix for the investigated data. Only diagonal -#' covariances supported. -#' @param confidence Confidence level determining the ellipse borders based on -#' the covariance matrix. -#' @param npoints Number of plotting points. -#' @param col Color. -#' @param ... Other arguments to be passed. -#' @return Used for plotting side effects. -#' @author Leo Lahti \email{leo.lahti@@iki.fi} -#' @keywords utilities -#' @export -#' @examples -#' -#' #add.ellipse(centroid = c(0, 0), covmat = diag(c(1,2))) -#' -add.ellipse <- function (centroid, covmat, confidence = 0.95, npoints = 100, col = "black", ...) { - - # add ellipse to a plot - el <- ellipse(centroid, covmat, confidence, npoints) - points(el, type = "l", col = col, ...) - - el -} - - - diff --git a/inst/CITATION b/inst/CITATION index 73a7127..5e05011 100644 --- a/inst/CITATION +++ b/inst/CITATION @@ -19,4 +19,4 @@ citEntry(entry="article", sep=" ") ) -citFooter("For ICMg functionality, please cite additionally the references listed in help(ICMg.combined.sampler). Thanks for Olli-Pekka Huovilainen and Antonio Gusmao for contributions to the R/C implementation of the netresponse algorithm.") +citFooter("For ICMg functionality, please cite additionally the references listed in help(ICMg.combined.sampler). Thanks for Olli-Pekka Huovilainen and Antonio Gusmao for contributions to the R/C implementation of the netresponse algorithm and Juuso Parkkinen for ICMg.") diff --git a/inst/extras/build.sh b/inst/extras/build.sh index 0dc14c0..9da9d1a 100755 --- a/inst/extras/build.sh +++ b/inst/extras/build.sh @@ -1,5 +1,5 @@ #/usr/bin/R CMD BATCH document.R /usr/bin/R CMD build ../../ -/usr/bin/R CMD check netresponse_1.17.15.tar.gz -/usr/bin/R CMD INSTALL netresponse_1.17.15.tar.gz +/usr/bin/R CMD check netresponse_1.21.11.tar.gz +/usr/bin/R CMD INSTALL netresponse_1.21.11.tar.gz #/usr/bin/R CMD BiocCheck netresponse_1.17.13.tar.gz diff --git a/man/ICMg.combined.sampler.Rd b/man/ICMg.combined.sampler.Rd index 1592d5a..ee0ca9e 100644 --- a/man/ICMg.combined.sampler.Rd +++ b/man/ICMg.combined.sampler.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ICMg.R \name{ICMg.combined.sampler} \alias{ICMg.combined.sampler} @@ -68,8 +68,9 @@ B.num=8, B.size=100, S.num=20, S.size=10, runs 800 burnin iterations in 8 rounds and then takes 20 samples with an interval of 10 iterations. } \examples{ -data(osmo) # Load data set - res <- ICMg.combined.sampler(osmo$ppi, osmo$exp, C=10) + data(osmo) # Load data set + res <- ICMg.combined.sampler(osmo$ppi, osmo$exp, C=10) + } \author{ Juuso Parkkinen diff --git a/man/ICMg.get.comp.memberships.Rd b/man/ICMg.get.comp.memberships.Rd index d3b91cb..57d3c4b 100644 --- a/man/ICMg.get.comp.memberships.Rd +++ b/man/ICMg.get.comp.memberships.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ICMg.R \name{ICMg.get.comp.memberships} \alias{ICMg.get.comp.memberships} diff --git a/man/ICMg.links.sampler.Rd b/man/ICMg.links.sampler.Rd index d3d9f75..4ab56ee 100644 --- a/man/ICMg.links.sampler.Rd +++ b/man/ICMg.links.sampler.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/ICMg.R \name{ICMg.links.sampler} \alias{ICMg.links.sampler} @@ -52,8 +52,9 @@ rounds and then takes 20 samples with an interval of 10 iterations. \examples{ data(osmo) # Load data -## Run ICMg links sampler -res <- ICMg.links.sampler(osmo$ppi, C=10) +## Run ICMg links sampler +res <- ICMg.links.sampler(osmo$ppi, C=10) + } \author{ Juuso Parkkinen diff --git a/man/NetResponseModel-class.Rd b/man/NetResponseModel-class.Rd index b600fd1..ef425c9 100644 --- a/man/NetResponseModel-class.Rd +++ b/man/NetResponseModel-class.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pkg-package.R \docType{class} \name{NetResponseModel-class} diff --git a/man/P.S.Rd b/man/P.S.Rd index 3eedec4..d0be2d3 100644 --- a/man/P.S.Rd +++ b/man/P.S.Rd @@ -1,26 +1,21 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.S} \alias{P.S} -\title{Description: Probabiity density for sample +\title{Description: Probabiity density for sample Mainly for internal use; documentation will be provided later. Tools for calculating densities with Gaussian mixture models.} \usage{ P.S(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.Sr.Rd b/man/P.Sr.Rd index 1cc5acf..abc9310 100644 --- a/man/P.Sr.Rd +++ b/man/P.Sr.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.Sr} \alias{P.Sr} @@ -7,20 +7,15 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.Sr(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.r.s.Rd b/man/P.r.s.Rd index 968f3d9..69cad24 100644 --- a/man/P.r.s.Rd +++ b/man/P.r.s.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.r.s} \alias{P.r.s} @@ -7,22 +7,16 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.r.s(dat, pars, log = TRUE, scaling = 0) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain.} - -\item{scaling}{Try to avoid floating errors. To be improved later. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. + @param scaling Try to avoid floating errors. To be improved later. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.rS.Rd b/man/P.rS.Rd index 15094c3..76a66e8 100644 --- a/man/P.rS.Rd +++ b/man/P.rS.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.rS} \alias{P.rS} @@ -7,20 +7,15 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.rS(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.rs.joint.Rd b/man/P.rs.joint.Rd index f80ee80..5d8e7ef 100644 --- a/man/P.rs.joint.Rd +++ b/man/P.rs.joint.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.rs.joint} \alias{P.rs.joint} @@ -7,20 +7,15 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.rs.joint(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.rs.joint.individual.Rd b/man/P.rs.joint.individual.Rd index fd2929a..a359a1c 100644 --- a/man/P.rs.joint.individual.Rd +++ b/man/P.rs.joint.individual.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.rs.joint.individual} \alias{P.rs.joint.individual} @@ -7,20 +7,15 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.rs.joint.individual(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.s.individual.Rd b/man/P.s.individual.Rd index c5afabc..bce8597 100644 --- a/man/P.s.individual.Rd +++ b/man/P.s.individual.Rd @@ -1,26 +1,21 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.s.individual} \alias{P.s.individual} -\title{Description: Probabiity density for individual sample +\title{Description: Probabiity density for individual sample Mainly for internal use; documentation will be provided later. Tools for calculating densities with Gaussian mixture models.} \usage{ P.s.individual(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/P.s.r.Rd b/man/P.s.r.Rd index 39d8c5e..b977131 100644 --- a/man/P.s.r.Rd +++ b/man/P.s.r.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/mixture.densities.R \name{P.s.r} \alias{P.s.r} @@ -7,20 +7,15 @@ Mainly for internal use; documentation will be provided later. Tools for calcula \usage{ P.s.r(dat, pars, log = TRUE) } -\arguments{ -\item{dat}{features x samples data matrix for mixture modeling} - -\item{pars}{Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component.} - -\item{log}{Logical. Return densities in log domain. - -Returns:} -} -\value{ -Probability density -} \description{ Arguments: + @param dat features x samples data matrix for mixture modeling + @param pars Gaussian mixture model parameters (diagonal covariances); list with elements mu (mean vectors), sd (covariance diagonals), w (weights). The mu and sd are component x features matrices, w is vector giving weight for each component. + @param log Logical. Return densities in log domain. +} +\details{ +Returns: + @return Probability density } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/PlotMixture.Rd b/man/PlotMixture.Rd index a05d8c3..436f649 100644 --- a/man/PlotMixture.Rd +++ b/man/PlotMixture.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/PlotMixture.R \name{PlotMixture} \alias{PlotMixture} -\title{PlotMixture} +\title{Plot mixtures} \usage{ PlotMixture(x, qofz, binwidth = 0.05, xlab.text = NULL, ylab.text = NULL, title.text = NULL) @@ -18,15 +18,13 @@ PlotMixture(x, qofz, binwidth = 0.05, xlab.text = NULL, ylab.text = NULL, \item{ylab.text}{ylab.text} -\item{title.text}{title.text - -Return:} +\item{title.text}{title.text} } \value{ Used for its side-effects } \description{ -Arguments: +Plot mixtures. } \examples{ # PlotMixture(x, qofz) diff --git a/man/PlotMixtureBivariate.Rd b/man/PlotMixtureBivariate.Rd index 91697af..c1334a3 100644 --- a/man/PlotMixtureBivariate.Rd +++ b/man/PlotMixtureBivariate.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R \name{PlotMixtureBivariate} \alias{PlotMixtureBivariate} @@ -12,8 +12,8 @@ PlotMixtureBivariate(x, means, sds, ws, labels = NULL, confidence = 0.95, \item{means}{mode centroids (modes x features)} -\item{sds}{mode standard deviations, assuming diagonal covariance -matrices (modes x features, each row giving the sqrt of covariance +\item{sds}{mode standard deviations, assuming diagonal covariance +matrices (modes x features, each row giving the sqrt of covariance diagonal for the corresponding mode)} \item{ws}{weight for each mode} @@ -32,7 +32,7 @@ Used for its side-effects. } \description{ Visualize data, centroids and response confidence intervals for a given -Gaussian mixture model in two-dimensional (bivariate) case. Optionally, +Gaussian mixture model in two-dimensional (bivariate) case. Optionally, color the samples according to annotations labels. } \examples{ diff --git a/man/PlotMixtureMultivariate.Rd b/man/PlotMixtureMultivariate.Rd index 9c61a73..0e72862 100644 --- a/man/PlotMixtureMultivariate.Rd +++ b/man/PlotMixtureMultivariate.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R \name{PlotMixtureMultivariate} \alias{PlotMixtureMultivariate} @@ -12,8 +12,8 @@ PlotMixtureMultivariate(x, means, sds, ws, labels = NULL, title = NULL, \item{means}{mode centroids (modes x features)} -\item{sds}{mode standard deviations, assuming diagonal covariance matrices - (modes x features, each row giving the sqrt of covariance diagonal +\item{sds}{mode standard deviations, assuming diagonal covariance matrices + (modes x features, each row giving the sqrt of covariance diagonal for the corresponding mode)} \item{ws}{weight for each mode} @@ -22,14 +22,14 @@ for the corresponding mode)} \item{title}{title} -\item{modes}{Optional: provide sample modes for visualization already in +\item{modes}{Optional: provide sample modes for visualization already in the input} -\item{pca}{The data is projected on PCA plane by default (pca = TRUE). -By setting this off (pca = FALSE) it is possible to visualize +\item{pca}{The data is projected on PCA plane by default (pca = TRUE). +By setting this off (pca = FALSE) it is possible to visualize two-dimensional data in the original domain.} -\item{qofz}{Sample-response probabilistic assignments matrix +\item{qofz}{Sample-response probabilistic assignments matrix (samples x responses)} \item{...}{Further arguments for plot function.} @@ -39,7 +39,7 @@ Used for its side-effects. } \description{ Visualize data, centroids and response confidence intervals for a given -Gaussian mixture model with PCA. Optionally, color the samples according +Gaussian mixture model with PCA. Optionally, color the samples according to annotations labels. } \examples{ diff --git a/man/PlotMixtureMultivariate.deprecated.Rd b/man/PlotMixtureMultivariate.deprecated.Rd index 763f7f3..8b00dcf 100644 --- a/man/PlotMixtureMultivariate.deprecated.Rd +++ b/man/PlotMixtureMultivariate.deprecated.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/deprecated.R \name{PlotMixtureMultivariate.deprecated} \alias{PlotMixtureMultivariate.deprecated} diff --git a/man/PlotMixtureUnivariate.Rd b/man/PlotMixtureUnivariate.Rd index 9874ba9..e11c330 100644 --- a/man/PlotMixtureUnivariate.Rd +++ b/man/PlotMixtureUnivariate.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/PlotMixtureUnivariate.R \name{PlotMixtureUnivariate} \alias{PlotMixtureUnivariate} -\title{PlotMixtureUnivariate} +\title{Plot univariate mixtures} \usage{ PlotMixtureUnivariate(x, means = NULL, sds = NULL, ws = NULL, title.text = NULL, xlab.text = NULL, ylab.text = NULL, @@ -32,19 +32,13 @@ PlotMixtureUnivariate(x, means = NULL, sds = NULL, ws = NULL, \item{cluster.assignments}{Vector of cluster indices, indicating cluster for each data point} -\item{...}{Further arguments for plot function. - -Return:} +\item{...}{Further arguments for plot function.} } \value{ Used for its side-effects } \description{ -Visualize data, centroids and stds for a given univariate -Gaussian mixture model with PCA. -} -\details{ -Arguments: +Visualize data, centroids and stds for a given univariate Gaussian mixture model with PCA. } \examples{ # plotMixtureUnivariate(dat, means, sds, ws) diff --git a/man/add.ellipse.Rd b/man/add.ellipse.Rd index 4aa0842..e3e7e8f 100644 --- a/man/add.ellipse.Rd +++ b/man/add.ellipse.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/visualization.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/add.ellipse.R \name{add.ellipse} \alias{add.ellipse} -\title{Add ellipse to an existing plot.} +\title{Add ellipse to an existing plot} \usage{ add.ellipse(centroid, covmat, confidence = 0.95, npoints = 100, col = "black", ...) @@ -26,8 +26,7 @@ the covariance matrix.} Used for plotting side effects. } \description{ -Calculates and plots ellipse corresponding to specified confidence interval -in 2-dimensional plot. +Calculates and plots ellipse corresponding to specified confidence interval in 2-dimensional plot } \examples{ #add.ellipse(centroid = c(0, 0), covmat = diag(c(1,2))) diff --git a/man/bic.mixture.Rd b/man/bic.mixture.Rd index a1e7f4b..12eaf7e 100644 --- a/man/bic.mixture.Rd +++ b/man/bic.mixture.Rd @@ -1,9 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/mixtures.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bic.mixture.R \name{bic.mixture} \alias{bic.mixture} -\title{Description: Latent class analysis based on (infinite) Gaussian mixture model. -If the input is data matrix, a multivariate model is fitted; if the input is a vector, a univariate model is fitted} +\title{BIC mixture} \usage{ bic.mixture(x, max.modes, bic.threshold = 0, min.modes = 1, ...) } @@ -16,15 +15,13 @@ bic.mixture(x, max.modes, bic.threshold = 0, min.modes = 1, ...) \item{min.modes}{minimum number of modes} -\item{...}{Further optional arguments to be passed - -Returns:} +\item{...}{Further optional arguments to be passed} } \value{ Fitted latent class model (parameters and free energy) } \description{ -Arguments: +Latent class analysis based on (infinite) Gaussian mixture model. If the input is data matrix, a multivariate model is fitted; if the input is a vector, a univariate model is fitted } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/bic.mixture.multivariate.Rd b/man/bic.mixture.multivariate.Rd index a3f328b..6a9d339 100644 --- a/man/bic.mixture.multivariate.Rd +++ b/man/bic.mixture.multivariate.Rd @@ -1,9 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/mixtures.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bic.mixture.multivariate.R \name{bic.mixture.multivariate} \alias{bic.mixture.multivariate} -\title{Description: Latent class analysis based on (infinite) Gaussian mixture model. -If the input (dat) is data matrix, a multivariate model is fitted.} +\title{Multivariate BIC mixture} \usage{ bic.mixture.multivariate(x, max.modes, bic.threshold = 0, min.modes = 1, ...) @@ -17,15 +16,13 @@ bic.mixture.multivariate(x, max.modes, bic.threshold = 0, min.modes = 1, \item{min.modes}{Minimum number of modes to be checked for mixture model selection} -\item{...}{Further optional arguments to be passed - -Returns:} +\item{...}{Further optional arguments to be passed} } \value{ Fitted latent class model (parameters and free energy) } \description{ -Arguments: +Latent class analysis based on (infinite) Gaussian mixture model. If the input (dat) is data matrix, a multivariate model is fitted. } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/bic.mixture.univariate.Rd b/man/bic.mixture.univariate.Rd index ce77e15..d751f4e 100644 --- a/man/bic.mixture.univariate.Rd +++ b/man/bic.mixture.univariate.Rd @@ -1,11 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/mixtures.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bic.mixture.univariate.R \name{bic.mixture.univariate} \alias{bic.mixture.univariate} -\title{Description: Latent class analysis based on (infinite) Gaussian mixture -model. If the input (dat) is data matrix, a multivariate model is fitted. If -the input is a vector or a 1-dimensional matrix, a univariate model is -fitted.} +\title{Univariate BIC mixture} \usage{ bic.mixture.univariate(x, max.modes, bic.threshold = 0, min.modes = 1, ...) } @@ -18,15 +15,16 @@ bic.mixture.univariate(x, max.modes, bic.threshold = 0, min.modes = 1, ...) \item{min.modes}{minimum number of modes} -\item{...}{Further optional arguments to be passed - -Returns:} +\item{...}{Further optional arguments to be passed} } \value{ Fitted latent class model (parameters and free energy) } \description{ -Arguments: +Latent class analysis based on (infinite) Gaussian mixture +model. If the input (dat) is data matrix, a multivariate model is fitted. If +the input is a vector or a 1-dimensional matrix, a univariate model is +fitted. } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/bic.select.best.mode.Rd b/man/bic.select.best.mode.Rd index 683bc35..35678ab 100644 --- a/man/bic.select.best.mode.Rd +++ b/man/bic.select.best.mode.Rd @@ -1,9 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/mixtures.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/bic.select.best.mode.R \name{bic.select.best.mode} \alias{bic.select.best.mode} -\title{Description: Select optimal number of mixture components by adding components until -the increase in objective function is below threshold.} +\title{Select best mode with BIC} \usage{ bic.select.best.mode(x, max.modes, bic.threshold, min.modes = 1) } @@ -14,15 +13,14 @@ bic.select.best.mode(x, max.modes, bic.threshold, min.modes = 1) \item{bic.threshold}{BIC threshold which needs to be exceeded before a new mode is added to the mixture.} -\item{min.modes}{Optiomal. Minimum number of modes. - -Returns:} +\item{min.modes}{Optiomal. Minimum number of modes.} } \value{ Fitted latent class model (parameters and free energy) } \description{ -Arguments: +Select optimal number of mixture components by adding components until +the increase in objective function is below threshold. } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/centerData.Rd b/man/centerData.Rd index e556980..c78bf0c 100644 --- a/man/centerData.Rd +++ b/man/centerData.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.R \name{centerData} \alias{centerData} @@ -25,7 +25,9 @@ Note that the model assumes samples x features matrix, and centers each feature. } \examples{ + #centerData(X) + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/check.matrix.Rd b/man/check.matrix.Rd index e7bf04a..9ccd76e 100644 --- a/man/check.matrix.Rd +++ b/man/check.matrix.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/check.matrix.R \name{check.matrix} \alias{check.matrix} diff --git a/man/check.network.Rd b/man/check.network.Rd index ef6dde7..0d46b88 100644 --- a/man/check.network.Rd +++ b/man/check.network.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/check.network.R \name{check.network} \alias{check.network} @@ -15,8 +15,8 @@ check.network(network, datamatrix, verbose = FALSE) } \value{ \item{formatted }{Formatted network (self-links removed)} - \item{original }{Original network (possible in another representation format)} - \item{delta }{Cost function changes corresponding to the 'formatted' network.} + \item{original }{Original network (possible in another representation format)} + \item{delta }{Cost function changes corresponding to the 'formatted' network.} \item{nodes }{Nodes corresponding to the 'formatted' network.} } \description{ diff --git a/man/continuous.responses.Rd b/man/continuous.responses.Rd index aa3c6c5..a17cd1e 100644 --- a/man/continuous.responses.Rd +++ b/man/continuous.responses.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/continuous.responses.R \name{continuous.responses} \alias{continuous.responses} -\title{Description: Quantify association between modes and continuous variable} +\title{Continuous responses} \usage{ continuous.responses(annotation.vector, model, method = "t-test", min.size = 2, data = NULL) @@ -16,15 +16,13 @@ continuous.responses(annotation.vector, model, method = "t-test", \item{min.size}{minimum sample size for a response} -\item{data}{data matrix (samples x features) - -Returns:} +\item{data}{data matrix (samples x features)} } \value{ List with each element corresponding to one variable and listing the responses according to association strength } \description{ -Arguments: +Quantify association between modes and continuous variable } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/detect.responses.Rd b/man/detect.responses.Rd index 3d58e21..aa9c5e0 100644 --- a/man/detect.responses.Rd +++ b/man/detect.responses.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/detect.responses.R \name{detect.responses} \alias{detect.responses} @@ -33,7 +33,7 @@ used to limit the potential number of network states.} \item{verbose}{Logical. Verbose parameter.} -\item{prior.alpha,prior.alphaKsi,prior.betaKsi}{Prior parameters for +\item{prior.alpha, prior.alphaKsi, prior.betaKsi}{Prior parameters for Gaussian mixture model that is calculated for each subnetwork (normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are the shape and scale parameters of the inverse Gamma function, respectively.} @@ -94,7 +94,7 @@ optimal number of components)} NetResponseModel object. } \description{ -Main function of the NetResponse algorithm. +Main function of the NetResponse algorithm. Detect condition-specific network responses, given network and a set of measurements of node activity in a set of conditions. Returns a set of subnetworks and their estimated diff --git a/man/dna.Rd b/man/dna.Rd index 83012bd..db2874f 100644 --- a/man/dna.Rd +++ b/man/dna.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pkg-package.R \docType{data} \name{dna} @@ -17,15 +17,7 @@ expression set of [3]. data(dna) } \description{ -A combined yeast data set with protein-protein interactions and gene -expression (dna damage). Gene expression profiles are transformed into links -by computing a Pearson correlation for all pairs of genes and treating all -correlations above 0.85 as additional links. -} -\details{ -Number of genes: 1823, number of interactions: 12382, number of gene -expression observations: 52, number of total links with PPI and expression -links: 15547. +A combined yeast data set with protein-protein interactions and gene expression (dna damage). Gene expression profiles are transformed into links by computing a Pearson correlation for all pairs of genes and treating all correlations above 0.85 as additional links. Number of genes: 1823, number of interactions: 12382, number of gene expression observations: 52, number of total links with PPI and expression links: 15547. } \examples{ data(dna) diff --git a/man/enrichment.list.factor.Rd b/man/enrichment.list.factor.Rd index 9878a44..71b8e42 100644 --- a/man/enrichment.list.factor.Rd +++ b/man/enrichment.list.factor.Rd @@ -1,25 +1,22 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/enrichment.list.factor.R \name{enrichment.list.factor} \alias{enrichment.list.factor} -\title{Description: enrichment.list.factor} +\title{enrichment.list.factor} \usage{ enrichment.list.factor(models, level.samples, method, verbose = FALSE) } \arguments{ \item{models}{List of models. Each model should have a sample-cluster assignment matrix qofz.} -\item{level.samples}{Measure enrichment of this sample (set) across the observed -responses.} +\item{level.samples}{Measure enrichment of this sample (set) across the observed responses.} \item{method}{'hypergeometric' measures enrichment of factor levels in this response; 'precision' measures response purity for each factor level; 'dependency' measures logarithm of the joint density between response and factor level vs. their marginal densities: log(P(r,s)/(P(r)P(s)))} -\item{verbose}{Follow progress by intermediate messages. - -Returns:} +\item{verbose}{Follow progress by intermediate messages.} } \value{ A data frame which gives a data @@ -30,13 +27,7 @@ A data frame which gives a data additional information on enrichment statistics. } \description{ -Orders the responses by association strength (enrichment score) to a given -sample set. For instance, if the samples correspond to a particular -experimental factor, this function can be used to prioritize the responses -according to their association strength to this factor. -} -\details{ -Arguments: +Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. } \examples{ # diff --git a/man/enrichment.list.factor.minimal.Rd b/man/enrichment.list.factor.minimal.Rd index 884620a..7fd1fc4 100644 --- a/man/enrichment.list.factor.minimal.Rd +++ b/man/enrichment.list.factor.minimal.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/enrichment.list.factor.minimal.R \name{enrichment.list.factor.minimal} \alias{enrichment.list.factor.minimal} -\title{Description: enrichment.list.factor} +\title{enrichment.list.factor} \usage{ enrichment.list.factor.minimal(groupings, method, verbose = FALSE, annotation.vector, level) @@ -19,9 +19,7 @@ factor level vs. their marginal densities: log(P(r,s)/(P(r)P(s)))} \item{annotation.vector}{annotation vector} -\item{level}{level - -Returns:} +\item{level}{level} } \value{ A data frame which gives a data @@ -32,13 +30,7 @@ A data frame which gives a data additional information on enrichment statistics. } \description{ -Orders the responses by association strength (enrichment score) to a given -sample set. For instance, if the samples correspond to a particular -experimental factor, this function can be used to prioritize the responses -according to their association strength to this factor. -} -\details{ -Arguments: +Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. } \examples{ # diff --git a/man/factor.responses.Rd b/man/factor.responses.Rd index 4d039e4..ad3c553 100644 --- a/man/factor.responses.Rd +++ b/man/factor.responses.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/factor.responses.R \name{factor.responses} \alias{factor.responses} -\title{Description: List responses for each level of the given factor} +\title{Factor responses} \usage{ factor.responses(annotation.vector, groupings, method = "hypergeometric", min.size = 2, data = NULL) @@ -16,15 +16,13 @@ factor.responses(annotation.vector, groupings, method = "hypergeometric", \item{min.size}{minimum sample size for a response} -\item{data}{data (samples x features; or a vector in univariate case) - -Returns:} +\item{data}{data (samples x features; or a vector in univariate case)} } \value{ List with each element corresponding to one factor level and listing the responses according to association strength } \description{ -Arguments: +List responses for each level of the given factor } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/factor.responses.minimal.Rd b/man/factor.responses.minimal.Rd index eda880c..35732ed 100644 --- a/man/factor.responses.minimal.Rd +++ b/man/factor.responses.minimal.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/factor.responses.minimal.R \name{factor.responses.minimal} \alias{factor.responses.minimal} -\title{Description: List responses for each level of the given factor} +\title{Factor responses (minimal)} \usage{ factor.responses.minimal(annotation.vector, groupings, method = "hypergeometric", min.size = 2, data = NULL) @@ -16,15 +16,13 @@ factor.responses.minimal(annotation.vector, groupings, \item{min.size}{minimum sample size for a response} -\item{data}{data (samples x features; or a vector in univariate case) - -Returns:} +\item{data}{data (samples x features; or a vector in univariate case)} } \value{ List with each element corresponding to one factor level and listing the responses according to association strength } \description{ -Arguments: +List responses for each level of the given factor } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/filter.netw.Rd b/man/filter.netw.Rd index e275c81..f966395 100644 --- a/man/filter.netw.Rd +++ b/man/filter.netw.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/filter.netw.R \name{filter.netw} \alias{filter.netw} diff --git a/man/filter.network.Rd b/man/filter.network.Rd index 4a4bd32..88e23ff 100644 --- a/man/filter.network.Rd +++ b/man/filter.network.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/filter.netw.R \name{filter.network} \alias{filter.network} diff --git a/man/find.similar.features.Rd b/man/find.similar.features.Rd index e47bd86..133770c 100644 --- a/man/find.similar.features.Rd +++ b/man/find.similar.features.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.R \name{find.similar.features} \alias{find.similar.features} @@ -42,13 +42,15 @@ improved by merging the new feature in the subnetwork, indicating features having coordinated response. } \examples{ + data(toydata) model <- toydata$model -subnet.id <- "Subnet-1" +subnet.id <- "Subnet-1" g <- find.similar.features(model, subnet.id) # List features that are similar to this subnetwork (delta < 0) # (ordered by decreasing similarity) subset(g, delta < 0) + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/generate.toydata.Rd b/man/generate.toydata.Rd index f23d31b..ef89490 100644 --- a/man/generate.toydata.Rd +++ b/man/generate.toydata.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/toydata.R \name{generate.toydata} \alias{generate.toydata} diff --git a/man/get.dat-NetResponseModel-method.Rd b/man/get.dat-NetResponseModel-method.Rd index a7ed4fc..eaa240a 100644 --- a/man/get.dat-NetResponseModel-method.Rd +++ b/man/get.dat-NetResponseModel-method.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/NetResponseModel-accessors.R \docType{methods} \name{get.dat,NetResponseModel-method} @@ -23,9 +23,9 @@ Subnet data matrix Get subnetwork data } \examples{ -## Load a pre-calculated netresponse model obtained with +## Load a pre-calculated netresponse model obtained with # model <- detect.responses(toydata$emat, toydata$netw, verbose = FALSE) -# data( toydata ); get.dat(toydata$model) +# data( toydata ); get.dat(toydata$model) } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/get.mis.Rd b/man/get.mis.Rd index f1d4f23..60a0fab 100644 --- a/man/get.mis.Rd +++ b/man/get.mis.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/get.mis.R \name{get.mis} \alias{get.mis} diff --git a/man/get.model.parameters.Rd b/man/get.model.parameters.Rd index 7c81949..af5b446 100644 --- a/man/get.model.parameters.Rd +++ b/man/get.model.parameters.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.R \name{get.model.parameters} \alias{get.model.parameters} @@ -29,6 +29,7 @@ Only the non-empty components are returned. Note: the original data matrix needs to be provided for function call separately. } \examples{ + # Load toy data data( toydata ) # Load toy data set D <- toydata$emat # Response matrix (for example, gene expression) @@ -37,6 +38,7 @@ model <- toydata$model # Pre-calculated model # Get model parameters for a given subnet # (Gaussian mixture: mean, covariance diagonal, mixture proportions) get.model.parameters(model, subnet.id = 1) + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/get.subnets-NetResponseModel-method.Rd b/man/get.subnets-NetResponseModel-method.Rd index ccdcde1..cf7eb3d 100644 --- a/man/get.subnets-NetResponseModel-method.Rd +++ b/man/get.subnets-NetResponseModel-method.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/NetResponseModel-accessors.R \docType{methods} \name{get.subnets,NetResponseModel-method} @@ -16,7 +16,7 @@ NetResponseModel class.} \item{get.names}{Logical. Indicate whether to return subnetwork nodes using node names (TRUE) or node indices (FALSE).} -\item{min.size,max.size}{Numeric. Filter out subnetworks whose size is not +\item{min.size, max.size}{Numeric. Filter out subnetworks whose size is not within the limits specified here.} \item{min.responses}{Numeric. Filter out subnetworks with less responses @@ -30,9 +30,9 @@ List the detected subnetworks (each is a list of nodes in the corresponding subnetwork). } \examples{ -## Load a pre-calculated netresponse model obtained with +## Load a pre-calculated netresponse model obtained with # model <- detect.responses(toydata$emat, toydata$netw, verbose = FALSE) -# data( toydata ); get.subnets(toydata$model) +# data( toydata ); get.subnets(toydata$model) } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/getqofz-NetResponseModel-method.Rd b/man/getqofz-NetResponseModel-method.Rd index 410bc18..8efbd5a 100644 --- a/man/getqofz-NetResponseModel-method.Rd +++ b/man/getqofz-NetResponseModel-method.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/NetResponseModel-accessors.R \docType{methods} \name{getqofz,NetResponseModel-method} @@ -26,7 +26,9 @@ Calculates probability density for each response on a given sample based on the estimated Gaussian mixture model. } \examples{ + # qofz <- getqofz(model, subnet.id, log = FALSE) + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/independent.models.Rd b/man/independent.models.Rd index 179d770..f2176bf 100644 --- a/man/independent.models.Rd +++ b/man/independent.models.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/independent.models.R \name{independent.models} \alias{independent.models} @@ -12,7 +12,7 @@ independent.models(datamatrix, params) \item{params}{parameters} } \value{ -\item{nodes }{Model for each node} +\item{nodes }{Model for each node} \item{C }{Costs for individual models} } \description{ diff --git a/man/list.responses.continuous.multi.Rd b/man/list.responses.continuous.multi.Rd index 7c110c9..908b963 100644 --- a/man/list.responses.continuous.multi.Rd +++ b/man/list.responses.continuous.multi.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/list.responses.continuous.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/list.responses.continuous.multi.R \name{list.responses.continuous.multi} \alias{list.responses.continuous.multi} -\title{Description: Investigate association of a continuous variable and the modes; given a list of groupings} +\title{Investigate association of a continuous variable and the modes} \usage{ list.responses.continuous.multi(annotation.df, groupings, method = "t-test", pth = Inf, verbose = TRUE, rounding = NULL) @@ -19,15 +19,13 @@ named by the samples} \item{verbose}{verbose} -\item{rounding}{rounding digits - -Returns:} +\item{rounding}{rounding digits} } \value{ Table listing all associations between the factor levels and responses } \description{ -Arguments: +Investigate association of a continuous variable and the modes given a list of groupings } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/list.responses.continuous.single.Rd b/man/list.responses.continuous.single.Rd index 461ddf6..4c0e3f6 100644 --- a/man/list.responses.continuous.single.Rd +++ b/man/list.responses.continuous.single.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/list.responses.continuous.R \name{list.responses.continuous.single} \alias{list.responses.continuous.single} -\title{Description: Investigate association of a continuous variable and the modes} +\title{Investigate association of a continuous variable and the modes} \usage{ list.responses.continuous.single(annotation.df, groupings, method = "t-test", pth = Inf, verbose = TRUE, rounding = NULL, adjust.p = TRUE) @@ -21,16 +21,13 @@ named by the samples} \item{rounding}{rounding digits} -\item{adjust.p}{Adjust p-values (this will add p.adj column and remove pvalue column in the output table) - -Returns:} +\item{adjust.p}{Adjust p-values (this will add p.adj column and remove pvalue column in the output table)} } \value{ -Table listing all associations between the factor levels and -responses +Table listing all associations between the factor levels and responses } \description{ -Arguments: +Investigate association of a continuous variable and the modes. } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/list.responses.factor.Rd b/man/list.responses.factor.Rd index 1780844..fb129a0 100644 --- a/man/list.responses.factor.Rd +++ b/man/list.responses.factor.Rd @@ -1,17 +1,15 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/list.responses.factor.R \name{list.responses.factor} \alias{list.responses.factor} -\title{Description: List significantly associated responses for all factors and levels in the given -annotation matrix} +\title{List significant responses} \usage{ list.responses.factor(annotation.df, models, method = "hypergeometric", min.size = 2, qth = Inf, verbose = TRUE, data = NULL, rounding = NULL) } \arguments{ -\item{annotation.df}{annotation data.frame with discrete factor levels, rows -named by the samples} +\item{annotation.df}{annotation data.frame with discrete factor levels, rows named by the samples} \item{models}{List of models. Each model should have a sample-cluster assignment matrix qofz, or a vector of cluster indices named by the samples.} @@ -25,16 +23,13 @@ named by the samples} \item{data}{data (samples x features; or a vector in univariate case)} -\item{rounding}{rounding digits - -Returns:} +\item{rounding}{rounding digits} } \value{ -Table listing all associations between the factor levels and - responses +Table listing all associations between the factor levels and responses } \description{ -Arguments: +List significantly associated responses for all factors and levels in the given annotation matrix } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/list.responses.factor.minimal.Rd b/man/list.responses.factor.minimal.Rd index 1caf6df..00621b7 100644 --- a/man/list.responses.factor.minimal.Rd +++ b/man/list.responses.factor.minimal.Rd @@ -1,9 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/list.responses.factor.minimal.R \name{list.responses.factor.minimal} \alias{list.responses.factor.minimal} -\title{Description: List significantly associated responses for all factors and levels in the given -annotation matrix} +\title{List factor responses (minimal)} \usage{ list.responses.factor.minimal(annotation.df, groupings, method = "hypergeometric", min.size = 2, pth = Inf, verbose = TRUE, @@ -25,16 +24,13 @@ named by the samples} \item{data}{data (samples x features; or a vector in univariate case)} -\item{rounding}{rounding digits - -Returns:} +\item{rounding}{rounding digits} } \value{ -A list with two elements: Table listing all associations between the factor levels and - responses; multiple p-value adjustment method +A list with two elements: Table listing all associations between the factor levels and responses; multiple p-value adjustment method } \description{ -Arguments: +List significantly associated responses for all factors and levels in the given annotation matrix } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/list.significant.responses.Rd b/man/list.significant.responses.Rd index cca6e48..07ecca1 100644 --- a/man/list.significant.responses.Rd +++ b/man/list.significant.responses.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/order.responses.R \name{list.significant.responses} \alias{list.significant.responses} -\title{List responses with significant associations to a given sample group.} +\title{Listing significant responses} \usage{ list.significant.responses(model, sample, qth = 1, method = "hypergeometric") @@ -24,7 +24,7 @@ Statistics of the significantly associated responses. List responses with significant associations to a given sample group. } \examples{ -# +# } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/listify.groupings.Rd b/man/listify.groupings.Rd index 62f176c..d8792c7 100644 --- a/man/listify.groupings.Rd +++ b/man/listify.groupings.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/listify.groupings.R \name{listify.groupings} \alias{listify.groupings} diff --git a/man/mixture.model.Rd b/man/mixture.model.Rd index 9c5985c..ae27af6 100644 --- a/man/mixture.model.Rd +++ b/man/mixture.model.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/mixtures.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/mixture.model.R \name{mixture.model} \alias{mixture.model} -\title{Description: Fit Gaussian mixture model} +\title{Mixture model} \usage{ mixture.model(x, mixture.method = "vdp", max.responses = 10, implicit.noise = 0, prior.alpha = 1, prior.alphaKsi = 0.01, @@ -13,35 +13,31 @@ mixture.model(x, mixture.method = "vdp", max.responses = 10, \arguments{ \item{x}{data matrix (samples x features, for multivariate analysis) or a vector (for univariate analysis)} -\item{mixture.method}{Specify the approach to use in mixture modeling. - Options. vdp (nonparametric Variational Dirichlet process mixture model); - bic (based on Gaussian mixture modeling with EM, using BIC to select the - optimal number of components)} +\item{mixture.method}{Specify the approach to use in mixture modeling. Options. vdp (nonparametric Variational Dirichlet process mixture model); bic (based on Gaussian mixture modeling with EM, using BIC to select the optimal number of components)} -\item{max.responses}{Maximum number of responses for each subnetwork. Can be - used to limit the potential number of network states.} +\item{max.responses}{Maximum number of responses for each subnetwork. Can be used to limit the potential number of network states.} \item{implicit.noise}{Implicit noise parameter. Add implicit noise to vdp - mixture model. Can help to avoid overfitting to local optima, if this - appears to be a problem.} +mixture model. Can help to avoid overfitting to local optima, if this +appears to be a problem.} -\item{prior.alpha,prior.alphaKsi,prior.betaKsi}{Prior parameters for - Gaussian mixture model that is calculated for each subnetwork - (normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are - the shape and scale parameters of the inverse Gamma function, respectively.} +\item{prior.alpha, prior.alphaKsi, prior.betaKsi}{Prior parameters for +Gaussian mixture model that is calculated for each subnetwork +(normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are +the shape and scale parameters of the inverse Gamma function, respectively.} \item{vdp.threshold}{Minimal free energy improvement after which the - variational Gaussian mixture algorithm is deemed converged.} +variational Gaussian mixture algorithm is deemed converged.} \item{initial.responses}{Initial number of components for each subnetwork - model. Used to initialize calculations.} +model. Used to initialize calculations.} \item{ite}{Maximum number of iterations on posterior update - (updatePosterior). Increasing this can potentially lead to more accurate results, but computation may take longer.} +(updatePosterior). Increasing this can potentially lead to more accurate results, but computation may take longer.} \item{speedup}{Takes advantage of approximations to PCA, mutual information - etc in various places to speed up calculations. Particularly useful with - large and densely connected networks and/or large sample size.} + etc in various places to speed up calculations. Particularly useful with +large and densely connected networks and/or large sample size.} \item{bic.threshold}{BIC threshold which needs to be exceeded before a new mode is added to the mixture with mixture.method = "bic"} @@ -49,15 +45,13 @@ mixture.model(x, mixture.method = "vdp", max.responses = 10, \item{min.responses}{minimum number of responses} -\item{...}{Further optional arguments to be passed. - -Returns:} +\item{...}{Further optional arguments to be passed.} } \value{ List with two elements: model: fitted mixture model (parameters and free energy); model.params: model parameters } \description{ -Arguments: +Fit Gaussian mixture model } \author{ Contact: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/model.stats.Rd b/man/model.stats.Rd index 03d38f5..97c15ff 100644 --- a/man/model.stats.Rd +++ b/man/model.stats.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/model.stats.R \name{model.stats} \alias{model.stats} @@ -19,11 +19,13 @@ Subnetwork statistics: size and number of distinct responses for each subnet. } \examples{ -# Load a pre-calculated netresponse model obtained with +# Load a pre-calculated netresponse model obtained with # model <- detect.responses(toydata$emat, toydata$netw, verbose = FALSE) -data(toydata) +data(toydata) # Calculate summary statistics for the model stat <- model.stats(toydata$model) + + } \author{ Leo Lahti diff --git a/man/netresponse-package.Rd b/man/netresponse-package.Rd index 3d27b1d..cf800da 100644 --- a/man/netresponse-package.Rd +++ b/man/netresponse-package.Rd @@ -1,15 +1,12 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pkg-package.R \docType{package} \name{netresponse-package} \alias{netresponse} \alias{netresponse-package} -\title{NetResponse: Global modeling of transcriptional responses in interaction -networks} +\title{NetResponse: Global modeling of transcriptional responses in interaction networks} \description{ Global modeling of transcriptional responses in interaction networks. -} -\details{ \tabular{ll}{ Package: \tab netresponse\cr Type: \tab Package\cr Version: \tab See sessionInfo() or DESCRIPTION file\cr Date: \tab 2011-02-03\cr License: \tab GNU GPL >=2\cr LazyLoad: \tab yes\cr } @@ -19,24 +16,19 @@ License: \tab GNU GPL >=2\cr LazyLoad: \tab yes\cr } Ns <- 200 # number of samples (conditions) Nf <- 10 # number of features (nodes) feature.names <- paste("feat", seq(Nf), sep="") -sample.names <- paste("sample", seq(Ns), sep="") - +sample.names <- paste("sample", seq(Ns), sep="") # random seed set.seed( 123 ) - # Random network netw <- pmax(array(sign(rnorm(Nf^2)), dim = c(Nf, Nf)), 0) # in pathway analysis nodes correspond to genes rownames(netw) <- colnames(netw) <- feature.names - -# Random responses of the nodes across conditions +# Random responses of the nodes across conditions D <- array(rnorm(Ns*Nf), dim = c(Ns,Nf), dimnames = list(sample.names, feature.names)) D[1:100, 4:6] <- t(sapply(1:(Ns/2),function(x){rnorm(3, mean = 1:3)})) D[101:Ns, 4:6] <- t(sapply(1:(Ns/2),function(x){rnorm(3, mean = 7:9)})) - # Calculate the model model <- detect.responses(D, netw) - # Subnets (each is a list of nodes) get.subnets( model ) @@ -44,7 +36,7 @@ get.subnets( model ) # means, standard devations and weights for the components inds <- which(sapply(model@last.grouping, length) > 2) subnet.id <- names(model@subnets)[[1]] -m <- get.model.parameters(model, subnet.id) +m <- get.model.parameters(model, subnet.id) print(m) } \author{ diff --git a/man/order.responses.Rd b/man/order.responses.Rd index ae035e0..5f06f8f 100644 --- a/man/order.responses.Rd +++ b/man/order.responses.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/order.responses.R \name{order.responses} \alias{order.responses} @@ -19,7 +19,7 @@ response; 'precision' measures response purity for each factor level; 'dependency' measures logarithm of the joint density between response and factor level vs. their marginal densities: log(P(r,s)/(P(r)P(s)))} -\item{min.size,max.size,min.responses}{Optional parameters to filter the +\item{min.size, max.size, min.responses}{Optional parameters to filter the results based on subnet size and number of responses.} \item{subnet.ids}{Specify subnets for which the responses shall be ordered. @@ -32,27 +32,24 @@ By default, use all subnets.} \value{ A data frame with elements 'ordered.responses' which gives a data frame of responses ordered by enrichment score for the investigated sample. - The subnetwork, response id and enrichment score are shown. - The method field indicates the enrichment calculation method. - The sample field lists the samples et for which the enrichments - were calculated. + The subnetwork, response id and enrichment score are shown. + The method field indicates the enrichment calculation method. + The sample field lists the samples et for which the enrichments + were calculated. The info field lists additional information on enrichment statistics. } \description{ -Orders the responses by association strength (enrichment score) to a given -sample set. For instance, if the samples correspond to a particular -experimental factor, this function can be used to prioritize the responses -according to their association strength to this factor. +Orders the responses by association strength (enrichment score) to a given sample set. For instance, if the samples correspond to a particular experimental factor, this function can be used to prioritize the responses according to their association strength to this factor. } \note{ Tools for analyzing end results of the model. } \examples{ # -# - for given sample/s (factor level), -# order responses (across all subnets) by association strength +# - for given sample/s (factor level), +# order responses (across all subnets) by association strength # (enrichment score); overrepresentation -# order.responses(model, sample, method = "hypergeometric") +# order.responses(model, sample, method = "hypergeometric") } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/osmo.Rd b/man/osmo.Rd index acb209d..5797a5c 100644 --- a/man/osmo.Rd +++ b/man/osmo.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pkg-package.R \docType{data} \name{osmo} @@ -17,15 +17,7 @@ expression set of [3]. data(osmo) } \description{ -A combined yeast data set with protein-protein interactions and gene -expression (osmotick shock response). Gene expression profiles are -transformed into links by computing a Pearson correlation for all pairs of -genes and treating all correlations above 0.85 as additional links. -} -\details{ -Number of genes: 1711, number of interactions: 10250, number of gene -expression observations: 133, number of total links with PPI and expression -links: 14256. +A combined yeast data set with protein-protein interactions and gene expression (osmotick shock response). Gene expression profiles are transformed into links by computing a Pearson correlation for all pairs of genes and treating all correlations above 0.85 as additional links. Number of genes: 1711, number of interactions: 10250, number of gene expression observations: 133, number of total links with PPI and expression links: 14256. } \examples{ data(osmo) diff --git a/man/pick.model.pairs.Rd b/man/pick.model.pairs.Rd index b2fff19..879470b 100644 --- a/man/pick.model.pairs.Rd +++ b/man/pick.model.pairs.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pick.model.pairs.R \name{pick.model.pairs} \alias{pick.model.pairs} -\title{pick.model.pairs} +\title{Pick model pairs} \usage{ pick.model.pairs(network, network.nodes, node.models, datamatrix, params) } diff --git a/man/pick.model.parameters.Rd b/man/pick.model.parameters.Rd index a0cfef0..e3d69d6 100644 --- a/man/pick.model.parameters.Rd +++ b/man/pick.model.parameters.Rd @@ -1,5 +1,5 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand -% Please edit documentation in R/internals.R +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/pick.model.parameters.R \name{pick.model.parameters} \alias{pick.model.parameters} \title{pick.model.parameters} @@ -15,7 +15,7 @@ pick.model.parameters(m, nodes) Model parameters } \description{ -pick.model.parameters +Pick model parameters } \examples{ # diff --git a/man/plotPCA.Rd b/man/plotPCA.Rd index cee6c99..33b7b41 100644 --- a/man/plotPCA.Rd +++ b/man/plotPCA.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R \name{plotPCA} \alias{plotPCA} diff --git a/man/plot_associations.Rd b/man/plot_associations.Rd index 9492276..fcf2dc4 100644 --- a/man/plot_associations.Rd +++ b/man/plot_associations.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R \name{plot_associations} \alias{plot_associations} @@ -20,19 +20,13 @@ provide in the same order as in the original data.} \item{mode}{group.by.responses or group.by.classes: indicate barplot grouping type.} -\item{...}{Other arguments to be passed for plot.} +\item{...}{Other arguments to be passed for plot_} } \value{ Used for side effect (plotting). } \description{ -Plot association strength between user-defined category labels and -responses in a selected subnetwork. -} -\details{ -Associations are showm in terms -log10(p) enrichment values for the -annotation categories for the responses within the specified subnetwork. No -correction for multiple testing. +Plot association strength between user-defined category labels and responses in a selected subnetwork. Associations are showm in terms -log10(p) enrichment values for the annotation categories for the responses within the specified subnetwork. No correction for multiple testing. } \examples{ # @@ -44,7 +38,7 @@ Leo Lahti \email{leo.lahti@iki.fi} See citation("netresponse"). } \seealso{ -plot.responses +plot_responses } \keyword{utilities} diff --git a/man/plot.data.Rd b/man/plot_data.Rd similarity index 70% rename from man/plot.data.Rd rename to man/plot_data.Rd index 4422b30..e20889e 100644 --- a/man/plot.data.Rd +++ b/man/plot_data.Rd @@ -1,10 +1,10 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.data} -\alias{plot.data} +\name{plot_data} +\alias{plot_data} \title{Plot observed data.} \usage{ -\method{plot}{data}(x, subnet.id, labels, ...) +plot_data(x, subnet.id, labels, ...) } \arguments{ \item{x}{NetResponseModel object.} @@ -13,17 +13,13 @@ \item{labels}{Annotation categories.} -\item{...}{Further arguments for plot function. - -Return:} +\item{...}{Further arguments for plot function.} } \value{ ggplot2 plot object } \description{ Plotting tool for measurement data. -} -\details{ Produces boxplot for each feature in each annotation category for the selected subnetwork. } @@ -37,7 +33,7 @@ Leo Lahti See citation("netresponse") } \seealso{ -plot.responses +plot_responses } \keyword{utilities} diff --git a/man/plot.expression.Rd b/man/plot_expression.Rd similarity index 75% rename from man/plot.expression.Rd rename to man/plot_expression.Rd index f249a04..c6c224b 100644 --- a/man/plot.expression.Rd +++ b/man/plot_expression.Rd @@ -1,10 +1,10 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.expression} -\alias{plot.expression} -\title{plot.expression} +\name{plot_expression} +\alias{plot_expression} +\title{plot_expression} \usage{ -\method{plot}{expression}(x, maintext, ...) +plot_expression(x, maintext, ...) } \arguments{ \item{x}{samples x features matrix} @@ -24,9 +24,7 @@ Brightness of the color indicates magnitude of the change. Black denotes no change. } \examples{ -# - -#plot.expression(x) +#plot_expression(x) } \author{ Leo Lahti \email{leo.lahti@iki.fi} @@ -35,7 +33,7 @@ Leo Lahti \email{leo.lahti@iki.fi} See citation("netresponse"). } \seealso{ -\code{\link{plot.scale}} +\code{\link{plot_scale}} } \keyword{utilities} diff --git a/man/plot_matrix.Rd b/man/plot_matrix.Rd index 4a3aae3..c60d51f 100644 --- a/man/plot_matrix.Rd +++ b/man/plot_matrix.Rd @@ -1,28 +1,27 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot_matrix.R \name{plot_matrix} \alias{plot_matrix} -\title{Visualize a matrix with one or two-way color scale. -TODO: one-way color scale} +\title{Visualize a matrix with one or two-way color scale.} \usage{ plot_matrix(mat, type = "twoway", midpoint = 0, palette = NULL, - colors = NULL, col.breaks = NULL, interval = 0.1, plot.axes = "both", + colors = NULL, col.breaks = NULL, interval = 0.1, plot_axes = "both", row.tick = 1, col.tick = 1, cex.xlab = 0.9, cex.ylab = 0.9, xlab = NULL, ylab = NULL, limit.trunc = 0, mar = c(5, 4, 4, 2), ...) } \arguments{ \item{mat}{matrix} -\item{type}{String. Specifies visualization type. Options: 'oneway' - (color scale ranges from white to dark red; - the color can be changed if needed); - 'twoway' (color scale ranges from dark blue - through white to dark red; colors can be changed - if needed)} +\item{type}{String. Specifies visualization type. Options: 'oneway' + (color scale ranges from white to dark red; +the color can be changed if needed); +'twoway' (color scale ranges from dark blue +through white to dark red; colors can be changed +if needed)} -\item{midpoint}{middle point for the color plot: smaller values are - shown with blue, larger are shown with red - in type = 'twoway'} +\item{midpoint}{middle point for the color plot: smaller values are + shown with blue, larger are shown with red +in type = 'twoway'} \item{palette}{Optional. Color palette.} @@ -32,7 +31,7 @@ plot_matrix(mat, type = "twoway", midpoint = 0, palette = NULL, \item{interval}{interval for palette color switches} -\item{plot.axes}{String. Indicates whether to plot +\item{plot_axes}{String. Indicates whether to plot x-axis ('x'), y-axis ('y'), or both ('both').} \item{row.tick}{interval for plotting row axis texts} @@ -51,21 +50,18 @@ x-axis ('x'), y-axis ('y'), or both ('both').} \item{mar}{image margins} -\item{...}{optional parameters to be passed to function 'image', -see help(image) for further details} +\item{...}{optional parameters to be passed to function 'image', see help(image) for further details} } \value{ -A list with the color palette (colors), +A list with the color palette (colors), color breakpoints (breaks), and palette function (palette.function) } \description{ -Fast investigation of matrix objects; standard visualization choices are -made automatically; fast and easy-to-use but does not necessarily provide -optimal visualization. +Fast investigation of matrix objects; standard visualization choices are made automatically; fast and easy-to-use but does not necessarily provide optimal visualization. } \examples{ -mat <- rbind(c(1,2,3,4,5), c(1, 3, 1), c(4,2,2)) - plot_matrix(mat, 'twoway', midpoint = 3) + mat <- rbind(c(1,2,3,4,5), c(1, 3, 1), c(4,2,2)) + plot_matrix(mat, 'twoway', midpoint = 3) } \author{ Leo Lahti \email{microbiome-admin@googlegroups.com} diff --git a/man/plot.response.Rd b/man/plot_response.Rd similarity index 56% rename from man/plot.response.Rd rename to man/plot_response.Rd index f581620..0d52a87 100644 --- a/man/plot.response.Rd +++ b/man/plot_response.Rd @@ -1,26 +1,26 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.response} -\alias{plot.response} -\title{plot.response} +\name{plot_response} +\alias{plot_response} +\title{plot_response} \usage{ -\method{plot}{response}(x, mynet, mybreaks, mypalette, plot.names = -TRUE, colors = TRUE, plot.type = "twopi", ...) +plot_response(x, mynet, mybreaks, mypalette, plot_names = TRUE, + colors = TRUE, plot_type = "twopi", ...) } \arguments{ \item{x}{A numerical vector, or NULL.} \item{mynet}{Binary matrix specifying the interactions between nodes.} -\item{mybreaks}{Specify breakpoints for color plot.} +\item{mybreaks}{Specify breakpoints for color plot_} -\item{mypalette}{Specify palette for color plot.} +\item{mypalette}{Specify palette for color plot_} -\item{plot.names}{Plot node names (TRUE) or indices (FALSE).} +\item{plot_names}{Plot node names (TRUE) or indices (FALSE).} \item{colors}{Plot colors. Logical.} -\item{plot.type}{Network plot mode. For instance, 'neato' or 'twopi'.} +\item{plot_type}{Network plot mode. For instance, 'neato' or 'twopi'.} \item{...}{Further arguments for plot function.} } @@ -29,9 +29,10 @@ Used for its side-effects. } \description{ Plot a specific transcriptional response for a given subnetwork. +TRUE, colors = TRUE, plot_type = "twopi", ...) } \examples{ -#tmp <- plot.response(model, mynet, +#tmp <- plot_response(model, mynet, # maintext = paste("Subnetwork", subnet.id)) } \author{ diff --git a/man/plot.responses.Rd b/man/plot_responses.Rd similarity index 59% rename from man/plot.responses.Rd rename to man/plot_responses.Rd index 82370aa..a407aa3 100644 --- a/man/plot.responses.Rd +++ b/man/plot_responses.Rd @@ -1,12 +1,13 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.responses} -\alias{plot.responses} -\title{plot.responses} +\name{plot_responses} +\alias{plot_responses} +\title{plot_responses} \usage{ -\method{plot}{responses}(x, subnet.id, nc = 3, plot.names = TRUE, -plot.mode = "network", xaxis = TRUE, yaxis = TRUE, plot.type = "twopi", mar -= c(5, 4, 4, 2), horiz = TRUE, datamatrix = NULL, scale = FALSE, ...) +plot_responses(x, subnet.id, nc = 3, plot_names = TRUE, + plot_mode = "network", xaxis = TRUE, yaxis = TRUE, + plot_type = "twopi", mar = c(5, 4, 4, 2), horiz = TRUE, + datamatrix = NULL, scale = FALSE, ...) } \arguments{ \item{x}{Result from NetResponse (detect.responses function).} @@ -15,29 +16,28 @@ plot.mode = "network", xaxis = TRUE, yaxis = TRUE, plot.type = "twopi", mar \item{nc}{Number of columns for an array of images.} -\item{plot.names}{Plot node names (TRUE) or indices (FALSE).} +\item{plot_names}{Plot node names (TRUE) or indices (FALSE).} -\item{plot.mode}{network: plot responses as a subnetwork graph; matrix, +\item{plot_mode}{network: plot responses as a subnetwork graph; matrix, heatmap: plot subnetwork expression matrix. For both, expression of each gene is shown relative to the mean expression level of the gene; -boxplot.data: feature-wise boxplots for hard sample-to-response assignments; +boxplot_data: feature-wise boxplots for hard sample-to-response assignments; response.barplot: estimated response centroids as barplot including 95% confidence intervals for the means; pca: PCA projection with estimated centroids and 95% intervals. In 1-dimensional case a histogram is drawn. In two-dimensional case the original coordinates are used.} -\item{xaxis,yaxis}{Logical. Plot row/column names.} +\item{xaxis, yaxis}{Logical. Plot row/column names.} -\item{plot.type}{Network plot mode. For instance, 'neato' or 'twopi'.} +\item{plot_type}{Network plot mode. For instance, 'neato' or 'twopi'.} \item{mar}{Figure margins.} -\item{horiz}{Logical. Horizontal barplot.} +\item{horiz}{Logical. Horizontal barplot_} \item{datamatrix}{datamatrix} -\item{scale}{scale the phylotypes to unit length (only implemented for -plot.mode = "matrix"} +\item{scale}{scale the phylotypes to unit length (only implemented for plot_mode = "matrix"} \item{...}{Further arguments for plot function.} } @@ -46,11 +46,13 @@ Used for its side-effects. } \description{ Plot the detected transcriptional responses for a given subnetwork. +plot_mode = "network", xaxis = TRUE, yaxis = TRUE, plot_type = "twopi", mar += c(5, 4, 4, 2), horiz = TRUE, datamatrix = NULL, scale = FALSE, ...) } \examples{ # #res <- detect.responses(D, netw) -#vis <- plot.responses(res, subnet.id) +#vis <- plot_responses(res, subnet.id) } \author{ Leo Lahti \email{leo.lahti@iki.fi} @@ -59,7 +61,7 @@ Leo Lahti \email{leo.lahti@iki.fi} See citation("netresponse") } \seealso{ -\code{\link{plot.scale}} +\code{\link{plot_scale}} } \keyword{utilities} diff --git a/man/plot.scale.Rd b/man/plot_scale.Rd similarity index 62% rename from man/plot.scale.Rd rename to man/plot_scale.Rd index 8cb322c..b7b31c5 100644 --- a/man/plot.scale.Rd +++ b/man/plot_scale.Rd @@ -1,15 +1,14 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.scale} -\alias{plot.scale} -\title{plot.scale} +\name{plot_scale} +\alias{plot_scale} +\title{plot_scale} \usage{ -\method{plot}{scale}(x, y, m = NULL, cex.axis = 1.5, - label.step = 2, interval = 0.1, two.sided = TRUE, - label.start = NULL, Nlab = 3, ...) +plot_scale(x, y, m = NULL, cex.axis = 1.5, label.step = 2, + interval = 0.1, two.sided = TRUE, label.start = NULL, Nlab = 3, ...) } \arguments{ -\item{x}{Breakpoints for the plot.} +\item{x}{Breakpoints for the plot_} \item{y}{Color palette.} @@ -25,7 +24,7 @@ \item{label.start}{Label starting point.} -\item{Nlab}{Number of labels to plot.} +\item{Nlab}{Number of labels to plot_} \item{...}{Further arguments for plot function.} } @@ -38,8 +37,8 @@ Plot the color scale used in visualization. \examples{ # #res <- detect.responses(D, netw, verbose = FALSE) - #vis <- plot.responses(res, subnet.idx) - #plot.scale(vis$breaks, vis$palette) + #vis <- plot_responses(res, subnet.idx) + #plot_scale(vis$breaks, vis$palette) } \author{ Leo Lahti diff --git a/man/plot.subnet.Rd b/man/plot_subnet.Rd similarity index 71% rename from man/plot.subnet.Rd rename to man/plot_subnet.Rd index 37ae106..55d4d29 100644 --- a/man/plot.subnet.Rd +++ b/man/plot_subnet.Rd @@ -1,10 +1,10 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/plot-methods.R -\name{plot.subnet} -\alias{plot.subnet} -\title{plot.subnet} +\name{plot_subnet} +\alias{plot_subnet} +\title{plot_subnet} \usage{ -\method{plot}{subnet}(x, subnet.id, network, plot.names = TRUE, ...) +plot_subnet(x, subnet.id, network, plot_names = TRUE, ...) } \arguments{ \item{x}{Result from NetResponse (detect.responses function).} @@ -13,7 +13,7 @@ \item{network}{Original network used in the modelling.} -\item{plot.names}{Plot node names (TRUE) or indices (FALSE).} +\item{plot_names}{Plot node names (TRUE) or indices (FALSE).} \item{...}{Further arguments for plot function.} } @@ -26,9 +26,8 @@ Plot the given subnetwork. } \examples{ # - # res <- detect.responses(D, netw, verbose = FALSE) -# net <- plot.subnet(res, subnet.idx = 1) +# net <- plot_subnet(res, subnet.idx = 1) } \author{ Leo Lahti, Olli-Pekka Huovilainen and Antonio Gusmao. Maintainer: diff --git a/man/read.sif.Rd b/man/read.sif.Rd index a8d1661..ec24392 100644 --- a/man/read.sif.Rd +++ b/man/read.sif.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/read.network.R \name{read.sif} \alias{read.sif} @@ -32,7 +32,9 @@ Read in SIF network file, return R graph object in igraph or graphNEL format. } \examples{ + #net <- read.sif("network.sif") + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/remove.negative.edges.Rd b/man/remove.negative.edges.Rd index d1ed9d5..5d9ec05 100644 --- a/man/remove.negative.edges.Rd +++ b/man/remove.negative.edges.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/filter.netw.R \name{remove.negative.edges} \alias{remove.negative.edges} diff --git a/man/response.enrichment.Rd b/man/response.enrichment.Rd index 1a6582c..52d4442 100644 --- a/man/response.enrichment.Rd +++ b/man/response.enrichment.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/response.enrichment.R \name{response.enrichment} \alias{response.enrichment} diff --git a/man/response2sample.Rd b/man/response2sample.Rd index 5ae2e04..d0904ba 100644 --- a/man/response2sample.Rd +++ b/man/response2sample.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/response2sample.R \name{response2sample} \alias{response2sample} @@ -40,6 +40,7 @@ model <- toydata$model # Pre-calculated model # Find the samples for each response (for a given subnetwork) response2sample(model, subnet.id = 1) + } \author{ Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/sample2response.Rd b/man/sample2response.Rd index e89bef4..b3c0162 100644 --- a/man/sample2response.Rd +++ b/man/sample2response.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/sample2response.R \name{sample2response} \alias{sample2response} diff --git a/man/set.breaks.Rd b/man/set.breaks.Rd index c13ff98..6d95782 100644 --- a/man/set.breaks.Rd +++ b/man/set.breaks.Rd @@ -1,8 +1,8 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/visualization.R \name{set.breaks} \alias{set.breaks} -\title{set.breaks} +\title{Set breaks} \usage{ set.breaks(mat, interval = 0.1) } @@ -18,7 +18,7 @@ A vector listing the color breakpoints. Set breakpoints for two-way color palette. } \examples{ -set.breaks(array(rnorm(100), dim = c(10, 10)), interval = .1) + set.breaks(array(rnorm(100), dim = c(10, 10)), interval = .1) } \author{ Leo Lahti, Olli-Pekka Huovilainen and Antonio Gusmao. Maintainer: diff --git a/man/toydata.Rd b/man/toydata.Rd index 7c8d5c8..539583d 100644 --- a/man/toydata.Rd +++ b/man/toydata.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/pkg-package.R \docType{data} \name{toydata} @@ -24,7 +24,7 @@ data(toydata) Toy data for NetResponse examples. } \examples{ -data(toydata) + data(toydata) D <- toydata$emat # Response matrix (samples x features) netw <- toydata$netw # Network between the features model <- toydata$model # Pre-calculated NetResponseModel obtained with diff --git a/man/update.model.pair.Rd b/man/update.model.pair.Rd index 07467e1..2b09385 100644 --- a/man/update.model.pair.Rd +++ b/man/update.model.pair.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/update.model.pair.R \name{update.model.pair} \alias{update.model.pair} diff --git a/man/vdp.mixt.Rd b/man/vdp.mixt.Rd index 2ecb3ed..3370817 100644 --- a/man/vdp.mixt.Rd +++ b/man/vdp.mixt.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/vdp.mixt.R \name{vdp.mixt} \alias{vdp.mixt} @@ -12,7 +12,7 @@ vdp.mixt(dat, prior.alpha = 1, prior.alphaKsi = 0.01, \arguments{ \item{dat}{Data matrix (samples x features).} -\item{prior.alpha,prior.alphaKsi,prior.betaKsi}{Prior parameters for +\item{prior.alpha, prior.alphaKsi, prior.betaKsi}{Prior parameters for Gaussian mixture model (normal-inverse-Gamma prior). alpha tunes the mean; alphaKsi and betaKsi are the shape and scale parameters of the inverse Gamma function, respectively.} @@ -44,21 +44,21 @@ splitted based on its first PCA component. To speed up, approximate by using only subset of data to calculate PCA.} \item{min.size}{Minimum size for a component required for potential - splitting during mixture estimation.} +splitting during mixture estimation.} } \value{ -\item{ prior }{Prior parameters of the vdp-gm model (qofz: priors on observation lables; Mu: centroids; S2: variance).} - \item{ posterior }{Posterior estimates for the model parameters and statistics.} +\item{ prior }{Prior parameters of the vdp-gm model (qofz: priors on observation lables; Mu: centroids; S2: variance).} + \item{ posterior }{Posterior estimates for the model parameters and statistics.} \item{ weights }{Mixture proportions, or weights, for the Gaussian mixture components.} - \item{ centroids }{Centroids of the mixture components.} - \item{ sds }{ Standard deviations for the mixture model components (posterior modes of the covariance diagonals square root). Calculated as sqrt(invgam.scale/(invgam.shape + 1)). } - \item{ qOFz }{ Sample-to-cluster assigments (soft probabilistic associations).} - \item{ Nc }{Component sizes} - \item{ invgam.shape }{ Shape parameter (alpha) of the inverse Gamma distribution } - \item{ invgam.scale }{ Scale parameter (beta) of the inverse Gamma distribution } + \item{ centroids }{Centroids of the mixture components.} + \item{ sds }{ Standard deviations for the mixture model components (posterior modes of the covariance diagonals square root). Calculated as sqrt(invgam.scale/(invgam.shape + 1)). } + \item{ qOFz }{ Sample-to-cluster assigments (soft probabilistic associations).} + \item{ Nc }{Component sizes} + \item{ invgam.shape }{ Shape parameter (alpha) of the inverse Gamma distribution } + \item{ invgam.scale }{ Scale parameter (beta) of the inverse Gamma distribution } \item{ Nparams }{ Number of model parameters } - \item{ K }{ Number of components in the mixture model } - \item{ opts }{Model parameters that were used.} + \item{ K }{ Number of components in the mixture model } + \item{ opts }{Model parameters that were used.} \item{ free.energy }{Free energy of the model.} } \description{ @@ -68,21 +68,21 @@ Accelerated variational Dirichlet process Gaussian mixture. Implementation of the Accelerated variational Dirichlet process Gaussian mixture model algorithm by Kenichi Kurihara et al., 2007. -ALGORITHM SUMMARY -This code implements Gaussian mixture models with diagonal covariance matrices. +ALGORITHM SUMMARY +This code implements Gaussian mixture models with diagonal covariance matrices. The following greedy iterative approach is taken in order to obtain the number of mixture models and their corresponding parameters: 1. Start from one cluster, $T = 1$. -2. Select a number of candidate clusters according to their values of +2. Select a number of candidate clusters according to their values of "Nc" = \\sum_{n=1}^N q_{z_n} (z_n = c) (larger is better). -3. For each of the candidate clusters, c: - 3a. Split c into two clusters, c1 and c2, through the bisector of its - principal component. Initialise the responsibilities - q_{z_n}(z_n = c_1) and q_{z_n}(z_n = c_2). +3. For each of the candidate clusters, c: + 3a. Split c into two clusters, c1 and c2, through the bisector of its + principal component. Initialise the responsibilities + q_{z_n}(z_n = c_1) and q_{z_n}(z_n = c_2). 3b. Update only the parameters of c1 and c2 using the observations that belonged to c, and determine the new value for the free energy, F{T+1}. - 3c. Reassign cluster labels so that cluster 1 corresponds to the largest + 3c. Reassign cluster labels so that cluster 1 corresponds to the largest cluster, cluster 2 to the second largest, and so on. 4. Select the split that lead to the maximal reduction of free energy, F{T+1}. 5. Update the posterior using the newly split data. @@ -98,13 +98,14 @@ This implementation is based on the Variational Dirichlet Process Honkela, Krista Lagus, Jeremias Seppa, Harri Valpola, and Paul Wagner. } \examples{ -set.seed(123) + + set.seed(123) # Generate toy data with two Gaussian components dat <- rbind(array(rnorm(400), dim = c(200,2)) + 5, array(rnorm(400), dim = c(200,2))) - # Infinite Gaussian mixture model with + # Infinite Gaussian mixture model with # Variational Dirichlet Process approximation mixt <- vdp.mixt( dat ) @@ -113,6 +114,8 @@ set.seed(123) # Hard mixture component assignments for the samples apply(mixt$posterior$qOFz, 1, which.max) + + } \author{ Maintainer: Leo Lahti \email{leo.lahti@iki.fi} diff --git a/man/vectorize.groupings.Rd b/man/vectorize.groupings.Rd index 0681b2e..dbb8f54 100644 --- a/man/vectorize.groupings.Rd +++ b/man/vectorize.groupings.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/listify.groupings.R \name{vectorize.groupings} \alias{vectorize.groupings} diff --git a/man/write.netresponse.results.Rd b/man/write.netresponse.results.Rd index f2a093c..6d7ae56 100644 --- a/man/write.netresponse.results.Rd +++ b/man/write.netresponse.results.Rd @@ -1,4 +1,4 @@ -% Generated by roxygen2 (4.1.0): do not edit by hand +% Generated by roxygen2: do not edit by hand % Please edit documentation in R/utilities.R \name{write.netresponse.results} \alias{write.netresponse.results} diff --git a/tests/validate.pca.basis.R b/tests/validate.pca.basis.R index cf635db..6c5b7d9 100644 --- a/tests/validate.pca.basis.R +++ b/tests/validate.pca.basis.R @@ -36,10 +36,10 @@ subnet.id.pca <- names(get.subnets(res.pca))[[k]] # -------------------------------------------------------------------------------------------------- -vis1 <- plot.responses(res, subnet.id, plot.mode = "pca", main = paste("NoPCA; NoDM")) -vis2 <- plot.responses(res, subnet.id, plot.mode = "pca", datamatrix = D, main = "NoPCA, DM") -vis3 <- plot.responses(res.pca, subnet.id.pca, plot.mode = "pca", main = "PCA, NoDM") -vis4 <- plot.responses(res.pca, subnet.id.pca, plot.mode = "pca", datamatrix = D, main = "PCA, DM") +vis1 <- plot_responses(res, subnet.id, plot_mode = "pca", main = paste("NoPCA; NoDM")) +vis2 <- plot_responses(res, subnet.id, plot_mode = "pca", datamatrix = D, main = "NoPCA, DM") +vis3 <- plot_responses(res.pca, subnet.id.pca, plot_mode = "pca", main = "PCA, NoDM") +vis4 <- plot_responses(res.pca, subnet.id.pca, plot_mode = "pca", datamatrix = D, main = "PCA, DM") # With original data: VDP overlearns; BIC works; with full covariance data # With PCA basis: modes detected ok with both VDP and BIC. @@ -48,5 +48,5 @@ vis4 <- plot.responses(res.pca, subnet.id.pca, plot.mode = "pca", datamatrix = D # TODO # pca.plot(res, subnet.id) -# plot.subnet(res, subnet.id) +# plot_subnet(res, subnet.id) } \ No newline at end of file diff --git a/vignettes/NetResponse.Rmd b/vignettes/NetResponse.Rmd index 9f1b6e9..533350c 100644 --- a/vignettes/NetResponse.Rmd +++ b/vignettes/NetResponse.Rmd @@ -1,3 +1,23 @@ +--- +title: "netresponse tutorial" +author: Leo Lahti +date: "`r Sys.Date()`" +output: + toc: true + html_document: + theme: flatly +--- + + +```{r setup, include=FALSE} +# Global options +opts_chunk$set(fig.path="fig/") +``` + # netresponse - probabilistic tools for functional network analysis For bug reports and maintainer contact details, see the [README](../README.md) file @@ -75,7 +95,7 @@ subnet.id <- names(get.subnets(res))[[1]] ```{r NetResponse2, fig.width=6, fig.height=6, warning=FALSE, message=FALSE, fig.show="hide"} library(ggplot2) -vis <- plot.responses(res, subnet.id, plot.mode = "pca") +vis <- plot_responses(res, subnet.id, plot_mode = "pca") ``` ```{r NetResponse2b, fig.width=6, fig.height=5, warning=FALSE, message=FALSE} @@ -89,19 +109,19 @@ print(p) # Plot ### Network visualization ```{r NetResponse3, fig.width=8, fig.height=8, warning=FALSE, message=FALSE} -vis <- plot.responses(res, subnet.id, plot.mode = "network") +vis <- plot_responses(res, subnet.id, plot_mode = "network") ``` ### Heatmap visualization ```{r NetResponse4, fig.width=8, fig.height=8, warning=FALSE, message=FALSE} -vis <- plot.responses(res, subnet.id, plot.mode = "heatmap") +vis <- plot_responses(res, subnet.id, plot_mode = "heatmap") ``` ### Boxplot visualization ```{r NetResponse5, fig.width=8, fig.height=8, warning=FALSE, message=FALSE} -vis <- plot.responses(res, subnet.id, plot.mode = "boxplot.data") +vis <- plot_responses(res, subnet.id, plot_mode = "boxplot_data") ``` See also mode = "response.barplot" @@ -110,7 +130,7 @@ See also mode = "response.barplot" ### Color scale ```{r NetResponse7, fig.width=8, fig.height=8, warning=FALSE, message=FALSE} -plot.scale(vis$breaks, vis$palette, two.sided = TRUE) +plot_scale(vis$breaks, vis$palette, two.sided = TRUE) ``` diff --git a/vignettes/NetResponse.md b/vignettes/NetResponse.md index c47539d..a59b00d 100644 --- a/vignettes/NetResponse.md +++ b/vignettes/NetResponse.md @@ -1,3 +1,20 @@ +--- +title: "netresponse tutorial" +author: Leo Lahti +date: "2016-01-09" +output: + toc: true + html_document: + theme: flatly +--- + + + + # netresponse - probabilistic tools for functional network analysis For bug reports and maintainer contact details, see the [README](../README.md) file @@ -77,7 +94,7 @@ subnet.id <- names(get.subnets(res))[[1]] ```r library(ggplot2) -vis <- plot.responses(res, subnet.id, plot.mode = "pca") +vis <- plot_responses(res, subnet.id, plot_mode = "pca") ``` @@ -88,35 +105,35 @@ p <- p + geom_point(size = 3) # Modify point size print(p) # Plot ``` -![plot of chunk NetResponse2b](figure/NetResponse2b-1.png) +![plot of chunk NetResponse2b](fig/NetResponse2b-1.png) ### Network visualization ```r -vis <- plot.responses(res, subnet.id, plot.mode = "network") +vis <- plot_responses(res, subnet.id, plot_mode = "network") ``` -![plot of chunk NetResponse3](figure/NetResponse3-1.png) +![plot of chunk NetResponse3](fig/NetResponse3-1.png) ### Heatmap visualization ```r -vis <- plot.responses(res, subnet.id, plot.mode = "heatmap") +vis <- plot_responses(res, subnet.id, plot_mode = "heatmap") ``` -![plot of chunk NetResponse4](figure/NetResponse4-1.png) +![plot of chunk NetResponse4](fig/NetResponse4-1.png) ### Boxplot visualization ```r -vis <- plot.responses(res, subnet.id, plot.mode = "boxplot.data") +vis <- plot_responses(res, subnet.id, plot_mode = "boxplot_data") ``` -![plot of chunk NetResponse5](figure/NetResponse5-1.png) +![plot of chunk NetResponse5](fig/NetResponse5-1.png) See also mode = "response.barplot" @@ -125,10 +142,10 @@ See also mode = "response.barplot" ```r -plot.scale(vis$breaks, vis$palette, two.sided = TRUE) +plot_scale(vis$breaks, vis$palette, two.sided = TRUE) ``` -![plot of chunk NetResponse7](figure/NetResponse7-1.png) +![plot of chunk NetResponse7](fig/NetResponse7-1.png) ### Cluster assignments @@ -260,7 +277,7 @@ points(real.means, col = "blue", pch = 16, cex = 2) points(estimated.means, col = "blue", pch = 17, cex = 2) ``` -![plot of chunk vdp](figure/vdp-1.png) +![plot of chunk vdp](fig/vdp-1.png) ```r # Hard mixture component assignment for each sample @@ -330,7 +347,8 @@ citation("netresponse") ## For ICMg functionality, please cite additionally the references ## listed in help(ICMg.combined.sampler). Thanks for Olli-Pekka ## Huovilainen and Antonio Gusmao for contributions to the R/C -## implementation of the netresponse algorithm. +## implementation of the netresponse algorithm and Juuso Parkkinen +## for ICMg. ``` ### Version information @@ -343,8 +361,9 @@ sessionInfo() ``` ``` -## R version 3.1.2 (2014-10-31) +## R version 3.2.2 (2015-08-14) ## Platform: x86_64-pc-linux-gnu (64-bit) +## Running under: Ubuntu 15.04 ## ## locale: ## [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C @@ -359,18 +378,18 @@ sessionInfo() ## [8] base ## ## other attached packages: -## [1] ggplot2_1.0.0 netresponse_1.17.13 reshape_0.8.5 -## [4] mclust_4.4 minet_3.20.2 infotheo_1.2.0 -## [7] Rgraphviz_2.8.1 graph_1.42.0 knitr_1.7 +## [1] ggplot2_2.0.0.9001 netresponse_1.21.11 reshape2_1.4.1 +## [4] mclust_5.1 minet_3.26.0 Rgraphviz_2.12.0 +## [7] graph_1.46.0 knitr_1.11 ## ## loaded via a namespace (and not attached): -## [1] BiocGenerics_0.10.0 colorspace_1.2-4 digest_0.6.4 -## [4] dmt_0.8.20 evaluate_0.5.5 formatR_1.0 -## [7] gtable_0.1.2 igraph_0.7.1 labeling_0.3 -## [10] lattice_0.20-29 MASS_7.3-35 Matrix_1.1-4 -## [13] munsell_0.4.2 mvtnorm_1.0-0 parallel_3.1.2 -## [16] plyr_1.8.1 proto_0.3-10 qvalue_1.38.0 -## [19] RColorBrewer_1.0-5 Rcpp_0.11.3 reshape2_1.4 -## [22] scales_0.2.4 stats4_3.1.2 stringr_0.6.2 -## [25] tcltk_3.1.2 tools_3.1.2 +## [1] igraph_1.0.1 Rcpp_0.12.2 magrittr_1.5 +## [4] splines_3.2.2 BiocGenerics_0.14.0 MASS_7.3-44 +## [7] munsell_0.4.2 colorspace_1.2-6 lattice_0.20-33 +## [10] stringr_1.0.0 plyr_1.8.3 tools_3.2.2 +## [13] parallel_3.2.2 gtable_0.1.2 digest_0.6.9 +## [16] dmt_0.8.20 Matrix_1.2-2 RColorBrewer_1.1-2 +## [19] formatR_1.2.1 qvalue_2.0.0 evaluate_0.8 +## [22] labeling_0.3 stringi_1.0-1 scales_0.3.0 +## [25] stats4_3.2.2 mvtnorm_1.0-3 ``` diff --git a/vignettes/fig/NetResponse2-1.png b/vignettes/fig/NetResponse2-1.png new file mode 100644 index 0000000000000000000000000000000000000000..e5646c2746a1f184a6ae34f41d951fce176d0dba GIT binary patch literal 23187 zcmafb1yCGOliwOYBhj0NhK4%o`K)2e<=k`^_~gp+aweDa zV68p!DuO8T8nsiK&+iBn8udy>78adupQrv%c&~_`+Th=ZQCmQ}BAi``A(W>eaf`Nzw)R z`3OgvD#N3r>0HhS@dEG5zrpwer$r-(npM8i&}b!3jE$-AQDa7{C@ZVi=+ogrK|xJs za;Y>4NlFekTFt3W*=}~WY1HVetE(Fs8F}BIDPh};cn35*Hu$Wszw{QQiK^S=#FPTF6rw*}E9Nx!|ljg5_gp<`j?@OnD^-5D^hYpwtHP$om2$lzcg zCEdN)=y261P8ow&WqgF=%(D}LsM9ksGGeltEd>4@H#zzK$wGxniF}va`6>|P=^oyS zir-I+Bqd=2Zf{+-r^m*ki*33MrC$yvGC=B8+GgebJeQr|e}MUR)&KGHr*Vz2y?r%> zKV{%Ft7w>8fFUR zHg$DvDkp+#ZEydSOC`;@$0_ew*53Ynf4&wN7&yuT3kzHRFgQ5)>FWC0`t^Ksa}%VQ ze7;nZb8QL)@%dT{9WCt%D?0}VA+N``g!iwX@&>*WJ9~%Zm(CPO0PiVk-YRDI08^6V z|Bj7}Y-nKt-8()`%fzHq7Ma0rS6*JO>^lj3w4k5>^5y;Q<#eg$;o(6;ZQQG_q2Y9+ zVX{`4;?`xLKw9=^z6hi=I}q)^K+)7MSSdq_iY3=9U{K5f8_ zMn;b03I)&3&KApOmE*YG3=#VK07=T{bz56skHhP6Ri;vs`0yE*otA_|_|6r`09;1H zfNMs6e!uZlrYvsPljXYIQl$cVz4pS+#I&@PDjkkU(R%BJ^1%-XR5y`ndUS;-SrizE zPax)SNg`wz=?EfJpq76kiGcVNm>U2?0#tY^qM(0=;QqTqjLB8rGcz-0W@cgcpJ>O* zH$00uJhC-5)@%fahm;xiOdQ?aAMWlJZe(1e>R^nuv{vRuauIgIm?ImFP@E)iM?N?T zo;5k+&>~}Yylr?1;iqnB$4;J1xPTxALS`+M=qEAD|K}S1m&^O_4)s#8kD$SvL%eV5 zu@lGDHyS_RhHDyIy2H2<1NV6Z%g@mAT;UotVP+n2NY7j;5K=-cV*W`;;TyFS+x?x# za5>@;LY}@0eFUjQ9II!42rQb*8~3L^%RF0KYy9ZnP);G!MBIeTCB?-ATu#47MqmSe zn9h+QBYfK6OKeM;)Ncm~c0P)Ik=S$y`r3{mnkJi^lOtd`O++f?C`?b%e&p#++STe6~Zefcgilf-Jtz zw?JM{)f5*Oi;IiH-4{wF0IBA3BCGO!Y=7_%6e#=9GrPp9K=Y2dJU(=nGuaFgIPrx5 zCh3#LG=1WxX?JDi_~__Y28OB4&G+MqA3uH+4kvys99Hf6PNH&WTuPz>tlB_vefBA< zp0R`8n=O*Dn9M}6jTG%?jM0=;Uj*XqN4}0wWocU<=LM=g@KnZi-@^yc{J+`;Er>3S}Yqpy^J_TYokNn7I)@UFK0{{locRK&x+5a*? zLIK3h7x4cchx{)P<$pZ%MJ!)Vm?wmR&PXBW4`B*(p0DLcb(mYYAPC3|gwWUct+shn z&{>n_@mP&Y^+niygdh-qj4(+_K{%gsLG+}tR-(xJ%uj(`XGK))-bh}z5Sj^izaaF4 z4v=BPdVh=FML4nd}QCFa%+NPOexC znyZD$n|={pB+D*2wdP%+W9?OV8P3#F>l?PKUCs^Jf|eQpdi%m7JH`Kpi=Hmj?OQ&S zIBUfh9`Yaa{A6N;u(3iAKc?Xfz3xoB?!bE;@mkF#N%nUJZ(&Us3_!iNg!7N4`tfN{HD=|X^wDQEwr<= zX&R3ol)2B$^2Guxm|Jq15E#5cn3S|hEX-N{_rxZ)uQX=<=Q}$!vwFctj#ItG!ERdv z`dzvv29FZAXLz8q5tH>;QIM`Svzfhk`0eb44D28*ifGUbvA{cr_jRhFjC!T9iAn2Y z1*jEw$ulg^f`2J7{0a%4I7#^c^CY8O9+f|hX%BTL@vwC*Z53TK+k)Zs*M@8n9-f$p z_+nYHAR{e+gyDTwOz7#MNKnvb$A&-9zAhkxyzk%)R7-jHYKBCrh@3KQ57jTUX+bl? zb>p=&u^bl9pZ_S^Q=L(=gt-{H(=!RxQft_SZPca|>_fjp1nh|>CPfxc%`uts{b~BI96R+|&c5bk6Az}3{VTvOD zc?gN8%eT^8d^u`j!52sn2uU%w;~}@P3uaC@6%55kipl$eb*_Me#r|jB2Jw6ljB!VR zldA7yG#Z-pZlpY#%5nHn~r#S^erQUrj|`gi4`F zBF-UamLu~~3WR2mn}Ypa(9lq+M5Y7WuKa^@MQN3`!g84w7HoA9$}5h(XS^@4iF=$!c zd1U}vE`Ux#Y^_{-ed8USX*-@WeMT~V4hb|PCXUvq!XSwdM|77k3m=I+{o~oSPg7J` zCB|~_$&eu%%lFj{qZa|68i!3kK|*U`6JmBmh=;xz^lmiqZn-aR-aU!%6N+X4VNUyA z6!j!@oEV3#vBEnRAG!47Y~poS*$gX*&oy(-mRX4mlff_Y9uY)@Ban7+RwjnT7X10B zxG|02D2NybUCFuLK{J7QA9)qCFx+x}x-TzZ0;x?0n~`my(tS~xAZ3x8mU{7wsj)`j z{ImwrzY*emNe#F&U1?M^i>X_cy`f_8VDg&o5i_${`z-3iWVsAfZOTEC2)v;YQ)Urw zuw=8?K16c7A!6E3Mkt^?(CwuTw9e>Syn+HooMy{pC5jLK>J!KHbzlk-(zni0Xd4S8 z9`Da`&!w^FYxx!yoUR$8I;6n)SmmN)3}w=Ov<6acv1`w{BG@ro7!8E_lc9?}oatDw zD}H>#8@k~&!Mkx8ys_K%%--eX^QUE%YvGe)jq;ZV8-*FoP(n9Dum|N*MICw;d>b5( zxfGBz#e1QTIWl1?c8Cs8;+m6YA_2$&ZJ3YJh^dicyeve*!)1up7}kqtHlTxsh3B}& zJ2($-W{61AbyYXZ4v$O-!Ngs~5{56WhJs{7^fPJGIj$#Uhie9^1vizbK{gxs{k-E- zod`&jbZ9i55L4di;UWq^ZKVbfkaoJrHOYmy?Tw1HH4h(r)A`XxZ^V{iuSY`nx3Hkw z+L`(3A9u}01yc*lOeryn$ZeH8Kt)q5Ck9=3@oFYRFyerVGg{Qh@K3DgHwuirE_{na zW(}X}pezMGv8RO2U)qCTMMCA3D!1#2E+A|s#$vBjmaK-AA2uk2dr7Q*!xjjWq?-iB zM{J2;ps#*fTUohjo*!Yf@Ha}Ee7v`>{Z5KL!ETF0TDtU;sERqW@2_+xwEg3vMk_*r z(P}hY-?)23L-ClIw1SX>nL$X$=G{^eq0S0TO5_eIJVronZg&gfduW=I7s=*u*Dld7=$HfzK~Rdn-eGTiV!MRLnq@$r+$WL&y&!zpnr5ShJRcO&W*iQAniy@wpLSRxa&5 zIMok412?;WW3sev?&njdZdI!YG!%_pv4((Tp|&S&-=D@E0%I;6F8&MGKEK_A52#g$ z@D&K`#UgGWclXOJ$SAOvre2V*19!wXKNfEOIC_q6#r`Bjou-o~|KEd|K|nb46k(IpOLW5p@JidjZA+ zGM{W_nCqGAb)K;iQ@#jNR~L8B^Y#mN#)TS2OyhaSx}CPjggIB->+Ahx&|CQng0H7V z%r|%Dr%c<`g6Q{#;Rp&@l-MuuVH9G}u+~-sLBoo-i@gsV=I8Xu0{T15BfsXQ9BTBF zU$+DNO&|9cQ36pML9uWMD~wy+3b}MDyOy_nC47@e-vy@ZvA) zZ4rErbqpzcIfs z&Jw4}I=0ACXww0mh8qt=MV>1-K$pmZ*R7^W$#xa{c#arw2{Vl`T* zMy04Zp(ouPyUo4m!jGV%I!79a7sdFGxCY#5NfTTpIj1K%_XmaM_%9|)J#7xQ0uf>H z)$*NC0r%HtVX^iX=dZyp01##*DgF>V>b@W{c#Yt5$4SC)xqKf~JP*iKSdAbe@cH(> zFwX$_l2^HBd6Y8Y+mGb_Kz%Ofj>JkIp_lIY&MrwhUjkogjU42v%$Av_+Ihj@_gS7ZE^ma-H3f7I3FYGK5yygLpv+=ojH)E10p0Q@IOV)KUIoGog>y1+CNes z5(OAszIAatHjHGEO!7r(bkQ_#VH&V-I1e`dpxi1S2Ij5;9BFdG4e!af7dM&Y+%}of z%|riv$^Kp$9W?XXYCPcE1c3+_XC#Gu0^u^aAnOg+X#dYcPMFZ7im%iX7IZ^m(V{zt zDRqbPj%6eHe-o^behN1D&WJ;x^pd3fZO9Uz?0(<;iJS9Pp*yFpEHY^LI+M#}b&a`K zSG8e9Mo}cNAQX$zJ?hBlxC1h3K6?&7?5_4!?PZU{-p~6_9~WrtCeAyZ+yCrM80~|k zAgBv(LN6Zr7bD6q%OqBH#J-{uIBOU|KSQLsf|S9vgH*6>X+Df{oDrl;i>Yh~L3c#d zDZRoCEwR<1`1`*$7kXy{H@c&Uqw7J~T*>v#Gx-7#zO&+CK=v-d2{(6!@stNy$PaZT_Ur>xKLJsKH1NlvYZhB_BB z#p}klifvri0`A|eMs%I>&t7WMS>fmzH28LC(8Ga9zt-y+@q3Ask*mIBzq^W;fn~7cA_LZy7qFymoVte%c)fwphso{yq_#6? zO5@r&W)s)enHwOpsBoSnPcAhi-NGunZDs+5y9j^PLbvmz>*{0E8L+^pGQl_%dTapo zk{m?BoD-$NW27CCX^B?}Zh6IfVz|8zE zdv=V>#kP}1F5yD(y*X$J;v2L2y=Z?)vlLgsnU)&{>KshIc43;`w^-ZG6 z+hU=h9UlKqC@n)~^DU$U6TU1F_JSG);-gfu3DKQ0!K#}`nH@iMdeim{1Ll{`M|D%S z=V|d-cnzcuK)$SU&Lc)VNr$AB-nY$g zpl^jl&+7$`1j&ALcwtm8KSAoncI)3PpaTS>=_BJEU@60Y)9#AvD%ur~7Rqm{a3gMd ze;@=rwA0pOoR+QSi#^7FQnQ$PpcPn9!ONHnidL~SQ7%!@&^-MBH`FS2 z_+qvdbEi9V+vZZ^S6ZF#`$|-^!TL4(&jK3=}US{Iy-p;Xk89Z->rg@uA^bzzEW>_I|yFEK$@W^gV6CY z#XB4{UW;u#m})!5$Ib9pWc!42^TTV*x!dq^l7||ALq#}ni494JRcz7JGueL>RL1IQ zzo=*=$fv)XL51C47j@0o5S0ZQ{T@@VEm07pF9~jM_{hYB1Ft=l|2KX0wYDeDR8jZW zR!7P*S*qdFTx!c2^gx3RVhj!gp1d2WZV$P>;H{0Ophka=H_8`c*63!6h}c@vqXIdu zmuSKGZ^eKzh4HyV>TXZ z_|;ISaE>lVS&dv~`k;efc`(1T`7{4|R8Xpd`Hj--yLpxB4%9lzvU8bgoXJEB)xERP zXqWFUnY*mzYLj%$A*;lTiB(zZ+0yR!iJd)RQ)2)XK9kfkdhhRwZo$QekZ&V5+O03~($Xx*6cG=q@kQiZv=TVB(E?r56T%v|2}ul>^;PLPvpieG28 zzow$S@ze){l}oy{7+{|(f@dakGd?F{J+!1JIEQs`#b5wO_!JN zMU7>va|*C;&1o#feo8FGdfqfG>C zR||;l8_QvT=$t&q%n~?o7`Ddd4?RS^+{UhSgo@VsZwkEm%$6MH$WoL$6;s_8?M-QH zJ-4+!IUNukmwH*w9MO{HIRahiXe<-J{`ky@(D7$7co2PWcv!lN9CV%t3pmG%O`=_l5okx!dTBoC`Ddb-ZbSCQFg=m}*@e(5 zZW`uYo|Vv=Me5z|*M_{|mf{Ar>iU>S#*j$zRI}PSTv<$9n@X4T!DkJ@!*h1D`^&;{ zaA0+}rbc%m{D?SSsIkx6;|`|_+$|R{sA8-clF|2nIffygS+>|ipCG4XHrkfWVQh*o zYhhR>_oFdjg+d=Ja_>n5OP zNI%9QD|8SOIoxG#>IcCrlPX)TcG6!ra1b6%XDRQ^(pv-2$TeV!e~Ef;TU+~p_t2A$ zJPt#PLpdqw?0lYchfI*^BF^qe1rQ<2EERG4fRGKO+ldQ%+gjSVN{}QMXA~B#-J%H) z?OzKmWU@#tGZx7r4x@H{ndqaR;R_K?xZusKQ@)n|gj8qaT8`^P3nIGybE&?0N!843 zBCGG5V@1;(M=wvClyW}IllPo?`RN_Jx1*WLrdifjIwA2nz1M8f^y{8|@wFHdz(7n# zE>Zo6xLDK+{vD0j_wFox_uXx_e+Q}0(n=0L!Qt{kZFS8l-s%bhmah7tlTnv0DMdlX zZ|HoT>_$c8eON$D<@VE|qX0zbUzrwn3!YeI_PDdBrmIZs&%Z);@(XNV#P8mf!2My; zO|-m!#fL%`Di>Q2a&xNs+8W|(Cd;$|fM%hiwNIb7rqQYgG}_daf?%`OSWJ+A(qC;p zH(k@JpkdFZw2wID31UCQ<5Vv^VwYF&$RNy1>hpp7kbJW z)=}5~^Tq%!y(r!qPE}d>BVl}-^o!a<8V+w>L*(wp6?h9;k_j^n$_XaC-l%@i{5|j&Q9@9>b^~_J3di4f=hEw7{Bk=g<(!C-AG4-Uw zv)li2&JB%M1-Fj8=&P0Pm_{e?OZjBN8fI<;^x=!BExB0$o!8Z(LeLwK#1x|j_)g^n zt?w*KwTIlX?{rtbhy=>eaffl};sS|DF-`C`v2Dbx;k%Eoyr~&W8N<;Ro53;>D$6(u z=aJS77XobS#lCMvIliIgU-MS^QhYlOR%1_(3f^{%ufhGD{xX4D6UkE3+00hbbLq4b zh(6UC%D!m2t8G<-(PL5)c-JRiy9>>?wql@aP}Ae7=8nT2eLU6lz57&;ODOb1gTsg#suK?!7BHGeOp>Eg90 zw95%oH^eE4du6MS=p?=TeRg^Ydw=)d1Fb!8&|M&^UkpsG|AxRz{wX>l-WisXel zl&q{+!5~|nrbYFjM0F-O% zt5`ubO+yEXx<*Mo=*jMiK=t7>pFBkFW^ z8TTnlR^b;^(ZH|O&rW}1HF&0KQb+>4NCUQ<;ydTejAY|;epCDeImg2~*1(T3bemsT?Q03YDAm<`4Mqd= zNoqQ^>=TnHvn!G|XN=0XPqr}daM5!$^sBs@oeSdJFw*=G3gj4T5UF~#!_oIZIU;JF zw>8=zng$EZFJo!LjZ7>eXEC-VrAxaqvW+oLi^k?mWp3$35j)o4rh-skbY+3HMu|e5 z$fP9uQIx4C6$bf9JB4U4sd%ETI>H#}I#*7%4_Sx%nz#-FW;c^HDyS@NrA{*9oX007 z{t*+=GtvP0?IFMH-bwi}Ur}ZNNBOb_L5=H?(f%kdS93EPHfz?A#@U+2T97PB6LgHW zSjYhuoVkxxU`~`Pk$+#%ab>rPF@q-j+J=xbdqHZ5f77 zhFaR?!Ygs1s#%hVC{vc4bv+1%%NFEfNd#m5W6Z-0Gi;2UO$wucP)}o(l5p|2ET<&* zfrfzY$@6&6h6U@=RI;LaC<`@JML&qJ)kSe@vp0ggyj--+6|=2r&Ix{f0)6Gc0gRE) zD>^$%uRuYke2sd0N&iv>;qFlzs4a}f+$#=fo^Yz zrPU7$6sJGbeq3wACUSls2ULgURvJ|-2GpNb{y>q2(stoOzJ5B$1jmdy*2%tMlOg(I zx~;~4HlFM)@tK$N#p)p0%zmyJs=I|v5d}$;LIpxu)tPyp4vT=C;6zDdsn`wYx@fCn z2#$eEk~@k@oD0>Tibl;Y!Qib{oR;0ku;OBb#)e} zu#NEN9~MCd`L_NM)^Ju>_{$7p8Qe3u#1cop!^Tr7kW0yyW$ymo=@xlf7&f|W19F#P z!!U$1(9U0#LTA$C$J-M9)O$n(!LAM6nm!Pk;h`Jat!L<9N@}xmv4xSb9QQ$|^%rwL zcLX7l>DQn^RhVYjtX;np6p&_Gu0+TQ35&j)ZH|J^lf*%BwuyTsreUI!JeN~C9i`lsWb`hT4 z!vQ(3`G*qZ97vG2$<-5r$%*{vez}fUTOouvR*0^3PDZSrU}F zlyO`f)GYX&g$j)nTCJaHX1(h9NPnIGBAVO)=<#*iq4P1FV0iW0V>r;;3^Km$# zU+EkNd;h?WXpwI*l{(w+_RqjoXbf9Oz|+s7vyC?AL>MbWpK1G^rYL(p38y#`C-aXc z7hPXl!8*WZ^&xhD_*LD=67!`b4R;z|%_Jb103^e+7PR%7gHc$FVHj&ikTAZiO$u)< zd%4^!I=OzW>iuav=!l@}OA@o|YEX1ne&asnXO>^$$6V|>N?UD5#0xX(FSuy1IC*RS zz}D=PwvG;ib|XwLpo?oT9YF<$GbTK(_NX6l0~(@O4onr2g#}y#mIp5u-1lsESuR%n zANLDR4_2d^jyiRBF1wrVwE2Jg4PU=Ofk<9wMB+WwTE|`9?b#Pr8h#);y9nmqHq;QM zh*V0g65o9hxoXg?bnA-faLkfXD8kE3)AyA!&99!RA~H8Mg@B}XbA*6`GB-DO!jlkq zA`ur8BPS<^b^9mJk#Bh_vfzp7)X@4?Otq+F{PJVzrq(pcQ#Qu*YIT$+i<&o#pvl^z4)6H(f=9iGiV|{S}j;sf|^9n`vnpiP=`TghpxE)RBHL9YN>S}9`GRB08O$Z<4i$#abum%hdORA{Mc@g9p zaK?GBA_^gb;nB6XzHP%U_<9f&(~F77i(=}#{ai&<)Uqx6Q?9=C%mpx$5k*rSdYD#< zHmXO&%!5p#AVo`g{ndX`DZ5X+zg3mD^p|(4zLH%anSuy4a_?H)Us8v-{XD?s zc$Sp6KQSx^ep-pMiB?cz|$?{k~l-LIO(VEET4wbYod-1MJ^;dI2K`PCKwDR#UNw7s z>H>zOKS?tP$qR7#oN><0E+&z@L7qEnMrKA(To*Cqlgs@GTSsN%G%Jhss4^iNYa z4;R8DMQ1!sy}!4x10Ps_-t$d06!N9gDj_4Kg$lapP1;?9;> zhv879v(TipU(*0>^;nNq5 zmrXXfM3a-=-r-XcK>^sv#Oa)BItEys?bEZ;A*pjhJNTh}S&8aj?WSM#br z7b`K5TL~AArl=T&?0#F*A*2L-#cQA}o0hRuzOZ848k6BVj|}o>82S@b%EkSjwL3cp z^jy8-S!Vs=%It$VSaX1wvo!2m#`ipY?<}t`;D(iYngGL-$7c<-M*nA)4%GS+7LCd4 zi1pIitjPAIM)w2}wBtE77q}|3NRqq|kYSMiODoXd-(LS@U-D zZbeO(HfvSu=1#suTujE5$7&KF=WZv*qpz$rDb-z~BV@|(pDoG#n)&f+?5Y>@`MJ!? zqa%k3Snq0>lOslGD2M)OTb79T%S<;IAfN&jOE_F>vEh?MoYbMG(S0K*Ic>2WUFo?U zvL}y(jYxj=rCpUks|LEcIPCJf1NpO^(2#-BOUt3nn~&F{q&kU(GXLxj4uJxzldiP_*L5paNYaE~x0zr9^b0V|SPhlido ziN_liV;_fSCC>26Dnr2it^M;9Dz3L!w=)f{x0atr&+Db{iGyYIcLQzkD+Q(3+6o4E zH(jgM=3XRF>E}T<&7^89Xd2o%4L{h?KB?=$7hoh7`jYR}THb=q%y?RyU>!k#T%cU; z(=ZmMs(;xLze?J%=Bx7VIV=tlLLKDtk#oKUP6fuMIv^DU&qYvzxbnVWBH#_+;60#L zsJ_m00JUf%EX>?zU-r73f|51nXtq&n{4I3zKIk&^yCw`ZF>q5Pl8_BrPT>-v8dOiZa#*a?(ax4(9uCq zO1Q}ERZ6r5_Wd=;bRm`!qL6z&9n8)r7+Q!W^~wlfNr9bM?%Iyhz(#I6f>{w(P_!-u ztz#O5VWQoZjIW<^Hb+qr(5;QeL=DO&;ZgpqefWCub+l&3F-aH^jBKBXz9LTtEZ_pC zurcj>HltcXW-=g`AVGJ0xm_3Ij@sRYhhL__YFmqH^6ajZ?e^ALz^xhnSlyU!n^ce0 zq)lhnX?H8|*t|J+GXex@V8}}2@p@Z(5~75NZ}swZ$BX^NEX$54;X8jf_4gKd{Onx7 z(ap^00D;@g-tkUb^lz2}w#8f6{5rHE8;+5wh6>L@2d8^~D{bnb1rhTkEgK!t^wdwD#c5)G3t!mq+e1?+&VJm-xrtpS0;Hn2%(;H zJ8}3wvtjH%zUn?*oC~9<)8B>N{%T^Jao>@lKmF`|4U^&|!fMUS(iqs)^3@a5atj0k zIx1!KyaN|3zB3=&-A+JKUmza)i4m~QAn`vM&K1i6I%j=-ec%$@)YUNqj*gB1CH3B( zslUHJh{yfH#oc|Y-L)bzQp(Ee7%&;w+1Y^seh4TC2#}LdpJy|#f z{2TwA1J%}0D5Ao_S4bCQNUtLRAJ7f<8q+51hXXpadC829V4vX75O9wOP~9LE70~N1VF33HBb^obzU@=SQIRaGeGOMAv8S2~p*~H5Nj2Hov z`#z6XS2ZJsFA?7aLiOkzY~!P}_l7>q6}|?&|7PeCU!s@&s!C{Y<;j(tWcQ@>MRcwk z44^jHRB|Z%boRoLYArAp)X8hA^6|1DG8pL10TsJP@f7Gv_b&Y*^u{G#eLcIW9ywhb7;hSNf0BLL=d>i2cHLm0cfohPT59U|X)D?{z zEV=VgIBe80PztB2)*mb;Ve`@ zMAH~!;R`HYU1iG8o$q|Za)ssPyIndTpPTc|V`5@}fT4gQfV<*#u&_8hD8BRnm16t`JfqGB<7pWj4(4AdxVgO^ueJdj z8?Z_>`DK!_Moa9&u|a(Iz*@RoToobtGYj@t;d)xrrad^0fx7yAPp^;uh@;!f&k~3STv>;Bemc(+hQ@>lX-hbp0_Xf=Q5a^{;L~f z+Rx#kgEp`(ddGap5!PITd|LSD7wWsPfzwfnET-9vM*a0>W20kZfXDCX>`Zp{<|8Z;-m7>hf-K?u;vTI~zM3*7 z9Gxsc1j#FrM%XM?0`8hLCKK_gY(5iXW6Nq;FCJmX||n-4i7olo)tQ*$sMOF z%&DyD%<5vBIWRVo0I7Hj{RV-=P}s;Ua{zQ;zg#Pn1|#8KiXsa5RqfWA0Z)(n!^MV5 zHUd2S*!cKAho`o7dfW!-5iD2u`3z@5(1m>}E)-7_n~bQjQVRW)dtZdGW?FypJSQ1I_(VumbcqKY6+hj=;-JG&!_5?BD$E8s;zCMeJ9CL z2A{?^3P=!Yece0EBCB>F^DaL>7Yryb>#q-ltSU)k^w^Ko;J5=A%b7T3VO)tcFqnY7 zCJyQ$s2+MpM@Qwd`Egmf1$?`i&S{D4L%@#*z#KCytQ4gJ@$j`_01*MN(Vdsz#9_JNw{1c)Q=LTp%sv`5p>msY}`7sP+*LA3bmf6mX2cdvKD!HDjeztSW^rYxu^fhC8+Mn2i!O>cNhu5;f! z+)#74(~*fS5m-YgeN9qVQv+&#Qc6mK;aRg>fU}B*uqE8viA;*w*FGCk#~yTb3PwB5 z$FQ+>J(I1`-rQ~0BEO7SW(AT3f8=Z{mznTsoLp`fRk<*8vQlj3!^1-W`)QG(0!H8U zfdMms5CY7*# zyX1LveK9x+(BYq2H+;uu;KWML7peBpx2yO#z3{`Ujc&At)yATDM>-jLQl8sN|Vhr0o9=-%F*`=%!)1A_ywOhS!JiCCU1VkYmbz!%zZ@DnIj3|n0D zfue9GM;^Z4NbX}wSgdk@ctMJKK9*DTUN_0p)s}99w*LN1+Ujv25DwkH?*;e(SYH3z z83`-~{q=6&4tgJwMzmLJW$OG4nGF{se6^BQZ1LB1V|Le38ZBFhYO_OG2DQff-p`BBgpijedR5~fNs7BGa!8p}Zcs-HBj*X+MNBSlYR4rzcu zEGsVuB2(S@l3BHi<1Q#QDe3OGB*)9!`(FzIf`fzO<>e(IA?beHiLTaj)qD(^CO9(G zPhdspEftJ`W6k7%z$f}4iHCjn5S;PFiu=tRCIT?ax?scRIi=N+|Jh4 zmj7ul;q2@zo6mc*)luYu02L-g9YIW~-+Zr_6f-(Q%}Fr26y-NCoI`VSEY#Fiqlwi0 z*l1`8K$9~#F!1kWT@RacUEv|kf<*`&^xI>*%Y@L$2%fNmQ8+>|QBhui@s^JE#N7R- zbP-@Z?{M0Wn#3b*q`uefs}m(NHSxEtnx%mVQpyuYhKGX#thcI{JNB@be{ zZbfBQ_iYH{Owu)}P;Yg>SJfDMI4kwq#aOxQxr&cMIG1}d2C(`2`}@Jcfk+sFl)SvU zzsQ&(X+#!}d$-%Uc2~;I?k+g^2!zL4`0kZW<89K`-~JlT5-V}Tg|`_3H|@VN{=-w5 zhBcz#e^7V!!XI!~v)n}W^*1{`Zva<*PDTdLw?F^B&*1bq)*8YQp!sc26O~2O%7kHv9LkuQ`s%H@XH25--f%+~0?xSv_={TF<&*hS8!$CFR z^VBA4qP3Advzd>4pR4XtBcrh^T^WeR0@{!v04$rC-CcBCQjn8lU>rAxS5urF#BywM z0s{kl`9aUe+hs%qjE2S%;6nursFgY`lM@r?0JvT(bA~Xa-=V?iS6FB$bvFkP+_zU( zmg>G1h`{)f{5S%7Q(O*v-4^=|U|WMKGf|QZm_qNvEO%K+l43VONsHHevaY%;^6RK= zwU0`tjL_o^Li7Q%^};M&Kvo>)Rzg?%@Qz*NTS8KkXAW4$fd}stA?G*4m3lM4tD05) z%W)psJR>cw3-FnLJota4WM%mtPU1^QNC2ICWXOLMbJkH&z1Cz}>uS-T&To-+TYMv)1{C z0nRzkdCs%<^ZoAq`Tg8U(B{nGC|Ta_9Q%>XyPbv);`A7y`U8>rj)p5GWu03!Vrj-? zfu03z3@xy|5HKv~0{X&KLvVe-pRbkHOJoVN)y7q>DJdyrq@;d+ehc3?!pc0vD_7HE z4;B^-&2@;g9bfMReEi(apDh|(eQynHrE^ZOmWn})gs%DHjn8b*u|BAI@)AJk)Wlzt z5)hyZjfv?hHLWG5ap*gE+T@X`$urQJltI>2-ZmY{U_DyZwWayIwMv`GGp##bO6c+2 zRQqTHe}GRux4Cv?4zqNe{&yF+#w%SX*DE7qEIB(rpRZ$kmlJnFRCw^<2-IA7Hzxzv z>VZUHZ)f-QvHo};WqLj)$Id?8q1bi0qe_dJ&HFyf8LV@(Tkb83P~WQJ7=L+ z$i++S#y@8}pYF}gpnhYNl4p3*gjDxHn%YSS?*^^n7d|iUS!X*MjmV7xOJt+-c%aX6FUb%(Z)YUL>QJ7GPY(a1dS-{Bw`oGJtM^TjX~^sS zLQfmL{Dr01^Ea3L4x9$Bb0NJR-|h}YdTG79fq$Pna=sW<#6mZ`u=udJil}LdYH<&z ztt!Ecl^ZKlC8DPI;ZDq|j~=IYRnfoqIP0>FupxBpXlrW^xFtY~cLuu;C_L~J1UC6G z03`Ij{P8;?_)kcw_AwQWiF+sbClQ-n2*cLKm#MXX`aud3ag>2H558j0xxG>P9eB#l)5dv;!7tToF6hjn!zBN`j^!jC>VwCR6|3{ zl=m{sLk|Bm)5~4q@#$F^Wt@fx>!(q$D z#-?t6sTlU#>pMGm0LlPv<``DFn+0xMO7ri#D_;i;B10e5PnvQd@4iZ$eN#N@N1PyW zjyez*9StZ4_Y-gg?4#U&e8OT$O=VO9aQ9g9ch)8lY{`0`##H*9WioGx;Jp_ukQ7ua z$rGt(P?Q^nS?8YwJ%iU703v>PK>>j$v9Z6W%zv?r0)fU>aUAvgiL)W%s=!$t-SUoB zd&}OW^r$mKe!;QxZZ+{wVpy_5Elv9;w1NYPe^lJ4e3e{BPIeooG7j?@^ttDmnGkTi zSI(kZ-p4-sc)8i50BOhIRbJ%HSNpcD!Gm6yX(qpfm^sz@m#s;sJXX%`PiwQVi)?YV z*P(!TPXuO*ng;pp{9&EDkdkHb#CuUtC@e9yfCBh1tStO!v@M(0Z*)jk3DKY}=HpwH zU&Ik=n(Dzvg6PSgUL&28E%N@O5Y>if_=XbM&uNrE(5!tME&mQQ6j;SiH4P8%L@=9G zLtNC=)eSGHBs!sd5H4)Y+%oBwrx1yycWisy$>xLj8+~=Kaah-0m|5L{csSpH;UV|q zAvy#?MyB?d@JsG+|Id9NpUJnDO0e0w=C_)MYI0FMxMwwTh%%^ ztczE`GO*uPH#B6K$`s9nSQ6RU zdlS0#XX(uO#8f%t)ZB2v+c}IMZtuIz~;if;02*^t?0G?r_p< zZ)ag^WbGR$JfF*3CuUaW=msLk7O7%!_%@R2i-n)Qjja6di-^kM^!kfx5eP+Nz>j3J zsI@|Uh^{9?sFp)UJcmg37*cGIs@zE_P#$iZ_+uZWPIDov(_imE?{vS&0N;UjfV4tOL7nrMZXL^trQ> z{$5r7D`U~#jBV9?5mC-9!0qyL5U`k5#Z~5$z{{rd7ASB%Qp_< zkMeNEyo0xMZ@Yt`!rWN0eg{|$YReO>ofd5hBVBKy||l{X1%a1_`;H- zJC7FOg{i@PO7ja!>X_@atEVpwBAX-!D#IX?fpGDAZ8=JVET1^X%gBqA4# zj<@Enyfc;0C77~YCelrL;pyV0zsp?7@7(|4LUQwfJj2_!x#Rq)KqQsQ(eciz98an6)aQJgOkm1Y`kaxP`&(5Q}o%i@s-%H-rh@mDUx9d3)qNmBrlN(QydX)Be`Hg)K z&HaY0?q>U*`*!mzXQ>`ihTQm|kSHKgfamkgCS)tq;gjbiYa}l7+7gXK%F{5*(Q4>7 zO1jo{pJz7r{5FB~BeJC7)=v!Y3?iy6QDkpLAn z*HR)qL%P=HT(IXLAG&<-Bb72%kXXp%*_WAWj~-_&p5X@aXTl^+$)OZh>gwv-$q+Qi z1AGzdF=RoVLE8)cpo{0de2G(otyz{Y1)|Zwg2V$^g9d_6tdZr@$2YA04hneOvnV~s;~B2jUla~)HS1Ki2A zlC14D(dAr*)CL;u+f3>rxIHWTXtV*S2f8{oj=L{@*NnRKl z8e(B#@%Huxg#oOcfe|Qo@&ZX}(#O%UujmCob6be@p!)`wHF z?{EaC>;t(~k2I2}Q6jarE{gBh%6xWIaqVj{CN)*$2QT_&H;%Ah-&( z$2<&4Bd~5k8dF?SawcJae;x`W6-(Ae@0%*VlIoh6gmMAVMX-NL+CZ|7|_HS37S8xPw>8 z3=f?#k#7#)jJ@PgykQYn21cc`v-9Okmm(iMTB}`a_&XUWm{m)CnJ3|&Xj|`6hxC`+ zWP;C_c-mjEB`f{Y>Y7ydJ*-lnotOB*SIaF3=Mrvo+h(8ijBX9zf6gtXt!KOZ)||a> zcZn6jON#!Vk4OVCQk9+Asl3ALPIqhym4@e*Olgs7r0CL_dU2_sPBfb0pv86TFiZp) z@Jx92hNu?Zi*%=$%w6>nr%(hZ(u12P=}Lyt*EX(AK_cUDrmMvH-PO^bPjR&gOG!H# z;(7cF1N2Eq86M(_apvre#zL&;yKX5gSa;GOPCcaj4~OKjpXj2TAm?nr2od%|L!4Nz ziF=2+(aWt0Tzlk{nnM0084(ATv&DbDIQJ4QX3p)HGrhDG!4WB+X>XFmY&xi>+!R9D z;&1np!Texqv&ChzIrzzkxw)+B@dwqHEzD*w%v`gs>R4_};yg_B3%A*~t{LV$-25gm z^uYGHr0aHbF!9!DRovE1li1hY>o?Cuw}*uMa$b|3dvQQI&qs`sW$aEzO;WbF`~I~u zKbX97xP+hyy^s4*%C5u2-O-`YQD?~D)>nH@UY`^_H%wY1rm%)akXZb$?)~47P4w+y zrER}!jEsx{`W&uR-zjZ1xBRXJq_SJpxeBQXSx)kkvt%CGCd-Rvd|`??YCZdsChgok zyLTLPKWK;eVb`dvykLsMC49gPh{k!F(73n8kugMcaXj_*v4L?~Tk~&^G zrh7ySX>)sZnb7EVU$e!LAQ4xIiBX8t|KCThafFc7(nX zJ9#JG)zL+N<%h?Z!AoZ`L@ANZy!>7xk$K>n5Ih_AFO)6v>KfaXYi6&_FCt1=;9I_) z#4YBRZns=-6{NHXk_sVMD)YS1u3bqB)2*P?Z zJ-96I#$F#UWAh!+R>Eo90?NuZ78dM6Lj6|#Ar)tfj2{p-KJV`CLOESMH40Wu{`Lt^ zuw}ZtyDe6QC^aWh`L$q;mX!(B7snF_gqyN^Tzq`$Yl^Y9K#G55K0` zhGJxV2c>dQ1gf*9I4!Z?OH0(mPT3LzR6fg(VPpaNmXeU_a)^s;#sGIRzC#%&)G4Km z=)0(jLu4WUbufeB5rr>55!t%>r@;4LtDb#=#bW;~kHp2rEt@{MeN|f#0;FK#)2BP2 zX$ABqe{O37HFU`|0T1i$z}K&40gHLC>$?U?Js8Iz2EJv|+Y>u~Kr39Rv$ZChP+t&jQ2Hp_(-vfWu+UXF>1;sc&qd%NFUf~xj& z={#SIw9Es7AMhTlo+l;UpJ}0jDCnlH(j-Y`NtzS)-?0r?gK0xfP#Drzi+&EOVUOKA z|L+iOl9G~|o16Ea+K|R3A(>Wn=D~~^8Xk^TgW#*HJG8w6b#B$wk_7{fRp0*(-Sh~n&xcP)}dKmyiSxsPWaSg@+WZ?HwIyHHV;{K8cRre9{5dIZu2X$umY(-0sghbHnqj ztUk39;NJN!6&9S}B;Qnyxqw8spUAC|U$y=BZ&gLb-Me>_pFVv69vw*5_=cjox*(AD zKo<7Dx=dkb8KGf9p)~+=9n&(q0cA3c>z}Br#yvG)Yyd*p^IS&X#N^uY4kU6Sf&fV! zun`6e$M_1+4rmRz3!kHl>_AKJko|QogjbG!zOo zxdMXMd!rIacHX%j17%mhsKUX@N>SP8_b3M%sH5cuSD0dc!h>W&t$h~`RY2m_Ns5O) zI1c3V8^6z#4GsvHh1CyK&Y0+ENNz>7oE;q6dwb$x6C|;RFr?+?{_M8xiNU z)|uVU@Cc{I$Ln0i%I#kS`+$NB@0eTNh6*UfIyy0HLH;K8&Yk5TQlLyD)G^x1rHU3|{{j*d-j?U5gheUR+uvI23m&?(XjHPH}fD?i6<@F2&v5-RC^-w`Q&H$IN7f z6_Rksea?O9zV=SIysS71A^{=@1VWMcA)*KZLDT?0X7G@}D}MyP^8*hEc0YbPfG4QpxNFG96bj9r@`+88{1a$K^ru1{-T zAI84R3E~@)p~FK%g65`CfyaP90?_dSWazu-f|S71?;_|3(2#PzJwm}y~9vK;#n3x#xSdue! zF8Ekv5p+@|^<)`YS)E#g;Ks(gI^)s($sD=a+v~ki@ff1N_F6;FF4wz%IV|UE7|I8x-OZ_iF4sLTXc>4Xt2LWZL7gw>JXxV!?ChZKR_Bwbt&Fkg zkPuiIo_}+5Z_g*ya{O-%>I|@c6yh=XeJH(#@Si?|i!*uM6*(!D)zO9M)v6k5YQ8xi zE5mUYqdh%6$$_7Cxi-8C4xqsPxzzuymVl7(dkj4zqbg^FNdDN^Sfk~_2xmclezw=O z#2&GMp<#~OHiGeJ^M+4GT%4Y*?MAchhV@Dl?P*^KN(P_jJ@EIiCzE+*yEX>gqI_tkQCC^78Uf{^!R3{%Ck& z3*ny&i_t%nI9(tPB~Y!?F<+&vDKDQ}0|yQ5=IMFj{wv4#-FQc9{s zHmlWsM{J-CI4|H+*4kV*YV?K8%nqOLPWYb>DV8+Vs&%4cW4j#oM%vwPl9_aUPUb7~ zghSuo9yUNV`h6iVNVuTx4d0JS33S?sx`zL5iF~YB@MmJ;{PkGeurWLH6+aCP4Jlp- zfR;0|)2n<_7GL zepJG*U!ct)Qs2ammBq!wy}hK&OokO{Nl8Rh)T*+wcYF*sP%&CSi*n-8R{rbf!`WVY2COdela``;~I zKlQug{%WUpTTPAp9wx(RGX3-x{brCjA$eFVM^jT17M1kl?W`Od8yk~$E4%SXqUA!> zcshsFWM4r+K@t~mT_85+D>duJb92ceEZzfXb%2e>0;yK(SQqt|S9chb2Z8eeY)U4TS^wdD4LHii#^xA~ zlatfpd!^N*iMcuLigLTWAYBq<_j03UC<_xxBi900qTaB^Z7B_H+ur_o|U16GCs$S#ZtiM#Z!o%FV%}T9p=>> z?C;xbbn=mt_s-4XfGR30XJ=-x(_8F!28)ZS_HIr$x<1Cz*yDqn)KsMf zwY0T8?@ylw@N{WN;!ci_siaeDY}UAg(S@bHQlU#j{pY-1_e-WFaydT7WhH>GCOkg6 z@$j^*uC8`?K9C39pDt0Xm>y2$oh(%6e6!y^oGwsOQu=s4VH&`Uh+6OPL<2qyuob|p zx<1}L6%?jphD=NSkIGXT5iqoy{UEtaVxW?*0dZLYa) z5Px?t+UWF-zC1#JMsd1j<;v?TEh}?Bscgo?#LUdhJUu;ab-j3Bb)4MW+oN?Ut*+Ju ze7U5gq^M}m4+5&LzP>~{EuYBc1~7TA*Q+6Wd;9zQ`#?A}u-9YF_F`dSp~++R~DHe;CHWM3z!}QbNLPr6yOc`hW4_jMP794Sg9eNFsq2 zh|wSrYv>Okpd*HnVFJ;dh&&7$(w{68p4?x6Z1{7)e{VVbpWb3g`Pac_Isy2ka|2$t zedfd%TY^7}>crWZz_2w&&?+uJf7jHMJeKai($q+@`MJ3=yuf30E^N_49^9X2W^7Ns zY~?GxH@tnR0}u0FHb{f1JKwN2lKVo@07C#91pFXL`#&X;|7(s(73IbAzfA2uIM~V; zGBS>Cg{9DJi*X6fMFdh&4<$SMk7nzw*(zG(F)X&jY;W!?`*3DbQlsq# zn2CuA#GKGC2ieoV+3KP1dFPGgDKr&h52HYrl$@A|jL+OHU3Y~LgbJ~=jJT4ODRYV- z$TR3|G%-2ZTvwOQ>+T>gKLt1}A`()x$9Kpc={)n+Nf3miQ2vqkXS1FbsOIf$139@# z(`yX5$A=-be>rJO1^m;=oBf@rCpTcXL={Z7qx72xdLgM~0zdziR}A{fpnyk; z9=;aMCMw+MNhKoeF0*Q;?=hbcL1n`@^ zW^TlA5d%~kzcidMj`9@)FpPnwqvq;r&v?fg-%%W7Ew<8d;KH9p?oh>3}#JwyQ`Hsct?>F)`I>$+dI1TN6c-QD=u*lN3by#kXsV8GTr zhlZy(^r{u=wY`gKpV8rinhbFhW&uOjL;Zi2E&o4ji}_h7fI%W`cf|*$C+6Z*Tn8&R zpX-qv{S6udd?pChkM9!C^^tVR64eh8!L)c>=pK~-ts8&gADO16z_17-CW#c_M$#xb zS$XopfA&nMUKUWN$4a2@O@7`F3o;t#SVbOBBZb65h*R&hNw^UKuE)&rdS?kaXqlqF z%%GcHqla*)1_!@Uy{&k^lWqYLh>>-g`LUbpP9*7e`aegv zbjmKSFNRrZ!jo53DyRzoxl-lK@yUvane)!OR{Z<&q0(e`ARDgh1NFTP|B!Xd-ha#p zOB%%ihY>!^N|`WrbH<>D&t4)PjJJ(SJT?1+Y?$o7MLAt`9*dbg;@`nw8R^q{A$Oa+|uGq zV1jYAd-jkA7pIWy#P-61eJI-IwPLp)FYnRkzr)LeX4#nBd_dtE%Q`$5@`>wDK?j)= z!EipJKN+a1V$;zk;mgqw3abz$x`rS9$RZ!lV-))m74b#_30E4g89&v3CX}dG^y^`s zj<97E&(5&GY<)ZCI!sS;n1an8sMKX-K;5RR^1h*RT`^Kp(&y-TP-GM$y*o0(P@b2z z=l|@NaB)aJx8N}{iJm`)yr6S40gEw#13r7UdgqyYWGx{gVyjAPSE>4P>65ZL^z{Ye z8>|KLF6X19dg~n=V2}dY9K)t2@E7X38(=lcR4$+nrDo>*fGl4vGX&z>^#W*k8eyaQ zm-Y3}PjN~9=QzEY!OOD#EIILm2M6S}Fo>u{uaN9#!=|Q}KR+RI{Dbs;;?0`U{E*8V z;5y&_4!&c}$wB}*&A^-dU=8a(vojI$6o9^}1>x=2hoW8{EkO7klMGSDa!$etXgR6n zg*c1~b67PMYVTaE=C{Hk<>YtjJg>-knY4P{fTqIV(!!Nsd=c!X`9KvZWb2*bqf&R$ zpZ-C%eK4IL3Jy@Y9)dbu)!1!opFZUIsNzJE#7V(S;@3xTtQ^oF@Lhya-%86Eks3k^ zyZ>_S@n!(8jBPF4yM?Oo()Y=1Yz9v#5E-VWyl@^QdUW*jV=;`DZb?N5>wmju7XP2e zd);ou6d#(Ox*Z2u4*kymqs8fZU)UNiCx^3|hKPjMfb^Tv!FhIwTEGbQ76W|s4?S!6~i)HEXT>A|aO9PMOq zvLCs5R$^c*BR@&;R+-Jjpaw@s`6WAs9p^#_$CsppJfP!XPHZT9LyEfGr%#BX$rcCn z{bxbWI1YEYSTCQcO>1>QZLWAZ9->WXY+lHGls}svcw_151?U9NvjdjJpB@oOO0)=m zP1XLlygbjlt%)23mVCzEk4(hNHAu!gI^I%IlI&7V*BTblbAq}ijE@%_mkUO)6v?{~ z8otob?dC*weYV(M z?|BCkW9a(+d8IHw2=LNMWukcXoQP-;kl<;{KZ9y`K0xWf`6?_WM1UM%`Q{INt=HuhPcBydg`>|0B#@G8HdT<K!db-W2Ra_SjUAWQ7|Y*+l=%UDsk_s9MGNhpefNX>SneWP$sj=v4|-HG zY`ahx(r_3eY#~W?p04)Pu_H~TQ+6i1-?Cy`d&359H}yT7Sz+a|Jmw37;x%V>I>$=N@2o;-I%2ZBFV5aXwYr6uzL%Z_o#%2|!Ov z_dL)CpY0V5cCr%_R_|%wZ|d~PhK`-^m@JZ|;Gya%`=3vrY^B#}?UfCi0Xat4o5Jav zQK@Z}`U<@1(lJZXoT`Yy)iKwSciU5W%D)XDBz9LkJ?BIr9{vW?N{BjNl%8tu9-4Je z5WtRFynF^slsk{hm!41^_vuL~uh+OA-X!J^Jo#YiLR-c%#RV+LuaY?8FoaFzBq`s9 zrTB7c-9H-)w=k!lmjn?=BoO{KH7@N%uetOCg>bG_&Y#8RWMg<9)%hgGwv_7TGe3W3 zb-IvvbXw`2#_w#m7aG+`o?T6&?MQ?As54uNeey6pk_WZ>kNIgG5J)eotTw@|40@xp zj9GD~#4n}!FR#cs$#Fnfz5%kM0A=w3gSEH$KeHZ8I_W;g@(!pm?V!l>tr>%w#)4NU zKMV-am^O4YN=qH)_wOfI{$_{G!90#a7%WvFsP3dlCoMUX=TlWVis64#{kqz>G|3FY zCfDV^e*I##Qa}07hh9?fu)1zkOZ@t>^TE|Cs+l&~+R9Csuv>Z*bl^VgJ22Pd?7W)y zX7!Uc8okanH$f~_J<)$>(ONU{#5IqkV?b^U6rs3Ya`f?D=~Ft8?%Ff5>{j*Z)_RLE zQ@`1It}f8*ocy=u!@PR{%l@|*7VG#hpf#yy;PHC2Q_}gjm^unyyH=JsUt0PZ6xIGJ zbT-x3U9-^$T^A5K@Ky`|r@&b;bKh84ZV|Z05TkBI2H- zP5BS%9FO3eJKF>Y4))9D`nhp0pQ`&Koz@S%9tN>b%JT4Q^?d2-7|UX&-bU-1J{mt! zAU02Wvn(AsX*uDz2Y*-RL^+;p^sS4`CBG-##S5Vr^QK(A-@$nl1z=#q-?tWcK3LaA zqq8|DUpsxq`7|z_RR&Ik0ttR+>;H`M!P=VK1;qH@+~;IW2f`1>qhnr@s`jB%wNCRG z+moU%bI~6i_2$-7vvmvD`92XIhAQ_Z{CI!qe||k=y?=|_`w@$4xxB^v;k*^&jbo~w z?TEQld7D$lSQi{!^fIDiSqItO^s8^WNzmFUch>(x?MjVl`{g0N9tmdyYiaq&mjQ=( zl$S-=-5ZyWB?0lGxQ?){5oGZ^X>(AGTKx!1+e&@T}E~j>!irf75T$3Vg!|>GDu$y(`&2>vE0Q=P#%- z)5!I_&)dPYlVBkW(q40y+%ZI{a}~HB&nrHjoCeln{YEg=Csqbej)NgO^e}UvPREch z>O`p^%vMkjX60e-RUk{$poQ=pq*~_uLCRso;@VsmHISL?eV>@6tSbCTPRBR8?`vH# zWJQppo^T~;b-1I}LvAnuB*+gaOUUB!UC70PS|7=6NdxDF5BuLCO$nG6Yoy8rpJ2k& zx+ETm!-RYP%PuqQ)2pH)%Ooh=&rzg;XATMyXyv5Rie+Sr8? zXFi_B(8_;q{fNO*>5UF#ns2~o{l?rR_ad#lVV%4HFYJBtZ!;q;;A_lNrsi`_P*>Vt zV(xC@@52Xs_)gA1%w~6;7FGlLLOi~Dq9^$3CJtT32h@~0xpgB+;blk%Cj%6rKDKbl{kwR_6isFyp&oT6;iGUDb!AUo7}n9mwztv zLVTF_kiy7(;W3ymzj*R1$K&lo`uV{#YgtgYw^QS*sens*Fgh9&V|Ua6HYzJ0_EV&f z1+~;FxJ@+W30ChEVIJ9LJe{cFz|wujkZ}|8g)6mL`#SF%U}@=B9N$>A=n%D(Yzoqn?ll6x=S! zB>cKrsGzyiz=~EcS`!Grq1P<2Eu9_H@>#|OBU()c+N+OVofiJx%_W_U^`kCt-B
E$L)-RjovZ>Y^S|pnJI=E{}P6aJdaZSv|z?rk0xPH zJYJR+wk-=OBFXAuLAhJ~qvU0eQCC~k>da;H!4SZ5bQ`cZ&@1zT`Z6;4s_kRZz5+sE z>QG2gn&fb)Kl{y~gZtwjV>Yrwgi`G;`>GP)X%Z>PQXyIBd9scN_M)HO)-^kW-#KC=kB!2JO>f2Vh(j-7dfW!WiVzmWgwk8}YonP7omL1)gQ;4&c_hGBG?6Vz}Zb}AIWXd zQb+uUf_&W7B{N<-#p?VHD4kb@fUu*ErGv&uNwzzX+ZjRJ-Iabg4dlH$fgo$s>hjOj zFl74Oc6^bEc>2yqhkO2yg^o2H5fvtCsiSRiCv;kP@~ALg`noj6B1d3Kq6AL_^q8{Y zL@+(d#$~pg7f`9HDhyK3dAWIB&EYuXA8C{ei)Kpvv>B*J>CzZ-c*Q>&<3ujFTdj@D zy#A+10i7f0_vUXzt>Wd+Qms2&CWm&rJE5nib7*-6+n*$qBH3|BNxhoo=h7;WyYbPt z88eNWtrZrR62wIliV?&p5CeGIMJB4A|2yaVw8>Y4b&gp*KyHY0}gSOHlWh`EpLXC&FWB?H%?6<|d0 zsOJpk_7v2-;|<@uwWG9u$i3jA+33%wBT6`BLj)8*_ozF*pawxFtoUIa>V@7o7V&#Q zfo`X^#x7Zog{fOjNx3`m80jI>#TadVk#a$nBIcjw1E3XFJ;xGK~2zW=o zdWhe}YjB|e#D+r7c6T2F`%8!s5KnAJ`V`L zOwKzK)BO!Wrz?D~VOn zULt5@cs+BV zplLpb4D2t41@ovak*!?^F3u9V$36EDPZm&wfu`nukE&rXm9Gr_x$`YJ>E*icDmm&F zl&u~5U1i~+CI>xR{*`9hHU8u05&w;la|nm^(nf7tN-#aBy&QKgRndJbqc`j0I%8do zD+=Ns30qVIVv;bkp&Yv=pu)P}wqggBxO=Y%Qq&AoD*q;_qKKUpSIUbLT2A-nq6)(Q zi&<{#(2=yxJVK6pU{@N9BEq+}Bes{(qEpilWVjFjtQg>!(~`W=LQLTO#YZFmC#KCq zfpg-E6GLnwnT5X0RDPOHAOG-+v0K;!EiIVXORQ<&TW+9~t{_gWOeH z0>J`0>)lKeN{# zuPY7F%EP?Av^?t*grS?64bB@iQrzbOKP_$h;ByXcE!Bwjc8JeZ?(A8Mx+I~8Cuq?q zWRzj@H;Z$@Y;xQQWW{_fH=;fF0mYbdwWD4awcf-9&ZGq*Pz#i$A)w0*o{WE1#|0?F z6@T8&^h(_BF0I~r0+RGeL`xT;TPvcZmP%SiopKd&!r<``Z&a z=0HFc0KnCdC#Wv@XQvxLz{iNq_d>@0p zI2jx3Yi}EyrvLC1+5I7^$KLznkeaAiO+5c%ctcNzG!dN7ypT2u8u$*Ss%kYP^isy= zds1z;6OGj+`hpys7e3U_bGq&hq4m0TEOvx9K+*gUQ`G6WyK{=w@0kZbXMV0{ypS)NVsdZGFOzTL z2C|bXMt|M}!X$i>yjPH5jBKTp@y^5vqkA~fEnR+3iFU&KD=`QJOUIr`l3p8A5%sR8JzcTe+Uo1qP7ze8V1 zH`2`Ay*VT-&K{r(!X^2l{HlM{KbT{hlSVlCEo|7jDOzU4svAgBS{)t+#(lf3N< zyn3cj`tHzeWw|^9Eeoca5_Xy-xjtIh127`^$BeYsap|jTl{#m9u$tQv0mz6#92Uf+ zJ0P7Q12kn-y1~U%KuSa-3ealUU(i%%o;?6c`t5x3n%ZKoS52ef8(!CY%ABML(_*Ey z*4Z~$1;JSDxfawy;KC(@3?IYlh`ZXscpMiK5SU`(xyQcTXIo&N*roIJsUCl4`J1!G}>C^U-d((Hn3_y%C(()6(ETX#dy9i9;$5!(6I zfyif&tu>=TDUc=~Ocx7GNFU1hJ7;}h6wRfTyo~Ck1H$G#l{)d3TOVq-ziof`X@T66 z66{O$hf>;J4aLxel{e7sGquY58u24 zym_!)S;%=OOSE^SBI2UI;;hSra@rGh>V}^ZC&5X!R488y-cTaAzA~?wg4pbTTVc7s zTn>mH^RwoQN|m9{{Yp&l2Cz7#lU#*tZlNdFJz4V~+3xVZFI2j5;!h`G-xsjnRg)zJ zwLp5Vud)w^MdlnKQ=Lwzg17az>c>2LHvwlOgS6+u$Qr?BqH?<;p*DH*oj`y7=yF+q zU^!F1v~0GrDR0UD(|KT_jnVCko~((Dl=86yRc=s2veeacvUO=MADcE2> z#^LLit?v+n6tEGV{`<0!iQk4`6G(0anP@p4K^q@i^kUiE<-)^lF*Wcd;NZKCvx;bB zteUn;XKX!t&Zfmloehs+$M#PHo! zYL6T5ArXZLNDuw3eWQVzH$QjU!E%g;E#3m=vcXjk7>aO z#r{0cO21Yh7$2nPKEdldYPSaUGb9I5>sX~&DiXH>usPMcWxoV2u=GPy9WD?N&Q~hs zb?E3q(%8rSl+4w^#ce~=Z?GJ;Z2t`_NEC-9Gu{g{xDz6x=Ii;R!1Dfr0ep6})%T-d zO0%L_c=FJv6kDIp&$f{Uc{?Sg3kPn|Gaty4&(f?v&>;k9bD$x*^F|^=>6rFW7q{pf z+`uQod&tIFW9{$HMh`u>iSQsA6ocY*<<=7KLJz14{RzH1bG9{>e@H2QK^}8GOpNp_ zx2uV!j?}ojJJcFA&>Qsqb92Mv9UYkdqV@ZhUa=VAx*pMM^}>0N-?(Gato#s9f`D0= z!M2J8A9F&^KgG;Uz#|9*y{HdDQQYe+T(AG${xP?OQTH&9uv92X@osjx+CA`mIcHy8 zahe2iB-%G}wlxcLfu?pH(Hc4O54=iV59ZbA2Jv2<3m^8>x})33w#d3+T3^x{9`p5Z ze9)1Vo0KD2Fg0e>niM)-nttr%neU#&da0mIkILnZp=TK*#z$rxmX+A6eCgB;)>=EJ z<oeT#Kj_?Di2+S|kuf=@~Ic-61Z}(!(JA-Yo4Pm^_x{rc$ z@^vRSnt350GVjONm7&j)9hm(GTjf^f^f(0+hML@F8;+gVu*6tvaM{OCFa0|*%AmWw4(!B5^z?@};MN$Q~ z<}oYOw0U_3Ta)Kh>t{n0lD_hV*ILIEzErJzpg2UV=y({(E&T-oQSyt-T;k0EmCGxy z*Br2ZY}|JjPS@A43J)@op_a*J2nNNRn7Jn7V~ZcN$yZG3k&k!Wr3w+9%MJsT<%D+Dji%Vu)ARID8ECV_i|t}ig0hU_lV@)wRV?P-7S zMVr7xJy#V9#P-VSsp^<9GE4u&7B4~2lafrXskysbaip6LU`Sn^FipQ@)tQ%Uhd$c53L{c6f|hp<`!U;> zEMasAy`+x{v}+#)mWg{zx6A1u9OHOBQlDBXVX5U0g0A2a5_l(iH51Lh@phIUV;=t7 ze>JA~L$r8SfBNhAt(NVKT~33hO7+pl9LN+ci`>7Xfu+pXi9Vso-9rEF2%$(;P0T4y zW*rB>@TBdP{GT^hh33Dw)aVJ9_?rX_3+$K;3A=HOTMF?jDwJ;yqL8a9ro>SYic4nU zx0g3dq`oBa<8Y{v{v@qa9<@qG6sKcC>1aR(v6pQrtsCMxe58|vf47i%_se2}8JoXRM}EvBKxFGJdMLK3zIQxD1s(i$cD)Dr z@waw$u$g!#TE}IB|Jf02D+T2RT+aVkr(}VyJSwYafWPhpdWJIb=xB}B}7Q-D@JunE3jut4G;d(c`=hrY)OPfE} zR0W<8WvIwPOHV}^bQL@S-OCJMp5eoYSxWLd z9A!a;b6b3z5!?L;sn$;M_HLbc4-lo7Yh<0E%S z>7nKavH-}=DmMX);gvEG*F-K$#MWD)S~;b(rha(J{nmfE-JdW zyL-ti$LDoEIx<2>6BoNiKp4Fk#P(0)n;X|s(Zj6vpxhOHzE-wnu9B5xtlY-r8iSOQ zJ?@g4q$Y3K7j7p{Y9omx<;N@Q3d@h2d|l17yE1as+GgQq-TZ}b;mgz^sP1mz8|p(@ z-+*bX{|}L1u_=TOm1KJiNLOt^hj2l=>zaPUzCm37m0uUn$^IPdZenWtC zOk2qUg#q@BucNib_&e*6XOLt?gvpDL_;_J=^=JXahKoXU!W%)hS;! zRdsDEV%Fd{KfDe)m8SB`r}aWxHiR}Baz#+?P!J15$OYl=YNKA+Ub6_Q&P#s1F&%j2 zIW*PJaV^4@aloe-A~s$6@SPCu4WBvAae@Cnd24sq!#+i^4B{*GCWOGl(lnBqo1rg@ z!}-fHv#2)QSlsN`S1@rgYAEV5T`JSHeXVSXK%`+3f4iYU>-sZ#@MVVz3KT^oo|4jQ ztuj9N$y}zf5i_!h)3PYvFg~4KiXxvf#0vqX@VlsY2HPuTc6FXLa%O}^u z`;RX~v?}V|t}0m^Gtbs6xQb;B+MPHi!S*oIfB%*>sp>QpHZ>&|n`^G@J5S;1dR+l* z)x-{235nV!P6MBF-@cr?<~t8y@L=U=pMqcu$A3bpN{pcwg=3>0=DR0<5C(*ts1!Y_szevKeG>P*{PYr zO~%+7D)RE0i;iB+ohcHsJ|BNkM!ZR$s>Aae?(tV`qxp}j8Djo)!C(#<0XwMvu|pmo zW*i(D>!cG!AEw>r@^)H3X;clcoS`5grC%wEK@c9xrrWb%tdka4!barpGVE8q_TIRO z_@Mbvh9m>kKaxA0kFku|n&W<@g_q`daP;yl!@)q61ahZ3F}aoK}m>o=u(ptb@Y79MFEfgNn`t zIYlKEVO^=1-ngB|=iPiS+x*-cFE1g5h7{VEFl{g(KdQE?O%|f@pjfnCak$Nsf;e6M zTl(!@umAW`H?U@@7-ILRWBp|ssu5)*9T~dR7D%jnv(@!*4^1-)17BWWkJi1*4%G|F zKl>Fg{ggpi4&Xze`2c01NIgZdA3f;){f7>Eygm69yJ0D6{n?Rcl{Z!IZLwCaU3Cu8W?k;U8)r5_E?F8y544du`2E`7BI)Vlf?=vUtHTs= z$5X`zI8y>enq0P1bP~LtYV+^1Mhy5}x8d1beqn&4YxM@@^j&S$SZ2Io;V*cNT0|;! zDA{Bl;sSUm5=Wh0nc0j(d~Cq;_MMvgen|`T5RMz;*0p~1 z+;+gzCf58rt)14@oOe&t1go3b%cMy+xx!`U()MJgxP{j}{X-UALpxVZJ=gaM{V zsoj9X^U$w?mmDXh8=0_3&e`T?2N90Zo}-f=OO7KFP*{12)6qO$oo>&VkN7&nA9u)u zx`%|srS6dW{qdtx)r= zI+2N>k(gY~zvLIu4=}YGTuq288#Oeo@wJPv<g??7U@~XY z{#tSi;O5^POkT_sMMg%Brm`5?tS5$kT5WZ<{8y>~XmBtvFbKIg)gZ0R%-n#W6&Mg; zWn~46O5_GeQ8=HM%pKBr{_8HAJ8r`w?438YvfyOx2*35ne7oWVps+t<4>;pbsvEBk zKvX+6uH~m+Z5pvH?vkM&owZEwvCWZ2!?6ewX0>k&sT05l*aS7c7m3yipSPT@X=Lcz zorK5%#BI};4JSjdrP{@UIe`n!j&a$H@W)5qt&=RTau48w&B$%O?h#zYOjyq5#FskD_3q0F5EXNj@%vet1wS zz|2qQu;jE^H8VEG!N$JL`FN$~=O+bCWPW!9u1!=_)a9ie=<#kr_wDu7=lO_QN@^6i zCcxSMX=woo=;`H3Ujy0$-zJ2`i+Bo{?gX3Ud zwBwO(@THYcz~w$42I!wAHrut(S(NSY=lEnjVSf#N8cd&0eE%0D-301hT3Q+%1*$AW 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 E07MC;V*mgE literal 0 HcmV?d00001 diff --git a/vignettes/fig/NetResponse3-1.png b/vignettes/fig/NetResponse3-1.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e43ea43ac38d27275fdce091cde371d6e35bbe GIT binary patch literal 19280 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 literal 0 HcmV?d00001 diff --git a/vignettes/fig/NetResponse7-1.png b/vignettes/fig/NetResponse7-1.png new file mode 100644 index 0000000000000000000000000000000000000000..b76b8e3fcb6784f12a283a3506fb3bbede426f12 GIT binary patch literal 4559 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 I6}!Lw9}{Af1poj5 diff --git a/vignettes/figure/NetResponse3.png b/vignettes/figure/NetResponse3.png deleted file mode 100644 index ceabf7e1ee1e09aaea9bb09fc1b58d43a454db3d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15376 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 J#g><2{{^KRv5x=% diff --git a/vignettes/figure/NetResponse4.png b/vignettes/figure/NetResponse4.png deleted file mode 100644 index ee0c9a4ecae2a2c2a43ecadc525332d9dcba69b5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20694 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 uSk$4-XF?AD@7LfRK=oh=_=on3#lwgp`z&jEsz& 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 uSk$8 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 O8NAiQxoC@j%D(}HkVpjp diff --git a/vignettes/figure/NetResponse7.png b/vignettes/figure/NetResponse7.png deleted file mode 100644 index 301de24c76a1c8c0eae502a14b70f1623249a668..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4056 zcmd5<2~ZPh7XCv}Kmo5+7vxeq#8FOBArK*mM*<4W;OMHT895aYfdxT1qBF?Oihvyi z`~SFhY|uej>guiC2grtnSi z7haU5#LBKEHtkSYnS1o)bM032rhLY(6L0GjUC~IP#*t(vKNTJ|nak%)a)pEE9(6pW za6V7+`l^M&yb%%>${+H}W;@2Be}S7_1FK&$IC};4Xnr(_V!-zRAo)2*x9H;?D8Bl` zWWSBT6V8XCUDb@wYIC<~6l#FG zZ36%a4?H$2!_^jrDeWGU2`Dd}T0m|uycbGI$349KxA%qdtq6%dS+X8kZ{)}yg)Ar? z1H%xH#Pv~bFi9F`lyK0Cl=1C==@I2tv}&;LrasjJT=Dfi$bYPu)qKMzu!!2hJqSBq zb#@U5c|ujUL2e;C;^S$reg%+_R*dws$Go059Nn+zNEr$7eCoG{EX;{Rt96g@ttjK^ zPt64Zo9_o-UJXD%iA&-oN0W$B9}hT-)5%?OP`(SWQoOz<40WTzyy(0vm$8C| z9>04vS=ttL)Ifs~RP7D{^q#rADAjoL#FmC{9XMt&Xg;*2Ib_9}>;2y>1KCEII$fqc zjAL})s;{E6w7Hb_=qE&=^Z2IB21XRb)kF3rX_&>Lf@l3{eE_)SA0_b#hWanKM0zmM?fCaS`Dq%ui1@=thKzbg>&e!`FpP~J5v(dyl2(ZH4 zM-QNKn)JSr*S;Y`njj;Sq{#!vf4KKVT??>&(qaLYsf;|h?U29Z?o~om(gF|{rLYv( z?*RnhFFUj7j!R8hxCA6fZU(UGBT5ti^NcnP(9{XC;MZj{i=U5N3{a&4ri{d9Gr{-I z8|Q4|ucTy(!A?O^uHB$)wE*nJxUd7~!g?_&WQ&*0B>T%M z@Nw7Q=0%4g>Djjm?{0RiIRqN6|THB*bg4c%7YEiOgy5%zO|`cGY__A zf)K+A#&&q|cL#LfQ9Q0!0ytEjbht(djV7n_~0x z;VNDuozV>S)GMDfw0;9_8q{OeCJPKq@VbdeI#ajZcz?{pu6fxqFGZ(o;C}oEdFe(= zT``~ER^^x(63qrP)jGPC(Rk6AL1fxNa?obv2qTIVq=Q_r?3V|PTjP9W^7N6rjCz=w zh~9)|#6zX89xeW5xAQo`RHSWHNUKXTp^1%-Mq0Vuof3~XXJtXJY1Jy) zXCsbv@w7yAJa7Zdh(iU1-``0dGvC(1O;c&>KMWh&4UT3(+@3AG5YwuWI8Bhv#9rjT zEi|Y%O5^ zs5rQ?qUr$A8w%1#X4PPE@p`~)I8*=*+X;5SM{I+Fw<6UlVLLSd(Td zZieJcJ0sV%Hv%C7CA=9#Dj}W>1+&c{Zcm4TrFY3QlSKTyiy5s%PJT|Gi5UE9_lHx# z%ht_Ngs)l%_s@vNg{$s~Ae z5+ah4tDgF@5gYl^aGfxjxa}knO%4&0HbW_ah$3OyAgQ3~o^tLa|4C=?AELBnhk|8A z(QF}u64D8i$(L#Kr+?1 zaK`Fdnn`H~ZtJn~6dLhSNJK-7w)ljV9Mw1j=VS?&-!CVd?W^TO)_ATZpkh4M`rkP7 zB(e0YeRU8oqoU4k$WA-RL(o(St0fF#$Nd`jP2Lw;uc5gr6O$nf&c56@^m$}^XARV# z&0UL_`Q2Lx9v-SzrNwKH_`*Exk($V?Vl(6sbbPPi8Jc4O1(_i6Fx5O_>g-P#dJdJE z@H|>mP<@Ju1w$|hS=b6PlND1l9ouyd;K#HCf4QzKhTiqD;PaOn-ZOkd;I?GJr*kkL zZZQ#AVILyX(vn+VQVh#`K9adwNRYZ^qV-okaoxlA^c*aH=0xE;FwDae`O1+N;bHI8^oXF> zxlX1l5z^-f8XrOWUT;jZY(won(?1{n#ru45NqFgGNtB$Zkm<5E2O3 zcfmTI40iCp4;g!%>$Qig*wkEBkEYG*VG<2wJ5HDlDLv~>QYp>!Z;s_FyA{>>1=cxz zhR2MMQn)1^oq#571?iE|6$!(t0PtNNXwz1^ja?nOY`i^S3zEqYe<`#NzWYNyIDd!J bUe8IQjot1l759P<_-l+^wma|aU|#$$n4&7CJ~f`JMl|-|o8i<5}xut#@T*=FK~qnLV@j^E`W!Xl$rOLwSdifPjETM_a>` zfPnD)zl)pOZIe)y(WoOli{p$#Ail80_WZ*( z%fzyPK%UYvsAL2p>n;rrKVPuqd(465eJD>UEe8Unml+Gj zKD&>V!V=f~9TP{-~N)~Eg1)8_#I7S7>DE@-y?CJA8u?>_xl;lp<#jt z2n6EkM`L$f2|>@D^Nxk+u_G4U3s@fIrIV3PMn8wnKwum{69}+yQ)W-p%hWx zPO3kd3MT84MsP=Cjj~XKA}>%skuC8p4KE+Q2l|Xd1l)b!cD;c$z#8f+U@Oa8YSCd_ z1TD#fXV|k)LcgDd*Wm+3d=RE{%43cNK_4t~62A&{Oa zWX;Ueo#yDh&%;yULGn{R1^6I~E!_DIYVOAxW z3bC8*xkrNIY`tDGg#?25aejj@z6Btakpy#LMjo|SuXyo=^Y}vURQ}&$WQH_~%>RwN zmEa~8O^;QjP$tKJG&L5KhD9f$bMd3}#q{0?_KAiDpWgrPWd485^Z$XWkMki_DmxXoX&p zNUASvWbsKk@>z6le+W-6CXTg>H(v_b^rSc{6Kh%di!GW}9csQ3BC>|J>Ayd@+GRv_ zfh#E_szl6KR*jS{WArgnoyvfJ6)}-$m~ziB49pE$HXgFR6a0*a$7gZ`^&J^2C@i`6 zKIxHcS~Vn*wGQilPm`a=R9}-IqUYR6?3bSFl-pftFD~nxbB;xqg`Yh1p!5{{&xu#$ zP+i|gcvwWP=Dzu_klGVp$PbGV{_H`^Nr>>5NbRFu|L}&F0hBKA-~AR)c8Wz;)zw64 ziUERI{}&kNibG^ff^1K!x<>gM!DNR!8#qYJcLY*hXJBq=X)f9Tej5UzQCN5+nkJd$ zEYISo4EbBCg1m=oj1@m(NG!6p~<_nXnYVHYG^mHt-C}2c<+RAu|%5 zpu(|CPE0^5`1``^mVdG$L@x=p35TN{qZv5E3$|fT%6)#(cQ7{Y-u*}cR5+)2OM5(a z0tmB}RUlw*Z$Xn?tfMYbnY5>b{RFv{?Z--3YpjO%$+ACo)NVk8$0yAl-+qqStw58? zTE(9qsVHg`sUvTFlu-nHHQFD8jR+XpmLsG`b)vRWQ>ceP5ruOxTXYD907C;IN(sb8 zG%wm}B*p&slpA8Zo!G7cF1c>^{ab^GGQj4t1n?!Sb+E_1_G*Xpq5Mw#iZgZz<%MEL z(E+_kyK-kmB4x2wfT#dyL99BGFe=Tm->jzxj`@qa!j41I@|O``Wb@H_zXG5o34w5V zFbpe#g?NO`Rr&Uve)S`^B;7m3v3NA%a#(>J$zmgpRQiN_L;}w8TnR)f_o|Kxt!bME zs8!5~mI!SL-b-I#@8;oP@8pBcB*$mY(po0t0^vT@M|5B?DVStuHfG;UBgx!WSTR)k zl=$Eck~sZ}lB_qZNG#dP(U!B71;)mH4#vH}wXd^v?h|<9>_`iK-Nr50DLCVoLvGt#X*C2 zCd*g`OV8>f4)U3*oq(MkvFx0D9HN18t$s^|^1%{pa~`(CvZZUxEDq$v5j1lmNm|jr8koBlo5de=r}E|y8igrL z<QyXg~T%AE6EQ{uF2vJaie5-48!HN|`#3Uqk21gr4?hdoH-#+JZIDytAICJft;p!6%b;cAYY>Awz zLtuUC)8zvy;P$t#&zL=VAKR8qQ#%9*znxip?G_P5vJ+!bFxNAw_IN6P%o=#EV#&7m zMD%Mdar0CAEwPY2P)6#{5Lw)0GaLqYWX6G3F(>2h_&~vgy9jC3md1oZu3%l=pSEj0`{9nG1EfBT{#{#A|v!&!Z7>B9=OW?sCkLs_7H-mTwVxtq7AEIJ3C5r)V`G}ojq z7!z=$S~RiK9-qod6f^fqaL)O4jr4phFF^1{S97F{to6jWU8}?QPZ%fgJ)j{iLK{9oApSL&y?OIS*&7(CRYN@AW)0itf_P!nGe394GNsLo&iOZ$ z#E8Y%BUdCwR(yi6f}-0IN|v&|ik2CtN`A!0{t)|%AowOyuKu>SnM70JeAJfzt5wJK z;t=Y$JM|vBYvaaTv_i8DP8M04Fu)Pcdb(s<;wnA&WHB{PC5C2A54paVjz*nPoO4^&e&T3L|0=~gKS%0sVfAf0CHw8jZzdGzb2I%Equ=EIgZ_p;R%rL> zm&zigB0S@jf`gxXVSiSgKP8xTh{2=iIkxZoL>&!-IXL*bcDD+?KRSSV58H|Ct_r)h3He63@S*K#oMmM&1Uh;J@oPNYk6Gg05i{8n=UP0)Wwjg~%7<0Q zv~;xabtr>(_I6t_YMHs~?EemPf*d#pin%Jo6qI0B%D{axTgti+WqGxGBcdu7VOzV) zqJG%~wpSiJJRvNz^bxjYgq_hLt$pgZSzbNh!lk4$@bsK0r{B7#(E;>*f?o&I2gL`h zU%1aKo0|(-cofh0JG6kneUex&Xlmycp=wb4el5Y66_yNvP$!B?gv=s<&M4*O0cG9ZU9Az zf@87}%fJoK1 zdD~YlefWsQ5c956EoY`vIJkUIU8?Z1h~q&NFw7H^Xw zjYVq>U;TG#!q_}1CrO5n?9J+u5i*+6Fd_0s3^_f~()H^#GnkO05KqUSsnw9t3u?;I zOsxx+RG}a490j)45Ws3jk-Zvq^{++HFmj1RS^Y-FGJWq3U?0vIOT0(&sa-Z*k=Dy8 zkSnKZiG!V_q=RIR>mMLkpo6AlZXSK65rN-B4J1-7sL+rhec$ zihgm^wQurSwRPX);nyT?XQcKZ{!_)KqWIWxC^MV83Ia>AKPVfJw`0Kj(49is4S?ofs6W(<)12Yd{q2euqQy`Uo(?>xeB+m9B9 zCWHO{rVUSX)#-HxmyfxeDS~wLUip^GgkY3e`5bXmkArS&+7ANu-bn))D&!lt9u~Sr zlV^wL9M`~6R6@f)$B0Cfw&!S50g<~uFv@jqSG)2JM{V1OBK1nrYatI?a`>ia<{Amu zA!DCMF$1S7Y5)g+ONZuA_HI|{P~^FiiwKaNbeacZh^E9i+<-7&ukM4dsuGRKOuKY` z4F9egy3bRgLEOHUl3-BphKnfL71^iZSg$?MH>=xa{^4S!dl~l#oUmD<;Oivm3f~jm zKxBDD7+iDVI->iyz8x})5T8>zkc9>pjHP7-5~mhr6i10e>jr8`MnmTJxL8hFhf#`u z{Xg%q5ZreE{XW+1{v)a{>Cf*MEmW3la%FOPz7KM6XCB_9cVi~YxdC?M^LtoxfE7`j zi^r9f!KH_r>ibj8(pdp?kSF_8pJAqcukR@>tu$-8_c(n-afot4r`AvtXN2yf0+~AH zN!!}fu#U+bzhBlczotz`@|^X#Fo-Z+%lo4J9*fXmmTsU%R(O9$^cAk)s$kiXZ9V{;i>oNnU90gC^sQLwMB)}8~ zZA*))7AaTk7)3|!`>_9RzkRiMXIAF;f-~kV@Hn{n_6&X2ZkfO7yHRTg{YwL9tTRN3 zKr;9-!aoIf`fUUBHnA0a+0L~V2f;Em>{BN-HKi;t5rIar=Bx$IZQffgJf3>{vk>^Q zx$qj`-5dJ0_S3_VoB8B2rGxW_k9?+meCMDn=G`Sh4zz_cIDGfE zFdNx7x3fv)*L6#klX$DiTYp7TSajI2m$JZElRDDhMeZvaJV1ZgN%~J|+cfv;TS>j; z*CjstJpRTBxON%fATD90UvDC**E6cVRX#XGM1RuNIdukWeV`{M9LjvymfOEzY5AT}XsHY6P>_{$NOvSuDfj-22GhEcg6lc9wu(?p#VXP6XVFWLV zok!kj_aDMV01u(oLru2eD@BM(>$vSrG-HWMeZSVArN$(~(W8pzM-Pd^$z$NxDnQrv z6G^p6Tl-U58nD{mo+3&0t|sTmtS&_vyALe;Tcp-!(-);~s@WIpwwL3lB6HRj{$e`A4!hbib*wEi z3V+gfWYzdW8Wt!=bG{!Sxq@j`ayBmXq9asNC`KdCP@|tdH2e5uv_x(zyXuXKyAJ=A zSA5F`cKepV4%fS;`yAZ-n-;1RoYQI8b?P*zwy?QF&f(j&_Qa{Yu@+J2ADk1Ro3qsX z%?>KFHG2T5j5^WZ5Atie3{%!~$y&jQ1-r_zU0!w(2D|VcGYJiH(%>?@^x)bjSgt>D zoZNbw(pX6>p&#*O_)daZqx-|JbDm4$F_ame;>NVJFILG^AGx{$t(%5^x#}v+LWHZeu99#l&}*6 zPQJF^PY5!&BHZ7guj3OsV)&Qmz;<&nV-Yhw z&+)+TaH{O&Z`S4l9bd_^5AK29zmD1t{Au$Fw zDi^S3N^YV*K>E+*%Gq-P;C5K6EM}rh2t$V9TUQ(l)%(kkUg??WpgXmI*$HlM;otFt z^RnA?2T$cjaMw)Ol1fZXivJw{==8?0wY(<4BVu`zD5AZ{C(XI>YBD-<(S2TWhYXvG zmBmLVu9377%nBdAJxfjKa^3tlH_13sbs`yjC3;bKIfV&EgRvm3j?tF_{Q@X44Fx#- z$G!f2p;a|~H-)+1)}(_J0B&bn#z}v_=-SG8xY+V7#oMa&5RedGKDy=JqsNYi-t!^K zfWq+6ODNDN4AM9u(`>uRR_Q01R5I6rKGAPEtVbW!0duZ0m!fQexn$Dwkvh}LWFmCC z8K3R3K2%PvEh)!Ui-+`oll?iRXOz}w^LiDLO;G}3>&_NH53;5GX6L?prsa6@cCf(& zMea9ZO%I99`GB&dKxW5i!87d(Rbe-Wo<_7bxUf;xtAI|`3 z%6WB&e||cu4l~pvOPd4tp>gs!e_0b*n&1fuSR(XX*@M@~E8iq(>;|iMDtf_=#*nIx z8a8-GpT!4wNj3N&kEc`;QgHY1E`fqiyX{2=jmOt~lbRju&=(}U5E zBE&IU((I(6ifJQHEVJBMbHK320SBz!!6k*+sj+Dhy77_Yew~_eDpdv4t@l&eZBOst zFtZ!7oPSPzNfE%QUm#?BCs=Mf&J6s#@>*GLX4 zqe4EU2sHGcfuos-FItYmjSB7S^OT)*Ld(rV^o}|~HPqgYJKBqa9!+bmivbTcUA1mU zD@x^RoB5%FCe3#r8}WdL9;$jy$`?}kA%#KBz4dPl+xs^}DU|s@ReB3+5dTl<%4{cVL(A_|f=e)cLf4yDQ8k zvxHCYjouN1Ep>Fr7VC5dheK0uDE-|0frk=3AGWZTGMZ+ZS!^0xrh#Jp0==wEF6KP1 z^sSG1LJq}FlE2h|bZ}zCc~ePe3)CWh1v|=4ZXO;RXx-IFvO=wK>!Y%UdlA;71?GGf zJT+MRm1Al=v8to4cRW4?rYu~pov`n<4a{ahULQ=Ilb_oUHSNM*ntiq~`4KV2azKL& zF7nF!6F26w8v*iE9l=%@_~VLNf}2=eiFcJDZXMjV7gI(~T3eAl!uvG+pQa<;9=4^naw{-V#HJr(4fAixuZhfi_?Gw;GQa+U&hpjmsY zSaT;@x!A6So@|JGb5lL_zw7OeM_CU<#LEYax;7bWH1@;&Ui;nb{T08Ke=yXqajsn4 zi4q-ZEhG$|IoyBnM9a`cazHxmmjW~PTz(x~(safG@)Y2o(OD$r4@d}Wo$nD^OdXtT zC~vY&Jb1C*qrWYmnwBWZ2iwI{HZ)}ae*AEXaM5=bC|FIT^AK@qAF>rH5#hO@x5+3v z#Xbr64u6R&j7{d8UpA$hKVJ9d;5J4(NCVdg7Aosyp$ukQcVvb`(zBG#UnfBYi>q0C zy*Vg`LO5Xvx1H>feLW4z5;9mibho!X|9ZREXZna8$73%D{M>Z^qgP2O*YEvf=I3Hz zAc}!bG z1vGarhs0WVj1Aa$ z)i5}OeoCOq;5wt$ZT(E=Zl}nyN>;{Ubp#WLO+2tefD*NjnlAX->_1*RM=;>He#*AW zF|?|bx9Xb2k#vqS8O3Ozuk5uwUSf0p0!IJU81>q8vC&~oUbO?W{1*MCg^AS|e`pG$|9#swJ5T?) zf(I=%)Qy)9`OK1|Ig#8eM$W|HO-t&QHuldGJ8cS&5<&cpV&t9A7hubf$}gY zdNl~FfAUjt2NNLNzpJ76al^mRAn_pJe|O|nvxcLffK%h~6G%(#%h>HXK-$<)x5u++ zqYeKbzMAagZ$j|=s0NS$oO1G0eCKU|ubc?|`Xd*xR+fJ+EdJTt&7*s!agW)tRBnlp z)7Y-vdNTHom;oyIb@br9Uh~9+~-Uz@?vXSIAYg_(F7(%{?2& z9Nui+U>@6skg+QLfvw02auw$=`-mOI4(Ypyy0K}MGSKtzD4IOOgYqZEuW{|xn>K8I zMC=I+ZxGsB|1ol#Fz&IOpwIjm`s$Z>MOyJ4f9PNbFeIsy!!RWoA(6OF-Q9S$9S(ca2{cI^d3Z8h^U?n=dM#JG zcBOkg^YE5tjG}pi%nnpThJ)>oV0s&?d1E~N46ZUJr{t1&mF>%a zVw#Uo<`(2gaFpqxA5Wof+^YYMLCR_mm61ldDt<#TVArwo70?aSG$Y%g2_JsA=yq34 zI?XIvT|L#LoZphn<*W3!|0fr~m&k#rpFq8vMyo+54F6T3P1Q0DDENt^(#qE3ICXy* zL9i2>WRBahLn9>F%^M)vEA6lz%CEs0U5^SveMJeQy5Pg`t$Y3a)@5w%+5*CCk4W3h z(5VWY-Ta)H$>RVi){m|`15$ef6KrGuG~PbU>QqdzDVJ1_o`$nTli-MCQG`@=vT5Z*Iluis*c<@eSZal4z!2EzOl^uQ^z}2W7p%PtZ_Bn#d zE|>ltzR^GnDT=XTRG7kwsQY~~T=4rk>%5bLc5CTYV(O=~so4P>wc6_LL_Jl?v^zk3 zn)@7sa(Ex;FFlh_K7ifQh?~B6)rPs(bG>0|IVg@gPbt|yr-!tRHhI42-ySo4e55Er zdl?2Mg#hs49p8_4d|@)Nx$%876a!!RT2o0pGEu*>+wdEm;K`;u-Zk6xQ-_*7QB#tl z9Pq(ANuOC2OtdP~^X6n``G1t@L@%Tzq;~Em>Efvp!xp7!mlQW<74@W#t#~o?T-u-O z?r2f(j4*zQ@NH^7R2ckXQywd95MO- zn+7-Vh^r^!3}N?}>J?w`4L#~rEKrzx#hI#|ZcFutKA7&6zBJ4e!nWC%GJrS~1$FiW z(m_3tC88ss3gsgh*8neU5nazBnffl~eGjcc`FHBRLsC_ee*_k&8H{zL=ld^!CHl-i z8d(vEfvo;h6v~BVOzSQy9FR?$!mzwSEM6}a(p-q1j^5Lm9_=MNe_Wvg6Eaptk}K=- zj+`)yG-gRhqhWIKSuP62LRs~s61*ume8K{$1mQXV)@)bw06Z#=-h^-hzm6Vgc#fI& z6Paw(%Yy{4U#koaV_nU1j+|kSk{F9#z4<-!>x-7w(;ZXuG~} z!e5jR-HHCC2pat1f`wp1op>za`}Q)Z5BMIW&m)#w*;=bNbmK~4T$M4^Jyd$-Gi1a) z$kfC%7aGs*V?w0IcS%N4{F?h}jJ8|R=kH&IIds=QC|;_E6s?wjEF|-O2%b0H)9@a$$Y7Q0jjAH1h^khg;*-9MswNM?O2YJ#P2`K z(j6U`yg1`C{jNj^Any7Q%mHJ75nxox-CyKU2tDa*KA+Jj_#y&pfh<#g%wom#Iin9G(v=)&}b7e|0PJ?^t>OrYYs70D4 za>SOUZ3%0BAH)8fenuEZ_Q$vmZrC8Gf@tLY1*J4YFuqBv_YTT^Q40t*H%NN;jsM>x zOics@juJ{K_uVgVpjD&co_+j3qIc5e)|F`iN~z8;hn`=#toCmQN_XBB?~ZTOP}q?k zlXdnc*{hJ+#qFZ?K-%)Lw;UL`tphW3)9?{}dRC=E0sSidiruJw^Vr0P$j2%7bR=sC zkDbVuro!BruAw^*6~m0t7Uocy)WH|4z2H9KiI{-NvH-t-$daFx!m7M- z0Z6Uld;2gh6XE}SRP80(CQ&Y(tBmB$YY)a8COgL%F@LbVM@f6iKs^bskV;Qg~?xcyPxxn{OTP2C8HNwFicjHoolo|HbA{{{UvP6uR%caCdJha z+%_$`HTI6Bcso&oM_f|3vlhWgYUK^EeNwG_Soj$MLkcti;_d>BPDTsbW{&SM$RZ_!#=48h|4 zj*ZDTI=sQ);haWFuFZL53w;H6eYQzsrm{~m>5GG(cTky<hb}SR)Q0v2J}x{v*f43{SX*p(%3Rcp~0ZV%e(hU7N;ZKYJhIxSpmE19NSN& zy*;yOqA#NlFb(068Q`8K5jj*i1GqS?){=wOMk7Q1H4W~Jc;C5#A__hFq%(RKkjU5- zFiN;sF&_2gRY~TJ4jb)Zs&G!D-cXZ0^q$`n?WW24#=VzBJ@9%w)ivZymJP7K>&ZSO zO8Z%ly*YZ8m$!uE)}HNLEbEz#5gyk@ud#)xI~u(0qwHlhDy&WnRFKr1EUYdWbaH9e zPDy-3HKVrnPdOuWG%mC@6iA#(b1x@+mQ@e0H-m$JFRt;;5w$Y6f|yLh^jXBHgQzc7+9(Y#-8xmX%5N=JfJ}yt$hF&F72CuLL_cx0BHxCVM>Q+vn zGNv;kKz8D8`_6OpbNwP*J@ondX2nzNy&qH^;q}X#;p|TJK|rXF4;6 zcKcG5%cJ?~cpR6lgqi-yfJxI?^f=YV5@)J@t>wARMHE37YcOCVl&p zzJ4Kfd&oVWyHb?GbW_EQ_9Zzq^OTaFoh^7g1 z08$WVx<`c`*q)3OM(i^%oJ5~41wkjP>pKyi{ zzH_0&Yn!eDuKdq8U0+7+^G7i8(%{CUIe<7P&f~IU=itG42|bvS3%`q5hxYEL9h2W` z_mJ{5EiZRzIMQkZj=ivo&a*^s<7x%d(9L#~rIN-1lmWn--u5T==!G}$aQE78S1Z_j zosBox2oOB|p_+COg$1c`5;=+*Lr_Txk}{YD>g# z?F`U$j@WW!c#GE<{EfuuZUjSycNWN7ZvF*$i(eaKokgp!o;k_ocoE38?!OxOTfIxu zp57%9`1qDNzqFn(GL*MVo^KA0VC33Ac<`91M;j@WdM31K%~9*vU}VwH9X-6o&6pv) zDN;7C1qkjFM(W&fz7`7{19BOmGt!~}y*-q|&^wj^r(duKdYE7J&&6Hj1%OU!!vL4T z=eg_Ry#hWlOe-PWu={HeT~k-$t2~{qV93ITS+sJ%o%Ao97St|^TC0EJR@sKw*bVQ# z79AU4OWbtDT7cCNfz+7_2+ju8*zFjjDtfkMt8l8eIUTtd=;zUVm+9S@OM7wy0k7f| zns)^REzZ(cj}MHzzee1dn%oCqkBxchEzzUBEWG?POc|_Upj8SNZ#tQOorhz;5D!j0I^P&irq1Z^Mupkt#_l)#sP}?gtC%N!8{%g!69# zcJGKTl`=9tt(tu?rMa-ir#xE5nP7^x6TZl&e9&DlJ8@`FAdpFYQN9VQq;pQLNiZ2y zaN?2_pm!rlO+;yvjXz}I@QhbMx>}06yz&Wtw)VB7UgKK_+@PLfU{e znedT;kUWqpSbthseYx&+w1cCb$hQq9r&0@wna zOMT4MxZpf(G>Q!iPC>ilxCy1!-&mx-z}TV&^dz0ORcmfnd3=T`J`dlpGOc&hk5 z@rVG&uBSlVD!bh{#db^-`BBkmPcbog=W*21)v8>vgQyED)0J)(F9Ir6>NR9UU)35i&h;Y-nM!1+8n*`P}WWRxDu*rxd zpzS9+(W@8zr{*&9gD)8$8BfYa4Qo5zo~e0$PLvrVSacU|`}xZL;6)jy)`S|MT7CBq zc~E}Gi`9ro?_XgS|Ds~rUMbiv&*YKJ84sG4y+BLG3op9fEqTi8t!dUzc13}q81v(U zy?Jy(nfr9KUX^08HgM#KHnr1uocJmb5`4;znK?;?^fh2w(YMcbtq5d`+q3QP?paWQRRUXytbM`eJ% zs!DiDX&92MJ>=A(*hT+=cj8aVCUj`#-bX*6g}xJ;)da@-si2xmF8>CM-$1^ z{xIbTr@&DhP)X-zkCk-^e{He$?aMFeZIjbJe*q*>Y93$f+aa?2oSI&a4M~LHu2(am zi}&Lg?ms^?`4H38dj!OJ>V*ylk+;{76t_{m4YEfaYlEB7UP48Loz%*ATIrNkLr9v{ zB7)vNT1WBJXqz0;T!&`i4%+dKkq~2&;aKmM66I=9C-HuUcee^2DJn2zuTad_ z{~iOZ=!sTqj4SaR&J&334Rx-?LnjSxPd%2@BSe{IEs( z?|6%T-P7Kw+!&^F9jfXVp1DR?1lXi3kk`bYyxK2GXw^U+u%%}WB^GzCtrWtVN=17c z;~=K$6|8N`=c2odQD(8q4`X;e$2?`nID4OR>`&y5+zB_}2d*dx!H$`VIjh#xo7c3! zfr)`^CjaQ($5endW480pUhBp?5XBR>IY}=Vz_*bq*N^LogQsrq)a-=^`cU9cOUR$k zvMGO1Rj?&wMjT*n+lK2&l#%g|`K#;Mt}HN)d#~%IV#ZuwaXE~s+wuHNrx4w+TM5^W z8B~xX{9GwI&}Tgx2p(=tR{kNBeFzABJxSpuz!C2@fyBhJpZzI zLOFW3pSymo?gAA;y;95Eci+I8WG8v#-)R3$6bFFR?D4s`Q(%p+&i$IreuLjW40Bly zkemKIjPB$s$onGGA5Hnp;S@g^ypYE6Oacn8yZ@B`rhhJHmQp#M&AJI%H(9Y85uF;E z^B61TZQS~~GHpwoC)5io60D1rO!9G?QW}I>_i4puE~taSfc#}j$#^` z?b#@5`o#6AbNPK3G}F^*1V~WwP4Zz0!;z1llqoLw%=8oZj4WD6u&K+(P7rf#G&ASV+&Al*hbdM#odLv3&7+hLgop!ZQBIA?DgP+(1#RPNe9laZ63F%u z2cxe7Pc1VZHGDH|5-A6FGVt4L3qdp;IV^&7M{|ytQkn4Tn^TZ*#+_tyDO#hFcWyOn z14bxoj7|};;I9Xc_vW~(wUt2ImB9~*$L2UNWL}LTPd-*XmgnhPHjr~wj6Dd~Ar+t8 zYPPK9<*rw#xCzVRfnbZ>{sRsl(a!Ie(qiQFf3JlSrUV18b>R^;yJX%zynopu2>{cUk+uJELYfg#d zw=wy`uc?p^yu$cZZUe9nYUXBVFwckjvidE33dVm@N8bJYV(@uFlb*gqW!i?6V0wym z$?=VOfbmF^AfP@aPd_4{S=7VG-rRfFiV_VKVfeB&fWD1{{q1+ zFRr9~AQ?%iHTdPe_$#zz^zTvYVHo_BV;1Y>UD9zA@SZbwu0-+0Q%TjglX}iJ+}qB@ z-po*a@_NQkQAF}i_sdX2sg8+a6Gr`Hd#R`@^vQE7BwJK~Nux#mdZ-Z378#6Y(G;9> z#P)ggkS9y_y~h=vvF{gq2;|^A(63C=`y%RyTkI#R$<6poQxVMlwKkcc+Dy4M7JnLy zl#A2>ovM1)?Msy5b(2Qm+w(2qhHQuOxc_wP31vp=U^b6Y9IH6pro>83zdjj*>m9!a zXU)2_BT@fmn#EzzI+2Ur+u=9-B0Lc5IXxudpKx#f`xB>~?9LIg#Z-&$BS$s;1Izu` zmEp5$@B0s#XuExB-JNW?L_B1_t&DR*(sEkH#J-z0RcI22S2ZZ@d(dryT;?Cj^hD`T zSQoLTO}24)1*`c`BoGG=oF<=@?x_a2e#-qQg5NGMMlG(1z4-j@P@gq3ts3;`C&kcP zCZv);om1lh=wVCwk|UeQqZ=|gvo5x6?fV-9-j`)IVOZ;$Cw_s9PsKuoEd8g@Qs1Xh zjdZQ)lnykCpSq=^jjCLT%Z^K>FpX*TEPZpvRXDu%p-6POY#r|^)di(eUTZpo`8{WU zhNm>E!%D<^kncVANe{va3(2iVuFqfhhuupd*n1Z&bZhMWP+2TllCjYqUXZ~h-e>u+ z8L$x#G7jA02(QXBl*fYT?erAe=$FYkSd1$&N=_8O6sdg&bds9%uHaPlX9E|`36>2j zg@oR4549mS!HBH;JkkaCXdcGD*uEFD~fu%bWqy@G2 z{j^l{uie#rW{Cc7y4R44Qr~0td^`s!OKT999Q_n1W*FrXa(mCl&i!Yy;6e}W`?WsU zS3_}vwo~wgO(E(xeGz;U@88+>w7+|~tos`83j~mohw^-Rd&Wk62=azHf?&cU`y#jH zQ*@%~jsG^gl~C1?Ma{rxi4F~w%Bt(_&)L)(Y7B|*>BzqI>!vL=fVL`i5DhNl0!JBoA)Xl0`TGKQA0pWitAn*;%oTka;3ej&lcbuf$-F~wa!y&=u_l{bx zShEp{lJU>RrJz|{y)dy}ME6g&0t(-pgf^Z#qZYRSQC(WQb@tCazAhm3FS%m} zsOoE9#~Od=iupj;$(Vf27l~z73 z{bdMG&ULI%2qH)w*{NELWe3=4TsPk4-Jwe9@n!6U^9)};>%k|b2{AWYsdO#UtNf^a zd8{w>i^8i)i4aeT(nCakBcuY^&y}U3zAfcW-R~6}P?FgQfbMH-$zD@ryW@EJdi{lq z+Y;;Vq>>k>K`^tF&wQrbP`0Q%^r|kFi!v-KgcLWBz^RcF)OT8Cg?>)>f;1J~3@Go_ zK*p2LIM^F!6lJC2cje&zS`+?`7Z!7xzpixMF1|!=3c9s}LWQ4VS+RLo?`*pK$vyee-)d>A2{&}Rq()FJ%5)LD8%|MZZmyHoj`%MD4 zqsY-Q`~L0GyS_2sdurS%197h)13paUr~9jw&3_bWl=?c%5KU1Uw+jJC>4?<4JJ|5VX6DsJ?8n6 z<-Tn1%DC&tDF7{>&D=g{VI}NW7%NuCsY7_tixT;6WuBpz?y*Xdx;Iy#9FDGjc##?l z4*i6guJA}+2uqy0?ul3wntFCl_{;SlgA3$X0;`q->bX3gCD%I1$l+--Tv5AD*T|h( zt#G`3)tXrwB&ywG4-edO@xW@@gpjr7gm}M&n(L10_Tn?x6U$BNu2<&}2iv!N{b^Q& zsyd93lh4`9UM<*PDWtXf3)az<=me=`0715GIR#{36+~;!Mu-b_6fqWx6-V*+wyIPd zH6lu5s^L+*{ePzKV6P)Jf0OIq_ciULmfdB>Xj1Fwe_EE!us`n6yubZxuugc?pdwR` zK1qAfCQoo`Hd$K%z+nGXy+}YI|5-Md`c8;yfuOrGpfw8vXwNaQP^F5P;yV{IVd~_D z5=qL|&7Of1pHb}Nk5OH5hPTGU$hL3kR`(RK3Qiu_7b{}`N$P`1GP{;ojOH0f8SbBZ zgNcsX$^fMUh)DMPLq?YdguTH)*s;QuBHz72s(mN<6bP%K$K_Nh> zQUs(MK%^rzASDq60)i%Vks=0_A`rUNAfY2@=uIM^bO;s@X*Yg9?vHo9_xo|zI)Bd0 zUT4ib&$DOmwP)sx`u78~oeQQmFO^PTTm~;IknWWh2rVZq|Kk4=ddKObe5_4n1 z_jxrtzihck7JTllzW~8{SDd|3_wUU(S+q>Labve?y(mNZUi!`86 z1noQT{iJqxFmvSMw}8@tJ^fPd%|~^`akMQhqtnie@Fd5r&iT`c$iy-RFucr)Zp?-> zwwe#ga7TNJx(ZqdxSMLJNGy-x?SCn3Zx)5BaXzIg;JCF%VP;94PFVUhmZp@{%*~4X zRZ1#MDMZ*Bgm{w@5Y)G&GM8%uL(AD+{Y z@xcR5jeN__Zrv)IpId3GQnlQV%`M*Zq59aN-*`(O{Lwc2c6gJgn%|&d?mT~;<%|O- zJ$U7e@TS-q*IL)Sug~U`b2K3{%vL|{3WBQJqQ3b`ps^plD7)PE{ z6Q|jofMvb4cqm;dc-_k))WxU)!wvGkxq3xw0T0Xb6Kfrn9_MSMJh)A{_%Jkn>fJU zub!m~3B?mwG1~fcPXTF1akjGPve2kcwl7)tPmiNZOa@mTRVgsD#;gZ8H{Z#9OR8o z;>k8~>EAS*922RcFl&|`vUB`(e{<|Ab5RlBmnc{37+l;Aezu|ZzVCj;Mv|mR0*0y& zh#BHddkPmJRXiXow)--Wf1m^oJs|v@{hjFp3KgU`FG+hpLTX;!v>AMde%F;`kIs{! zxPvP+z9PImWWq%uJHauc}ETJ znCxvN*w|{))^u;J%5c|O)`Ue@`&&&HRB|?S~Mg{vK4%^tMIl;+9$xY zz6t!?zP{ac&5n{CXZbUUivCN5)BX9JB+gj*|k5VS;zKL(`nPtE& z?bP+0y=o&7NL6I+D>u*z~$N$kNu#IJz5t26L(MO+1G6JL&vdcVl_Q6Z+B zAL6#%C=!Pjgj_RCa}TH}INZ>k+>V2(x2B~~H3g!A{yM37Y`A%LEoj6roY4ATz!4V$ z{H%6Y5H%OICw4lYtohNKlWkO;G|&BrHm(xhLuNB zu+tMiU30mv<8tCY17Rpmufp?5qhorD56g@POvYGmY8GX^|x8_Ze?_vmGiv&Jqt~~Jh{&0H$UBpRuhep7+SOn zIJi2olW?nBAqHwwuVWNGoa^5&+L2UCqv#C@KtBN2a(^;Hn{ALjV0$n_FASb^6kAlq zH*@H2%~p;EberA2l5FqP@8FO$PndH<&e0DJ}+DoWC4J@-4#tuZDpt!DSIFRb`aTcleHbXNM zzO5x~k&C`QlA&c~P{!C~DtCaw*3XlTb|`WMo?9?z3z&L6FyB6U*&^L}u@6{$iQoG0 zqCmfRpvsk`a6&1VGWoJ`JwR^4vjrgc)q*0f!M}cMmVLECt}gnr#-F;+0+#$YY*mf5 zaeTun9vmbik1gsIUyy=SZ@BdRp08ha#1Qgu>B2Kh^khsSUoX5h2dA?8x}EN%9C_b& z))I68bdwS~=cH8k;)H5&93fO>1svPQ+jt9*&f&ch4vnhtb~RkZ8q2RQkBs;{8Qn}@ zeO@rl0OgGt0Ty~>!te9r-n}JOX5Z83xEZvZmqpc@U4gWK$ z}EwOmR)OL%E+YOmkS}O9B?64PYkBb6b!w50t zV5YBe&WJdq1(F%{d%n%bq8%b9SWl-^({6+AOn+~UU%pJRO|xGHdj^(DzU<M# z8lHFejF13x`GZUc*pAn(ge=No39k7*j^4;Opk`n(^;zN!ThKfHFE!aSYLUt~hK0Ap zV>yR|7l&qJ0#ZdB>qni%rcb)h-zV|X`qM0roms6RLgN*j-mAcTHMYLttdeY$eZc#O6#Hn^PKzgv z4n@u;oO_GV1w$3v3==1Tx?e@4B|xS93+=q`{RQI9X}63xXC8^ZL9gh~MHlIayi7}z zu2tVTQQaV8sRQWa{3N;AQC<8`+20*F4~^;?+ikfI)vYzwFb9~~jVv*7$qG*e#gSm7 zJEh+}w8+`S`(-|;mydIYM=gNK1$ORDq=J{3woo1lbzx- zNE0cWkHe9;6(rOO=lc_){MAHt5GV_*VV_+4O;(59&u2uKrKJ8{K|OL#@5L+NeUQ3H z$rOcSZ+TdjSn6D))Pvm!LwWq}Wb%?3qqT;E+l6x#>s56Yc>VH`)kWy(m6(ckJ&T5u zNe?i5(ji0p-d9HaeE{d6wTE8li=qGzqOy<)XSJ?DLu~@}NmSvNW9rg^Sny{^r+UZQ zkm4}RZ;30!RkS;2iC*qe-6@0LG~_(mQxLaqnNTE}dNScf`RX)NbxG#C!7yg>6`H1! z0o4(Y>x(tF#Epvv8;BoPbb33R7*y_!BRW!kuPlklj3>}iHWuHGtM1C_KK}+OJ#Ke7 znrKx;y+3NKwn)$mVZz0@p?Q_zPriSwbjbd@lrK{-3O+M%u$=wm!Ifu;wjEH)5q-DX zk{>w=AYHe=tF)!`Tyi$tgfaG4uyE%3GAvZ*2F`9hbLGlh^xNHOqDhDx`BFzerup*J znVvKXvAHTPT3+n@_czmWlD9*tcZc%lcW2(D9hs#t6*Q??T4;$iwmE6~sR|Ff|7D&0 z@JqMvqFr?(>U5%aUuFIVND*%o-Cosv3!Uytjh(eAV00{wExrLRcQPK2a*3fU^^a?r zFL)c%g_!yE{h9}Cc1(|s<)!LP7$maV>rJ=s%S1u-@$P!S>U!zGprN{tC)Xg_Q|Bt2 zoESD9%@5B!=3OFh$);6kDos{-6&5hcGMU=rCw-4F!qTe+~R=S>xYR zabR9YQ_~%tY#BO&tq(98kJ5ZDI<5ZgFGRQ`^ObbYrpXUMbF|O;+m?-I6;T4ZE4#&B zr1y(GvmAtlU-D-C@&x5p2MKO8e;;*C_Ys}jo5#WEmCzq9(4u*%I>DB!rZPpH4Yl38p?X-L`BN#mOw1q9BsY7)WG#9pXM` z$8Aa#f?q?V1=xb&tt`&+(l_|UB|2LS-FA#RAr@Ejx6GPz|CMgc7Hsh zQu0Xz?EQ3i#loIY>CmavX7ksN`flPeES+X!#70Rrf6zVNtKDWcJ72`6JZo|v{}SqQ zFYZ31pYXeuxb()8KSWCD<1QFB-4+wrD0{0{CI;%O%AIGnecUO7`!u?Tn9O9VV3-F^ zg9JeSfF;^dGvyM_(C04yKq{M+F;qWd#vi7fE{yNeitdI^U!P^jHI?h0r(m=}W*`Sc z>8xMj3>Ur$1E)aTs(OOi^{H+c6-PxX+u;mn)f&!AfrjE2(_WjCrLnuE>UoX@_AAE zq!Z=pGR2wu>Wh@#Pus$=@j!qg22M6nZLpZSk-5tG5>nN$Fl6KI{J*np69Q z1qK)DSgIMm7IqEI!IFtw&wtH@v;oZ9CgLY!Kt_&qlQ;@W(8T*u8!xl!(%djuCS}TC zvaW;SP>k{bC6{CRIrB`R>GgnnbYa0vQ7?1XcR{E855k=J<{8l=q=O`PTa0Nyx9l-P zY@xy^)&wmm^knVs?w#x;w=f0I{11(I6(=~$Ornln(7LLG?;|aNKM>;ew}ap7)uMy2 zj!ja=NFk|^AcLCuK{TfZc6s48=SFg{u9x7W*ORYTId!AiQtluTnd)P0i+a)z% z?$cINtu!Rw;r^~=Y5;CxS{L6M9(p-CNOa75HGgX0iiCIW1-IFpmD{Q2yAeUcTbPyJ zB)8^)ar{JTn62;E4WRq@pkKp}FsHm;rZcp}3;L61(dK^lsxZofqT1fh+N|g`15S-6 z_SGI2{B2fsQUxbJZE+tdX;zD~Hjt$tO{D{G;Muo9ov$D3N{6!T=uqQxbRd#%aF517 zZ`4)Xp!t-9X!el**w#xYO_N9CA$JBg@rFUoY`5s#4Bbqs#0zt@s#M*fa>bzo$Zb91 z^}x^7KR3k;va>8GVK8p~CrilP@fz*IT*OLcd^}H7<_duHnsxNsj6h4}E)F`R!_l6_ zEp$?(qn)|Nka~g?97pEncV|PB!M=Z#y3Kr*6BFKKs!G=>xw`b_oCFguLoJ%vLsV+n z$UGk0WOEEq`t$`IMf+;BEzC28Z=pxjA(FNBnCr~wpA;pCebJ**rHoCVkViLCrJ>Hjuk%jz)jvg-^)BMw@Dg}=JU9L?ehtIq z*YZzD#8qBVTrkjuaRKQ40Q%OCA}gD@5m{XoYD&WYe`Q7y@P9fAcCPBe32#fjqfKMz z9d2o^7hp-~q;tkh!={PHwOT5i)bKHWfqDh=my!xYCy#k?OW(N&>cz&_ghIrk?CZ7(mh_LovW5Mr6m)&$?KT*ZEmMztQ78u*< z+o=~=s69`KQTY>~#v>{xN{85|yp4=h^|K*c0RmOQ&@ zKJ?7ma4T+$xZj^5?#_Bll{~%CAujD-O>1AJ5hYcdK!x*y!aT{oTXpdwaLl@}7IjOp zqumY6gyU1-xa?>kiw;I#t|GBP;!kKjhD9G^^sFASM^$_|#_Fk9>h5-t$ZO&Yif}&u zq$2xzh?Qc_Zj(yHLBvnkvVm$nNpT^Bc>0wz#5jiK#&7g@?vo=Z-6be7B>OvsbPVm_ zf1#eTMp7gu?)~h-e=J8*AI&CBXZJNc;n^DvL1 zMd>nE)U+~ZMVyEOcNpFL8bsH|`_}SDZveFNZ!oR_+rR>OSh;!{MO7Qg;mno7|EZc- z*?2L9-Ltr&4CV8An9J`=yLZzoKu^!t(>+H;R~RambivIJE9lCZZ&g%djeV@yfLU`S zWnc|5vjV~J^3Q#tg0<{4yLTC)ti3K+g_;uYK!?=Qwy{R@S%(N)Gghb{gY$o#(!l>R z|CYb;HLoxsLVQ-Qo)04qCpC87QfaZM{Ktl?~2e?#;1)gj( ziP$35DfIijR;Ap2az*arrST$^$g?xGf0pm?y7*-*2>pCx9PjGg z{|Xh+=wJyJ%$^0p-)_U5Nw`NaYxnrbq^H4DVOP5SAKhllbBt_fCUZVBqgZKj{_&pO zuOKAx1!-inP|T9030H=^%*p&OLkaNZ8y<&`Jgxt5huoRnmnty{r<2t^*~U6BhG;82 zspAL3y%(mD4rWgcOxNsbssUQaj7Q5h?%DExZlx$nIg>ZO`baLa&?v~Bexa^m^I>{M zXDPv8oh7VI#hN3OKm`|l={S*FT=?sl#+v>;J^b-H(3v_Q+v}!HeJo2Jt9b?d&*SX& zUCMSL@*83aASuE3EM~txGrp2)D@%ABAyKxZy=W))fsf!C_|3CXJdsFujX~~`laOAw z;%k-t`m61fvcdlY{Qt_xe>5g_K=g6T`+XOe!jwL#5f0x@{l-s#UCl7qJDzN{y0tdF zo>I@zq$t2yLCa-I7>Ss|gaa^}%Mql>R60E6UIWR3QbqV!Hyz96NZ-!9z!>1Dm2mYF zgAP>u>+z6V{jJ%3I}!^CPU@DacJO5+xsu-boj=2fr;Dc{GU7*T7}}Y(fmKYgA}x)- z>QRQFi`i!5|T zz%XQ`*;)oTh}J2E``nJ?>%m0Uxe|SGI*=v<@CDS_khK-TyxbwdjJ)7BlythW0Zull zTB5#7HI`MFP<*eWi+bC*p(*#`yQ41q`-LvO`)P)ubdFKd)5mflrW*@g03L_?@=ybh zhq-lMqhloPQ&u0)gxuU{p>bsW!-x(!1V&!Qobn)D>EL@m_D~Tr@lDvFtwQ%06F+u} zpKrGonas_z-TEy_)pe<2YWkAX7YJzukH*Uw=00fVLMa_=;8kEQr~ZlUMdHwk&-#!^ zfHsJgEqk*WWNW(SKpP}m*wy^2-3I|O)$0<3Gdlt`l6mXh0o!JKqHV?%?O%wFUXuTx f^xHI@CfsaWh}+Hh;Z6DHH2?~+G_1bi@$mluEi`sJ