From 9c9c51791dc144fa7e977b3a3bba2d15e81698ad Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Tue, 24 Jan 2023 17:01:46 -0500 Subject: [PATCH 01/27] Calc lower & upper CI for feature importance (resolves #324) --- R/feature_importance.R | 31 ++++++++++++++++++++++-- tests/testthat/test-feature_importance.R | 5 ++++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/R/feature_importance.R b/R/feature_importance.R index 6c5e5f2d..93778bf3 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -203,7 +203,9 @@ find_permuted_perf_metric <- function(test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, - nperms = 100, progbar = NULL) { + nperms = 100, + alpha = 0.05, + progbar = NULL) { # The code below uses a bunch of base R subsetting that doesn't work with tibbles. # We should probably refactor those to use tidyverse functions instead, # but for now this is a temporary fix. @@ -235,6 +237,31 @@ find_permuted_perf_metric <- function(test_data, trained_model, outcome_colname, return(c( perf_metric = mean_perm_perf, perf_metric_diff = test_perf_value - mean_perm_perf, - pvalue = calc_pvalue(perm_perfs, test_perf_value) + pvalue = calc_pvalue(perm_perfs, test_perf_value), + lower = lower_bound(perm_perfs, alpha), + upper = upper_bound(perm_perfs, alpha) )) } + +#' Get the lower and upper bound for an empirical confidence interval +#' +#' @param x vector of statistics +#' @param alpha alpha level, e.g. 0.05 to get a 95% confidence interval +#' +#' @return +#' @keywords internal +#' +#' @examples +#' x <- 1:10000 +#' lower_bound(x, 0.05) +#' upper_bound(x, 0.05) +lower_bound <- function(x, alpha) { + x <- sort(x) + return(x[length(x) * alpha / 2]) +} +#' @describeIn lower_bound +#' @keywords internal +upper_bound <- function(x, alpha) { + x <- sort(x) + return(x[length(x) - length(x) * alpha / 2]) +} diff --git a/tests/testthat/test-feature_importance.R b/tests/testthat/test-feature_importance.R index b1ecef8d..79d2fb2f 100644 --- a/tests/testthat/test-feature_importance.R +++ b/tests/testthat/test-feature_importance.R @@ -193,3 +193,8 @@ test_that("custom grouped features works", { tolerance = 10e-3 ) }) +test_that("empirical confidence interval works", { + x <- 1:10000 + expect_equal(lower_bound(x, 0.05), 250) + expect_equal(upper_bound(x, 0.05), 9750) +}) From 28ee23cc153ab6f0c045e640d1931c3abbf2bad4 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Wed, 25 Jan 2023 13:29:07 -0500 Subject: [PATCH 02/27] No need for `usethis::` with `library(usethis)` --- data-raw/otu_mini_bin.R | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/data-raw/otu_mini_bin.R b/data-raw/otu_mini_bin.R index 6531438c..0abf7e1b 100644 --- a/data-raw/otu_mini_bin.R +++ b/data-raw/otu_mini_bin.R @@ -4,7 +4,7 @@ library(usethis) ## code to prepare `otu_mini` dataset otu_mini_bin <- otu_small[, 1:11] -usethis::use_data(otu_mini_bin, overwrite = TRUE) +use_data(otu_mini_bin, overwrite = TRUE) otu_data_preproc <- preprocess_data(otu_mini_bin, "dx") use_data(otu_data_preproc) @@ -39,7 +39,7 @@ otu_mini_bin_results_glmnet <- mikropml::run_ml(otu_mini_bin, # use built-in hyp seed = 2019, cv_times = 2 ) -usethis::use_data(otu_mini_bin_results_glmnet, overwrite = TRUE) +use_data(otu_mini_bin_results_glmnet, overwrite = TRUE) # cv_group <- sample(LETTERS[1:5], nrow(otu_mini_bin_results_glmnet$trained_model$trainingData), replace = TRUE) cv_group <- c( @@ -71,7 +71,7 @@ otu_mini_cv <- define_cv(otu_mini_bin_results_glmnet$trained_model$trainingData, cv_times = 2, groups = cv_group ) -usethis::use_data(otu_mini_cv, overwrite = TRUE) +use_data(otu_mini_cv, overwrite = TRUE) # use built-in hyperparams function for this one otu_mini_bin_results_rf <- mikropml::run_ml(otu_mini_bin, @@ -82,7 +82,7 @@ otu_mini_bin_results_rf <- mikropml::run_ml(otu_mini_bin, cv_times = 2, groups = otu_mini_group ) -usethis::use_data(otu_mini_bin_results_rf, overwrite = TRUE) +use_data(otu_mini_bin_results_rf, overwrite = TRUE) otu_mini_bin_results_svmRadial <- mikropml::run_ml(otu_mini_bin, "svmRadial", @@ -91,7 +91,7 @@ otu_mini_bin_results_svmRadial <- mikropml::run_ml(otu_mini_bin, seed = 2019, cv_times = 2 ) -usethis::use_data(otu_mini_bin_results_svmRadial, overwrite = TRUE) +use_data(otu_mini_bin_results_svmRadial, overwrite = TRUE) otu_mini_bin_results_xgbTree <- mikropml::run_ml(otu_mini_bin, "xgbTree", @@ -100,7 +100,7 @@ otu_mini_bin_results_xgbTree <- mikropml::run_ml(otu_mini_bin, seed = 2019, cv_times = 2 ) -usethis::use_data(otu_mini_bin_results_xgbTree, overwrite = TRUE) +use_data(otu_mini_bin_results_xgbTree, overwrite = TRUE) otu_mini_bin_results_rpart2 <- mikropml::run_ml(otu_mini_bin, "rpart2", From 28b3a262a6204babf61a11983dff3b17da5dce80 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Wed, 25 Jan 2023 13:40:20 -0500 Subject: [PATCH 03/27] Document lower_bound() & upper_bound() together --- R/feature_importance.R | 29 +++++++++++++++++------------ man/bounds.Rd | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 12 deletions(-) create mode 100644 man/bounds.Rd diff --git a/R/feature_importance.R b/R/feature_importance.R index 93778bf3..4a113214 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -243,25 +243,30 @@ find_permuted_perf_metric <- function(test_data, trained_model, outcome_colname, )) } -#' Get the lower and upper bound for an empirical confidence interval -#' -#' @param x vector of statistics -#' @param alpha alpha level, e.g. 0.05 to get a 95% confidence interval -#' -#' @return +#' @describeIn bounds Get the lower bound for an empirical confidence interval #' @keywords internal -#' -#' @examples -#' x <- 1:10000 -#' lower_bound(x, 0.05) -#' upper_bound(x, 0.05) lower_bound <- function(x, alpha) { x <- sort(x) return(x[length(x) * alpha / 2]) } -#' @describeIn lower_bound + +#' @describeIn bounds Get the upper bound for an empirical confidence interval #' @keywords internal upper_bound <- function(x, alpha) { x <- sort(x) return(x[length(x) - length(x) * alpha / 2]) } + +#' @name bounds +#' @title Get the lower and upper bounds for an empirical confidence interval +#' +#' @param x vector of test statistics, such as from permutation tests or bootstraps +#' @param alpha alpha level, e.g. 0.05 to get a 95% confidence interval +#' +#' @return the value of the lower or upper bound for the confidence interval +#' +#' @examples +#' x <- 1:10000 +#' lower_bound(x, 0.05) +#' upper_bound(x, 0.05) +NULL diff --git a/man/bounds.Rd b/man/bounds.Rd new file mode 100644 index 00000000..db397b27 --- /dev/null +++ b/man/bounds.Rd @@ -0,0 +1,36 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/feature_importance.R +\name{lower_bound} +\alias{lower_bound} +\alias{upper_bound} +\alias{bounds} +\title{Get the lower and upper bounds for an empirical confidence interval} +\usage{ +lower_bound(x, alpha) + +upper_bound(x, alpha) +} +\arguments{ +\item{x}{vector of test statistics, such as from permutation tests or bootstraps} + +\item{alpha}{alpha level, e.g. 0.05 to get a 95\% confidence interval} +} +\value{ +the value of the lower or upper bound for the confidence interval +} +\description{ +Get the lower and upper bounds for an empirical confidence interval +} +\section{Functions}{ +\itemize{ +\item \code{lower_bound()}: Get the lower bound for an empirical confidence interval + +\item \code{upper_bound()}: Get the upper bound for an empirical confidence interval + +}} +\examples{ +x <- 1:10000 +lower_bound(x, 0.05) +upper_bound(x, 0.05) +} +\keyword{internal} From ecc59cbd851e12423a49e8db085bb95fe207cc6f Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Wed, 25 Jan 2023 13:40:41 -0500 Subject: [PATCH 04/27] Update feature importance tests for Conf. intervals --- tests/testthat/test-feature_importance.R | 201 ++++++++++++++--------- 1 file changed, 122 insertions(+), 79 deletions(-) diff --git a/tests/testthat/test-feature_importance.R b/tests/testthat/test-feature_importance.R index 79d2fb2f..bb346c52 100644 --- a/tests/testthat/test-feature_importance.R +++ b/tests/testthat/test-feature_importance.R @@ -21,10 +21,11 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049", 0.6473684 ), - c( - perf_metric = 0.647368421052632, - perf_metric_diff = -2.1052632526164e-08, - pvalue = 1 + c(perf_metric = 0.647368421052632, + perf_metric_diff = -2.10526316379855e-08, + pvalue = 1, + lower = 0.647368421052632, + upper = 0.647368421052632 ), tolerance = 10e-5 ) @@ -37,10 +38,11 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049|Otu00050", 0.6473684 ), - c( - perf_metric = 0.647368421052632, - perf_metric_diff = -2.1052632526164e-08, - pvalue = 1 + c(perf_metric = 0.647368421052632, + perf_metric_diff = -2.10526316379855e-08, + pvalue = 1, + lower = 0.647368421052632, + upper = 0.647368421052632 ), tolerance = 10e-5 ) @@ -55,52 +57,16 @@ test_that("find_permuted_perf_metric works", { 0.6473684 ), c( - perf_metric = 0.639315789473684, - perf_metric_diff = 0.00805261052631578, - pvalue = 0.188118811881188 + perf_metric = 0.639315789473684, + perf_metric_diff = 0.00805261052631578, + pvalue = 0.188118811881188, + lower = 0.621052631578947, + upper = 0.655263157894737 ), tolerance = 10e-4 ) }) -feat_imp <- structure( - list( - perf_metric = c( - 0.629157894736842, 0.605473684210526, - 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, - 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 - ), - perf_metric_diff = c( - 0.0182105263157895, 0.0418947368421053, - 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, - 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, - 0.00768421052631585, 0.00984210526315787 - ), - pvalue = c( - 0.238, 0.099, - 0.188, 0.376, 0.386, 0.356, 0.287, 0.118, 0.218, 0.436 - ), - names = structure(1:10, .Label = c( - "Otu00001", - "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010" - ), class = "factor"), - method = c( - "glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet" - ), - perf_metric_name = c( - "AUC", "AUC", "AUC", - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC" - ), - seed = c( - 2019, - 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019 - ) - ), - row.names = c(NA, -10L), class = "data.frame" -) test_that("feature importances are correct", { set.seed(2019) @@ -117,7 +83,36 @@ test_that("feature importances are correct", { seed = 2019, corr_thresh = 1 ), - feat_imp, + structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787), + pvalue = c(0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436), + lower = c(0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947), + names = structure(1:10, levels = c("Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010"), class = "factor"), + method = c("glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet"), + perf_metric_name = c("AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), + seed = c(2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), + row.names = c(NA, -10L), class = "data.frame"), tolerance = 0.1 # https://blog.r-hub.io/2019/05/21/nold/ ) }) @@ -137,7 +132,36 @@ test_that("feature importances are correct when tibbles used", { seed = 2019, corr_thresh = 1 ), - feat_imp, + structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787), + pvalue = c(0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436), + lower = c(0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947), + names = structure(1:10, levels = c("Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010"), class = "factor"), + method = c("glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet"), + perf_metric_name = c("AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), + seed = c(2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), + row.names = c(NA, -10L), class = "data.frame"), tolerance = 10e-3 ) }) @@ -164,37 +188,56 @@ test_that("custom grouped features works", { seed = 2019, groups = groups ), - structure(list(perf_metric = c( - 0.629157894736842, 0.596921052631579, - 0.633605263157895, 0.639105263157895, 0.642421052631579, 0.596842105263158, - 0.640289473684211, 0.629868421052632 - ), perf_metric_diff = c( - 0.0182105263157895, - 0.0504473684210527, 0.0137631578947369, 0.00826315789473686, - 0.0049473684210527, 0.0505263157894738, 0.00707894736842107, - 0.0175000000000001 - ), pvalue = c( - 0.238, 0.257, 0.337, 0.366, 0.337, - 0.089, 0.208, 0.337 - ), names = structure(1:8, .Label = c( - "Otu00001", - "Otu00002|Otu00003|Otu00005", "Otu00004", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010" - ), class = "factor"), method = c( - "glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet" - ), perf_metric_name = c( - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", - "AUC", "AUC" - ), seed = c( - 2019, 2019, 2019, 2019, 2019, 2019, 2019, - 2019 - )), row.names = c(NA, -8L), class = "data.frame"), + structure(list(perf_metric = c(0.629157894736842, 0.596921052631579, + 0.633605263157895, 0.639105263157895, + 0.642421052631579, 0.596842105263158, + 0.640289473684211, 0.629868421052632), + perf_metric_diff = c(0.0182105263157895, + 0.0504473684210527, 0.0137631578947369, + 0.00826315789473686, + 0.0049473684210527, 0.0505263157894738, + 0.00707894736842107, + 0.0175000000000001), + pvalue = c(0.237623762376238, 0.257425742574257, + 0.336633663366337, 0.366336633663366, + 0.336633663366337, 0.0891089108910891, + 0.207920792079208, 0.336633663366337), + lower = c(0.581578947368421, + 0.463157894736842, 0.58421052631579, 0.6, 0.623684210526316, + 0.523684210526316, 0.623684210526316, 0.560526315789474), + upper = c(0.668421052631579, + 0.7, 0.678947368421053, 0.668421052631579, + 0.657894736842105, + 0.671052631578947, 0.652631578947368, + 0.702631578947368), + names = structure(1:8, + levels = c("Otu00001", + "Otu00002|Otu00003|Otu00005", + "Otu00004", "Otu00006", + "Otu00007", + "Otu00008", "Otu00009", + "Otu00010"), + class = "factor"), + method = c("glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c("AUC", "AUC", "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC"), + seed = c(2019, 2019, 2019, 2019, 2019, 2019, 2019, + 2019)), + row.names = c(NA, -8L), class = "data.frame"), tolerance = 10e-3 ) }) test_that("empirical confidence interval works", { x <- 1:10000 - expect_equal(lower_bound(x, 0.05), 250) - expect_equal(upper_bound(x, 0.05), 9750) + alpha <- 0.05 + lower <- lower_bound(x, alpha) + upper <- upper_bound(x, alpha) + expect_equal(lower, 250) + expect_equal(upper, 9750) + expect_equal(length(c(x[1:lower-1], x[upper:length(x)])) / length(x), + alpha, + tolerance = 0.01) }) From f52db489eeaec1c7dad25d99998e436642769fe4 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Wed, 25 Jan 2023 13:41:01 -0500 Subject: [PATCH 05/27] Recreate feature importance data with new conf. intervals --- data/otu_mini_bin_results_rf.rda | Bin 96759 -> 96774 bytes data/otu_mini_cont_results_glmnet.rda | Bin 52851 -> 39442 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/otu_mini_bin_results_rf.rda b/data/otu_mini_bin_results_rf.rda index 47a990f9be083a2902caea0b6418a5dd9a358721..326b76402310fa21226c00a53538f0c28097d6e9 100644 GIT binary patch delta 95235 zcmZ5`WmFtI6Yk;;ix%$!i%Vf~C=|Ei?#10*3X8*H#aZ0l-QBggLveS1soj3(-d{IQ zGRc|DOp=rNkxcUPfD-YDLLi}UBgiGL$DpCda)c#<9DWZ?#HWGot@H)~{=d}Q|3Aii zfG<%106-cfR|5wi{67(dlYX?Oq2(1sX$z!(EIh#L|LXuCUYCE21>hoi=m2(o{xOkm z{7;4VUqtT#fERZc1TmraidWO_7T!DjmKR2wM&*EjTfjatG*#3DfOJSyB1IGpKq1C` z#$|y4kjww+2mLD|yLj;dXQ4-k!D1+?@AUwHMNOuB02x44J5+N~%mg6}gWdmsat{5R z7NS3Me|Gi)^4~kR0{}NB06Z~3{y|p|fB*ns0wA;k5bAT3Dp!&!kyEsY02N3&j_4Nz zcFa)K!eTlshlfayxq-qEe5n#mA-Ns3%c^=6$1eykCIAQ?2rx&4L8K)K7ZP0JX=QSZ zlqF56mI(qNgP5g?Rm;UZ1`f98{E);DH2+P+hA1FC`w@VGF0CM~4r9_YL6Ku?2b}bT z{5%ub2O#S7qrQ3gpSYlvlx5>K*SYnhLB*)xf@`N}tq4-ePoeoD0LlaZn|A8VFMitv zbz)btTL9FcQ&KM^u}1)PyDuU~h!_*@^{z^6>}-UXDjCA%CVZ6-siw)GP2&3bsOEHM zmafZH!)w3H>ws%^fvTZkYm#c0&4iD7b0I<|RE%ITAfgj#4lxtyFu=L3Y!1x-gVI9;n( z^aC<0XR`QEM>KLms{sIDYXhl?jDog)>2y7yf4o}XCMb@g_WXm=8dTks_#*<(KmSI6 z{G;SH0OUpdQZXbkfD#ueM*bj@B#4L5&Ne86XHljs2ZV%HI6UJ zFAg;V#Pd(+U!DWZAtb^Q=6C=A)J%Ygm<@7ng;YXu2CPs;T7=`b;GgFI(i{|k2ri`IS=2y<6)FB(q#|5WOmTc7A5U}R zf8%5{$H@R96zK>tiWK8`hUbfvxaB5Fm3V9`12b)GqX0-^ipc8_<&&7!mr=oTy0^Z2Y6p@FXoiW(u z6)}JxCvzu`NHa9PtBcUtr90H;wns;8UhPOKo#_o+K1@tqz2uedSX=Z}>kK#TtOZ;s zOCsHU`SXbS_c4BL)*AEEP3T(KDD$r`za^gOehW-t7yPVFzx|4_CB+#2`xgFdlG+cnKN5x}Hj`{x>+16li{O+1=JVrzK(#e=+@Xiiu^a*eLyH<7BUt9BBAT*wr>XZ&y zi&38B0dp$&kOk?hW<{*F^3$HwFRQi-TVa}Uha1EA(IE*`hkgxJU-wQ0?;jO240gXN z>-dvf`Pb4dYBzw2kze=_L6D?4F5Fo&THRNP{^(u}bVsFuFEl8acRP)(_y{{~;jhtL zVDh$aGSa0?R(}(7jcoXmaG~qARR5(6GTl`aS39Fgnj>NHSg=WYJW{6&3)(LVkgC9t zfqyD6StAPPo%o~I*!2!Tf#i>qgQ1)fHsOwh228qLNDLNk+ogrX;8I3_b4T^F_(r>d zIR%F0zJ4wDEWged$-sbPdK&p9R;xz8_LV*Hk4zE7%KSSqeszE2A<*{IW9(%2uT%o1 zk&&8xXPV1J0hhC5w8sO@nHGvT#HcJa3_cNiCS2oJYt7#wYzaPjKIxklQeO{-+~x~- zzgvsPqUSxHboVEshz}`qrv&gG^K^Z~*LIDw@un%x`#YJzT0^g6&8;}P+_1>~z|qZu zy5-QaM@k>Br|;9{5DLAnwleu{8F**PK+iyeE99rnHB~o{JzO8en98^ylj69?7#)Pi83z4Xu~>+_fFE0Bx&ezw|k7 zj4_RDALS*a-F?bxj9j>S~8W)~HefsIC5R6-J zq$Ii3$PHN76AyMc5fBR=1S*gjQnFGAhtU-g^qG{P5eYs_1FR_*T;?v>ojEJfAPHLn zSg8zKE=Jz$+%Q_w9IrHcAfSC(&8hj`&9SMujqeEf14<-duc&#KMU5C!St~aUzoZ(+ zBQFIS7>tF5PkOc>; z+p5)i40zq(0Xd_D?6LOt0_Wx=0X3{djEXuCK|NK!^^D@OtcZh8SB1S){MI=&wk%GE z5GvyV@g=)+tF{+XMeGDALL`AX6f!JvS#;-d=ygo=GbvQf3H>s|a-969Vo7w`8Jn4D z&^Wt<4exlPn#I|v#w$mh=eZ4?}=anoLXlc=7St-6GOgWhe2Nw%w|h$QvK+|Jn6Q1sb$u&&a_QSCVCs&n!hnPgzG%&pSe{N z*nYb~#C80OSt-U-^S(a5#+}O+i6fL*yhANse|0Zk1}lSCLpdx78O+~d7~(iS1f9FG zp3DgqR<2dUINqYUWTs?k&?^%{s9b&z=Fg{JF3o+!iL~wie_5L~BN)kr}id#Vj zt8%OzZaJ8n(}Iq+b{joh5_HZZRk5vwMY z)MJ2$^6Zf|SkNVnC~BOl#WNxZHDnG?kLc8!Hc4@f{Hn)FwWNB6M#xB-s9sZgIn)<+ z8%kY%ZoyO0cR#E>Mo`dLC_$lk#N?6dNk?Y3H8~u$z&9+xDSVg(I(0lQuMqyuOiPEc z>WeG$6WiFEZOX<)mh_l74eu?yCctgp=Qr(vpjn05;DWVa1s-uJhJ~FK6oW`zoTd3* zVMM2yl?S`~;&%J%NFbxR7Z}Vujm9B%(G{2d$}>Z(Hfp=)GfPr{Zkpmy_^y^y3KTLA zU%HO(869+Tulu<64Vm5$y#eh59;!@MC6!j(op&*z=D?}UP?#|VhN`o-ELtm*72Vf4oq z{oxeK5Tf3yzwF^b)WC*IpH|mE2P3%J*kn2EOu`r9OnK9(wQqF^h-Mwl!L$7>Dsa5j zxy|2V9eo}BzAVT7p-WYE8~2{AxT)G=7bhfEExMFYaFyM&sj4Upx)LA~Ia%_>tBJAC zRCfPE7uH@~KNSRt^Jtjxq$QYwb(iY2_h zbE-irnr?qU?^4Pp%4s>rY>7Z6su|*asVOfeStwTKdL@fW*j!^yH?jJ`LCBPb0 zYvg-JvW0`?IWn6A^*gcTgf&P=lGC}QL`QC_XjE72%Z=#2nkm6*D|^PZF?7#UrtPvE z=_Vz(NfRHp-{A;GusSP~@RaHxEUi|KFGT1K$h>~$Wm2UQI^OtreVe-tT)Isxtvb;n zDItBqj_`5Uj>7y!ZXzsHnolnjJy#%L1&d@E-*z@LTMu+VcYCEhGW z&FM4#AO*2&Z~dKt#C;~4YT<8F?yW7x-@B{wPDG%<=a=qPD)!B`eP&$c@k7A zU&p|M)GE%~h{TTu~87F}5`JXIUj*XcyqlwE(z zqAPUwudjuZWZK0LmX2B=Pwo@>b(R+cnOMgmYbuGnQmV;JPB>s$)VB(KK#xvqk+Wax zqgB#rMqPztjk5ln6=Hsv_5g>L4BC$$kpJ`oit&BWj09M;xQOLX)(nwK>bd<*Gvo-Q z;YK0Q97$Fc;1p*@ITtz(hHXg;VEUI-S$_>;wuQ26dQV`+f`SScLJa>Y2=D8exSVOa z&p`}xl0-ZseWtv6culJvZAUTTG|pQzQ`m@kEcvf}5GU77X1-MC+AJoQ-7Vf|K!z?V zN^Oj~a#HY~;FM+ynEZlD*NL(KUP)&%7L*Qkh=T)32=_A)LEqw#C)*1#1oSF3Q-(Ox zB56IFDD){?>RqIG3k})oN0#Ff9VzQ^eswE18M=r!bZAdG3Y9K-#*0D7d!klViNC~a zbACj^H}M=5``oHu$9xBo5-l`#8kDU7j3|~(k&=E^$66blKE-c*BU52;6)N315hj3= zyV8CRk~oZ7dQg8&@j@9G(LQ{~)-f>m^#dl7bRq=oBM#V`G0S3A+MFSFvu+OiqCuJ} zBd_OHZ#CknOSSerb)LF@_$mUYxeWassvzo57gwMRR?WTX4UQ=k6`K0;(eXusEDdiEj-Agx8j@;)twX*n{x3M*Ny}2Ojzn{oQ8`F&f6W$ihpUvX?%;|JHy3(8eBqb4lK9q z4@i6JVEnEt>*d2t3R^J$7h(Ye!ij3rSrwT}0uq6O4_whs)=O+&zUrEnYw{FOjiy*S zroHosGTD5OT8xS|35uz4zUB`tRSCaTC1bTS&dte&$i_l;2kO}wd5C^m*EtoF5%wff zeC}uStkNw!-H&To{y@=a=dLTIb&?P!mGMSoO}dIk4|kB5Nf81iJzG=*)lE$|Tm5O4 ze6^CZjDByr*$I0Iut{8d6bT7JhdTP2*9~>QPn~%6~M(&HW^RcCk~*OY7YlZ_M3T_Gkfm$etlkM<$2E#Y5VB= z-*o9(-T-l;njYAamPf|mLG>Okja%j!Ytr{?4G=cE79WOUkF7{;N2{*zlahJ;PSeX`8&7WKwIB)k+q&PPW(A>QxUYU7FdcDqpyW2I!3Pc0E7l zh`ZO=v9YGWxavNGSwNCzBO4Vh|FNC*mO&A-IP}?Xd&nLAsY9gqsWL4!B|p5Z_LTEK zH5`w9k?BlFqIu%@VRekAg2!6_wpWIM9;4^r?(Pp;-Y8a?risqd*pes`0f^ZpHe=-h z#m$BHBzi>l6tpYS~ zY!a7WTIcOWts!5J>OCrN=Xr_$5m>WNIn09>0fB$WW=_PrAGg-0Nr0f~YPo3SG68H2 zeTyB_m-d=4j2AS#=^?Nfn?BW0zV_gJ%t?9@#k(~8I?rlrVtUN*gg|d^cL)~bp#SL- z3k)?VbVOfSYgSdn+=jsvznXg_-hnW$TZLNPsm-h2X}OcS&~SG=I7R5sW8^cq)QFRz zn#3hVa`5M!pX->%eZw4z)b1U{FW*bOi2C}>H6FH?sBlh2N`sbEg*wheh9ZcVJqGUi zoZ*M9aFEchwB6nKWQX?NoF)Wz2=AzvkB3&YS_tZWl*X2odjt#1d#x}=4H3S)?nsv% zhYZeGeq_13JXYP&8_OSYQzvrLVI3mH_5KoQ#wG>B)MsQT9aHz&wADAn*t}R-qBHll z@$8TppvB-eZz~~Rm>=UaKq+Td%+a5gX@G};8DNLzge0T|W@U{FVzQ+qm(SCc-q7Zf zB#PTge(fBpfKdBrTYnu|p8QsMV;kyeOPkgfxORr!|_9OfoJGJ68}0PSl5!&PFv=`Md$ndj+)%KBBSk7 z9_-KXEByjc;Sik;F!9`}`lx#X;Y-R~D6DpIZj|enxq&QaCiT zR)e{aL_)^dfuXBG1j7OoV7Malr;`pp0GMXtw4SMQt@FQ11JUxgYqFyY#cGN z@ERwk+BYPMU9G!voD&I@RwUhR7W14<{uaWi6D4oGwQ3{6mSc$1F8+NUU1}*~MKgTB z&c|tiG9aGAl1US%8jl!l=7i@lRNlRIsv(<2t4*+gfw*Q8A#FjKM4wC>A{x2EBZ!l; zkEpn^P&z!43IoziBq`gALDQT;7}SDPo?=t%hd7nq5v9Pjyc>M2+|Iz6UjGed4o2#1 z<(9Ok+AyWO8s%X26-hr#U!EYGxUQ6ADH2^!7FD9*?iUdZ7lGL3A>kF>uvv6ENzEyy zA{U6Su&4-&7yv;b^#c`xLh@_(bzk81@&B?!*H3m49z0*Kq23|$B|A;E+0ywm z$x-p<{P4d&G;03Si0eC$L(0_%@Yy(o$43;#nz#S`SZTj}`}^cG)5EW8(Q_@oKYhy} z?>_(a-vmp0p1dOSiiB9Z0CW~0^y%-oD)Qh5g}OiJB)AMO)D@~Cc@=0Y^?3`J#4Qb{ zzw6ty`tJibzdLh0H$eG%oCPn#p57bW{WklZ=qs{Kd1Ih5fA%Ho@=a0UzWY5Yp+l5N zfQ4KA&kEzWo_)3e!*7cg7om86ofoaJkDXr*D&FcEogO=Md(!u819^oK_{&Q4h1%U1 z9b8??TY*2HKar^J?7PUHMYU|`21!_$Uj3?x=5Q;HQTQsj47Td^u@5?X6Wt zh*EcIhV?_X1k?cC)>z9d9jku+lY2fCcq>W}i#Rc6BPX z;5fB+GO{GkjBcSKIGB>u6Wnlgc%#E2==`jAmnR{3*k!kDba8cj(z`PL_+Q+7NnTyz z%w+#X(b17TH+7>sp0)5ZZPUOfTXemu-be~>)`E)_&MN&I=zozQm7lZLX&kgATdeKU zD6gk6My;2Gwy7^4&o1c(HqsT`oUl zl<`d>TZyDs?ekHptK@zfo09fp2-H*>Uf2Bkx#JgAJ2&##qrJ0_uH8_>um(ki0T}mq z&ULSL(dT%P1nS_`vAOSdo0_IYjaa#jo;s|l$T`%rYWF9b=)cX^h6k0R{L#D3u0J$> z*I#fx2`l?m|GB&U^HG>u#@W2j?E0IjYUVfV8^?!=Zuj=j6mNKA#DfvFc;BK+io;TaO1rh+q24``}B)`&7%5Z>l^XX`7K#5f+cn5JES_3 zcK)FAhBdpR*)3*VGeF0PhkI4tm)2T4XeN7^5T>W{FDcLigxl{bdj(=K zBtzCrO}aM_J0}*9M5xm^RAL>h6LPLKJiI~E7Kc01IN7nm_u!XvHNH7y@JVKKPlF-u z1wmWZ*}z?im$1pS?}=a2kjz;;aKCiTn|+q*qP4Z^kWR2|OGkt6ggxyQ-%@wKxy_5m z$>yE~>cM5TF+>252y+h8w>ald*=i_R^XT}NO|^CE;SHhM^(>#t)w68NFq-*#?Pw%@ zil5WN@K}vcHgvS%p1$Vj>?81S`y7zH<>lp|we9J-lNX$r^Zk5lv&F6_j@H$y2G#d1 zt@efdBJ#J2rnNHyi|*=$d|i?a=Um(kK~@hd)XR4}aH(dqQFMsaU1C3XV*T*8DXxXC zyUZ^_=-KVjv95hbKCB(W{Cpo?_>ICgREYMG8;z@TwoK{m>mOD!(&wN28SW)LHPfP_ zX1?9#PU!|tGitii6-F_>zlOi`>G%9c_{DVlV@9o$h>j=g=2X&d#-Z(x^Vjt^iu2U; zRA_NFZzU@~-@E&kU+tI1$DUh;xgl?O@^*wkZsT(*veq}^&bHTaW2>f6^O7{zdE1hX z<<6a+-UC6c7HWU3H-UEVqc#9;YaJfL=BafalEHNRrf)aqudIoU`96Y2x?CgObH4o6 z=Vfn?ro7p0Te`IN4M*W?SwhY?#N@I(9O&#Ae;i5Wx9*YQBX1t7U}{@LA}_lKq1@3- zL@M4;k!5l+gV0XpE`I-R@q_Xo^w%*T`rP%}vJSX!gNdaxr@~?IFT=8x&+$`XPtu|D&NgA5%qa9P zyRe5|jDG3eCY6p#z(AgXXNz;H(WX|6ztHc^Uw`=NI?}a+k0raP#)A6UgI$}J#Mj!~ z%UVa<94Bip7%z$O)Uv+*$3opTE!%m5ntDN;Gj` zW4If8>m>XA!jpd^Ef-p|!!gA(o4X0+pkv!yFpq>)w{2wAru*vkqmVGgbFVXwx;1`aP8_Tyn=D~sfg;ZkQ{7Q<84l>P6Q z9}{e1jWDwJR6)p)gdiS^;xMR`s=9n^F+(GG5SbcL4oo1w3kqgd#Awn&jq;0{sdU_Qhl?)`elqGlLgU9(KBU(g?*ESB;Rny|^$ifT)tn6#AM-!M)kwExj(a0GD=qzn4-p@rr%G61@IrtfEOYk500pE8+9Jm~?$@rzF#a60v>!oaqK+;^GJUB!F zIlFwmU)=LQQwqLwb5b4Nc z^Cd`Qi|1sld)jEg4S+aK7{kxzU{KDcf`jTZBcTSFosp)cNrQ&&zXLtIm*edsjVu^e z$YL5CjKujJ_hH=j$H$Yl^c695w!j&f1U4cfzI=*UG{N*>GO0`i?cHPdARKOGPER7E2M$>F zkTIK zU+zT%dfS!~!f9gd0)?+16wHlZ)_sHE3yF=S#eASO#AuU5(h1Uf3<5}EGzJBq6s;I= zP#jEv4#M|bA%*xw!@CF-PTb(5udN>D(72}Bb8AYmn!mFVypYdx3Q5dF;jSZcZ?k(b38+zWKHH|c1j z@|g}lwTr_Z$HJx{{_aY~0-e9Bqhboawr#+}VZfbqZ&&QJB5jB+VL1?LRqV(DZBlE) z<74F`*c?JrY@dv(%+Fbp89kUzw`#4UrQC|%_NC~Q-+0G&CdED@>!grM&#OqzPd~nF zVCSypMl)i~&k#|A|898td9t@A**jS%eEA5s%nNkTUG&+i#$BqaMO9M~qiUG~JlruU zXFBPVnl&_DQz3EVh!Mq+NJ^&*6~9 zmNHgSp8Y7)$l$W3gSo!7$Qj18X=iO?>Q8LXnymYh$ak$^py3T!-Zm7(N5fXG;%w91 z*eD{MX6@SWZu44Ntf`^%vJ1D#sVFRB6ig?nM2;D%#_as8@2o*9(gWj} z>8jQYv1D3|b{uAuqm}(j>bfo3Xk?w)Ge+9vGo8!4GAJD}3==GAdwP{@*Rgo0Qp?@# z6R}{jHU+*CqvaOTm`Wn(jWRcII#Em2RGPhdo|EN@*d%L^1%m$tzmUOeR81C(f~c_69H_>EV(wYYf%S10+oq`{ z{5y{Yjei?{-sS73_yxxb|V# zc4sGsP_!+JXCd^_*l}{MNKq>$w%Xa@$VMQx|kHYf(AgwZLJ= zOITV(bGYB6BXN1i%I4^(%m&<_=^;3?WWY-1(r$Ia)pRtTZ8b5<8gexgr*ZWRLB&!*18cZX4J&=azS9Mv<`Nq^@9_HaYno}TLq|hgk%QdRCKOd zIXddJ_nwA|YYNYjaaHOv*aO0CSzd)K2MqZtG*BaZm^)$_g91FpZr_esSEr)`(`cc+ zJUf=q+^GrOn`Ea;FT`?5mydFxn!IJXJg%%tF}>5oPA^NNi-A>Z7q;&weRw(0UE*YS z<7LP9WM14%GOTE)!cL?Mz>SEC}IVbmW=7O@9%?4 z8Zph!_r#B&H4X$W;cg10KlZX#f3nOYPxl86ZnlL@U} z6A7+~l!Jiu4FM^c2q}jMDMSp(UkoWt6G^um4GhSX19_NXU8(78($+Qr{gB0vQV0`O zm1B<*z-lJAx0v{;=pUhCp~J3|AN}I1H4=!PJkamZ@5L^H&vuNydl>#f^R4^S zp1qopIO6uUQ?z#eWT1mL#QO49C6HxjwpYX9uFE%@0Dw0LBZDvggzD99;=P&^K+Cv) zv%?%$?E+`!EXTI6Yy8rR=RGSn!$_*5;Y7Brb5jn298Mav>Q@2ZLEg|P=c%WE;a&Cb z$FzkfvS-hWSDC-3->qIBdH!NxhO%!#NXbBd3~IqVFnTa7)8bPblyNl~u#{1UBPuhd@SOX&06mJ&lL~2vWfS1JP9%!AL|X;J51m z08j;;AOxH-lPqv+4Bgq?6t+mhpkzQr#;u^i2H{oT?&Ms0woHd{CL*}z0>$x+NlThZ zETiM~zyt!~$kYr3R-%8M?ur6GwR;{QN`muClbE9EyMNBs5i*2H7ZA`9MUjf9#3reE z=lU|kLP#MRV#(kH20}Wbl!OqI6k56UByPZb?B}a3c^Etv>aYh&klzLC2%U9q;Vbfn z4Pcg$czP)6(h}(j68cmO4la7PPJnU|1(J}loQEfpopZV{A&R8n*i7`%6NcDn(QS7t zbHUZU1qz6axaoVRUxDuqeu)0~@~tb`m7G^?katvRi@TdKECB;8D0#>RY%##lbAI-; zdN4E5CWHNRRXwUOQGay19J0%3woGk2DKtR{^ z^MzfBP)(e_`mWkQV#Tuf9;&{rP-U>NaJ|*OQJ-V$_;c5ee8ey@AmV}5-IuZ-?yW;7i(c+@J1(X26FusgBc=1^SEUyHXXz5c49W_zHdj47+c$HK|!aIQQ&X`hAV zezwG~&FY0nEjt~-QA%8utHYVi604ng+hP7NX2k1*lkKc>e^!f3v+^)(QolJtixJH<4rj*98Ff7D)=(>B zw6f8f%qVsG%rvVH^N6Kva(m?0F43$o(_`^vH!afOuD6;tUdbfJX;v7A>u97H%7~S? zawnE_&3jXLOFT*|3>YAX$ERpsOPjX)?8bINfbJiI3Fs)>T?vl0qYJuPYobdub7#7s z<^JVM+CrFS*R@24PR&t4|VCfPw&r`K)VWPG)RGklXXU6CRDVnqUU;!XaE z@-o<)5SGb}s=1n2t{Hy9>`GP?baV)4@Q*Jx6)2@k% z)LWp{Ys+riQ#*g_bGUC)@a?)J@nJvI;Hwa5Nqtf0U8muGBXOs&zebDQmRjay_S$qY zrFu{%7BXuWna6|evhA|BMkz;?ld@bzS+hjNc!HTNva(|~Y+?m$yHQ_>tvSR^@M2J& z0k4=!uM^h^&RMV5-;!|D<*nv6(9u&aY&4AWXQkLoD80T>x+I6sYpb@`Bzr;6RHt2~ zO=PVGXk0J6JI|jVs9>(MP>OtHgv%jABMIhO*(|Z+1ipHSSFBg88T9NqSgMp@v1BH| zHy;fgbfHRRS5c$In_t^Zyiys_qRHn07#718M+1s~2Sk9-ty7WkRk;92KmZqtp}5Y! zHZc;uI2REiJ^~kzFpwArI;_bBl*C8=zXTr%AILLV5LHPU5)UehLfi**ifaHhhf#)5 z4pm)&uJ~N|yfM{ACiY0W0IE5Fx6x|cwGaF+6zzQ&!tR&f@l_YU6(aEilwG4l`hfv` zomG9tbl(zIrDo7{YYtfctGIwFzb?G;p9)cZD||C@Zm_Do7&Uz z3pM=^M90!qHl+r#@}h`F3bPeaSxLT-;zks``cyt_MKzk^F(8zHg*8+y2PZ5EDHI%g zeK*?A&lKcMX&T0h6s{VMUT}~0qUs3)@O5kBX_g|QPqKx&7LIcZr0Yz$_6=Dor2`_{TDcBqXJ;L(MRQd%BP*?Gk1Vpk2Z@vAHt0!%q>mJn$)E zzMbn)p0lnj%t9Lni6Z#r;g%H{9l@zzi%wZ^Q5^v-9jEAL&cbh89=fXRV;OO;wd4mS z-Y10Rf~qSiS~J|?=0vN}je=OtXYmx=BUV+BR;xb^`iiKU)+8lx0<|H3sk9;y zZx)Q!VF9VqdNM>Li^H2oa@)|i7q=SHG!79KQ*Q&?=%kPSN*~m}j6sscZW5QokR`?B zSV_bCC9}O5gtXY%SAV@}owQpx>|aoe&fw|Q-ynW*Goq{hl(lrDDpZObI6 z%l3e;y+8BzuQ(7&)X3*A2*|Dnrh)6TR^DcaO|+i-;|&%1x9BRmZOYd*i#?Pi<~(Dg zyPSr3kFkYj`&A!eVTQxQc4HYR)_hq}O64OK>SRT$Che-@%_SB=OqU6}`jVD1tvQ7nj>>5h%j6jeNPHnVg2gX z-Okc`Mj%S`bMTWbJ-rhn2Dc<+n8f%SPksj756#~xMQma#%<#fv{sp&q>6>v#*U#9R zUZk~>t&pL6f!~{tod2HM&vf zoAxPFQ*6QZ|3`_j#RE7O}7}gqd%TAu% zl*?iLe`>_m<1WdZF++{f_YHd41L~d4`IID*Lr5PPSxF>TgrdZS#M?Jqvb_$-)57by z)bY*LfB|Uk3rElDzcf`2;F_m)9}EBBNCHvp#W6;Hh+z-jm@tYcf`uBm*w0nV7?4f=7UwB# zOr(PmIX~e@v}KS+w$DUcdnjW>zf+6|`)?5;J5>rPV{UeT&S5l}&$6bGo>(L|hA+?oM;E(wlrn~=KZHm=2I%xorjv+W z8eUqL%k*5P^UY0|edH$ODhOVx_IiuJ{9K0^maBRrx0`)~ICifq=m%;)wy_`!+jOE? ze$q7OMPu_T8*Z&Z^Mpy?eSBo1I?~29GHWZCUMgi;aNAEQN)2q+uA6Ci`&OzQOAQZe>}(VB_&4JgmZ=udr)KbmP<+qj{qYKEq}9 zhVHASqU~kcqIOaQ)w|C6R3!`x&R}AC(6yU%=EDL(Ad=Z5GGv62_)`60_wj4_;Q$?} z&NNj$)>E^nG!DKsC6oo19b@4u!@NI0PSe=pGE?*HXVn*`>eh*lXrWW`IldG84fY2M zgPwpA&fz0{9~ICtfB9!^Sd~&L^5^N^II5QXWT$d6J6143-VJqt;DWkUPOi}I1bS+gxF4W)_ZYxZm zov5xP zm&a9#e+gR8h(@fLARg}+hwAhZa4wwwWO>>R=aze1tWMWR8~T5@8_NFJqtyPvKIa1Z zkhgLr;&?2x9nq575A|Xzdu(|;9_lHyKhU=Nw30e%)2ANr$gX|;6I-B8RwMlCtC`DT z?)HzEyS$+o?@n{v*mVj)`&9C>*}ht~8ML*%Sbw}p}gf!iWqYT;~a9|w>X`qwa!MQm_!P_BLqB>1(bT{2nbP3 z>xTIL^Vos0kV1am7%z%bHa_p48B|KL-td?nXeOJJirw{bY$kurz0hK7R87WG!eIy301m9i71I;?9r$v*MAg=)S4u19~Zdnl9HjB?kc)?u|Z zzU%sCD0L~%7s!EIO7LYO0(fGwvtv8zR3OCdaYGg0;*H-?;d-@f_}*M6 zekTI^?$%XncjfN5^q0SFRXI~W3%8H*`+%TsQ~cQR^hPJX-od5rk2lcw&HD}hD)l3J z8KXIEw8$ZHWaLa>Q}hWkFm_+I5f?_?%vJ^s64kGppLkC%PJLM#zvg|LYhTYM07)32 z(4j#eaZ49)L($&r%hZMiJhc7c=IRJh9Ow?TNUC+_H|rl%!9bprN)jhq1s6|SETM3k z(<`A8-nNOy#-^YL7ebT4(@ApkH-Yaz;kE5N+`RnqeG&QT`*0R84+r#a*JhB*Ma$#0 z`Q6Ky%7=}A?m66lc2$16JPJef;|jy336ge+AjAz9zPbqL&NWTo3bx6mX6P%cI4`>1W{qy4zt z##Ef~IPOSEEgOYNJsL_mH7C>@GF+{uG-ow$=m30?LK0(g$uDZAB-tyvY6WX1tKX_g z+YtL5nuHHKdT@eTvd=`cqzcI{^Jih-?zpI;E_6Ziy|wQ0QgZF>=BHzPKnWA=`5h5P z6sILO7N$3|CiJMiNtnHoi_0wTtQ8au_cKt{&Gy&dN1+Ih$i(+&yOg7y7Iie=DmJIJ zf)Q&~?(rPXYHgJnaA8`VxMfTN$tq%_It+YD-Hb$bG-d3~PN|kYtJuU~(pr`ih0kXQ z(hh4o9cybS)X}uHrG{{hP={=UjAQbRoUTU4Pe&j14b6lS;9A>r{N2XQugADANQkr>+X_yrnh?g+ zR~PuRFZK6L-{i~c1StX9r|IX`%k{3E%WNb=XzrIg5kG?=!0lT=-A&?s0uP-Nk-no{E&o{;jWK328y}i9XujBOH2Z~5ohkpq!AC}X4zj+rK z49cMb5s`ZZY(eJf00!~itFbU@MAy*+h?0V;q2gKA3`KgXU}7eFTvdeUk_`hLLn&_# zw3tSHHHmFe+zyN1wYy8$K*-&kIBue{_=MzA-fV)n{3A4g>95G^H*gKL; z4$(rq%R#k+=Xeo2Fn7AU?W=IK@*I^wX%%I-$&%cRh#N98NG~B2(-mGj?;4L%-R`F_ zeEnSbf8inZ@4>A|O(V$nYDxFv$w_TYOUX?uB1*}#5#c7JCZu+IRS~d%z$F#AO6SwUkxw~BDF&$4~_`^2Sn2#xQT#?fZabM1<;6s|0$YB{2u^UK&ZbsV}>|s zhL~xFm|=z-XEmbqx{rC+Z2sTbaGftvcb4R5QOMB^%`JZlk9y{ za#I(E+LCSv(hdqQfds)6yl;Zps~w1YKJmYR(TO9;Pvx-lZY>Wu3=%vQyE=um`J1Gr z7pp1?-+L(Os*-=xPVLm6-keRl@*x__!$99XmL=CYMANY3cejMoHSKvWGZJgu`hMfxWR!st(uJ#A3Fl>Kya;%}HNoLyGMXhYY)BiZ$ zuxM;EBeOH-d`wKn?NzF}WG1O;ib+xux;11Pt`Wd@>Ih+6 z2GiGal>|PvPD+Z-EqH5#gLXmDs9;$0AwBbuPskWVvqUCaoppqfT6_Lw&SEsWsT_(? zk&3EA2lKU*pff9YWgvf`&5B|dB~q1}BptyXz|+oO3@c4Jqgd;YyL&eoP9vHq?!=kt|Mz_7-*_ zV!eMu5%!=Rry3216vad8I>Hq~u{WPg;&VagV1jn`9bEZi2ZYqAQM8j@I{HUU?xpdC znU4!{Y%qud0aQrPt53V<#D>HSC`Z#P1(amoqy}l>8%z*!R6eJr_;&?tjOBu-WI_{4VrGHfr_;gHZz@U*oeAx&me(~DcC57P)?JQ zLm7Vs;Nj0Fmk1nKtgfM@eZgnEI&+dj>cwqAFd}P3A+%Vkh^8XWc7zO7X8Xg1(FNYr zLtyrWwlp^m6jRUrCC>hAsgo|`ZJtUiwV1HhZ73Y11(Qu2i;y;3?Tzw{tT; zQ{ZI$tl6`3$84B0@?Wi-J-*YuABUKnO1{I*c?j|ee+LS-079F;Lj0L>IsES=>0^Hv zXQ@}m`5ESzV6AYf&Dlqe&1ft6IhL+9sqPCVM#-3NZ3v#RqK;y4;I@T)oU9oc@mI+C z7(Q(|=XTVwmvDO-bpy(J&~oZ>pQ9GRQVEA^-0w9vST*C``8YT5LA@;U##^<$#GWR# zu*bsFf2`Tc+BJ0Ww((1QQO05Ns@i`q>+smg(R3l+I6q$&gFnfSe%Ezv$hTiHG4bHy z)*Mm)8%pEgZEGtixYfu?oD$`mBO_7gMlwK&sob`$>uTPxxcls@HtJdyFJqw z*Suj3G}pb_KX~OajkfaY{kwmD`QJaAdE?(ahDk`2r>(+4An=d~nz(g&{;Gd6fjl6P zEP%Ka%($M6Fo&-!p~E=t>F2XZU=Scc2_YbYQ`Z?7XIRU+I`YcdLTJPq6oZilR5-ol z$f=xhI{?B9Fqlr9&0!G1o4HYOl*JQQ2Xk(QZrsbtBE`kbO4nCZ(#MeIT)~l2i-IvX zFHKbvrmr!OzxP0BnHH z7KpYHrjArzkX;CI!L>oTLD30$@h+WCRZT!V7(0r*io7TW?g66&&;o9vnxRfWQ-&1V zKsP`R9PI!ia3B$Q71SxjDaxs(Q&JpQZ)5C7R2*n=-KLv$j3EgjG{%4HG@L2XwlT|? zqnhSr!lzf~h?|><*ioXfgKfEv&py8#UW0q*@;>@P`PU!GK6!LW0JMSsS^W={b#>$; zwDr{f@AzBD-j=Sq-w{2Cftuc_vrcm>G8|scYpAyBMnI(bjxMU??UEv}K%$`uQiej9 zszE@CQci*a5_E5ad>eo5_V_o!zTa+cZfBZBFrw2|BolQELbTsH`z|(=JLr#X}DqEDPZU*3OhS+U}*md2fgWzua(g=Pp zgW#GUaDRH6z8^ImJ};B*T{pJwT;}*4Zz;EX)|DgD7~p4{Z-{@F3{rDnQ|4&=_KL~| zf)43@%{I&rxbq1ah6JbYeAg_Nq_iq3+;>`RIEVqpaeI@(Awyu>BJwIQ5|nc_`exJl z{#qLS7c3MQODz<}0zA!`U?_CZ4e^(IA>JK_iGh#XX_KziIFeQm3865L7rhxnv0NT1 z$0^tFl=MR|g8+YF`#8M@qPd+JW^WUXwj+q%)&$V|3yM7dN^@nUS67!`WyY9#{QDK- zJBP@YoYf;bCSVLk8;%s&jR*`gNbGuPPnuzU`nVfN#7Wx;prdAj_ibOJ!`+SVuv{+KUPGjL+(>+e)53NZY1Z~0Nb=Wf2x7W3*{%#D0eEZhssLzdANO8Z7<68Q?yNqH^1_IgflfIzV@fW?nveZen z)2r!tM{iTx+tsaJX*_9scipeT*47_}2KF+#Q0tQ5xpn67G!}O}eU9q)kz>xK?!+E= zgNlD1z023c#xfg)35~IuP>*8CGuV>kk!q5v*W5?XfWE|6Zq^pm&F^fuyK`4LH9{Jz zbtCYPa%Elp>Wty2&u0w*mUGT&%DJbhdXr3TfxL!+-=3s&-;5;kbkOyf zuGm2iUU+t0j__z-Q`=N`wZe?i6GHa3{s+y{Y= zv0Jy;_A_=7n&NYVv7-Ywd}@ERx^$?ksvR(VDq#$F^XUaTK~Oqj!mjjGgegMTI6?`D z;1Gi##9%md=~n@F!B?)XAqWVf*6;H>>L=y$_&gGFI-+qoN8uDw^&F(!KnrYKf-}tJ zXse#3CD!`4%JI?I!_DKPbBl^jxiY%olv#}M%GX(z{Wu)$OX)V$ems8-iH^1Xnugvh zKC_V=C}J9X=MOh%!8+GqFS|3S>t93(mK)JoMcIwAATi^r+elXvs^pE$YvmJsmiLE^yVKHTA(2OEt`n%6j-jzEAx z$mCKG9NcQ89&=(2U~@T%qz(eK*qX&YnaTtVPD}g^Hkq4c$|Sw$`(^(t+3i5DU$^-H zpL{>xcp5sMSY(FhHvW)r>kgRt{Cz#I+Cl2yX`Uv=|EP0;yFY&-{oYGEPj8Mr5y2n3 zU%XX}ZlQ4+q=T5}KM<~QImo2eQrLBD)*EK#DTOl$%GlWzN@HY9Kq1RNiBSe>vtYW& zcxRVAm6gZ&oJh=EIoKVwnc3?HWx~nUHrrPw?!Iak|Icr?hh$qq0SY=>A`Rxy0!7#C z?FeD7!rXn3XjFf;Rj_`2q00)$-4G>(8|NL+ye=$+7?; zZOmEO6;1DX?lR`ey)_+AOGjNgSgMGeMta~b%o~Q-WaHQpr+;7It7~~C+q>=S^oTa& zo^~Fuhf6qKHv8y%%v^`xT*{5J%bh-hXg?@PhaL zGN68Rwk{l#A0h}dC{qaxEXXkJg#|>ux-r{3JwvInbBv0doxlAgdqTcLJBK@Srq*w zP*t7$f1i_(Pa1z_e#cMLR_T`C)vqALmh*TsZt_l4iN#f`l7dYZ%#TWe<8C(XN|gRf|Msf@!wKLL{PzBjfr{$>ZoG9rt!lXS090J^df6HNZ$DgTg;`pGoWxJJ|?N$N01G`F;9-73KVjyKgq~6})cV^2blg4`L*| ztDe)^1RzhZ;%C|Z7JZeLrGC{X=KH?f{ZKRS6)A`U5D-H&(=^x?A-Z`=VvwXbqTg%O z+2QKs_!%Ahz~~4YGsV)0n{j0&xf{l0hpT+ew=i>P4 zkEaL(o*ohh(Z5H|h(o3IKz~XQT+K+Bud3LdAYi#ZzJTa}Y@;#HZ?vz}XMm;8fT%a< z_qzAJpTi!%gWzC5AeNa3uZAYNT7&c!QH^iSS7Ty(A)A$6W*q?lgblhW2n7KEgitjC zq$z)dG0rv+3}4*T+zG!|)$aQJzTd=tC{Mzn7aS-{Umw_qq`=5e11Zs%N*@L ztLCoUAQDMDJo<;n+kTEetLkG)Q)vK`YX2rvj=JZco8V;E#0T!aE))QSAVmrE{XgQ* zv+t2IDnJ2=eS1%j$96L(X}T0Il~cOrwYY!Xrcadg`dNlT2H3%a7~9G-1ML{02*v#` z)AafD{oi-oFcm@lH7I@kpP%l%5;}cP#psl&(v^Z#jb;^6l51emvPZgdl!j%|8FZ8BfA#rzcE4 zf1LV3K80{9GYldJ6+}>q5d=jjh7}4zjVgUWC4lnlG11JuqVyKoT`5Qz0!{lNKJU0e z8$REw>-#>^r7duN&&l73@cc+mm%)E6pm+!-sC=I%yWcS%YOBr?N4xyE_lWi{YCw&} zKL`u85QP}TA}kt-s!0pgbT9EonUTA+7PxF?Q^c73g;a<@1cUDRK0=SUBt9D7h=t_}gSHiMTBv^HS*Qc!dTEoU zQ$~M}7{&t_$p4cFfI<++fT>EN$N*6+Ljfs%k41)SRjLh|p^tmQQ0QlUFh zl1-8dKay%=F;B@!>Bp(`Bx$oN_leY#d9AsF#hgJ10W}?p;Xm7M|d7( z;~hNKeX|yOitBfgl#4+O0z|`fTG5lE-uJ|IA(@elNfJGFy4OtLXpU&`*oG(0*oXor zKcZF(O?$FsSRnJBajq*K((-8WiPVb8edHBxMaZUCT=S!inoukvg6ogF8Lt_M{pWwR zzwhfE2@~$HNJK0W3BG}XekFRo4plyW?ZztCApyK4k1dYVtu#;~3mHNN+p$f9Wern| zcqyq2TU(tuY?t&kUvRaVbPBj(vQ{&X$8k(RsBAN$YWS=$=uIfct$%D!;C9{yVwpo9$~^u5 z@BVu=CMdL5WloC-4)`F10Y9j!kSuu=j5=oeam|zTq5@cC~eL*Pkoqx2X)8 zqD3e+CiAO^nKUGkq>XPmI3^)U6_A5Oo9BIbtC*u-PGX}oQHDVpNwF!Jnnr&N2{Z{q zG{|Czvsk34h^iAsAsR@i*56-Ux2xlv=Q$+CBZke#=WXQe)xf(FFx6#37FeNSK$SBw zgD!9w+ZSofT-A``QVv$2%tO98$uX-1@Z_w<;6tFBp=T1AQ(2G^9(}$)oBW%7U*)^h zk_dt<#ME!H_2S7!{GG+22?2j1HUfiUNGuR&)qVcEc`5li>0?;b5%lD2YAl)d>fr{A zR-;VQOkjaBhFA(Dg&uxK&iC6DlHxm5;(d%>tPC?!48q$HdY+1FvIa8HckxxX6 z1cC_!0#XPHzTI+X)a?8BH#Ny82-xbCb=OI5Q?hb5f`KIPjt~zv(yEGwJfKMghqlB5 z1Bb`Tv=|`j0077XSz}c(B5V>0+DQ~(i7BG?3e33A6=f z{mT{iR{lTRy?WN>*V%u$i$DpBFTe8x>HRiY!TLH5k2IqZUhZeZ2AJ`R8i- zn=+!+>edP^>bG6i`d6NI<(<`CG;Z!l&~4qps`>lA-ZS3Yg(QDn-M6aVdAme26`kBU zV(CS5nkqNj&ab7{ z*NUz~&hG2H?rcUj@wZM~@$swIt&N@9HsorTI>)mX<4qeWdEJu|6lx0wF^KOx_uJ9q zXuWQD=8KzhlN*1163SeaEY#FVyG_aBc zL=VNRy{wiV5t4etCK4Moq>K@g8WB-#z4NMo)KpsgH#}}=DAzUjc*fCVT=8ud-d)_1 zF-G)zeqg3YN>bdd-YQRBCs zb&3St>%0c_aMDrg=I_62$u~P=7QQ#F%X4@SJE>qjGSoWK;vjHL)q&DxaG*^2Ht}8_ zIV@m}=XNoddXIYO zgFzUe)3|>E0BI-~QDRGGQWbrQ8B8)Hc(qJLTyP!;N|vPvo(&lSD-nd@Y~@S>zE@4C zu~?M1q_^RvmYXVTEh=pmQpnILNwG?0DrDcX{Jm=RuZp=EzRKVcUM_gr+$|bU5w{Hn zFi@7A*C(C1V#I0p>zWM~Efi@OEM(QdlK`$^T2g;TEYDooWp}H(9D?UhkDlFns5f^B zVu;w)&AXh-mh9`j?>uqcu)`t?3Ntx1$y(A?AzW)GxS2^THa6usZKjwM$)qaeT(t!E z94R<)C0XX_Oo5pLHFGIW8L)v7=W69Ut;#DGd*_?Q(Iaw1rkkve+agA&0ajB2Qc7f| zMht&r0!}ujP7`4%Fbp7Qg2<5I_$Kga0|PN*l3)-Fxtt0RWeT+MVNsGHhOJCD(&?#*rua<%VE! zM;Q?@0E>YVJY!zA=@OCw)rJtF$H+#i;6n|*uJ~<-ODyfR6BSGcUK}SllxB_uFec79 zEPzTRDQh_@+4XVU9snxha1j zVN|P#AjODgj3-pWW{l%FN)ttdOb8hjG-d@N5MYpFGB61Uf|14Vt-NoK7dKt!jJ4y| z>Fy@+Uc7<}Q%7P>`T_2qS=l&U4H7Jyd(I4_>LG*E)?0(*Y&A z+CSXh4eX+nD_`cFg|5IskOvnAqO6zr+bmft$0E_WSm;G^b?2J7w)48ijbfnH-PH}} zzHiFCXPwUO^XF^GcU@xDG1I1$cku7X4nj zl6XEBqt}LWSOF4j1B|zCE=o#Bm_R1j(OBzYHH?sk02(qt%t(^kZD}A=B3S)4L%kcJr4-&Y=jKJ;L6L!oH(}H#Rzev0CM+b6l=lo;Bi+6z6V7CR4{pjos2)6RJr}Vur$4fP(~xkTWbT z5RtX8gaCmE1+0X5b!LzPW~|K;L`;BN666APi6uNFYstqmOx+w@b4h=tfW}K%Obkg8 zFeD}z78lUw!vb>if5YdZXQMV8Tsnf+hU|5W@S2$%FeFHjwUjbVWcIN$fFuN*tR+}T zO2hyQ1f)rw8AD;E*)(C0CR=G)Xvx#34LD$o3eY^(sib&gDKzeiSh*pKkTHe<0**>j zf#Hdq<2PKIIkwX{D{OyZ2zcb=?|I%lWhfmTX1v{iLKnw3Q$)Z4<3e~KeV(~ykR!Iv-)-g)8Ae4|NMig%t|4sFoXi9R6U@bFs zI^)5Ujm1IENp#xgiVbt;mw4eTo4Dv;5i)5*MlLdu*vz$%l@@<=bZ`vaWdN?07+_@} zHR+U?Lp6+smc|O?2w;(ovUgdb$90-wlZ7(vl!Z3STnwTH5T-DYBC-n@b++4bJms+- z>ynV~Y_I|+H*;4uSIX|%B0z_bmRsGC)G{W+8yf_W0(e+ZGIX5OFd+^c3q`F=T%ZL4 zbDnv*PD9SUzHfi7&XAeH1o2EM1QhgNIW4W^RUl9{u!UeCYqH402qy%lj3p9g$1fcr z4l*FSc6sMv?&a&v?79=l(r&VeBuJ3MVHmL_Cs|6U5ICYL#lBfi}IdiI5YiEl<(^5M5G|S5Dj=mX5rfgnr!j0Xd z#uK*lj46K*heRX-Wr^AnXkC`B0RSry((E@St%ZgarLaoHA*L{eBW^k*)=Eg3XB?CO zta6EV&Rqb~2M%Ps^IZ7=|%1 zO#I)i`rl92{dd)UrJ5QwnlebN$wp#|%>qV(5tCcTjpJXD(8(0cGZ_sO7GPxg_w&g% z`*#+JF{UC|i9%@;F_QvB#Dg>ep)`t!2(X4>f=E&#GQtxHLf#o!Uw*5>>3J64?rAG}N+LW+@74Hf^&kY--JkWhI72Gf-(MiW^a& zB8(a{0Wu0wF^p+|jAO7?j42tBq)I{yB@$%C^R9%Mk^?a_7}rCq0~Aq`O%bJLP>9HgN+QXU zjR}lPBO($^AcQ1FX)=ORVWMMZGD%FbY@`NORspetV*#YoNrGT8*E;{U$!yBv$=j8G zMelr<+rGh$gX-_#;^;w}q9q=)b3d7ry_A(e=%o=c*I)3y{Lg(|YnbXDnCgV3HQIk~ zGH+(^!mP~QIU;{Poa~c_?r<0t+G3WIMG6$7vsI%WTT?J&wL8h8Y}D*H5xO$$AsKg; zU|zd+q+VXDmr+|cd6iXHw;7}RZUffcW68@ECGR9(RFxc)mlQ_Mj2HL3zwv?m@ctm~ zHv9QMD4*#jym+rSo@7PMO9t0e9NB*{&Xx<%_u|@OCMqIwx~Zz_#6-}k%UNMlb=As< z6LE_cMM&JG5smLAYXO?A8CP`jWGDUDs{hJ|*ZUw%gZ1fnBBk|V_3Z^F|3qP5^+lFI z_`mo^cHiq*&AGMvUi)|QrtPSu{oZd+h~L29;9l?$fhz5Yv=?t2R9U^bUKa;3F8Gh#U zVe*BjFR98JMQ_Od@A^M|eyqtqX`24t^72@?b5LEz+O7 zTmlEVjsR~N5*Q|4v4q1$CNqjRW||dAym2!wu`&dJ`Er`c!b>YDoWe>-lVMjVi0cyo0$^-n!X%nZrUhI> zT$ZpD8b%lr!vamNR$9VDmc_c+4UFlzB}izmit(>~j_a#GaHd?3Ib_&qhaooSY=7d^gzOy{ zVIb7K*3k`F5|$8zOs@NG@bIM?%4dUpPhHIuB;YKJL?kIEt3nnLamQu25glgSWC zwpP;i%cD02N0v&VNP&V8wtl|?tcPPdAkkZ)6Zu@0RWgK za3C?D!4wnW85xl3n`thV8R_mf%j?ajsRKyO8HN!UOyHa((|Fg7-E?w@qZn@E<8JeT zdvS2n&buAgjGE)j>Di5m`>%s1Y1pF!9)GkkQIrdE0L# zp1hnP$0YL3)ewfTEkaEoWKSMlIB6k(EKvwsLd4S}2}2C?j*x_#ZK$hOnCRw-wQpWs z{jFt&Z#QPZ9kxpuy>mzc$maRUd%o7#_r^YW9M3j#7=Hi|3=WZX0F`a&VW30^1z2}z zP!l|M?Rn$A34zMgg|BVz8_L2bD>$J!7{_emt(v+6%{=V9=PbJrL{&w`_}tQQVK~O_ z*w=Gd!T@XqNWvLB;br3)#pb!fn*e7JtBI{UDwLZ9grM} z05VZ3m4b#S5wp(qT=BhKp$E@=@_Rc>A)MP}AhCk&wwXY}5S8=0NwO|WlAYX~%?wFV zeD6GK95bV=Obt@8NTH5A)?H#Sj_W{#1e?Qb1Ajr1!zqHm2(iX&T8uc@87QOCCwA1! zX;Uq7CQ?-Z#@50ZDP$rU{But!y;U(eDUFH&Si37#S!a$RGV|PXd?6d$4a`%^uJ5q7euUZp?I;1+{ zKn<=pYG#w9Az)X&dBEw|;9lqwLJ|$M!+!~Ewm?O4l7(UrkTV08g{GQo%Pb%ez#$-D zVPXYSx-wpGcQl0^F|)0dzzEH5p&3R2HF`vWng^>82y|gByWcG7&4Xx>CR-d{SvFV0 zB{M7&9x~ot)=C>?U1h+)nXX&9$6N_XE+y0l(D9Efm#j>zXHXoZu*S=QQXy?SRDa3@ zuSuLBY%3g;z~LppI6C0KO|}HQwzAZPoNezp%go?u5eBa0WjAFjgOU+uV54<8bO>;` zOC@u&Q2``MOgze&flQF@#F)B9DTC_N^Ly9NEShLT6(J2E#{(0!$X5flGj)aT?4;*3 zxipxW5iIMoSjEIA7=?s*Ohm?UNq?YW7EK_$Q*q7ho8Cm4y9N*BM>0N3(Z_3(F)4cW7j(jJ3d}RguEH+jdoj zP|_qR%WQKI&J52W;1gb6ZqSEpYRK`VFD7~3r|z=H^ZI`*XAFFCw9ktYLLL1Uu=Kp`Rq z(T*9ASj%_Ymz=W_R@rjSTy@gT+cd{%2Aco;SXA=Vi<}QbilZ&;-gz z!UjNzl(3%V)x=0Me7lALOvDMMlFIGGOtwTxXio0ZVFCbn+Qo?pIm>vb9OdPX?U{FO zO6~BTiPJZ;upkso-AZYZh|RIf3S%e><2g48ySu!+n+2-^b44<{Wq&bz;Z<-Q%6yR2 zBd9kv;DSwqQB<@>}D2uV04pUEL>! z3dmMcU0R5E&AX>zDSw9u(Bmv7jvjXL+DU6WXRi#e&6Q%WA3$$_*_N084D3WEKUtyRgvG%i&Ks$+}Iu zb^&dqDzH=(!E}!5o!zXyS$C9Wqa40%&X~i-L?;Aw%5+SIihr}Fml88>ldzX*o5paF zgE?%35_4UFveb=^E!fj!+VGCD2JkJE&!B+=G7zd{%wmBtMlFg#3V_0CD(}twXP&ZX z+DI?eZbmB-N1gALxv0?={hP1HYii_{iZP9dWLY5!AfSPil#&ICQZZ_j*<^`QOrKqJ zG89CTC4SS-Jb$wbMzR?TMY3ur(guRt_`k0_ylzaXHj57JxKXI15HgvBGGihFXred9 z<_svrgh7Fx{HdZwThf6+keX4dzU$N%23Oit&0Y#sN~zb zz%NBy5&X z`0Iuv2Ku_tIs^u&N<2>{LV-#YrKPEK#9+osUW!Vduio(;`N z%t%>p5xU?I4+ytTI3^s5;w)l@Cd4*PqLhSyDt}@ut^|@O?Y@?_`w|q)q{Kl?N$2Cw z7|E2fOi_uHYB7P5$*mEzGg>G#BS@gyQY^zH1O*tROj?AJ2rDI&NRVR`ia|p%@4M^! zU%TXzl8YGI5=Ou!0%4h$gG4ZrEM&0-SL5;J=8PGULS)ITLLY}TB>Z;gbm*CC`) znI)!~l&rGMq|up@+bohXsG`Zgc9WEEFa^KQo?g+D$!{BfeVbe;(T%pzjA0{Wk{O#L zMw3M&FvJpONh2XKGf6S2qNzxf5vEa+%8FT(8I>l~nnp;(v6g9-Ae&81CTdpH!)cnJ zNSPT_)N3@#zMF0xjwUm-yW6>qxTIky>nfr@O0%D|=gH6J5%mN7lgQjb4W|2O2xn_x zk_-(YD|rro_6L!Px{6g4V4Dys@*>Ksk_9HQSqik$NhH$~Nv7Q<4TRFwlVqj_v7;83Z2{6_vDokvYWi=?>^UdWYn5d$Xf~KXCmdh0p{YSekm5kFgWiZ-}L=}rN zN~KEDVl9^G+fvIjGi936Y*tOINiTZEs{L;2sVrK5(Qpm`&j8@)fH&}@Aom;DsaBm& z?PF`i`051g^t!m^sga-ztik?#Rm61A{)_(T{+j-b97o-Letu;o=Vtu;DgHI=`Sf>T z^*sw_)n`absl^m7VrDGbcLK2KtJkj0DkkG3-c41q3}5Q?Ie~T7n8GTl?A(r>wUcBU z-+%gl)6eVvFX1urAHn`P3H_cw)%fg{%h$4ESuu{7v2~bjO4XaKEhE=nSGuHS;WETF zn44*~*cnYj4@}!L8NJM*E-PG{B)Tn3my?wl8j$g4(p6KBj;i3{tBQXOm5N2}R$zlW zMPPtx@m5{t8K^S36Pc*lOK4t5hVElm_I+%B8A4+^=`%OfOhplKS1t!sCK4_Ki@TgG zU1e>=-J?)8ck!l()pdgo&6+Vc2d}$7fDb=F`+o9u(NddD)&{_cNF>yIf^%h;}Hg2bc{yh$V=4G~3nSg{P8|GC}jZ6T6_Cv5i3E>oL` zag{XMZ*0X@&goPO90B8G-pLq$7TYy7Pa+3tdAibcHs`fE9gv8} zx7oVYz)ApP5=>$nNCwhKMA#H{(5|UgQ-B!TYR+Rh5tB?s(2dD)y9*-m*>w{%_2kWH z5;mw-#8nY9CLloETz9z(VGE%#buuq8)6AJ1m0KHEL>%Ag|9}5ve^vZ{jot6#yb0~& zz$8h*CV@9x;Te~h$OFnmwXtgl@BlSd?a|~G#3Q{HY-zyN-&&IZ~?~U2sHh1`8S4|ka^@X49ovc50|;}n4nEd`Szu3 zDFxtLKuIAWMh1`x2~CIq0NR30AlmBFZK}yOtww^ZzlU4Zz&XI*%kwkp?|v=8u;OX_ z>^Qk9rley))X<2(o}tyeS|V#O(U`fBGqUpFJIKiiV;E{HFCJun<4!6?@T$r0~V5??-o)?@|c`r;(;EK!2*_QT3-ABJH-1PYhwB$&b)g687eI>5x89EW$(6VB#4%-U%1=Dt>l7e{`RjAIxL~S{n`{FssB5^l&gybUX z*eH7HJ0+^hHoJ8QRRXJ28z4alMGWfd?xUG*&COgyOXmlF1?=p_(5p@s>CJPKFf8m+ zk(5OqaBy&P$|(B;I2(?j9qKv;Rph{ZL$!-uOUaiTff#61&=+FzZD@(ws)A=r&E274 zH&J3BVU<%+Xyq7<*__CWRksmQ6mGI6jWf93iwAbDq|vK`GK}shhxx<%f5%_b1KYI| z;ow7~;3@BaX|ENTHj#|a3W2sX$+?gC-vA0h$niK(qw=&)UiYWQ4{cL{{(^Ke{;xm^ zwM0PfMfM6cXlQ^m8Wg(ff%W%`yDwXs7rFnO&GyI1&(-cby}jADy}UFC0_Q6 zEVCh71za;+CTr}gN?cmM$+X5e5RZCKVq_<?H9ea^qx1 z>aBVzs|L*jI>k*!X0elE&YCjbU{CO4)o%=F)i0yckPWFB)uWiI5IYhj;fjdNDAhr7 z9L(H*>A0;LD▹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 delta 95140 zcmV)hK%>8g^ac0x1rkD9XgM)KSte6i53V4M1ckx>krE?+o`3)V000000000000000 z0058x00007fH@wD001!nkx2jmAOHXW00000KKLje+r!oC0V1*ifB*moo(I4H00000 z0000R-(NwYfC2CuM_2~~-~a#s554LS3r}(Y0QYln0iYcUUwg9`SuVKUms;-H?a%=C zzyrhyD*NYu000>UN>K$OfB``c_6{nE00gK2004jh002GU4~{yoNT5(CJqD;5WB>zA zP@;eUWC1~14O2h}0AT`5-M|0<05)J4G9Jf!ecRv)0r$PY00(ve0Q3L~4l@7%Y`_2o z0024w0L>R{BU(_UP^C$10AvGeDz4kCP}KzrB}t@zEmxQ~C~Qrd3s_MkQ07ZsG>V8GN!E?90B#ae!y2Ff1V9B6RRW?=2pimV0H6R;fB*#p z&?$Yh<^TYC5m1!?kyI7404hStcmd51S?`mNcenr#ZT5g0>C@kHfGO*1+zhm5m;e9{ zgSx|ipa-BdN!q{x&}b`$_q;s@o;K^Jb^%fB00F9A#*o+z1JTd{!Q>OPgn(57K%W^6 zfV%;pEr3hh#<>QX(L1}LUF()y<*ig(Vy5=ur*`W5++N-x*xD0i4c`NIt^=_4!_deA zKqaR84Ri)T6ac=)w!%O!um*r6FRV}kfEV6>;0Js#lt*&_eZHJ>7>tGx)h+G-&0rD- zOnk>}+Zi1U^9LtGRn4g@uxloxVV8IUzSN-kS1V0u1MjQ=007Nk0FY1@T@^)2(@9Ax zDwOL*DL|oBN(Ct(DvAmyp+boOq7sP!paDdbs-UGMK!~cPRaFsH3M!Hcsw$O26h~u! zSDm?J%Mf_v_Vv|00n7sil?ulDjU-fX05b&u-rWExMY)_LwTdVKfZ0F}*fca0 z;?PM+U;qFB79|kbqNOlxDob~AqOJf4$ytkQ0|PfO;lKa^X40DBLNy3GzNo4fii7PFcVBB zg!E}J0132I@wGHEWF`Tco~jK`CV@yq6A%G3BMl~*O{tNgsf|<9NcBB4N@UwqZBIzZ z(`r3WQ`Bj*RCUxHQKxhC1K+p{UG6A4}8hIp1 zAbEtiJ;M@j7$+J5JF)Ik){M`rkY?wAev?))XAVfQ4`Q; zOa>9P8U}!wJxrM=iHJ2b8i9$BG@qoN(KG`S2-6hw(-74^A*qId(+Q@g8laIP1O(6k z6B9ycVrhiPG&D>BG|dRXq`(NkKxETRF*F%RrkF{XL8+MrrfO-K2x#?x89h_dcug5K zPxTsYN#bgGH9aO`pQseGRYdm$R7Ssk@;mRRR}Z((10}m!{Z;F77nHm0s`&LDb!Q`c z`R_eM2LtoY*v@APKmI}M!ebQvFaBYBB>ze>!zh0HCH-H2JBWnvzrPayokPoc9%)XG z7=i0BpZgrrPVe5S`4U=x|IE1PXo52){sASqTDLE<_f72P9EpL-^M!C@Z7;!90bt&$ zo=wMUIPpIlI3O|LByu*Yt>lz! zMnR0F=C}EJ(^?W;`&XG|%nky-d`~c27ixcvKM%^!Rjh>n*s;%l2uB)@^bvw8ldMI& z!m{9bN`T)HDqc;Ky?9YS8Lj%-PRMc_JL8eq*3f~QFcj1tT<)<>`{g;L&0k`x&Enh} z>z8D%+7L{KUp4|DGLnrk4$fjCV0f4t8zS`DOsgSJ{neq}8bc=Xa$??*#p0}C`{EJJkk9+bp6YtuLwPl*H&{-Fvh zhN97KH?9Rs`=E1a@WJ?+<3{_f8@eRVjW0BjjX`W$m)m4SeB;A%(V;cZo1nZ1 zpY$iZu_6kChMZ?8`*t%LV&lYBoMT}Q!v`u!4QX_ic74Dy+i5fbCQUJrmOE=J+ZvG^;w!t@?SvACml|4 z;X6 z*`yGE+j1I2kEIzcimL-Z2Jrw3M#f}y50`Q?&pk1Oxr5@>$UDsj`TKQBfexYNO+(zW zGXT=zL1Nj?aDfAaAe1t=I9MAyq$8sezfh$I6gl(E0B0Q1aM0{9!^>3znMiIN1|FmTJa1n}rsftGP~wn@U_b8;NC>-==w361UKn)isq>pmfiR46Ir& z9F-jh+)IIrgAO*BBAy`A$|N;X+u6;iuKn1qYen{nS$gEj?*cDQrk-MRYi1js$yl@K+B-YP;OjfmbLh35rXC_si#6o0umeSu1Pl}TYrt(&y_m{ zcAZ?J6VJFq*itxkVzW+k168VjK3yi3<)&*Pyn!T7v~5<1xN1IJ#+ip-T5>iH+Y;O? zE(w!VuRLj_Yl~wjMglO7V<6Rcx1aUI?+>=a@L_%BiIa>-saDf=Vcuc&#j!My6nYkwqjDt4|SERqYDR z11~!KH(xPdiP+tV2?}!o%aA(m<7Yk%GeuN!ns{C_g{VRpWg94k>x&`~L1@fscSm01 zVK+h7o@_^g60rg-LCnL#k*4a0Q)7Nz@dVW{dJ(O{F^0lcq4JjjIIxY2EUx<#o!g^m zwcn6PWrgn&(%_(f?NfT-)i+c4CC5$}+1_NZ{G2^mSfizXhjwRbjqapOU+0jIK8Nv8 zN>(k`X#El=@e$YqoHGbXSc!9?SZCfz7*hx^HUF z72Om+PdeA+cA$^8JIJz<&cMmR8p<(7Dws^?T*DQ!tD}a0)_pyP%B5d+vnRiB_sC~v zy%d#)sT*zMTC~Q~h5P8(U~D$c#J2Q_7V&MKpslpHl>KxwPQdbpi5MO2DuuAcW-L`* z5%Hj`_DLEd8?|RxwFHyomWEFKiis!)bVwBLJ*eQqc9kn~#U%)J4{_tM2MLIZ<=3AP zZNSjB_}SBcv95Mg2%8inF`_pONT_|p^R<Z{y^fJ+0aQ!iB8i5^lB zn7JQK(Qy-)Vz%_*V@hRkT}^tdjVNWD6mP`AsX~D5>ziovyTf~IhNpy$HD5ZYwJ68B zWHZE?v_Mzj(*fDlH32EqR)q<}G)r=L6o-6y#W#<7FM!oyti0uDa&tD9w`E1VIVO5W!VoXO`}Bwi4B?)=RoR z7yk<*avZl_7+SiE@uc^t*L2&#EtCtQLb*|bN^GkJZ0k@BQ|Fqnj1`hKT{6}cPZ^}T zCTr?jYg3rQ46vvn6|hT{QGxgO?7miCX#`^c>!$@urXs04`q+SUwgzt)W>N%^W*1<8 zr%=k%#4`pHH3lI8p)EAFpc$Wtl=wBEQ;dno^7qfvI!Q_8z+%n$r~}_RP*NCW-nioh zGDuOxU#jcA| zPLhG)Im=YFBpVfutTzr&%vBMr$AFiU6A&1Gm_v~|*^R9ZTMIZM8qqNeD_zzG$hMAH z2L4`4tk)b6Y;M)E+fJ#q9f8OOLszm*bpciQm(t34Gl|tU_d(c@(}@yX0v8aCPc<)zM_9O7HEuz2%bYEL z2g2~6G+7fOM}!a#9M#ihgx$Q+Sd%@ZBKnt-sxcLpD+X*=Re{}%`CSp~3{Kctwv^!l z;Kv}}ZVoC4vf^uciY0*!&X7%JQNh6VytsK<%yWm zaV%oVA*$fjL(H_@(=-=Hd{GJu6RA0W=V5~zG|w;?nI>G4gQyN{b3sqGdiLr;kvrKDw8jBrty;wwM-*+bRJ?x4sm);#SDr!< z5@+a9oMT)ZmSM3AHc;q-OWBgFf|Cl}yJxZ;N0nJQwcp-1CZo4wg2XQ8N;9LNJDdwm zmBt2sXFF>3Q^phzHDn5{>=`Y8pDK#-%6|r3+_9;IE6T)`9wqC>|jnOm(k+mGMqGy9C1W zpwyPM@?C2E_wR|Df+&Iw5i^Xba~=J=uL3sKf;|>PBeJeC0jdg0L(-86>qLsr@7T8_ zO)~=OJ8>W}!iQ9~BqM&SSmi>C zQ^M_iY{rD0tOEuEpmr*MOK5?G0ic23T{@9y65CPi%H`QuX5$b-GK^0vkOPBLnldDL zBCn*Vn21sgs|=S$GM8Q}=g)0YvqAAt?LMDJIh5NI_#(0@D zl)Y7s&GS97t>%u-PvILdQ>P-Cju|AQ0XY(6OD+em$1QdpUPA|DcvzOi9X9DIC~+{> zY}(Udit~=om74B^a?D){2GFOfWE~@(8#ED)TRZkMZIy<9g?g{B$w|W*4%FZvs*zBi7}1+vciTR#Ji%p1Yv8%7|;HB=<2>Xr_p(>_s4(Iv-0D-M_*% z4f7Y;2J-N~aoiP}X>5ypC}J2Y6X+D>D@Hv-?Ioobmq7%%*|eVtlDw-$W`^Pvqb`gc zTwP9pMaSHKw3XTv5BH-Wo`iy6MTzPL)J24Xx9UckX3+a}PBZFY(Yfm^{YQy&=JBz#x` zyRD9Yt(?b~)eEV)j5siv-1)Y~TG0uhCUC7m83tgDl7})kpX#btUmqS81Bq6?#u2FD zmGQ(rit)&V;gL$}9T*`8lB&&+P%;W~1v!pMdCq0%E>|3d!f!3*m#R=W`tlZ0Jd+nS zIx*EY%!ex{h@p~nk3vJVmu+OcMXrAT8_2YO{Loln)>Ff;9?oSA<(zs8u1Z3U%H?=t z0nY31%ti!AkfsqiXvR8|#@kBL;LhJ(!%&TT%R{ZpHVF_(n;pF<*h@zo*=sF9N@VKR zTx<-)At5wRBN&%qbTBG=EhGebVQ$ZA%BOouSs}j)qjiMn>+Bm`Q%mg}h|+@$lDyD= zJ($Y~w!;P$rcb>vJ;Yj$jBR4oDe7gBm8TjRO*FvS2<2?SwRO|fPzOYf;!9$BntHdJ z&MJk~kB~^;WC)RAlwqk^8~07X%Zlc$*|^13 z|0sfq0VHkQ`s9O3yw&6*?L5{-DB3B1qbjOfZV?qREv&K-le0}~QTb}Yn0G=^vl`!x zpyb7Mij7`Ns;9UuINu|K8?70m26<+uXjL7-&sQy!(F-9XH?|X9*q(&4gHTadX~LD) zMV}SMh9rsBLnzRxh`SR!_<}?b2q6t(WbJa(l^U-|%C*;#K<(LaF6tCG#;J*aJ1_HCmJRsw$b48JQ!A##(G($P0vnI#o178lfBo6vW*g+TBIw z$3mJs*%GZSAdoP%kjSiql0>p(P)E@F14EG6-k>DSZ7OU_vcQo79GN8NvBQ?mBMEP5uvJOlu@`Cxm!L>DnI}MN|i4q0ZNnk{Eok) z`^J`NgTj=T!FPFibCg03fJA|A+np zfF==om4E&qSU8*AdZj@5zfKRUVLzS}D{EuieW15h!1Dgn&u?z~NSk9@(0e10uA}Py zAF5xlFE6{N(Dk)F$611Zf3fN=XO-aiFq>#W@%7Qn$@cQS^*h8_`j~$~ld%R*|FBbL z4EAt$CbvnzDHHEkeqTmPMxecdQ%fZ~DtujtxzbQw#UewPb1iCv?AGgU0GN`vPsw9X~2- z*8flR-@C4@9L|k@$E|m?Bp82q_DGNBoOFv&DpOt~vN6gCBW<6x)9?o~_MQ4P6X$V=X zzlR%lE1~PwFsoYc`UfCS{4QsfE-IznE4W1k_~?sWw(Jvs@MpEqv~NPqII!vOHlC?3 z7f+YM%e*JWWNz{2Mf>j4HuHh-^$f;>IF=aZ>CLi%8GkkE`6k1YB>Cg~Jj7R`XXQlP zU6n`0yPv|`gD_5?Mz;HhhO9drRWEK<$pg8x9C&NA-Z`|zn;ou({G7}sWtB&Os<%QV zaTOB`Fz>a0+P|j-K8FG5oERD_V_AX{%sQ%4Wcy0DhaJiai!&=rpp{8B58j^DO<=bN`iKCA5gnM^Px%JF^lXI86v(Iajt=2PZ zpL;idfsaa_EZr*w{mb=PA0MRj{LA^A74h0*7b{8&W#5_fb1nA#8Cc(G*UZEFZ#9*p z1UzsbMoo^Zw7j_yuO1IXyq4@sQR9|E(YaitaVtoCC;vW ze%86FXttc_Db+ji5QEIf&Fi*vSBgwDVVgmJ;f@>_%>)P8AvJp}I#zf!cuu8UT$a%d zyl8eUmQ~Qvx0}x2T#dXnv-EAg6){o2;Ht>&>u%|$qIPUI`;FBX3R}=$xT&@s%X5i( z?X9Z$2+nQy70#P?n9F<^vaE5MVcm@znmn4FES%d|Vp8Fu8}SyII*si&ENONfXEpPG zgS)*hp6)}u9<>>B%Ph9@E4isP2RHI zo`+wxD|YOUu*%)gxTmpf^0;}%+L7LWTfIX1_Hy)XvD|ND!dw{?`)NYaM~$?>oe_Fj zgP7f4J5Bn19y0PV?sji7=UKk3%|6CrdHi#2v0HM@QCQ5WU3T;NsK0)-d-5i}!@78; zxw`dTxnADfmjurvPXATM&(Po0tj1Q7aMq}-+}K~r*Yl&Xdz;sBv2>W}Jte4rOhCF!}W1Gi| zRY%_B@p*mC8K6g+K!qKeyxwNm=Jrpxc#)@|na z>)+>YKT{`FEMc@<%&sKa!FDuZ;N|4(F=%`Sb%nEHj)S}NfeQ=cE9I}KbTgqrRnFR$ z%rEk-R%eiJS}WL`jr-eV=+Uvj%TDDMV%Dj>cE?lO@Ay;eZS7m-*LKx^V&2ZbcK=6@ z$?j#O~-0k-lt=jVIy2<+mL)2#9J|z!b<;SvcE!mY#pD-mztxXHRRF5tugknBn5< zF#A(=((h|GvW~x3izX$1K~0X9j-2^-<7oP|_vTG){*ILU#`S8&wO5`&^@?)gxTFEY z(CX4(FewEuGzChKcB362!YaA7-P>({1^mr_*J36!GBW~1QiRa^zwCY=SE5o%MhIN! zDKG&glPQp}(IJ@-iV{f>!W2yr5KNd9B!AHEP-2OUF^FOjp)kgOkNZCS@dh-KOh@x8 zy!GqV>m;HX8Z^T+Sj99cWQ3C@BM??VPYDNvf>JCD|EcxlmLOR~jE`=>0vSj^8ZuHsA}A>&#!?em5@7-c zKp;Q^AqhCV+dTJwPj7d+dYxi7r_J~HFd}bVz{DX54{r7ztvA@tz=VKfIOL==RNm$D-rjlV ze0%S0M4K5A83`FfyLL7~l24B5Gb6j<<@Df1NRTj~lQv?11rdfcn1Yc)8HpsBF*KOO ziI7HO*S}u;^rCGR41|P*VHsgakYyH>W+4d#W>EzhMrIKNA8)sBAw`sn5g~~sB$`0I z`s>3C-%?)v1MGh67}K@b_dRx#eW+c+7H93f@zROw3~S*GxJO~-id|bRTTbr` z6Q{ycm@*#dRfGOd=zcfxKg0vuz&Jm<^k0HeQxw8~S+JPNkl%mq^UTboFq8Aj>+bH% z5}A__5Joa(0~dD*1!4)A6Ga51Vj?0TFUsxE#zF}glu#6*ihbXQ%f!*5A3r_dLK!I` zA|gqM(=gIAC?sst7HNnM6T%53kV!z3mL@CHQ97EP$lKeTIfjacFl27rCL;4wIc;bX zPYED@l0gLUfCtNVX+-;XeLG445sgMrAq+-RXd^S%ZOBP1KqE{dNxqmMNGEpEn-n!k z#R^_pn5ubLEL7G;QHmxnYrZ<=hG1f7ikXZ?&GPv7^F2O3etrGEeEQHr@zWhV2pVRM z?XnURmuCS0lg?o$m|&7GR&7Qd6f`;-*6MbDaFR*q2_TS2CxjA%NQP`m5MU4xicF#e zP?lyCn8GwM7mtPJ6vV?b87Q(c$s_4kL}o0+CZAo{WR00XPhHsv!$cU&B^Z)2l9&mS zND?BHiJ*%_ki%gDNdc4X=iB4m?o5D74VamPgbL*L<%q6B<%B zLllO@8vs#E5+fNS76BqgQZYdzX2^s{0vM7BAdo=-i>|PG#L~Iks2LH(v!fyH zor|fQhH{NnYI9+$vqG+zF6>Pxs?_s;YRHi}cp$w?O9-4bf#xW#8KcZwxBJQW?au8- zVsw?*7h=Q{6LfMivgl%cpq(<}!#Q|zq85c3V2nmq?8Md@$D)Qse-=l5N9SbYNT$~I<^`UFv~V-M$)S^_S|N=&1r4nXH3J&ZmNQdruFVdWW}0)+PrQi z60X%UoUt`}p2;p^a*`NwqY|@tcR8<7;FrR~xD(?OvI6E^lam#vPJwXeg<` z?3*Tzg;6n;!*QUOGB0L9d$irz#%mq3j%s3=oSH1ksXI>PxRgCtc`Ejn9S zqFAf6Rf2B_s(@;$>LhD_f^J-48xcIorJD9c&J>cokwF3!Dma^N37Q z5l$->!V$?6tf-Z>RW>In&c<8ViPg5js1nXi;4sZW5HK2BhGHnSQmU1i5Gx7`Wa^9x zG2^Nebipo^Ja?F5TdEm!D6QR1JR>0|BwS<-OC3DK4c;4h7ng&7NTki=GOmu^Z0s5d zxt+0;QNsgWCsQvFPE!?;6{Ic;Jm3&CS=z%B%^1+V+iyRY!TcD;cJHbqt1zpi9h;346ta{9 z5@pq`n`bHQUe3f8F3sV$Ve)E5N+?_zFrpySx}BKCDtVbNG)qdMErAsX!mFc|3mwMN zxFM`)y{xf+8trL{v%3yzBAT6vz$WG$;MuC@I0a-_Ya(VVL`@@#lhl^g&NWjeYhB+U zOrlE1HZ@c%Eo6zvS5Txy$_(BjURKaYNZeItRn&)hI<3suO7=uOt5QY`!8^B`cAKkt zG{o_%t%orzROHE0-NLst=~!2}xYWhcw@z{3n;Uh1m_%E+jf+`=W+~Vs8=$#TrHA?6Y}F;%e`9Y3=IBq_h}-lyagMtyW81j`? zDw3$h#M=i$kn3+Z9@SGOuIm&fZ-`YH(X+206^j_xu-lz79A?EV-~y#X*SNDOT$7ig zQ{9_?-GwuBq9V;U(AtZnuT=wCJ6f#Mglyy;*fc^DZ<>x~nKB$+)x-xDlzM~@^Pe~1 zAfAV9>{j@mfayD~;e&3c!ni=HLfY_Mp*=mSnAxqzhal!`$1%{AT&$_ABxkxQ9mgaO!``lLXHQ(_WFy+P+8BxRYY zOaXuiTA=MJwOqu}`0yHT6c$7a0wLk3dXP~y3aR3%rjS4jr9%-Bc9<&V)fXG%DlYbj z2jB#3#02s6Dy!p)y&OOd^#BUc0OVCb{7Rs6o6;yALMR^dM5qTKs0NHd4Jd*g0D%X8 z9DxQiK!bz;ONIbTmO=pIl0xJlsA>fO(~1G^)d1zy0M~$l$N+)L3IVSa1BO5YNPq^d zPz)tNIWPpz!2_faUX>MkWL3gM9)%EfY6;0GCrE10BvD`v{0b3JHOhgth&)h(#e3Br zK}S+4$clSew0NX>FnO?ghgjx1K7#ju=xn`SV_o9nuJxSH!MUm9^E^)wubs@LZYf=R&f)%KFAv6>oLF7&+>T>N{>+t+rL*X!7&{9kZ?$Y5lH z_`bN1(j=6UCTWoV3-w)jFbzqXUM?|$QHYqJQ3RNpA{ajJ*Z#lb=lyHx^Y;4;nV^z0 z2}EFXH0v-1NCX0SNg#khp{7U%C<;mO-GU%NJRnL4l4mwde4q*z0SV2w^pa$UGo_f+J%KrL-1hihQz2ByfTVJTnP1A74G=M*DvU*Nh1a zl7gB@q9~U0>UDUTG$Jhskr<>v!VIKjl8e0a$xKWT!IGK;nIwTQnHZ#`gcAgz5=P9C zmT_nTW>BNF)+?2^G$|h^@ft1S}-(~jo=g-I6>&Z6W zjZ|=rhm&^T?+M`~0zu#;@Y)E*OcHC?S5J<<-fm5jKnZ+(bJpJp>|5)@2u_i}AQQ$Q zVGM%!R?c^M0Duq(b8odK=Qa??be-dTKE6JEe0#kbXr{_$CTb>)i9{%$J+4g~>2;5{ zYweRDEiQkq`SY{@hDi*Rf(Bz5g!_Da_tV$SZB(eL*Ri!Q#T*#*MN>Q=%qU7KsfpR$ zW^K*YX{<$OwiR34((`nU8p$o~D4Pb!sf3NiA$xy$lI1j@W@#dI)>9ETk~a+;Y^=Si zn%T?O7Z5fg?V4J0iMm&YM&|BK3T|Wf|PEN5mYK>^U$GCCMHx1R?w$r6~F=Ex6icPB&Gc8 zJeXK$)XeKMW!~1B6yhNgvCCIelwrJLmARaHVlPG8+qxH_)T|Y(kg_Q{oyS;h#zP}6 zjD#X*j5!Y?VZ(D1D@9P<+gAdqRVdlGx^aKHjXKDnrQOxE)Y&^uX4XAH#q8{{If8M6 zH%E3NW#rnnqcq$Vn|9*^-2#l@dJUW0bd$lGW<^zP_e@SJAzV@0+MTOc4vf}R=Df;69VQeYur+sME~7T0t4^!Boi6IORcIf8?hATWz^-&Y-lR*LEW1M7UC0X!L5M?wyv_Gon*v^ z8!I9<i`x)0d;5v)ufTtq?4Ehd4N}#RSscP zGKc|$fEYp!5QCQi3?LB8ss<9EVE_gY0AUKaLaq{^VJZd^f?+5o5&~f$Cjfsc8@Q-p zAchhMVIYPQ2w@@y5+G<*LkUzcg&ZMA2nE6cbK<5Dse}u`g7PRhNH|ECNSf8wuCz6w ztpGca0PcIA8`|-4{}v8M3-zY&#P)8(j;GdkOf z1B7WkPtud>#4`du4J427z@L!NR}r{1w?cY@2`zu+@b;8ace_RI8_Kx ziXS9@aR*>X0kz^R^-5qMjH1Xl8Z3h|iFJ-sjsCCGpDUu{Xh}HpJi&iVL9!z`0b{88 zETY*3+>#~z@+py(yxaC1E0Un1Aw$LeGBF6Uju2P@Ic_GD*WWe3w#m zOA{qO-&w96>&S)HprGvuS}81+m-FujDBywzBK=H>S;s)tLn4+>Fd)#D zqUmQ*pYQ9MYuT-p=^CgY%~dm|Igq$Sc38z!PUG4qDWmHMccV4UO(1qQn1*XEt6yv_X~d-KxTRJFG5_YwM+(0 zf;`B;Lc-MF5O$F(epGN-YSg7A!VOXp=o%F6T!-*YCX({SO}D$TjXG}T!l;@W;Ze+X zaa?8@BNG%oTC3B*(b&mEL}mxcW)xBO7^1>~haP4(;<#&$mEW9BpyfkaQCBq16?rpW zD+F>D-_sm6W;K7fHOf|?dvMMDQnZ*1sLm}*FeIaf_K7VfWxxXoz{O@ClTBim|^UvcoH;#7D(BEXHY%jlfxPe%Q(-+*M{c=#|Ws z#;kdeR&!~%gxZW&MIo9!b(abm7L=@z1s#$c3rK9J!$oLYPIO~qHWqN4)s>j;`T?j} zOh8n&1A>2|a3)k0A|3IN$zbk^`W2ZAn#S05mKw7QduqrOMOwgxbY|2WC$mnRwlZgH zvarwLVD#jX+s_v`ttmG$W27s~_UZ|wA0*7l3#72oPEa;L$SL#3Rp@7Cqk2Ii}Bj42hgrh7#)=bNy<~P!Ejz%~H8D0J6SZ{*%OuMjHen%g>eubkL z?h-cCQm-v(ZB^hMIwuj`8|EV@e@7q)4~p>DLk2G>W2!4pG-$Z+Ah5L*B}_R@mQi0| zaV~#mZCHG{wAQqVR1RjRB(Ad3#LFm+f>kSwWfB*#Q)|6G)t2GJx5|jCK0}0=gkuiM zE6Tde<_eY85`b`74-5?OoUB<3Sn44J=?3Fz!g1S-YGDj4Vx%I*q9FPX=cUW+rTC{R zFCG|Q4XMYv`U>2oNvCrKW1LW7VrC5#$bEn7*N9TQkQC$u%Iu||haF_kYO1iV})0PJmSk(?P6lXQN*)baBOH+BQ1>OexRCDSxAw@iZ}X(p<(7mA?~wc zncWkDT?|tpp+0oLXC+Yp=5#Z-)EhCR#lC2#vLU@jYM6yY+Y}I>3h0=rWd)MHhD=1Uakj!} zE|ZA!81J=mfA>JM3}q!d3=VVIL)@~m+a~6y>`*okHs=xAE%Rhsy?v!EbCrbf-a)Ew zke00zR+}man9RPD(&NwteYT8j+LDykhV?0RgC^i82m)=gqc2`llFL`P&Tk%f#3 z!;35ZV|i}WuV$c+)^ixGs5c-RBHrg%BN)lWB^VvP+N!x~{CCt8+S7j$h_Ytm8J3F( zw-51*_Dc#&TAGtkWeY=SW4={#>^xKbXzp6}Sbn-{35-?RwG{_&1*I8_kwL^kfaW!_ z(fm%N^#r2RsvIdTO0nl9_6*z+!h<**&DPk4M+XiE9lLw}T$xbw;$guMS^_AT9`EDJ zyo3f!S}~QjT0I9X$_RgT2x^#{LOYA7+`y%z@V7cJw$P*IrNY9ts%BM?rE2z(cL}Ev zQoUx&1VWNELSm05TO=?gDKdkU#zj@khq#q+w)Nb|QiVJ};k}%Fmv!nerOj#;7c8^^ zn1t;Kk`G5AOtz2YT5~2-AHmyJbBrZ7^fKHddlhn0fg(s%iaUSB){Jeg$PpwhzSM>Y z1ZhGv!fQ%>$5KUZ!C9@mms@6*Qu9iYL`ESvj@GPEz<83>&6p|UdLo_%OhvM=*OBxd zGnLaNoSuKI8_x^d`)@#AlotI*J*?JyTbl?+xhJ{(A9!g)^GoRiF~{&EtzIV5I07gO z?sDYrVD&w$%%gvly}l>SC*Je8%=5W^^U1T@cY2t8_73Ih-$4CE@pjt(X1}Jn+GZjW z4|^?o)$PHEJ$l0BNY{Qo|3&Yg&Eyifg@8bi;#a}d>wC(H^Q&jyXEj=9_;t3?OjdG( z7K0LeD)pcc-nQ@PH&(1k>PJq!e9F{S$G!G!ImFA<+=74hx!%7y{ch9N-sEmrYgt?u z_kzlQOJ7cGJL)FBHD+V|DO_fY^(WuL)o$;w!;^YCoIhvclZhnu?)*=R{v4g=+VJSj zk+YV>sMS7o{c&b!KE5EwyM&FF1UTw9vb;fYMt3%qi^-|6_Yqd}ukSD5`xZ8ZP&KV_ z%uSI?S-pRX8@sKG$6Sn4?0qka+=FpTe7(!ZO|Q%t^xoO_=%G^|$u4 z($sp_S}AmP4Fp^}VbxT<&8ec+Q<@8SHuuW=SnOTK@eEN)L~?(U45H=^M&6L}!h94;Jh=pS0Cwdki@BEQAfG&`26 zR>glS**fgW&%=`_o4iRTxgOr5x->HjB)!ZWh|^YpzAkDvY}=U}9!FWlPQ;UENj;RJ-1f}*VW`Vp@TepESkJ3-b~cr zk8w411r!BFZwRVN8E=H{OF^YUaO$wJkgc!RSD2Lt%{s18IzD zwwrB?zoA_*39q}kGC~GB{$Kph_`Z32{%3jqWb@azUp&j(!ayJph8P$^jzUWsJ)du0 zUa68|4&%?SSCoh60(*^ zM-mib7}KL1O1L>@^%%ST+`TVoVL4ilP3F?cyG2#(0~xb;4AyGPV+FIJMhii)jH4#< z33P^@Ex=NkJ9)f%-5u71NZ4^=@|{40t|H+^#$gN;r37NH5kQv9GN84EMaq9wIdJUG z%tE5&*rR%G10toyn1sv;$lBO!QMRzuAn#@lxdd5p&8&^eMdO*GMOA9Hp+uR=yOkBP z+L^iBs5wE1H7^^vTX?2&VxxDI-fTd+2Xzw)Hi)pBnS{k5bY@OSuQXWq=Hv9RU;+T zo!6ygs*Jn|87otmiHei4bwg>+?an+FG&fmh)T-6Hr)1@aWIcH7haQ_G+K|~Hw~MkD zG$FDO+e9`(8|tRXQ{Ad;l{DZRAPw4EU+06*!R-Od@corhydYL{4l()T$g}p`%ea_Y?j-f;_!*xsvB(;CRar=zKqE87nY4d)t`0L}+G*c5YG{nL(W-KBp5*V+qub+Os z`uch1Ssy*=scdA6H3%(1X6{5~ z+1lCDn(gJqAgNWyn(A}h}u!F1-lUQTQ{dfZS4o9ZSvJ> zoKWIgE*-st0JDWoqq-^Uj0C0}notdFW*xFJS|$rGZPn7EZN^iHI3-XqkaQWUfjbrz zYg2U-a}G}~wdsG$N<^0O3(S*~6jr><$B|+Ph|H;q?H1*VsbbYt64kR!hSO=Z*9(Qf zxEB`U+#7>&3y54xiE&GcTvLTo;03@7iriM>CB#dB+y>&e6}Sm-65yr5ONh4-ZX#Sn zxQlTX-~n&|xS(86E+E`NxB^@OE&$vCxTVD|C|ppu4ZweH4Z*lK2I5>xiE%Ckz~i|9 zVL+b0uA}07J-epmz30E`Eb93w@NrhS%!a48={Kj4mswL4$?qCiyBF8=&B;t&6KYAg zBS<(Xz4Q|VQt`d}X5gK0_Fdb4`J)m?lAq+T^KLMQoCT6Q^}8yCwE3H)r5C9x3g3As z>8g_nr*`U3?oK9u-Sy!c1>vA?p33FcIYiU23jRPBRi~-2CrxFSMen{u|Z_ z5K50->5p`D{tFf1_yT3tAN7+>_tj`O>mz6zzAgJy~YQS1QUHRF-Xju+lASW)`384eJiyz-B}a z0ib+>X8Gr~7FSHz#1EPxHDQJ$vwq74Pv**u(=`k)(vb^0$c0C`!B7a!9C_JySaj`+ zEytN2n6+H7l?wuSWb)cHmEIsUhY6rtRLYvkO{NjiHfvMNxW}-ep$LAl7=Z(F zwMO=tPdzSwliRxCkyUZone)CS%)R2PRdmQrQqvTYq$PA}$TeIefbY~0!nh5muH`BS zejY4JD>*vw*9QjdgQHNu!1EzJ^N>%-7(~IM6D`igVI)?b|A}*#8eLS5MJUL+szc;e z$q{jo*Ew6Z<7iCUlRF3dTFOuvmL3^MC^KT1g~X|UO3jiE;G;UEeS*svhEJD-j}Ja& zH98fN(+Gh15M=0EA&hi1%>=T7n0G}kt!N6;#5E?HMaZD-R#NQ<Y^!#!OqZuby>df;dDWF zv=G*NLfje~hYBg@{U#@WHdM)%ayHK;723>THJeHYDFK3Mqmyz5%YCuuGIFv;GYX8N z#hq@nlLD9%wXvEsr!1CMwz4hpyC^g;cGUZS9;3MOyWamg%LVADoq4+_75ZE@Jz2Zv z0e&=k{ry=oYuj(e!@zecpJUPC&(?bLIM{b}yiBLNj=(FLolGi$&0fdf@&xPJ=&-9|5lF+mUVjq{qmE zjaYF<{Vgkzfxck*{~h|xnHDDarQMq5moJBD^9Kf9{|>$u)-Mx@g>P|Yr;EAP_(y`q zHSgF%O*Q+P$M4*xF}B>UuhF;h-uvJ4?>u_*$Yhj>N_uVpka$Q0O2R zWCg&cW*pJ!lk4Zp!`plBUcEkk-Qr;p1wbH`8xI~C*co?6V=S$dCW~f;Arcvs;okCO zRL(=4V6+xtEk#7lVGaSCxlZ0x3MQ?c&AJ)8b1{@fi+3(o#a&b-k&Y%}S&>qVGBHF< zX{w@B)#jyWg*CX9*6v2*xPn}Nz!@Mh zgN_`cWE0(vtZoKuGN@)y(u>Fo#;K}PL=O%Q@UJAUoCACS&jMz_H?dAUQ;`(n1v8)< z&<7HHfC!pU2)b3#Da9$OQ$VJeIKa{k!Q;b@4}0=A-R>}iB!u5h?q~FWHOV9pWA-v% zKV=`#PxW8B36@jACxXEMl1m37zT94cy?OhmuS73>ar>*^mqd_XDFgkt?fk2&uORzR zT~GMG(cV4jYU{1==dlcC#A=&06Pa0#9qi`CJBXO`@6flyP>)pw2TzNa9j{DK*3xU!BYiH5y2c4!CVw@ zQNb4kTo7Ah!+J8IELte|4 z3JXgu6vhHP&6!{*cIXE9>|V%siDBYkU+y%?*tJe1m1l&|m`97<458Su2a3SuJ0As4 zL^B951|P4J=`|I9%;?KAc`i2Cjw5{>38D3|6nXxn=F3X1v6o+E#+LQ@_AADB50Nc7 zsz!87urU_gaHj%cbtHE$Kijs=5Vtv=zQ1(`zv>1bp&P6h1>dRf+xk{-Jry4KMP?@3 z8VOwzHF9IF;TC(e@NOJ}*0i=v>d@;h5u-S}NHk-8@>=(Q?k!hzn*uCMYWS?2!SbFt zCW0I`uO;yr*AWzmWhL@5Gj|bTO8GgDg?CK#JCHuYk~j$2JCR$f3LB?7(!HmxXz&aT zq4p|Oxp?PqfG38pVD@IHx@2c?gmkgHt7+D?ln(uon8IRX$i*~YGOFd|GO;dv{Uh*9 z&`JE-H#Nb3({o4R-mHv6u@ zmbJdEtylAKWHadAw>3t5ddfqM{9hi|)9svIN^mSKpBX#q4R0j9?fsUbO|IUrso@>H zPa@u}YV%3s%jCZ8ejc{4{4h7KmDWS9OM>QCo50Xu?s+>M)$c0Dp-a;cdLj6*1>5^xH!PFwMLZ)Q$-5$<(IcKJm~D4DfKyh2Td@It~|e z;J9Nn8LYl$s)$LO%}Jit$0akV=;@VJrmAp%Y~n4l8MKIDc-s#3G}TVl%nNK(43z3Y z5={~Tj$#Q7X6ECij+QXS7{eH2rH+<7c)&4$W5<3B~fJTNGg3VhUgm$)mKpO%rgnfLu-IAlgraX)?<=zlz+fxB1OX2ThR`l?Xxtz-%cJ1+M&5~-;;-;LZY4u={$hSd zLEj&#<5f4x8Sl-+bEYV~9zR`2M6`0OZ1LEQzoh4}8;>Kb&qzqZNth3riPt&VuGd#B zl-i{$u7@w+F(e5XXN$kW-`;1Gf$xccP>rN*1~T5KK=1gc$}S z0mHYYTm|0+Ub?u1AR>!fzs&EbpP9_zaEZz4NyX)#hEYq@a?^1DEx~d~&o`H%u8NeG zTk4-H$46riKah>yHcXvzWp%+Qvl-!)uCFcna5?P@>NeDVObv;BYx^~S4ZT)NbL^8!uheY%M2 zfk9pC%ECLR>aMcV)0P3&U$bC^u&Rt;sj~CWExedgNTM4h0c_EcLmo7r3xCR|pX^hK zs*8V{NP{n1*|c6oPN~hlffJ76&2n4jHg<`1HB$bP37ihy)y-O(6lz z$Erc+HX!DQH=3G2;44jYSf|^Zpg_qXjD6@)3JlyBlu3=~`({6}_Ipq(-uC|p6YdfF zuLDQ)pP(3ncb|VqI2DIXeI7=h*ZNR;x7ufmvB2sa;O`H~zju^>&ePlTk3?`s>9Our zV;iVqBUF%c9OvSd&M!d}n#y5ru+3q%ZfcgMVL4kHBB@MliEs#V&*D@;nylC{Sq}{I z=d!_Ef1AaO#lxL}+gY8Suy$NLTE^UJ;4aJ?rr2cT*b=9IU*IcidnV(%{qyvQHshXk zy>@F+WcOBV12-X_k2Y$ z_@*FRi6#7OWjM~*v(ZjNZvX5Hl5L{2HGTa*%Lv|#m!9wTwDYE)rW zRr_2ih|_qi8(Zv(slAJ8)1G$MLlEgZ>(eRK^pBDujODv)A}c2}p(z z;v0hIMHlYP%O2r6B|1$FPJf8j=$xg@QK7Ni$B;=4yi*v)Y8c>%Ol^j$3_5GV!^Or! zY#-R91&R58?Y-~E*V#mUzdJr*h|cyx6Y>5m{61fPpTT*5BCgxbyoGNYx4f~_@`Kok zFC`GHEE^cvjdiSkNn^?hN*tpiA(|OE3s^R?nwWqg0R%HmGfjbF8>f_}DGEc1E&jbt zo+hp@10%n99RUbbgd{ebc{xnYf(+OoV{CX>k0&jEv5PJ;+?#7Ajd%EC;rd}j{67^@ z^x*)L!@@xNH|Y7%2z0)dBkLf{Ow@^W^xO&J1(=iXbO%HOWf^?-`%3&J1j2$5Ujv%yY7yvu_{PKYRoK{`$Y$kNnQnl9LI&LwgaUwoLMR%6 zQWU~}80Q$kfMWjcrr=HbzOQ%J?e_j7@j`wT2)N-wTXH_q9+Bzzch%sZ590C^{IVx% zKA)PqaDYi9@bl>(7j61EA5YT*N>gb7ltRDAl@G4D=jR*{O?)7J*Wuwnk`RFuC)4!* za($nCiIGwO3`^_Ue11Ex+dCVepuAH@Yw5Iqx7}th57}pA7!Wqb3>e1VF_1igiV%!n z()~YApHJQQeZv7%AJbBY-`V;8>+T5ZI-iHpDPaKc@(0iI{M+tD#2G1k`92(Tcz8Zj z^v|;=?V$*Qq4w7=*Pq`IhuIP=7$$v`i*^=S2H}hh=}-}<#TbM{5-fRoIT^fby}yKi z`(PmmLI8kmH-$vlG{)M>GKLvxsFhV@WsSF#!H#(Ls>+q#Y@EUnKQHE=f8dO#;WX2e zrXN4feITDgxj!Q?!XR-}MF^n~L{f-hP^2i*r_=&q2bWoWJj>cIL2Z^PN+1k@CjF3~ zcibS2pKsOm{hw)4mbgD>$lh8DTt((n$xMDysze|G2zlALt{!m^Wm9HZ zm}bEaT2yA23e4$|pv_aoriOF_jyf_0wtW|bAv!0RvUjjq?5YmfRmrtb{m8QfQOEa* zlebewf0G!-0~pBvmk5AD5XgY3N}~h-D3}nyN@Lt~*3D|w<&_Q1a5zFXaIuP~)Tjz# z;R(L-{r`MEEK`6@Jf)hU>CzXL-j>lT#Ureo{|PJx`w}UD?y|;iV1hf20Ca%a>j&nEAPf^yHv20(#07O;faY zf#zN@)6ZwdU7q5*4)Su5Xd!?|m~M+&GIaai_>ROgGBK$lN5^Zebj}8d=8p}CVtnn0 zfFg8yWm##lye3tG4>{)=<1g7`6&^V`!m?j;1zVAFX_ePK2;*jy3P}(76}C3NWniAyenFwyd{qdov9d-+R93%%Pv84*12IgYkKUes z`TOU;Q&M7!Nw(gbZFHcLh-S1Dh67O;1p>*8V_1?*#4N)AWFV6w%p><-v%Wm{UiG~s zGHQtwpxB$vt|Da6l17p>yyW1Rg(Ox&4H9pC@#d~#jeI$ZjLk+F1ZgJ3re_lQe@4JiY)J)z4H~bnj^0Xr?z&jkH3WP)8ybryeD!dH zMk`UKX{InhnL{iE5<-tY^WS>)^HxkZ+NTtDF7;r62BaBlY&+E&Dwb&`TZuvIVkaT) zY;+*-4uKLVka@y*0R$A7+EM}vLiXC>gxDz}*V4E|5Nw$(5P8XWYBG8`f0LCtRha5D zNU%sCkU%7a5EXp&$)6Lm>$$nENib{bm37xiZd6$~_kw{W@Qx4(nxGoLTV_nC8*S5^tnbXmgf2M$D7}s ztKw|Ri&v$r6kF1_UDo(lo_6J()m=1h?nuyW-NCB&`*&{{>$c%Ze;0Rc>08e?Xoh05 zyN4`YD6VrwM)~ur;d9@D`-25W51 zEF^&u1MzDwYbA$-WS+3egoa~ENWmE)p%oU}*PT=bqN3N!bH?U^jdNd57}_jro-Lx= z%e#_BE0-fnio{_!TRBqz zua(nkELJ5gVq5Ie%T1LvmX$V(DP(9Aq}Zi0l`?P7eh#&IYuc_xua$5JuNORRZWfIv zh}(vP7${3l>yyshv0^m(>zWM~Efji23mG+VB)}_}e^!){i!;|YSx3_DhakDr+uy6N zN`rTBmMD#lT-&+Kxo*z8*LmZP?U-aiVMb>rxhq;qq$`bN_Y)~4hQ{2dEws}DnKXr5 ziyVss?7etN9N@=>t?Xo0lfE8sh zB_yUwe`H|BFeKw@WZ^avlK{d7h%AW?4}xz7kT5eAIVJ%B&Q`I^gNj79*b>WXMR6iD zWTm!N8d8ut#cdeKK!*kxY0e?M5Jh7-=Pqf>MQ8yY*pm+Nc{T)~jJnwN%*sd;2uMRS zy>j$ILo8w@1dQ>VCxp&&ZJSfhSv(?cakLx>e}Pv6AP@<7O{v~ELng)MvR!yLY-tjI zzAQ5Xia5xLhy+{+k>eWmw@8$b4y-VR7Cu5XR{|Jq^>@Q;I$39JsFFK?W>CG+{cX6EtTT!cdwlB49wssiQC{5Q7AR8IgcUL==uMeQn{KDH9ml zVKP%pVYm>=Nu_`g7s|=Q!cqYYs{@87O*eR1qYR?2ZhEiJYg=E1ZC+V5f}+Bx(#1uJ zZKjfrKKumnW!3De(9%FZ1y*11g=={FD z&F|j{2Js@6%0S4H*gWe=OpiS8e>uY|7_8$NMD#o(wXzU11A{9s8gSy(apA*f5BU02t&swCwtEE<0(Ms>ow-=0ua7Ax|${c4;mA}1MKz7 zG=V2yDqvt#o(#EwhVs*%yrW51ig%t|4sFoXilA%aFW$=zm$9oA`zP87?wQWV=Qa59J(LYTrpipVTs*4u5! z^OnSWu1Z6_vcL$O-OXItUn{$4i2@!%S#NenP{^AMY-|!h3E^Qt$yonjW}M4U2)^4^+U9~nl} zTFv(6>@l1p2sSnXFp7e#R=282qpy5)Cjm7_gS4j~Ze-XHfgxC#;^E^a%IAbhmC&!1 z?(__x1Tot^h>)6))MYZlN}v+><<6;Lt)49dO=jF=Fi8Q1o||$I(=RKsI{0NKnX!4h z3O9C-7*5;He=wv%9T1QSmM3UQp>|rh1OTijkxHOSt%lA zoN`bCvC1XeIdlU^966Hn)q44EcdISs$eSw*>dhvZ!x0rhVU&@_aup^4}HnEYQ)c(UL`GN;4EzXc9CKjGEp&ZyNi~hDfGin8;|LvjZo; zuRN1)p5oCaG{j30C`}?}GGIuUkY<21CXrDA77)xZNeVZdg;5pN z%4|)%Sh3WN%1z`(@@B9Zs?n8qQIjD@^Tk*GWIn&^K{gNbIpB(y)Q98R3QhiS!oS=W zSp(vK{EqFvy<;}!*ZO_l^VplUqL=>s{@;qLG2LE-Q=g;+WT3_&&2vv*bG8y99*8@#|Xp&Kx%b^CZdN(oBJNxt z(ccU`focos^2U){^1GNnTYf2$er{{{H)CP?yhAsyIZ-{-MUvgOPs0G5^knX z(z%uATe9xEHvTKmJlmG(qY(o{e-6;nNbKbRHXL^x22zBQOlbtRTQ-`jH7#ux*37on z#vl+jkdhJsjUY)NY(SwSO&@z(#;+KuDG&goGa@vg@%*8{_o5@cr( z4(`T?=SZ&=&lStpa7FUllZj+zf28!_Bzo>ii@Twm^UoeZVFag@rViS(riF|Ziz1ME zN=`=IguPO9+ROlugak$9%Q!d~capaD8v_6)9V5JC=_Z;YP7Ov3;MPtN=Px0kP2IXi z)=kioAV`v#xvnfi7LONU2*yS*3>8Q=;s{d$2xv)QvT9MQ+#7yCuXjLZh#LT+H$PxqP%4;VHEUcz;2`M5?g$x6TEI|g7+^~b2{yS|YY7rt7VBg-Go~pjLq&U6je7MR*IjRK8T#(6o7UwgYEFSU zZN~u+!cvqf!d{mOBR;#Ye|^iGN=i2_5m@1-Wr0}4WPnZ-%aP|Sn+*`;Cfx0h`gI{Y z2Syl3H7|9vLsmqkgdr0vzT3P!DMqrH;NMf%b41BF3nLK;3Q6kFg@jyj*=__!S+^Mi zNW?9bw7s(E&B2l7lBiOU6~XO^DLukb&W&X#1hyD_JfuqmN@2bde~cF`g5;<-sgeNz zmP+72WFY{G3OGhQ#}!c!lIdX>_Z#K)=F`-Hq-Ko62#h9hP7-OAuN%7P7C|YLU-v-gA-=D&R$BJ9eN%adgASVX8w%DRt*< zyq0?MaEBa|%R5v;8o;#)G=Y&kd352Vh5)fdA#Dp2OpGNAGtN3f5^c7kty*KFnkLn~ zd3W~pmKnU=n*es%EN1o1APXa#=Oym@TVvlC`QURr*~nl3e?TxgMbrXSx21-G5Fiy{ z-Jw8C@!PfMj`$`AD^eD{x4dsF2%N0qgydr#vyQfE=npjWvh$p>>_HJ#7aQYqNyUWY z8@pp&&0`1wuoWW+Wb=iWjAs{`=L&2AoIfIPS?|S2Txm` zY@k6-CTnWye`1&;_N=b6ZPq}>8LLi6Qu5oQds8iVZ%%RdNjOM>Fvv|=8>QWRtkKy4 z$dCgi5~)}yVIW4&JJPx1dR?Ihzg~GgPSzou+hicIg6+1MK*A7}^Seo~i<0E0cPBGL z5>#IM&pXCAXGd6=8l_^9LmYXmy2N1})`18KH-^{-e}g54Qw4w#V~p6f7;&&NQAeUq z?Wva1rds4oq^bdpt%NXEK~TmWg|2Q=JFC`sd^*9r?j}U>==bWvQyeE2N<_q33{BPn zQ3wz#a?ONG&Np+0Tad;%oMe3LWZ)U+Es9LmP^1VYr;MQt)yNncT`lKyV@W|kxyPmT z=RJ2}e==~H!fCB7B1GEC+bKZ6fE^j>$bfa4SYT%Cv@t>HI!Y!zP{IVOlceb=2BC@4 zktdrIj*^^hK$=Q)kuq`X7S+05-VYshUoZg@IoA=L4r>fqS4y2uL>5e+(tE*#Q;GN)?DgK+FzW7Mf|VEU z0EB^og@_eS=*fA#+|m?u#?H1=03$WJgk=~6)#(xjXdbLUA<=}k?|ieTHVvXgnQU=+ zWZ7Q~l+3V9c*}WrStxClb(aGIX1Q+b9dIQixR+2LL&iL^Ua>N|Y)FiPiWO@xstK#a=;0bz~SD!-dJmr z=;p%$u5_1<@Ju+zVaRT^la=Bu(E~WnSmwLqrxE8}9?jkyFD#HH-Jz1EGS>o?R!0i+ zZP`{8Lr9RPEwRi;I5RwhfK7RMyFwkYt0Tscytd_{!*$)HY}J&sM3{tu$$2*ve@qZU z5{#LUCKZQ7Ky@79l!=&NFjs02nN0Okf*i8c3~iQ};6a2yoqJMm7o6T4$diGrps~?` zAP|uQXvYl5EM>dx%g$MeD{Q%EE;{LE?V4k>gH40Ah#IgB_S?K$jg~O;Z=zqp_T#E; z7LF1|LewH%lr?o*3s6en#lvq9f4*-zZ(S+hE;6ciAqXttaD*ldCyndQyzIG$DoCSv zx&mb+VFMsU%2-cw>f$6BzForrreXxsNo988CR-vTv?q6IFo6I(ZDPcPoaMYzj&kzH zcFeoCC3g5vMCqH^*boXP?xi%y#Aev#g)x)`@tm84-QC_^O@h^dIity4f3l!oI8|E_ za-)(VG<67xxMUJ+vIK^vBY_F#+3h!)>ZG^T*R4(P+W?w10$K{DnkY0oOn~PjlND@4 zAE1iCHQ7COvvwq2HU|V?*;-@*5Y{j_g0mfA7E>T)qQHaUhUY}<2 zUEL>+g=8x!F0Dj7X5G`Uf0V<7XmOSkM-MxA?I#_vsw-G*vvgJ*DcQ#GVJDB5Ci0fe zn-^v6xL-NsH0eC?o969cW|p$T1oo+rv0$-Sa@wkbvV%)RfD+p%83loD?(8%)viMWZ za&D7u-GEzZ3ak|cFkK_Mr*~^FmR;o;XvZ&`bEYuykqN;aa-9<)f1<4ErNoTer0gZy zX7QXPV9r}11f17kY_%g}i*_{GHoPOOfxHW4Gw2{d%!CT2OvWe^6k^z<5U30$lCJx| z$@%G%M$$okCgftVBzfMvt<6S=x8^$gcDAlbXrma|hDDMPq6!EZNl74Br6U%pO_oTN zB+2pDLm@;-B3I`5f9IBAXx2j^Xtqs78bHune$nygmyOAlCedNtw+b~BVg^$%hD>BY zO%z7<+`)wykck;an8PT6Eg6gNV#&Q<@ZHI7%}VL72IXfutmI1DdMI zx^t8)wY2v1#S;^?xla!WN$kjnlQpF>A{|ua&C|D48(69uf1SLo*xb3xu2OJfYPHxk zRYxY`?*P3OY>-Hhh_sC)m%iKKylO9{_IRQ;4G|H8No-?DijyK}4XeI`8}!_x*NYIt zV-)z&bI)nGLj#0D83;_k=$@F641pjSzFX&CRVm5M^!s$$8JI)B zK_`QAQZnQ$xWsO_0|$g$R6YrD0;r1Ep^32#lW3xde@FtBBD$bSB8DySwYSM3Ov+3| z6vUo=yzz{gOC-e@nMR`+87!L78$&gsgF-Zl4W%N?GC)94ibTbzNg#r@N_r(MSV#hyMI>1yiW&r%5eA3}Lo|R(BnUL1Vla@9$}uP@B?1!yh%$iD0H9HsMuYUZ!QA|iFO{is&4W@;pv5f^m zF-%cKsWuFhX_U((e73kzqZ@6b7{W%$Br`TfjV6jlVTdHml14&eW|Cu5MN*L{BTSnmnV=U7uK{lG2Ow_HZhSN1bkuox=sMcwfd^X*E^NI#`n7zA~w&@m= z>nfXn{gr1wVb71Bs7KNd_6LjZ!40PUj07{+)+B=aNJ`cRcKgAG-6a&o3=?7nRtT<| zq=8ASI^k5BNhF$LX*Ame!LXWIvTT&V)`3#nQf9I!!wqK5AtoBdB}t8vjHaa zShZi1x~fYSv|1bj4*=lkfH&|Y8SXcA~>}*+o zr9|7wH6J4Ik%)#9wX%ri{N(#+oBl)(kr~Xt}m}`!n}| z^Yjm^?|Oh>oe>x{huWC8N*o$X4_5bnI$yo09Y|{ZVEG)~9t|W0%^N{z1FOk@;_}<{ z2~V`u_dCzc?DigBhKf%}7{>=7<8=+L1&JGNyaf%l4FT<#k?YtEsWdJKpn-=+yp;~% zaGSVB%GKI>R)Xv2r+U+8CuHRew^B;|k$uUu=x{cRQ4MhJ{14oY_2=Gx*4y{@poU02 z_hNT+amyJ9K>uDjrZeDMJ>{c+At%@{fJ6IS$3$&<{Z8M}(a7TdOpV*-Jlps{8QBq` z;KGw%8j=KY57){YZ46}E=HFc!dZZuh#$#bw&DHctI zd@v!!5mstqqML%XQ^aPiWT6*^VtEuU$-GW(H*#IQjFnp;+C;Gz5^dGlYV4DfxiE`Z zk&W8QRhEg~E6mDtHc`EQTQV$DM(!QTiMHY8O++Y-vg)>XN}ynH2*`qOWQ+@L4NX*I zW3sv>4fVU5Lq$i2q3p>!qPOpDBl zjLDJ7Rj+F3gPZsSJfuu5cCdd;0jjvT zqsC$bM|v=9X~7Ebtx5@dFmK06-5NUiUNyV5C8)z3ltXW(`~BB zHmyd2tiMFJrJ>FUkC*0y>hFFo8L1|c)^^(P9oCRHDoU|b!la%1)$cV_djuqWcL}g%8S#&K2T#+N&R)?QZ3 z#B7bae(8gA)N!iQjzqmrueWj1TNg;l(H%4*I_pA^?vyg~d5uzsajO=ElIq#pfUj^} zL|U3jlgD*hjO&C()J)&p51eF9D2u!&8ZlP@q3=_F?3Sx2+U?Uqs1;h7vI8LpLpr*< zr_8vsb5`4!=LZGs?7N{>p{>)K6O$}i*GfiF6nVkH!OJM4><$>*ieT?gpk-c55z~uU zwlZTTVeSN6AyYtIi^;X2&ec;UbjEJ&3ko8ghQ=9HH0>Os-t5j}cB^f=ZjIJCqfmDu zG*~--wRI+qTQexm;%+|>{_FAA@4@ZbiSZZ^==chI+J)k?Cekl6!k}&jnKv)~N4^IG zlj3mUNAfgIX8X6}hmBK%`vmD_{Z5b-g+xH^MfJ)xXlQ^m8Wg(ff%Uh?+dAB!zdQWv zZn4~?^!k3^c6RM2ox8cj0doME%4D$_%BsbGQx8iL#c-Lgw^o$HwSRup42Bv$DMq=F zqgc9!A=Vk4QdPn+cNKK=4w%S$XcM~<;Ao{|UTI`Wp_2ja4I`WwP-QiHFwvMzyc@2h z(i5p{qE$l(%T+lyX3fR8jcGvX0GUnlo?}N}uT; zLCv73h77mVbWVv_<#kpzG* zb(WJ5rf^VLU}FNSHa}J$QaU(yd6u{b1a*A|Bs5%J)= z%*)HU$*Tq;V|Ar5DO@6G$=yzamw9U8%8RjTBVE+W5_25g;JsIfs%vG=Ew-M2MI11N zmsbkvZ*g8ILv}+G_(#xy`yBqv{gSTyJ3qtLUwh{dI)trI=NYN;si%A z<2W8>(IyPm3<`zq*4l%4kXp6OySU1?SD`yHrvE=#p|MQv=U1I-8e*G@R7AMVv2&*4 zvBk-I6KZ1}#?IR_G#zJu==Ik*nlxa}u5W{!;0W*z0zn{?8bCINFcdLK*jk+FBFbp4 zQmN^XK$*=4CCYP&T~$+eN+ngu-h|wOg-#nH;{=J^t&O`GDF6Z^oaY$;D1em6tHy3= zP?w^Tf^_WM@_E6)Gio`(zyM%CAGL>;6;cx;4F^wZu4Ai+rp3*F*vqKsIt|iJ8i>fe ztr?jcLmVi~$cUP;Hs1Z|Cq3@3^6da=b%ppJPxBma!kj(WgZ-Z1bhG!}k7`ga53PO! z1zES-z8!PaV0S(GG`-c{m($c{eh~dnd*J$iw?3961`HUWc;5Tc;C5d_zVr8q>uL^uE}w{6153EWIuo6F5nYfdv7E)E%oM)?`FAzs9^sss)W4ZMXA5?HAbYw|joDVXUFhgrCi zymc98GGNs%qiIH1B6icN6tff@fNUW%MlT&11WgG!a?s1U-C41a2x7JqqhW?d4Vc`@ zgA*B{Rn>)mFJh(>tAQ4%ZOr1MkeOicx1SYIbt;O0sV)9K8Jv zw_DVV$&k7kCG_gZbPf@PkyA2jVgfD}V5PT?-PU$H0Z^AmWGy5`pqEP4Ma-#|kr*lU z4`I|mqIpi7=3SFnF_Eegu!M?Ba`n`VB1lSf)@am!md!$(I9%*jiFq1iTE$fZV}Eor zDBzLQXxrS#nf|-AW9t>hp#l}Iu7%o|3oNhygYv z*bHC|gF*~45M$!x<>S>w6P`oMc~hXCTZkr6uW}{mgOKiT77;4+vLkK6#fI*M<=VP= zqIU&5QBJ05V6_z%qb?{lkjdQBVoYX=y0u(?YgFFoW@2*U;sJ|A?JUIs)kVU$xouY3 zjsPbH&gyOLSO5U(Dyhwh%DK5=ZMK7zMch?vyanPr7@f@2i7#^LjjIPrk}=JzxaTgm z_R^6?B;Hn&MyAtvHZ0;;LAP*J;|Cx-cp&IPD_vX3jP&Oufty&KTXWrNDWU%(a7@5Vg-x4p|%>9t1iuhx*p;(;a+A&XgR4XkLiw$SJmO2TF|@09Zs|x)?K)@a;UYb z>X2BCoteRrQ!1+R3Cy#muG6`VEZ-)7Xwo%dPOW8Ly%RA2om0pT5))BQ1r_rN>I3Su z^(Upv>t~K&-A)Hq`EukGCO2<&%e<|uti@JLtOls%>ajsi-Q`tM(JJN(%B~U|>2a4T zMP>_)#c-i0Gn8FaEf*@P)Po~hr86gW>A{ADJau|&GBE%+0X*i(6k$2Yr$CB-b}75u za+Ng6w1kpl5R2v+c&9YwvrebJ_Re;FJWE> zsp3$gsX9tAAsZMWEYlLkOSr7NtE`AaS{DZjk#QMHHlo@TBrFyln9PoUO)V6iyU02T zi#S!vQ0@qI%D6UmhS)fB9-M?fBmMVXv|LuaFzdHy%W&qV8G|C_&CBd6rx3g~BR6KU z1Jx}9lCN)hb30dCFI^&ai?@$!6zpwP!bfx#HlY<+xvLIi8Eoj$@r8V#(#-0Ttep_L z)=_fKR6uu4JE*Xzdw+IP)YX_r(S1DqbPI63PdneoTF;U5q`2Y-ftZQT5KOvU6?zl~g7 zg4RRFvyP`ty=tvdbTe$uZC+}eIaDHvz1@h-R;CPHmvteS-P)^9H7c7`4vtF`TXS}% z^Z=PaX1{G~(6Hs?64TBqJRIN&i&9eD*&DKAp=h|+o z_Fkp=x+=PjP&OZ;JpBgdp#DkriJ3lg>y^DSZ9d(GJK7TS7EaiziAi9F+l94*_#J7L zN1(YBS{)>ugN3|G9fO{Atbrs6uCxKJjl&5*=SUS(y9f0I3bB5rCrv2+wA zT{(4bAW&zkabRRi$mo~<)m`NDH%8obLUm?D;mRT#(`+y4{}^U=-oiCK>ZvR3+0Q4J zWmq*@!riUq)dO-{k&Qf|G**Qgc2kui;|r~aJ6i0c0(Qk-E1FU@5vql1qm^c5$fs|L ztT7PMiM`gcXzfU(f5CPbe=1mK7_s5y_zXzY+-Q#=RF3&&_ zx8dax+A@vSOF2YDu@ze4DjP*sC&$ZLI}@qyYwAyvF>G%$JC^e~f92lo13+e;B_TKE z{m*$#qAG4bf53lv{#d=o|9?w=zQ0SY@2_f_rGqj!e_hFLGlny{Jx=AwQ$2=PQSh<3 z9w7nOVu=EtuGZTS_4i_jv-PRK&)3RcD^UtWP2oJ=;EnO=UYXm;$WdSVrx#u~eflcos2{tGo z=%O1We>Rt@Y9w@UyP56z+mtwhXb{8dJ_NF8_>~wWTx6Qx1{JgR=gUeggi$D7bZSb+ ziY-klswgHjqp#onzeB(3{)Nvw>SS5at7vb$AxEgoS(nSNv~x$$MY3v7Y{Se-`vpMYZ9GMG=GmQz@eCjXchG_Os{$ z3A7{#KwG>$4ff(FK#>h00mBDz*uK{bQ?B?o!3iS&1YHn-zoNJ-WtHOQ?Xn1?ZKcFz z7h8sbBJH?9fms0Ts^~J5=We{6E)VzGgjF4?DufthgfEaJn2Y<9ojzyyWSsB5@9{iY zf2_k_dH|t7%rGDj3S1oi{a-t|>wGcIWkw!19ccnf(3ZVp5y(rId%gdNI3i@XFSYJB zQlQ@*{!f_4;;Q*uD*0{mhu7Ta-!`=o00`Sk1SKXUHV7CNZ4KoT$=-b~R})fY4d-3iThdocN@p= z`8Z^8ppsl*v-l5cZT(d^JASDozNb0nJ;`@I8D?ce9K#X;01i6O24kHj>+O$!MqCy6QF_z`s4#s}j`16`C z?VbF5p8>zz5D3A_;ee9Fx69*l+1qSG`fTNlz=JS1z=R1JOh`okXM5Xx`mvHoN{~no z=E1(>Zm;smWGD?~hy+6f1Jt4bf9d+(9^AnoIHgWg`mU8D_KYnu9Oh?Q=ysco>(pW0 z9FPct0s#RSat!@u`KjAwJ-4$kyH3;V`<))gj@fPsNGzG4_R#j`IBFqkj^lL0Oqf3FS}Wk1z> z5ePwO01QK=#JlH!!ht2F{Z%M5fKW?+V=<4#f4<7lsP6DWy~}yN(S6LGvv~q(DN4mcGp7SHNsHeurNJ8cq zg~4d@dtW14rN!3>(=^nOkTIYXwZMGtIKn_8kpc@Y@Z0wpx87}e+se=(CSe4_h^O{> zULVZ6bRdQX1_oDu&R}hT@MX~)KyX1&AZkd8So+zFMwljUYZR#ke=1LafC7*QDb0Z6 zl9sYIMDj=%W*XXr0Cpda zi|YRqc*wkq5=m=@eW5Dlb{t;g-~vw!BBX#%YYB}Kj# z*)R|>pcZ}rJ%6eE{ME4mSRnn4FDm3xm>Zr0~)e?xTwN=+b>2Z{&0?DIM6 zppa4_0c!5Bwx(l)LPRtsz<}2LuA+em4ywI5c!_&d5Re6+mM0)``|qgkc?vaemQw>GDd#-g?mmf2 zH#=WNU-!)Rn(#s|q=d0Cb(;?HP$4m)AA|Y5@0x%}^gB{a6 zr=Qey!Sfk}a|#J9Y-g;E5J zg6-aMnwdLnn}?5tC2azy1u{x+7K~!{Jfh{ZEUv9|r%@Lyl&a$Lsq^uW1@w@QTw~v> zhCfw3e~%be6$wm9Xkm4IEeRnPH|+kv&(6rI)T1Ucq2CHh0D(%8DF9NOv|T7t(<8p0G(nFmTje~^R#0;CjxfEGtRWp&eP)JljhGMU?* zmtApJC0)8=eP;L4+N2;b2_?UogZo)kZz#h0SMG(RhB-nHzxeYwZ%6tm5=!-Xc{um4 zZ`00|6vH^At~zQ40v72~1tp>$xXPrM0aclBNpZm7HnOxs5KRW9!%GhMVO;h8tJ7us ze~mFEhJ-FdDdo~%-{6o0 zcTebkdFZDW*+i-KfM2oQs@$&RWx$2H#?|;#?J4H*R1JzE5$U#43PDR}tJj>jGK zMWq0g2mk@i?O?t1Xg)+y2;m_{cgTWMNY)6#HHh<4OVou*kcAsI1+43L4nHIjVi(NV z;RJ+S4{gI#6d`|RDSp|11|BS;n8hlH(!X!_6IME<2r(}tkfa6OX$4J{gMiQZn(t#> zAY8qD>h@!+zh}&aqc7G$ir>yMr@^w+c=x61+Y-^6^{FxonD8(0v zU{G#z601g&NP1;ThB+`Pl#D)hM1h5{)YRNol0x7Lv~$Q{zi+tnK87EEk^K8U6LbGtFW}S?5PRS5^!z^2 z84eNJj9^lMJpY?=(7Q%M)W2Mh*8if^yn}iiR$|-df^8g^`q~45r_1R60!w+FQBJHy&Hab!@aaHr8bZ=v+Ki&b>hvoVQ>1y5a9>-lLfZhN`a@qMSgE;V<312SybY7ix^`JbW$Fmr_D)eKV5+U);~K=e^~Lb(2&!CqVBJ_5B={Z zYdWpxgZ6lPaN9MME|SAwX7F8SBk8LA2^i!fAPIgv!5}^s{(J2m)apfsty>4X$NAiC z%XykN5pYK})qB3j5g@_g+uQGau(%^#`aDkm`K??rJ$KIDYw_e>V-eMHpGUK{kcut) zMe;qY7ZP8qe`&Gs`+l~rd=H-qDrF|w@~D`xJN&m-XUR(Gd|xF8yAglj}7fuaTF@FGSO8?!&X+`OBfU-4TFUP&iz-H9&D;>OwwWu%tDN zM=663_Pa0Jw0P*e2Rp5iZ|Mgb2M3tNiXFC})mQyre?G5wynEvGg@BUm1GCrsYZ?&5 zg&MJ?c zNeyHyf5Vo_ViV2d?7+{^e=BZKYl-3 ztjG3#f7`tm?|utmUlw=fcRzDe;eB&|e{6shxSek+|24nA12@?EKXY>DumAS!Uat}9 z@KwLH#>3?hS;uXmnr6NDUhQd&s;|YOBu#d>fTcz>7UAfSW(+uW$^Vr!L6ctLQ zY86Q~@2jn|Yx-J0U9hp@;yBxt*x&aJ)2+Ao?FKplZYT|;mroHxNg2LpXQhwcf9`jG zPs-``eBSSe*7@56F2DZpe|GokQUVUo4h9xAKdh@&b&%#h{hgJ14<1)aQN8hgmMsnK zFNA`OX-g_?w5=MAOqy0@V^O6ONf<;yhJhgk)GDjg;C|;VB&cak(K&~M^z;Wrt+DD<+q%PdUz;z88*4=l97>)t@DvAD>ACTa~<%0-o;IjT+N;88AW-r zDA0_I$ef4Q@_XLkUI(VM00;ptf5@O9o@5mfIxTPgah+~L&c@cGq4u--e~jMSvC;B- zo=g5P);Z5dL+RnV@9OqRVe-G`;(Gfr`L=Y5Aui?^vzk{B{{(a}V#ar67-8Y-cdj8(k z-+12#d(-SXf3yDYiJjK@USEs*{$qcw!}2^1_uO|HpSAHn<&WU6!TwDz_J7@ul@0V+ zD8GAW%qHLVxy}F2YnI2$``^*h{$2xr`;Yp6-cW~I&U5j3`)~QXf83@yx;=3^!3X61 zj_0=iU$d{}CYQ1xuJ>K-e+s@fMoq5wpVjm0-v7tqz3+29e0~3!vEo7gvG?7}KTGxyZL_4`2X_H_x#WQf79>t|4W(sNcVC4AKPc%Z=u}%5aIXh>W8)8carrS zuPdALyXQg=54#~AI9W&zwO@q?jKJ>_WB>~>G&!*y`(h# zQb-a=N`FBbwv#nH&`cW{C<^Qe$VXG8LV{>yYeaacTEjKk9)kv^IgrBGU#e?ZekE$#Zx-Cw`+ybN8N zmQ*r)KcP|9>8a#osrLLDCf(lAKv(N&0tA-H`i}$fdQ$~^E)J`EkNdga4|DPIz4l)r za1}rLk4w+bk^|&1FVxVE-=%>sgwdkVaSa#Z4wvh|8hu+f6GMx%)tc_H@Jw7w5egV_W zd<8=gf2yM6HyFX2FuNXi+1 zWA-3_`h)<3gcGMh+FohE1J4y82nELTYBaCj&JU?^N&DROftk7)@s!63Y>|W*FuhE+ z|DN2b!^)MwALEfvzP0FbwlsTI&)@32T<7l6e_aMD?tp?@f`3S^>jXL&zd8?Vl=`&- zU;FH3&y%=roaZm8zUDr@4oOS&6h!<}%Jw))fIinrm)@)IHlNGo^tK)1A?1Fy``7^j0fRI3qN1$rdn$&wh<~e80p-|`zWZ=E0)^6f2nc~BAZ-aG6|hJFNN4~~?yBpJV4@Hp0tF(dts)8mLP>}Of*6DeG|~Yke~{8h zNkpI!kr4<$1co3G#(^O*K?xxPXhH-^NFfOcu^6-~w6=m>~}kqi<*Atg2l z1SAMzU!C~O>DoT1aR;Vr&DicvAhdUo$jAoqMASk7P8cf1$MziYh8@Ro`~m(5@)j(4 zkKqj(G-%Oc#flUtP|>3X3>Yj}u|kCn8Z20`qQwmoBuLRiMGO`!Sg~TojTkUsf3af5 zj20|d=nsT}{9*wZ(AZ(H+BJNCJV#bUXC{Uq8MGY1-V8Me1jU9ex{`LANp79^n zk;(oq^Si%U0Hw-Ez#>d!;+SA2e+))zj!{xD0E5I6V!3u{rZ%*@`fwN>>A=`& z2Bax5vUpZ7k!cGM!ukyaq!sDcky=)mQIAbCqxkOhHPG;`0=Sn)3KDAVCTmqP?o26T zKv%EKkWk0zqQl_l%C@#Sd6@Gu8o1*QFwMH7)kr3f7pyn1GG*We-mLZwlM z07>U^#z*a9p$U1cF~^RCkk~LlCWMk`K$rqU07DQ9VPSoj7%TA-xpXo9c6dIwqlkI; z1KtAPf4}v3?=|u&A&@GSe;(#f;qE_;FL`bX9ZcES7;-HI@PuD-Wy@D$NMk^a`Qgr% zLe#TRl$ogRz@Tg(-$5-z6jVn73Zo!^u|goQ5Q+=|1|YEjSfIpKD3MWO0})7~#RY(@ z1Y!#nKmrOXO=+6j8&w#@q}r;rw!fHwpolquB7!6W0IL9sqN-a~f6A4%$!lq4R`Hk2) z-)4EJM2P+t?*>pLe|u;GFvQ9w!5*{w7TCr9?PNH_At5?SQ-Z8PKIahe3qUxnWU zR}A3e%G*%DQW>=XB-bJ)!hAUYf!-eiY4X4Sl@Id%S1x-0ZQ!))*g!G;Dx1-6pDn*vkmQyRd@{$={fEItJEz1mR8 zT+*3=0|NrXR)7*9sTc+jg1`taDncK+wPUvXjk8Kg+jm?t1c4DS05AzeB_L*Q?IASy znBS)GliP7W{*5|lDjEJClVzS>e=~0c2!gSZ=_x1x5ovKE9e+LLi~#%@?dxuE41o|# zQhOfO?$_F|%idh@;mAfG?UW@y>e&2EkUaKhuXiV!!xdQ=)>&32Mg$}XKm>3_F{)3B z=B-+D{M-I`*~vU5xUpC9>jNj|GfBcev!3fWDW3kaK>u)D zAsx=w16=voZN_JQR5h>Xwo1}GBZGmOmM4%TbWQ&3m0uI`h>BZa2`e^d3oL#+?{mIq7Aup z#2$#klRiRNLyl_Yp9V6x>i)M$b~S#Z(IqsTBnV-FD{M*Qq@ccwe{+)1zaWL0p$pc_ z2Lm+8+Z+JNMiOjX!`a4|tOgLBzOLX9h{}p9I*zwZfgc$YOxte#k27GytDSNNCYZwL z=X>(+x9M}2LRR02Y{5V&Ms< zdMPzUPkD(anw3-Reftn5zmmSpH{)m4av87~rYL|(1DEq%``t28WG(LipK;|M1bJXZ zg06j$=%vvXPNYvhTR2JIZso%&nn;Ee_A&&d7itqs#0d#caV}{l*vt%oD+Q2KAW}w* z;>!#`fT&1Tf0}0D@g#24mV+YzfDweUp(N?5l4+zcir{BLj8RL`@C!PDQL3`@*e4fCB zPfOVtx94xN^YkI~eGgA}!n58-K_q?6;f&9DlJOm|f4HJgyrD&8{YMXvKWnTFCm*h~ zj1?!=P9Ljp&h6{?^}v(&c+(D8*q7Oq*r*dk`$nnxl;_!Llb_db7?=~&`MdoK^Znnu z>px%E{b!#Bd#p)W`CBf2a&XPWaMS{Q zbi&MGe|FbOwpnJ5N{j*-fFXPaKFR07PT!x<;z3*~3j0nlj*rl9%DMDH4NQJLnop4Q zeH-7Uj5aEq`L_O^VnC|{PsUAX6X)iH1I+8`wgiAeLuX_&C((lH%!~DXgf;OTATNvB zqn?7i{r?cg#2}yuJf!@Xf*>BQ*|jHBlUGI=e+UQPXV1T3$@xZc_WCwg)O%tZNO?qC z5%Vv5>G|h#$v}(K=>EM3r2PJ$jgOR!BcO2kzkWGA%HljnosGcRFS?oQ%hx`yJ+MjX z6WH78sC{=s%>424A7S+8R>3e=bm1>&wa=Hy)_ToPwpYVE-+sh*NO&N7JxFy6x$EGF zfAwky-|Yey#{;8|>uV;Q5(HI#1Y|H9O4Fv?B#H)+DMAsXq{&uhHJO>eUpI1Q>ymSr z=4XaU&baF-nZiq5GBwP`XoqS)J{jF)YV9BgE>?q%%X-0w4*;%Bpr0D&dJ5++2* zlMQp)=>)taNi=~TTPcNLN(2uLlye;#e?~sm%KMi-cf;Jt_jevRXLjDiS3Djsr!@By zNkj;GBa@~`n)I@1_*{(#lHz7~23@vJ-bZ&p;mPBrzyfI;q_+SVM3JnCIL>ot4Wt}z ztM{Kjdw*`*XQk1D#zIJtN*{gMvq(O;l5vz6Dirq{bCd6Y=2+G#N;_Qj@^FvzT?Y`*X!_HY9 zkE6KQ0iF*nKySdg&SqQ!g}?-NRD8V)xz8nJK>+x1&!q5C^$-juR>dZZ8EvZ>ID&>F z4TuS`UShb)Ul{<95ofXHzVXgUe;j6wo*G=`5$C>eLFFDZ$shzpBspiEL=O|w!(|Cgu-r!g=FB96qtx&w#r=C6}58o61x>Ni8P|*PH>W{ zFI}RD)$qIHuer5&@ff`;&z`+1=iqJai4-)8ts=>NvJxm^ z7DS#CN~+*N4J&OcjTcz2FjcWE4P0Q|#+DNlm?FlI*o0bb>8;~!@~u}aT(`o!UQcU$ zKKgd!jIub07S;LB!0Z?ze{BHB;PZq}5gwlQr8cd!7#b>Swu|g3YNj@!pbR#wWix>j zWu~ZMeTasELocvOY$;-;sAw)x2v}?o7MP1nLU(GC0J_pj<4FbPfLB=!AgQ4uwj`2? z(=m^LJcX$3A+#SLLJMaW53z@?>INlM%# z1*#&(fV|Lw7#OZGTxkmHNmptFU1=dJ8c0bP!$6F7pg_Q>*4s(Cn4zMPpsA8&){zZO zfI}hOXjCwvphY!bf4MMJvTYbm7OZ6p@j1w%lHXhKFK z1dH#hZCk}w_NujuTUz`G1USf#+SxwOlJ2Jj0tHi!M9p8goB{;AUJ=3pDfPDJz>Xbs zxC)A_f-)EcTFVGN=3FxZ0X2~!RKU_E!UZJ*D+T~9RK6LeOp~Ee7>LoaDWf4oNm5$% z-ARmZADZ!uy>~CSo=bs&4m8tY)ybKV0K)~GDTB$kYyu?G!dL_a#s)%G))khsXo$3# z&Z0}6IjhFBc#{FB8-G4wBr1?d!wb8)s^KQpIbDxl{PFVb?p3vl#SIEk0?lNl2!=yK z3+*fnFyaFd;j}1WCaA#*OaRAeUua010V&Z42#64cOF@LhB5fg5(h!VhHUdDZXhKtH zND@Jpbcc2nK;sS|z~E%%3L2Y>QHe16I~y~pd3Kl>O=Ynm0Dn}baGFgst+?@#h@^$D z8%>pESwUtgK5CWidgH8n5W_}X0|*9j=bLj8IbB=FN<3Wjyz`>`rMjjOBrsvi8uG;M z<6#J@@ZDhI7Se#a84Ck+X7J~ zRr@MW4XjDgAb$`nX_T5rSoNprH}bfeMN)pEU!6@KJ(g*-u!%fa5`;1aj}*unkkKsK zo3U)lN<=NNv4J46M9M_UvsMN|06^5zwSVbLuiTTM95b=c}Zz%G~Lsm-g6@Gu$Kt3Fyvu@_$_BhDsi@$v zFaoiZVFbImZD~G1_#e|>nLrLY1%SeSZ<~Ije?PO5n3$LnK#-F-svduR<@8)x z0~BN=2nHVIKC>p1;%!m{N!r*+VUppQ4!9d&kVr!bs}IP=1eydKLpH|3A|ERfbooj{ z*Sg705rl?$6ppt&G0t-2C?Nu3MFu1c)gggK7(BTcWrjeJ5Rf7DtR%a0ooC=>A=EPh z9V11&x)hiZ7?tj(YQW+1mTP~XcO0<5n-7y_?$1T20Djl)+W<2IAWVccaZpT2F)$>^ zvB!=yjER7gqztrBgpJ>I(42|2qo0h^CS=2|;S8-MfCmVcvdxdkaMJ)XaBz@(A2z)? z0w;@Z%ooFzo^`QUq+#8%kl4?HrcI7g2Wvn5AAQ=i#vRFza*vq?ef|7_LcXsaC*C#8HLFs9m^X>FbLjsUg0EvkR z08=TFN(iekCSU*_Yc!6;?Y2M>8Y4w`w=9OeD|%icsRKQ%O=Q#7+Q7x_j`3>qE%EW=&Xw@Dx34Q#KV|D(>6qvl+LHo_AOz^^5G3E zC~w}nezKGQt3-cGt>45oQ`0y z5jCY}w%r3DX%jLaN@XQnLV123xj0Fh^2%f@1Hs*~Hle1ih9L<8N&3m2z8_7W1EwEQ z=)U&*woeI?x>GzPq=fi!lSr*5eXVvKEK#T6Bj*2T5LqPG8L+iUcSw%c0XD}Py) z&En?RtM~@#QC5nV)cmlPf3A+s0`pM; zOoRjkMf0&}erIpxDff;;FyS5imv$uJkUurL#Lmu2LLb&x5ZA(xr*0+&PMT0)fsmj^ z8Aynd1U+kTIwzPV4lG#p7Vf#lV3qXQESCq&#%UOArcC zB@1lY!+&>fz{#sj;b9N&e;L9`U}XJcT*e5jBN-4lNiFS?{{s-8#?N)~_)`orl)#z% z2cw@qr?IAV?6kNK}!8BL^a9NQN7?BU~gYj7x2J%UpyQCPEM}*C#8*e}-$30&zkyK!QZi z=l(u!gyHlEAIM@&5d)RJ&RMg4wo6$xJ=Y`qoqC##k*SxH+VWGl<}wT?mdhuMYmcRr zXISCrXqkZn0uaC1ouBdEYlvx8Al{Y$O>QJ zZiFxh5m}@~l$ByYAy!eUtc6&tz{q-XT7-h&WK4u4*74X-le~C*e`oW&Go zZ{EpaAq+3qXiCIRl+Uf3?9JgljFbWqegw3Tf(A~RN@W_`EdgMCM(k#j`rNa1gy{Nq zvH)yX&v6A6&lPuag#)vU{%jM%aU}? zOSLkBM<~KzO9f*LFwE<0?zdLj83ImiIjNM9Vi=HIe*nlFgp{t+stfZp=5F-qIe>U%3yrC6v)8eve6Id{oE&xAEN#FeIX9MGL_&u!Ttn_7u z8Z+baT&4k}Og+rbem92p1G6snffcyB;x&h9a1d)7JQ#4f1J}hgh)-au}!krz(~q0V|%ib#~tTh z7;~&0qkc9EHNO@3zLFE5doUhErdfDM*yTP zrDKLoVg|9`1WxfmR8OSeE&AbxxV516hF;44`8SmBjbkaObVrv*IBLcr)!~ zf3fo1@_Bi)0sMceR{cD%3dz8M^;>?W?~&-A9)0JlSZsnrT28_cc)~6MDa`g+I`P%-NREqFK)RCL7A!eYihCA0Miea9uGGCWcTr( zw0)%e|2ymB_q4+RC$S=XSL`xYwtbhNKSK`I&+_$pa4Mxe}YMp zJ_wfmY8&+)M*I*UU&-~qA8Xq_?{9yGg@FP; zNpOifSV9Cf#D>HWuIo)B?`0;g1c42$zyO#6p#V6`^X-976beX`SfsFy91sXfM8R|9 z_H+QqPP5qX&j~rjKAol7q68Ks2?WO0bKlFH^$wRH8qTZ;O5{lhe=C<;NfxKng0AoG1hcF`Fv- zX({?1T--QF!T>;~Y%GFe1Tk7h+X7Ji)7(xUtCGTAj3>lR``KU_KSWuRe^<4d1pViY zf}k;s5E(T_(NG1Te>75AD6DD|79}=~QM6(&Zb@U%l#UPs13pU0eZ!SzB565h*pTO^ zJm+L+-7xOn{Ox%;at(ncDN&IMvf2;D&B~x)Nd-a@elappQ_ z6Tt&Wi8k9UWDF&#ZD2^MN>d|>A`=2|l#_-{g(74w?xHG=e_Sx6V|wnqT?>x8$GN;E zs!x4)yWd_wO*24vW=;}Xz~OX}k_Kebw!o{29-Q)SVy;`Vjj?Q8xoYH;l4212ON1#R z?UoYK%aG{6!=f5wbc}ws=*?HInUFWx1S^0JsVpK)3`mi#HW!v|f*~Ri<&uy%M5a10 zCX<@x;4VOtenfbOq?KNHO79DFv0|@Ic=O7_7dBL?b0CKD7r*wXCjf@TPBDsQCpV_le>vV z0GUd`j3*0Y0#93LObM`#F+lXWRzf1fq|0lCU|1oXS*8n-*{jP)L~Y;90jT z<-8D%bYRpa5u-*z0AvgR#NjEFLL02Q%$XP~9o@Oirf*%hLbJy2YUQV$L{-(kIDkOW zHDn=#U=hkmaI8Usup|Hs0z{Lvw>f_fo^ZM`7j@s5+l2ANhD``#3Ac@zyCSMg0cH@z z#D+125eRLtNf?>%gGtjug=y-VGuej9>D9ShXD9g&z2$G+=_NP%PT>Gjlx7J^6EB7E zzXH7Q>%|9M+<+t?tRk@)0zKO_Nw%p<%M6f}#F#?}eFoj2lLA5oP#Y<5VljW^mdJst zXymLS32L#Je2#=LI7rQi1kPJzSir<#0+}mpz|Y3HzXv(4mfJremsr48SL@?*STiDG zBn*HM!7_Ti-IV*58_P@~m==0{5^3NF5nfv^1A`Be-O|1h{im78K5|)Aiq7-a?+4&C z$-?0R5Q64U-dX)4G~kd3PfLGD3ALQb*>PTZ z=bA7~Nu@9}&7%;mNY^yDU}1p?TJ5{KG+eha%aMrDrfTOlWlCk;uAJR-b=`H(PE`v1 zM82LB;gV)htUbiEk1kLrhD|$L37ZLl9cg4UGAS7{bj!Lls)$6zWXOMj5HV3x0zqRT z2t`<8LXc^JluBgSQ$z{FD-Sz$1>Mt|o^{ez-u+#8jXBOhNw8qSwi9Upq992j8)VW1 zA+#VH0vRVKLqwVz9*kScg~m_U)?-?;8(~%1{^9>E5zJwHgu_xq>!j1afY3W6p&89 zaJrNcSlgmu*K#~+r%mRaNQT^Tz<7XSj!3DpMZ7kWx6pf2k{f>{e$7(F6tK!i;H3QL zQCNNjwrZI!LPp|&63i$GS_oDs-$7LHn|#H@Cjqe*oe&9h;c2>RS#plEA^e1ry4H4K zp;E;3DjO{l_E71>t87Fz9Tli5ia--0N+wa~36EH8t--`fX^Jsf9SA56%Wt?1p^>Bt z`VU|sW*>`2@aM=XV2!lSO8P zY^7y|z#o^F^zokc%m6<1C(2K_nLx?o?)Pl~h0C`--*cHWwnDp+f>>C!5(g(4y1HeT zK^NMF8W^yPEm0!`K$4%+B*+;v^;plO#E|zXEB5)k)gw>eJImhlt}w~cea2Jo)?~i6 z-_oX$G6a9}5i&l^%4V)6lR9R@0zePQeoOn6!y(m#&v&Ti1p)>V5nr%FoAW!QnnZ#6 zPmyPzbKq2c1rhQPD2^LKPbBpy4w@&_c*yk{vY(%~kv4cwu+9)QbLOn@NJGPggQ6tT zIvu8Cl0>Bt(niIhRKWl?0A-9wM4AMf5C=HYjhcT#fuxdRX%mQRWss6>ButrBNw#fJ zEKn4rL`}g*!9B^^v5b`uV+1TJ*?_j-uEq+Q2!nkjY|2ok{F44uRy2fbMR_gK^;vFg zq~2#>S4o>_ySEZvR#yfo=XX1lNd<@zF^r4?!2(RnibOF)iHfiwF#%x8AXsf`!ZAPb zZGnFa{U%$3I8z7}oIlu`#(4>upXd$$6-gZbH>$rC{}s$3XXQMPNAch&MnWIXAzEb- z1aSdZ84)*lDg`17=0lW~M{J0C9}10sqKc*;IjOK{XiJ$HsjPz5tb%6w5hV|41UWPu zTr5KtBIa<*D9ME56FDuWyJLZnra!#jHj)YkP7?wr98Vej?UQP~ECJS&m%WF7$RzWV z$ewRB{w{l8ZfgLD%04NEjOi&%=Nd>7lQfnY{gngxxo82On3+%P6W(8EGEZ%{N#UOl zdw50x4j9>G%4MED^6&E(_=x!Ac-!?a)qM4PTl1fNLJ|$zQVxLDdDH7_t+dsv93+o#3o9oPWVXgI%49T~9zH{fxw@cOuQiisGH|6c z@+8|azgj5NWN%Jg;u(C?I?9So$z8751wmv;h;94qJ#gcNhxf=(x6$Q)@5x{sdWX`> zXnI97v8N#{N(W&mpg|f~jZC;!axQQlEygEgZaq=pfw~7(4G7n4mUyRfWy@G;W(mX& z4RM$oHE|XgO%pDI6hQeMbjhm4m)TU-3h~_FRiSkoa-&B?G6EZgEETwK&r!DAT>&gj z7{_{Oj?`gNm=-AFBkYlXhYZRKUL_U@4#b9KFqEc{q$Nf$gsU>oRANg_G=jb)5hb3e zqMeDPky~*DM1KUECiAjK)0iQh9Z8wlrB~T_}LkM9h~4{Fxk@MbQ+Y)padWZL}XFACR9fStm)4y^%ZuM3GqoVuc$5-2G4)TWD*T;v{Sx4M7v-zP`wF>Vb8E)A7mzo>B5v@p0z?siL{sg-5dk%^6p~o%TgHs$ zAqfUsNeElU2<1J@33W_ATM|N9825kY{bTs2_&cIKQb{d4TA5G;oMz4>NrX1SD}e$8 z{MZTmEr#z&WbZQ7QveeZE0BT510q1g$4J8Uv#UCxCpFVT8wA9RA%vza=FQ^ul4&e6 zi=~~}K&~Wz&0Nfg!z83a0Ew#8Y)vrQHUwcAs!3Rp1_EFN4C6_{uy;3GTu6xw0x;4t zvw}&1Cl@BJ0SJPXv~j9KXCrVX^4J*wB;wNWJipW&O1oJ1h!IDWk|P4T$64H zOm##w*&-uhZvE)`SE;;!EKzPQO7xw}Py{xNu%p6%*a?6fG%FxLAQ&vttAw%nEMfiE zeA;04+2DXmQQ_e+DjAaympUE)Q^$UDmwY;NdX!*7L=YtBzdJ)r(3CvP`MJYi{7)p= z**Pv-4oM<-kdZ?|wPmRYbk$mz4N7tmNkIrGqM5})kOCD>7zeL70gxjk7=B$3IpZgy zfdw{N7M!H3m1^rifg9}*k`hGWl{DLML~ee4xxSo>;BSpqw#xCCQ4pONI1Ke!;r?*H z%Ji_$?F>JQS_VMKqWjq4O!l_V-Xyej%1e@&l#}|p?w9#CIz1c$PvDd6!X1C6xrvhZ zWuLkITXQEF90|tRJ&bH3?QDP%P{}>wAF+~Yfnar*l4Q!pD=9KVxXHOhA;b>e(m^tA zhGR^d7Y4y3O@a{EfC5&WBXrc*rBno%?l>n9W-ye86^N1<^F9+dTz~=l#Lt+N(I)(^ zRtT$B_shM!b9L*xWM&z+k=l(6^%;ySGab1?-pDtn1DW17Gj#^JMZ{hrW85mOFQ7z7~V zdWUAm{2@KnbrA&%hGYNAd6zF={DMtC#PEG2EQ96zo@1d}))US$@01pcm?%C`=YuBE?kA{>I++WEL5{&bsR@B# zXUcYf_5vY=1ab_uU|xQ#NBd%<0%IsU`>U(WEPQildL?Xc3y?0KzV+j?GEP))Catkb zcNGUK;nR#QZl@!ljd~mMtfO^x_vPDZU|vrbGelfx+`0pgx3_!NXBv3mLfeFh6;V|! zOb!))2(KS(YWn6x-P0Ev^$`()5i9O9)aS;_i|?*v4dMqRZL0yE2zg%s4CZR^=xNsg zJ8}kyDl7zqIC2$S9naE4q8vNUe7w-_vQuHv?epCyqD|}EhjjCf1H7S(M61n((joL) z-#xSJw*0I`h7N$Gtmnvih)B);$>Nh9R;gwvw)m@B2{eCIT9{(Mm^Vx3j1Ue>nykh) zJ<0n$p~pBdKL)bBfEjTL2QJ3+hHRck9k~7jmAqCq0ah%YKG*rnp*u5^S|? z+)>*$)zP54TICU|a{l-0G`M|UH65AGZ%s4|LF9%!+I!Kzubfeu11n7x-a20Lg#b>Y zu?66&cdCzGF4lPx-`ZU!vld|__R<)klD&u`oE$0Eby!E_=UwZgwVai%KH?XnE_jA` zYW!$L97aMFySn7uq#-0GhlpbRi?H_|W%z8244bsP(-tgQvLxgVpGz39zppu5Zv<#< zMV-4}Y>9Q~+>?s?vAL3=BRy!ij9OG4D__l4d*9QkB8M>xh2WlJvmL7-qdT%Nr$}B) z4kBw2Vb}$*2X27Jg27h7_tasfV~K$J2{O>OIRS_YU-v1oW_)1)na zhAQb0vg*ibx9_fhJ2oTe3D$M4{R5gKLl3^sbj-e;G+7~f`jlkuewxKVmU@7R&NWgn z45!qJg*-aEv@sU~1? zU>$QCBYME(54b*%O3eA@GdlJ)sLJ?@(i19WjG#yR(V)rhN=SrCD(V4C=Y?74&*0BD zILC5pR&NJ;H^*O-DWw4e9Pips{|Pap#D~~n+YZPyP!2qF16fh<28o^>iw+5~>r>{p zwS}G>Rw!0eAFz0}GdA;(T%YZ#8J*0bq=uMYbo~;DCEF9&zct;Itosxh%;m{59Q>`Q z=i@9=wPtLL5@Oe?npdF_ouQF7k#0BcsydAqSUhBlRO45A*{^GSV_MGalrq(*)ieNG z!PZ89IhrJBaTx7Z8(Y=O7G(FcUbaRGi9?^V!qpKe~uZSBQ?0Gu?U@f@RW&B!8#EvSg zxraxiRHI|pOx}RRoLGyQ1V6Dz6QL1;8eN$;rn1lW>?D3?a2zw!{9(pAOA(LJ4_+Fp z0gC_yj?RWpStGrMN@OuWw>QCJGIFuhKOBSY=O&^F;^pL`Xh27+;V|u8oX-Tu%$%$- zJ-ngZ%k;5Nc*-EjqlfsMV%luxZBW3=`i037BoZgGm*Mi-m{+W6LaMrA)d~Z_cz(#O zfvUJZy?sdWe|E{=yCNb#RIR;ISBHqy!v{zOs#bVZS=hk(_X_d$8-O!}`ju zj_m;cLN`%cer=Bz6~no8x$e@`ZRPDDhoPG4<0HY6v&%gbqn+TwRvEHM#eS*ei4vSv@bR?@jY5I_5`B$GbArNz4Qs;peV(Gr^On`i zqh7!2`gi*0#uP-@L9Vg@q%7vACI;#DReYRy${?9XE#l^J*#37tllJ4Q82`n$)UmhZ zDO@7~607ZP4+>rn)Q>1t!u4IBT;K9(`POw+Y`uJD-9sF#W`wV8Hj~MT z##0&fN-_dkhYx$%9&IXts2Hq=v7kA}>N;_oMosbvWSnR=iUE(s_ODOx zyyMW|}hMVs&Tgj6Y360g`8=9TD$>Bc+Hz#%? z&vMf*AQH@EJqY}$i#}eg)I*){L9F{vYjbWwCSdE^E8%+oVcf@5qv=(%xu$W z0Xbui_@<)+cgS8oW}ZP#Pciu)#X@6VlqW)&R(?*QO$&c&X>pqFx0Z&Am*q z>3YJc+LX5%pwSC|&YjXD%#_-rEH)}e3kl1+p*FgO=Jxm<YAtDQN3fy5nJN=bkEJy#UH#muwV@_0}y{vUa zb?4P?Ou#eJ{nI8u296Sl+HU;bR_&qwE=S;>V)__^#u^jRrIF+em>%spb@L%2L*vDe zHULX4=ZRQi1GcYYifz80I0+vtGdH??)riUJ&lwzF^`CyRfrIprcddz3GFzLdP;M|e1JCU)!ox6wZ605hD)(Rw(hwSBw&HjIDw%;S29#G`B?3a%c%dj5opij0z!S{I;;|$+HirfJtS_ zW4~c@I)4ux6Fcv*JwV3IybvaWRbv&kGT8`YuvNnX+bSU)*p&@~QL2p0hNN@rV)d#s zQY5X=4om6KD!2Phul2er{p!yy?RB29%l*5$1d4#;<0H>CyQXh^ArwfQgWE@wzw?tv zW+wXQ6SrC(yW~~}LH-km!1S+X756>r|3Qf4_kh7iLt{u=ebJ}$37q6?)DVs>P6m^5 zJQw&b+V?%c#bBjXPvNMyeSN-iJ{voR*h{7&pWrQ>Gtjct1*<&eXq?tl8rkqWOO8-( zCFe?5RUrYZk02CFRcM(&byMi~cQVKTrFP9WSh+M>;0Y0UQ!$M*5$V@K@ ztR8Jp(U>Fpk>H6FvQw2V7!RGvUUSk4%WAdc4JA}GRCML)noyu*dL_spTN*_Ll`bzP z76JqMH{aU+++hqYa7z0x8dl+`l)(syUoB{8q3RC7Bp@7ThNw41R@4l#x{6L%QlsC| zh*nNhJu@p6VgYQ@G^@=?SY?T*nxKEpC=Ubge`D8+&?PHSVew7pbTmSw`{1>{egCsFW^`0CuW!c?g`YX-R$LEh0PyJO$!clD*yULi$7K!AJS+kg91h)^Qbin6Dn zY!X~TOfP8mWIIe>TDzx-R0K3m<@RZrjb+4GFbmbxdtK6YlmBHh=u0iu2Yn%FM|N?# z-Nv^?c<$4i|3Dl1FvW*M?}z?LSLYTW9t-r>0CweZ$A73`M^1uVG626rS~{4)I;0{* zCXl&UgXjlKQ(+H%i~k@CLZC5?i$A8WfjjufF1TrIi~hL(Qs^Pj69@-xsF!|S^@*2nG~%hcmL^5 z^Fkk>Nv!z}3{2OGI%-wCF*hgHe=?M)P+L})_XfH?;wJ}gmtM-OYjaeT@zYhKT(SI+j587j&%GR(axR0$gWcu;H4>)2lFM59<+`=!E!wk=)II{&~^kAl=N z)?A5go@*pNjEN=B_hT!xREQ7C9Ovs(_u+^9RG%&-Y(5Oka)WvL<#p$e9-a~kwjn~P zkN7bXqfH?oeQBFNhk&- z0x-uF+}F&(s{(Ky*{hxr+F3GWuP?ty@|^YX+US2s{{ZCXD9;D4wkMP!N(vj}Kg+V{ z$rl=#!U_qVa37%%{XRx)D2G}@fjttw#H)9m>=tvkSAF+f) z*1RWzh7=mkG!s=I_=S<*2|7Y9C`23|=8R=xbr8&G`^8GxN@;hJ`9TEyw4|97;R%V4 zxyw9cS&K@9)6mc($z$DFnwOoxm5OdonPwPAMyIv&P{Vkzr*rU|rn81=C{Lvm@j`ymg@TU{${IBD~~-z2>kERG@jzfbfB-7tQ{R0Kk9KlaZ1BdEmpbe z<=3jUtt-pnHmY>L%s0rKJ; z>aDOCpD^ij`gcVSd3rk~Q_;fBgke9lps_5w`K?gg)VECU1X>1S74Yr04^KM`V+5J` z2l_s6{NEs=BUydfiD^=H_p`Tz)ZY7=wEf%}GXJd0G8KyG0$|E1J&AASKg2GdeoBjrVyS5j-xPHwRK!14%zEa=(o5AXTEfah+!&+~g zMLbn}PQ3Qr!B9uCppR2kb%u;C*K20)e)dkjcui%q6_8UF%Kt^6nu5hKg*CgXSBG^C zEjmGgPb2vEg?`w(84T-Z$ohre3A4-C= zM+Y`(?0hyy_Q3mUn0`;BhZr>+MTSys(4cZdiUGEO1XVuZcPIII#WV?1kz9+usMRU& zyy#7u7Ohho#Y)p!4q90{!yJnQj=fNaR_Z#Xl<-nm@G8SsbI$2{EmWhx z)iF|@I{hrC2ltI1g=K@gHi<)Rlj9ft&Qe-^pbi!E3bsPOH<>*b1;Y> z<8Xd1T|TTK*Chvv$*RS@w* z@k^ifNI!up7;6p|f<5l+(CKq`TwB?A@bQstpvB-IRZw5miWC7xc1QK!CcC|1t=gFT zTV-WsDd;$H#PWs$c)aXsWi!EsayhQeoLCh+ud+n$(E=g|b^$_Z(<*Q}p0mJ*nQV(8 zDcl%#8H`VNApx3stiK}cG0k;X#R`faDb@>VRf**LCf*AQ<1dRflNj((zO{co=s&k3 zYY*n5@%2e>iZ$S?qS)Gt8IH5$$I&+A19gI1sG}}csMnHF-xpb7Cu9~QuWpqvu|z^Y zD?L)y{qgL4cW*W>GV|dX{$uE&wo>0+$$FBfYJ;ILw}sID+hcC8*o*^tv_3mW%HDtW zs*2~jRhHLRf38Z;mjlXf)?KDXe|m;uhN0u^l+KigrkzI-oKj+8=}K=D?mZ}9j#wizx|#u6=TGT&_a=Xv$Wd7|F?=8YrT4%!WAbCl?8OqEIU#Br=w zetzuNRz-GB=xSek{*D0$`nU>nbxy23($`q6*;l^3Y){S8>%g*oqI*p5uze|2vrw2? zQ$g`>NR+TFmORGk79xxXCZI%{^{ypAQ@e_7Bd=)Y$Iytqw;r@laqI?m!{vC^Sp6f| zD&FIGTWjRN)`2RCMc|m-#z?-aPgNcn%}hqDi5B`H#B07F?AT5hD0J^rO95^|IsB^L z__7Hl_I7HS#!6w(E9Aq-kmV5+{yyUCVsWbJ+as2bsGLO%s5Ma`)P5q3sIIu7e+yq$QjcMpIr7j z$p%xi=M$_vGqb8`t7!+iOVIhTG@zw{@;^cy_G|2`i-lZ=Z5>)LpHxxW_R}lnv9;$( zUMu__t)Gtb_Dx$+89cN&>e~8{P$rxqK!meJks@Yt0<}`r@v+Yyw};JPRV;z!srTwk zF_kS@)kO@e4cVjd#%p<9zvCmn9=Z9K5;Y04 zWIsyc7& z@Y-kNp@SP^6q&z!Q8CJ?{~P>QmL`o+R?weTR24XRV!kIyc|(sFyog)+^!TjvLHhD&$!7UJo}S-8 zHCSz=;u%tTD=)moBYmeLjOvf`ZQ2vjsfrW3F*1b_6P@(U3Z z41@}t1ZpcHReFW7NBAJ83>CUG7b+r$iedRTEbm;!Hwuqeh;Jj-=saaYCpcBV#2>aS zbhNi_YjB^>t^#A=#eXkdj;inr6@ieg32p#`tQ)jHjFT)3)6A$43M&G1dz$+1e}?y2 z#=0ghwmo{@JX9|q`0$HJ<2D}Q-3o0m4l_%39JjuJt%VVhN8&BpZMnsY?ni9>u@$Q_ zocEjj@XS^`Jw5pt@Nf_;@=-~Qk;X;Z+{O{C zJ{ztB?Y&j@yrTVZ7%u_~?;{++9D^P*T#Y4Akk$FM*xu9vP68>RVnv<=atXRwU*gxO z~eTiBAYDpF-sK;e43&jUS((_KHrT%PkYFmlM z?P9={d+)!y=}`2M^YwALwG~dwhd9|y z>tN|I#%9{;uxHp*;7v;}@O@=rC45G%B#;4Ap(`{oM>gepNCX-uX{?W>d~-nyueL>B zA1G5e?!B)=rw3Axd?#ww*)cjEOPB0K@cs)P*oow93}r+lTVoH3A1zF~9Pd*Rkmc|& zrE_V)&^4-PMr1E80xXZ1l z)`L+1sj&}C%A1J1!eq?ve7O4#AqxvxGJc<#L`Oc-z8O<7op)lCuSpBm*H#x}vmB5Q z6&d9gvBs*ZF+~?n9})=;rRk&8z~!J&K5PSaTC4{8a3ARcD94wT#RG&;HzJIM8rZ<0 zaHf-LK7^}T-$~G>=KGcPi1LfFv1!j}1KdxwkS6{Ld4;Ah0oCuE|3!%ns%kXlVQfF6 zr3CX?Pb>BGf-HzaWJwd`VPZbxMP@7Y3!dSuxLi2+q_~P407ZEsG|;P$eZ1F(i*8gt zyJ!iMI~0%Rw-2JR_DahQ8B*)^Zsih2fn;})AHBd-m1kPlpF-JJ}-GkRICDCigF(mx@Ej0qj}*5$@zOQ-;UdIO?w zcsIkqwq#}Gja@-c#>B3ue?_lBm4nRnA=Hm^S648$+w$irC3n0T$Y*sW&@r|7j?&Z3 zWZj$l7?4WZon^S$8(Q4oCp3d5cy{+ZnF))`bg3)!%^+I^sS=DPRYSJp&(D^(zdw|D zoE~*t8&Weajg&kGgbm?fJUf_a*s*fmdsDwx&SkIPBieb(zKYA*EU}qXGoCxk1RK_eu-oj#Af6;& z?DqE&IN%sWA9)1UnfuOL4icwfIOkYDsI0~`n)mc9PQtKBBOOP^fJcK?u)sX+bGEwE z?(47fJjIjFp!*KgZz;~`p+d^i4*)oY(aaa^`G%IW%tY8%1BsT6x{euBfocmM=>$}* zSh}ExNT{UUqPE4_ky`v%vC8VuST745B^1h?fRKGHEdb>d^P2G(%{Z`kuCKOPm9}LN zjLgL*vZ7gnDua~e<-izn_zJuajLc~XX(>-s{FpR3AYM}+V=wg(9AlfmrwiAb>1!&M zLbMTw6Kr%Kq6yCE9vu>mB`qV9DTM_q<5x%^TzCqk#TXbY8(K2Qlsk z`3m8!sZ0Sp^BS1UV`0+HXT-XP62LW1h4$_fEF%OsG$Qbsgcgtf$uYc^;lc5L?=@yL z$R21+gdf7!mAeeoiPU`hal?%CFf9Q_7~w>EaZu+X(g1$hG{9%kQEaHkq<6a?w@q%o z{oI=B#W2(A2+~-dp8=D*1K4u*=gH4Eo zAV683eP4IaZR@G@PJ=?slN{12P;!1#*jTTV1i&oPLoNAjZ@NZy%O%I#a5cAwbg&?b zqziA%)r_Qf9YL62C45lKsDme_%xCLixDj-KfWY`t|t zdI&T2&C=e^Y)%tw)VUVS7&a(~PFH0BIewjjgISeEsT#Ywh+?^(nXzNx^M#OU4!$i? zHXptzg`k$ z74{lNEe{E20-m)nT6D*a`9SkJqC&&LU@BrTt)Os{y8^zKV`%cIeo#9~_2(-Xb}O&k z(>?1LdGVFSlKKX5+)z+R;p|XZ>-fcl2c9&MQPsRKOU1cU(=reY;`D?<(LI=vZDt@@ zuvc7drYRA|P~8vjX#_(!2=fh*XPI>oksBsZJ*D=ExHSkOd8WGMfmTk7mVK#^fdnez z5pM9b6EKZEiu1Vhck_~*z>391BpmJVM8`+u@1p4{e&(kOPrPLhiz_S&3f>|+j_Hw? zoNQVpj~0}kR;wf22mDur1l~Vmo)nAQYsH9=Iv@MufRD}CTXW{*CJ?4BG$soQ#qGgl zq>Qv)ZkWBik<{>iNR&~&yecoVYD+F}+B#GQnYrx}xh;QGWh^@0g!$3jCDD2Oc74aD zS^cw3(k?sk-L5I^uj>u~7yy;U;^k%hLqAp@+YKr2qE)08fixl0n|{PPp-IS;Ug84* z=|$REMi$I<=v*B&0ohUl_5``aGhk#bmdDbQ{0Y127j=PVmY_K~8=jt;UspK_!DeQi zgO36Q<-1LpYVqF>UE$B)c}Ghr-Xfx$ghHk)IAT= z^OgyF1isD%mGm?KPwumYMQ8?OZZS#@z|bNM0Ux9b9lZ%mJL?btsuO7AKXD4X_7pOE zZ8IO9gkg7(>R0sgDYb^uig-8@FV_B7GO+)hO(DAYr6JVmE9oT zXSV^th&eo5Dm21Sq*SYXOX<{A@fWrq@<%LZ7|Y~)rddyb6)i6l1gHjj78pfjM-1qp zP67-?kZ49kGLnPwjEq!?2yzW4D=o^gg0dUbn-MvVB5DxNIALjY6o{%YrAr2cGaaqG zF`+u_z6B?m2PhShu;L~4v@+rAq^BGT3RzpD?xP{7%%!Uj^856ysNUaDnDxK7?gGl` zKS8DcI;|cgEnK}De{5@$nE9WWZ+D;zS4dbw-hW_TwcHy^(}x;1M>*I-Lj_K#u2ZOMSa*){y*rXKl$G{sv9uY?ZILFJIOb%^%pBq3!`$MUp&45Q zg;#FeLO@@>yHfS~8SK zS3&oSpaNI-i%*(7Ak~E^jM*rR_}%Qw8U3~_m(;5#F{Wd?_Tos`?|X^#%e<3neEnJYvBymI5W=b?%2w5 zTBJ{+9cz9!Nt|)8#ZhiQL*9Q@va!0x^`j5vn@88*f;?F#|7zp~$2wEl(7xX4%D2Ig z#l*+qE!9h7r0zxQf5`{18HDW8bZxvn>_toetLka`wUeq3|LYbo>dUq(Xx`3QuD%D% zaHPom#-=RCw?%H%mr=Z6T(b8N>o64FRi*akp3&1{+*%0^+a_ah5aQxpvEetwpovq( zhkosE+;pUB{is63Ur}ljl||>H6%Imd3|l1ef?K0|BMj9F%dD)NZ*8r7gY>dA{^oRk z-#LGj!d-@Re4P!P1kxZDUtIJP;4d9&hEwuzztq9EvNb`WqUEh*(>90D{sTpGig8c8 zCM>{+M%OUx|4}L;UZPb)TSLnR(=*lfH$KaXM(+q)YS_}101V@4qu!gMaHI!WY$COd z$WvCAOCAh=I8bVV&ofCJ!Sbx2bZls?L*zC)vI}Fy(p*-Jo2&Y{;rOVwp+&Nd@{0V% zVO<=k?=zkXjvP!a34ne}N1}x(gl96A@WTB+Pv3661!*Xf^c~3Q>g3tKi)A|3>H91@ zYpcweAh}nJjoXYI%mjqaUg7#i*ShVBBDxBy(}&pntE(wb?(T5S)H7Ft4rwe7DW>J5 zP=ZP}*%E;10a%5&HagwL5?>IVUlRn23$RWNQJ3K3zlQxI&tj-$7J*hwH=Yku^)8@7 zD_9BcRZavX;&Rs3sE+5cJ(x-Eddy9IgIs-O zV~i=J;o~z_M4L(cA3VoDSz8D^4YC_{p4?ruY*<R1)Ub$p~?1-X~xBk_tar_QIHKDAO7(S>-G;}y@ zkVeE0=6@jd2Dj2y134ZwA?@8^2tty z(=UQMQGioX*bo`-VG&M!a*qmWEaTao&3B7lUtf4F?Y!t`P7D*S_8Nr+9&vVcIT|^4 zIcaG~7~(I;0Vs`od2y=&dv_ez5ppQ=vk>rmixFD(`m6gDcuXvn_Cbo-IUdu$I1GG$ z19S&GIRv#7;*0eDEeB7;`>(}zrWAC9b&nz*8QPyYDx}|K2 z;CDQ%qHWd>$Evye9B;|`RBD4tDDmgkiEfSuo&aSQlxr6Ttkw&!<2Z zN9Q>yZKe@l7&eKm9r_;}G+G#=;@?u`V(2#>@m`(a)AJy$x5CsaWv&UDd4xc?i2g_N zNMa_AENQ;@XhN7m8%cP{kmF&!49j2B^rAG!<(jRXQg$K(^y{He6xfTI_(GNmSW8}B zb3WPhLU+A>T&kW$WB=j9x>W7mI0zm~$1YWK;CV9#0wM;14(!hXL)g!*gHeGOuVEow zi7jiGNv&n?G-0)RcxnsfX!bP+Rpb|IJ*bv`JMqgtiY1Wzg-=Y<(jl-Y(((;&L5FSR zV!YU~usyqWwQ-{xpd9fPGfKBK^A?Y~E5r_m**OjpnzFw1sCRk``>=i;?9d-JCd-v( z36ytaf4!S_brhlM0|uT|#G?~xV7PD5eXn~l5mtawj4rw7-nw7;>Ef6>0-Aodf}VQE zZ#n*Qaq3XWi9Ff}=vMCW*@6EiTr|eYR2oM&y)&Ax!z-PT4b4udltzp9Vty##?w9v$Knan zD>>NTJzC@*$lmS6USeQi?=C&t&AYjcZ5sAcwX-vXo2PJdziW4;Q21X+#EunjQ#Bzo0+M_;w5g4vI{4 z-!x$v3oE8A788ZNLd8RoDEErFv23ygTv((}11Ldaxt;2tn6DkrZkU2SQ? zqBdutwc0tiLPjuzk^Jyuz9mkaDapmOPu83ZhPutgj}20pFG_-6x)|_9q-C*4e#n7R zZ2f463E;!uF=loNWuN#-@5B%(COIZWi%4TNF8}AmhVfqK4(y{ACOxjgc65L_Uf2^& z1ye@$ztv420h6kxh4C78jL~BkN}HW_Y;IIORPA#C&wH2g-Mtj50>A$d_IPB8|-<(+Kd^Rt^8znfv66J`Qd zQezs;)YYgZ=|@#ceX=ePtHT#QQNESwYjOyJ{}JqAAiH~aRt=%AQ)wiMKjJP zjU9H%vOusbsRoT6831CrVOFFdlQJPqFxG*o1Si1L1>s=g4dF}6OyipX$0o5Y@_5sQ z2Xfi8NtN+OlM=0Ic3Y*Us89}qjlVhHSiYH=o7PF`X@;-4OuS{RFqejfNMnUXl(zT$ zwrw_ZuFW*p#!OvV;T|3K!82o(M`pgT`v1}w2IiGweDtcZ-A>yp`60xNmn0)o=#Wfp z>uyx+Ml6J^#0U+WWyF8p?Pf&~h4aeS%b)IHmdu=asZcGNdjtR4Elr4yIk>g=wO2c5 zY()3}l!z~`1NQ1wCH~3P2dk0GweqaMYrsTW?);UlUGJsF!K3Vg#!sO~h4%WZE1R&c z`_qapCQ%w`y=Vp%?(B}eQ&lYTDX2r}z;8<3{!QELUEa6#>h+CSyuMWOjY;q#mat_f zbkw-)@6Q{sXMbSA*JFMghuPSR4w^`OB&8K#%37X$8CI045FWu5jTQZb;MmQq*kQ26 z&zEJmO6=Wzqf?r=j3q^Yp_Yz?AtbAS--NzYs%uecRu%eG!v)ShN|li-OKq(5QJC&E z?5VC_2;A8WadQy!9A?C3BVvnUF`xvt$&Bnjy9^2}*rg9~98Yf$vK?DYrl6ppB`|tg zU8~rz&<%M4N|ge9SsZ-XXC}wN55u`6)}+)^Ee`iqKORRfr^!wyr*635ca@##?e%|M zMsY)L@#-<+cAPPv#+96HKIfVJy!bi_%tg;=YRq&fBQku^UBAZPPW*@8y=@@2%K=Q&#|d>)a|d6iVCI`DmeTnaV>T5F(qp8;R7(3#CKeL@9e>YM zJ2+G1;94n5I(@Mm@OH0WJE!ML#Q`=yG=F_Pax_cws+r?0-xhme>DDD8;XA(P7AG?N z(}?9~1R=Q0JR86;W$FCF8(~eYn3Qi%lOGlqu39)FI5N)vliJ|<|7?Ev|2zONIAin+ ze1lEjpu|Q(ZFGcgh4imF^C{I7_0SK0eiqWs{}lKr)*+wRRz{kyLL#`!#Wt<0gv^p( z6a}y_gK^BkQsw@`jhp7wimwebZOAKoJm8i791}7}$G%1Z^O>wi-XsLQ%wXB@P$g8D zz9LQFa&bkhRwBu9C=?@ZeR&P$m^0{JiJe_{uyp0Lw*`_TIKD`C$aa4_iFd%0&@|_E z(841TeJq|Wx>HrBT0{|f*lazmwa`tPk`uovNZe#p8LI?n+8yy6RL{z+)E8&ccawGb z#uA3!!b)QXdvNKovt+H1E2~->XThl=^GZHaM^?;c)FF}Knolz1HUDuw86dgMMMpCy?*9ScWTnai=VlVYSesg7E|-J}*YyxTqwF{op{w~sU%Yc%(DOI0 z@GJO3lT@JwuEV~c>L=Ep{N357`0o4-dFM@^<9c1wd1vD=S)Jr@iLEbtoRdEfur9b4 z@-}hcGN8n9$gT%pY_Xo9uCH!ad@UOz9=>Hgw4<^gcwmNZ<|SOf4TPo+DWUe+Wnd?L zZkHs%L+|S0ReH6>>dyrQU5u0|tc+j$zc-Z)nG+XsC@C_>&G;_I`Qh-j=e))8zEB zs}!?H9#mi^8_#f9Cdq2;tSv{_X?j-L@{$IK2mccK^at7|}SlouYzgzdkp6^(ce)gij@4wJ5FMGqZJd&&|M2xSdQtK}Y*a zr^D%~C2{4nK~}JxC}wU{wUTtAIVnh_RX@fNz;|`jI-bSOc99^ChBBn znpe|lI@V;ujk;eDcTrLNtWWM&(50S6Y|M>4JQ4;ZhwyI%i29M`LDcU zxftf-;yph1cXu$rfBvc?rH_F|gJruV6GO;v#x4~eS*v3QeZ)Rao3T?G{(&QOfpqdhq;C0Qd@T0jmJ`bE>lzl_IWg+~BZjTh9uuUwESHXhA8p{? zH%|f2s!-U zezkv`eQ11q2S_EVKtct#WQU7i@<7vuB zVBPC$g z)Qh0v|AHq$*y~JLbZx7?K^N_ML6-}GFF4;0YY?ol7pe-L`zwqQkdW%I5kzP5gEJ|? zeoDN8=UNY`vkyTAhdfcHEQ1y6SW_M_gu==@NH6K8JXzOI8trUS5qs!|f~qiw(S&<( zRE}q6;WsnKg!gV11g%9skNwoI6dV$bxN8=LZEwd0p&d5ZSZ)LH6*_-*)}1f^_=;dgdvg>g20xS@HY|P_ zCW0|irnbZ8hBP9@I5_LANF5aG7mSX~aq(I+8g6{$j!H!n7R$W0<1Zs5vqB&%Kcj3; z1ZBQSia2A|er05|z`_o^u7SUA_Kr_EQRmgb&es8}Cj+z54+}YDIZhe`McU2DZ4?}P zXD`ocTzxH8sZrtV?Cus8YzomZj$Hi^z8WY{7Kd3=69Uo1n+Ka@B@v?z#DDcVdVU(Q z$YP>5+V&xH@^SieFvk|7$Dx&swUri*Ss<>(9)s%??ZcodWwf#3?{hrXEHf4WmgN&F z(JdhzUW`;0;6TXGQ8M!3jJVef(P2HiK9e#wSowSN=Uwq8i3gNfo2wmG;nd1e8$cN5 zkq-1KRrX-q5)o$=e~Mf6YjesfVe+~EbALnO_L}2()opg*R!@&+EYLs_<^Z{9$H-#B z|5kv-HsrUvcOv0oHXTG8_`)cB+-Y-@J<=^M05$NNWuaa4$!EK6+>tC!BhZwkm535f4RRL^*?Hrc*l<~>~^oeKP*?O-J3OMo>-PI9UxM$y0y4d>coqpoK#aEf% ztv^HsyIcb89!`F5!X7gC4|ieBqE#B-G~AyJoIk($cpMZP)%ZJjvf-fJ?$@8Qh#k5h zbww_hnedzIHZKRyywV5SYUS#?TiOJv6p0t5SIBwRGe6k&ImP|sVEKj5r={g@?{p^D z3{M>otu`;}pSLwSUOZVh`~SOBf3Z=TwkDyfHF?*X@bSH65edvuX&c29#+|6r5iwq+ z89)m|t$n&^yw6F+f*qX%A8Oq_dN1#~bx0BJ-AJrE)-QRz6`M$;zkSTDw);>N>XU;5 z%DP)Oh+cK9S%Z1AF6FHk^vv2-f6w{$J#vt&X3d8txM1}tAvgM!;zL4N>3901wn2S5 z*OfDm%ZsDiCU2M^PoUKOq{&1sg9L5k#iyXl6Ss>T{dLTVL2$+6{_s!lh~61j->YBK zgk20z#&&QZcKNGhI);kSP z!96|;KE;v-gvesT=&utvCFcwFUt9#Peb$+&^};&Kzk{vqu0EMRbofo>@9j0N&RS^Z zQL(ehmI2Gik4u9>ySJXYFpm8hzW`A^BBCRFWXwEQj~x$*moSaRf7y`7o|ZB+;ww92 z=Oyj?M2Ca6@zJPhulExH_MJ#x3kalNnHLTR7skFsba!4ooL4oX@0$eMa>8BrJGs~6 z`hs{UVZU5Nv&ITjv%STC`R_+i=P$FwCb<|WYsdXay-UQ6U-1umDNS63$)LnY#l#ZE zm39GaJ^9XJg5L0GZ|;4R2!;iFu3wT*dZza-I6F|8D}08f`}{g zFkUB1Ua)NXwsl^!R??Ubj8Y;;M}7Rt0R1%sOMA#=&HJrhk34Lam=RNid)6Vz{|^9L zK%~E*QWBZk6&UY_jnQqm&Ob5GZCe~1p2D{q2uUP_WXMVkZNrFW!+f>UcX^wP>az9w z?YM^Wpob9Jf%c6Oh!G4MlL%zu8**?txM!u#^FIQ++|KW){giS(=ZM7QXv`)y6oe^C zMv|1Ir2v1VN=`p+`20p&Nv7O6tY`jZGGBp{HwZWhNR*-zaUEwFp`q9Eyym}q{apvU z_PPdnp%6CI3{Y*qPgC$F+q&q=z%o3$#cs+th0s#Hp-N<;heUiV?9>-GHy z>3{cl=H6$gsnhEq-dCk$Umv5l=kPucgEDixO-z3U%8ObIJ!ZITh(I6`#4!(^FhPI6 z|3x5xMp77;<`r&Byd>^gmgz`tSQp-mVSX%zQr=VBU@D8s>qY);*QG-nSuYFPS-kZgZm$>jwJGea_#Wb2=NZvtagd zyG$=>LP>@7Hv9jZ^f#`TakG}o)k?D!f8U?5^&Zfd&DZ#p{m1Y7&imeVgzoKmJ+}9> zd@Tx)gepR$AP@%k@XhD3t9v83?D1u0a2x|}P?*@;eBlrdBgg1vmB8Y$;|z!7^qhaE zleggh2Me?X{A~_z4MpQU{hRL{8J>4j!1x`ZJg+M?<$4NdwB&LX+4X;9?s)%S7lEB;k&(~&8C-}lh7=fp8DuDkXm*XD zK<;ezd5g4tZ9R(HIX)8~<>mVQf2;2#``g^7I9j|P9?SlZC%AtP1C!N% zcg#1XC6=Y<`tCv_@B2RUo!V$;Z-80zi{c8U8_k?L{Z6zy&hzQ~-UNI#`;>ZKNA_-W zekW>w3t~R2&|@<1RkQ5+EPr)8Ghf=*=X>6lr?=>Ozk#MP^N1k+jPLRuru)SC9>+vm zoXI`ctKs*8;%xh0#}+&rnH7JH*9M=#yVjQOhck_H?04n;)Ap3j@-}>ZA0N)*;ojzd zobYfyX*xlkY~1cK{m1ByRKNBy()mIGijaf>2eU!PPS*#cueX1-3K`?(48;>UaA z@O#gV^HJP#?s@fiUN5n0+)LGY+Pg8qKA2WBKt@ROS;d%3WPf`37sd+pv1HOOF;%HXh_#LjqoSi~@ zf05$e?aS5R{~zD;J1#F(*s;9h`Gv4tj_Js2NE|!;7_P)QjnUqc0>DYQdC#mc(de{S{ zQ%9*keZcMh)SQ1UZo{v`D~@;q!Ij_hxLmlL`J9`*AKT%4yuPyhz2={}oAxK)N9b<# zD9*F)Cgu1HVh`1~Z>!&FZMGhtqsxe&!^ZDoR`+kQyYqWq=bfqT`oAOUxfgfyHgJ>|Cj!+Z+Lr+ zbp1{T!$+BE{5!UlXv|^gS9s z^=C&q_bu->1TUz2Zu)wr-fk!C*6RB` z_YD8t_T=!qHm=_JUClbuaN_8EE}3~K>peeLtomL~@s6w9U{$t#uC8A6zGv}$Ki&9! zV5EQWaCyAC@A~=O%eK2-@H@PpbIxm*+Ev_(k0fBP!=7Ial~Kdt`Q5)=$ou?61hpyk zKU^z0@HKi>7pL+$98R~Ro89;S@Zm-srt%$ps;KY%oG@n_(fYntPB5+PH`#aH|4u9} zW!}-|>i9Brx?Puhqu+NHdn}u`FnfDg{uh5j-+9gEXZ+}X*86$I;AjnEz0o(R`K7Da z=Y54och}F$z2SKre^)EudmK(iFGJDlGh#pp-EO$Z!v{_Wf_P;012=<}@kt$>G)c{?p*uM{Du>i6pc5 z+x~z5y6*$z*m_?hYoFfN^gSB&QM3Ie=k}dvZSAxAzvStDpS`M%B0LhYi_UHNy&ivm zDJS9B>}%#9;jz{BU%VUqzKVNa-Rgh4e*3)o^+o9P$Cr2S`-nV06SG@b`Ci)3)O}mvC@-wC{5Wd^J@H$?BIlKPg zyzcX};47~+?j-x|%+>}k=eONhK}Y>4f8{%)7(p0*YdS=t(z}#z6dr#ZxmElG84M68rOyA8|6*!T6n~Io{;bPAJ7>9a zXzLP3Up1QT4BeYpp9ANm5QrxdFakN%tTG5A{@TB^DF^HN|Go4-qxwG#sO0_s(c0Kr zysi-h*YSKmje+8^{`XA)zqfzW>HqORuz&KCto^MR!Kb1BT&&11>5No=lfUuz-^cy- zUG+DTkIv#Uj!3Tx?RRS;pWlh^x#9hLKF_a&PW*R_k%}b$%6^&+_vxnfyo;Vgwd1MN z%(8br&%LWCO*e0C)~$QUbi*n(B zlP=#wVcTJ=D+G1*rV)e#5kP=3fQU?};K||-D|17C88)@_FK#n##|wXzf0vyMS=yX9 zb~ZS2E`7}wwW@Ciz|^nCvp%NVy8H@zwa(mJo#qXV_Cp*QRLK|4?!;ylfMvi7qdJ|gqVzf36^g9+g88zAF--DF?nQ5^V_w92i;ciJ`kgRrg z0~(<6bcz|mt^X8JdOLohM$uObs<=RDb5&ED`j4dppD;at$q zcV{|SlcJ415vz$?{?|13+vV|i%HrF*U{B1vq;RFZT3i&VYSP!(9?rJ5sDv>9fCK}x zqeT{(oZ#*nnOYik7suc5T*qaq?>(Qu%FRZ87OdYT1nOj0E=>F*tT-+1iq)_Xw>h|f zml#h_TDIeJk7pMS{zF+3%bCO0&*N<|Y0U{WS>IW&zQePdjttt>c*Eq_eA@1&-&2tL z^*CH-G%g9bRa1MbqKWHr&_{N8`MiEbDBJ;yv^Z#_5F~q)oQ5&QNX7IN10ak#L_t)7 zh+K#4ixsUsnfmT*T%7Ii0ay5R>SwQiWQ5t^#PVFp!qwS}llWwl@qzlkPw4#!a|JnS zE*B5d)0-_0Y}!PpOH-zuUZhY9i66vgBKX6epfzrXpy85d80O*5&*0+jcA#-*Kgrzl zd4kwVAKf;%OxM=L!b8&{1j&|vZp0A>QiIVXNA-CFDG6}^&!mw6hO@%fFQ$-xl=q1P zJ$|lR?ay135ftE zLUfdJDOsVZLa={f{aVmAgitnFg1z)0%%OVP2uf877ySK`PxxEe=l^dc_24t&OsD(N z7yR|{U;B^H$t3D0+H1;3MS>4K6A2aa7=oB42Sb+jB8TG2Nfr6E_5U8an=LZyk(Fv& zR|Swi0u}kgKOak4E8&EHK1K4!|IhgS2slk#E*3oCA|NG)K^-qW4(**RmQo){;1FRF zE?vyeQvlMECF4S?Z?O_h+k7{4u!Mj@c+B)bJ%7Vf&(ipiA8V!SJC6~PJ7WaGwOs%5Kp}^0P&xCEMfa!UWeo0uxoua!6cCYqlLVGx)mYzpE)c#@r}}M zvq&uXL4-KwkPP!^exdW1KI1>e^~*kGeV;ZDt3sql0$l$1qsCdE9&smYa(JAD2zZqN z4a=TpzK<`?JlN|H)3?>1MGdU-0U)n7=1OQ9O8d5VnWl0O3+{2`-#}9*e0_B{+bqn3 zC90JqIbkr-Vi1FWkx-_%^25fq&3PApKl%+;lQuRaE00&L{2V_lPG3?L<>G~p~|1FA}#U=Ao&;~ zEldk5nxb5l>4+k!d>!XlONkQ}pbGGjj3}5f*$5;vS>i**%p&BeB(KDkRNSIH{>FTF z;8n8bf!&Ntavtrs*Cy9#yZx%*yz0w;u1myw&T?>%3nD^rp7g{q>hf@0Due??4n_~+MD^Kz1Cu@u7D{q>pdiaO zVpH)i)9F>0e@E5lL+Sal4V95>r1rnPb3VOxvfq|=Z-Web2mX-=HOfI>yUJgu(^vJ6gGAqdu}6Z1pcfMIN)L%l($KyzH+(+i zOk^%1y71|L(%|4g!Gd8U^TtNR1+wt~AP@r@k=qB`KKmU+D1s!7AV=1yXYGBJ-Hnfn z(wPIUst>^l!iD9enn~>RG%Y$Ns!tmON1`VfPWo+8lSMd85(|{ z^1q*d`oGVg_dn4Az`OJpnc(h3fCy#E40=6s%JQCN=d69ttF8`+nm^dU_YfK5khH@< zGwwbb`(?r;6DM-HK01csk)pmpSpehP~ z6huNIP$_VIS@@g7&9?v;!`S)Hk9)UYhpw!7bh);L7xAtOKPQwxN9DEmvU)zLpm`)9 zy&u##=?Nn{Dg7n+RJ!Zy`sc^BUpeVK^6%vz%p!?7+M$F{g1(dx&t)}J7L=sO`CK+4 zW2U{S!kt`A50r%|q$8!x^)ElbufoxP2@eq+5D*3z$qY(qQcw@<4L?q_&xP}C%}Mgu z&IBN=B`NMbx03(7f`KFq3Q9`f!6D`aE6}9yVQF@!Gd%2NxEB-}OpihoZ1MI~RQ%AT zb7^asEaXE(rli4)LB;yeh8coQ-*@@nL#jNJ>M`7=0R)6ch(s9bAlO}@QDy~yFYbRQ zrukhUG6qEOv~c!!T=_iPr)f8I(O?~Om*2$Y-O{NF2Zi#Z(&p+Hp->VesVwp4M4v?V z$BKo0Z*()z*va8f)G+XX9j%1*>9KRy5Iqk{_dFxyce=h_)+q9d!~%r?_90oAGFAfw zgX*6ak{dWn!#T(DA1OQI<>^Cz2r3DM##tng^IGfr8@wWnoIk8TJiYsBBm?aGQ3L_# zR{%+)`M+g&2anK~oE5BpaFDK)v?&qpsYrB8UJ{7F@6BD?ZKLcDW3$ab_XtIu_g2tG zVD$|yba*Aq97xO7#b~u%O+)=_pM^6f%HiPlG$iq2p5!8bEaZaX0jN}ec`-8C4}@>W z_8mwhFDY@~uC7dih+cD%+1)c}B8m|#!zZ!?#7ul0TQYL(xkdpY7=fk%K7^S$b{PjI z1}-6HO8OIF5t9+!z=7m=gwTlagM>mqtd7OMO9`-i9ze)G{#{M^NY&WRdz(D%%{RMg zK38cxX*D2m3AY?g2&u_`ZfBl%ED`b*dJwY4n+gFTi6F5OPVG9U3HPg(c_xa?B-8S> z$G@!JiSKN=!N=y=vhTj+O1_LymOM-{OVuQ0pr(WgBFODjVu+-QE3t7MC-vcS&j}`o zlS~JN!A@Ay>@*;Q2y>uGRMzpHSCE{53q1Gj)aOFWdfIYp6I`2rD^c*0TFoT2Uftuu zbx&$%HT(kZV026TjtN|8Tc z&-rq=H@~-S%@%Wi>q6-HOC$P*rJ$`b;W&E76$z2(HBNWvHIk^JO?tLAmfQgb_;xiy zYYg$H1uFAec-abjMwIgBp}(m?k$3Xf70Gc=ejSsLooE))}93~6N%{Q&{B#6m#} zk@jPGK9~c>Aj#}d!N2S+)cK6lQ4!ekijil|#xoA(s}9Mg`PI zw!8eZb?zX4A_(;-@FdamUOHTFuBnT6XT*=be5dZ3Jkvh%`Q<-kM}F}FMk)PUC&V zq3ANu4B4QBK`Aa&#JBJ+W!Fb!{FAdXP%0NhnLLz)#zG+ZuV3G|7HGlZJ_s0iJCW%< z!4`Y0fC+yeqRt#KScUTY5c9IjJ@d*>%eRK7R>cAqcc|0r2FW?m*t6tfr(ygG=)WUQ zV!~X1BrjFB_t)cl%zPw%8|v6ci>2MKG^F@(7pQ&W&#-~(BM9}7H1{L7ZH7nGc_bI= zAp-(^iagwMCm0jn+m5k51*`V2!)+w~kt{s<9{jF*{Vtb21M|WIWl`tN=|VxTr{VXf zqdi}8$OVqje;y<0^mzBOawg<=isUiWK@enrhXEhDQ14#zV2+Y%-Akssv<)OGL;LAKS@%K&s2%I}GCcl1wSti+4X6PS8DvBy9*KTE?D)Q6-`VHC{3d?7hu`Ra zKO^z$Rz@rPt5lx%zfGT`lj{1tzZP%FX#9V+T6@i(xS0GtoZ0UgRWBU}j56dCDq3pHvNXp_c3E4qNlk{ECyN#rua zHbqsJQw35GbcK@4WPt}Shc5ZMx=U6N;ExiQ-XsAXe z1V(iNDO_m?{pTb>IuasCq(bS;VdMe{8;D5(f(`eGI%W_c*(;DE?pR$)KN=se^e!D; z{4G8;5(x2dJDBt=#bE02V0yaP$wSPLVj>CWWAS~oFD?MS$Vna4(+t8+2|+a#Dmf>J z8Zi?Pe@9giW5mPwegA$Pq3P|~1fKmzrLP*Wyq`jWnt-4{B$H@4K#ExiG`Xp8pSVK8 zfl6YnhuKLdgz0q_@pIfEiAiE*J0ZlTABP!%;NC ze_r!q8UoA`cxa~xuS`szs(a5p#0zK(zTdcg5E`m=3Iwjlkw_4cGDG_?AV8V{;*xdy z`Li#{_RqfV1o)nbJTnMpk95x&=XKk|6G(Dx4j@%baRRg7fmZrrF5z7HUVVhIj=ODq;z67+~9m65u2me-Jtj3}QZAt?qfH?Sy!3Sch9G&+>R2n2M;!!pKB#tB+r@(dJbLbl9QWI^RKe=rMN zk~s%};ZmjmsaQmjz2bjpn!n{ z&Oq`njQA}fGQN|9o1dStzR_hQe@Fx>aoshaD%edY#kby6EAi(UHb{&k5H2A3`051W z*~pbJp%d_+xL}~EaY}Jei!xyH>2**G?U5`+U55cT6xA_MeA|&A_PB#47AMLx}1&jh)@zDe+utPJQ}1B z%8eMO4R&m@h!{dq7DFL6O9jfbsgE-Sl|^hIVU23oj_x2H(4dP6L|0M~2eRQcP9@2f zl1GMG%iVXtezHVH2vE32tAq(MVSL zk%}Yh!~@6#k|rdZ<9cah@AzE2I5DTM){ySr6Au(MIcKz-3UB@f6&q!Qz@56*9?v@ zj-G6zD{9YMLQ;5b$35b7&Xn`cZHD0q@8oCsr;z<;q4`kfcCv7k5;U zB2)>2V&aRgNCry>ZB+t-=@Vy>=P?NkFe}7CEc1T4qUCq%Uw*taoikQed@SKh$d4{* ziG5wvi4uKOoz3!Ge_^Og6rD2WBNsg<^~aLx4_Bt+f9P}g8!}G#T!=gQTYhhs zUb7S9+bs5Nk5u$lD@UE2&!?QSorIT$#TKR9_9EpeqZZr;>{4A(f<-tGL*ZOpnD}~P zX-JPmcbSlGV`u4b`NKoi<(HR4o)RRhK%99U?*3bz4-3S2Jfp(|2=ruXNL#k7rZ`Fj{_%phQ7RQ^0Nbk6hDr^)bsqrNyE6T%5; z2>NIVNlG>68X3bmEcI9&bg-VEoAN)?sY{gTkB$ND@&BdPMWV@ngv2ClWEfJb@sB zkU)VAHqVFTV1whq#sfH)kTgSU)Z2Zny)(#be>XA7eU>?a1Z5~06%WQX5)2qzQvv|| zzbW#mvMdoqC_l2t-v())5?@2?{48G@`~6u$t>YV ze}WJ~dY_Ntaar0U(N(`cqZnk3-8570C_t6zfPt5JBNB2|1BSa~vnYBk*esd=sWP6t zct}=8xu8;TaFd|0GN>`{5pys)Cu~8lI6KsDpoOP{x#ekI^dsFV<2~N@oSgC-H$jm1 zsRENulRI(Z+LauR=ZN~|;bOn59f7@~P&zYhbt+DEt6Ut6?pNVF?l$~;$Q+s$$ z7?3mj7m|c$(APRQ3(SEHTrGl;IFV$1W{0HAP$CAA3=X0}+VKEUo9YL?c_)&!Ay0xa zNfOXP5c0CZuQyA++_!mU(f~;T&lI6!v#r>sO|s&e<=7n;$$=bxbv3JcW%g|R_p5d&772S>f4t@Hr?Nv zUjaM>y)iW+Aj61$hKF=mosf;vmJ}XFMa)2%DHItp!fXN_K!lLFyN4i4E6|Xl2AJ*C zaAD6j=)V&FtxMB&7Kl&d0rFd1SujfAl&-k9tR& z9@fJ@l>Ne;zEFCUkDlrc)@j{!;k;*=z$h02A&PtG`H z6HZ>XMf+v=+jn_>2i!}9&WE!vV(UJ?QRL$niEp^McGN2NFzTSmT`L&Jo2UvzKonr` zo?G(Gz!&DTJ&Ds#;O)OCe}pO%llZkJIhwOM*1OC(?7h%pQ7*AkoqIv7)xnc1k?DU@S zCk@sc<+x`INO;-se|^5sM`!m=9(M%l0G^1U-XIg@Uk7){`o9~~MJ54!$ux%KrQO^iMNpW6OB_V9jr$KT75N=Y0<0|i2b@FpWAH^w1-k|JhV zKBE?g!`l8|%K9sPhzrMElTVMZQ{;*e8$d! z^L(GC@1L`~oBjQ>n#inG|CN7i_yIq@{^#~Cg2$w;h@vyOrg~w zsc?KBUNg1wJEKF~?7ZW)Lxp7he`FE#ZDZmjA4v*6zpkgcK|TKO zE*_^Ye4cFhlg{>&#EJxg`w8I!i6@#zrJ-ApKWKj6@c!%%c#k8|9d>QA#q-2-e$GD= z!G{SRY9J|?fIQ5bl{NYJ%mwff6U4~E2f4?+Gp&Biv&KO8?~9O8Egy1^qv@VHGDnZ2 z>V^*We~tK;C+{C`&+}eZ0}g@axu!sqg!>-yzALZ^`CPyZ^8L~vw;b;uW;rBs5J;1_ zgf*Spusn`%35jY}K8{`-DQ`=roMvDmKW0Sx$72YhPm$VOa!q{`KMi?D6{Jj@k2Zs! z5d$p-n274ENlS^yf(apHNR=@yA1feDG3*}gf5I1pr^tEC=ev49^lE}dk=))YA`KCw zHoSf1`md^}cG^A4l?yzDf)s*oh4j z!a?!gBh@kTq$*brXZPW3gn8?KtdFnfpM{LE+5!jY@(<9MT=dj($sm+PLIjC-YNy;) zG>nc9GOJ-81LvvK^Y0KklqX`>%`juK^_aA5bYQfBB?MP<@tCg3a-Wu^b4&ccqR-?0 zir#q;-*|yCLca?%E!xmBzX}m6~ZCnwtT+#oH$~Bf?2ra zfRk%)tAQk@w&^H#@P^?inyQe5)*%1`)%WaBHqs7$*7dl2{S)G5J=-TDh=G({c6XN*EdN{GoE|a))CwLT$0SJm2i`kktet0B z)0e=%@DK6+am7kX1Z5~x0%ibrkQi|_0$%^;dmk2Q8GrhpizwE$oN30gbClqeq9P)2 zNZ0Erl;W`|06;cMq>Vs`Za*GaqjZgT?l%}n#FK;A3qhM>qOXPYCzF%9LO#RZ#JT>@ z$?E5;*<~Xif0qA{gm}AvREM(+bexa4QJ2&>*4=J=j&jmV=YIlY8)$zeAPqTyeE)6ypZGklCH~IJb0t4z<$Nj%A9+`~ zk$*pw=TxYE+PPb|ZZLU)_`~b|KiZGI_T(nS758Fch%4^J7YPt2VvoV zyY9~(i^Zoz%ey?Z0>kHSuUHo&+fea!Kv)!lL zqJ;u(Ig0ydud)B}xc%LrA8)^1!6V<8!hcD8u>eL_MimKyfucf+xeRCZ|UeXaLjP_?yx08WT7iZM6=s^CXZ!CFYqNJcJo0 zCO$l=$)JhMlg^bBoSZoLDYz?!<_$3_8zd|MRQxY7>?kDcohR*mwA+r{2AuNP5P!lT z$_Nt-%E|fTyxn%2?>wQXfLajC!$h2}L8cuAAk90555^C^cn1f_Kn&5MH*`LxYNq5O z;v;}NQhCk}tkd)zU~dw0R6B)4}LuU zKY!YN)P5U_uZFTHlMJMC0v{}K0)KC#wK5P0ET%J6cAJ8RX*rQZvkz^JyP*PQB%5-? zp$PMzowxIzX}KROTu3^M9(FQa+fd)ofoeQa2LUfk_B{v1 z>A*rsc@t^vIXgfuYm0#+BC=k+lcfz4iu zeCh!>X3TAtduE9B@hafKPE#|g-Vcuj(BzXLi_zk+%K)1f7Rm;>W`y~D14UG zr7%!wB0)}Y7IQyQK*`tBj(^l$pzVdSjDy2`q!DrsGPL`RH8l|wH6(!S(nvb{BqJjVSg{h3?=<-b+K7T{kCb94Qkj~i?rgRz*vAJT z`?gL=Exe#f3gSrx%D__O(zS~)7aGz>`X0sdjl?G0ZGj76xPL9*A6@qE+>{(Nqp)Wi zDc?&Q8QM=KHw8c=0}3)DP=`$|EnXVd3H~pq!$Hpg39&jMxbY4GbWF0@p!QU1hIlO{ za^<=SrpMtwDEvm_)aW4gPd%lCkbXn!@f^4F2S;KF6#`kzN1ulXS-GxBgkBGswcLsS~AiD(7k^^kzxet)<^$Hsto>mEee8FHNRvgA{i zS4C7+l|X>5S5+A;KoCEy0Pk;Yh;^oIcspgDhjQ(J6C2cD-UIGvXaI0PH(xZ2I|)fp zkJ{vKegDbx_v-jxntSZN@ZjPyLB0^U*uZ-TgYkxFkh>Npb6)VMDMj=!WG7LfS;vM4K zZ6z2^Xjx)GDKsh@Oy3jHG&-=r*h+H&?9vMppsR2S<>Ja_6Fmtbzd-M))2OyyWzNl{ zl}51)G@+Ud197_)T!b98VP(K&*>F9pyL)*Wx^TskDd(6BDY?&H>}fYVc>C7 z;D4&vGFAb*V{G_#@{S*n>PaF@K;;O{_FjLI{x$$Xxf4k1%x!CO1haov56T>%a+y*( z0N22le>jc=g5m%=CXj4K+IuaPnR$CC&UxIUfgs9moocuwdOsC3AVdfXQvX8;kSq*G zVbKsJy8qlHgY*d>0M@^=AMX++DMN7+1b>fx&~ebzf7Dn6rQFFZHnSa41)9NR%mry4 z97FR?iZ!BH^bgm~T^tD^b!bDII*hs=SaKgT)&UYrjgsI1b_hPez&%IWAtZi%7(iq& zSnM+%EQA?s*leHyFK56xKs5N ztAK<+plJIFkPWKF+oG*kH3d3Ou8Q73!_thtfx^LD#`_!hHnXU(3Bz3-eM0HZb2I0lw5<^F1OZ4t zyQu-v3RJ$s{tuBY{epgB38t{(7sw{sPJ|D>D$C@v;rq?icqZL!b%vD{1AjRBz6&XV z^F0A13PBtp2b;ug`C)Xe`)3|h$V7=!FrDgDpq<&AaNv@()X=iROo5bOM3n|SRDdaH zc0a@cNIXBUlpnDUW7>g04pD{<3`1opo`a)Yi9lx-d3+cHz zpcc{NF~0zXwEuMdxFuqn7_UHOXbVV(=7^r;99#{jVX^Q`%-)8wf z+l@0JZz!J9e@1uOKhOS&eQ5pf;iWm@glVtotNJUk?kd(mn69W@YOe5SXhNQ;YQjrZ zkpyO@Uv$wJDSxh0ddHs#JfpaV%MPgR0Z=+&NNx!W}~Ejvh%epNcGi3yn$1=XmjgLC?mwJ+dK9TO4d6|GG}|_2RP*JW`j+co zEG=CFiy-;6F5Zf)18zGhzmty@6Xb*_Zr&_r8fp!q%)nTrmP&ehrJbhxhOaKPsmO-` zuo_O?=5nyq6t$+)VfQbTUwo*@wB$PRF=e=lDU|Rb;Z?bNLW_C!ZbJN+Zqb>he8CDP zmZ6RuR%f=k^}qms1GcM30+0sq00@k5G_*n5N{(@aZ_Mv1NKgTl00)^^9+4n6)LQ!Hr>r_wYrxHo`*95%=jz8BsyS5OCvZVLg- zt0YzaWy3U4ft+?4DIV)IEgaSI%5PVX@AYjdFCN{t0cgZ74Hi_7nMGkRd7Ocz zmu0)~@q&0?W{Rh&5&7{xycf@idYuMqu3zoC(iz)8904M2wn!X0Bt-RYnvjPPj^p#x z2}1?-Kxq?yJKm?Mk0g!}#N0|I$Y!Nr2(1XQp&LEvo$U7>uc|frnq|FV+ZOH5Dx1k5 z;N~Uy0RR^!2>4ASZ`8sBxTTu{w`3)2LCkSF5)_6Z3x;5+M>;VcKg@)K^7}|ZPWL#s zF)uIbU7JjphxIrkL}=`g2JEzHSdW~NBxp370)S|L0@jJ3-N3dbU>rqdf5o@mn#pOC zH$^+)c)=TkCcJ=HSV(Mac0(aU0pftp9VBEM?xz(>NX)d59v(+QAO%*d!0`5m?00{6 z#_9TF0TibBXb}8$5h+>5fLD@2oC@74RHmc`0+>l8MH2=a>i9oN-&Z_`UxPcGz8{Of z#z0Gd)Hpbx{^Y%?&Y2ti5{PiypoJaPq$MO+a6VHM(kcN7EX`OZLpiIcG3SO)y(MO5KRxkM#fMTv!d#vOC$ zEz12aL2bpiL$xW2fP<{Q2#OO5?AL30}s+L$ajFH+t5iPDnv#w!r4 zCx&%B3DG4ark6*?VaeSaN)cm5NXbZuz%q@d8dM2jq6AjLw9NjUC|9LxsfN+4I)b!+ zTnp4OVgCh}ZN=TKk@q$_7Dzn`fsovRBKS6EJV zq!N@V-Uh&AUW9>ObhwJ4Na5Jt48#?r5>jBp=(B3FED}dNf@08r;2*+*Vo_0tVGg9jS(91Fi`-AWX@T@fdwJ}<>mjK6cb5*OIDN! ztG%=J6A*P&hVgSwyCLWP_8huU^PqxzuQrOfonA!uQ%SMyxoesm64j%Fn%fpKot57+ zXu9eq|B+Sw8BhCl=)diwb2GfTPFLw3`{m{1t>51F>$s)g_y3^~v){@95{EbHqx#uy zCt4%_AvEMr5<-B0=ri6lWr+WODa5d`j%i0RC@WMvmzZ2G!r4^VK+;Z`iq$sUjia|I z9|e#aQKm*tZ~E)UqDW2>@lnR9+eUycPo(a%7Q*!n>e3YGJuQPml8q*p3<~fTggfXU zn3xVBq*rLZs;#xcb~OlC-{?XWDK%R`gVg1q<&h024^$zGFIaB)`ZLjgnwLe=1gB-h zbUPA!rx5;^61qKf7jX`$^3olAu4z^p$>Z}b;@9WOzi*F_+hEge3!&?Dk6?eGLNEVU1ftrMnb>=_NWVz z06BCTDfxz^kP==%-y>UpXo9`YR*zGt!2C0euS-xLUP@E! zSfJCbp?E_WfI6WdZ2)JmQw&Dy2FFa^fV&D*6-Y1m(yaxa`TiHC)yBrKaOcA{x2rz>)pw9a0Hs5yF%80;PUNwzg}UjSw~YA(fyYvF4#SddiLjs=!0&HsOOnBW#YI+f%nNEr zMZ=DzE_ECjMiNFKG}rpne*`s9U#$bAiXVq{5v-87=8XGu$7n`YejK&YSGTbtW9FWl z-An@NF?lafB{WnV@dwfAoBB3W<-Ie=ZbQ zk}YdyrttG|DW-s-F&~!LkXA{zGD1h*;z$6Z?J=V2phXg(NumbxyT0y65@wY25Vy!n^e?(; zZoXl|r%?@Ie`3s%zX~j&_#9>QzKaiuCP33IG)mdnP&D~S-M|4xT7*N32~Xl4OA151 zoK!*##?X?N3i+zY>68p4mc?p;%DRr!GcbfQ7FOdpkXDAk>Bm_LrV>cgH$GHkile~9 z_LpL%Tcslvj}ao45Qdp7ys3MN>_ISx6_mdLtktONe~X@FFlvr0A2D1&3ZUN;O)Q6j zh)z2*BFu-kWGVv9`$qB>28n?})UtZJre0Z6-G2&)0;KbH3-kBrb<4$OojO$JvI zZuuDcJOHm95>=IWJ~DRod|h~`3)T>dLnQ~CGWuLrcNd9_k5aN=4n+X0@iiXH+z()F;vQ$ zn3GA4@;J?iWEeh9Roz-i@CfWBm~E{(;$QbM&sN(e1w9662+%I;;sRqZ=Jqp8C{hee~yW(Hvj$EhBnt+83q~Q;zBO!;j)(C8-xh0 zD~E{k5-Z5dpUcL^O^KAShJpl5{++*We?^Y#5fox{}2C*rz>>P>cw}yLjvlLqTJ4*vT0eF$zmCZ9uw~B_Y=6 z%QAAc&VV9&3d&XF=`m1PlE0M6e<2*J5)DcZRq8{|g*_@Vl2GcbC>B@d#az4v&1RG~ z4c(eRZa@&herp7EO%g}CVnrLwV;yXzoRBto^&pqodcQEP!b$U<*wXuVmeWn$17eaU zm#8Q#Rr_;Y1w~>r7;zk|Bpx$D=T90EOYMwDdcZWmv(@=JqJc_xS_4^Mm#krVf|4#J(j0A542yvYg~5;+qZBe+8ynb#N@7RRemK%T&u#18r$gLeD6`f|QC3ye*tNsHe;uT{iYFsFq?U#Wi-Mop zC}kk8c@xV4V!=Wq+zPaXzQ06cY;q8$BH%ZyXhqWVi*zIufoV39V)pGx0Ru^U<|C14 z5y>%Pv~>&?j4$F77IR;U{i-0~N?>v}#rUuU?%)nf^w2}8hf+oF|N4pkr?A8vBg!O^ zjIvLxpcs1ve<&$ou>eUhXiKx0T4E%T_}X0i09e%)^8G*3_~QQo6aQa%ng4@qU&-@R znOlfY@N4q>pCDTXVE(Iv`>+r7+@tjd=Qm_!4!y6C-}Fb)Z~h|sPCx8-y+7}5=KMQT zv`>uzv}GL&56SesmJnvWW<9s`dg&kHuD&Cl6jjMLf9tV}e8Ib9G(OE7j(lay6d`O^%16f_1|{=SaN>dIBL8ZSGUIobak==Lp_`h>eFWqDlS{K>XKc(Ji>+QnRgg8 zK6UR`eM4Q{p*{?y5Ud0Y0{1KM? zm?`D#TuhsKS=y{w$h@-0HYOUiu-!DvHHFycdUvu6j^OM%ntOKgW|qWO zY`3#(T)~>f=A>BfXy|7gGIF$j0v`H1&HdCajKMb=qv@;?<`njx`nJ z=R$)>`%hi>d&^lldC_2rig|~rJcP_?f7lCrm9>?6ioA6i>G#m-SjD0|z3t5DvaQp* zj)34=)e>N{TDIF70=z4WZOvm;%+9>A9qoNpwpSfYbjdreCTO-Hw_AxFhMvR6%Lb8d zdfW_FH=G9AZ)H;zs4@aH<@#w#)j%Qn>(=QWLVa_6qDcF6;5{B`IjlTZFyO{n)%nTQW2!K>AN)fJ`Hk9mhuwau>dkC%66th>I}!K;F7#pY^F zcNVrzF1xU6g^z1nR|Go@=w|C~oEeu~LQEUF6{+M4h1J~PZ(e%m2Rq{7*Qhb|8TN07 zPlKhi7^dQJG$(hkG*sn2f90&|n#t6kcRj(kt39~);%*yTFuTWo%P;AOX!KcMFHiaHgEz{uknhUd_a*aP~{+)fB62`1!Dl!w31vqNJ#Hy zvfYeGaR7o~(qcXk0pk28=);gDFb@#>Xi5;2p|%V5oRV8_4HyjoL$`x)n+xRa3*7oaFt^bb9&3Q}}8pCk=m0xgRdNd1|b3W!(0X8$L@llEVQkHX9~` zerP}JXV73De`SIzMT9#Zq)tK>!NmdEu?P5x9%qmZHq&Ecfe4T zjrIf(^K*e8t)w3Hf(|*MEzK11QzLOZR;Gkd7;PBGx&^~|XWMEdgo*?(*>n&o0ts}j zXw-_ae>#WKq6hDXfd!ptdk^Tw2>vf>7W9sgeB|Q#6Mim@qRmB zVSoj?^P10S5&0OE4983eR~CCUf^j5pwO3+ z-2K`Yg;{C>bCoLiFg!$k^d53G5C{2f+S%nuQmPcKLcsHoImq!4R}lc~@c0@BotT_0 z-o%I&*V}0eU@Uk^9+Lq1tpRZr4e(6?9NY*A`DFrwzWUkdEkl&`BsLHVR*Kf21c|-^ ze-KAO0KE=?>%I>6Od9o{^~!5DJufeHZmQ=o*>haQcIvfb=W{pZ?e}qoVF1U{_B+?S z|L8o8cu5A9CxFj1|LN{0v0_2DK$#Z!bUIQERLK*Mr81omRAalQPYvgks*%-ISrGu6 zoMAj`ia*k>y`)bB;ZaPrRcEdu)UHyRmquFw5Pz!7ip!g-Tx}kTtaTM+BLtSWi$Wig zTLyWSTpY$BDpZ{f=aw?F1FDVGjW1bhI(3%HNdwUiKaW+~(v5GxTes=F$)y`|5;jv! z_0Ks%MqMjcEtJR?kSzeD0lx3R9%Ei#e150+IjR6eli&uZ8W2yfY6P-gM$o!ii7CT?X2^0x?3#p83WF(OxEqek?OX;y)`^BzR$={ArNhvu} zkFd~ab!We&f8;0Ee#NvFoa&L3JN)fH!CtbM$nz zn<$`c?Nv}cpLfeh$UjC?!VwKkkq@mE_K{ckz`L}UUhp6?^;96VbAw6}AZLu`e(WIg zn2r46H9!DM^o7qEp#+)VDg=PNG;&G$fhE}@?2v>ZMGA+qiT5CB^g21$?pm%+x_`Rb za{8+p+jQ1Kxlk!)7fp_^>nfNhY|6J9Q3O=?<|SmZL*C^-15n& z>@Jwt^NanHh#T2jFeO7|@7$jyp7c-}PcNQmTpqqZ4v38w9!s*0 zUx?OA@HO1OP6N^XtrbCt5cS1S@PBH22#H#xYXwmHnf@+%RZ{=}Btoe5s+Ck7{2LO6 zrbtp9#dX*m=u}Y=Lt<~Lm9)AZkm7bpP zk<~Ci+mVDXeta+q8btY&rGFzrdnBrql}e>m6s)A;cOYxWVCmDHZVHRDZ2g7+G#-<((oTa?4V@6~u@Kkn@!C67_U3X!FIC&Qq*rF8z$T zz_-VEc5Jb_IdV!%kCE4@=1lcNpte>N(L9EQe0}rOG3_*5n;PQnu!xNmvtB9fp_z=l#n{bcvGVILb(Y9WISjUI6MeiY@lp2lx?3cqPEY4dCh!Z7m2(z zvs=?`o!MQ8iL=Asq2PS6F+EZdpo91?d0xwx>K+0d#DD6@j&hX4n1~;e^movZMnV8d zVgM3AyaNpyKj@$Q^t5+7AqUDg?~@K0227+)BprED>_3Bg zcQMj&5t!);byXR!OzwO;cJC^;V$~sz$V`l+nXe=P_yjhEcQ4_w`I}49`I;(?_V{_q zp39`=c7Gg|EFWl}5mTl5P~X`J2zKELC2EFp%WmYiYn+_xA3tx>;*^yd^Ix-4=lroi_Fc zhCG&87|3KJWx^=#tj)4EoPF{Xz1rXM4q#dvd4KY|2%%tU8Hkg(>mCy<5#cuJN@s-0 zSvx>?4pu=T0+cI-m!j5zveoks__M(j9YBpXAWQoHYO6y3^$;X+I=Ve=qwn+CWQE(L zm&*9qZrJ4z#@m__>HS+9ItP3XqmE6@Wt#aGoVy4$Urc{{t`fr$cPKsidy1r=$~)epL+f_%3+c1c z^0}U`;@d`!CT+48pa1E1WC&hN%Kp52dc^NIi+-i(_Mz$?{B)je{=LO z+y*P$>4SibhAqqeOWjWMdw&s;sQ5-jlVvFhC1|1EbedbN#%GzS=xHx7W_iq-A0H%_lQ%$g>- z9YAN{HBYg*)BOqZiMQE)w|sW2zZ(-bJ^Z^di)KTbVm$U^QvJ{Bv476?@&3X$#?u1p zV|kLy>v45e4ht{(M);5xKp-}u@Jyd;7($Yep-OlXu{tQA`2V-K@h_f_y`UyvqVy^0 zcyx3W?VTO7iL%386YY9oZgr4te~JsU;{K^hLWL*NIx++Ta^QqkEBqu4bFKf(b4sUao9p2OfDrhjPy?*A3q$8!M&ms7C8 zNqGCm0bhMNFL@NR-9zrzKj6VxuabZq|$@ zk_!?dwcNcebTNM;R`hc}W&Mg_3NrI(wDj9GUv>`r5t~*E+79izbcwdNs|YYfSYGod zE`2*y4S!xsTFO;TD}rxo1HOxvb23)dHm#+=Hd01S`=jO{mLP1aYxdnTrI#3sg8Yga3T zjn&VuWKp2@G3pmE4-uwgGfMpltj-2=Hnn%o?tkL1rGnA+XuUp_2G_Bg)*SWPy-v-z z6!DpFN|?0n$6I?Iw%lI*`zT>IXV>0#)jlG=Q~dPuV4y1h>uvpW$POGmT;7hW7|7<@LR)vsZAYA!?bv}b?|E7$-uQd zh<`9Wdg;$<-c88vU(K(+y;CNk zCq8^y0(IZNyR+Q;6BGgXK|PBG7i0AB+sXXPU>!GtSPQR7UVqg3)FhCF2}+SqwPGHX zqj82mzvsxG6t>+6f51UVU>>Dl7=M4LNBDmevhRi5mv)z}>w3g3ab_{UGKi)D0tA%k zWj0O=PUWwE*WQ({TTHFbC=9Q|<{s!aSB#jf_ws`EN2`NgEPY%hwaP(`y zTnQoESK$z_FUkHGYQxp%Xz`_^ify0Uc7^cqJn~r2_VSFC4j_TAVvv`2L4WcbKhb*Y zGLx1qf#})`x$9lgH@Np)_S3A*d``Z`YQ|)$aNTt-<=wsKsJzv9zY(Pr!x*k=4q}1B zTAECCd)<;49$&uJFx_y?kj;&9JLde>LxK?G2^6Dg zXffH7Iuh&{C<}r?|G@}68*@iB!EZJ^9@>2u3HV8Fc2cg--n6lE+JDgeAOhInM{U0G z|1_8gMMH&@yD25?EPvZ z^gbuUO(5J7;vgT$f#$&N;B@34{n>Z@f{&(aPo7Y0bt$BQDXbZqkp^oJnWEpbCoJ!dx!5# zF4{mFzWVfp7e$!8Uzm_h9kr%0w(# z6GB5rSkd*|gh`|i#!rzE4r(C0&ppU;Tdo!re?#Sb+?|3SN{D4cj29(GDsIKhoXT%cqt3Hh5r?GD#(|B!niC8dj1M zXkrRP5`P89u_f6igGUq}8;+vtj!Vv|TCT7r`MYgaN0EbIB7wtwtF+@=KDbo_*9;%B;Xnd=d=%(aaw|}^H^s9?AGoE)LpMXZKh`hjG9f=23 zNgd$PsczI7+nt3dJU|AOqS!HxNJx?7xI*j1qW%)FbfiJ&U z`K){gI&yl|K2!1M@*8pZMNhaLc_8_ZsfPR2a4e#Gbk!AmC{n$NX7@mR>ZbpDZpYSVGx5Dkx<4I2ROf! zS7R&H(3+Ry1izBqy2r4*D0-WaOKLtdyd_|AAEQbuv_jOFkXv zGOp=dVX7KyCi@JhIm|iiu#w50*?*YVF<)-Ma-m!H$$Igpar~z}CLOwqCW6v5fPVsz z0B9kKBEe3449P5|!IV==7F^b;=22u#TBzoUoy6@*Z$WOx29~2Q39UbEY+lK!lmje6 zL!yx3YElm7O9pp17_A**T(re|$jG~0`Er*chm(G2@6UFgh4i7@`Zy>w?bCF0?cxel zf|XUTGOatttkalJqGI zV*zad01Gb0YsYUkSNh75=1qPK`V{l$fGK3lp)jk>r4@>gy?-fr&Qf`{o}jMP!$sB7 z1I+#@Mr$|pPVt?R`vtpF2PTziMpuoA&$@?1TkSZzwKAJS+>RItKmZ$p^MAindEOKP zmY}Hs9DGnXQVYGoOym;tkG-f5*J^?|F+W+HEJZA;MLg%EJIE9`dtqS|k0TU%I6hw$ zMSoEdPZ5TcUN)XxPmLO2HY^G6pr0ln-gWj;q%WYaQxG5L?a*v;ca+E00oxl7+fas2 zE9Qt|qE-piWZ@)X-`0Q?qJMw52la=v5l?0*^x(Tp6WNK*e~Jom9ET~>oz;A-9@WS`yA&Zbb0>G`W<*IjL`0;a zvCtqWOa5595NP`hJOQ9$rAxX2QV%w#h1dQb_u@~t;h)xU5}M46-Qql}O|##Pl(OfE z!C@6fzm~s1V~c+K9e-mExeSfApcu;QW??aqf@VR4w1W7eh+d2BzZ6l-$_z-BAspaS zfxA#F@JeXgU<8R;Ip=O;#tx~&n8zz8WkROpS(S8(i&DLllcBHSa}u?pH-wSfcHK1s`wtx0UNhFO$g#hblE*CFE z)gA!Rc3)zf#Ci=)FPQt-B0>u&?dVejlW0B@4|2fjy`3bH_H|G!_m?&Tll$WJGxE|( z6f6if0Pg-JAIr1mH?0iPP4`G|vfaBiaWX9C?6mBvnSSNFcI{iHmQ@{8q}?{-DPBte zzDpPL{(@-D5PyHXIuX#_Wuf4f4hnid#Z)Nv0<$h^X1)}ZDJasEtw-G1+4bSJYCBU+ zzhX95faPFwS9(9?%Xenicgk_TAI-7*v?!Wj--t9-K9&snT#rY`Y;5-jWn;KLf79Xd z73(+5UG0BQ50%?EOg^gq1f4#aTp?lU=l0PX6NHF;>wm+HOgSF*Fs5Wcn83Y|p$_PY zEmwwBDZ=-EE$JWauTyaFPu&hDO;ALR&1fEIa4IP1oacyxmUFDO8(@pI-peFy(DYCU zrC{`Y=}?*CTNVrlo{I`h?Zq)DWqE)Uf|XH-+(~LA$*90Nc3JH^VBIt@w_|=vmTo&{ z)f6TxZGYbtna_3hMx&i~3vT-iQGUW*8tz`Yo3wxc^G@}sVG4Y?w~#G{#23@)n6sT)wnf zAOYQeU*PuLZx7S=!`ok){VucnGLRIhe$M;2NPjN%aGWS^8WKA0`=Muo%Q8k`53f1< z1dc_mZr$H?|D(m{yYx#!4+j7YbX707j@RONUsLMc?iz2Lt4)9R%phg5{~m|rs#1`u zg)2pM2cOP!dOEW8@_apumV6sj$0a9YF52I)l@y6+F(UIwS}i0JZ4BSOw`hG_R93*? zVt-sWj!SIVo)_i#dBE0T@iI<(kI&uRTc_Lmzb~HhI;-C;UohOHJ9$Y;NJ>(r6Cqygx7{fXLk-Um_J5XySm zY2zpCJ*Tj%$MNmTfe(Yh9WQWZo#KLgwtu|BKGOz$CLvaW`3#xzzC(#(A(ll6J^%$O zRDqGCZ>5djY&Om@3}%T(tpd;|97~|`g|ychC4o><001C5p@*GAOt8~yrAm_5Dx_vX z0ssL8bI~m)mcc1PCjKG>tK!?fY)m+e;@on+KBaVp&{Iqr6mDg9qkzjF(?DC z$Zc2p@B5u&Yn5NZ`@Q%m*ij;F3v|#!0zzL!i6OEDC`tr@jUz3fp@2z=N(f%qY8zrg zP}JCh8cK$hNdOw)mxA?hDax6D>%jSZP3P&yn|dmMzHgDu>iV9$u%*`J{eP)+SJ!F% z9Q}$yh!fX-cn$p$vp1Y@?msWhAT11mK2Ucf`V}G%?uGNuH5BdPqkY`>g>y=L z?JO377(gHuQKRt(`g8x_BscQFwbM#sJ&g>ell~dO$GhhweH&$e>s{-2|3i!_h-7K^ zyLH^`kHdyn7Wa&VTz$Vqo%0kVM1 z^k0j%-h>$j-~mF_DpkNiOX2^vog#&;OlYo)ScjGi5x`&z0LpaKs(-^-@0Y&P9#QJ* zKFhs<213UBb&|ex)->4TibZnC3Mohi;1wwhDS6a~ES~KhPXIF-@u znp`$pw=ZuRwwMW)TaPaI(z=>mb6>o6;Avi3w6|JTUa!5pZoIBP%&xDWdT+YAylk3o z+FG}7S{l33=kje#u9`$sB0}G{q>s1S?7XU0%XI%-*;YPu*j_(rUv$1^c_?&jfo`6; zq-_ek=zS3CUUOD^aq23goL*e$f+{e!-q^k~)?BZe4V}sR;BIZ-*z!2kZ%D6nxV3p) zk6+kal<5AMDH6B3UaW*@$;a_z@2ZWnttwvaP`{SSvTXtDYAUk^udV&)ajQ@6>Sw)C zv!;2pR1;~EG$o_(hZr_uf|y%`VZ*VoGO$=wVVeW7pgs-)LIDwREdGOuWkjh6g?J_o z3kxC}J4a{`1v+XH&}44T!X$r!7y>6t4wN4RG(R0SfQbT>jbc$mD$|l96A_1P4&ooh zd_^e*oV$3Y#khhT=sAwbf|=5pf{BSCPDZ$8X^?Cwg~hNbzoHZwLPWkC3z%gR(IQZG z!H}5+99=vU9ZL8=K0sM3EDJVt2yA|w^bArKb`DVw9Lv%ollda4&?E&VLGeI?K?=%3 z8@bYQVktD({L)3KNKYn|xrxHOBr*OZ>V38%1r;mLXa%Xmr6(NABZ5q(B8l?F1r~mO zm8Clcbg6SA8wIj)gG^5=M2`G9W?ZQjsDS)M1xZhT3mejeEL{1v%;uA<7g%%LW#W@8Pxk4ixwi#KNMR5wS zTq_T8)z9>@B&brN$I|>r$>4O@aLarnD1Q)8od2pTD6M`{xbGT*Pyr zXZRwbjcdwIo^xt*VH+&90Nd1Thmpj7k}dh(eThb!Q)}&qsLzM`g4R z#tjCENDfI)&NkXSJcmds86+thu8at$$QB?R08{8}4?ztOo+Z1S^7iyUOcwfU_j~Ek z0u5TwZ8`VVWRs5xEEbB0uc8>2@!o7^ta6rc2JP50c9g~vAcr#F>{Y9{!yFCH1kq!A zjmkt}AfKHcmX>Xx>pPm(-qtKSZW47j8`jKEJeWf*)XJ~3hlLw5r4DMs`PEX+3pP+p?HNVIHD7b_aP>vntQGjX;~TxX9Ql*>&%#)&Lg7vx3XfLqeaIwEX3rLLy1Gyu%CCf1Yr7XUleZ(*}F6SJ+^1DrEu3*u3g5-$} zY94lK9n@jIBx8FW*U6`a+Qx9~QTY(*_$5V;tz=a8qOkecyD;K#*-;;(Q_g`;>`ltk zDM4kYwS4b^Qr^$wqnjV`y#E%8--$;hRE@6*x}^5FbI8$tSvY^gKGY3#Xj~dX+7dzd zWy|Di#!YwC-eGon`wxpf>u(K&OjEt-d&t&0cmz+B&e1c&d&=VBk+z~-tI@`(h5nKH zTkL6*v=N&%E!L^QC6QMxoaiR=KW?G-jTTr$JQ5wqJ(-U+n9*YWq9n&JiOHupA_UpZ z=C(WFmU)pQ&j7XCO=Z%r%MJ!h|BLjGD_T-9V_b-iP+<-WXjoXh66}`R^E{g_Y~TYZB*NaeQs+)2%M^fP>=aEyF;Ur3W2_^sP;og! zbkz`L6Em*;J&zbHx$?<~>M6WPgdupk#{M{;SPbg&{PD&SDpn-r?KOzs|3=9HAeJwX z2k@t$U;%6pyN!>Et*ilCze)tMPw=t6O+Mi@Jh;7opV9y7ZwRHP0x^@mEe;pPWOeOv zNX_}JFyIwiClzGc6C zG*H7obahkE6Q4ikGH)32oV$$KP7>1Np9f)j10HFV*h2evjyo33&6`rCns9dQUJqF^ zQ(M~JokOyV6@3H|1{2J1?Svyi+P_1?Rj-CJp@#Ai#jB>kUF7#AFA`^q2xlu3R01F3 z8H<9~LU^f=q!ci5kRH6H6$@_3Cg2{KKyR*81z;&;Rm<4we25p4&r8tl6AlCR1K4St z4Ok#K;KCHG2sEKHp>v$uozZn9M7R!@lj;Ji8smQPWV71jb z{o`aYnLWmxKal$ycAEt@k~%!{;!n5qv{k#7-Wb<)<-c<4IOYqwjLeQ&URBXWF;yWY zMO6)+v3WD}!P9@n>MHm)bMpzPLrk$QA!=-MiYj7PP28OsrG=G1>;h#HR2VYXBx7Hm zPt=*dxFkOEKVaHy@xj+^8ToN#l>~>uFrn=M(>f}k9c^=6N@svu7$h(VAQ?pBzf=an zKkdU7t_sB9;&qrwUHWU^Nnyxx)%r*pw?v2=mgpzrJP(IhxRb+V5+R(37WsV9E}hIc zkM=$S^#cCLa+hL|o*kn6N|z3*RBEMUa3Cc@%9?P*;Y0?Z5Q#i{18PV*fk7i#)o4I8 zQ2-Bm{%v#We&8U1wB?O(=&rf1QYIr6K@bt7(Kk1qWa|WJ-MBfT4>^8s49E^$l6}ZA zQl65Yi$ROnHVG?n@<22hRxgFLRz{=&N!@|r$5>0-m~I_iOziZQP%Yc@C#Sd@LCwS4 zeE^VodM4OA>=FBbL)5<_0s8f;_zn zqN{^*u{aGVgWjOPb|;I>n9W_-OD=MntyTQlki3s21w}WJpfs#1A}Ev1It?6~^|jc2 z#H3=OHTL5opc%!DY&D|20~S-Rk+8F??%uO0N%fU)tC z6PI)GKd*@0P%V~T^fm*9TQ`KJSl1zs#>p0w>k^>+Y-NC7 z4EI@Mk4D$PxuTQv3(L1LPMG1fgGVv|6=Mwx&U7nb7Luq+Tdk`J5sacLXI?Wl?V;zB zK<8U_rONL4k0$`NYs{5G;l%Aez)Sqq?o00&Ngo+HX5Wa(u_v#uuWac4y|C#KHfwCvz2RBEQdW*qp(%BO|H{ipOIqGdJZaJQP2jtXZ-p=uCoZlG^!wEp!^Ni# z5kfc4)idbI^0e_~ZPCYDt9v^Mzj*%i(S_hVQ!oeLZWiOm=c?jcLU(2j_>S?>uhgINN+-i$aZ@Y9-N#<-7jt^o93^365Z` z8y}~S>IhT>n>_s39bnue@E(%UHf#68M9uCEg6fbMn54tXj9+kn{k++&QRqW`pgI1X z7I=GunUo!~wUY6Ld1qjgH#>#Grocr-JC+MZ{Sto}u}jx!6HD>Yn!u;qBtJMZ>-i4W z)+5{euxY#uYZ-^TZ6@2$;#4AWvS_|KVHbi*1cJ&lu_4Lv2U6x5Z$TA zJcT(0BW7<8Z7YrEaHSXa^9#OYsbi!eXw*u%Jw8BhSRa0}l+@x&PLkH$$yU;oY7b81#)-GyYEy3Z;FO`JUj>kI~t<9JNNp&P%n`u zAI>g@yzP~x7#%vGx{X;WG3`-Ew>)uUW~Ubv$EN(Mwe42YkO@ruH&-$O10`&fW;6J! zj~2uzl8fj;+12vG_W}Qkfk?A?I*R_kH{10L$HY^G|NNHOh6;F)yy?roOAT zsVf%Kt`{Q;lg{DB+lG~GQG#t@a)z#Pif%>)xh>b@B-dSmZBg#OIG)28T{YW(iN?tp z*6bNuO8y(K1Mk{YEz_jKx7L*XFUsK_rJ2RsR~-kprE|hBrM1 zUMr6h1rL6i1{yCm{(jeJ4MA4Qoog16>Qq^7uanpu*ZIcnmU$tii7?16HVbyDO3ltb z`EK?PSVwzbp?cGV6Y-R1*H4Dq<=#$L&8n&A#}yKHs7E@kI`=UTp2T)*M3Ccb2K8fv z#Pxl5+#g>r%5r0~m%{9-ixjy%Y@%Pj^9h}pIIynU$tNyZh|ou((*|u_h9l{l2+$B| zx%y9;#!0*SQ@{2yx#U3XiGtf7&cTno63K(a0@mj$P05YYe08X)R6EDa8e0g_^KxAg zUmC4hND&x5(hwQL@Xd1JEfuBu_X3zka0D8~{*z05Vv;gSAzA9{lT!FFISRLqJQd4X zwT*MUpX*TCx^z98BW=Ndg`Y?W<)<7wv{#y#YYhJ6w$PKB5@C;o@-H`_^|Us=G%c^c zEzV9`H*U#)Iht_`*tOOEI=sf6krrQ2N09q05RQCoaiFSZY8i|ex%LhBsljW-b~sE; zehKt7yW!>h;amH64SvyY3fI*`yA;;TQsbWpt5%nGCcOu+u*JsuB(&rZl!{2I9<`cZ z9hTRt^zdCF+#Ic#Y&-ce19tIVSy&P6fYU-qYrRv5+552*j>jr4|Lb?_K1(TYpo`@i z+8ZwDyNJNf%Ay)vm!rjkp~DJ2ZXnOh9ba*1e+a|zebgx!YAgzvUf}qI=LOy zcTp{g8c3K%wAYBm)2nG7o+?kU&Y`HuJjP{x&vkgtRt{%_**Cz)Xuo7ot5`T`EP2l< zYg@~)1DCiM69~&l=W&18JWdZskgbYYG7gm{$7Ltx2I^Dlf8VBMO(@sSc2&upmRicz z02Y(q%izP;AxT0PPRNDUwAJ%kZ#dL>tNEJkUlyMcFgn&tQswz$eqGKIWIMhY^)Nf# zBk^_pr@yV*La@yk^H5)n+~1azMNL+sok>%=ge)78)~YRsl&)uS^fMN>UVeMJ;+GEY zK#puIU+q84;jG)KRf~K(rt}|Q1{H2vkP)r>bP`FU_a_GuA>d&qNm>j>sSKH3R#8Fy zW@cOutIud^w|l{&EY;*9hnE;*d1<+>kGmAqV!*>(1HlxXgk%Jh&aFG#0}C9C?ik8y zI#|mp6VNidC}u_F*qwlJ_rb*U{Em7j0sP+BKeUt{7Gi<1C1(tm&m)^v5Ssasf;!*M z#NRPA?JsUFp4}t!_^V5M|1l-TKflb`B{Cbl;z#POEq}v_KvP-n>*X--N{5uVvAF~# zcjCI}w(7BOC*wW!yut~wxFj8;^e$~?c=%g5P?&F%!q9dmte-9IBtOS*8G%t(ojYv! z{&9Xi6@Qbz2nGI>j1KK(CllNYRFtyy-OqDl?wp=zF-V)Ilwy%e^VWFEs$FwKYAf+b95;mU-EUM1df z+E#j-v*oSc-C%{=u>qT`r^BoX4o0Q)A2y6(fNLo*x!b^_TTP(oj|_V%e=VMu%0nu* zU$O()>9;${1Sf_GQ>3?2r_*~*-XzA!H4QDqapeUU<`tT&&2RTqTwM3?j0|h#B}vhJ zLdDg$ld}c#U_Toh{A`IrAD5L(nC~PG`jEgwgCTh56wQs_Qt;$O;aE~0AvQFL~ToZG1K3WacO_(NK!jFFt|Jan(KE_Lx0|^XsoJh_7W6nw#A4PW#Xu|h56Ef@Z81GVrU>zdX2jd#TFoBy9Nr2c4Q-z?BCK8SA zdWj#}b9J@HA~*{?IJ9gYae8Oid~1s^_U?=?`JQ}vOYzi_`Tpc+VGBv&wIn53i_vrZ5@Cphf)o-(z`9mKXBl>vUK8@g zRU$$h=PU#P!a<+C-(GsUOBMuMtYDh^_aZ|p2MaA$2%S+dp%W9G&t-1b1pp?NTG5JA zP7`v6H+<$AUif$n?zdCL zB8Epa{VJmGw>!B=kmk#QIM$xsWaybY;6R)@COvu_q8r}&NGXb}D<=*tELX9E`7eu7LQD7Fq!&Me#l+Y9y6Ell+L0S(=L#(NtR0 z(n;m*&K}lTW8O~LUk}TmPP0LT!(LG-T@$W5_$wRDKJx7{)O-x&y!PBWyxtHC{DTQ9sH^!z#>u%8PG zI7s)W@%+Ph3BTqxY!?6YC}S_Xm%Tom?(*d5xWEc{I2h-0yp`^ahT96~7H&FZYYqQw zS{E{dt}J~M|BjobgM#Xm88AR%^YC``8>O*$<9bStfYNYH1FqdT)*nMPCMzN4F{J(( zsFV@RuAH})CY&>GOTf8l17Xi4-x$ucuSqmeN8r2H(4ED9J4*N>@tJ zA|3-dBbCYOy?7CSZb;)*{zO+#pTL#}*0ep`rpyH|v@=NHCLWsZe3RN*Umw{PcDr(* zV`4t7sES}~=Jb-+VbdtEtt6vvE1Q$fXD)~>EEY#-4%k;ELMEq2O7O5XWn{`aY1_&n z#+Ea*a9LD0Zgf6{t<6S5Lwo&+sXV6@l8j8T}yR?lZF&9l*hDLC6y~7*tf7u}u7{GhjZ|wKI)g8fJ?y^-i6STgpN|pBBW1jk1 z>LNkxwUVfxclWL?!fjgqI6j$$&LYwoM*Xk&p- z5c?Y;e`+Ae=fBn^poVuiX) z(4CB{`;pwOrMmbOR8*R=x-I>K!U*H&p{H2f&bjnXm1cFCk)`_ z#GzTB&m}$z1!f)zBw0z&zZ~ht_gX-6(@~3@UF8Hr$@G!St@B=p`-qE6TLj&_YWHVn zfQ_VZyc=p)3zd!nx&%F*WBT)luvJq_YUB!T`*zioy@vrb8T0l90fG6oL)XFB#ohIN z#Xia4#9<){?zsJxyRpYEt7II^8lzD-Rnr!xkRkz1i>`gY?kiI%@WV}TPv!SC?va_^ zDWs_x967A}@5X&OA;^>njoxYXW14ebAv9VNv^u8xrYBR2&DeA=()(-K0==0iEZj5m zc(tkGq4XZ zn{Y~EXnJKcEa{~@`yF|nc)#~7Wjn4zE{ox%oOKFKzwUVi0Ou7bnjp-oP>_QL8cC-@2EQkBz3!tHBi*IV zxCBQ}>FFsf**U}_Ryp_mxm3W`8;~o?yN?T8Y2kzXU?*YBeF|1Yn?{@M%7pLAhw=8Z*ldfJff?Cr5I&b*61FP+> zBZ`|QaPHXXfEcOzfBqkbXq+vBnw~I#>3F|OR zJfS7qb1LNSZy|p~IYGbgdJro~RVD4iYlyGZz-Hu74vs8zyGZH!Zwlzc;*$n6HSVBp z{Oj@?4_DtqGvOS1t*5V`UY4etZQsfg1oARz)@(Yne^_ZzEVGKGn7MSnW|#5r$ci|e z)2(Ra^XrO(%u^|rRItcQxUa5b_Ur#uWG73xm)MmuPBQ>YJ|VC2W3aEio54Y&6pA|An|O7=WMDJjb25~yK{Sf9rBK4$<}Igu!(QS7>md2 zxEl4(8WZfn4SR6rV`pLYLKH%4eKYe4$i+ed=7~9PXKle+ntl+#Dod(L@-NXm-Y2oW z<>PU81JlGu333=sOc!*vSSi)sqyFL0cZFIGi4np7`m3Qs*tD=JC$1sVUtjE2Pc)1EsK-A>RoEvjx4*>v*`V&vT%r)3(+_1!GfS)C0~@uV9eqiA)%fu$p2YvX zy992ij!F$}rcAXV+I`22=>Phd;QxGNYKR)nPHj?|Ab6~>w6bs#2z7LnL)R@ahyTaz zg^N~3*{EAFlB6O7t0tWzrJfs@7nX*Nl8+q~!7lH8sQh76^*7hDkZUjBR=&Kp?Pm1t zknqvnXj>Iy71GebJeB=*NLg0lx0C)1+exI)W<;S{`rqO~npeJwSyY$imeX{2sGyIZ z*pF4Kjy^__f$i!`wF<2`ow!3GCnCDq7eoQRg1zjez*0c#?_%SvQ9J~{dxTO`Q;OkO zSSRx(cAQAZH6zcQ_z4z8TDzn5?PxLh9wjk|D-lW!=}Db|1NbMLA~Q$<*tXsf5ff%J zOShp3rq0EC9G2rz12?oI2GTIiwp7;)zA`2k^3`4pyjR63iyMkW~l+S(q0Pb-bEg9r2YU;X+tmpCN6dERWhB36fQmmr=xI3v1qE#*v z#iT@MmAG>fDai>1)q&KH@!>Umj#Uq)!S%Lzdf0PFC=ULD=XPgs9eGQUx4ow ziv2W;yn`0?Nrz2>1Lxp!OEi626TXzqYeR&=5>h!b)TXUDWJ9U8hcbA&qZ+&LBZx2O zZpLYQQnnGf6Il^f&N|-h4-@h~O8mf!UzK0n&(JsSNjZ12yj=-}B_}uMFK+>ZoyNh3 zCCw4(X&2Mudx_>UDSSK2IIPWBJ`tEF>Hf~R)X~g@SCVE%jQjrbcjPD6MmLqeQdO2?xq)xjjbM z&dpF*j_)DCBndLTjHtG9O9dRMT)*t!cc`6!&T zb^kgh+ax{Pf0v+u9s@jl8lUN8PfxhKaigk#Ht?74g*4+M@HXRb^D9U&IkgQ2wsHsKLi|gi5Dg=)g(T za?FAC2rpil9$Q+?yBPXNA6C61`$+5ymI}M-)OYz7;|cOKPLlITp{RJllev>>${YU1 z|9x(vPpJ8$b#7(#V-wIy{&n;+62$fRpYuiu^QJ`F6~TK?i5)|EroZ-j*ca8*%g^Gc zr*np?#1ohAHfSi5k$!9Xtg1Ib*PcYWk+JsocsdIISz%m;^Ir?G)lu0nc&MD)-_T#^ z-tMTZPdp{*f&>_b;ZSjKBZx3YO4`Lj195yuU-Olhdho(;DgPSD+Vw7Xsm0^( z-K%+f{_vX8cW7(aI9c16JtA5ViJuPTo7 zbvjDZ92RkF(!ONjSwB_`%G^kaO@e!8r^|h(N`gX|P5c`Fkjs0Y#ba(WHk)D;B}qs- zN$HQ%;2#h?kmQj-)o_f72lK2ENzxLF>N4;+g`$S|*!{fC40jc^zh1)5ZWu(xLm)tA6l~-UeZ2i!^dqT(- z5d=JCWM9s@tYN9?DJ`ErBw>gO8z{qwdDjUmvk0inQ~yiRJh=P3m>)N=5nspLtS%Y9 zE)q+bed49X;tRDKT5efwB0}>q!B3_QrdOjcq7j+Hf_+-(vtAnB#<(K}Cz2KxA_M-q z|N7t=mn5FR;{B(pU#r^9uI*v%w3L~utACgH(jC4{(19E;cNdpuH<>Es`_VIO^i#3s zh9=m_(#Ms9J}bAS;<;-r(M{2-l&Z1L;x(Dq@xo#3xq@Mw$6VM3%>S*vBV)mz(4=j2 z-4}N647B2JQ(uc8nLF^lp8qQL3?wppm7Njm;=$v4RB8+KNqA-STQ%IG-sc-6^A8>j zo|H}iiLU|&1yOD!0|kYLho^-Tk%gcJD*ES+{}g)|yWY3smzE&a7~akT{w^<|^^P~HKmR^ejvpkU47Xuw3o2xW^fu19aK zJCoP4L#%IcUqrsytaCG1Uw(*OI(x3sCO0AbzX2;qLYkPpYZ^kLEN@!;EI9~_ z%5QzNwIEE`%sW$g$%3HL@nr!R$cswCE;#G2`m+CAn!6_rNrnHtzvpgz_xv?MZ(<=uwkk0#6mgV#VENOYHXY~0N#rhWe>bT=F7!R| zr$>whjT63sixeSNW>el^#|!!oS*BH^;RP(&gHw?G$rBz)tC4ATxiEAgb@$CbstCdr zw2y|?%a5CB`t_`Lu*qcW7^KabgLK|U6(YCCN34o`Ha>&C0ZE2KDCL%|6r$A1iO5^S za1TvHGE<4xZVcHK8hT>B)L!yhmnk*gH;b3P)w z!31Ibq%2u38w{+iNJONHVEFIf#QWh$PGBGcQKn0T7H#9qgzVQ;*zr?OyonV&N2|HzJFZwamR`>)Ar%d+cpM+mH znF`Zu2_BL_K-cvAXaOIgo#e1#m!_!08Uacd;L|Ka|ys#W^^aRK>0(U}oTherJcNZU5=7K8f4mLTu7D3g zf+|z#CjY>iD&8>g4zK!g`JoJC^AD8WBB1;<1=E`MGdeqyg1gaH0cqVHth@$s!3m4^ z;qLYs7ysFP8seW=Zyurmz8D3l!d}agjO!yO@9B7QsDKj(*W^-bg>=)P5tJ66|v8hwT!=BSt)m?c1qcR2nU~W( zt}^=>ap&Q+RB)6vJIZ3Za#r~a;Nd~JnYO@;bs27cL7ew|ygp(qlY$-T8W9?p4;`G8 zpMi6BNPaKJne+qnd5GOswGxs&II>3fnvL3);2bLy^&0S3ROlG%B(??fe%pw7+%rQd zxhDrfn#=VWE&95n7kgDP%$zkRl#3x(#jl>2wQ8~&@ zAy~^!V{uO~h3h;wCf52+!|JBvz5tguwlb`#BJ!`bI2T~9e?3%eRl^6bL4lsU}R zj0R<rtPF>wUVavcfrK_2_HM@Fc?wFkP?{;6rx=E1I8}sP8HHLkR=;a{HSAsc z64d#$-ALVE8sl?siE?+0w;oiB)hVjvAfj2Y92a@_ag|KE(9|U34o%^{@e+Xuxfe7evz_z6sIEKDpg)YJr+#p`Ah8QUJIY$+UsH*q2K?>m`qVHy=CPYf>)T`WA+ zpm<5~Jrjb2SK7S_qDdA?@~-nv9W-&x&jcpIVDG`Sh4^7x#_RDLy1Iq&@MrV+H$CDg zA%r?tGS0Qj?oe)t?YwZNlfkud&A)`(-i8C=_d`Fi`8GPUju~r$7JgKN{@EGm@jT}M z-UlRPpRv5yX-8M6aa-``IUL+Up*w>4z9h%6hGBfm?@5^TJn`Lh5i=p=ZC8nQCmeXn zMLzHs42f*;zc^q|@hJ1?G!nc1Jt$BxcX8Q1gxMA}?TP5wcn+$puJy6Uh~XQvZ;5}M<=&_EbY7C0w+lmOm6rhsW=d#1uKBhpZRhmzMu{Cq<&e=m{R z(k&qy3~4XBy=e+lj5CaWyTEoV(fw#g%<6i%$vB&Qt#bQ%-YPN(%wmyE|F9i^M0hv= z;6)(VLw$l_z6WE3KG_$u+l?s45IhxgX1L0NDMSVTFw-$bn<0w@^y4S|Fo=%`B#ltmaePCRL#G(Aw*p(WIf zrlsDIP;8>(-zla7@CT+5|I+Bv{`I4OP6AjR`rg0$O=JZ?(+M$G@%jwR!53fz3G3QS z%*MT`?#)y@v@2V(47JZlb}2bfLfOG{9-~~0!_eAN)l3(H1mw(_$L-*sH_ziSO#Ca~ zdSt6%6JzG>NM$T4f6%`*Y$xQZ9=jYNx_L|bmHVWt-xAy-P{&%&llsDNkqSZo6c78K zAJ*~8J2r9`hvrDJ_(L}zj32~vOlvADK2RmvSOGPH=X09Pk~2#R1%;sNJ=!y6w91MG$3HnH6G`KPup?_G>_7@wno?Lgqn zz_XFkQ+B-slStTz^)E{%@HU@H&cHuiL zAq(p1j4AV$)^bb6k#tfp>rt3qEwAceEhg%*(y4Fqb};i!Ba)FmGb?~o{mpDh4z zIIf@*uo9aJEX{W(?oUw~gaL{@8qh@Epdv%q4ISkYo@B-0KomB?m0Lq1pa==DA##cM zVR5u8Yr#eA46x_6prBVr212X!CNKvnDcR%~zOcckgbWx!@P}iz&|#p+Q?@q4g;O1q zX4GV;p(2?br>Q^dm-a^jG9svmJ2K))TSgW#Fn*kIgqZxZWd+@K?<`dX2SQ<>^V%Pc zU?>St3<9;VA_bEO+MFOod?w0ahEdpOO4eb$#*H?G+`h0j7eGAP1$Ccs%Pqvd(`M!{ zFc60rRm*hWFpMZw|Iffr0bRyaxwXkq{> z69knQ1qw`voN%lm77c?xteQ@Ow2~7g03}0cTr3=8i9`y7hb<- z3xp7kK!cGt3a9`L1!0qBUg1`1K>oUiIA+|01;-UU(C$nnwSZ2DAcME+M?6;U?EhH(<9>X6e0)?%KjzT{skpe zV5tH5MC4||#KiHTnx>YL35NdpSfN<#mG$)rMi=ZD#sUcGnA(!#Kw8?Wt`|JmM3Gc8S1 z?kC?&Q*Kkyrsya#k-dpw1T6mxmj>;@2nRFN^ciDnBJ$EqS7Ahs7&T~CtJ7kHqYwcD zz#w4${|?y6>RxLW?QMZ`T8sugU+oG_g>3=hKssGX0 zVQUnB6-E=*lw%|MkG%Js*9G`S*;I#aedj24Vwbtf+EpJCVZo5+j*nYIokEz|yI<$! z^FM-b$4~8!or&WG`yh*Zl@u!^tE7oHK6WBC$Ml}qq!`{ZDkE;>e^V<{r0lKKBhEHz zbyyLR9bxoI)S<`=lV3rg2{%qnzoQv5BUclscxitz`h?T@emLM9|jX0u0VKoQ9DTRP@n^1b1$Pkl??WG#WgO zvBr#Fqz|U0pulfYqI}yu2t7|o5Rq6Qs7Mz%beA%X5)@4e>diPd(9EA4#RMzdDt`$Z zP%M(jL&hR4AqtCzLqsARqE_N4LqiJ&UVlBuC0ilM29F_SBc zE-NabVWSS$VyaT7$BgdDqgJS zJ%4*jUjc&I3*D-*%_WvW?(@eWDSP&nv z3giZ}0{+vx2C@UXVbF;X$RRw)756}3Zc`xL$oVZ{2j$hIV3o8C$#x+^g$K1LgdnJc zxRqxhAc@&U!I?k-sK8}dR8$B$G;D78_(Pst8h;R4=z_>Di~O)Q5WPr}urL(h_pMBM zsjLC4GZPRIWk89KIgn8e1w=N?%`XFI9{@ERto9ce5P*045hS_>Ko%j&V^PV3KuWfw zsrxEG@OLssEmjnnkEDFZLNqWdd51B$--Z<8eFc3DV(dxbU&43q=cm$0e@6gi0Rpb3 zhr{m|AcW1YZxPW8BVhdPmlIg_Fyl40Buy(x(bh7S-x7~~!*X|OT#_2|+YX0;Sj@8GOJWp)5seFCLZCu- zh6Zr>pNzJI;_l;wP9sk~Xxe~3&lAGG^1LwVouFRZH3VsBfZX-_uoZly1AG_>5%H8p zD6yeLW{~5F5dbENt$~;%E7W&;*@qTZB;700kx-F@0*se8$_&ApY(!cZaEJbSxC`p+${z{=|;YJ76`Mgq~ip)yCX&qukxPW5` zg`gfFaRJLQz{2<;T(-ByAPwZ-AuHZ}Q^fu`0f1Ng0Zau1dPq zDE$ZkMx~|xN2jYEy}ranWr+U4&@g=3X$lLk2pHY?U?MbtWPq0?C;}x3c|dA1Axg5g zXfcE|hO@NEv3W#8c)|4usk&~XP8;uNw3RWSLSf?bE9QeQ$D>3ynq4^(FB@+Pf7+V1y@Bg zV;M#SiGXhRBMnXD_jNLg5WbJa4jsO72u(URBg(Qp)Likp>Y}}L#hpv&-n+0(Oor4^RrU7u@e zf^Ua-o$?8-#EP0hzW_abTPsCc@#TSzxxm{`ed>>wt5&qeb_Xo(WK{S)1Yme18c3A~ z2qO%fFu5|A@6Geu`VlDMryL?tjJjt*L$FAzH)st9!Y?W-P9e<$>VKQn^prmS~5|MqdU}&&+!quf! z&&7{m+`7ZTGw+lw36YPcpKr1W9`fDFZruk`_nZo*AmT>%*$45>8Ihs{g%qx)I)o{x zx0d5CBXHsf5)P(&kxxI<=N)C9RJ?kox9;C4EdDJ)h_}1_OvrGsV4FyTDZ=h&?m6hl zfo8UY>t%%vUe8Q~za@HhFTuUTg>cU>VRldfI8;GYjvxbpl97q9vi`(Uc)=4atO!#? zgXp3a6{5v+OwwRPCcr?hQ#=S-VXzSMnQXk2oz#*$3kk*!#GJpWNNui2_kyRj9$24t z+JtcZ5p9YDXg&Vw;0(wB+~wx$Kh_=roBF@@Z$1rQ1rwh1NvH2c2~5k04XzCeCbZBT z@vx|->8SAFx|f5GUhZwGp)7@qx{@8i+EG$aP|%b@@rhEf=1$MVg5IxM{^4(W^78)- z-7#x=_4p1u6xp;nYBpSi+H+>VC~?jl#IoGvd~Q)KRKAL9WiH57|M$Z#Ts)W)Erb{i zK{~!h8~;Zp^x!Fbr|+d>$JzIL>+pf}i-C!>Z{KG+{YiiVoA>etwMTQ_T`=0oduz2| z6mjDZrzI@R=>GwAK#ISp@M8*ykdi8rqN)mLDK#QwQ2{kbBGFXURaI3~MKwxwlC+1H zlyH#-g2Wg?u|}jJ0uZTQtmiCpBjxM|w)Qh0KjnXmLF|A1qQ+c{po)U;)4qZH1{nQ! z)!SF#&*?bpZa10nVEF^#V{jPaDj4XJv=t!)q+&ux1IYS+_snZ|al~P9o$Y6J`RQ<$ zOVn>cIfq4O%9nWkin-W#xfnonTRuGg0dxl9N(mvk0TDytz!@)JnS*T(h;qV5)_Nby z@_yIz2e0>FzJm(yMSNNrq%2Rb%mW#>w(VBxBSzT_%wl;ui5|OAxgs2c`6`=qaeKHmYkl1dV!0i71sGN-eJb+@f z+r79rj~2dbRKXJ9=XwVv8mYK$Q{LIA0ic3{2>|jihi4;HFI@j z#DriTcl;0i|Iz5ZKi{PuW}dp~=xH%SUYsz-Czl;0-G6KJjaQf;3G&F>XGebF@)R{g z^yO3v}T80 z7DWpXkdRUy1w4L2Q=7E>KdU9vjvQ=MHCEJTB(ZMP>fPhdXJE#f; za#1jaCTbE$kdWK@IyIzicb!?y7&U+Zzy=UJg527T;~0Lzvpz> z`-0HqpdpTsidF!P2ns<2fC&1a`uWLOcDpveeasmf9UGIRPfBHU8~t4NKSOq50_>Zo~7vOa~E{O zkHz+WIQ`A2=`Oy^RenDi$b1|atz10*Pcq@gXdJg38{W^2^;qTKe9ml$HK6?xP$&?t zDgdO(OeF)_m^dK}xGjO1uanwS_{00Xs;e!%b?kTT1=^x=03r|@>c#2yBxRs45-H*ebupUBw%BiZAmu^!Sdx3=yT;do9WBf%yy z3PLl+76I_g5^!StcuWKWLb*995duNPqWZw%QXxhiqz4fL7(|1GC|4{NLLuQ~V6qgI z$ptvWf`XwKRV)V1VzFSDvQkw)eX_9_IRCCc@pB{E_G8I!BfbyCyl4FU#kGvCSs@XM z8E63*QYemGhG!s1kW4d^%{=4c$Sz%WHk-uw|F0AGX$L`<_4IaqU#vcu;d1-`PCQui z+Af>TA1@ueyxj%73;_r%K!a*PNh1WI8?*db4@33)4H(!T>1C|f$+lOIHE?LBXg;Cx``KESMu z${G9G=Wut_OZtFq!0$27K+k=e0pI5@&|YA0;e=Xx!Ia{7Yt&0HG_x~}CF0kid{S31SQV#gwqWR8Xnyp(FnxgTBkfzCQ!V>Ja@vEEut6NsaWq-D z#%nABW7v;h1t|c$fTSQoBEApYvH3f%?PvEpG|O^;*m#tI7s6Gf@{4+)y?3X<=O@|& z0H7ZglDEUbT|BPU)kq6*2z~Iu*^+l8838bDD4ujlbr>>`kw64-JmA2z`ZQJW645b$ z#MaRN*C+l}OfWqiH3%_OS)fv<>4V?$*}t#){?B1`c5B>xq7;ijmyiUh6801!1~5Yd z2?Q`Wxj$#Si|#yH0m+o(+Slm5OmP3PxsOISsxWc07JUtFm6_>*&SjVDTgV6Ni^FlJ zfv5*LiUu)oi-AB3NC^}I?f~Br3c&nz8jLs+4*_NN{||}D=J!27^1d&-y!&29loY7t z0copzrTl})yWHmK34{tjASOXOj<`B{P-g-9()F{-|7ngLfBpw_4{ml8AH!#Bd%MMA;dmkP z$NLYb&GsD6^5Tc>4kzc1&V}Xm^#T+P(L6z}5czvH<i39V>Ld{7oEB2yxX7KIV5s6k50U{!We2Bj*Bvb3-& zq>YOZ1xj#3q~&Io_6KNoUoN^PnaEyJ4>1}_nh4kOi3J?kqH0ghVF(OV7b)ZO*1cqW_ zVgn`pFMI`0i{j-pxDoBN+Wx0RgoY?Mhz-I;qUcEh z0u}0%B8gT&+$RgdaJ)~I>iG{IJb3Zr$B!QO%OspEqOO4`#j`$(lVJt;00A!#8y7I5 zs;kqVmFxS#^W*3J1OPnW>&xuC_hc%;mHh2~ACp@q4ZesTh%t0v?SYaZ_{jtkNI;2% zA|fOX53`*u<78)Zx!SoI*N+}Nc=6-MnDB%l2tp94&4@sfqqG;bU_QvR{IGyR&&_Jl zY9U0IlD0O)Fp!MIFw6r92+UkF7YvY+B_J?I9rSZNaQx%ej|4vNDU8+bG`^754Oe}y zACs2G47fer@HM7iW*LbDo8~rKwQH;J zF1ct-ANy+b0`a@j`T5Y+FzYy5IT@M1Y|t^90ABz1pP9>e_V>OC5JUA62i6`QJ3udn z60pL3jCcEYec7zmZ~ED^M1+R4l-83P(c|9tzGPM~7Z{P|SS4Jk3DM}Qj3T$gqu%szU1d>Q3l0hcGT${n{x_;TY9xC}~`TD?Mfq)17 z2geNc5VlSR7kP^O@r=V{VU|2(5`|d|BqmIPP+D3T><&90j<@5lr6OWuOgwn;=9&vGcd@r4DEe?i|~GLY!wlp+~_xQ z6M+71I{fcPH`C|Qe}MJ<;Pde}~r(+mDUY>7GL{%)=uhjEs!T4E}WKI1^rN zT)Mthh0#|5r3d{6gdFyrTOtiK$TykbKmd(yChiWU#8*ii_`{hbEVwW^i+DyBHbzE9 zcR8KTym;~B$B!O7&cYCT=9;2U>;Lb9^tsVkusO~vIm0mLICGpc3Q~d~Qj`_s_p)_0 zVA+G8!~6O#snxhYzas(tXlX&fRO&DQ>1vq+`^RtGW^aLpAPhDdLIDtjNo0g?*OK*m z!r^fETs|8OF)=YQp&mSV^Fs(i5PRQLhQHk9#q4&ypE;P;+Pf`l1r$cJ42$9ZNApL0 z&Em``%)>Jb`d^Ls-qY*H_+$8ezu|hE_oG?N^;|C#)X*Lre?aw=*I%F8dn8_YIhD;#{LJ);Sp}XIOYUgkFgX%tq&Glzb zFwDa{{b<%cBD#xyz@yvl$=aD_yY1pxp8P!LErFY3x|cr+Cbj9{zI$?O5k#_^>eqk)>$ zgT98GUu^t+PJ8Fra~wbO{aQ+QopsNNn7?`*MaKEH&ySUDfgFa%h{fPDVIW8{ z0U}5;EPw$B1cHPB2n7$4^k}#EUEd$xV!4&+LE>B1GLlVBYksm35xqXREy47`boM{sucdrMc4SHFAIHx@YoLU?Bh@0MHbaG_(OijR1px zU-JBZuk?1$ne={^x5=c&PeR{&T{ZpQ!`S(-S^qFMMtqzG{olJG4Dq?C-!sr*)Kvd` zN~@jj&l2^bqUP#cbKcKRN&>DYSwRuN^}yRzx?KtF<#tnG>-DXK*nEGlSxp50C)HB} zjEwmzPfqyeTzt|$-^9&Eas#JY#_Q^$vf;4MF~9e++57_h9hVc0xpL(Ckwel{^KftV za=Y#Nbyd0?-U9gj$oypcTTbTsf5F%La8xDBpXA~3{Vi{k3hId4Kc8MQ`;otEd-9#G zFB?gY%WR$hI4j!k*6Xo!`+HyCa(kbu3JMwml7^OmC{dsY1r|@98BELM7MB0x*uU0F z^1j}!J{?hCCd2Zpd%w*>>+{u?zmI~BtIcWT{8#;s(}%DU`&whZ^T+>pLc_^2BpoTc65t~YP>KW`gT7o%*c!|UTb&DjhM�Taj5lNI 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 v{D`lSK_iOvoqLq{$m^WT^e>&Fk-R9 Date: Wed, 25 Jan 2023 14:00:13 -0500 Subject: [PATCH 06/27] Rerun data w/ new feature importance conf. intervals --- data/otu_mini_multi_results_glmnet.rda | Bin 266453 -> 165520 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/data/otu_mini_multi_results_glmnet.rda b/data/otu_mini_multi_results_glmnet.rda index 9d506a8b4de673733c1f1967e4c53e77c09ad987..96ca8168cefabc4384b533ffd315d4f24dee2776 100644 GIT binary patch literal 165520 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 AVD`h9*T zYuq(v5!lJci3Xq-xlcX;BYbovZ=VNm{@_*XTu`R!K4)$g*V#qd@Ag~W+*yPh#^Y&% zcH%OxsSDqwSpAY6`b$|s zozs2V$+oW}k8ewk>aBK~9r!9<1h9^gaFM$u#!CTWlY6qBiidD@Q%>5b7>B82(X0{< zcQZB|9K@~z7R~9J?{Zm$z*Z$srNun%-V-u6BCpltdd8!SCLYx+mQC23^?fYcUbr@dy$58U($UA2n zK7$pZs=5|ZrBTT2g8|n&x}a>87O$G28CX~VnXp4{Y6L^;ZGw*}g+Nl^laDllC;H#N z=d}WhNWJvNo%l_=ps-#2@*H@*bC!(wSayb7hh4?XP<)*y)gq{LiyO zg+zw5!E4@?CQ=%r`}Z4-1|3PC8l>&lE3(R^P1rG|NcqQ~ethL!c$uFs-gju7A`fLf z1<7^u4wDMBR^(H+A`u4hJ$iOF`Dk zG@LRw-n0Mm81Z{j!kPCoj&IZZ{cb!)$3QjE+$xts zdfz&g#dE>Q+)9eqGv*!n5WcqEkXw{%-ITw%B#joh^z;edd{W7ZNY8j^+fhUBc{$=n{szyrA#6@ub(s3zF)CM-&h8*65MNe3k_nsskzlu?s4GBh zyudohmt56h8ql9pjhMvkAAYZ>9V6IJJDw(8PW%p&08^WVEo=D)@KcSvgXZd&%CumL zOj~r@5!Wcq8S>Io1j;G#0^9) z|Dp^NQEo)(*B+J}ougxjl*jgG;(Fy8_v$ro<6Je5RQo!|oG8o?=#^dYSQBaO!uV3L zM;>Y68RcP-Q{~n81>#@%mvvg!t$o5#Q(R}i&JXd0J z$+YkA>A9U2)0;e`GvCYju3n6n07Z6HLOi@OL9of9u4QsfhSKrHo$yS<$1X)>%(}|r z^M87Tzt*5=okWY0;<{d%ItbBO)(yxV*fNqiT1Z$PyzPG}`De~p;(hk9P)=_19oOl& zT<7XI0Rf7H<%K^3wsMTb&I4IStR!8|SXFmNNK0*Xc`gNobF=%{{9kcbfl5gy0TQ1$ zyVG~4BoIP4U-!3B^A}Xbvd^AnDFb_gyIt=yw^JZ~vh0MDLl()W-q;^}dH;o~n9D>kg?9z`q>2@s~$uZRq1m5ROe-XM^GI@7Txe;t0(t(@|iV47A*5lsSyuXwsknRTPM6YYPv6*-&a;J()vcMEZU}IERV8I7}s5g+5$a zTb0yNbp|=u*9SJ#H0CBiMG}WgOOwJVxwTYjx=Bez2)Y5iAOI2?9f=$TiJ~GS3DY9% zp-K=^6h1N@dPkB9MhvBmOa|eU!M#FAno%Uw#t~^_XtR<1FEN0MfFO}EP@A=09G(gW zm9_;@fos7~(Ntq)Kq;VEX`2wsh3nD26V*$;sMBBPQp7`&^2l4WS~6)0+2?7 zWN5iW`S}z6B^hhbwcY^YCf4pZ%*y-#9W3NEE32lt9V;!}znJe~8{X~JJxYoq=-Y30 zOomD$MgN^b*-Gm%P+O{hDP0}zp8Hg%N3+RBk(Ya$?NsPw;F zNQ{ufYssL!sC;v)Z-4E08+!4TS!h^|ejSa_5zC7^Z?A0-MR1=XUUhyg00 z-bg;BK4~iI>R$y9Q2LdTeij1dN~7vvt*7+~FLD9=Ak!^wHedeN1?3e}kIKv=$&KOu zB%vSkGcUjgsa z#ZWG|W+s|E8`@e=LtyH)VvYNwU&nBk^?^iN-E`LBB%T=Un|CEx>nbJ3%2yd(5-S3z z`%3*J|9IzAfFR)q7f-UiTktQvgCC;yR7gUvh|^VN@afHV^8m`MV*8u8iDOReBNZ~E z-b4Jln-{$ywJ+})s}yR!JgrN`4q zCTGcLTKF@5er7s{iJq*PQ#xa`>a8LzQnXiE`n_Svof6vccoB`D)hoi{Gma1<%0VHc zRk$5-EW%eM_8R$tKM`MZNe{@M(zKu0Wr(6=R9m2(EwXVvBD8+<@~5+4gb^S=;W5{PcE%xbunQyQnRN2uv2a{ixt2 z{)s6^_B8laJn<}1C?Yk!q7U*Z_x?5{mia19Mlc`%8Zz+OS?3|g{4>hkVfTO%9hafm z3f}BRxAz07sOqpGHYcXnJO0Ae9Nj?nRNF%||u5*0eHLTOD|cRZFN^i^DK_ zKUDPydL}FHs>lX*ZVxTd6mbq;lb? z*B45C<{sr*_HfX6ovTt{pdOe0_odXKenCS2-lVC_z=MNtBR%(>em@mHZ>W5J_tUlZq{NBSB=@&CJhZCX+L2?6)$j z3R5NfJF%5-;38P9V7^;5K7QV^xO2-zmC~-z3>a#RyR7I4%jy_zL?)jsjt2VthO`1S#8SB5rg{$wtouT|6+3*l)INs>AD*e4B^Tfnh3Do?I+8vo6AaxK~P zGl!|wgKhNh<-BMKsM9n#R5Ipmxu?w#tn9UhoVRA?JMYfR=nn?(KYh>KQ#_)3C3n-x z0^;t7*c`cEp#J#@>xdWhVA$hVPP2Ynb5$eC1>8IIN2dNPa~rU_7t&4~!L+MB zkpfO<(6Yys78l2#Kzb1Gwdsi65#;CZ0)98#-8G!d)=GmN|9y8?{zu-HNZ%{w%TVo2 z$2a*eZHlK}+ir zZm1C(ZcJn(zn1sVLU$sZjAqtqPh``7m3|*MSbgC|9w*R;^_EDj(;r#?!X0-$uMpv! zQ$nWEVW}M|J-ZUORUe&ZeF+8yy}&Kz_St2Z;}JxEI#a8t4p9^SS9W7Fbb$73XIqw z0Vv9hc{=&X=&JdR)4I{tKG>L=gZ-Qrd0AViN^gkxs{Zf^vZc8gr%NYbmFFooE6(Mj z%0*{YcTGQL-IbMkvye}_Awy1qTPn}R(Cd;rIX2=8!sp&bIChR&WqNuqghBs(8RNh9sCGiDCO~wII zIf88<1i`9Fw-r_tu4X<4uSc!p;%5O>m{A&v))oR1_>e8l9k?x{FvfZiuD6?u+Z)~& z0*#iS|jOXVOb{3nNXfd zA6~!~Yt(Cg@-spo_9*y({wMs-p7H5cx=J8XgzhjBs4*vNnaPL_LnYQ_pYKO;J>=mL zixgt}78U=^jMr)8$@&RM%9w0dhsDt#9-o z-$~qWzoz@x>1Xrh4MhFRS?POomzI_1Pjr(+%!|^~eIhtAJ@bAfF_gi1Lv!Bqi>s6i zido2Bgc_9@6HvP^Pxpiefjn4D1L*7Y{#MciMWZaN~)py1yt^v;TfeNLC%@w z!NvWX+_R3mtwrjkXV|SR?5VC-Qu$-o+hZ-Ckq(c&F#sdeqM?%-8b}&U>5Bf`#lRqumQ4~4ea;7+^3-o)W$YS-} zYiPBOS8%z-MFs%cj-o4wW6eZi=GOa9g+_6{dWWfd?I#Knlsi;E9{EmkKDmbhQL}Y14t7^eGcV@Sm{DJ(EUG0q3YBb$XUyy|rX3!clm081`1ATo?5)E53uY-bR0409Nw)$ftPe&IG>TDsElp?It4Pq6{+;s;VR^-66&vWm0JlSn96#>`W+1kDfE+y^3pDEdhe-Ys-KJI!r}hX@6^LSn6|5 zRM1@%S(4hz$9?eszN{lxsBDI#cWn$~!}6abk&D({r6DeoETZ4~Zv zLBULTQRkIzbTB6-&obYJj)5CMRcf9-A}9lF>W>@h;0nF#APa%HFvLTZ!E`e#M&&+1 z%94b?$>BYZN!lYYJUh|sKo3)f5U9`SfpBLiYURhO@KF~Uox_-6Lu0nIkxr*1x&O#y zTbnV=$1GiL)bydsPhB-( znX=4V=(2~NEDuTxs`Klmaw&km@`7H{vwm+t1zICabL!r=g|YNc#<3L{{LXf%RZ&xRMkKW{ z{Lv(R-AuZ)2B&>=i9<_qFGo%`^(eBm8U^Y~DT)N)9t+6Xtd~Nh2!N9_iT{rRqCfiS~SBcKKL1=>yJ~w0yPam*tFZr$>SNOl|H2T>tNwr#~@u#pj;9kEl|4I}` z;9h3YfU`kb+xyI zf8=5MABXs^Qp`(=?_WyYD2i%N<~1CB?k9GG$U7r~QSqSK4@P8J7tW|G2wxzBd#LXG zrVMQm_wB)yV0nSh$-NVWaW-M?TmM^0HfcJP(8J@Xi|L5)*HQ!2Nc-h^pP!G0!XjaG z8?t=f6-YtD6t{fg=D>}AbX65A=05nZpB0(wsTQFsvfj7IT$4VJdfKD2jt`k~FXKIldD?{;TN zz8aGC-I{$dxhFjl@;$6wrgc(N*FI)(UO!!^+s{XIN>kb(t~y)R?}fgc*$Pvtkk_*n z*^ndEuQv$#NqQrEx}@E#M!#4l-H<|`SkJcQM=nThC2dX9megaIH~dOOft8wR)GMJ( zA)-J%wZ^7&kIQE~_19a>q#QK)LscDAt>HLg@2`zq43Soeqvz>eV6UwQ&hPOYUA3hB z3=W)6!jo-Fb^n6)(*{FphB~gU`7>a|$aD+Ymcje#uY! z$#ab%s8MDwgR_N5)w2vgEPiBD#gZ-?tPJb%(=+&$g5h?-m_~~adXqbwm|S?e)N+I? z7IZv9S29iym{EUhc*oCs6hxzrjs15&X<#KkYD)J6QXcaR5j8E99MFGObfhtm5oBe2 zm8Z78ho5*Ij0^NA(94rliVOP7$Q>J2>f$(?38C$wcm^Y{d1TrAL3dw*TllLAO{J=$ zS9uV{3UH!RDM@zt5yycyGf!_q$?P~oCUm@S?~Ei`=>!$kVih{-d%bY_G6!`bFI^k( z-mackLxjQtuE4DK)UC38Xs_`jjS_f0UCjfIQ$0kQXLc;EGlo8Gv}#nGv2YdrjQBYb z#Lj+I^5oN#cNc1zwFDB{odf+}v=?|Ee~a7?n4SUKN;}XSD%sV5+;nGc#%C?XefhRq4O?Y2&u&!ubC0l%P^E2+YA)-mgd+jF~ zuPJR!_pQlvr6QsEr{E|H%lBEX22MiTqxf2OScCvc>T0HUkHKL5gmlFn8AfbMUHonu zzY5CU?=8VnBM{MFWT)=7l*Q^a>w5Lz_4g8SaEZ>G76lo&-xyG6nZ!ZS(v#cD)D6F+ zn+XdNVD6o3mi{y-qx@m*it$Ulchf4=*_pHcf=I-Pe^(Czf3K8_zqb8+LZ1MisQ zh^_N&9sDD+`f$-vMxn?dG%_KtXg?e0xeIxmiX<=(o+4`HGbSRqK+3OQQoFoSYSdt?Zx3lsS?38lm8u*r4+CX0axz1ey zZWQj|+Z7fu*jfLg{&r?+`3XZKb#p#<5I;cksb4UneLl7)>Fg1%yRU8yjFBxH-K*%ie2B~z8F@zqBwxMf4+9C+{PA; ze~oOqkY!tKI$RF<_%xF3QV>Nlc)#lL10Cj*64UrB8rn2nuG zte#_TEV#T#Ohq5{Lgy%^1ym_o-oEQFiq|jqs$n~E+e_&%#a@t_V6##4F)@PaEG!09 z!fkegSR9Ny>VBj^5TpGm=OK?fEFxG3zvVEx{&;3L05zcZ)H7UpRzo{wl4%>uNhp1) zG<#V8qhTsqj3hYw7l@p~YZNA_%(LVCY)T=)gi#7S)9NRZmXZ}+rHi5!0_I?+bU7LZ zjVT6CPS~P%UQfIpGHagF0{GNDFU+E{KuCwP+@_QP>$vyOdJ2Ytcl-m_w$j4(h^QE@ zbALWLG3f0uK1ee8)J{uPt?M0~L{Y4~fYCKg-N|F%h)#$GV9DbWJ`_7eiGHshSN!^rZyj5CzVjLS^+dzWo7QDxkm6^klH(nG!tL8n~~5Kq6ihybmPuw=?Vc&)S9Aqk`pC- zBQ;WYym<}$wRPYRY~IKmOxbgqReg%WuPSfcuJ8&e_kUfXvRfMrb)mNUp-x5!@!LPQ zS@(Q#Q+hv9Y5FsAbSgkjJ2x%&P6xif5_6Y{4hRa8Ox{(!>CW>fYMIWF{TqVcRL=Azw?qpB zjR?+zdf#}Z(xj%nh)W10K=5E$X+<0p*70JFcg8uLVm0d-iovf73~46|Cmac<({}WI zN&uy$OI_Q*OFC~bT`TE}My{V3uDg8tO&1Y5?&My4+5Aq~fm<*U)*0rrHcfq(Rja&$ zqNuzfOIsoJ@WU0=!dLI=AIICZX-Z<#Bit%AWNkPMUS(!WzpGMr#8_Gj(U~d@$$lO) z*wT78=B)+t2)NuEn~f0}AQlEU7|b$eWZ+&7DWRxab_KPjH(m&=L8}WvjAVbR$2VSlc zuDqn0JTc;ND7NTfKu($AQM$kVHJ_+2JlRwWc$?3RiQ+oi3!77~U^*REt7O{Mc;(Hd z%`L-F&<1fDw9(#mmQtI{$iC4gNBpAs7QIGcq<^heon`b5b0IidcE~8>-<5NbCp;ss z&>O=Pm3xoIyjd-7gLZmb_oI>Bu7AyT;h=f%$`dgPE8Epe=L zE{&&zc2tzr-0q5$H(v$0ZOj~2ZCob$E6hiAv8 z_Z7|c5s&faCT@!9Z6ga!pv=#Da>Ebz9}0`R)Hhl>^YJ0|>3X&6Uyr1S8GWLnDP<_} zG9RYYFT$kL=Ji-*38XuO#Cr})7p}9R4ewuR!}TM$L+T!&WdvS}N_L6`E3tot(DADn zidW2R>}0IeQ4Iltz_iK&P1EXu<=iyD$3ExRm)&>Uam+eTZznSm~v)7nFO|<^_7`;+^0U z9AwdUm~pKlE8mwk)AN@3kdjy5JXO%n+3N7Z&Q=U=dpG6nyT5)}#Ce2i{CsbY*C6UU zpm~Z(Gm#b2e-T1i-s!>+9T>b9B`%6ZltmmUuu$`&z`vI%gZx zD{x09RiBOU$Q18h38Cfs^#%4k{kiWe`fA+NHf>bmokZZC&`Iwqxe8_d>O*cR{|#Ny zE}5J}oumncUYVJ;XZR5X?UfOaLxV)#a&xDJv`jwx6QOj!A?aTP8s>R)_r<;k5|KCN zeVm?o`UA^ZXN64A7vWxraKyBib{le*IFuFhacC)%61YO@#CLLdbQ8%t_{z-NsUb51 zX+q#Vc^6qsenqV;D9c9$?w}C^)lOCnsit-OYp3-oINIu(9C?i%bWCV}HY}@TJE~RY zuZ{6bq^cdHq1j;+d5TWAEDb3C9`gt7y?jp$f@e@}Q!6h-h!M&f74^oa2{Vp{eCtuz z@<|HFykD{;whd}xL5&K1dX|f*zm#kd@f0eXGSlkH9L$tDKhLtQJT0YBid0GJp)Eet zB`dLt+jb;U^;qwV(DnXTd}?)gwPuALSv-XHnBz0*UzC(;qtlyt3WB)uC!yRfLtT#{*(i2aOkAa@C@b;|9^o)uob}5`!6K&t22X<~Luw4X=JDew*yva%(>% z4>^b+pk`#V+jmDF5_M=I{b7j*qNvf$Zz7?2Iii|dx}_&yXL|>unR!ojHfq*g=XViQ%2O8;JOccMasEtSk&Zcd7iGDEwH!6P9B;dGGNh0L_< zWZ~H>pdU4xd(-&uJNQRkj&H7D1)9HjiQk!?-F&8v;W>JU3Hv;scQpaaETUC2uTI_m zUj3R9oSK$=*E3!g`)Ar|Yo6Ul--}Qd=PMMTXC4q%$ZhktKuj#(-u$^^*C7pk{5pzr70I6n<7uCAZ41fveKnM4M99V>0V- zA=;B-jfz{bBbMwH=uJNZ;#*jRbgPW9oza1Yw3bHBDY%*DM z%cg+8=&nts$2hi<-2HMjT#H9mHMY|1T?`n$M6ao*j?-x2MVhExFr~Zd#(BlE6nANS zGPFq>mT}85a0>OwPlB4xeZ2Ok|ucg6MGgzK~=9h5+Fk=|$%WH#rK^4=xb)_4q}WhlA%bGVmx_ zb##}s$GFEjpFL1_+;d3M(YbJzO+(;gzuhskc67R5Y3;C zit$zhjq3V`xdr7v;%SgN(mq<8(>5IIF>;en=)->v=_zK9g=?jD|FJLUq-JX8otmcV zXy3-$VDKNfFJ4G)N05>-%La?q@J!`#&Axd%0y!toh@=sVH=hnS^U9JbW6ixy;5Xqb z^||w~uLvB~m~@{Xc)=O>C>hqw1A;M~LdJt@DVfC$WSP=kSR1%)g}7Kl42ChT0AuUI z4hApDC447c{A~OsAQwY287HTBl()eYf#ni$JiZV+ek2!jmK+#e!e>umz;A`5t%}hD zMfBkdj}&RVuY|3Z=yDvzxxuADQAY!n+23y%itF(-IlSpe8b-S?>i+q1^8IE5YZ!SB z!Ab*SyOCQmBj_wMFlU~BVC_C$tuhXCN_L%4%M3k4E4=D*7`E_|;J!^s!l_z4fW#w= zjkp<|#@Lmq`{5$dk7`jF&jtrHv1Q(?RhmrO@%IcYv9w__}dimGAqsO zR~b=(E%dq#5AD7!I4YZHeFHtwjC(^)OY0z0o@XGG;c7)pq(;NN_94yF0D~IgpP|xH z|MgvprZAB3Xdvluj3yDg92)VF{Xib-kU5LT7TlOE)wm&3)OJL9R;4m+^d4 zDZV_-)6=hb&mtuac$y~ZeJtrTMe7DH?l>EFqG&83%GCaYn`HI2V5Fx{7GT}vrf2x} z$cfy{w8Bya(m6SvSdy8&@O6kTSc{*h)_5Q7GoiH4-r|CAl*Tn>C)(<9+oCZbp}g?# z@W(vbTQX$oto9Cm2Q+n_Qb-*Ktkpy2Y>l3W?2KotZZ6rIAzy;TeyC^=eoM5;H;Agp z!@Jsu*}uvZ9QLi^;s1KG>%(<>!^K(ZBhT~ts+uHf2C}D^^6#oGBqHcDZ?u)@Vph65TH1U$XsdP+wTh6Ij28`ft^uTCp~1+Wbc z(_wn0!9y)BY!^bKo)kS>40rsX)tr=2nWRRCGyr7?7|isXcHARV&F1KTJTed}+E;f7 z8B|Zh#j4>oTU zNhi&^qP4+6lN#$|>@ zYQgI5F|)nDV|loKv76;6yFOLT#8yonTSgN-mshFr zKAQLo@}<$PVslOt6*|GyxHv4R)Yux3R$%ZkQU!Ar`3l;#t(A}wB0t2KE_R}zf)7r~ z6Nz@laRNU>;&r(N!^;`+ZTebZX+PRXO8y2zUeb+fklQ#<&4P1z9U8}TA{4;4%qQNQ znhTAbhcXqaZ_+o-$b%(iSO07f-mRAA4PM$o@lWLy=t*i>uZjaDw-J&t`e->tijm;)!sP!eZKdkCdRp%@B=6J(>?5{O- zlg8XD9Q>I96{E&io|r|GHO02bUw@CYL+lQFjUqo4Sl#0jM?Q~MUJyW>wf56vqz+F8 zmjjOwu7TMQphmnP^GzBzR1_f^c6Uu|t11x=t7Ipn;2y$$te50VjcHG}XT!SE0-3I68?@i}wI_A53mL@)h zN^u4F=9K(xxSr2>oFO{S1NdC2jGb@+Ue{;E&3L0|A7?!HF>0bN6xAE^@4u(fDq5zZ zP1N_eoYPcx?#|}Hsqm-<8Z!EUlQ_}siNitR!rC8jO!b>?ecsZmEjXM%pLhry*GS9ns0~qP z_9?!9=N!`iYq_5eUjEGc)dpu5jO$3zK$OMfG~*#TH90j{EZYk+r21&%E+nJdWn7u6 zXvalns>;BHJMMMAny!AlbIP0XKRHn{d6~-HBMr%e)u83M zDwskIjWJrRhM(xDHexI9U&TwJPk{n<`sp{-#@((ld723(ngxTmWybN{R&m2ocAP{) zcA~u8&m!-R?fh{9#>U!a7nGs33QHPRP|oJSK{BNeFSW+q_P;<%r0t}&Fg>a#ynWZv zKtm?}jDn=gWQ)z~!ECbX2im7w_vBpE(23Xa=RlsZ*VYMM3lEDLBO!dYyqZDu#q7)Q zd#bWX@VHGJubpn(Y5KPwo>_y9*BY2je8aU+-9}2jC@Z4JV6xO&GSzmi2L&2V$h6=K zR{mLF$fNF_T=G@1RK34J6pBY0JR&TWwjTT8ttM5=3I~GU{bab^_{=)y|qj zAt}wLJ|h^fDK_=mSn)vPxw~V{tYU2L$pQGJw-BY`TwA`Eb-H)Si4XpgiRF+`ZdGZp zzGmtbKE`u*#s7$@@tg* zN#d$`z*l}F0W!CmNF1GNc{Lh6$f|2`k@jLi!gc{ABG$lJ;e z!j7zvlp;-SeIn{sq(Qolj!L~V+%g%hY1xnI@w$kQ!j9$=82ul{-ZQGH=6eGTAwYlt z3B8kq7LZ<~mxSIsg3>_*MJX!16Cf1nC@8&)B1J%u-pfl7kfwly4$^z~^1Juz|HEBt zpMB0+XV09O`Eq9VJkK-r8xLcmWSl{I4)pzejrrt#dHGD#4?~$Y@?xf^+C%Ay&1=E{ zKSi~4C4Q$B?<&=m5mkST`WyFf7&%p|_u-G9NG2he;n`7fS}NPvn>j8pF+uBg5^e*? z|Gb(`+NtnU^#Fx7y`dp!>j!<^2rAsb$$Q2^;=I?uLPggK62-Mf5!z!JqeH>tOsr4_ zBGgTF`!$^&EcGm(E16W^2sMcchdl950az(fy$Me2?I-Sb+a?qCUCCX$*!sdTL>-y2 zk#Td$N%@ZTXXw$R8?zae*PY6)amnXaZGX8w2K;ooQipm_{$36INM7ehx^^kS>O6N` z>%;J`#P+oQ>8;K?X_IgD&N|=Tx`>d*keH8t*Ok=W4%;WkC$?|#7b-nRTYsmL6$u}gSqQ`-)JbOXMy=ku-E^?+DQtUS? zT!;hyN&Wh@cgjAU+k7ll6}Tt&gkfCrP3X*fZ&DVhQ<^}u(|D3B>A+kl!c_8 zeoR^(o4KZ+FNo?qndalILhn2J7dpC`PzgR0re2&#o86~S+M=3qm#7^P=jx~&2Nm59z zVJ>Y@EIYMmu&(A#W(9yag+O|;0H`#sSQ$Uh?& zlMS}Wt3Sw>Cg_Jg98)A1(VodUwl5begBlKYSSEZ*e=FN%{=6v5M>r9F9LH;Bs27yr zha%N5aZrkAQxWifuQ<*Ve$(vB@&f;!-$p;nv$e*n5ndd{#MfQ1A}?ReDAG4_$@TIo zUdnkRyV}1Xi(26XLu60jtn6%<=78oxhlOGJEU7`ENnBt{>O3HmQ<5FG69%168kwOL zi%H=!%;PcRHg~ck1q1S3!FH~oOhyz6n^8{2OORS+N#(IdCOCli z2z1#In0|k8gk5(n;M>}^?D?Dj8h`!NUyqpLXQ?-pI+O=Kovs`4kb4p8GuQWKSaB-< zzV{G;UM5UrreLqMM{c%4>QyJT3RzRX@=(8TVd222Ufc?c;B)R2zkYvV57Kakx}pJALw`#ge)m?te#dumE}dr$b_*{ zYrBh*_TlRz2s&kX7~pmVP$1Vb!fvst>)pQ+dHLjDEhsWlA^zj&Oh?HuqFdXTRQCgL zP0cGfRbBP<-{c*yKz%zZ#8XiotC&%aOMIqux9MjS5s`F+|M+P}#<=t-^pISfh74;F ze8@q^;)lTh6zR5jCsLC%-->@6)wurYDcm6{P0W}G(3_~;W2%{Hkr9@Bw;Y%4`)L8r zaD$Yn^T3~o3{!KPDRf>xL?QvE28M0a-MX6Hzf7fM_;;EMXf4X}k)e|q+O!Afu}M5{ zkt!FJNFv#VuQ|&|Vzn_k0W6po1cQ`G1T0u6Bk-LuwCkX%x3uf2{bflEd%gTOxH_nW zww}Dc_Lo47ZdL!H2bb0ZoTxERU20eHlJS_;B+~7(K~CxvYBe%GAOL#(t7yp$2Mc$9g8;DtrT% zsivk1ia0izSIpp-0+4mPTeil*3F67BQua1Zt6g?WAg!5lc1@D zJsl1HBW)R0r7Mg*bpkXmvZdNRQogK`6M;4T2*ZN&hf>8%bd*)Q%RigH%1gfAU#(hW zto7PpF{%`%WC>*bDWR;=E$wA0>tJ}};79WyuJ^5YIQnz1+E=l7>T{}$VHivk5!^T1 zjT&Us+Hz%6x+gEqp#$P$qD(gvWRiS1<3;+4$Qhe|&qV`ln-BsOLE0d?2{t>|kfet=0F0;vH zQSCw&V;DFwCEvwh@WV$sEOa96N_a!zI433yL33=qGl6Gv6t5uk?(Dhq_ zBg}TddJX(mHZd6*bOw;Oc71XC{8;L|$jcE+%6-a5csU z_gstzo0&3cT&~mzc;ghqRo6FYN7iCH=nNxkH!_||S=Y=SiP+)9w{adJnUH89qcP5K zXWwU3BGETVKelCxmyDe%JPwjDU|e^ZM(g8Y`wm3O)83FjBK>L}O-XNSwlsXJ0c%dF zMPNAmCj=Xknoa1fi;v#_z=+MU=YRhX2}-_XTk>)J1#K;oPZ~%`aVjsKSxwJhdI+EI z?}icbq-vMEm6%8?U}0EA;>$W{sKuPJHfn3QCvCor5sQ4==r2+Qsi<*{c$t5th!<5b zrlm!}ZZE7#nfuwj1i+C_86@_D3)_>BM--Vv;EMV9<`dO0+L1(^EdhPb!8whL;HuAL zZ1=+W_UH9T$-8Lp;hdRxfc^!8Sfd@bI~dg=vEeo%rGjzX-R9@1c<{*L6vNDWRuV)8 zaP4utVUbt-SiCNvB(l#(z;TgZld zI^wtSR{Xv3-q@IHlvb&h-PJm6{X6krQJsV;Vypuy#X|Y;lB((IXpyG$Jzgaa-Tg-a zl5&`Rxx(n(f10z~TJ!h+L*P-al2opeY=xuz*db+AR9Z20f{3qJl&osxFKg%!L7K=D zr%r0gjPT3n&N$p#Vl9IkueVBOfrJ&?@7npe!EkB&-T_mffrQ$dP- zyY)*Fe2|oQZ;nBn?=qQ|yAfkD{ZN{1g$ilmdyHii!je$pyP@WV#z6fmrj5EZzoil2cNdqTK%Dm4!v zek9hp`Y)sP$7_qr`k9U6%?)6saz$urNLr2l+x-h&P#g3G=@St&q@A6)BZEDh!x7C% z9j6@))ic+`&@yVX3@Uf$j;z#Xrm%>2dOZ#PcMjX7Ds`1>0|!;8dqtBs}!cE-4<7 z;?9+V<~9}qhY6*IUjC;g<^TpqI_56PJ1KqEa!G24{-V_zlQjHr(1iTrB`ziM<$FYG zgE}sr!D;Y20jppOS(@jfs<xvo_Z60n_gr*SXDr^1Q-fD+Q1rMw#Xg*T3vn@yJ z{-u#H%%_KYb5|jYn0HEUWfDZzamo0Q@c9pIZ-7X-ZPw2WL@9`~4qZXCKmalbHD4uO-N~#-li0QAOQ}2E$MG1C$Hal? zD@BXWO;*M`ka&1EZ&tHLU^G`a$01e9eA%ykL$<1@j^{9qaw(;ZV5QiIWhyg{7^Y;2 zUmqWFDJ)T_oQYyF9Mj`*?2LIyF84}V;`!emePEgE&1qztfl7j9->3sWix_S&wI(q3 zyvv(wouS!Nqb92|jQPNyLf1febq2-%8j^l<5XK)lk}Eg(<7aY)c(FgSPh&7Q%xVQG zj5Fd}e{YDZoDg{2_awuJL4C31D2Z3DYvtnM(f2C_kFVdUZwebTD=#S)zc3j6+i8f( z%6~yQ@CW;^eHi`da8DxxZWM9!^q!Jrgxq7m?dJX=kw;+k{8MtbLy71iN%)5YmWd_! z#lu~_;0WHU;oV_{-mrIHOoIu(icix@ZA<&9LUm>IcH}HTIP726_zY2R7W!%vJlbun`WB*FGuwTy<*Hw#~giX+&nw?AjDPf zhj(1m&@fF=3bMSRY;NEX`Xmwy$?_`s0}SvLXRPqD zmt5=09mD=rbngqh;8Iz0`;ZKmeoTWS$!qn`@2!2i;kU|584+tiOKWm?RAjUNkVaO; z03G0vXV(5df=B#oPFiFIcXYCZd#qybrQ6t>J2|hwM{XV@Ec1Gl!v(ldcFj-_)c2GW zGiaOm9gKzQ&nyd0iy8nDYr`Lta;|1G0AavzHQFukCBb1C#wQoVJM1YS5A>%4RB0*i6~VrUJ_OkFtz04!d=Vr1iNApt z8l#UiB1Qwk<)ee%;6=NZqzZ4AC-{w4s7V;hsfYyflf=k-t>6*2!gIb_yB!wn2BLGl ziH0QIly)?>2|o^^{v@&Ar874^Y+`_#C@E@6UT8pHEr$FW{+l&NOFoDMo5&tWv+BsI zl~(bdz|@{-kNqDQcS1=DGI(7Z@ogS5b6WI4!JwW^IX2ONlUV5~J56C9V2er5Z+S}8 z{9BtbAiGhlt1b0!XxLxCx|NP_L2mGjM_+PANXZlysK?d?8#?`J=Ojrm6(_JSrl7i9VIh#7~u(O~jJiAbQ3wXof{Q+KKJmD8Kf z_|0vyX0;pCJ)}Wayv0sY(j}>1ayw0dkY;uPPcPbt30aQeo!%}_8bNYs=_LE2H@(CN zkO5p$b2!c4$}4Iq5y3yKsQ|#H>|{SAG#vjhE^+_m%15qF?&!Sm&Kj;1e%*hoUX4+i zetK}S4VJa2aEHMvJBJ#o?{fD_R_QIn>7Yq{KIqp+l$+||p>Y@S1F{Bb?oByjP?c6A zONtcM9Ryy4aBr+8qH7MA@v3AH1`2N_8HsFZmg(gx>Dp&l2)9 zWsNV<8(^B)XZ;>Mz0V>bLuhV+LvKtJIS!NJCA+U1X}@;nZ$=OtrG0z#%(-Hxagwz{ z_1g2Z-WKaYha=~ze)4!|!axRFq39~q&o!!y)o6wW*m|%RljKHBr|iJ$ZkI>3FmgGg z@sreniR@Gae%Wj3m9T271RSb$++^(CWzZmfN(^|gQK)T5Rje$~i_K%sKXB`XhPOX4 zNoxCRZ?8DvrVQ|PoaQS=6@2ysRC2&qY)C18pjUBJOK@Kml~(q>AI$&$%k!`v`;W0& z;UGDm38;`|?_k-TQww>r}EC<=5EGHHHi+K7F zTZ*U5TI;XOOgSW!k;oul4vCK2R=4i^dF;p9A@=-P7rcq^c`=Tk$Vz;2@ZRw7gOHmb z5W$yh&sB(FG?2PB>6Iga`IEkkwcMBWT`K@m2b!V|i4fyJL;v1bqQUbGIoGF0i9%HJrt%CW-l) z3sisRq*Nsp840P7WM3pm|5X*lYONBni9y*5o zTafU2?I9|*z~5ASdA)uC{smd_6IFW`a33gm>?W0P2nYi{Vpf4w1THR?;{?oddiAKzy zC24Vxb8UP2_?G49B&Hy(2U%p--wZqEI{>TGhx-OP&%eTP)4gHr0oRq%emy{)>|~nj zORpf#bF0^3XJXiNv*Kd8c~?UhQU9^!!^Y(cE^S$a7J=2X}k50z$xZ)n5+9Z6deCG~DW;FNp*~32JI+4)Dh6G+ptyLuGE|6{g&* zV}r^Db?vBw9Ih~&J{j`W3o_VSdUU|688lsCJc6X%BS6JXiL`bhLy%!8Gg!%Hp0xEL$haJ--B?3&m%B)} zjtBYwgQuHJ*%50EaFIF;daQVo&Vh1nG`*gm4d-r13Lf^UdsGn=w)saUU$XYJ42#Rc1inwJzp@e-l3VmEW8tNc)$YOa3xPxWea|drYo|+x`BmQfRXaEuWgWju}yj zHh7u=&cx?$6e}VO%cy*hANha#-eWc+;X!L-s{ti$+S~a%`x7kxZhUs?dnm!pd^|0! zL?;Al`)pn0^0KZs9PZZl``|k>T-a`Ah9{2`4Sn3fy-TfDfXt4&yzfncDZ~xNoG;U> zTBaH89qb0%l-j)plWrE9j#I`R2JI{~%+46;Ntj?%RMFQdNSA&-*=i_?7QzL}gi1Q| zN7?lvg|zcCW5XRY0BNXHaFOPhBr-cp`36wCoC!_@E@4c?mFuFI$grIRMdcmH@64PI zKs=d^4ICxp0CrIpO31)5GfU@f#!DkRuy%!^%Ad8rWH5$qWH2HP z`Jizafs{DvJVQ=sM1})r2_wH#0TUUcGdv7Rn!rfr3P@@%!NR3G?-lXWk|Acel&vLb zV60sLW`HX?k2+ZkLI2n|l9>)=^iqUqsGWwj2a}`?dn5||3e{E{>LC=VQWXR6(c(<= z)VUec!Eoa+Z6XwH9wwC8EXJq^16P4`(2$zLF$iidYHkcSv>F29F@v)g zaX^pp5L8TA3r-^<3KFLQv37S8TPPQshcd$)=<-NJ+X4C1Y3Av=q8-3=Z72_vPr1lA zjLZlH&Bp*ud6bbvh%~ShHIr!`@J{i`w1}7yP=pE96^BxXYC2JeLBv5oM%5HmS_cpT zB23fXI89p_5y_Nhm|-4fMjK^{q9ZU5V|ols(?2@Ylb}Tz7Fnbl<(n0ui;Rjuc}97} zVPvX&s;@Q6@*+_M0FRniKY&G{99H-g9s1uTm?NP_yWcR4n%IIWJ!>nHti;D`D;NYA zi-h9tZjtd=ATW<0Nfiu*D~ACIzl;XVt=~y8W}UU{1!Ub(m;>0S>MEYSzq=kiynA~2 zeyZ+Mpai3cefOt|``vK_aZV)`MyPmI2jmz%u2vl>%F?~S^XqxZ|6%OtmH*p5xYqxl zmIyzj`u}eTfU1ZgTsdH2L+}}6KgF|0M0ed-SNNZk*$Y_sUx)tZUOt?vPJH%jx~{^J zaZS+Ok@4iCc7R21-RGBg9UpRJ?3LMj_OMsx*~5jtyK%_5D{;r@uB!<6HC6Z7abaDu z@~(oG|L;Y>!n(}xGn>hlI|}%^WJQ2Q-(5&XujuIiN+kTRmjAKA?}l#Se{Sxy`Y!IQ z@&9ec@Uy!Qy>MjglZ<<~@U5ltu8}Qw!PA0<0Lv@r4`UuOzT`}5-4r{9S4G;Q8QcQH z&-DDFtA*H!N$Xr&x{?8XqBz@^ikL~I{~Qx%rd_B^QBmbM9K7s}bi<;M?0rtZ*B{5Fk_S8+ zUI4$zc}Bogb?SKs+s7%~Ipsj?<~|CJgwEpu-mmqVfyM;<9S^?uD4v&cW+S-8_9YIw ze@N&-$smg~p@uF1`4d_)Ff9tM+8KH+T~c-c{n4%?>tz$d8l%qIFTb`fImeZ0ZP9_h z_(C4k_Ge%2=5}V^?x4yHW@cujmWgOuJXq)>n)F!w-gdI_ez+I$MYgg>9J|z@4AQ0v zVc93bV9RKUl0f26G{lUSG#>yYfG*!BpdDBP(Eth%eAwg&&FmyFUmhgBgJ`O-!+%;m zri-$hvit8hny(%BspS{4$J>uS&XS6WL8iael`VG4=3!8*K`k>~u5<3S^4_1NKrae? zVPPyub)tE%Tg0_r50cm!5&Xv9FEX@=RaOlQ1dwcmu}|=qm98fP2%9ivty{Dz=?9FJ zKB+~as?uRxSa2G3G8AY*1WZ#7OID{xqwny;PGQiZ$!)~~2G2N*l(%;fhpCl-hVAjr5b~>p2jD_t; z8M@Q2osR$zAWkSA0(fvCB#(XoUSX(7iSlrX&kkRK^q}|yBT>rP8)jq)F3{Ge;M0X) zv#9}^%^<($!C5iD((egeOLbyvf0|18)9%2AuUz1Lb`{6;oqs)*N`$W*E?T=(JgWXxMiBZPmCwmHl(=L!NeHGw6r&`@9f zcXTGD*NtaIrb?#3+e}l+dQHUnW5d5naWKNxB!FiPz_aZcNF{%@+Q^E3gg{WZSTr{X zuAx)DsKwbZfS?;a<2fXNCB+^34WX$*4)%#|`=PQabbcS9Q~_ji7wFj)=@yv5pQCfK zAWV)*M>L!hw^G3&H1Xz+|wS=zhk7k7OhI<*=|=};UJr0Z!FbJBnJgtse~wG z1P}}YUfN!YpsDgvN-4^|Z6}MzApg&0IpJnL#^Br0!=vm8+%su^$iYtOf#YoocDh|C?sWiYos;?Hv5U*ep10w^ud`v0*nL!T-sT~ZKH)se9~-iQz>4&gkFNrwkZd4Hez zlc7Z~mZ|zz+d+*t?*Kwa00DZUPUX-?yG>!d^;oJ>aN*!_OV*#O7x=2sAjKP8VqPek z_R@t;UuYfmb|Q0qsjn;3xmwc zvPHU~jLFntuab)UwKc4OPViJX1=(gMhL+n*5Td3fl9I04u0~Be)T63pN=IX+Mhb)J z8Jd}D-A(A!XeqeiCTavQ-2oa^w1_I5ZW7cqt=Q1Gg9g;8YlubDDvxQK3G}PNkYHm8 z+^ZDMDiAWH^huA&j8DRHLH^9qR6vDx^mS+JZ?6oTFGsy=0ci&{!8nF|+kmBi1NnXc zx_0f2q>RMZ@6*by!2NJj+R=!)^XE`~rQ}P?Jj5~lek?b~Su!OaE5F+eQreIcEQ0CQS_Z-u z&R#iG?zflDq*0{M%KXX4<>#aRK|)zMqPM@pZ$qMSJOgCsd+UmC3ynjs`T_q^V7{{t z_IzHDs1YXao&#Qj$VWO`Jd&s;W<`|e2E#76YzO#vM`=P8rIV?oec4G=ZJ(f+@f_8t z+rs=FLf`JHew`LIFY23F_<;zVGDehnKZR3DaW8pal^OfHQ@*m73cO#%3lSV`UU`?| zH|$Hb8TwDm{7JIIawEIXoA$&vp`647K>{Y3oN*%f;GuUnrk!KHT%figch4djH)Z9Q z&FzhdpPl|SfX!=4F2~>sp~+)yNS7e0(^}6)63^0mM-k=zR@8txRxv*`RX2=y9Q=;l z5${FS`nu6i@Fh_FO&9|)QN%y1NQ&ZIDtO`aT#BMIQNPnY6RxtHWo+A7s$+2w=g^PK z=3hPzWVy3e+&48Kiy4cU-(lRxy^Y|=Lut~xUl#^H*PP4|pR@%(-oLuwu!O&cwxnpB zhy0=YE5b_U(bu3-RM<|FRCwH!`O}4BU&No0s)b`$BpD)x`W$}oPkIWHOz^0W@AFY| z!nhkdA>9ks#29R#8b$xQNX!+h5J{0d(-BXA0f|~fY$vGcby#;dHPN)gLnP>Ah9-pZj0w99JS`(vN-z{^XX@<$8g z<}4yv);X!MIBgh8tq83bZmN7A&ek2ea<3ts!kD?(JMV1#I$~Nn?-{oEw@5cdf$6~g zC^iapAafCkTbSuIpajF0M68WVhLe8d=V_oLGg8qsBD5w`t`>S*gR_3fREC`k{p-mJ zFpM^JcxMKOBqzUTdaoMg91cth#~JgbX(7WAI3zd{VK);tZ1ESNN@cDcR&KO3@L(Nt zePNP!S%UKQHIp7!rtI{X;b$3fx*~x*g`J7;d$TnI_Nq=@Y$i!JoY3Q@ZSiD}>hZ)f zky5KzUn2!e-T5g1XDo!PsA^Y}n|x#OYZcAWbzyUoyd)o%WSYv}m*AO4OJ#o`H6lur zbj{YbJ}B5GY`;0Ki4;7Y5~4GJDpCISIYPI+BDIfZ4RWil`dKlu#va5`(T^HR$bA>O z&rSVvm?aD*@J{mu5mP^e{ezn>RP6OLt_KH|L${1flQvCP_!eE7CiVwqfoCUv6DAuo zWj}Qi-8Q|*c%nKk{9JrGFM_xlnUE7zxF`$=;J*wMVj=;DtZ+`9TN!OMq|$V2%71J9 zJ*LM+Gd$?7rO)xxCy0P*SD}O?B=YhwIxh0>ZNtHLKwzf7mb$Z4BA0t6LBunJDF1$v z+TPr^!vr9Aq=EyZy_bc@{CD^YY>10wWH9XZ+(z{!L3W$2JSTR*ZRVCK2@-Zx*ax_Aat*ljYXp)s#rf*g`S-{te{pJ2N1GE%mTs-Y-4hCJx3%;o z);Ro+u&=;>FNaMhnch-^>H7x$AoTBpEb_8;T4&hmIiEq>8YDr7?!J7z6qluYetxW1 zt~<@T%8G&_d+4%9z`1iE*{|P1!j&9y7wz_oc95^3;tW7f zJXzeB_#UZ>NW_7AQcfd@$F`jLe}C*&t3J7<=#a*E*+h!l-j_MCv==u1rPIu$4$^sW zUP-To?wBlWSdLGxj?8qbkYV7mU(wd-ZIVpAw1w2Wc8Wjh<6?Z&Jki}s(9TCS(rnKG zBHzARW-6aJDyB*I;<9I?`&qzDrq2(cUtaBK1wEL*V@N z``rN{a!!j5xiU&EXt-wUhxaoQG#EMp{Xs2Fz^8-ZcoNeu3_1W;zI8;VDiaR-3F<$iwFs+S|~7nB?UpAFn)S-HU?HNVfu%#z49 zgYoj|OBdr8x!T7fV08Ld8AG{lRBOZK4Eqb(#akurJTD{YYu|ZW&}^q~L%nhDr6oFc zOo{cmCGA+sdHoOB6O?9yTK3~dB?;odktJrey~)a={6rnIN~C?;|C0t4;5A0tYxWs&3lmjhpt> zFMevp1ysAlXsFwm@}ERG4*Y*_%uY6 z>mTPvEXMUI`oeZ7u+6?lmV zpe@@Vx9bjz^JZU19#C$`F&NDsSO~C3QJK|sSJ|meDz^VK=ZW|8Rw}r8Qc>kA_S(Qd z}ZeYYqL=V?oF~j>m5xkt6sFWVu^fy zW@W+1<%kSMMibcLuEa{Kmr1cA4CH>ScAXA6}tgqO_ z4U7jlrL`v4#$AZJYNLlgFo3yKh(CEG)C_5xQ-D zqg;tFb!w)eA~)tG7X-do5qofc0U^}-m#7sQxW_vyTj?~V@LfnXF{DTZ);=4~ssh&h zN}p}eFM+>1qv7f+VxRA;Fu9s?Pg7{0*$`dsAr@#UpBV4GqcJgyBl&gOw)*Sw02jZ`dz1 zkIEJv+cY|Ts-QIxNwlv}0w6n@^u68X^kav)Z&?bAZk}jWuxn+SODTwF9jm8>k{EhM zv-8F(Ib7L8WJa@%sUH3o2HR z{K=kj-Pc4IUZI3ZY_%7AlONZuv~5rGEuXVEdCn!B4-RQJ#5g6ZGT&TEqv;J104AJhUQbZIeo$V0|^@;0}vJ0&&z`cuD<- zq0(ojoof9_2fI3Wb(pa$%I43ZZpW_dCIY+i&Q#Z>uVPgT+Xa=i0ov{TqZMIwnKxGc z{F9uaHV@^Fc3-;D5InAbGqvDpobA5Pm2UZpAi_g1-%p&@`SL{Z*>ysMZAzM@J=-aNEAo=;$^j(UFl ztz0zWeeH|DB)JD<=4Au;bp*)L0^V-oeh~-Fpog4vER?Wcj*O{irK;iBI>X0}r$1*>S&;*_9 z1KOvi*DH6+KJ%Feu!@C%FrB*OKW&;!nka`(Ce=&W-GUe|nG3d^m9+_J)@+EgI3LAq)(GZqFziU2Jv(Tp z3cm<@z0g?sFN|{F$c={@Wp{4z!DlfeN!8WN^PVM8%`}|Two{dh`RnRFKICDb?4?f7 z=E^MC6?N5IWZ#_AWo0V$S~-+wDC(^WJmsX--dKO-zgPEz$aG#4Sr%4ra1IXF7h3Bg-^{euS7P}Isqx02VV4^e-Nop62i+biY zGl1Z%iHGE2bZSD1ud&kHEq6ty2Oot+2b>jmUkgU53f;4X{f&F}-)k1762Y{&b|>;0 z%{SVwI#o(DRI#J!U%?oSiq% zti1MQ<4JyemY(VV`!xmOaq-Eg!t9t#x87rCpfT5fdn58hiMz|Hir_W|g{-ejr3aN0 z3xP5qAm0e49|AZ3Cpnna;~D-Sa4+87ebFPKYOvJ(l^nazhnSp{ki-|IR|e%I+?~DO z_m*LkC@>-AY{~b1#EbL6UdF$<6W6RtM98dAGJD0>&JTVtbbLCa_JzVoALBno(rPpE z6Hu!~n|OrAuGoRo(|d9J%mpVU_FDC98Nl;grH18F{6CvV^7m)x5r^IDpV77-k(%=4 z_k{dannyG{+9CWzsp_D<(5z|HeV>uU%xJ(*e$Qi4M!v|c{1k6P`}g+3h9emf0`+R5 zNsf+^Pbk@e6MOP2!J1Oe@~%tr>mHMT<%1e7=Y(q&OP~EB`HvSHFVfDRMT1P+xQ^B< zV8)RVnMPQKvmOvYHwbyK#LV;*E*gLPVp8MJGOqSugB$D&rME3pg)6TNiQ2l)zQ+PJ zndq)B^ZHb%_N<#;xN)d-?x=Tdk=S;%YQCw6>@ptJdKDv~$lcmRv}G%ej9ByJSpBOu zWR)WgjSIaxe~h+VT2r6B=kaBK#uTD)d>~YsxRg@h@r}yur)lBE2$?_)k#8FsP2pA| z_Fn2vi@j06zsZm-E#1X;t064j`##=F_FGHIBmA+zO>K(~*NfXn zr-S-Os`QJk74=PJVxyTq1U;iHTua`m)SLIL8i+=kZ& ze)~T#H|&B8&D(+RKmDv{=AYG91!Vg_(*GU{_FDZYQxQ_=3H(skqQG|jw_NLqaC^Pu z@oS&I;NLy*O3%k_9RA#K3~!lKZaQBZL@d4k$o|@ubh71_NDhZz=n^+0 zu}Y;yW|MHdg`&jz31|gZ79y=8`lRHkDOnMLFE<%~!CqXqM`Vo0yMXAw1}o=dyh66m zf~8eFS50^)BA(EcGa6NtjRvLOXj0$y@{eTU-37Dyn@z7Gai_FyB%=A^vY(RkX2M>4 z=X)K}DL>*8D!tM>!>6WkICu^C^Pg#ajdk9rcca&?YEak98JQuzO7vv^ADx}A8A~5* z1vuV%!!fG*{s%D%j4u2j8^{;8@><6knULrmVLFScLsU>)TKN5U-?;UgM;0_nBuUV?Dl%_SttNFBzGzlRd^W~HMgu=&k`>(G7$;!EI8-eRv~kbPf0r^0CJb>&5v@^ZQTjDu?t z|G1H+&L)V!>x$~b{QCz_VFBfuY(#FCN1XUtad8SLJ#&xnnPy8Iag9!sK>@SKMAz)r zJ5rSI&K>-n0i`_WrhWUFSeid_Nl+>!V)a(BCG1rpO|wRiZ0=oxNQ?U~ge#244uIhX zlm$|Q0yFuUVM*7<3}|{{Vn#plWFtnNofYAoO%qhhkjdOtw*DTq)8C$ZK}OTh-7Noz zw;TV;oocug{CU3u`s#3xxGemW2A2$FJSgub7F~EygFA8ryiFt!;d(pmh@*ShU#1^L zRhHh}zSF|(Dgq`sQ(cc?|4=OAe&s9PIMA|p{uC8ewU&Dsb-9zi^dAfRn_}UQ?k_q| z-~C+i`XulAxu7KW0BSQMTcG4KTi+%4Q@|LM>@7{0T;KG&haX_MBkE57r}e!rLNJg; zvTrMzj(qrXfq;XYyvtnCXyb2k*Qg?6z2>M`mR$$q1D!3GN)RV-s>;xHo}}sP6Yo!j zQwHbGO1*vy-I|8$FXAhk2CAFGt8+Ex#GqA!kCyW3=2)wq3(HQRj%G4#x9lEypw&*xqAG@7zhi-#OYHc@x=;jIny5 zE99S9N?&ownQNPPiPm4BUP}ed2$id!dT$n&mzo-v{YHki$Lz_ci(kqIeW?)_*Pnav zwDZ%1&Vq}rn|pt_AbabsQ?3i!9ynLCrP1VPk#I})H9fj5j+-b zw8-b`L&(R611#-LS;R7J?tHa6SR2!h&puAUSz9p zznwiCfHB>XDVtjPl{d#Mosd)wb3tR@!*I#@OnkKMzA}_MS2x06H`^wT=>Xz=h3tnn zPD9WNY^dH#qUB9*-Kyn~Q<8WKQd^Go5mU*8{)TH&tf%N(I1j0zHWB`NU!9z^T|J#O zkdgI%0x`>3)CV8E3dx`syISUy^8G)fOM;{}5I5?Ya`ntay8RNt|JCL_zjc8<>VLXu z@9nHRN{3%1+b78<_X{?u9%z)uS7I}Ob(;yDlP zGToU@-nze3yFp_eSC`&&`!S9s60+EmEv1n-)bS^0%M*j+;ejoN?VJk|To@9PDbr4r;g7(bns2~33_AP`*nw(a zu}{&(je2j?XwRe2_V#%j@7EXi9PpL-x>~3LOL*y&UGs=52$tb-6ht2gCGnzFV_0c3 zahDIYeZLMeVo=bzE*HXtmjuGiK2NH}C^{a$5`5ZVYC-On@h{SPbM(R)hw7uH0`t?m zJtsb0e=QqGAygJ1^K;;VyU>N3fGoyJ8K-=F{{uUxsb?@lQgqP@k;8=z!Gu?6yodNvlo4-bLy`L zjrZl~^4TSGyyl2`QCuG%If&Aju!wQt$i1L;c(T!G|3#;WOy$wvS{Y;q>Rln6$M}k6 zpI=^%1HRX9yeITdURs}~_+;eq{j6jfz=c&iK0_KB+$ru~^w;UlDw!1J>qo*okOplW zM&N16^oh`Y=Q3keT;iuM2UX@C5^sF@$fwP5(!(M9`$IYM5s{jw@ooIe^$DX(Z|<@( zQy`L?hp}`@Ux>WT_KQ139R>Y^gZdI?8l4#XD>56mYuvc$&ve2iQLDFKFJ6xF!){8g z+=CzyI&a&`^{T(e{g;Z(;T`vYhLG5uRYc!&kL>n2@-vOtD8KqOU6lo_3K;!{zyCF^ z=XY@}MZX;T*KsyW!c5Sg#q8~zSQRZy*n}ARTsoHEliouBb3ct1sj*0w#B*}xBj1GL z6VQf4$ctI#UAzc>{CTFF^@-181}Ez7Xfe&!4Jy`it!R>t>-@R@i=m_|Q*@ZuIDDd@QpfnGaN4 zUU|pKm&kBFHj4f=8Sf7-#~5L{v8RV z&Y(=X15&i0$84VygLqLd^6kCX?DCn&oYzFa%DG&-sBPyd3C3AqLK()A(mC<697-&%=xlBZIhJ6yFO0bHGhFw** zA*nv~%6F)9EEBntJ(E2G`v#tdq%0%++)h#=_=qVq>TD=QTXV9HB}{P`Qo?FAvNi!+ zSt54q;>decZo4W@L?umBD8Keguq>VRDI`@?l0ssmC6t0MgzZ?x@pnPR(+^#*Kk7t0 zMa=(B!3JCsaR~6S?^)}6@N_kD=7#SO%=4Z$$m-h}SbwzaryXZ*NRx&bMA~&(Hm?0h z^jViRWYeaDJf#~RFlaeh&04hYpJMwEwP28(|CtzA1Jd~V_ZG6)bEf!fuwB{svms-u z*C#!SX28O4m#nf!JNu)&^fN>U@w-T>=8$Yi{v}|{FmzWIR#X@{BDG9Q5!bEg~WQ?|rG5b3Y)bX8X z*P6DCl!)CCgl-530ftQB$vAW4hlIk3YRoU;f_)?(@Ly^)MC^U+i+aDAOSd&PCR>_v$g&c_u9gRFK7i10ha&5}U@; zEv>fOHwr(ZdRk?NJKe+lFGQ!$^>ys0{XD$!+4hfK{UQc=HReU}U!r2y!JC?}2kv2E zs_aS8XW;I}+0~~v4GY0R-_Dm((y;Vd)iPNVhHt8v^Ig|HVa z&MeI^Zpb-)kd*dVx^-YMCj&VZaqnmD<}=Eu999>K$@NFjTBYhpexMSRW0f_jw!!olYY1k>`S@ zp^?_t*rQE&BsoY7b_QvB)Iat|Ht5Vsj7T+Ij(EW9k2 zf}@QG#$;?mEO_xPo^X}o`iIJ2Yc5bc4@K55@`%|rZymEpc{Ilu(zK6805?b_;EJtD z@FD}}h#SVKPi65{?c0P;TyO$`Q8yCJ<2@Uk3qrMtU?WxG#==)Wk$58`C#BI;tuiJ) z=POgk2iL61F;rFL6VJhHGfg2d9gvTB^dHU@QymlMS@^?UxLIni?OvnUZ-Y)X=wGX? z1bFmFwa?qErKlXntyd(w+>F--qL}05L#S=kPqdWBFUYOz80966`l-1$TqJq@KB!tR z0&Ia;m=57l^r+eP_UfLAg^cA>{{;LJv!;y!8rn#Z;stSo#8%}&J%g()9@JRKTgHvX zhIh~xVlXR+fcB>BnGcIeGgM6zFik$5FsPC#iK-H$hN&tlsw#@6nTk!83>c(osws*B zW{Qfcp%e-#s;VZcs;a7@DXOJ*V<$)`(1IZ-d?b{kgs6orrUQk9hLP0hV48_SAi{om zYAs5U{Dk2<9e0Q9yQ%)$5_5l#)qcW_LQf3Pr0g#h;t@gh&e z4FeVQ$Aufnzaz#tRCR-%@A589)>UDFC&Rx}PM(|$XwVYRP>~?1w8*?~Os0+8u9y`N z1D#4X6;@l=I5gzNW0}plzl!GTVsF&Yt2$Th#h^8I~Q$ z{46`gl~0ViQHT-y-jzxhqrbm{?(j z+j}-(Rwa*@rWz4oEE>qlC-=SYyy~4}f!OX^O&agdLrKa&ZV>|qdGM_h0^H9joLqu) zaA##+W#OADlI^B*N=u@7WLs8G74hm{y-nMtELC1ley2CRE%iS|8EO{TaAAcXMX4`>KxF@%@4r124kL1CSo+Y zBUQ>$A)VX!41qi5){ zw%WzOyEGXBjtp_KY$>Uyyu!;)(049y2jS`ANcrjt-x5-5evm3(DIXqTQc? z3H(cMs<0T)AMAmU5 z2s56qBc6z(A=N>%jTHlh7lt0V(Bp+Su1Yf$#$7P+$4OT540Ck&^GxZZNOKmQF1O)4 z5)wQH7G--muQ?}ZajA!xI1IS`YGU4zsJQWVPUL~HSB1|;x|DvmUV;_~>cdhsuLqcr|@!<~(I#4!uP0Tue=n z@)&6i7&0ErUw<^Fgz#!N>P`I&2R54?-zc0DYshe^I1 z7j78o29u7=x@fLp_&o-l)1$JMuiL zV4tqv3))X_{0FjR#lJH*hHyPr_8Xb~gJMq95$0Le4KZr-EPk~nQqtMsQpMaBt-zyN zv3nR?23mLdXj4u%gOUs=`kAQ++>{3$uEo>$ZR%yD&)M8rA~uxcCw=o1Ww+?gbY4-XFvHnLWZRl1dqJbuDL=L^6Pya;Gf zT3ROI`|2Z>bTm=h6G&9x%zm3zEmVD9C4+77GF_LS$+0T~%4#KsABe9|~9aD7l_gC_t|K>GEn&J24i4eHN;x~Ih_mO1##QMvHodJwh+9j5FD;})S z=l^h$;0X=dn2K^*STx}AAir0hp!~!MO2GJ33D;<}1`g{rWn|Hh;_Z&_9!=CooC07B ztu21>J)z(;e;~}ytCjLF;c{9H4vlrf&z0_M(z^KCGID*;n8aWC)^5+Qu0Hy;RfTR( z#e!f;+)<_kZ-2tC)~y}#_k>X*CIPrMdlDR@4*wij`pescQ`ewW;f~;!%I_0(>2gxX z?TG((*w}GXgUng5j-%-JJAYS(M!^tLDR z?!kjF@x4$v_;Cls{osF?)a_!_X!Le040ufsclWC)GI`kVCKo8$d~Ri2AhZfUq3JM* zggW#Tjp@$zH`~i^Zo6;kb@GsY-!oY`>fnFBcQ9Kz<LS?l85bU#MKFNDA5KCa!6h7#@!avS%6< zk95(cZyK`N2L%pXhnw4$Fuyhp)W7Go}U+x=!`?QHfPrG%<6$t0M5 zdD_~)NkRGJ;xtrqvl{acE{6bG_l zF(jlKQlVyFhVeEAP5PeDMdemRRi6^4n~j(sDgtCp&|w_ zj0h4d37{@#4fiGF|EP!SYND$RSG}a|WeqXf9?1-p#s^(V`hJpYsYong&Ktb;Wyp$1 z9oVVDm)?z6@Y>&1ha0x9-MlZu2*)hk*}i7{I672EjTPb#bn1()306JsJn;n^pB(R# zC7r}$6hlR*_i|CH_H0V6G0f?fkv#H>to7?O!^9ntHU-98(YAo zAMhU;laDy(20io}TQx>yN7{S2xyyUnrk526=B~u#);jf+h}XLhSAv0Ys76J!MBys4 zMco$>Nt1{n_F-|rhG3o;TlblIK+%|oS4b1zP2(Db;r_Y6P}=KJ!q%|e5SCo^)r65q z3WZ^Srx8cfzMoRAXiCc}vy?Xa34dSGfntQ9iu|A9$#1O5#6@T!r47Svvhn&}5P0kB z&~rXH+#uFG9vU9T{l$8C81J4ju-x{9+7?7hHxwwRzPRrS>py&UAI*Yt66eb?J3Mv7 zJp)o{S^P|qEv&$lDuBY@-9Wb%XjTbFju3(A{{)N&;#8#?f6itN3(H79rthf+3Gbx0 zcCd~;-N7Ji8wM>EcBzdkj-4p)qBHh>=jT0H!udZH$?4*Hf4R*&h==2l6vPc9Mi3*A z9g-B%bR<&=2i96JFpK~wkbsb4mWp%GuzQT#-a68=BanVCKYezE27_QRe)c|^{|^h) z&`(&6UN>Msy^FmymH4Z}WQvJ4%bEtUe5^mbfdA)PDE(8WNpH7NzX?Bz_uH8-@GLs@ z&+zReB|5GaElx`HPbeq`%6cm*MZGo%R5L+}xz3v!$aIlovgaRpIKJ*V<5-7*^i9IH zoBnROM*afAFq?asBN59CVdsSyv9RbK0|h6zbJ9jNa&z9Q_%r>J&|plzErL(Ece3ng z=)c%dgw|mq?YYTd(?3-aGYDs;x9PlBnA6k_3GPj5LQn^H#UC~^j|NCGzEu9Gf)h7#@y-` zSRkPLP|Km<=l?2wD~Lakz+A)j9eXqhWN7@2fPKY@BTg!QHDMM&aAgXff>vs1H!gDoQ=20&yCGDFa& zN~C5fxIQ_GE`$fJHL7Gs!yt1AVT7Bx)!fNXB?&s59UQK9^($H3ZHomo!P#MCsuin@ zeMqL;W-=2Y1%xTlI+SPrOo9u%ycYnXxehm|)e?rZ4wbgK71@GTF6tw4Z1TMF?I+^c zkZ8Xz&5F0adGRGjDcL2tjpercpYQ!y#Ydet1`b@X+O64tbm<01YQskwzTotiKXeZv zd(E&Zi608k=krzkH%xCt-)-1-(DOab+12#O(v)+|=SH%^L>@bK{=c0t_q`gt??YlRff8b{tgYIfa+b8(Rrf#S;@&ChJ zId)9GRHnx*21R4FY2aSOM)_&^vvn!kH$?%}ilP9`Vki>OKElE1w21#wAmeYdZWZ}M zp011R1xjKW^t@%{*ex%GQ#SLLi0<-!MA5f%<-M=q^&el9@NcJV8s=Rwv!AvYl?m5brgZ51E7czIfj}wqmAA$pKe}8yM-^qJ1=kcl(5PD8 z;`Y@46<7B~pU6E)QhGMNjhK;6IsduTv#oT3g8*;f`T{LSxsCEwQu+l9NXcrw_`VvF z8k}PBudT+s;9&Mc6TVgk>ps-M`-HDRI8=2Z@LhOAaKLbRoA_fj_si8muW!ut#Wxns z5e1H{1YHMrR|702X7rRDS(K&TAdEjx zjoj51(Sra@Kg`kV7520RBZyG2>#^4@!wH*CzEKmUF#AxDQ9a#+?}f!tGho`_rl_P& zSImn6vl5)^PpH;bOQU%G>8S#S=26U?5(~t4X$yPAR?_>fsNz~X70AbtXIq;RYCp)x zvpy+(WL;>ODhnBh(#eg%r)uBJwORyM3EBQ{sEAQ zk_Hg@;|xhtK)^IGBnW~7wbq8v4KUuzsM+&{FYT(OJC8P-n4WFPGbAQ*L^~4r?u+zSKi!S`H6^B!!7nIxnGku4T zdi~k5m&|#ucS{3R4&D8JQ+d7`cwc%7L8J`jMnCZJY*V{wsYx!QU-plaeRE`?g@Qm~ zSldJ_23`o<;R52Ha*_=oC4vInFVWiQt{?Y!wx>lr2~UO4WVr?j$M2JH>G#9!nzB}nEPu@eG7K#-D9h$117kxVKXC`2YoVIp({=)*H0R?)!wC&vy?urcl2Pdan> z9=>g%eQ!Gp1K;Am#4v?i!1eNzJ&@m=1#_wJTl-5@-P#Zx(2G{~aJ{+OvJ@*lK=D_@ z_siYTvjSYWR6WN86gNP)6_TP4Zbckj z8mf%-_rjpqghtOjaCKdY^}NcxuM(4<07FZZocy)D>yd8vZ}bfTQfa#Md}BHPt-8ba z@^y?I;+9mjOV7mNu{AgJny1GYfhV+67+B9|CN5Ks79K2IH9>@wi#9lQeW4$Pi7~V{ z83Hv9=treFJHj?#C(VSo{)O7)aO>{|(z6e8C$s5+@h6Nn>~NN^V1!QvFrnO=;p}Mt z0@QQTN~cAJXvan1B1}ZMY8*NrnCsgT98Ww+^AZ_YD)lM1nb|omMgP4h{ z$2zFWlS7!d6VhxO-}TVdH4>giM0PC+e_WFY(1swyNw7l+!y=1vDc-?3XpQgsR{a6H zC;7_HHhXa1`*rM|qw(zJzTQ8J-LF{>&31sck(vyu&ETD=f5ClJ7f0)&74r+SxbyXu zB72HQo~S>fdZ+f<4^WX-S0vdVhb;3m5kn~c>n9`7UHd%gse>ktaL=Ks`tWs50$=%q z^Vh{)A9ue)eSJ%5siCSwT=qy#Di+_?sZIs)^&(W42r7#1eR8%%pgjsn)^aM`mu%5v^SZ#k5XRj>%9? zB|55`!|Y6jULx*$9tbKM76hz4R68xzk{^@^f`_*npOxI`9J}OtA5wo>>nsnGCd3dB z6bNb|p&bT2;ep0baR3rx0vyh~a%ew4_2+ZUHU2->$yg{CZ@~F}ZA8X1yp^#38SGUT zmeZqD^2bytdX25sDT)VM_wqZ0@O#mM59Pb&<7=KkDU>FkNBre32N|@m|8@JIZ&sy> zP3{!)A```5t+~;X!CJ;$gHC;rK{3*gnT7HwY~4oZ%&xoRea9q*UvXoTI!iTRo?T_V zv8so7AIz?8tRudy;Xot+kN`{Esk_1*c?fYC9jRL`0~(;l_tOS31Wt@OINi78{@AFA%rcO>S9t?3uh zpuYp$-PAkzW@11dT>R$Xk{X)Wu7ly%Iy1ul$~tupEp?l0PtlL2RoL!9OqT>fpL2qA zpKqEA#EJY5&2tP4+{o&82B^r9I;R~2mDT2sXEUIWP9HXYx2iE|2=c@{9y4X>!>jULYWGbsAQxjK*Io32MHuRGDr!n{&$&zfGja( zH~3$xpF}76L6@B9HLIPfbJcgy<9=QkSnM1fm)1tJx__0<_9!3)xoqaq=_L?$LqkkP z-O@>NOfNn!&o4Il4q(4b_r9y!cBx0i_@5ic{>clpNes@{6wq-s#tbvVa;Vwd<-3aM zq2Tcvi6PDJ?iVL6#NpG8M1`3>zfk&)9==VEFg1xj|4EBZjQ>xJ)4$|-TH+I;abcWV3%c>dN2tiANflP<_kIP|Q1B?nbh zO*wLk^Hw^W4HxD9lHN8pnoQOzEAX56cB~k1(TV5CZ1-1OMunf?^iGrle*LS<`7}xC zg3((McP}=b7K|py@LK;I+>z9N>IS=?>>%;@;V3EdCfE<%lP}Q<_sfix!{!*v#5{RC zPF@&L2ksQ0+^*k{7MvFLPhZziPr||b@GLZHwXVSIgly~Q+;dM_TPaWy%onyr<%FEc zlMgThgfwiB7)FGKhKe`=9AT)_{CC*GaPAk6!f}bpno-}siDBCa!vt>-aiV;RKUfaT zPbYbewruQK9EF-@=au+?H7b@}2JEmXvafGbX&uucpuY13o$}!KTK2SKQ8}k5FP*7Z zCEP5Xcv{AWVe}~H{JVuBhS80^q_=cgjA1{Hx4x_k1P8t1rPDk9wX<{o0?@_ zf*8tO!hyx15SMKAs}CE*l5DQ%bcJEA_>@oWYJ>onRo$S28sT=Qpb+`9e_JF}-%`#; zRgw%GdapJFaVdkt!D(IaL4SU3l5uE%Npo?2;+O8vh6?woEd?hsrLoh}H~kuz9vUor z$r~)-a|SSLhF0q(Q&e5m^Ml5J4l7V{McjC+1}uma@Lc=jKkZ|^@PASqS1YRzWjD0F z$&^^;k^DhOzXVs?rR3NZ827(a*KN=|<>*h;!Pv!%RgQo7aGlVy;zeXPQnVg@qSdTT zn1S0JKbI^OWlN)p+Dt&6+6-atV~<NK6-pk^EAFlZTax)5Y*DJrIU{(%m?t_sJuUQd@dA#l&A$a!UV6VFpjcB62r&ze zV~XY^Rv9J&2csFQ@79X!%Z1`uPlBv1jHgT`J{gc!%|>+%3A-)H11k5FgW!-7B7*ic!6m`!wq4w4H?XgY|cxNN{11dcUagS5BN6oTF}$q z8}!)0;8R>mN9lV!7Z83)0M(jRinA4&Yu$gN=|BXs@8HIL8`Lcc7NY`{Qtn zt5PxN36=S$cG^?q3@!?nSwHBzsYdVqxo?;A zkGUP+yUB@HMCI`55?kxali(J_NoRgR>B$g8i)IQXTKLGo3zoz2KT12q0Sk~9dSpd> zqF}x-66wh;amg%J9TP8%|C{9`!-c3x}5U`5Q zX;B<%{nXoEQ9_Q!w|yg9Un4rfS)8m}O28BJ1zKJkYeuICxdFgdeecg)GkeCE)l}Dy z;fJ3om}Y{;JnDVhgGyJ94OhrA@IQ_TZR-iO7KHteL`e%~>94cr1%m)dW4}cLO;$Br zlL|S&faM_G59$&gxd8Xwv1)Qi=02qc&>T+l071C+m3;vW6KCRC^|N@sKs>mFN7bHN z1%-yC;vIjZ*3_PRDM!5Jma#sihER2rtVFf5&IU(I>9A8Qt=Pm61pl&j43c5iA&Qh~ za!on%U*D@V_wIP09!Gj}kEe8fXYNku%bD@Da$2QP==Sv)= za%2q0tvQWh=T0h7=Ik2qMnm}c8WWYdVvX(iq=L}%3V8AL+=qmVl<4*=deY6EliA-Q zI&^RSjmjL}Z(fURim=6`wt`?8Axm5k;T!Rk{h|g5LtG-p7>B?i6DbC8U~>p~v2SR$ z9rO}sKlN(LeV^mV<{`N?sec5%n(xxBzek(Ay@KJ?I`x$$kspP-@cCx-e*kc3>}CkbWR zK2W4L@yo7hV=PZ>nIK&4g*2f&(IO3JhIyGWkLRkvzAOAd&N%rQE6f^;k)pGasfuxj zhWJQq8BGj=s+|KLZy;C_LY4`l#TcCXV2wFiw&T1}P_kHjXuNJ52rAjGE7t8*`s$9FK|ghNr%Xdp&|$HePx@i@|y zpbL(~9zAPX3lA3}Z8g;9iDxBPGMm z9%wk)kn_g58kQ^*^|sxR{zn70cMo&wh5OxEa@uFxJy_Mlot&&Wvq$kk7O!RoVvQJ&Kt=X$=p zz{GnNa*T+_EEf-&Pt?;8TaXFK|JlBxad$`Rzmt!bt<3&!^@k*CouDCRcga(E9R6rq z=1f7_l^g1v4_4H=f34w=lT#G($YJG12SD4m(KQ%vdC;Dg!G1S9L)4Tnh#0(gZ>$ec z629S1Gq~0g<5*NNzpn^CquiaK+C3$KbhLf9hB2=FvXomy0;DUyt815{xD|qaDNHbi z8uHSknq=S9kEJ~rIj2;H);5%)fK*9haq)j&y*ebdf0n%Ha|wx@N&Xnz=m@tVO=iGJ z06Z{n`2$*H4`+=u$6Nwo1qp>`8d-RG*b~Vu0q?JmmDqqPClVpp z%|Rxoh@IHX)x)po&#d9s=5*$+x7@{4%FyX_5J}7ms_)_ZSKADZ zbqb6^bvjK?n=UirlZw_LhTZ0%KPX^O-xCvUG+R7R7(jW#P-PJO&RJV{uMFkWq85xG zrKN+H@a8*<;%*J55Pk5e{Yf1_tH+7E)96+W)0C0hwOg0!3XR%RjqXW9ID-&@eDRfI zlMPT2u~s*-?rqpmt?PI-@39F4@8f!kj>Eq%jo8^!$Ne*v}(%!p+VMiHzRyeI3 z7Y5lAkrcx^uxX)mAwhm(WYh0(XzqO{wIX>w{i)X;zUQwG`m z;2tq(ll;t0xj`Vu<$2M0;vaEdIG0${#j)1piKG%oOQH);!(zy_B1@PV+w>0DMA&5< z^OBkq|Kx<2*)nSNd$p!Z2e|7Z`I)!rC4#nwyI?zGAz0#uRRVx<_S+nPO}~)MIh#T? zndc+l8J9T{&P^=jPcRNidCz|(K{l**vl)zp9s<4~v#XQa&f0I0?E9x-?uUZA;M!cm z#&Z-xJV2}^!PoElu zscl8k-U@uk&`Ey>W@5#>&K1wA&Xzqb41Y<(#g8TYOYoJ_`wEbHP#k&b!h~T7ycdgp zu?C)VLq^Vo1B>17@^DV_i-vIdvj%}eqH|37;#m^GXSkq||4Bmw6yXrAFH7Qps9X9` z`68T{c{WTZb9Tgzd)!u?pzp(iXVX=tf+O=D<>p&7)$rU2p^^|J>I7*ebBkAyv;Qdg zq<%1g`gOePrYUgyJ@lc`Dq_p#u}#){5nFdoqltWO+4I1$CeYRlY1lbryj7*h-oQo|?>`lDX;do@yq)XGlRQWLpU7((xv|?8y<_-92%oiQh+OoI z&z*nO|6*n2gbjAjbOTKyEGH?A5|3p;c))0p?%$dTbW%bDfRKQGN$+ty@g~s;+2w?%mulwF1#YQ;9 zq2p>W9`a7#OHaZWMFz@Pf2IdidN@{iFHoHcfYtO<22^44eHtkV92aZ=q%KKa5YfLn zG{)T`RN?ota*$WlGT_fc@HIpAl0tV7Aiw;0HCEU&yE}Qu&`KDAo5ggWT>FU?WE6qI z2cS?112`H55{7#~K$6BLm*;+W_*OUmOp4)TWQyE{W!`mAC9`I^t7wbrPsdvE1Dv|^ zFsdEr>)mSjBkk+{N4^WEec^mWa=MDf=_wBw^|p)6@Wx=X``;aRP3C`e8lK**k}X49 z#}l<#XO8g59%P;dtFm}tNP;Vlg9xSPOaa0+V-t2p8wMUfvj-dS#dEMkbHmvjyd?J0 ziW1bIPO3|>+Z~okni*q%|3R$>UgPcwg4#$b)iWC`;OPdy9k*ytDjJV8R+d$LfPvaIn8x5ZNS7UUh zLf66BuAguU4Yu;*pdL&e&b(Zj#$e`ndF3csF8QRTu6+9~iNZ@0oTxll-cv23%M1a7 z3x9*dYH0e*vX>BO6=U~itAu(EkHNX1Uy!t>9p{w%>G1o}ga~OcN!wfJUYn&5CQ9F4W7-Jt#2j{`40wH34pSJq7NtQAS zyIB1ds6yylV1CAZJ$mvVvC_@{hV*9KpoD#k^|7}0tXG4pQ@raSVc4TJ=C}ijC|EIb zGg2$~9~%7hBNLbVAgK@h8e`*W8Et|ty+#PDeehIa3{Yb9kc5Rfrv#6`Jb2oKV;dv2 z$+=>}cwguIEBwBvEonf-@5ru< zwoRt7UztA4j|Be**EzQ5F`V!{1(ciOEzTBF>UL;OM)Qr!DR|y-7m|0!Hb`6|&9dYV z`?-Wz=kKhy%N~3@J3PUYmyyFB{BiV~J2|RKkVAVcDMs~>>MDQRTj_u3=ev!57%zNw zop3d`ec61|^;B7ER2}c}O$lDucz@DyVStYUp%xc`Pu5=W5RHb-3%;RrR&H2Cj86%2 zt3ccJ)v+D!cl^9bUcKEl7QOiJ?flP5NB#B#T#&#rMSr{| zAMswx2qa#Db{NtHA~3@iRDmHWAp$~B`(%$|vEL)|pU81cW|@)e`((7USvavI5}oMj zI^ne;4tp`CR#?C%)bn)}4fg{24LTb7SUp}+9-)D|eP1*ypyPVUF?87iZV;L}%f8)c zdy*k9nP$-Q$02(NbE}27zMJ@7O3MUP3}2Gt4DASmf;+(JgJ8}%;)hI zxvdBNKgZ&}e(e8s6uxGq%{-NBaBwY?lKi8`{(!rgJ|u;kSiJD>~KP>JEXAM`TJ<>HG4OI z!FCKo680^oA7RaCsBN1pn*?yz{qZ``i}nt$HU>T^)2K}SF5&{n<~*M%VGPzWR`ok zrMCuFEzRaVsIlij6Q(A%MksnP>Ub|aGrcn0)c?e(nMn*0w)nP;Ag51N_#OLa7DM+YsmdSiJ!IX zA8A<8hrqC%OwMWe`~LfBq;tc18X97m;t+`x<7KnPyj4QM!}e-|x_PbTG5s&Lcyc&v z!d{$j{`?S&d}|&dHu;0U6E0BFXP=JKf$;npGAbcoCdd8 zTxvw1_(1(nb|m+KT$t84sni||$%U7*CUeD45W#c1#^t$Nxg4u)(?49il?yxN z0Ru2?{75)FTKxuz^c|*N&vt4xgh?Xy#Gcs2He_tiKp1|7j%d71)kC^e3f?k`MEK)W z;>_;YlLVdh@4`uhp7hKn6@8%?M`SR^2xLqM0%G(n1Gf<2;N_P(UXqM%kfO&^@dab66}y`FpM*TVNuBgE`egiG@)UyQ{-%fb1+) zL>w|Fs;A(D^bt;MBF|Rth7z4{OOqAWKeMPmT*BDyP`@%^$4uSHhJJ={b3o-TJH~tY z^=ZC$V)xs6Ar=h38e18umnC6hi9Xv?(0FjisD8^;UqgG@_1*D*->QlDIo=C}7pGlt z!fZm09Ds6N^Z6qNM-H97+;vq0YhqK91yFYrQ)MiW7d*Sc+@R?>7-zD5S6}qz;Ji@h znBJxz?yX^UWitDhr*SMi?SQ#Jw)uuk!o8M8Ln1tHLDqZcVg`;y zS_$G0yBMJ3GbdhhX0iA1`Lm7R?8y1d7h6!~L&=D!ysPpTa#maqP5bjArcsm~!bK+2 z)*Y~An#6NYFFfeANhLoZ-|*YQbcfxiFD=pJl)Y;J001z>v?5>tb+17eB5MGz;+hP@ ziFyjG3((tL%&WBx;TLv!<0e0Yjq834!0tle7Q{UI-4FN2!N{uBe zOI62$K;{W7p9iW5-b?PIV%f(N7|ugAw*%uk7J4@TgI@;FkdXDqnBXE_*5b+>YEUD9 zIRpf!ALRge*zQE|e&LLq!Z8;5;JOPaCjJLNo?J}&c<`d^sT7B=muHI1=L z!^ziDBXn+@@LFhV6$fopJkv!#gNYwKu{Eep-5!1PK{^ddb_TN{oGzn>8R_NvpkbN% zxD0=Pd{J=|q?Q~=mqtCdXS^f$vbSJWTeN4UwxIk!jbS>wR$IQI-ZZ3ho2y&lm7HoRXpt4lut%qg&rh`fiVO`87l&3*w;v_&l z`5zHg!ZYdNHGWz3D`bZLsA26mrLx3}?hX;q>m$_R1J-1Uulr!Ih~MQN^~Yl=Dog0O zuSs1$`6 zp^_A+t3iS)hFSt3P?d-Rfk;tW8b~>iBm-N$-kGwj`|^BTrT1~`d!P5)VELV^!LU=z z9b;#Ef$Fq7x_vk51-uRfNzTC5)g|^!UWhU%B?VY;LJEjVAeKqOcL*H+Hrcd?Fn+2e zNeDnd92}RaM+PTB01#N0bTL>cnqo>iFAml0a?O!%JOR0kVWLdGs_yzls3E{*>}#vC z=Q({dDyp~btqFcxf(!us=u6X%p0-e-bn4GBS zT>_+@cODiLsyOcUPCyqf{OH5`s(nD}&`=tSad*M8$6bIipF=a6951;xwK{GTiQ(_# zW*Sr)Z%r2EEc(Rh%MMA9KQNb6KH@*(lW3*w4Z`=fw+_vYqV;*$Iz`)E*6Bs(8}903 z;yilYxqoIEm`hU2(01kIBrwVG!wv=jy^lF2czk%ROOKced{uCZ^NIf6@PB^?@7a7j zC&z|QSHUBiJk0*PMh=9O0_K}=RG&7(m8AqNdrhiO(uVb(WkUeacnlnG#o;geop-O= zFNAyY{>Q}44_afPs1Qxcr~j`cd({3os24UO+|+^F7||hZQF)9iC5(PVVNX_I#nhEde34`Sh{kyVEvXphnbVGh^jJ~8adkV?Utw8H%;Tiysu=LCSI zm;VzMLEN`TlL|_}{J~T`Te3-*n$x2el@SFsqw<-Bvvo7j29O3vsYWN<;EYOSW*=Os zHYRJXnstNB^}Z+J{6_O#y{&6n*167N*7h-vr+5NH;Ml+bU_2H+5$t0meD$qsp;DBp@)7v0DRNk)IZ9H#uh*O%@?-LvZ?50rdcuT!9zC+R z1)*hj+jO*bE4HF_JiIqT8}Kfr97nmsI5uT=(Sy-LZ0`zV9)Gmc^4v~0@74o8&&Fa> zK$0~QhCvb&H61*hufSN|IX}YBN*O4lX`zwL_$mbMB{dp}reWdBd{j%@g80LzLO)$~ z9V3d#rCw@Mp{5WoIQxUb5j@MwSLtn1u>mH`3;2c~ZCGyDsoXiYA>y5m99$uoZP=YP zW50J60!_;Ie$ZBSlL>Arhi|g^SDb}Uqm`7*y5buP!q-rOSb;b_C(UYGk~F`uY&SDYyO>8of~7%_c0c-p z3*F^LyhUZNP-ongcWgMPyCwerZBNjQ#CZ!oBD{hi?f8nlj6VAXYXkWwgTsrn<~XxM zm-d0C--LpT;BguAQ%H<0+}(HO;otlm#7QV*IQBstGmLz=%lXFb#tas0GtrTGYgqh?&`NBjw zz(Yteo}f?y!`*Ar(hY4ohzv2Tgf=lm2eLG{6tsg_^#U40Sp~g}SpkKHhLCGmq5(t{ zrmbXLt*RP9t!q{W5X8~6gIdo!%T){cxC3 z$_3?zNi504oN#vGZ5!)x!%fPeNuG@B{U5mvoMjXCt<%eMx#~Hjufq;L(n;id6_yQg z#Vk<2PhjY-n?p4M@8Mrp_+2=8>yT!&~}sWIoJQU^|t922h)pWc{pK{1NotqzVYnt}D0;iJO}@{GXi z`oc``h6f)1>7Lc{6QRtnUw#^2v8EGIM9A4Ns|*n>0gwrXL3(HeL=Z?5n{pNHz7xZ# z%hOUcgGe-me1nKMgNQhTh&8QiTGry8_O-2J827o(bKdv8&B;R`F){!UA^?Dw&15Fm z^h&^ji3?RjqKvPSt+Z(IwYulQpZI>-4{@TJj3p^ig)D^BbUmZ|bf7{;hKj&e<=2Tq zs+zz=K!E|Cps$dnk4s;Kzyk;^Ndyu>ielifiG&!n(yRdL;It*g9Ooz(B83bf#iW2; zWeXs%yVpnudQ&U`$LQYxWLe#JiNps|DvGFmPZyLe*|0SWL0~ z)B2}TGwmnEgfQOJGY#SWRq{aoNvDE6iS_?#$#V#wf2YTLd!LLJoVk%LG$9^ME5Glo zXjEN*3yPDdTS9%6(~4I9`6fQBw1h8^hTp;z%tDWWwdSNgplPic+I#=@za3Lud`BRk z%br2Urr}R9`|Qal&G5=)3UqK9q!-zd7-BeJ1_Yepz`*{Db8~lQ&SUEPEQ_gYCo!qRNKYQ_t{4FK6|0z)1*PpJJ_6MCDee2tW}) zXeg^fLOz3HGz2Y9Q4)wLi%|jcn#e6{V#uq&*g=e1fC?a{UsM3e#zP1(&2qpR>Jvjq zHLYsE3m~S@=`0opBmS^vA zF%ekjUxSyfV6cM?!sMm_tXO7NQlL=0`pwZ=PnY5eIjCI@!g~0=N@ahqHq4JP>l)+;6NOK4mtPGO?Fv1x#1iJahr8nrfN$j`&e7)8R zAfgH&q6#u-gds{n#4&Gs-uJoAV%GLCk9(TdwXJJgzL6j|-=vRFeifl9l+canY8GKw z`HFa@^rzE`{2`xU2)i;DRqqd)s#qS(pYM>3F5^6qjVF^IvN&>GOM!>T&YiguLIp)C z)nrsE&j`swomtde2vkDU>Tjjk#6d$Aut6je#X?vCWEOw|2q8*PF9_B_Y-1Kcci9Vq zTtUuihy@T*oVAea8wfFsWoep-w#_KgZE8}3p*ErK9!D?p?X9EHl+(al2osrjXLZiz%>3ubz4y+8LX@nSU9rtAiw!DDjIMN~6 zz7{*?h{GBsxS+w2>I~}yFkj~{vhc_J#uU7A#y!}_loRt7z<&!^QQ4XH;CJ;L<>WiCov2#o(~U^sP8y7K4}-pKCO!fv7+FfAX}Sb8SzhI4{HQE_$pUIDugDP zmGdWwC)CUN?Cx%xFP}5>QYUzbUoI?kFfU7o~ULuiuDewQBhN*@pTlA z9e{-`cDrFw1y`5HTF5PHVu&e8!Lei(zokkbr8P<*r75~zGg?8dZVTCC2rcrtO#2u@ z17JGY|AsbjX&GS2$k{uS$NWD==myc5LLi5X-gmL<9g)Jux`CDn`Zsm9Z3{7Dm@uka zg6(B;kCamAbnuILLRzpYLQ?XMg#fmjsqd_Dk83ium9GJX z%H{=7Dnq*sYo@1wz!4KHga_gRQBnJb1D{6xP4gIxj3!-uMb|uCquDoia_gO&4vj3) zZq^)B{g0qbaA&W^4_YJ=B1Zz2yIxI8uKL@(cKcx<{1a>Qc4}eqx^5gMM{NfIemy)Ny8wifOpwt-!nLLnz5889RuU${1H?!#)yPZ0_I0Cca zd{lvtey#8O7#l6aLLTFdDcP{ac)lom=3DoP&FhK%%R|5<{~4nzBNx#*1)NS!<&F^M z8H6Fj1BL;@OGa`Y71fS50TcTt8r{>@)Vg-aR6?Q^5TqPI#2i7y96`==oaZ^MV-~ku znD({qbDa0N&Ud{GGHz!BRu5j%sq|&=w4mVAldHG09FBtLpu5s~akZ(JjyA?#_;M2T zc~~l**;G3_5p})S$7eB%yN@Ja_B`GEPsl$dvpQQ%q=lNPX1=I}p=(@hpD#8bJcHi! zkV;bh%E&EiT{_4qKI4=@tzV9{kXqN3TF5QSQiv0il$0Q}eQkTza+GVr;Ie|54|K`4 zWos5LxbdfvrFd?~9aa^~=R1Dd9OqZWvs$_giR@u#v_2!myIe7sis&vZ!`HQe)$e_t zTe*+*5)VD)?pKgR1D!0$7Fgu&MItP$bVzSgu|~JsZ{r~(j-{e=KEr8_H++^UvdQP# zTUua={B1N-EYl4T3YUtEvHMh0x>q>xJvL_jpJt`Pp{AJ+di3K&Wtzd=xb+R-R(re0YlT^2u@&Q{w^`_)=vwc%e{U<=T2)RTWGS|)!xj0< zl9N`xx>;zM@MB5w?)J4aJ4L2#ZO5@X;9}vZ#c=ufdSJ%2^U#beDb^vCulLH%Xm<;H zSrDF;5Gb;K8iq^gKfGP9{+~K0K}W3G%6G2V0=;giO2hmT(x2~(*dCvle87PKw2)q? zrwTOqAxu`D=YD~wBa)oi^X+mR>tgv>^WFLtOx26quCLZoE9cna)q+W2Ils%@Lr*&> zdQvtae6^tf8i+9O#u!Gk5+IClF}Lxzgg6+Cq~EFM!&! zV50Nu-I0^_8ybu}LCd+0&!_X8EQO4M%$pQl6c7MEM?+}dv7TphZDJ`*0;eI^m}>RXue zY&odku*SL(b;4vTYN1Uq=W(cKsQe+_UA8#G8jDA6mS>Ho{+UG4Q!4wS^KEyzg81eb;U7;$b+0h&Y3Y zID?2dgNRlf=Q*uwTGqABYux6wN>i4%Ir?a11Yz!Cr+6Bldm+ZlLez|5+jTSC4)-6A z9yaH3kRKqF>3uqg+NiNKIS%eRqr?r|!!5%;`q(zLgFHTcbLQ05k(9tOF)))RUj+x=TCyi}AUcOge%+5Ow0HE5~0w+0)mzxD%6SUNRgS zAVS7i`=S+nX$3p&F{?datjhx9efqjyw$dBb_JzvipyLpQInuG?gBmYU7WsjFW`E@F zcFtupM?hSc^5LrQc|tu8V?h=d%pU`=h5W54d0X$sgd<2Yzu=5Cn)2=qs<%NP0vZLBt$E#2iD5o_pT+y{&6n z*0s)an%1@MYhLF$&U6w3&B#@^6%j1V-fzdN`La8Y+q1Lba=mLX>SY=~><*H04$z$G zWgqHM!)SBvu;$m%okwEqUvKY6KoLh*BnroFp@1QXmJnks7|t@tEnj{mYaq6>3bl}0 z*H0B>6szdF<=(;!XES`L`bMM>HnkAbjk;{{DC6{LzPk;>-`MlU=vyoG?hO|JW_1;4 zqtEFMkiS}ak3-@xA+>IpG%qWMy$hQgnyLN=B5IoyX+jhC-$x6;(d{0-YKMPnEe&^) z(zewAFPNP&&_aCW2`49^3)6JkTv|l>FRLa!C~s2Taz^T`^YBZ0KUc`ZdcvZnhaKGf z?_b7a*6an~`krM4>=bC`^^a^tPYps&0vv44Sps;ZRD=|d`AEfDtl25a|C4AdTs_w4 z#%0mj%}~uX4LLM9c`nR3wu{VDCcOVv?4Y{vWr$XK(DtipoFxMAXW+Ebn-9rwtBnxv zfA{Qie15!G%+rfS6xH4_3U8+MZMutOJzoOq)|_mw1L76u z_}KfXQOv4eJ#3?fF36KLtIM7@9VxJy@yI7w&xx*mmifLZCCG;)CpY)FHar2LF5OG4 z$z~Xy?lvs)VUmEE0vsgfK;Uv@$9`f@}-sDKP_pLjMp+%2eDxu=n+AI5Q{&9b>5dV66fSDI9{k-S;Fu$u^yYUo~ zH+QEj$&vu?>Km_wR7D!q+9QO(*H#fH=^1cC&BYmD;F>3z)GV4;lT_R`XnrGGt8UYFqcBsJ~jFC?yY~C!RUi1rwL$bYu8>a3zW7aN30*y7j zEI==S>;FCb5l+-gf}&yyddyO_RUJ~$loP7i_pD9ovZA8h(L`leIFf-)dHA= zQ2m&ZP0ZuFiC%qg2&|d<^#KYN`9Q9~CyyxGbRm|Xg4!~V_I}8D3l+-!yl`{dEz#3w z3ub~T6%4~n(9!31Q5OGuzV6){o2Nl*_)kbpaOS8C8^hn4gWxQnfla{JtZ85`Ir90< zxc_>5@eQfJYqmZTUEC(TL{S!OG>xH<;#v!f9Mu(hc_uy2@|jFt~wYg4G>0J z!?DxqT#n$z6$&B20(sdm>PyRJV8v-`(DXja;C`ch>4=hips5j79X-RB+R>o)`Ho=08!QtB3aNnD2~j*hzK$^Z@obk8PeWNzgt9Yw z&B0U~g=Vy(*49EF)Qg(FRdD}BHYV3}a!=^2pm>>W%FzErE02Gk$R#pKV^8)LcO{Vh zlxz?)J-Txsq#=X&KaBEzoJaEN{wsQg4RSXXR|5PVd{SH|8KO8gY^uQfN69E&Vl4d zomS_uypnLWAg{7owPLpt`CB_Q(Tx9c>BDwvDC4mH3w8424J?9OT#={UN8v5k3Dmfi zUG1*;YwCvY(8qT4_Ueime|sY$o+6o(0RhbC41qAfm~n+39t4?vqYtv8f7f!6*6(Oa zfnKHN3)lT^*6=kR|109+`0W(CfrqFc!U4i5oFwrsLW{DFo>A;}@@5?e(|6D%73uE6 zX{K7Bd54E1p256*z?$f#q3}*wnq{C>3GO-1{tE}(x>$M>Mt+>3HuKiaY zv^xeHkqH1j^=VE}--*gH?;i+?FE-(W>SsT#-*xCK`&t+&5qaX05k%FD;l=lCgV&9&OHwhY_-hUSITqVVeE7($HN1+9>IOw9^`_D+m zDNQ{6Fkf{y!~Tk>pgJxxZ$|XA^fMupJgdm3X<~{g9@97fqi;w2n*w}sSjgEpE6*^lE z0rf!2XCf$*5$VFU6CVBQRR1UyTr&(w5$dBpAz@9k^@ zRA1cs4Bqde?K`0?cQE zPqcg4$SJ7Ur;P9HzqLtH9e6A2NCrxkC{VDIF(b}}7$Lp>mCyqLO;x>yFfb>62nLcZ z3yvNf)65!-M0G@3i3~)yd9yRDOf*_f$_Z|f5q7LuMr~=VAOP_-LlzD8Eb`_=-FCuep4Ik%|YLsEF9tf&0z}H zp|UO%6ikNi44dv+BG1S3jeVuenSyuw7Zk`-(6C5Y4m&a&FJt(gEu%-it;gpDg%ADv z+9-ETBkVk|3T`+Q-rfM-h-SuDJGb=`Umx75D}Jdyi^1QO(XR!GHmU_UBUno*i;$st)M=F6M^vBk=XxNYI0Gv4H=zeY;n4O$33#KOD4#KRm5^`;j2bk z&vax`guWbFHsmbIY7MjcS^*Q18`eHEn!Rw=Wjbb(37L zx$0%3W_M{K!!kZI70G`ZjT*PU@&J$$kEtik-c)~!o3tA%f0H|~UUS{O|{2Tu=)T#RGb(w`d+ zV?|O2b`@I|3a>g^M^VBPl7$73al=;a$53pT`YP@3rL7UxdFM?MG8~O*7K5`ocZ<^n z@qJy!@i0}b6*Wxt3!h*#`-yITs5ft@Hmn~`Cfy;W3jb@Rx<0vZyXPt^ts4s9MIeR- z4;yN+fq#E;(}T~BCH_lC!S-4@1zX}BhTe@=jtQQ(51fs&CHt_!Bg0X%Y`h~pE`G-2 z1NE_A86vp5-e=HxV&l4Q^e->@=~hm1v%D7xV_9@myVs5Hcvu(2-G7An)kA-7%Ng+7 zqc~UK_G$VftZZ}v<@)x0Jr18G&r=l#P5Cg-%@9guHMl3;-)WE`l(T)SO1T-`OpmDb zVe7rE`C6y%CqDN+akRp@RMEj{uKu$&>0tcbUFCS(j1K~2rEC*@U%Q-VBb&E%G0`;G zwNci(cq;S0j&ky!GAKy!&Jf?r7^RvVe!TmN8S3k0=}W3;PxWTo*53yQ@ymqhSMuI| zz|+K?MrC4zuB51r{%}*=(!R6U?oU!o#O2S@Y)O?WSS(E0Z_XTdapSArpY<{+vS`mG zaMh-mOe0%7Hp`gZX2kq%$zO`u`8lgAPv*{>1b;LU6RJOvm(;y`Z^B&Zhn_|SO!9_W z`r{!lnuY&U*|;;sF+@=?r8F!*U>mt)sN)}SAlqs`;`GS=Pt|3MclA|gg^>Z1OGaqU zN5r$0(To3oItiLgj4?+Lj^XR+W3Ppp&^R^JN(T$Qt0LDQ8X~UM zFWN;>LPs4>vh~QTay9E+q_^#!wY8srI?U>o9s)~Ti46PWo&uMOYef`&uVo)0g?@t) z5$`k9r zz4V{BnzSdAx?J@WdS9J+v|&W4c7`)H)+~MGX&JM}f)8n5@(*Z>Lss@3$jVE9;cR%@ zUsPGDV9KHIU$N3j87)UOW>^Q^tcCAinLk}e zn|MA8_LQ`?BudTyUDXv21`y>O^yijs%~$%Z_rK`-m822G#*pwg)G=6fr(zL$H% ztv2e9+e?h!4^@P*Q-VEga!-WA&GnIeypT=sLvxlIn0MQ!!FK$F7QQa?#l^!z>KEVb zx$sgp9i5CtQbP+xZq;0N#S;Eh5-dV@lebe+iw&&SjiGF4w))=mwrh>@_Sz?TZ|>RB z*=FD8tooKw8c;@?4`zE~RXas#{`qL{*-^N{@L%FlT_nC=jX{PqY1bVBT z2Xun%(7Ogn7-0fP5+7F!wtuz8HEKXZ`hdn78AkQtT`0y|d@1NZ0)RA!7|&13COd_H->6~4 zj%KU6-uEUTNuPxO+{%eNT2RH_6su@xAWv}`WJmT$yQFfI{|?H-{Xp z&{Ey!A^SFS{4;}6rpw|YRUloIPYrt0f43!pmB0*Hd@}|+3Q(WqNl#_NCCkfw=H97= z?xQxDBZ!dR2%S3zzn+Xud2c$yVwgn>8hh|Z17+u5jFR#FgTBCd+63@A|C5F2t`D## zj)lrHax^gC;b=IVAyCABcfCv+e0M34?{QwY`x0tpVQJ3H7y4TcOPvDEymmICO2|KE zQA1RGtf(@K_XX;6w+yU#2j)=)$L1emC%#i%pu@NC54^-M--O*LKI08|O7~dt6vG<^(NXOdV|*3^YH5LbzWHQ)4M9-L47ItT zJxRZNp@t2dWTwdsX8ScRjV+MwA-g*wm7;#oI5bVi8kWDp54z{%v)bE`%Y=5lbX zKnISD>VpgQusXO6;&mr^DXr8TvTe@Oe&%+z9x99=t4L8FhA>bY_@8WBQc82C5zM9b zD1!FT$R~B9L6;6;RP=vT$C559AWN4#i;DExEYWnJDW&?umd45rUq&7pvGIRPfzB=a zeetv_Mbw*^wBle7!%d9R-(L^;aR?xWR+emum`h{|U*Qq=IWu(%ab?!;g4R%8i41)& zFv8#q@Nc3uOGg|)^M@FI+ZI31$H5#MyUkM!Qp_4eG86Su%(2%e)Mqy zpi1;5`MF4$(=<-TxC&M{l~1SG(m>vd+jdwse1(2#K-;kG)2G^gMceS0auk;WpsYX+ zL$Iv`B{p2RgRjsvVzovOfcRVmrpnWH&yf6#x_VT<7=he8?nAJ<{tNgad?J-hCSKD& z6xO0M3!P#yGaghgV{`q(nrpMAL@o{ou|lr?Z05=rD$Omn`XnqGGIV`@Fe3hPh+)pviJG6U={DoTe->1{yI3=gt`0^E~Q93z;~jkWUy41U1jCwjl1iyZlJ(+Hv}qj)u&Te+%<n`=bd;3hv z!bo3a;Sdy&BO8(wN~6@02WRm)G9xkgT{ggh(5|u>MKdE58oW*&3{4R4PdF8>#Ix*K z$%%(+;NL1omheBjIQUqEdE@oc8E@n9|9FPJ<-BwBIcKcO46 z>2$x#kdX*w2NTzpC^`~p%|GeTkKSrVf+iCFk@@t3+>4&sf3O)*i^qx>URT#VI9#P+ zHm@&ubNZ}dQFAD|%&L@3E_9{WmI+Nle*sy^@EJQ?dhUkb*Tk;(lhq2V&@Ur@GrU6; zecM*Lh`%=Jzu%^bJYG?dp%mlz&g!xguVQp(25K|=MD{Ynb<=~3$IY@_QE*){o*~;&&o~R@|ho^ zW{a9@;oeR@vYdJbNoYJ%qnz|ERQe8hF#TSdVet;F->Rn`8$3$uRmYc9b2nll`FFaLajezNN9wo zpwnggbWL^2PyDt((|0)KfnOHkmLk8q;yZG)&$eKb68b#$Z%F;)uBmyaV9z7^J2B5%_Ce&QA?JJcG@Sb>3T9kU!Gzh$&>*p5t++bg9?T`GKDq>AF4NSE zo`^5EZ$?FzxSOam#;^t@zA&2{%FipkMM6x1vbQH2uaVCu$gq*Su*mK2D`|*NFp0XMJzDzsF z-&kyC8CwN}Wluhmej}cGjw6QXivBO>3zh zCLrm({CaB98x+kB*k5d@J+RYHJp1JC`;obg<9Pk&-;vjVT-vzQk0S4c=irjzbyd zet9)v-rQ}Lgy^^2QSO zUi?y8NQd6H%zAD@5cUjQ&o%Ut8CMUni`dB5kNG25!EU^rPrX1nkiWlJk2?Rq7_4aa z?(n;>bH}Et0AU$*nl{0Z?$E>R*U5Va?TaLsEf^}^w+a@+nhDC_dWrH)U;FY?Q&Vo= z2eT%!QNv)pH_<7~%g#QanGO+wvo*#3jmJ5-UvtOl#O%5sy)6@y5>n87bARImMpIOt z?Gv#foBK_`KMEtupfYNq3Wv^8sXttIG2T4%9}AIE{}-7%>h&zLH2iVCaewY4>tkpz z<>Q7PHh8xz%C||nXWsW0ivv9OfmS(vw}tY91$bBEwfX3L;nSPDa~0#1{Y3AF0hRQ& zAE3wT_S>a{46?dgmEGFC!+LW>KYY(r5zNdSZZtI);T92$CC21`o{?_;qqO>vUQ7AW zauwSF`4(P7Rfu?`iFZ?e!TM&?E@AuYl z=}Nzg8XP<|+nn|J=hFyH4e@Dr$BX%PH_k^(=J(MH!!!Eiee9dCyyz#!<+NL)5An;4 z8WUe!+md(c>QuB9-roNHijpr}OWUap?uYu>id`&I)Hc}@Y+-mAd4bbr;~)7`j7Ni8 z8`HjYYPITcV9i45PRw^69c>^tnKe?OIMXi1!;kgu(u6DtGp5Od_lmEKDBvnG@`0@q zZQV{xhZpwiLroo>v9LKZ9lCmQye0t>Vdn25lbg4B@w1*7*?q_V%pHi?C2{Oo)&<1% zqCm;8AV?xCash6=T>~e*D&;B-A;5R|xkYKVgI9nq8;6*0QFc8H6?py^$K6y&ez~-` zWb#o*o#YH4KUX-{Dmn7=Obj}j-u|1CZcg7tLi(ncfo1lqB}+q2aY8OU=SY!^8i%vH zctQ#v+&$g}P@j|Z`O!4lMdCViljBf3`fS4sS9O+a^=zUDEmcxIy@H*|tY`d>#{0hti)X zOPI;TR^93?V5_|Gz1hE9iZlFdDM455)NcKx(qqPXFnSHWdlPcQ;K2}z8T@P|ar!aR z{7XL4Qdgt9t4PJ!W8qLON|K4^cb!<}n}J<)53eH9yG4+^2*~^#RjTp zP+^9|uja1rhoO&6_s%UnKPNCzi``6?Uq9(}flOH zt%KAcm~-;AwVQ_9CO?+H4?;s5>P}w*hiJpT%L&#kc+E z-@waIE%>k#;@PP;!KA)d&!OWqRhza3AzGbrNb(M?0Mu(#)Kz*15`L*(sCs@BdV|V6 zy3pSyBI2`%<5eyHlIYom-f*@6$E0xU)l8Z7si(%ocuIeok(&D%b3)g5&)Yrq=Znix z3@{@QHGdFaSW%5dnR8_=aqLa#??sH)vh_fW zDdsPP^O8kRXv%oT1G2i1W}`X zwLZ|eJrf}+mVO@@Y34`Ot?KCPs4|C;iNcVseJH%!!JYEpVDnqaJc zEynxg9mR;J92(qcs6VJgoy66U;`nCyx+9KB;1}dsLS+rtd-W+qlheaSqKFk2(B8e2 zh%jt)9BE(2+ewZgtFNLK(FrBxS_YInnV}RLzApJrhn}(YTj-2ChNF8;sowzqOQVl+ zAe#xw7n|Vi;u8{p&kmmo^1MHXQB2kh!AB`?F_#UHF4DV+V>*94@XQ>=3+Et~8?CC7 z{b5z4NO&690rqnJl7O?y6JwX(6Z}AM*%%_8!@&2PUO!&>hJ}7))QtmPnEkH12dXee zw0#u5CE)~Td8tK=e0Rz8aKsjbuCVqz3_zE~iWftIz#w{VE?0>1Vwe?Kbi&csIlsa; z;nr5S?T7adM$uAVZ34NP+ZdPeMsSVcFY|mknIi-(LmoKa>yC-UIIn+lFX#}noHiQi z$|5i+WvGVVAUKxKcN6f#TtW24Hr8|Unm)#1C~I5RLJmmhui>DHR6H{6*d;fg0X~{0 zeRGSJ&|?V9LXKE$clzd|f~v5@BJ%@S#`+EjbfpqGs0H2|ic^t|)Ds%*T8mxZZW$y^ z=-{s)Ns5x}Fp>*X;nE+5G+%sN>WCCgz8iTJKzn)&!yEj(1f99ZBxJQ?(uB2`<>G-* z81N;BS!TDWG6VQdh6w%Z1m0%Jchn#1Glyrqr08)M5Gi1%iH)fYJFS4tC@7UpeyXgpa=)On-7Df*uNU*KI|O)MFOk8s~*mj3*L z_ogzvydm6cLuAT3k)8 zkGS*wb915cy^fRJkrVl7ZKaEE4nVmt5uue3GGjN^4@vWwCwP<$WKFTR3LSWTV-Phfy5 zv68qP|L&pSbF3xJ}~eBpS#`tl5D7jIL8$y@o;T1vclfvhQ(?K!Bfb)cT z|LDgY&{kO(r-`$0jta(;1N}(sbu^7XL+&Sa>$@#GD~N#W6P;;U!gdE=^XSK>CNQ8*dUnC_&L5PTj8)>_d+p zljf#I2u~^4@|meuc;M_eG;yB82%4bU*YTu+^SSU|KY*zkPjx2)S*y~E@0^3o%o@R6 zW9^B29^o7#+#)kQVw7{4k)Ax!z3Pv!!?s$Iyxx52MO9>febEav`;c1u1wuNkPQ!Cz ze(_h^6_6ua=Z9Knu(}ge&V;{uzL+Qs`{zxdj)fDY+oKc%Tv&q~_#f9pyciZNPzU{c zD+v71SCn%~JOP}D#hn>zP+rFNZ$)=sWJNrV*W7FGkivPAq1ZYQ^(f49L@qZmAKc|s zj)Put$l$fNhBb!NfRvwHJlwo2qoG23#)$+5 z#`{N6y?WNI=y>az%&(%^lBs4#!-3;sU>!M8G!$J&zME^C!@;@Yirlr@>68}rE2!sj zIlPMgMs_?t)kSnCPkuE;K{U*cpU_lv#$o#qB?z`m{>JMj551`+Pcv-8-|c-Fv5CRD z3#Et_^_T*r++|@{Ykit`z!kKy?VA5BFw`m$QmHg-qJyOO6&Wnfkqdn zC-NAFn$-w8+iUSn*-sP@UpF9Y&CQ7f6GT$`$>I(`HCPx;pFE+9s4qW=!9T&{2zqFp z!MtFb#9T|;=<8ld6mYyB9YkOEB^|L(frz9?&Em(!!spSh^n3<$5ZCZkK;S8!&?TK>tL$5 zmh_a;_%QNk7vuNiVhI2EOj)f#Tj%aRA&F01$lbck3Cf&NmKbf{dfJHR!bO026Hs&q ze4}CU^q<7^In|#6w;|^WYa0Cv7zFquK)CEv6b?JEGXDm8mlVXk-|>=Ac5u-7Bak7;4D=5-jhVwNR67yr&X|?W~@wQ0&g!x7S zX3&FeHfi?D;C!bpytow|wids;bZLpIQCdg&=M7f(K?2%{#^Az3Nlg3soInvwW0G^J zvk^FqHaw_=4XisY+_1B7vCFZLn|kiLGd>BXp!ZH0?9`Y12?LCXnCYoFIOOCLalILP zLEUo7a;y0Z>%tSdPUVUQqULLX?9tVJUZ`}%r3}tXT3q#Q!txKAZLW@Ip*N1>j5ey< zQ9i=8s$V0LyVWd0#{Oo-d&z~t@Z_`9f-3pa@Kv&7w%&)uYwEd7oD6SDnzE3WPuMt} z?8mX+3(7oMpV2M<^k$!+t_lkA)ozdFjri-MFK2I}DOFu$MgDAp)7to+y9K5KAit!z zIQJ@6Mx9g`9Vn}{FZ7`dVHXPXpI;ddB$q}iKfgG9&(Bc=CQ5_RNf0s?vqNLXvKON) z^jL(elCNi`ZMj_2`-`@T?mZW*CDd2&CL+{rL#kl8Sfxa^NNc-|`dg}+N82o#Pe|)Y zBpPLIj;>gS7e>u$ez)BsD>}Nhy|BHIA=*dODrlKN_obY@8=@yfg$O6|C%x?K{Ks%K zJWT&H1w8am&avrEEBc*>+GNd5L>+kn>b~Y^O{$c596GyOF00&}GKYIv@_1ps$f@}% zthECu3a+P`Jj)gyZ_V7&M2=OzU4I<_ocj&zW~zt@i{tWzJDVnlDjez5(Pck_)p@BX z#`ATa9R?CL98c<)#&GYOq2%C(PtKsEmM0QW>rjS}pKwno8Y#Ngt+%nTC%iRw#-8d@ zMIm~!qnUaSH}pD%Ge3UrKdPZnTrQ}Y@Wr?;_w=C~(^bo3ECqiJifdd~yNq#F88PJu z0OY`SSbqJsFR=~J(4-ZZhJ%_LHBZs3Oq5l`EjuAmOuvS!|=R@a)Q~c)>hR*8& z-t$`zy3smNG&20mvw;9>@`N37E5YSAl5+=4K>$TSy1$4?fT4VIM&3Q`2Y~rq6HGej z{+o>>mx>ez>NH81jQXEW1<`$Ad9>YA21|XB-_TSW1ql;zXDa-V@yIcL*wi|vnHT~uopp!8LTVBkL0Ohz_CiQhQG z6KT|-T#7#IWC z`w@T|O#{$mn(zj#=giRXn>)(}ewh`jhgHeQ*%#>u^RbhwzhT$gwETy$_FEi7{JL44 zhXAp;9tQ#14Kei{>n~m#l*imu%*JO?VFMAQW(m;9v21i&f%U|V^C04!cY;oRADag6 z0O`nS_-z=3;LiS{-wt!y@8Y8?xFo3qYAe-mdq~IDG^-$$7z!X7c>5zPC}$4n;%A32 zyNsd3Au>N}!=@Rg1ox^$Y-7vy&^^85y>L<~4TBiM4o<&;H})O@n$^p(79KQ&tYLY6 zAi;qDN{FWv2u^1e&O4e#d@VIe7kHg#XD~#i$53UdLFVj^Gt*nEN3^(g=;zp`knfHx zJ-9fJLN~7b<_{@Ui}G_4+N{`fQYaiGiuXvX!TbqWqMM_716=q zd1u9O_9)xKz0;Y5gTZo=v&R)!o)^ChHO4SC2zSG1-Qc`NJ+^Lkg{M}`KT6_KR2%Wt z+Au$|3%_4`cT{PN{)A-Kg>So_${;0y@g5;#Q1pT?Z1RxFDj}d9YnVZpT0q*fV!eoQ zexX7TwI6)j_Errpn1t(A6zY%AnKd4xZ2uM(h9{HO$Z;&+guqzYr-)2qn;}p1;`#c6 zGc(UPOuaDfxmnK4^!Ls~ixse|3x6{7=NZD76Wz}y)PHD4GfkPr9+nni!pbPIe9MF5 zT+EeKh~y*)>l5Ebl)v|_<&k2H7Zks^8FPo?136&;Vh-Tw3^(kQzcBbu!SECZ0BQE% z6iix1oEYBq3Tw7M%p9&3D5>T~O?SQlqQWl*cYxjC{xe^6`5O=v@C$u!cZm#1Kvi>E zIyBFjFb7@L>t@2dY}aMcf+t^lXPZaAz|)>2;`x|YJuXEz4Ae6NU#Q|scxwxKhm2+Y z?yT(Q(L-n;UxP`1c(T0va2B*U%q>g#H{17UuU zn*w+|XN|-$HJKSE|tr;bb${WFOfm_UjXTCCd(9cR%jj2gT@JQ8d*|?6vgOi9z_X+g$%7C=S zE8&n(q;Q)!Bp(p`TX~H8)0eb8?tY$5)q0<=MnE%Ui2qQPkl@EioNPOP!iGsrk|gu% z4IJ;e%?DIJh&C~c1vcH8ungncAA%^@a!L1%M4nxbr>9afR5n(93O~pg6TzLHa!2ge zf^GlY0mi&|7~jmUFYwLkS%_0a3HremGf@2U93HT#O8 znuF1$cF!C1g7Q4GX2`l(bp`-?{@BsNRs+o+4=8?no>V!_lBqll<}{qDnX3FIQvb ztPtIeVy)~!oYjc(?e@pKM9z`Mo2=qNhhJs%)DkrKS%x}y;qN#{r|b>tGyG>%$|Fa> z?-{8-#!_Q!^)W*P9|xjRvP%Xoe)L}SgS;o8Jg1E*pu%g?D-CXQ8EioAkC#`m$rTOM z^d5eC2#Vy&bmaZPp6k$`{83%9K#;I{`WrY|HHw%{7E!@*Ie5W>G|B8WYHC00q)_%N zcte*EoH}6e@!(nv!Nu#LH|m=XXn32~{CA;xNPdcG148S!`sA2WZigz*ADJd%a=cvg%0&KAtN-6e#;n2{q^`ln&RmKxEt8wRV zZ`Ln#@WWgY2v{VOe*bW%UObJ6Yll!DEfb7n+`2zSuS~pobCR*aL~wR8T+*UA;y#E+ zJwe$r1noVRRHAc-ob_zQ(2x(KG$IC5oewq2Wp&5ZJ6I5ny19XPY#`^O-hUuY2Z1Y) zf^ED&!PLL3?RTYStviic_tRr)nEmfuWVPTUZLQm-dxQixpV zno=m_zr7u=V(}92>{=zkd?2-v<81r2)$W=g%q~M&n*xNLKgK(Yh<2zvr*! zrnuPR&-?yj@e`r2C`07-L(|PJsqDpzy2*XR<6X`_Zo9Ym=OxR&%?bJymOF_3XXz-| zxr%g|mo`{x9zHdKRm6oi+-}j-(DUQHs7F!}Vv{Ghx(ulZ@vFhg*0gKF{+&dhb4&%DuNJ_bO3}^Ss{ayv!iq zX_;6hsCFF}J|#l>Ua6PH9C!CwDd#e&p9EEp(RVL&M#`an#~SeX&5m(@_ZjZUz{aAA z_N=)2x$mWK+KTAh%x=Z;9<3U)tao){rW#Yw=Z33H(v4$Yjtu(zuMpc- zgP-juZX!BH=Vi0&y1vHB!_(%eg9^{oU>efsx8b< zSID6cPpCx~cMnvwL;uw_P5bB4?NMs`^02gdul%a0Z_)$D9*UB95*5)*`+B!25^#gN z_HkR|x@CBAr&cOr`MoJ+`_)8;4ae-ZcZofWPZ0fC4Q{mjm)W0v^QmsB@yWDHmv1>mgZlL0@dvQ9RJd6c8_d@6yd(qUW z(MTtI`mrcEuW(W{*vja*@3z3R!T}GVb5O3@^-f+-_r7A%}3&!;$)UA0>_W zl0kW}jlca?_uzhMEs;G9{Tzi)s4xk67uer~NcsAmB^Cwy>aC|XlzSQ* z{zoCrn@b3<^>xP`@ss~nSOc_PsNcil$|P5|Y(jZa8yAf>cG8YFQJToYv4o6ZuY^L5 zo0{V}gJ00aNy8q@;Olgrx$=t->5YJx@OLfZhcEkCj;y{ep}sm;Eb)Q)lx2mVChHRF z39D5uUNe;*bJ82_+DugM;(jaqGerPqat(X@yh^w|;6<9O9j;klTb7HywmS~A5v|kX z<&g}`{xrxEuWeis8ToxTL^Z{R7RIE%4mkFgrG^zKX-&LiLQW^)$ixgs9Sy)kHQ10t zCA)KS_i$)L7+50lT9_URBo0oeLwr+KJLqt9l!MHA|Kcmh(GVfBC+*M9Ke9k+tO>1y z+=F#|Je|?g1f#5Xmi~bfPpl_-;r33@I=a;^qc%Vc6fly*g{ec2+c#mqQLGPh);*B# z$op!7byl{jly9!5yZuy)-5Q8QCiX1XB~Y1Me)G}=;Oy;6-ZbF)o|Am`=lcJBT6$GD zmiC*^c=$sfW=H1YWpp<=I&&Irh(6CwCTEVFomXOjY$$3I^#r1-=v(+LtOeSI^r%TaEv=3%n|B2z`D-2qf?W~1zDp@tZGGq8Ai$y>A`XxjKto( zE}MPOMilPoW0e0i+_nC-9Z`ElbZ~2*hodH9ZiI^}twJDtOP3MRfkSOzzsk+i|GiJJ zW;P4D5Kc$=+$D+&)1MTm>QuobkeWg2dd?PXIg6{xJie-HY*c&5)mqDIZ=<`}h=#tq zOYw;>6PK?VmG&M=9nC1Vpt`*R{Q60$!w~Z6jAhR4z25(h*WBqG|3y|5auqWDz7>++ zjq9(GM8{u(Ud8R{q~Ofs1`O28$4TlYvGMX>gYZ@k z`z(3+g;FifbA$xIWgMVAxgsNc;_az91#8%YS5dmf}6@DM&Z!Y9+Wjscy=b-(3&&=(0eGs-^yRuN#Sdz`~$r2^QOcT4uTk);OCY(IuMN z%ZuNO7ZTt>4uX=uo3dO!`=Y@|gA>FaoYa_MSx+yV;cVXFaCF4Dxdxy zmm-#suZo$bbzXcp_b*JNU-yHeKVl{#t(+C}Q_Y!!SZ58@t@i@+i-x1nl=6G(MM~$1 z&v0%8N_HAwrQL{4fNQh_@5gcufdP|byq(Zjpb^2lrlW2QVn=D^i1QkBjkaQPN?ewGghG-zv)jn2hlKudq;kGc^djkPF9=Zl3!b_Rp$`#XW|IpP^$!e)Zg<@=S1?Mc9<2W#C2W1i|K{${);${{XW?{W(_* zu_5}wb3M3g;ao_HL#oRiChbVi)ayaiEjRlxb@=2m;gFoI!IUKr9;J_I6Noc`72WSd z|0}8s0-)wQ(TYf8ERhFD)#l!hQP?P8yR+B55?ZHw__^;Yy9&kD)OEY$R&t<&AH$j2 z=E#8>;xou%8+{;=aJI*IgSL7baiugg9qzj zv_9GGpa*y63cLhuE4tAtHUpeVhU)l19*q@-+yteO!^6^J9(Br+`0Jx_2NVt2`Yz*d z+%#83?Xio?w|zq@fQTD?W3nOU8*R?sbJ!QR(nGnrc=QM+skL^E6|j|Km=#5oc=3ec z1~CT2b%1uM>x2>GckK2Me|3c%tb| zyd8MHAwyYtfLKRkc!Lno3HspVL98r-;qesW%%8d>;tkw+L;Na5{pVHF>8;Tm8h(!# z6rn=EFfa4D2>7B=QFd^AM#$)til~b|QEDhFaoJ8>595hn-JS(_{;^HAI!9{5M|4sy zrP>mNR}Vc*NfS~o4(tw4p@;X%>_6T(oC;n@susc*kmfi^!LV?gh{n2cz5hzF$mY)K z1J=u-eFY_f*@IFDLC{+|39&*MMZX+QiVqt-i7UNuC};+k%|ovs?mVG{HH=l!&K!jA zD5}XoTbpSR(mv3d={aCB40XN>d8#%-L@ahhrgWZ*7I=01cgbnOV4;;^3LM8#&kB9- z5fMbr8p3~RfH41^##Z2R;t&NqR^E~@WES#2AomSjiufhQSmaLAhTEOPUcsLLDR<>j zg(-lkhvoa2eM*O-_$7~{vYvqZ1M%?cUJouzNQ1VZ7b2id^_|@`L_2V-#|B{~JS^G% z!`7uczFSv-sMz0&8XnPAsndo$VjUR() zh4Zem+O}9R9g!=K?hpvIqMY{7pu04npun3Wgt8a9qL& zQETaK!W{4VMq^PgULd8@Ng{FK0N`dE@pveu@qE{ z;XeVaL^1=)A@oJcjTvo$Dp+e#hLJuldt!Xf3BM8_%WV!Ze&X;H@H9SIHRPRtib9`U zdnV^}Yq_IV81h&wVloG~5o9{kBb>N2bVq87qyFLC`krLqubRk$lh@`D_UjvYWL zb|0~a04J6v=>bk6_@68Dy2qLm@5YQ=z?@B0x?AQo&->! z6rfr~C=?15XlVr#lltGEMJZ0JR<)Me1gw={(UJrKf&Yiro+ihU)O7#-278Kn_YbSMYw8XX@~52w%eKf^=U`XT>1-0nQ>9?sio+tcOm zzU`y8l;748+S~diaDA12cIEJG9^dQMXmePbJfY~IOf-TEsv)5o5E^NShBgH086+zv zk0fEFc^=dAPO1NY)#P;f`(K#v-~s5dYj zH%NJ}d+D{l?4!9CeCNe)ACF)>oW}~gm8pGiqLm`yY3$Ax*@f`5QxI5E%riNWi4A7u z;r3rerV-$UWacm@Il)zGUy;Y92sn|Aa;2KrB}Uyiz(S5kzm&jE>PAYrio}`oSY^Im zM_T_HVZ6#UM~_}T?8j)B^Syl^@6_D>2Zq;3sOAs`+4eMdb(AostSQuy!9rx&|2D|g8{IxS?3V~vA9Fehd+?% z8QA$o&1pwiEBE#BX7~W;fMZ}YA13pyDWTuvKqh%Mw=Mi;eA_v|OV3p~9Bq1-`rj?a z?uY?*4y2o(G0({d7sH>>RH;!_fMR+KcyK;E4oM6= zFnZ$)&oGyXN={pupz?QoRNGz?UG{Y>F^5{2S^3YVo>{r3Cd_t*@XV@ZC(+bX>KWvo z*sN?Ej^6ad%=}oV)$wTWNSmlm{1-gIWNe5a>R`t8G+=XcMi4N&KG zvXyA(Q*{{!&|-N?J)Awg3)iwH1W1A)FnnznVm(~MRc!8<3F$pH@%oH;f!dmD-4)`7 z%!X6L$Y;m64~dTHgU{WaS*d^AoV<<>iK|{A|1bA6NVXz~h_ic`V5J*p-T8ZEp$km} zq&u>hTsvEjs*)@Pvm(rY*4<*6BW_*>S!d!72572>&7at0C&L!YHV8S1H{yiR93v!% zFqL7HkA_Z#tFKQT#Ae#9>(rtev3dSTqh{Vm>~yvJ=?6r0iV%7};gU6*z$poP+qe|H z9FJ;;-O)+)UB0($G3yEFM(IDm^#saTPvP_9c+PckkfYtT9wYE?-Sm%i4z%@x^bGkI zRS0Y{_^pmSv1W_#5)oDVE}v8AdKrbVS=u|00FWSH&P#w{)V1UWBs!FI#kRG(?U+drhGw_}ufk zdX3{5#9tN?1^Mg80btuw0c8c5ozK~95Dt9ngHSO zNuZ24c{m&ofuxeU&-JwG_rc)*ZpQx@s{@LhJeXIF>Kt4{g)S$$C`64war`^-hDWgsQ}!GfDp^k$PCm@=-<73DMa;Vgih!Um z&oz=q$fE>9c}VF-ocGIl$@6@Zcuzrs6K}eKwBC|X?>YlXeHw20#xvhQYGLe<#L-B(F4W^{{Q zO_MF)9v9kpCBChVOqVOlCX1)GD4@`BLrm^p;N?=D^Uf{n9DerSfq4quO;FEo>3fmL z-SDPGEhHw^Jx9Ih$F|VHpdQxavdx^)(Iu_-iBhw@!c~P?$luqkplBLi-o*{5xG^q^ z`sNEG^f%8>i+SS_Dj~O-(>@Y-B1zuawlfiPH ziy20hqi{e!Ej#awC?QM;0YpLMfXAG{FqH|0B2m|XLlX(>_2@`S2}uDZJ~9=6hy8h& zce5uF3}U2Cp6UmkfziB#)tMbSbzxSsO;UdR?mIu_P7=>|{k-{|3$y|k=$cp+&rd4S z%*TE#A(BrVK_s)z8tTS{?zQcL^Iu8_^WgLPLKdew1;xn#VRFChwKur@acvMg{rc=l zYDLSBjMlyBVub(3%iv@0^%$-Weluu+?8ChcmYy4|RMp!pA0`g;J@LWPyhY4MC50L2#xE!`A9<=@JaXw$lJ@@Kuhz%`F_|j zr|IBzP57f1F}KdQMJ&)Xs|qQbg2zjy(KlQS{|7-QhnxC!=R6MiUZIzj4TZyI3iWc=OVY4vM8 z%C_}yw3d~FsDX07v<#^{hl1*}`Nx$`EgEL=2=4{Mro##Dmi{ulNA0T|XiFdZhb?R0 zhi}rF2@xSX=gS-Mh80`xD#}@7h1))VhGM(qn2kBbE^Z?cs{*jZPuBqF zet4b`FasM?1Te`oB%z!%Wd>erE_DcmVpau@0dUrrSZ{bOp*$QS5i3n{d??4@4bF3M z<;47-#UyivZ=t8m(F@UyCl#Uc&pqI_mu>@tQ%!RL1R$!6w2Ptz~^jXxlJD6ZR%|2E+}nK+6gVw4=!=kp_FZ#4wtFvt2qfUP8w^Igy{r{`?@K zuH)6~xAaF1hSA&&@;|OGSk6z;uAABN->dFqKi&9^}4sg z^3Xb`F{sUh)<=0Qly7(W=3SnFH*l;01bL#%l*4U!P|4gYE>2L^$2OtNL?V_SPnti%DUzQ4YbgxhxT?n!KUHSEa(kg6t@e9r0aKrpZcu&my0dm1i zVEaA`Gpk`>iXc4|dXrX62_iov$54B^dM*JrPNB3Eb1VauhH!=)Y7&3DS=NfzKc)I{ zvL7dJ3h;axjY6Q?6cE0j1*evORn_SF4{BF=J^MYFo@ZI12sf|uy`(io^9dpUSp6^r zkRak)zqO9~{BxbVR8Q11zL-}_VfdKhRIq;Y%&rF^wMI(QG9IN^7J2v2#JQ(u!K)a?RD@WxVKFhdF;r})}J&u16I)|#nMI2PZ zD*;GB`?bg7ly$uQkv(?w-ZL78@uz`*0Sk+i3C+CiLEZe|@ zJq%k(-SYXBU#qEnF*ly(?7EPgvv5R+A_j+B%hCM z`>|?d;mucaDzl;xKh2~s^)^MW`xZzt?(R@`l8=?Zv{QYm>)&4`doDbfF!zO#WDD)8 zgoxw}H+Q3#a>-EMbiYb9M*z10y)0Do6PxWC&u*S<;k!o#*lq?hMy_kn`Y#V_SttxR zWRS3<4rdNR8D?G|{k*!JiGw~5n!z>dkrVw5=U#rX-A|h_F)UL&8XGxT#`<;3X+x9n zO+nHgv_6|sDXN|C!{$GsY9Wk(;mA75J3=2ngTJO3bo7$#&fjElbTuV)A2$61}fi)deYCCkUe9sqWxIR1k<`PIgD&`z@b)?@YMNY41zl|*Z ziG$29=$QLZvu6$RRPh*4STSYg;U2F^kn&Mm8g=Cm+t)FdwE+$d7+u3BnJ^RWr(6*T zs2UW+kGK9n@>X|(rEu@=&hmjN_EjKbg&ph24Ot7-hj8(+eqw=MA^f>ysA~M_?vdPp zSm?wij6hKvuEM+K?zi>-fzY@8%6AE%@mV>9HUsSuD5lo+u?=G9apsBZtlBt^QC5c- zG!{b%T5oMiT7gKanfSGFalPyy$lHbW7LWy^Wt@#lp0Vkyja>aC-6{ z6ogM`Yc=Q*VG&3giF89p4tKF>3_13>?c$)1XVYg2+52`B0H_~aa)-`RMxe#dpwjEN zZdGPUeGTj&`#X4M0+XMDuVS^l|3KQACwn7>v%>6cuxktisXSh1SZ<)tF#{KwL`lWm z(zIji#~zn>H4mUsanzCv(F2uq|AOWyez}t2uW6xm16H(s(ieUH3I%94E$QpI1Apkt za`FZBJbEAu4>*H zDm>l}JHxtSOFoEoM~h#y^V?n^2N&AHUFu)g&Ks(CMd|^3XisQXw+#vVPZ~?ui zLFnwO>SeYLC{1L4lw~D1_!Ft+y(!1jy(e1F>Ah{~whW^sLLrDHS@|W$5^DqjIAlq~ zuf;28M>r~|r60Dnq;VyuYFRUeIda`06NZX(-Hq|OxQ+z``kv@9*5B>x>z`aaLC_=mWj2U7pL=515M}_(!DeCoLX#&@yMn^oQ z>09yS6|1_F9}V5~ktfyfYF)w#v3hgAIe0#b@7-8uC6#pT1@8>f2~*25n>1ZK3=EgS zy4_m!J0w>_zKVk5DtTPytYPFfeW~UMa($ga)8(NX)O)GQ2H(nll<*K(%H@fLml0SU ze7^gR$k;$g1;Px~oq-J$Rz@M}_t7!@bTHJ7nd?6}u@1WXv>0WyJtG-+d+dwzPA9nZ zF3&iyZatR+$Av@qv4J2|W9XcG>yj380gZ1sk}C~zI7IP8WcWU7?t0$i=?IV5UbRA+ zdHhi_tKzCRKghv1aZ0a6 z_rZhV;pFS~L%N^MWGtkOb!ExxXpq6Jv^&02Y}Fr%FrNyW4N%LG2}Q}+KB??M`7gu_ zgMU%Uv&QwW2f?Y}#vQKewJsc)_%+aExs=1xjzHUSU;QG@Am4O4`&oHUjL5X@99)Yt z5b?l|zZ1t@tdAITnmmd&$Ch340&dO6b2uNK5dT%g2hdRo*S@eUlg2?4-RD)b$lnxt zP{t6``etprF_*rwWN7EupRAd(X#QNx9Yks@J%bZr(2Y34$KbW*4gnYaQJQhLqfWyK zm}`w(m*_-rqQ0JGI2slK0YtIPjuQ_X%lm}Qsq+_3!!?=;C)Y3Wrgl*-{*!!lA5lDi z?%ghX-%-OZr5+ys{HV^nra6w>V$@@;O%qhA+^ErjQXlDvM38BI+DU zru8IQUoK99TkAWT1)N<0pZw^x>uQ$NwK<^&jF3mwL!cH+03aQB1HJMcvsvYjlwx6+ zR@IQvg@k}ae%=N`6AUo>I9PoJvtd!tT%o_um#1Q#(DENd{%z)&>fLR*OcY>pP6#<`e7PJqOV{h;iqsee!kAES |t+8i7;EX^egsm3peoPsONQz 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 w>$nVNa_3k` ze*gP^xoh3E?uR>B*?XUvojvo+>@#Q1$&t~s5`{?X0yTA?_3JufW`6kh|4BO-27vzv z!y}c@7=RYI8V}&}_x~RY0KoUKTuP09I)Ga1qZHqKFvzL~09=ekaZ*IQca1}XvdVSACHZ{}ml&>|(%F1)h za1f)|;0P^T4uCq~nIKHlw}r&spPbDK0P_dr0svu&V+Vox`acPo0hlWQeE^yiAW;fK>d7k3YXEWv zEgtaZ>cSJFfg#=XNe3QUE)wtzfX0YXEcNtj@~1JnAwU4|TL9oXuS|R1dk7H5Vn!=y z3&#Q2IrR2o^9vCG?9OYA0TIN2)2T@SeauQPMgucIi0?lo@lPL)Cm0Wh@y~=;XK&5& zjr6C;0RSby|34z${B}`A2zZ|Rzh%&#J$r(q^aLOMKi{eY2m${C$nj)99=eqJQ%7V6 zzysg{{wIB6K21cM$9b9wKw|{#J{kA~Gstd6;-D2kSW7(Ed(#WxAnR}vHp}e*>|!{q z!&+Y$a}c7%Q}$ZXpnY)bRewVD!k8Zsz-XyMkG7uMO60#&?IdyG92VQ_3V0?)IM7O< zNbFwyjg@F>-T#n?(TeaXh(s&@>3#AF#=I1|)RQf_fN8Yq-lvY^$)slh008U1SW7%v z|75=v#!=0G{eRMze*RBV0LFjdo=ai*KjEAKSUt6PPh5fjL;!}L{!bG|pGE>tc>d=I zzo&zz75@wQ6Fs#TwE!^;shR(9KP~zn;r(yI|Gf2ItY7+R;FU4SOMR*3smj3wVCQ0m z`ajLYH-1_as}TUmA^30ne~$52p5pvc6@a$ii}rt?xB$TQli2ks z-1JWf(frW>*v^qlQMver8v!0VwPw4X8vyYE1UesPZw6JGf=UL2#){7vH$dPQH3n{R zx}b#0Y;GS~UPPiS8MAeof3L#Abr2cZTWN?uFA%5-DeSjb!5ohK7(-5z4@_K`w?WP; zmJUg34HFMX6a!VF=b=JC77|H0>*6`EDgl<92{#C1?0s81m-fWuwqn$ zO#uS4Wud`e1du@B%nYW43L3vc2qp>;j0y0^O;pH0&MQcfp(}FcrXHDvtS& zF*8F0n3sC;r4`xJ_rI-+2FC0~Hvwbfm4`Dv@&8{aO(hM$c~q>DmSJ6hIj_Q^3g+1A zeSQi~Q)c~%%d{^LkXDXuFVA|vjRXnv-Mn@f3XQX-+z}WbNFp$uE&caYP-jz|BvKR#P8SIMkNt}KUH+6D~ytt%;uXC zLu-(S8pEn?%NNtC+!fKIM|IW^+nO1#;_-p7mZf&nQCr8>(7dU^z2rO|9~q)YR?{OP!wrM7xd<-Fyv$c1RP?B_FkuS~DISNxU(^7zh~<`VR=U1FWZ z_APm~77Yig3OO46FkgHr2Ss!l6y?s`- zO&U1wxZqB~T&eF54>ysM6*rQ=W8(lSF)D#uS=#L4(coJ6rUY0(;hIO)l@lxUF*!9E zAM#d+!tcT0R%7+U%up(7uGpx3x%YnB>9=m&TYT0v%YPjwx{3^`${fvVk*f&0#rZ#SSvS#!O7O(4ud~Y>Zmhh_m7d9oSbDJ; zNgUG*qn;{yPo-A<)m)*<%pEi=K9qV@`!Pdbh4Rg#NjlZC>p+~LvcA*8*Lv=gsU_9v zdGoHDjeD89hZTXv4*L6Jo|qZ6AnR{pNAVk3cWR!8kG`9qG(O{)>z8~4nJakTierh{ zY^D-Gx~H2HMz}Qt(l0sF-^nE%B;p`X^wy@X(&Fz|GYOY9ipJ|QMi%$w+p0c))by#I zwEJ^KSwa5m&PsB}Y=n-NznH&jBIsvR@~k*r!E2reb8&MKy~izkszaeEorY{&fmf!! zyeaIcqN5$FBk*Qks%w-r*Xq0dllek-FHbYr(Ppl>QBQ(}_(klCO^X*DK##K_rkZvd zs3eAN&T-0j*EOnwAj%3=d&5Kn8p}-wGwA8uXo_+X_4^)IcKX->%I+7no8B5-QKFZL zB3;7Ii)F8h%&TYNd}{|inu$<>OG9sr%leW?kwyC0HtMGF2AM}#b3~*bvT0@@BD>{a zXU!;9wkiFcqT1|c2E|8EvIpo zF^Sv#QJG;6;X#Km^6q_?eceQhrYfPp=P*gfg0%+=qwzjGp|R$a zL2rv=+~3*M5^<^MDM|mj=8w9GZ80gBss>qDHT?QgGG}qF!#y6$cS^_&Z#s9^JSk5x zpfz(@@C#L=HFvu9x9kikmuI^wp2ho*FEUrqom0f4m+ww>EdN zx}_@_c;^1+ZOZpkm)WlCo*-HL3+Qj((@4s(kKxpOJGrJ!Qel7ZfDOmeHz~>O zZt;I+i%g|A46;h`hujg^U1cPdT5?em+E^6KYW?hNON=O`Q~CkfO@Rk|L0Q2!bn{&vzm*$L9lpE%+VCO_#TVr5Co>ao9R8!@HEwrT<-T)x z`z0hpxpLOjU6V>Diu&|Xvh~Ye-SzJn0zzBb9BeipM9kgucZ6>+9irdH6s22@`(1>d zDHJY0@j`=9q*TT#U_dgQxs0@&6qHYa45p=R65(fIaq4iLMO#On zi>p-ro=(60v1I#WE3<3wROc4&$kr@Ndpi7V`=ov2`LEIlOy?4xk2itewWO*w2tH@h zY&o<(-w<^gGT3py2%~TSm6f~vncMFa8h0KCD+j;m|l%~scXz*Zm{mZ z;dMq86UUlJmY61lyDYpQatE8dPcQJ^w$xihQqRS)Y+2MbjcY1wDCZA7oWU&)4pv+SeJPi0 z3kG)QHvAJpx*HwY2%nEVnV-8|msl`=r;>zv`56sb2|4TeIhWLwm)k9~V{PiN%}hj? zS#CFniE`HOw;S@veKaFfx?-#l7INMfjIn3-AzG5G8+;vQOS8Y$Z!VbG;&DVRL5bD& zFlreT++ty*eJRUl@pS_UI{du8XQJ+cpc>bI7jKzrE7!K>Q|V6WRQcJ9i!-$0Q$~fK zhb>mYv%rpqJ!hd?ow8)jWaTkObA)`Z;W=SiV-2JJCPLKt_~>MO-;sik2gBlO&Ejqx zuTACq#@97|GjYL*wKZ!bmkq2VWBF~-WV*GuJ_ZFsDCj-I@85De?ssitD~T5-$m*B< z1KV`psNb7MIo)z$Gck}+3*8&g+6^paR~4CEqz38RsBAsmSc~)Fg5lfai~^g#eL_6=&-~ig-$bCbd z(GiKT_tHdiO2pi?y4DmTUhlM)wHiU;!+LBEAIgrj?Y~YBH2J+`k@%eQB}!1hb1h8w z&qr#295%H%-V}C7*!7BiS?Uq7xmzR;stj+2+R4dt zM|hSGepn(%;?*W$tF0hzCS8bv+EEr#$l2sm!|ml!uo_X)!Ha*2Uq2Y7cwYyL8Av(g z9L+Rs@g4q6}SaSxeQ#FFQ_4X77QxZa;zKy3kz&KaA3!1I~yM_xI0L zj|yMm#@h<7v@J(LJ$gz*Or=OUIW+xV+zV%KJ$vs*p6t}mm%lG0RD~tl|9(Jy z$ha7eEcd>Eb{AT$ogcd|?f>JnV#{SRlBx3&JC31pqZrbws!OXZ<{i2lmvnY{E9@E^he2%$kjoU6mR~!(+clZuG@WmN8`>e`rXku#$cz~3 zX9!RwqN3vQ3vV2YqHKht1ky4dX@FCAewRv=PwS1)mUJtdiNl`F#G|5V>pZ>gl1*|p24zyD%?ZS9n z@s%?OF9eUA%d^>|(x|A-Z!@IL9N)#WaS|}VLay_vz(b6KK(2w(=kWv-U0}R?Yj07w zq*?Iq&Ahz>>F9xcQYF3FH1Z$a7Tv$pE#HoQ<;9U$6;?a^2Rmv#akC>+@g}q7ea9~h z+U+mdi)~gxZ}w+b4w}5#FJ@eY9sUyc9_?%YdA}fDKI)pa#-mwz@VZ-#>#_S~GT!^z z$=)Mq`g{T0;3G}r%g>R2xcP%b{q>TpvB+p|-3X>MzII4VNY@IDzcWjP^3eH3Z7$n2 z=d62;`daqg_~B2z&-~?ADPkx7)k6ENetv38QU@WvUl@nG_|1m@S2&V@aVgT%Q`1*N z$_JYHDzkodO<|#KSFC$+Sk_TL`m@wZ%mP*J&!JHWZtyLJKaxP{19qJ7i*XG^=wCp< z2*ts))@sb@xrg?|d7F6Gm3VMyl|~NB)GE!bhL#{STqluLVjdGAgMdh{y;Ex$yi1P>}`<QUIl2a?0levPl&@{gc!KQ(rP)AU}f#rQl2nw0V zr{|v)%nQj%2vv&61O$Rj3xR-vRDe|F@>Zgh!zbYo z5Zr<}nLw9q5}cH*!BLv5{ zRI7}Wlam9SGHL<=l9qwf<;sD$&`{Du(%`}}JQ%8s0$zjwg@DRH6cp0IWe_MwK1i30 zG>xMS1Ojn#RH_(PsPvly$w*B()yoj@JeU>)0tDg)z^ICui=T;xM1;uA!s|G}$sB1a z##-uw5EfRRhzJlYU(1AJFqs>O8$8AqT&YQcr%Xl#Q(-F$E(;!no1jpj;QIJ7_3|_X zRXI43w16}mq1A5!Mrf76%P2sgJa|!()+97CT7k76!8SP9n5F_GBXNdn<(o$4qsl=t zMbt15G87Isqe>7jVFx_GPw zxWSXSfr*%-Ny!n=_`-g;N*No44K)y)u8C{Nd6}ft9#4y2FYk4qAVZm!xnI%<^?7YEpd>d-Kp{bx zzANSrWY`b%{AlPXhMrwAKqbu+Yat}}^Jg`t+PrHWT1(vkpGxGPPcfp!)?{1X?=QvR z#UqPL(n}{hXK$S1Gv(cKr3K)v8>ZQF1M-#TM~2RNX<|8=^i-Q=ZbKC*Q7>L#jDMe$ zCHi{S`4YDN=i@yl{nmHqhd1VHYN~t1g|kQ(@4IiQq`Dym)V75-Y+HE>~ot=W6Of_k+B)ods#ac zXFgW9c4JnG;(;fRtoy0;H+~exli~H$3Dci0vX>SaO7@W6Z|%Ro<{i+J=m}UCh*JK9 zh;`iZQW{Ly*w~4 zzz$_jBn-AvW`YJ64k`7Un(DG@nNg{LpAwTUQ0^&dvEag0@@H+J>ZSTmX~Gy5!i?&N zlcz8R_rs}%ESRkNb<(5RNK<6NPnn_LgrB2dCn*iC#R*O$Pl3Wv`3oUz_#Ylc3BNg# zbi8wI7~JG4wd5&y)zFm*O`de_&MftfLz{4ZZCSF`+{Me|P}T@jU7CgPVm_@t-uIOD zxk!sixADqYz)2}&teNYo0)?Z=Kw@n+C{&&e28*r;DICMVH8tjZx?-79LlZbjpjt^G zbv*f|i9Bq<{RX5c6ly#b^C{^SmEmzdS%m^875--@KQkUoDfGgyZu{}Ar5)?i>54>X z!kgKfV9zws6qPjsmyfH%ii~H84}Mt;!Y1DvzE0mj+2fQ%43O}${tXvhKAt9RPSZvB zT0KH@Tq}_RG+03o`eMU3CZsJK5JE!0Ju~^LB5_=4(SIes$EQ%~lRyxsE8iJ3p>5iL36b8a{L8X72Avtj3ix-9VWQPus? zx0v-W#g3ax@aj?!%?dlnj2qhQg!+0GojRd$)eshCRtGI}RvR9qk;${lgwU(_s7ZEB z5-?IGcYpxml4k~MajiE=u5q1>MxTWq6NL zLftmq4^cLYDeG0vTbY^ojqO!UJS+RE?RzP@_UpXEM>dtsdd+J^P4+w$?j4Egle#q? z_=Q!x`ds!M4$$`}e)^&s2p`j1v1->m@Y5H|j6lDRH*3tgbk&Y@O;*dH>)eDW z-SSDD#8yzbqQd>D+SHOMtiF7(0xFC*w#pU}ply(H)~L@mKqN>YdJ@G z1EC@`skcdQF6ctQ4xPS?qWDsg$0!~Uxrr?C&2TvB}n+Ml%tFS@j z5ghr2>ScTp(Gfa@TCk)@6v`Z$!p8Pg*CjyVAPp!SuBA-cZ`we{3{Gb?A%LZ@c-@_q{@6G#M*IT05Mjb>wm2Euirfx2w9 zX)qXD;mT1AuDoelzSiIX1s|IN8y?JrlM`eL*Gfvn)d6Xhfd?TGfym&(@uc*Grve!o z5uI;5Y7pF*{B+Zhtng&}(^X@bj11Qbu2sj4a(&2Gh)-uW;YdOa4yH)MbwZx1>ZCOJ zr&>5N5f_e%h;T{8G*sVOd*; z$SJYy+YOjdVSVHaJna|IXeIstl8PopkF5e*_wiVHv!5~S-7@C`n#NWZAWkUGyJaY7 z(C#sA@8HyP5cyV<9~Vcz@im8 zHM(LL{%4A%jwA$Kfa=OY$eblST=qQ+odIgFv!_@VF)P-|9z-Zvr$7 znlM3bzGv&T-d3@>4kEitR#V8`iMNU-6%IwB8YR!z=NCLoKCHhTrer%!%C*ttlhfBA zZ(_G6Oa5RW#1V-HAFZ2X9a(nR`E^{|q@S_~{^Jjnf@{)V= zId_0w9yv23u3R7^`o)Prv1cr;%(^>3N&jwmKLCfZk4P1-Qa}cSgL#NC&NXJ7Ed97D zm>f!p^)6!0E#CX8=<1G!s*Dkr#!#{)aPPY{igZ51#9wB{6V-QT^l_rE&_EWes-~sD z#C^uug54A})LQ^P}bQPT_9a?AB*Y6<+;xrs-p%?335qYh7PH}A0;lF{O z!9ps$4!=y0^i=sxTw!@lqc1;lt7Y-x^3edv9#!`G)(JcPZf#$#N z+CzN=fp$dWwU@tqr)!Ljl6ud$eIrQ1yf*^NLNLB3)$@c7*Q%=_hh)LS zbfw(1$z1Snk$yJZc_y0COuznQoabzK3Nc0*Vq9)iQ*%dDhz82t2T}75;cWPF_olJ5 zgJmUUT0r+r-zT>lb>-eNkk6mm%(%Mu;BIA)c^YAAZpWVof7adlDVCy(dkFy-a8z6t zEK`JtN~v;1i`TX07v^)Gv7nSeC4fEHKVkZ~uj4@8)0AwZt>v9v)2|<=zSEkq^C|Y_ z-+g$-x_MG&4h3)diuAZyD{+J)31;dm-+Y&T+rD|8ndqDSMFTaRLCU0Hq0GaX_6iT) znYXx@LNZze!F!o8rLrhltUy6-_RKmWcXk_-oR#WDiN0aq4>wPV@hZfJm`icmFMrps z+9vim3Ggn-KcI;k&(%|^az18$7F09E@yYZfc=`4du8(!P->IqZCqqz4t5bPZclJbu zM5uej1Iw@Lj^3I6sV`H)Ugp1>`@ZhehKqXKrq2AO?j0Qnaolg|l9!h^XjJ@I{fh5L ztyfRhz*Z-D#|FW`0pAsbpEzJnlp3@CvJrZIncw!hi=1wi2#@4zvB^6t#jpF8)+9y} zZ}26dS?k0JdDx{&rmS(f0W-5|Z_;ly=Uf{#ky`jNrE<`U{_92!lF_k3V19(Dcz#4@ z=83oKbH$~v_=S$2Uw9usPK4XNurK1#N*UCLAQKQ|oi5bCEV;JB78R%vKFj{`nBjqB zb4KHeVW>p~h2C{S?WW~-c2y@URAB&0arT?=^j(&VUzRWI(kC-sfWUr|9dQ4(W1@-X zN4VW~+LX6sxv9lD)wD`azQAB4BMQ|fI*rprXA%+$Y{ ztlBx6q6oD=B-k9vC(7-QAD5OEF(@ly;p6F4dOW)=s@NPY`rR&cMQS4L8eT6K`E@td zOG);(qh-@}7M*I8%L;@pum#AFJH}HxCFA8(sjt5|yB`O3lg~I)w;%59`tfQ1%mMAK z{NKCZb-xvI*n^1`N12&PG4*g_qZNBhY{PCKiu7uk%wNo+%@Ud-sIbu$-mteQ#&f9W zDOluT{$agI426tEyo!oxhqBPF19$7LD4LETE*d>HPl)7h#1%?l+#3vG9BRb4G9IC^ zd#gS8se~iuy}jHQBA%a!@DM>YE*M|eFD2fOJE)%2`t+Fhez+952llXz*`bufnTa>c z$#fR6cFzp-Q;+I|hR0*6&yrVSGCgg{iV;Qe%^Llvjr{O5r93Epby9d1ZA}g^0HtYU zJ38{_p(VGFj8~Kz{LMkjmh4~!) zyHPA$!7&&)8M&5cP;_i<-njTmRdfn!*U)b+;!W-8bX5=>LY*3?4R;R@Q?DlT15f+T zQ{9&^L6^V>W{ZV4xzfbwr|*>B<)$KtYVXxLa=xGb9)DMg@rw~9kK1ZBkXJ|J=ckso zzJe;FmA3@!Ao87Z!g6kU`hDKNTiv_yoTzy*?3qI(h@%(pnVa}rX3)uOL&~^;AoFKP znE#6R1$UokVQ=X#>WaS&!?xK>FW+<^T0M;{6oUNB<{j8Rhc5sTF=2{+7@(29iXL0}LP6Uf>GbIK21aOnbmq#eefW)!~n` z2ixWZaQ%1vCFQ|Et$q|`WKxi7hD-1PCqE3HRC0(v9KADP-@I<$ygKEQb$}y7oRnt$ zBq{tNESd>9FXDvBpj?YM&4(e;CQrg(rvGQd`18W||FA^IHMwiYOB4s@fp1=64WPnZ zMP6ph2FQ2MizJMorAB<*;lG+j|}S& zv8I54oNlWYUAmyz$(euf2GwaiTzGbI}4`q{- z@>$T-tKo`?l4{gYmQ zNR{XA?$1z}L6#u)%tRPOCWH(Jd+58(NZ4xFc*fhv*-O@!2QjxRzxYX!z0f|<9Jb&0 zl|pD&C;jaTUTb2h#0zKXWx&Y2Rg{3;^_*4GMyrBbk*dv-1$lYBG9stKscJs*-ajzK(YV6D<-#zh4o~2BTuTu)+z2J&2{`7 zystHXo>A;=L9{udyNKk1WOPn^B&!$SosL?F#IG>Pm&$XM`66n;T}K~9l;tEwoBS+A zOUT0Y7d@7I-Ef7tofl&>6OpXc+vM-Eo?2N)J=79U|Gn*SSPUNyCXTpCKIRjKhS0I= z@44OmJ^8)yX_QTZQ~7xR4{7)-bbp;tt%2HE%|h)IN}G?W(^?DFhGeD|)fw(xRl}`G z#*%me?G|BJ#;NHXL-b{iQ#x4VKkQ8B>2~!@Us<^>uXB&knyvk!_W967BXFh5>&^YD zWpa9%nGxN|i0Opm=hd&zJ@U7Y8dXvJb1N1^v>lnr>XaiVw!PJ#i=S&wZ~rDM`>mK+ zv)a*pcWe`8xfN91m?*+QY&;c&tzX@H&N5!sA@*mVqTrJq(Eyq8uDDUh+On~|Mca5f zAuUz5*ILt7l>NyIRIHNFRqX={QIMaVexKkgn$2rpym^bF4XQ7*4qS~tf!|#&(Ar!2 zUl>q*I{$sdxw-#0X1RX5#gLI%W@@jkM?mDz(HKWQJw-<&GLM7ECIoX58-Oh2ll#!C z5s4Kbn75bI?aFcM6hhD95QILMJSH{8Wy!d|E9ca zBm)3p(2e$D8IQTggK2)~lUZ5Ci28}B^GJ-1P@%IC)CZJ5^R$QqTjzIl28^@|*ZvOe z4LF9fchp9cXnYL={waav58FmKuXpQE;+(S*!?tB|J>r5q$AE zR9|LC$LKxdH~bjmp=7}@qmLgBfMB`DzoS_;FIT>Dyz08uHWf>IVN?kJjG4-J0+U+H zk1faDcQ!}@iAYv*ss0S{HwIR^a=d+K(_*MJ>j-sP(VdZ|f*uVModEo&`mtT_7sZ~x z&Z3d{y)v6N@B0z|qr@=r)j``f+H1?4cd?_nQoE68rdPpn{F6CXoqsyg_V3*Lk>nAd z)L95$gv9srF>VYM9a?;$(?$+pS;q>?8-bX$DZuSJCf(W8-SP0Plc$DXC>vkx^a zSx3|$p>6hGB||pdVpm&{oQFfU#&p@nx;& z_@jPpN7H}T4H}U}+A*IW_8S-23CP)(3kZ58%FS*GD&;&cZm(}1d7-b^|G|E2ZdQOx z?ossbXds1YOS^M1M8YzAh$+&8tVp#gN>V@#Q_PVwO-G}EeHbj5!XmA%_iC?uBSOQJ z{xwO+Idc`+kh^5z$&yOV&C(nO{zUb`2d0l5H*MT+hsK=!9Av$$H+1bJ-0ov`TkqZ& zZn34Uv2!q;t78-rlSfRX0VZBe!e-G)(6`XgImRLCW9aq4%qv=kg0JcS(BZv&et&0s zq%A7(O>vJTLsT<`(Lbv;PjvdkxbIC&0*Ma4K(1(@>k)y*S-bGp9lf)$X7C2BNpTGQ z=DDj?&G-9Lt7@;N+t6a@zs8$5I^^+a;MDee?auG?Y#j=|Kd={_^=h?`;ot6DZhlL; z*=M;$opDLqTfJK0VjN7(NXlb{D zMeSKFLR&0lNh83^R3uTx~$u&TN7nI*$fGrINztCL`_1#XoKhmD!Y(6n*{KZ6rst%>4j zMi6iR<1KMDT&PSQ6*y!fNx&M)?n{8MVKY#P3H~IgWfS9&wlXD<>dgxvt(4P|6e(GL zehL}hVHKIW>F#6|nH4%|zuro3ar|N*X(yb0`EpuoQ+XUHksutR08)V81#T)zFl<^g zC@Cu!F*t_n-I9tCq0>$WwEXq8-Bg#3{*H(&p{6x!uJF!fQWi-Sf{YYg_2%;c;gh^>%Pj@t1^nm-(F-v z(u>+GDMh>;=d23$mfhPaD8|N^V@otyr)5OmfWm=Zf}FuyKitG!vV^vme0u*XIkhJJ z&eP(=fs5vZ#-;Z{aSX(0#i&(`-Wt%%erhrAvm%}{rknhVP7niH%+Gj4ep(j&*r*9q z-EL!3Hqh!oZg}@7*R!jbL;s3*MeZ!#FK9i!M3!x=$$mXEe9-)1qlG1S?qv{m{k_Kn zarUW(c67GEZbx8>KibwIhvK_0bXtm8!Y&pS8`(s`EV`-~^at;OTq#&2c28ajHTxQE-;fuP zCiTAoBRQqzU`j=N*lv+EByExOL?bO2(tvE1klPGV4*Z{I-(kc(cwEJhIq&U3ik3<% z>#$~Rlxn88{diS5Fi0l$XtX}QoR0SCQFBlSx!ld09-4eV!j>tI@@t=i>&H*#SVl!}6wuNbibR z$-+6Ukuq3kZvxsKG=}`5!lWt+V$CwuW!a)4wNp8Gj!}1ApY`v)A^fGWXD zIS0WHG2U}pkbtsRv}nU}10=GnLY%u;RJnA>N!G`{6S~TTZyfY^Sn@<67))A1_%k)8 z>P|kM-Q70H)k&SC42(A^V#~)VL<`DMKkQ(lPbhhQX!hXCi!V!Y5jXbGi36m~#YTrk zye>yWLJ;m~)=tL#sr%XbvTP^Eq(a?&DB@bSQ7{1`W}gZ87)GY$m-eqmHz50McinJ- zq>K<=J97wHj=vR7WsFP?>?*}UjcWW3cl@tv#fr|K6d?-1OvEGdwWDB04)ut?qEkV?7Dt3?p#N@z2AWHy+9kqpkE0iwl=V!1 zr(3}15{S2hO{wv5MkjU0fK%J*>14n0RLH%}lDU{e^*)^DcfNT}-KxgyLyH#7ZIV0~`<)16W!{~Fy^-_8932RZtN#i($BrChIa5<5Oa%#YYg7+FsGu`CKAB->Hr2tJ5 zAtU&db3e!k9!1doY*6npROA2h51P(?`1fI|8T&()1?N5;OsIe^Rc70WYVk8*$%0tJ zg^@qL*?L&x;%@g!=kp0F&cSs>Dv1vSGr{8eGHN%0FC%zo2j+lcvF>CLC3L;jn^Tl( zP`K4WlqL_gx>QMo8T#a4dyjD}QVnr;Lmn<>r}gipR+FsdS&{jI3Uu5<@0zp8NfTu7 z6~I@bcL0s#9X(MLP;7n5DfDt4c3J0eM zG;2CY+VXO5`>5J_ObDrRk;+8H8_mh69*=HaNJT=*m!Kp^O{{34KsaWT{DweTZ5@uJ z#xP#ZxVllmWnlWh|mAMAeRXyX=hSl2lEhgqDL|xv2;1W057SCr8`gLD@{abR^_0oE>@`*z8wD6BVsZf)pFw6`T&m0255456Ge? z)=DP>ujZd8k6bC4#pQF_gBLe*qf0-lsZUB-RYTY&uQjdCfcsxpsLIX_GF1^}9#aT1 zxu5zS^*$S3A00o58Jl95Tk_c9WblJ0bS?NF(0T}786z=C^}my2Tz>SpGf)$IE)57z zKA*HEq)TEXRtS)akY96~f%9Uk^8c$RFy3wF)Nsmb`hG4E(zx)@uw zJmJmI&=QX51P@CV>+$Dp>M{X5L*_CM7NK_mU zHyTZv^iLqC5(}p8)zTk}-Wa#E=~vX$36;8jk-(={<>>DPh?3&D<<#>qqZxTj2UTJn zN6xJY>|8M(WuxjT6`ucP8U|CaI3ZUk!&o)bl?I(%hZv}89SBfKoS5q2->5J&OCQM2 z5}584WDKRdqHSaWLp$*I46N5C$RxQOdea;Bs(Bl=+pvc(V=d}aHRHaDUTUR3U<036 z*R!D&uSuhIA~@9dh{^FtcnP((Q!aOvLhR(7zQ~r81ZiE_K*{4G0TK z(u7EZ8J-c>c92U+J;UaDscwA2yc;3MDTiIGrM{s~A-iqLNi2d-$t?N97%I7(iQseI zW^#9M+Rx~)@Q|YIC7J6X(oE2juU%9u5Vtt z^^~i98Ap|vDI4~kaj4r$nu`oNt4aO-J8sp+wK|*B_^7yz^|6HhOb(5VR6abg^^C~L z_$7-uHJVi*n7U>uF|M|Vssx0S>A5rK1eaE?)HMdoXu6_|XxP6k%(V)7 ze5&|+ORt!teLbR`oQGZ}1Ju7w#`AEq+v;hNZDcp-^%mdKN{gww6D*pX<8$ui@a3++ zBK4C+kB706oxG8b&52&be`r5vP4mD!;J>rG-k*t;^DN(td#>s64zsLN;^^zOV5-N` z^2!(aSu%R1sxPjapPFCj;4-Kh8BDW-<?8>>C)dBhoXhb_@s}*8gJTC_~bT! zKX6&8;{`N{Ns|KdIKN1%aR$-}WJ{BSk=lVKUHJc)futRR!%eL0uCb?u1G|hu;I;+6 z0OkKC!b0_A#l1& zyl`{t*<$msog4WN|CZr`@O2_77IZaqq9^~kvtJp4?MDViw{h$`5L)WrVDUGAFZwoD zZ6FuOhc6b#rQyetM?)WuYyYIC;B2tiqIRQdg2V^VZ(7E%`%6#kw;uVKkk?ZF}Wu*l7L-c&D{ZP~cowqVLD5LF)hpco&cQX=mS|r_K0UjAZv2=fBcZUyj6@ zSv}oyP)|3PoJsIIZ-G0V>D89kEXr2y|lWCen0f=cc(hE`qK5M68 zb@zve(54OIX~BZuI!f;$$kFemXtZ*3-n>&?5hlulRmY!-^FwIkmNGgtNw%N@doQ(5 ziPtT@3}#{C|CtjnYwmEXq@nuV^J}8e=OoGSIS|i{z6N-bQMESwh;F` zABn?G{!Xg`>ENcTkSR^W7fQWBco5Oz@1M5!OA8i(2g!hmSRa{B^5ta4*uAqi4OW@u zhbLd88-IVfR8*!8JeBcx34p3#2NiqkT?)v_iF*FN#q7c+HSD}AyxnZ*7NNlo)hrZ< zQfllOng5l_&yV~2F1q{S!)1Ga{+Xvgp3z>art2a3^LV|ihymKP!vguge}&Jr=8-jX zmo%%-r_xjie!U=-v-PH;akv&)jZ)|skpJ14LuBq|O}f>Qm~7#?DPf#mDWa+E&4Nd! z1s&O9=iN@VyMI+*)*Db2TNr%OLXEp;uIFTSqTfZ`V_SaGDMm5+qA1pj`n&t^wUKLG zOe6Xpt8u@9Xn(@$WM5f9h%ypnpR%swD|a z4h3@jM@i9gBRN)OM1Y?(aSM3+& zSBp8nP}S?lyCir~`OEL^ulw12eEXuC3GS0N*qflOH^eL5*=851>u67QP=a&BMe3f=glC8>f=z4Jxnlt6|rH-Hdk}OLeWulBFm1Mv9X^2yut1p zw$IFx&UBt~cLGo68jd21`H^2?Y+k9n2fQ8TBN_Ld?`@Knd)Rn)qFj{BYpfn<+|)SK zzH5l1k7mV81;*C+hCO+3jDPw{(CUk^Dg4u2U~6J4F^~m2Ex5kz^g`6#)V*?cuNe=` z6QM=Wo_^B(>x;Y5>Ct{?guT-ccpyNa>)ySvnmNRuOY{62=6;}prWn9U z(JhDY@0sxO&5q3CgNjgqK&_NlRY26pG7azb*>Yd1{RSx5X1D} zX}^ANNwLs!a5|x6$xV#BZfr8HR@G*Udc*JOhdcw^bo(Y; z+u*j9Nk`HrQM;ZSA46TAuH@L{*fyy(Zr`Rym@14NojCul)yLGk;S)Sjm-`kok_A0o z9JuRB?c9_~#ewT|KP9d-oh^|@2lF|R+j9N2QnBCmGB_91i96|`<7Le;a*3wK2xD9A zH#lK8tmt`V*i&lsDuwjVvA>j8Mn&RLyYIG*z6bc?VOCWCylw1tiTZIzwUN#0(dGiK zmwa$VOVdi(aAh%!aS)t-bW&I#xa_>Fo)J#@m;W1^kAuQp+pCGnTmGvs{5_XPC!s&b zYoj{hydt;fPKJ4>8WB>XimHBJ> z$Ie1*!>h%o>`P_G>qw$3b|jff(6T%cYBwQ^DG3NAaSy za7X(!DPqEU6a4~6s7fGjPa=ArcvPe9F%z}sL!C1DJPCSCrY!Uc^j zzwD?fxD)VL>Gu3tGu$YUC(1M_KA@w;#Q`yR8j6-D|*L=JkLptq1(|us8 z-ls#{gwArE@l^Wcr%LkPeDeuJz>V#e!Mk(8_V+3sKeYyE)Px;daUnX6Xpk!r>ML3P zr@dGH^!`yiIBOmIhOfS3+v?}wGdoS=W{*td7{%&c$E_15u$G`rG;8UoX6x<+K40+) zz$1y0>%()URsItD)3#-}N-iTRj27RfIdr3{It+GhjAysM)%~P!l5kr3IP&wg1)bpc z<#q<&ll?>gA9hkUbhe)>AE*rXmfOq?uro8ANAzBvT$^)iIT6Qps6XY~pFJ`96zPg5 zFMh+tJbKFH?0NFzLmwfXI6QV{>n8n`7A$g;8Fg07nqZtXMQ6{fTio`~TjB0$_*`gv zE~1+WONY%WLQpXJ&axK74ju*jX0mPi>aHDhop$t3u8EOYsL}`aPvv4Ok9-3E=pWbo z<9LBX9`IJwO^R=nv+hxN*5cpl$+^e+=JF?ShhWQx8Cg@VX*yeiqQRTv$63#|cbZmD z-=37rEk2^`&gAjQ&rq&#@5JYIutWOw`V)26ZKzJrnCM#%D|`iRvAbK;UbK@Eid3(iuUr#cRto81 zZptsJaaeZgzw8h_eyU%w;5QqLO|qjP5zsmwy4`w8Bq<>W4k!f5>CUDSQ5hSOVLan_ z$S@SV(5L>^wninNs%-OIUq)dL_NAdcd8Y%k^N)Jyv%EODc@ug#?$C8*x6`>e`MljdTJ!stQEpLW3X##ldt?fVEt16vaTohQ`)c&o*IF>h2X#`(te2cN6 ze}!#*YP>b8 z6l+d;EmT7MuJzq9OQyqWrfreXdqD{sqZo1H3>?WonL@6 zdWwMVoD+q3g0ZO2g0LeqrNv{mG?Damg>~KC!yoyRhd!K)Qofr9o zX^wb`HlXF3x54KHnkG^w0P=6|O7M_*e2p=MpzH>W0D^KfJO^6+JCPY!bN3!?zwbO> zx$*Yxp;}DgJ^0Iqi^_dfwt2&`s>{0O_b>HT5TRlB<=ObIOT7;kEz~;c0xyfpyFn(} z97c2%LlpLt>Mc|#AK|kIJt$T9KA;YNU6YJiQORinRR^97;i;*gxiK=cW~;$nt4(^^ zNr`}&Csx&yC+tP}4sdQ&Y@Zh@!P%8Q=nbpO`+FyfgNfQDhfBsGzIm$`qmkgawdt#h z8S4H?OUTtCL6x?~@vn?64$J}f%T^oSkEVCf-ocld47ely6?e8(_hnHH4Kxwo$Oyke z5&9y18+F(5Vw47PvujrdMKeXy526Q;P11K;G=GQN^QySB)77yY85fGik6K>wMR142 za;Vp-V$nnBfBy0=_cM14e8wU(mM7@~{;_-y2bfer)?9(h|ff#j91m?hgsZPLR&jIJo`Gby>iX#eU}p6yu})$e1#In zS;;taBrO-&bJ8G5SNzZANeYKUH0 z$<%Kq>H)IVK-NJbscPQx=ko0V6hDr;=~angsTonqEo!r-TnjCrH4+6J z{frMKaa;?!hA&MfF=B_n&UCujp_n}lW;r~9`sAw78E5y^%yUUMb_71FrV-@>%NZ=S z<{KXUuf3VLEGXC&&ofWWidWODTtMWppFA?|=UuDnT`MkY_5s*LwoB@Z`#F9Jk_dp@ zcUWxf*9y_Sk^$JD7H1hjE9rB#G5;B-eU`W4w6yR$TZxWitJ?XXZ`tDeecmME@s^Btj4HLuTM#KbtZr%KvF2hk+}}USWLZ z#La!&_;Tqn?WC%v`>RP0BaDN)ta=6d&&-f$)-j;pj7}QC+Dh&e@2dT5z@XWThK zC%z<*Ab80CKB<1{F~<9cR0ErI6LyViY=b{>PeWtdq`RNn(z-8pdRFkc@dJZhGMU3^ z8uU*`VEev!klezhCMn+suhA&k%5Sk%vi|OVtJ2O*nbN0J_UdyVEa^TV4_p`S{64So zxCeejXk^>2tm?Mv+beQ=+XR$FIG~K=$Kg=h+K{>$L!a6kcU@U>6pY=ac$aCtkXSVT zDDA`y98l~AXiRxO{8&tt#xHs*7X6MEspH$`ag~AJF5-atu4mR+-zN>Q}-*>*OfU*Ljfe~_0{4;5ZyOS3$9Wv zhr7F3*gYQkIB#epuIhY{l6E^!{`y^bu|0&rO(z7FgnU#o?oU-I3T;6OAJJ+-Q7Yq`&oWEk&^7|RqBz7jDowlDWt~D`6Q7Q|^#?|^{ zzNi>@d=k!>8G1vyMVPRZ6~m&Pd^WC9EueyOUWPYZxYw-EDKA;nL=V4*yeHba6UL44 ze4upLZXN@lHOijX{Hjz<+m!Pov2ZQpa%gPo!kD6i&0&&qJWu<8hYyRR^ANcAj+jz4 zLuVvfD5OjysJ0>t|{15I_i~;YEwOgB^-BRjzqFxIXm{Xacp`6i=S=TYo)l9XGqOIj}Ww{$C!^ZNn~iF zh~PQYUj2^EzaIVnJg#zPi9(ix51oA+-ff)pEcuoKz++r}xj&)RDo3 z^1+IJLO1e^Xh}g29bLO^1?e{;DpyNgKO-bDu6OePG)A);$Bx8S18H9#kfGa&_+R}w zIZ(czG$*K+4aa^KcxC6$XDmd|NYFNWy5pyK`D*<4XV_v7dk!h*e%({EuIFws7mRU| z&Vl0CLSe-9a)6k%u26o5&U1CC3psC$-qT(mzfU%E_lQVwZ+Z)3Bywjz_KWkhpJhSY z;qmW~9n%OmbxXjZK7c+6iztJN;$bg8w~nWuH#I+QxW6@yO_Gx@M=JT>*FIc!ydl^5 zi5GPA!%(90>cLl;6K%VVG5W+mr2pD2IyRW!h&G7{nVjrb%Jzm+EMEv+ZmQXgTm_DP zYumOjqGZ+f&+C-RISwyq$1K~=E;_Mk#&J3qi#51(XB$7B(!^!;+y#8Tt0(exO-IGt zj1$+jW&dR2w-)LXyVAOqz_AT!hg7yn9WEWt6M5f5sJ@{k*Rwx2Co|L{8Qy_^Knrd2 z^Ukj!dOO~Ai6v=$iyyW?wd@uO`0}qL`@D!(w;0D}w?~PTZ3vPak*_&Kmrky3^&Vxn zUX~8%76k~O+{Bl$^qSc#9v1b^EtxxaD1^S?cVF+%+g zTQMr`eANO>bUx;8)n*3#yMrg)gAh(64W8|)XQRaZ#RSdsF7oz!sMUCPg~9m*6dE!` z=U8aaP%z`zY;bb7(EF@E053Q`=!yP;)w}JCP8z*_sh}7E&5zsB5B?{E>z*bK|v5jtA_%DASp)^Jzf^2(q+p8=7<7;OmJ zsg`_;(1V&YUoBe!K+gsgqJULXM{=d)M5xE51srN`*DVI;tWU=kEBwpH|hIbe>&e@ zl~dV0Emcs8J-qEX({%p5?D?d$x+y-T%2}Pc@(WOMb+z1bErD<3qkPK;{T?-Ct1gv4 z8+`!#`irPyn|bk3Y5zkO9cKbNz+xmhz)T%WQ1+DSd!>|H0zPfA*Ouga4n*H%$6(#k z0Ou|v%tUqQpBPBt>To%~~EiUYIz6;*+Vw|k9o)f4v$wSM=QcH^KctGW8PgQ}yF z)Khy$>Tdm=wocQ7f7!V&Lz;X(YJ72ZSXjA9_Ez?glbFt)!3txjTDxjsX!b0_KV_?S z#q(fYE=eiKJ!(9p<|b)RcQ4X4xIK3<1^^Y;CBclsA?t(A6cfbSSATc+@%+%03S#7b zj^Z$+Fa>xveL{aNEG;ofJk~we>e+p@*Pj|dgh}e#kcSXX!;7*dKyKnvKclDF{PPhT zXp@r=zbW)||5zGfS#X?|ktN}E&PlW9XSfvr4wdT0#DAti!{$TD*?JM|<2x3PYlC0( zkCy6?+oh6lQXhfB%plYC{ z&?AlocR}Pw+~|H!pd$C;nLrp{d&998jm2J8nqMc)*f|rHq7cXA;b%1Qr%i@ma+_Bb zSC6Z-?dZZH>B|Q$O;g0@=8*elS7Bh}(idWpD`MvMT)NB>f^nw6)4c~C$QU z)U@v4?iAfIdRl325h_1;0r&b^ar>m#-T#-3kAM?W~p za7@N2$->gU*)J=d_owAF9xx?54V0bbQ^Utj-^oAG^&~@{9gsoNq%gm2^FGyHBqluS zQLdmzmMil!=g>s$JwHqLpZgspFJ($Q`$Q)G)+hgJp^OZGZFBFq;o_9T9$!rob z)SMA~OcHag+|RHt#q?`#c@iCSA`+06`)ZbWzjF4eXM5#%45E*@=|qT%t7BcXNuQFI zw9O4Xu25=T?TEC& zIZ16hxr{L92M`Q7aU+sM_$Mn~!s5wRF5VFLDwRGW0P`bco?QK|8)@>YB5w z143`iAVR)pYyLw1!He#SgCe}GP-^GD_ebbuc5%LKiOTcro0&Ci?+XqcJY4HM?2eim zZXXZEgx@I{9oeUM5&Y@cDL{ph)Qaj|`0-Z0bpM?qw(S7NXn)@Go%J3ST7f)g(mJ&g z9OFpcuNgeCNkNw3WUw7;zWjh&wFQ%^XbcZBsp99)LF?u3hZuKriJq_<5rodu^lOoLM-*LG2rQ%W? z%`HeHm&5wijGFpjgapRxrrl2R0nbJ*w$bqT=ToJ7>}T|Bq8!hE`(ht$f8b4dj%oeb z+|!@9;j~FO|4&)(YbMS95Hv17Zu&ba&yAQ?oaOy zZzcdY5A5`54u6BDXBBG;X#>PwJVRj7e#O#!)Clb1XzXlS+A&ZoIB{=3GJe-l!46}& zUmFn<9J?=A7w&%r>-4ivJ$8X!A2Qa(sKajK6_;S{-|cusr%Xi+8f5o7LXRCpbyFXx zJXw2h1XcrRA__~+wEsLL>nc5OU`cBa|1BqZb=RIABniY)1q2a_Rp+6KVWG#hTg7!B zUcaI*yB)VV^HgfuccV&qqzG$9Lcc5udbG>YAX9Yu(4$+toS@F7-)QS%47%_hReLrq z+YQfg85|H(8dd@ihQddl1U(^Pd1&Iy1S(jS&tBBJl*SPIi>l1cpK6zFROpSYTYY39 z;y=LJuOs%$MZyA^p4JKyHbxe(IWB$+jJ>8jx9}(ztIBmHqXd3?KXrA>AzWcM?Lsia zg@$pP>xg*5!xA26zquq+Qy~bRKlQ_h5-CL(180nxCt#F$D_ATJ~XF)RIYnP0*feen4=!uJ~&vu8uehr>#z}3OY z`AUbq$Au1zE;#XyDi&_lB%D=N3qVI0*mO3D4OBx2;2+WXvFYBGOge$lk~Z!>O^AtM ztY4Vt#Hm2ug|v2wTLal?DLCceSm(kRA{zD8wQ%gpipN=I@6WmE8gNsRL7J;@*7JX)`ar2z`Bh=GC94BTln0J$%&3NXX+aZ+%!u3s zBqvJs5YnuYB}A+PvQ@ysO4;~u4QvgtIsvRtQa)*r5Mc_GQiE%VnX?f|C3Q)uNz23N z8Q%t>)Zh&I{y72qrV5Ziq*V0otqel)5VkeUWLGf@~I6FX>h!w#e zn;b_6n3Spvn3m=;A)1t`1`h++QDcjM!EF&J9;}?a2v$H5ARqA-gkV*ZDn#Lyk8K-P zWK0rNM;O^dG!0i71S|kdIf+=+;3j!MgnF1P60DZZ9;5?j)j~kc2+h9M5dv`%2+_l> zfc1p1LIvSe1%Ol)U;&8id}~5b2aGTV{0c6F+lH|NbzZS(-=#`DSn4vr8b`hisCNP8FP*=BJ2B@ zfYK%b)$G3{PX5^%6p^jVXA(dOIQZWWC^cE2W3Fj7D8_sy{#hrK!m^0?eA)k6uqvXY zp!EMw^}7E^ZRs|OugvQI)PRnmI-)>{VPfw47-b_c8J};1Vos;WC9ozKRCKN$wyj^( z)tN=<{=dE^QF2*_{!?P|OQb2;e{uy>P=sPuB_aI%%Q`$*Bqr~GjyU4~0GaS5oj|$4 zQExT%w^GXg|B~RV=fj{f8#&bAH58rGQ83E>hvol=(f@#F;vZ8fJ>Z{pPRnPNQ_CkF{;qf0R@g+Jc&SfY8D53wep-Oz(j&@%) z3K13ObPE;@6w)lRYX7xxLQN9cxc}frSxNgpB8x&gpLO;>L(bNwZL`S2^YU3#oFYxN zW@}LMP2>L{{ZI**`+y{j`w)s(Sqb0i8|1Cp%;roACq3@QzcBr_3$ua`oo@FbInCO( z%+1ZW|NJqZ;fVbh>6>c5yB8T}rNHXtQ8~1<*SuK$NhjHuy)Lh_*NSmE`ZVsV)~ZNI z{Y(j;_sc3Pwff1ST3vQsTb+7!IkV~|jRd=5^#qOl>Lu$X8@{1s4m6$1`qgCf?@Knp zYe{y>_H%Z~(h?2i%zrh8O00`#N=S-}msA$4C)Db7 z<$pWQX&?n=?UzViO=;JvkpAn13=G5>MTAIcsWUTu{(PJz?ou0on@5nZ*Gb^QhxX1% z$*jz!$3|b7(6w1wx+)^uEPy-I`g{XJm*U6E8NI_lFX>W0^J92+nGOyQ_a-K)kz?t& zC77w9v?;A$&{(iCt6yc@maVd$(W$eWTzF^yXRuLgrIAs3H#^@Uqb;h$*+F51kYtcg zj!z7V3q$@2kOM%t>Cm|#;V;>M2q+`kbG$C&Z*WuElIN}0dJ-MfwWD8+E$QO8-nf7~ z9y*6!pv8AdVlaQuGUe=^?Hep@QTfrTjWkJiwbR82S%0%A6#$mbuNdroX&mV}*4g{D zt33pFz^D#SoF&hIDp&e@jW#S)F)Wo80IgC6Dm9r%hOf?w`R5ZCE?{BaYNOLvmVOlm zfBWRlJNUZS;H@&j7SsfFZ-A(W5rJfZxRP)f2ny)Y3X2WKrOgS@Hi5|I#aF6?TUMjW zDKb5<5Ye0(qaVu=V87Z^W-0(dUhh@|WBuL&AWt>`M_gc_uQotzzEG0)04TA|`ff1~ z&fE8I5cpejC$n(1mIzAYtEh3qMhMJ&Q`A`mknTwDLA#5Oby-BMZMDn5G;Jmj2ac5z zNd%PN8wfd^xh<7cJW&QHQ5FJyX5s?1vHbb;If0>uuKyrRvrbJ|5++*Wy+{IUZFIj& zpb{Gx+GuYJrAKI^r*qVOc!=^-&r7$?gTs_J1y(nTiItDmQ z9jS!?!-C2+H!{t0e#&P2e$e$rWL_a9(?cvdv z2Nl8H;{xN4R0GphABBh^2!$rt>xc@@7fWsDv@uae(e>H@fuRBVg(Bc03tgpS)MZxO zbgMHq{_DcfaBn1*zotKo$WJ&q(^v)n*lViB??pUi)aYNJ6iQ zA@1sunX3azOE9JeHR!hCZWr(tCH;Gz!sWd#GC<)JqC{H_<#hun?%pW29!IGVSAZn1 z?SBpezZ?K$5Ujw}H;e_5zM4TF355dfj1&tJTGDgXG1vu!#kHFvKCI}fr$$wrVN3{le1 zf-lX2tv|^WTLMw1gXmNMC(tV&O7jttmYTsy*k2m7MAOt>8%`C15cck=CUCh2D*js& zI_Rayky)&Iaa@WJW_z3`p3iiDZg=dfCjkjROdzZ;B{;Pq;=8UI2%p!G41Mx46ua<3 zFy;9ajPd||^AR#(euu!A>LPmYYRPRRl!|4DcN8GGYS_@0Ida2pMR;m>9i}v!r?|76 z48Rh0-m3z5B}n>GgwypjU90kD$MY5=uK;cojkT5frGB_XZW34d>Bf9pp4B4zDYP zn1Ml+3`LB|NVsi;S$)@ZaeXfKPQs+8rc)lb-I)!9`q;1uWQm%!?0>P!}F zb=leLY)N{nrK+qa)NQK=HD*+X8MNvbOa|Z7N5I&187lL&O@@LKY#FrFi=|48>ZjFf z6HrTDxFxcSe;Yx3Es!x_2^FR>b*&GlFXY^L@K%95e#a~-l(F~iwuz#{HRgK<;NK1> zo}@aO)PX425NxMkh6AleD;b9nf~fpC@PUd9_M9$iCjP#Y+vNt!jA-++#y-js@vDQK z-qT}6&u^0vUpYp*=1Exd@gwjvBM~wNw)*aI*7Iug-9_}tF4B;g`pTG#V_O9EdUF-f z0f#c8zsJgd$pG`BCtxxk?%Omiih;Vo7`m}7$mB)4 z#l>F%1T}v4nGe3kmB0hbj+PUX68Q6oafm!|!{2B=V#|Ls4>fGnjXCYpO?Ywe#Q?4# zsReGav3e{|1f$+)>SBWk6d;nG&iAYUV5682EDCSgRyCS+-gT@{iYugb?@3%p|!9ZJ9iA0}~pePo6lWIwO z#lx)>plCyjQB*L3>he@6Yo-WWI3dX21o7@}5Wn?Mp)*SnKY5UDT2>-ao3Q6C-D8?J z;XD1XnBRG#0Rz0YKtu&~MTmH3@LOE~@kEbhq~ zYjxNUz1Def^p?rh>sfdof2!9aal?o;dehcYcnNMSX*p7)YFtcdT^1P?tEKT$3p6`f$O|HVYK2(#So&TzS zTO_bNlPas?OQ@sjiQ$HdZAm`JZSLPVpQ>&Z*%~!_TzhNWFH84CV=iAarBcU6$xK4k zJk2_9(h8m!G7tJqo^*IB$oDA~#U6vpd(6=xchic7E{%dMaz8CgXP z(*{cD421Q@GO~~xLGn?{xgo?WGcZmykb)H$QeBE8Rc-Tr4mLXz2qjhx(tJ94u#`N<;3Y8VHFbw2}i=zE$Zdk&+`qzNswp>S9+%mM-C$K|yb(J|O$* z>e&%k=e=TU5x`8=!Lw=piei{xb0^a?75XSXH-c1Wgvek^N{&*xMTH9B%V<$Je}1$A z%+*zixe7Qr$mFEl@~8*d(NIKtX#{9XZyF*FEtIC*_Rom_P93%yKHoUM!zv!n6Nd1uli>=eFT#ANJn z$n?TM@MrbAbf_>OYxW-~R2DVIyBB!i?{rR;n1W)E`aQEmXwMH)W{JR5A=pM5fgEWcq|RtC+UMRIOVQp;zHsuRtgE(>U0Z@yxS5?eC3BVx$v1{kLQCYnuUfZL&meS5`TC;d~)?| zzLldq7%?44eWaY2;KX#i!GPEwVC<^+{9$HJBFJbw{&FiF(>=Di`-)BH*-q~ThCB-y zfo$9)HMe9c1N~*;J?684fBg&NTpd!Tzl#Q^kITP&^@>j2sg1gqPnTP03WTI~wNf>n=SQd+a$r8rk3pP2c%Px@w(4nmIV$W-dP3BIjet7rhx| zue7+|?`mzcAUv9yKHuCu&lA`7rPMR{c$+EKThBf?{fie|by@Tv#N$Wd7k#=+!6n#j zaA=vE%mR)4@StIU)?{yux`a-v)a1ad%@&m~Op+;7ZMGoOY245LsI83VvW<)0 zNPFF&oAI!UZXvzx$c3tC$&lr0G1{^S2w$iAf&jXGgur)|O5%EprMFKSHR6KRL3_A0 z-f_kSXu|!v{L)3gho{Hj8OStki&>Xf4uzYk7)zBN`CBI>nh0TBnz_?P3#=L5;(rxD zQ{y&MRD|Be7X3?10Rm#DUpOF9)!hB7t}#!PAkGF$9gL@-4R*AJq>##rixn@t*Kf4r zeJ48A;SSnvkz%3`Z_arzWFS;DT(HH@f2?GZ(rL1KM>-e<|SAKfRlAuf+UcdG($H^I1b?KguA!*NC2z_kp!7 z=H=E8FV|-!>?&ki>4Sv>q1}SH^axGbhaJpZSbLdnSN*+6bGu59bMaFQX2$0{A|JCa z(WBw>KA9F%XH~B2=obB)i|6v(pf-{>X7G-wxScNEKOq~3bQFEOT^U8fuBKsLv+xT| zJ8xcRxxUAha7#~>k_7ev+?#SliBk_`RdNvh>^{b%ZEK**#(Nuy~${ab-~TH4$6y( zhH8y+ocnBSiV!Vo|GSy#? z+~*Xh(n)p#oR-YZfYJ>(ei#{_Qdjo||BuGmjVtlVpo2e>zf5 z$b9KtOe9P`=e$t_!0hyw-uU&6Z^+YLZtj7ac>Umz<7-tu+!7%jAB314gpzA}dINZ> zb)f7Zoa(+rbt?r8+At>NN;d)Nwve_ID>$O=kf+F61eL-y8EUIiCi@`oB^?7On@u|y zZ=TBa>8t4~E~*@XF1#@rjj{nvc(G{>0vF>=289@c6kI*)-hK2Hj;0){uTC|!hS?o; z>SDyfs_m?;f3Wb88#m8nt*Dda@D2maCPN!t>giPm9{tP^BBmKz*S+lc_m{Jhpty~o zq^$l&+^SZolTTP(Ra@R+t47he)DK|%WP)j_?_j`{(v-OkUM>e#crr{ygsm@*t*D5| zcYr&mHu^y|=phTh^_WAP0QTfl<(P4jbY#)S8gF4;90>7&%#dSf5i^IYkY`KY$amqJ z0L!gDFRIgi7?VYqJdii`eRXZiwM-GT5G$roo=_WfX8Yn>YI<&};fkgywP4|iUW`vqN`%0A3%7-eBH7W&?@0-}-&L)1UM6F#mUcww?{rr``*B1(3lkIj`bJ|0 z+fvQol`4-!hq^ek7I`unShvVQdrr#3W-2cDh^H{9AzQ)w^BCe))Vt3E+CKzOy$3c_ z&KiojZ$2udmrnHo$u4<($}Zib92Jq(*)8qdw3wwnXOb;{ubTvn~C;W~gmV zX@_o*8!YG)B#)-UZkdx;Q2p|EE!`F~0CWC(Y;ZbL66ia+K!A91R+Hs>Y>a>LY!ufW zeU(h|>p}VxT53&5A*1X({L;FQ6XJ6pScK73X3Ww_e-$;o2+~RmjPH!P7-FDlbZ@Ro zW6UTmiFK!4T(0hiSe#r0@;Fd?=_KiK4CYcE&kIRh;H|frD)Xh2nXkqR_U(wiQJ}Dz zy>+VGZ(y6Ca3ms?daLtUN4;mCp50hcTQlItzp2o#3$+8QwE;V^ngbs`4b^D8K!@v+ptQZKwoDAf3hqY2u|gS z=wYFjUXd<)(;%6=Jw^TJDzv^a~~vo~zAJE&3PtE^a^ zB~uH!oAvL%;mqYkOI3O~kyK9QKmJ*8$;<~P*iXJXMx$QKkN935vibuEPz)H!W!vIF zTV_}a;@zDSmE2R4o6?FItefC2=bn71*yki}pe=>oVly;X6;AV}W8m`E6z}I2aoVo6 z>c1%yA1j0D<37in!Mta&&d^sW1ke!rv*kVXJNjZ)&3zjOfWAYOh3g=xz5w|`I7zV- zVmbw+3mjT2*QRyIr(-S7tC!7V9Ry4RSaX270BH#KM-3!TNzN98#&eo%eR@4%y~LH{ zOgJw3!A^;;v56ZxV$iTQU!JcslTSY`MSh_=sP1EmQv%u`EG*wA9vJ>%srm7Wjz}L+ zS59aAc^M-aipVZ1(zOf})#b(tISGkwZy4?52JObTdHSaYs#Yq9j_9rL(ggts4N|#%lZ!EAd@M`Ltm+HJq z%Xw0U3@lEyCjhgipOVqlcv#dSVfPN<(i5J1xGco9pMM#d@nY0iC^MhpHx>!(Rf~ic zz4r)hJnyjl7U&S?N#xR8Qy7U^B(hdeVC)Q4CTDuqMNo+Svg#It5Rc`In(PpUK8~ST z2aF7k39#e0V3Gp?`%UeH4oL>4{eP^-sb>uSdR>5kN8(TYbO4oMsTbc1!?){0NTllBk;6F_+&@3wCG|0F0sF0OCP^xhWob7 zV4bh@!Cp+x{^BY1+qcWrj8LYp&g~Kq8#QDX81>W%s%O{vo-z`9_@>s1h)s_ChkUbY zHCrnydQn5rO8I#n>)w#-#(+IrR}gEHjQDnl3}`@!6Z2=2072ah752Q8TdBhgb(6*T zJ!4f)3l0EiN%(4rN+5}gqgQfw(zPg&3`wLe*3rQPzKX4)$alJG5N)u*kyH_Qzw;;9 z8s}xQMi{)}y9}3k!$Q;=WA7qI-Fqd_W1@;%A#Y(Oyow*Mq&6cXSe;2!;z9cjFFedx z%Vki^EX5s~C{#p#uCH4lUhcomUm+T=aH56`Asdh9QSk9p4dP2U*3j9xs|8Rq6mfo# z?Tv+Inz_{(-7pGGH0)#w}9(Jub@Io5m5lF4c{^3K zINj^b`2U@T6&{0;^mK`YhRc+{(t(70PJ=N)0-rv*FddGuoxtbW#@mu0 zX(UJX!ck`)M=eq`^d58NM6L-=1R{-&BZngR?V%(yMzN@f?38^_jK%^7>0~ zY=x~0+j1~}_o;Vq%pJwP!INQneIeaZZ17FMTOGqr0fK84sXZ;Zr0&U}WtrD~thRRO z(J*SrWDGn!yRaZS zynFRIsyo+5u;6!y_Zn8rS!McFv6lV#l}CTeDb20lpTwMYuf6L>jitVOvFO}}4=%%G zagOx^wFpQdk_43q7q{(Jnu<#?t&LGP3YyeFo_q3HbO;)p&GdbWt4g@0{ZoPy&3@NU z#Kk_#Yaf|BDe*IP)U9-q*R7++l_=c){{dt`o4<&;3q(>6&CYX?A}qbcq;WJz^{Z_| zM2sa11NTIGk!|BwN<#2aTA>SdHHk`B`%4~VO(Ny5l}KEiQ|+vyF=ImV8k5F{_Lh^R z$TErRfaxph3tpoc*QN9@$ks&#A8}Ylp*mOCXWEH7gn9X>h{~w9A_-$)$CmOd;~?|U zPI3$aP})LM5vKF^Rm*8TrlAhdw$_AzPnMLX76W=gk*^=>6#;pnxXdeRhhrIaJdeXW$}`+nklklNs%RmQ zAZB2|`7lZ96=q@#T9DybWGITbyOP%wq#@HdFa}<2bu!9ACWvbhEn`BzoI^gOAGJAL zQ@8GFqSY1kK~7B$D#D|fJL_G8e?9dT7BH-14(XA${VkUsTJ%vbz9A1Og~A%YYPmg5 z2$SbbuA6y^#6ioW_++`$ULNHge1E!ig&AcN2jv*Hq%6*-UnZG9Z{PZ|A?q*AwIa$= zn9l0`XrFACF=^zbcTgVA#AznKB2glgv9wR&55#2>M?IobP^tC#?U5v>>gC@&iwP)5 zol1gNcU<<;5-fcekA8^i6NH8BI`?ZhNB4h6<9Y+LIClE)A8EZh8^JdQAqg5(fLbC* zBBW6wPjg`zWF84*k(PVPWfmc9w@hW6ZJYOEHZSSx-8ZE?%hDH|vC!=3v4p1+rqMxY zTAGs_!98&mc{sp3&5uo9Q4m&kaV9xNH>#JU1)WMl$<)TxRc)UcWzG07vpIVT;Ty^- zj?W&EbE4W_iX%kS1<3 z@ZIDa;x^U+c-2 zgIuv>g`Pc(OJZuQDpG3C)8ukQwGkFb>X_B77_zlk+L|UvG`CD;lS_y$l`&-QHb-K5 zr#|Q&L-v1dgp=c+ed*q*#BY9Hk+ zmY8?)VH_w_svvif^$Dm=o}=|v;!nte@YfYellEX{IUZ~3{}q%vlA`x_Y5O6mjYm*) zPCVOSWm-7QqIb#2Pk5IpbE>jo3d8<$P>LgTsjMxVs@N_rs}j{RuDU{qvr2Qw`;&H& zdMO9$mL}*`MTm17l0M+B>{}+nx2t=yueu5C?c~pZ?Ixq#7D)fAB0DpQ;Isrn9+7v4 zZe>!{sSfhFW(1L{TQicQn0Ugg`pTLToBk$=TJ~=od#>xYj}gI{B7Vyo+W!;q9dqQo zhxpgnFWP&8`+XC>5MX~$U}}G+jk$APGvxh=b1d<+2w1T;oh*C&8A)af3aV^QjZCAn zC8!*C#IoV`P!a z{R%?Nnv!)1rLn%O@*=IV@1i-L{R^($qDSTU2NAMZ5?>>FPLL7Kq>=wk$)lpBu@Y6E zj+)!cB9<{(bz5Mu3pBFUtvQV~tTu<5dp}t3ow@qlv-Mh0#_?8-yb0NYoFzImnrzPO zR(3JpBEoAlC#>(KEWD(u zQ^EGM*|p7**r;k_aQ`RORDz{{A-&v7o_T>s=KC`{wl(8 zhC9j5?K@cCcF2@WTKC+dA*My~2?~PQ!Lt#04ymNysz`|gkuS(Aq@EpUO|IYZJ|XMm z7x05HNnZ7%`7|ve=dI0al{jT@CE@)nYO1VfRX^<=RudH^`F;|om0DGdlZKKm zWP*LFRbR_EwmrWctCX7ONfLx%RcBIKPhIti6Mg+=Q5G%pXHtEH!YW$2YIf8VL?U#F zDvA$DqPwR|qIO&*F@=eme74Qf%O-izmZ|7r*E(HOMT|;Kvti9)TIxS{x{j|*jl#h`jNypSKYQmsvXw6!Pll^W@5^0GggmN(@^qc3c z=P!5Fudb7|*(UX5lB!Er+^~p@R3@tfBo`|+O*DAd<#z4EqiZ@t;(F#T5!GWMivyMO zMppjo2la2MZL)A}uajxV#D{IovH7DanWS~y=XHg_BHz;1&ONIYA&gO9s+vl2FPWRK zHn04h>1oLg(L6r7@*|T+dWh52ih*#x`fy!655kUK7o4+-)21gJ_ciLtlXRP>p{{G4 z)NJBC>A2Ou7wn|ed`x8<$NF9F5qI?sCyv8cfRmsCh^eC}{k=`Q&Sz#!-B_1%@ zQ&JKU{6}RKL`MGnpHxn&?A99v6#Zfm)U^EJqUd-mD=PObZ)zZ+pr8?_KG||gkngyK z;U|mDony5ws^m$`nyJKG!XUqb83~p+OFt$5o+qiCGfc{6Tumb2wCJ6VrDl=YP7w*ZJ+pyGQ?eVM^xII)1LUBraC|LUOzu9 zV6q`tVQ0@+m)OzgVH}ESxJJr9IoGKi6J>g~^(m~vvP((d^4|R4VzAj8H`>WJGc(AA z?30H#2TDqmCRzNkkAke??V4V(&Sfw>a(ecx&K*JGe(0)udo?794!`v=30fuHLYoxq z<1+8ncy^D1^-$`e)#pTzI4J_+jk5__5bvTboIfGB?8BM&dTfvCVbXL?yzOWEI%m~z8xJCPc(3Wt zBGYsj_D53oBERfkHjR-Bo5YIxqVtUE3sA5Ox^EEuCF^35V#kAwLJ)nJ^@=YN{p)K^A)qTt1@3XX1FAXL&q*?V=*( zBepa_Vmz&5qR%#(XGwixBiNKK59Q-+p zOy;fHkod{INH@iWm_^>Uh|rmY_{_g&soPN1vdDMUWRUEWC&STwOFttxq3BWfmUV?C z=8dR)738IUMM%pIXd9m0 z&Gux8qJl+!^~Ld3w(nvEE$?lT<4}euiOnf2|IXZ*%G0pzW5U!DDN06330&K_v?$Ig zOGrNFshLnoaSFI?S_DzFC`SoyG|zgBlr5x9{CV#vrXShixVh85s!#gUc&6$YZDrG>YJ&gWulYGOHCBth(nvxX?~!u#@HXP(z~ zq$xDaT+VA5CJ>pEixV|mmT6OFy-BhC4(8N{Hu}dc={VQ!Z%y~*|EJ4zWpQmv-!{n` zOqL{-wvD~4!l=!dhIPmBzcs`BbM`6>!rP*69GPw;l(dWr$DUgMqj05gQH4b*%C5+n zCvKC>a_GyuijxfWK5D}jx}Osq!!asTm*ZsL;*WVv@%;~8k01JdoWrX9&l0|ut_*T( zW?)vO0m()cMZJq+ni5Q~6ctUZFl>{U*(YbsA!%G@(J6MB2W9C-3UYw@BMAYNYS54$ zRxyHokHp<7ZTfoRvpIDeZ+f+(Pzqwq?k{L>&g9Xg*JO=C;U_0-*1whL?Bx-rCOEj1 z#{=UnV$@|lyY5jH=fV&t%PVpxmXiz7B--;>~+F!=h%n!Di8?YU`>T-~Fw6v(ls zuYneSjS|9r{F$s{1NJ4nLXfRFPSYHeVp_DVJF>9miGonHN>c$acuyM-+D}}!;Jm6y zM2zSv>4wGcv>U?$I5H<1qM)`vleQi6S|33CafCj^Z`vo71%Vc!OC+9xfvTpK`RtQQ z%QUiB8Iu;&&I}IAWJjTA$md+czXOEI;gZ!@;uppVDP73c>B^j~!XmX5)M?mSdC7vF zzat7SuC8~9N;ThY7#2SnwC7KWT4iPTC)2kX`Vti%sO-kRKE+aUmO815;^)xXLhkf6 zm-0+}rweOv@T$*pz@(>=On*O}Pqg-Q^S3eHHj8>vr#i^mX!p4av(CA{By8Uo_Tc@< z(nQ&!FJt*Nt;%TKI1R(tRNX~Mk|n)%MNfB*b)k@26!mc|MHcp5Mv_+OS>^2}Pa7_} z;7JR@EdR_F_Fw!uD|--*Wp|0Hy1t@P_kpk@$$AypUYXRv*-FVRnQ&_=Y$Nt-qB_>C zTwYxg!cGww8-|T$Lh{nr7>X12h9HDyou=8cpd{E8niB%S_ne9AI*g!6Tx9<+zZSKj z_GJv(Biu38!iZDYq@_tnps)64=O)G?EP^u)xzu+`Yhq4mjSHCG$(kl?rMb=NKxOlU zBUHpmGz$h%(nTjrBdbh)>ZGfB=sL=hn1|<|!z1L6bCY(Jgl*!@%RK3$8@Z8RPovN} zB*EW!JU3QJ*_&VyBM@0h>eh&(w!L<*F_Kc0#DO#QlIIR^!9>)eO4lx^Q%X&a8%mnC zD=NApj~%e599p5VsUOg(;ez7K10)c&z&rty6ISj^7~iP|HD{@SCDIOlJkNJO(a3dP za?LInwVQ8?knd^H-ps7?JABvMkT-9aiylv2`>$xTbTB_VlSxUxd|l&6(nrKqideN& zu~f3kDpik8rWI7ErBtPgs2`Thb+rC6!>Rl~&57Dw4&E zWveQx)m2FnEn8JpRaIq+ZMNHOw%cm0imPEQnPS=DYSdbmqr%v=B!emz=}`N5i8QiH zS!R7Kny!%w{MI25VhXJNVx@VJ2-kum&6(;}Kb55tWQp15V-B-~vaQalZqu*KT4=MkX1w<# zYqOrZDv9%mf2ZXaP}@>8)w1m4LYKR&>o#vljL?m$k{^B_R_$)pmj!ixPyCRw^t4j< z@OFN#>g&91krD!s{a?EXkERAWt!Ar8)qvm=XDQ)3O;fCoqsYN^UTLc)HL~<{00!yV(7e>_=Ox1On zgYRyf1X^;MT1Z;*H2xH~@B7&rQ`~YFhE1CyO7b-qCn(o0KC(YbT6~n2UbG;#2^Hrc*~vBu6gR$!^N#<mKUGwUclQcI;fM)kMS2t7HydxWyQIo~=tHg|6*U`c_FYw4|F0BrYyoA)0172eW$=jV?y2uM(jD7PXx5E4TCN zgc}u6>1Rwir${$yd8r|z$kRm6qb~+25x~DB&x;U6Zw?$HuR)QfuEQl?dMWIhV&tZc ze}R(xo#o;FqtZjCFJZ|6BO(*FSzy4u_iI<5WzkaC0^quzsi|I{@|eOokFl3i)K-0y zc}=kpH0SvJRcC#wC{N`eWEe&y|BXQ!IOt;#yQ`2qXf8qRSJb6(w2hc!i2j`w!Ki*} za=?uoG!zf1c33V98zR~vvFeOrdU}!bLGSLg?GjASr=7cELgTAc7+yOR(AOfbxQvkN zdi;_48w|q!r5tJES^cB1FNq6#hqlwzmFf3IW3YB_b!`_ZXe2vH<3zuleuX1cRfLE1 zb#O=G_N-~Tbd6~H$fh0EV3GYq(IbU}k&q#64GPAvmxbNGG6bQrMLMX%7GRU4W~yd&>h?;>;k8m4;DJEO&6s>cy{zk~cFoqSWreW;9r zbdOxq^^LGMXPpw_wMKBSG6;B!-y>}lR6G+RdXeYdB7cpfo+3oCACb*F`;OFkDkY-X zY^sH`t!BZbkjoa^ERtH1Gi6EAv9x7jwwk zaSIBaxO7=$Q|?C%OSjdLV2JEWLDp3pQqJ$SsE_#dG)YSKL;K*zmuSuDUTvZkHVC|; z?+Z@&nYCRPzwbL1T=UHuyDpEBpg$7Kp*!t#qJ!Xj6F21>yAin$>V{eymev0ja+J!( z={u#R7`463vNsKKPFn;w)3RmBd;9J@WLC(gCdj5{PL>{wdNmZRp#N+Qt3KQ^%qqD1 zm9^Z8{ZWqjQb=X-1eprUs_7MF5bQRDTSRWS)7BNRd(8o2Qlja_O`vvS1ZR;(iBP%T ziJE+e>%Y_UOpxA2%ZT&CV;>?pc0)EztN&>cbH>>;OnV6WBCx8%4AmoEr~Xyh`V)sv z(@zxyRx0D1^*0oDRq`S4bd;Br?Ue^PgK!x{a?y}mNXNx@zue&*7jEBsF2|01Zp7$` z)uMNWhrP3+mP)dE-E2y-<;Z0&nk?um)2@?P%Lx|MF_yATYZls?R=%u;q86>p)qLA_ zbhD6r)gi%0G>GcPi8kbi@sT7eZ*|;@EFRM0oVzaKO-@S?a&NJF_tVpMwJ`DjNxCbW zA~WUbgmju@-DKF)QizkcGD6R6%lbD+ZC-PRpuaBSBljd{wDZkh=lS)d`Y?4`Z1(5X zHj81oD9U2QeOQ7>wLbO*VA(h&4eUIqlMsb)7UWFQKcdL0t4W&*fge^B#6|on%2WJg zUN$wjciKY&rVz0+TIZZ=TRxN0I|_Dnonm7j<5^5=8;lafUy=9_5F(%wIWU2Tvff12;{Kk3NL>wK79y(Yb8JvMTC+^@SX(F&NaDCo5p@-_g@0R@ zC6s>EM8(kO7bo!k(Nj*Am9@GmTv(Oo6^Yp`>Uy|k;wLddaGYve$@n?#B3kLPKV4F= zvU(rM!*JrN5v66?byC<;-kBYNJuIx2)bq(!W9X%)Z8h$2$~w<$LX0kIg3{PE$_&E> z<+m1eUsRU7E%z0iT@5KYf2Zh+-d9A0;D{SD?s1z&$z1)^+Vi07FsO&?f@jkQ0dRb} zSdzBv9g+Au+nkexkvUGC(R>bT;OsfLMTr8#V8}ybWJXxE2^nNW%1y0EWRS2yuR}sY zz=nl{ow{g2-cyx?+h(4%v@98+WNcM_LNwr#lkrCrmj!sJ&MK}OP_?tFdL-mT*JonF zz8B?rIez=qDC{guybIC7X_Pe%h~TbDbEL1JrQBLV+?BBI%40x!S8l4AsB(_t|JO_1 zo{t@ORhlNb_8*z=QR|YfHfzmcu_^^gVQU%Zop4y*1$kF^kX)5rs8tRjer%r>?BbC{ z1eK>sf}(_F6{khAF)o)yi!Unj_T*>VLVK=U7lY`Jq)jbOCY8qRoEoq8fw!#-Y`7^y@Ro(-?27h8_K)xwdVQ{cl8YliPW$_Xoryq?yH&AdNyHF`wGywUWE9ECY$&lulkxtqS)FGOCGwlKPm}XIdLz!KG;cm6tttt|g}G@-TxrWY z4g$;bFm%W3o=|i%<4pgE%l>3tUvgNbHe3Xo?QHWw@$fV41 zBCQt}(Rhaz`tPRKI$^q}Rh2D8vOx8V1U-VpLsg4ftdiK5E+s*2%N&i|+$#v{AieA= zV45u~zGaGYokR3F$CY#G%G4Uag@j~yNn)=KvbqN8mh7ns<*kZY8Dl2mUb83eu@#Ej zHrg+*nt=Q@v1ZVgqzZeDi*ak^abnEh&-|moT3Lklja-=Mot^$V4ChtV#{Ny(pst&A zL6v9Iwk`Z6?vvu{qEEr*M%>jFTcF=3>Z7cpIi_H>rLTedujujw@^TlHO@(#a zL*$c_#r@_y>`FfT&N)n0mnBh8%(#rp*vCHi)%GnflP<%Vl(`&P5Xc%Qt(|3Mt#jJ6 zHKsvDRLkP_sNP#S^*wvlqOg+&4R}F&6sqfDyD2#1X0NR5J1SIMM5{TKCib}X@l!F0 zGuDrjhsn{(F0AsI`5^EVeKVv?j#&~qXu-}i$uo@6w3GMrO#hTg*xw_~iNVusT#6qh z5JFO$*4oIUFbaCYmsL=IysEmdKK#y&Z%VByQj*B<*_RpOD@H>kU|K!~(qqY8&-Rm%hTac`#$ef{@ZxFqn5xzv2 zSBX*ln9BMn_Bv+yZ>^Zc?f)1RyZpkU32Pqw<3w#1MIf!It!b4uNh9<{6S@jqc;9(| zM@q4_WSRG+7-f~;3oLe0wLwa&rk&&CKI5#W)hS;3yj5kA*%ru^W|@g6 zsi;Swq%zG_HBt<)GNQyOCnGa8uN%X+=dg7b$!ooLWBv`@y`ME+QU8AN*pXq7jsQ-$(Fx)<^7q&sjTY4}#8H z%3m{BU6Uiq>do)3^-3dqxPDKE?7=9|4XP~EyQj77!Mg9d1pVe>RJWZ1MmTFd3H9ceLfyde{0;QUyWG2L&7wp8~eNlKvbuTA`z zy`t%K`QYxXEDESx&Jvo;*BbUTkS9ptQo1=0ALe)|W<@Dc7IsEDBPt3#b^Dg4G@W2w z1xMMCU7N>6qobu;f|iRZjiH2o5|;%pYMy_ACbP3>PI=MSI%K)FH|UMvnLnh|k0S{) zrsNmJ`wM*RNUjZA%9f;TRO#SrABh~wWP0%%UT*|LG;*zaEZU{+x*zjkPHI%lQQHK} zrkiD=B9$bIx9G|;>j_<4mBQHnkrY)drX@$gv0FOn3ci15ZT%+Kz&Ae+wLBlMcvltB zIr;CTvE;lSK{?wbwJnf)>mp>b5p}XdXLVE~N_rh+85QHL5L$saKh%ptM+nx~Tzg8tz~m~^{!#bcuI>ZznT>7ka-&v{XA@m)Awl{7fDe( z2f4Ru&OF}H{r~2@}l4{7WNz&A*C!8g{jErvBG&7+UZ_rdEd5lV( zyMoHhY^-Nlk|c+Kle9;e+@arW-QsQ;$0|UKZLRqg#kFvl z`!Yn)IVk%YMp)Bx=t>U|_pvBn(NHVIsvr6m?Z2IM86s``e9#lP3b?R{W8j| z@AcuG5cR5Y_hU>7j|iR1=!&XYSVgstnOtdBL`i{P;VKFyE(Q%bd)LM78sVbZ)$N`! z98`HUeBD#sEPTJU$%@_1x zJbq%y4H!beg@l6)<}EM8rL8_)y}^V<<}aICy)e$A2UR_CY5lczdP|~5sluR`=ikV# z7m_E(b<%_`B%Gv+%l2kCgk{KZ5pNT!t(8klmm|NTEP_3f_%L{MjM}WpG9eO%UHoXt z>St*?DNE|0HY?KXl%**0goIWRrG=nH+$OanURy@3{~qQU;b7GE9Xm?hHBD_ykKl{C z$`e}NCklf^rA4s+B|>x*1NCkL;Yzf$g>dewaJ|Y=}NT=YLLPzs?qzl zZ|@+=o$@ron}@zeq8Wve<4%|*87*ud`b#x=F=$({p-akAg83zAnHhGM*DSazvwc*+ zjoX-FPefgPDNNFG8HG)f=J+WQr>Q)w;L zL1I5=x${@qr`w2D5;bwJU@9}(nTs;Z14L-r^5)C&vZ&XFg!_yW+U^?Ja?|o)IRN4JgV&*ps$Vqz=WCO;~F9{gm^4 zC;A$8_dtm_O#1GJf9CoddR>th6t#a0DonvFG4%>U$dONaXrNDY&`!ZFXO_77lKQ{% zN@UbWJhU^+tILUNe}q9@yBm+GRBw*baCCazz)vCwfC(m2^1lJ#l8mX{euZ(rsPLg^ zzKO5@bjrA|yQ#XEx|VmmoULpdPI4K9iHAv7r8Pl$3`@r5xa#?yK|D>-O-xrrg&0X( zLS)2~)RDR%&J!{!M3Aqzzu6)dXSbr~`sqvpB(6%(orkWDU{=IC{%6znD>R;2UJ_WE zI1WDLT3_Gd5npR+KE!Z|CedX5a$D4tdE`_YN5TCn>v`BiwOIx!KUfgUOO)`l>}T$d zqWq#!&O^Eep@VhOwDTruUvrmkT3IArf?!nk=&{<_6a1jy&yn?0Np41FU*;gr8YUZ zwu&H@Bxe~bdRz2|GTtz0Rw1Y`Sm-KBujy&3q<8fuSVLa2r)060O3RfnM{|TBAfUmT ztVH{cOcjJ{_}Z)NiLoWjYLfes%L8WS)0jqS=y!1M)xq`j)as$`&$-5(fnthseyxzz zGpJG%;wrzranDv(w^Zvrm0sk|i?53Xa~X_#)zxJw8d-qEPPt z9(@#BbtGQX(ln~wPg|1cHcG?&NC~6HrMB!N%A^}b^`fvk&V_j$M-kM;pK;!TZiyd@ z^Hy8sP5LCxT4vrWWc}4$omB()egu@BP2G*kfVQx!ok=Ua7DJr<)y4>dmVYn#7TMC# zw0b~}u8*Ri;Yce@;u2rqt6CdWnSm**^Xt4WXFat))J5ZB=2^9kmupauon=99=-T0AQc3i_@}N5ydA zk|q^CsIGQ~ad2qgsghBYSEZpoO1d{DG^pb$n0Zsl0x9_P8Heb#CCfcURLv@BNmNjN zJ4z*I6HWaJEzuEmT6T=+oTmADcrx+l{J=3%-yKkqe0nS5rb-)!NQ6H|#qKjNtWio# zT2*CtUzB9Ea8CXxkvBrfofi@NFwPl2SX7T%oc&0V@PFhgnSV*RvKPgne@&t| zi`&?_MwK)$%QAYhI;^=$i&2&N3b=pdWznB{+*GCh8ige-caf{YW}vug5;F@FUyzNZ zA@W6*)P>6FuL*NQsHHKCSJ&K;>>ihm+}Lqg)Rjw96gJ?lqWiVE+gNDF8In|##%YRu z-uQ>@cdN#(Qv@!2vZJlpE4sP+a=~jbZ?XR96dM~9#2p7<^qZCfLzg)z0*Ioi?lbK@ zY$AfJljJIZro3>X9q zu_k5^Of6d?ahM`$WJ$hz2Z?+o#SZ|wl~ZiGJPulDhJP!9ERZ?XN(6~L zDqpb=DBn#iSR_?bL7G$wkt<*vM_s%|&BNAgS7n)5pC1R+aa)d~hGZFJblsOmJ@iGB zbs?F4?s4u+R7UahXw8XTf6w9no?<(jNxXZ*v3YUVwOLSa-Q`VqO;@%I{TSup7{JKe z_1fziPftRN_CI!tQn|rn?FS-Er=sZk-sPBF&1si~G{`C{4LIi^SOwnT`;~Rso}3n< zmc6pb>UjF6Xrsc3%#f`mSvF%dCjH)WN#3=IQ=h9K!Tku+ZksdD`Kn?b80&!XI7rf< z_>**lM?-5|68@i@HIZ;c-lYwEd@8Te7iiH{q2~V+C)n~O%n`)a;vH&d?3bb3bRUZs zNU@&R-rFRn84w}Z_u#qU(9GPG7*SC=Y+B>$b5iFhn{HKwYiznb1@i>H6|UR7$(fwX zCgeHK>BLgfg|RjL64XsWQR(iXuqn}VEY%_NewXY{i9*H9Bj}s7wUkwfMto9OZ4AWo zDjw$DQE=`+?tER4EYG|>@)@7lC} zR_BT1+{fair3BtGkf*aWk65t(<|LP%5>AyotlKo5woEGy&8@P3E9Q?|5k{RW{-bLz zp|)XB)JuS*5&DA|mpAv-;lxZ>vWOXA=L|@Up;|X0J;-N$DV5+1jZlY;x8F2+(gd=; zHulgff@tE3)+rG=En54JBH}~*yO3iGAH94Qc}!2_-GVD*P|pq%UGsAR;jo*f7M2^Z<%E0hWN0njos#V z&e}_BL^VvheB>oY@kZIM4YML$8pT6BL9;5e1P$Y`SeI2RKJy{i_sjVt>613>G7FLF zD9qO&l{nb9r$;QBzf}pkU)1(QkZB#~ywk#?3w^y6iM#}N15X_CsZ;Ff5+ z>-LnlTJgMk=ayKN7`^*r`-ti;k;dpRDi%9JY1MC0!q3E-`Df+TAip%R>JYMQEwB4eRClFnadD|IUm4N+yeX z`_4%j=_%SYNaV1RvyXD`i%k12L_g)(aGGnIPi#oP`s8$TOT@^;zgJp0pp*K+!nd|2`H6(3cHYsWOsEuRt{!`WsYe z{S#D7j!$02QTY(+x{#;8l+upfrrPx=(J}{Yh!e$B)2gM?Zlf<`ed2S}$N2kJ*D-o0 z=vPj>Wy#soRh&f0q(n)t{z+AGl$I!1^b|)zt;x~SPD-vMb2IAJ|I)_2`!go>{wO6g zsMMqxZ}F7msQH2_h$wWS|D!rIDx%W*PAf8%bom3d3P-7cctqy-ZohMelh=}`w=N*CG`3pY82<0Vo`n5QMpShTpU7rp;@&Cb7LojXF1NSOtO-hE>XFc8cp9Z)$jw$YBtWm*pD0KPE|KVbWIA zw7p`w)V~{3B&?Wfo4IL?=8hNl@J+40ABpYTb5l`IP<+$Nd~{L8fsS=ZjVOZ%y`??m6Wm{z^UPn}DbuYhOajv8xbF%uNFuG; zNBpg?+0Aos=$vIIe3gn?54W!Q;rG1&2c zyfZ8G8p8>vQaivFkpmnv4XE0JyL6w4c0*0^?6O>)KN7n3v#CQ8-aI&DH}~yS7oHp< zAHv>H2>Y(GDX9W@l2(#8p*?XP=1rCIMDXTjUfsF<$2{mPu3g#gylL-`2JT)3$U>GS zNjF-RWR{6+%OMjg+g3qac66;Cqu1;Ccl|hR`QsZD^p4zrq@!}6q$~==l%JFHMtw~J z6a7#2Mh&x055;NZG3hF{!@GjaFhmQ3zB$u+87E{hy#uq_E=yvFYKG{5bBww$Mr4Hn zQIxi5l!2d0>$$H(PV7CVMJ`hmO?v~K&){*iobN7wJ?k_iGtNyI=8aEMo>q-vK{Ls! zzWmrW%}9FBA=ymd70IM4Z`~3p3oD+DxX#+3Qqq^|w5E>{)NtP=NiLPDGkI=HScd*p z#3U)MR4@JId7q&0%dbITwxLwUn=05qVptMBsxE4Y9?419g{+e5-xp;eK(d=8K^|dN z7CB5MPTNxw*pPgP^8|(aRCIlxTFEDElT1JEI*vsVM0FQsl)K9S_qgloBQWnSD6KmK zG%6&E`hLhrt#zOuvh>*eVmt~14D*;&J9Q4Fy)euKAL3??cOj*!`t<&vy8f=ewa$RB zrfSo6a4LR3PA8FXjz`@mA?i?F3~8)0>yi7)?{1@YX(6rZtvrrsCX0m$4Jq}n5B0)- z#(_79PS;1p9jqR95Z0rR@jD~PPG6zR$3Mn&=W30U=*zN=2Kjk*)V74HG06sTv#jm1N0W(3LT>J5BP2bABfeP*ur;Y7T*7;c5=@d7WhR|#*7UBj z+C&LEAn-G!{;us{SeT#KrAZ&sNtjvP1uhzHl`SY+lX##z3Q8V=lvvhR-s&CSl4RMU z3IX9oI8s+Eg{lcFG^4yKdXh*!_wa={g!qeN&|8E&$rH!E)7*`jg#klIU-=M;$e+O! zO`V6O9JIYo>I$%-FEDSX2`}hCimglTB5YO_*og zX5FoSWZ~mOF3;tEL0uG8%{DO9W>Ld3vFCAzQG4yWgO2#4DL$$5Cy9xURa=rf$31A= zGBdYd)U^gC+hZJC8#Jf7$i-zAOY`2OznX~oOqYP#z9`e|Jm{A}>_%FfS^to!P8gb+ zDQX%^?S#xCN&nSly+lnKgKDWLu{(TuBK=PD*8A1gvCl+*<9439QpO~RL@w@$mz3zB z?F_mu-%gOF)Sxm&Ej(0H=BbC>sf}Y1U6i1_ixU({@1%~^Hq+Ljo%|+1qODKnhGja+ zXMCRHzPnB=_Jurw8|5P8RbqaQ!vsxS&+U^x!^Qd=1@y_UscK0Fb3L$FUCkWQ|r3xAarxSq(x03N1U6v#x1j)H)d68*d0_3y1hq>2M-)pGtFy;*i@UbZyEbeJ83%hRq z&oYm9LFO_g`7`xu5m%D@?%0&Y^~-6I`h2*KGElKq@v(>Fwy)I_R&iuQ{Y4eHUFtgg zp?Xiil5bdsF;_d9^K#lDIy`!@cy!t3N%$#eD~LQxGRU;IglEUZqD{f33i2KVh*MC; zFNmW$LymC1ft>!`9!($WFa11~RC$2+xeKgOE$o(s^_xm?9Ua?nPTN)OW@{$~ZIgCh zHWgt@yo%C{g{Dy$G~}V|E#+9Jv7N+F zO0Eg`EH3UUA#&gSId!UrB=kAU8gk#X&gv}tQ<9Y6D+UqRW)n1F`69|A1l2eUGTz84 zi>my*rK#!Een#=lBn|TMt?M^!5msn8=3RbkN>W&j8@0!pZ5k)p886B~@GN%Bt-x?m97rXbG86GRv3Q5?0LtP(^X2 z)s!U(l4M9NrGWd?gBNnCE{FEn<{zxTo==}{IIlm|$0)Keo9`N6 zl}Fbi=u#3jI)dP?%*icnlp4DZuvT_=Rc%DsXf12PVwhrb(!2+Th2rcacj;?7*ZI!k z1cl&6=8MA=d?#-$CH}PNoWP3}=H($X)W;b^M;^y7@-n1j(wlJ@CM@>8n!1yQ+Sq$&or&hp*=MS z`Q5`WwZ}8_UeyQi$$#Rqup|9+i7fp%X;};SP|17wVV4J!l$F_y!;y)Kp% znPyxT7v<&qV!Dpp1la{LFL$CUloiDg?I94aNmN)K$r_k(N`ZGsQ5W2lH;uD=d{L!k zrE4Dd*oq!Bg}ZDN^?x%b0T;Uf)lXqxo5Z}E10 z{JJt!q7^sY9LhJ&3aXU1B|Ty>swGUJv$Tbe9<8aRRzykLG=g1-Szo&5)+VO%KPj!# zk|N&7E3J)%IeS|N5i9T^oTc>%d{2o&*)ln)Qd++!zeg1yfLCttD} ztVuMf5on@Y5~O6Zc&|IQJ=4PY2L;>7q`7p}S7D?RHMxI0FZC8*Gsydn$23efpvXAv zlTF59)}+fBt;5yV&bHV8#MhHwhZ6Dw#?`fR6w#W>AA@~M-lq2 z55<8&Ro7)zReWB?8Dn3cn|9)yWx*CXXQ59jCP_I+8HKC1p%`+6`{xONO@m#C!faj? z16+$QMrlO;a<9ttuPIy>l9eK3H4w3m!%(H)j?&aaM{n%vCbj>olBn=b;(xog#h3G> zNAAp#a6-+IcC}k4FZnQjOQX|gEsScmkn@bQXzEP81yEbf_y7M?ky6~XKyY`57Iz6j zf);lu?$F|{2`()V+}$be?i6=-*I)WPpYQztJDE&o@9y5o%zMv0yLZodHPMCki(A;@ z5y*8{mCZA%V{t_+*6f}aUs`JcQ0+cuW{vly1Qq9vZZ0Ci?j#Fhy&eH$!y z!dG&(`ZPSY8+}RnQGOEEm3$5o{8;PIkS&|5tL|}RIsW{j^=zf>3|NQQ^Ddr-2K_M}kR;+BpAwMWWvG{swF9pw97K!d}xkIFTvQxpD~jTg9#jhRMgaOD9yTP*aJQM~$Q^UCC%}4Z)_B zb@U6Or~~Y+*tht#-`r}ARJZEY6{li4S;jQh3)ut&68#yPXr45G!+zx3i*QRXzmc*m0aeTssP>I?al3;mu4ju()7zFWf6aqj9acQFBlKPoS|>QtL> zr{Jd!P)%=P$=#OOQSVVbr?hz*PFY_}C+Y0g-rEZIuZN)}78j))y{7 znk^G=WIgc0BPCxresbq|GeNF9!u~2mjmws$z(}vJwZmzL`zZE?JXA~E zRU=8fBuO$f`$)iq4{Wea|1m2TD9JFQRXRq)AP#&X6K1S5?`h2scY3TmbY0$J6hCh9 z^$uLD%DM&xE_tVLeJ<~t;MqYFllT@I&@bshc3+x`1xLz6B`<8+hV`Rk0r zDd3ll+eBk<`gid%8N-g;SZd2PC1WI^wZg(&mKO5i-KOz4=kE&6GH5A%8cH|oD>({| z;&GJG`dnp-O6}#YGiC+{7W(NW+}4v*m1)aV#MQrHbm~``t5vntB16l#*}m3;*-BeTPe9Nuqt#5iRZ?!cgQ2!m1U8+%&Yo+I2B`WEhKY3z_!jMeTPz?CdZ#@5|agCqmxxlLJVg{Pc zj*B#>l&rq{^3kz!OaxEbt-%&X-A8xnQwb z5MRlzyuv|Jx@G7}p0igDGZiW`pDsk(Uf_mTHxz7pg)0{Lk^bVx|4>bp;5#-87PQ?-SmPS5KnH1e;=Ys_}JUs676 zoR^ayZbuf1&MEs`DxLg6pSS{Lu~-a#)r^%*PN!rP!RZkvd$%X&q>hb8hn#TOc8E%Q zN-5DTF=m%$!gZmA@t~SBL|y1Ow#;x+QzMlrg>U}#^LIaV*RJ0Y06j zfc3-?fA~AJufDlky*!jTe9^?GG~)ZwtjDCUM4Fb^Q8apU;z#GEZA>~O_NJj^MO`-t z-L?whf&9TUQ#&ia8o1voc$mz*zF(#e^ILp;C5o9SA&dAR*7B%Mm`CF7u`J$;uG8tvb)7>-cc)s5UQ?Dagem$c! zC#WcB9$~#b|D(l-IUKJy?t%kYZObmoGHov{?KkwbF4VbURnP{yFLNwM5V%+r`>xXh zvAe(wnseATt1n4GHhvC*(PsSx+-dKVo~DJHqEcEcoAhRC%hDFG<}@+;ji-fVFsryt z(E`DDv}d>yGW~6?m*Q3UFttRPWV2}EZw^k5s6#k6w{>yDetf>V!d^zz&1+*;NbbgZ;~M=m;n|LP zkH91u)h*@D3ST4HT%vwQOgnv!foRp~-b$d)5oS;$$>pEr1Xr`}SIHrcG=xqrwqZin zGOg8LKIiEyd$e&OBI_zF@y+9S{u&C{5qvB|4h4AWfui_p z1qbDh%pk)i=_Wm=Fh*)pMM|i1bVq zT0QHu$c*avsEK|c;lPG3zA)n)qhdoPN)^t-GN{#){h>1GKrn{tu+W$3MH;ZgGuecs zoxjOaNG!SwYus4~U&!E8&>_dnDGF;FnBUeF;9b#@IS0*jmS!g7sxeulzi(A<#@q~k zF^|*YI2Tl1F5t9_Dk^J^WoMEL$i~m3@>6{=EhsoX34^UnflUOta0gli%j$Sj+5{+= ztfr7YlmDYUgm1)BkK6s3`3>M#c{C-SYOX*`Np0FMOvB2XIr@?w-vuku2DaKON5GSi z6G$IdS3dP04T#zHV`8UMe-)vBRtAo<8f%$Ma^-+wQnhGO9hV}5miL}NQ3QF=^Rb zNaLthmfng2T+_Ul2sc+P!u#m8e6}gQ9h9+Gn+cEpqp60>g+@Eu>kQY1>k zC_3VL=XOwbnFsg?!6k7+{#=AV8$+@wt!yb%N2jS|(O33xZ|IIlz!oOJ`Focxr?s1@ zvA1YVV8rh~G{$;|D}2691~){5V>nCBcol}vl+6C9gG=aX`iUJrAh))pBVb?h9odT; z>tTa0S?%f%Z~(9faSZVX^$upK@>S)S0#CP<3x4hdZeRmZ?`fa;+;l^;^<0B{p`JxAW}TVdcjXU?5Znmvf>jixI02}vI>FoHLkJx-H*<4uyW zBYW{+gNnoH+f?YjArG$~FLwzIZ8)S~S}RZ>rm^b1Q@Po4MSZ0_Gl3a%L#fiU2L`!5 zA_s~`_Is=(HykPk6gIqj%Z#7HH%Mvt-sx zR6Xt!o{H|aay9a;GW?>ujNqmYT#sT_ntKcp;g>-;tX%}&@9CHAzne`ExSzmr%@k$e0wP;`H^a_2ar zIJ7Wpg!G-sx^x7x;jW-KR8?LVNB2|$Jy2#>MiU+jN^NssoFn|fVo>n~Z1&Ke%$h_% zN)CIJQmcP`N<=X9tKvuzo@;>SebSEradC99Tbm$$cR(Cf&LI0RdfW$~Hirz9s(?a< zzDI^a+Qgg!&YY@v{l!wwq)~xhK3|%lLfB|4#Zu#0nrDc9apqgv&Gh}0XTJQ=1kz_+ zI)3L0)X-CY<_NC$2>(ciAUd0*msSZZ$3>T+?Fbr%l5B3h-hGv@h5f8C9K{Ww9a@Xrq-FWG7})^6*w@mvd<*)D_@k6M&*7o&F(nc7$}m>Wc2a#Rh6pxxF0+~ziG9}AY`F5GCzVrevdqN0J%9uhpeC7OzE_(EucM5 zvDuhp2VA5nP?+NXK{22q?*oU_OCwu^HQD?{`rY2OZ~smTNk<9!{#o36aIym(Nog0N z{2>*!)JMBai2`GNK{>5KzVnBbiyLdy#W)E9@SoQ@8|ha<51fT!alik7r1p!kdiVuu z3o`=SS|{@jw7$y{^;rONO3Cfnh5&JmbV3n+C3m2D7$cmmAC+Z%hZ0 ztA50uhQm(&?&2^@`sa8obe~ap9%KcNjy{gSy#W6H_<$F@_X?|``BDC+vKYNWVAH-0 z^~yXv9=v_d znYDQ4M@V_rn8lt8*eC^0kcSePWer`zRFiX>cbsAaxo=l;iwW_Yxt$!opi|H`Nr%sq zIFt88=MIO(J_D#cWLCXoWFbD~x7gq$`uBk#8%3ma%Hd!!=t~mIREF(d)BwVw8(|qIAL4rx_x?}cM)hR}>Q=W!XgY3v?Zm?- z;qmL&%HeDFdjw~fl)heXC*O~rrq`O$h%^z!=~bj|WwtiDS3w`U4T?o#jjJoK?o7uM zoeq~}EhBHk+uh8(v*aC=n+PTUR0;bTu<`Q+3CmOk(de`Pn=B38-I@ZDzAiIW*UJlP z`cPM!vJ4?+o-XJ2s?x@(%z#mmhW9@q1W2S4slN z5n4_bP#t+5F+3M{RL%oPZ(0M$5rs~C&qT;Yu=g6X7kx5_<}yEXzBx&+P*$AJt69>6 zP9KR&>sy|u0~8%%yk)crCDKKIcQu6k;m*&e-+QP)GOSDD&mTCP&yGTF4yH$OJQIre zARf`B{M8Cp>hG1XqgN2HhK6OD6?SL+fFW7ID4I?M9$OPqsPs~pK~S4e93R~S#1tKg z$+j|bW>XwcIRsKn=mFpV=+9i-wm9e8q&WXL5AYk-(Zh3nz44Ntiuiy-!D1jul=lEJ zM0>mkFyDV*-l~yE-sBoTWPn6XW>zk`L=pBqso|*8P$si0p1nkf5w2x&K&b~=_s{gd z0-G_b+defHwiExM&P9Zpq`<1q`Ko_Q$X$WzvGuKMBr58g3iz6k>}!zE<`2LL zy_v&vTaG2km(j5oC2h+i-my=VyBNIapG3X$#Tf=FZRo;oU99FmwW0l-u(n(R;5l9` zb^f^Z{SX;VhTj{rVg;53o*cs9ua@BWO3fawKr78|3~?1~2`uq(PBomg9o`u@p;BuC z4he-fDK;XN+>Amfe)Z~~?@~Xhh9ByuYFHfXL=>0IzIL?Dh9(JP2sr?i>Y0$PT$d&J zrUvy?a`YIqc@XwR2lRh@0s_^3T~jnCuE+0SZr;}LS#=WWSVIi=mfSa5FAdg2@i^~9 z+}4>i{QX{|$4#E}B2}#1vIJ*|lOrLXSHg*vf6J6_zPe+i^3BZ;=_-zYi=7m;XGe8j zLV8F5x#s`sI2^Is`Fh|Ly#H6>b$TsDsiinS7b1!i{$EE94xS1c1~Wbtj0hu{|EqGC zL!O9-svwHS{&zo9h!I%QJi>^eKlyJ-?Gi@P0z%SN@O!x8;RDd~4K4iTgwkiRMOaY( z?P7i6^o{z^)8}iS(3c%W4y!8;pN0dUEaG<9eo=l~Q?Sh=zwuFlflk1drroGO&JrYe zsGR$x+vKZG@Yn*I9Z~*lJWacr?$mTwG+!yQUOSD{r%*-Q>NR7qR&B&0Ww#^X+{L^t zdOz>x)9i=zx1kA+_nuJ{9A5e}?~-bog?ceKT|qflWNI#bg_* z9_=BV$*7sb(m#?h)|EoK)PbNi3)zG#eM9mWw0J_d$y?TgLgp-*!Rr}5((JxVoVYg{IGBRtYrmJYV)9W#2$J&)n4nQY~Dye52-Zb6!KfgKObbT(~_SfCF)5fi)#oGM9K0d}(xW*5mLMLJp_4 z*eOwL&sznIhK%NKnBXcHR~wz;d8&rb2X>)9p6O7RRb%`(Rkp5p(l9W!bXq@@lNu5w zJDhyjuTNE~sZC9sEAUzTEjqvG`UqEgjYK0{r@l?8|0

3U3_E>+8^eWtdPhE@B+N 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�Yep~n>M><{&}F*?$xWN=tGztDszC?o_} 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

3XtjwCiV~NF6_hfu|xQ~E<#q}5;XQ2XP`%Q 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%0Dv(7 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 Date: Fri, 27 Jan 2023 12:22:45 -0500 Subject: [PATCH 07/27] Don't run examples for internal functions Otherwise, check() won't be able to find it. https://www.r-bloggers.com/2021/06/documentation-for-internal-functions/ --- R/feature_importance.R | 2 ++ man/bounds.Rd | 2 ++ 2 files changed, 4 insertions(+) diff --git a/R/feature_importance.R b/R/feature_importance.R index 4a113214..5c795e59 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -266,7 +266,9 @@ upper_bound <- function(x, alpha) { #' @return the value of the lower or upper bound for the confidence interval #' #' @examples +#' \dontrun{ #' x <- 1:10000 #' lower_bound(x, 0.05) #' upper_bound(x, 0.05) +#' } NULL diff --git a/man/bounds.Rd b/man/bounds.Rd index db397b27..0cd02457 100644 --- a/man/bounds.Rd +++ b/man/bounds.Rd @@ -29,8 +29,10 @@ Get the lower and upper bounds for an empirical confidence interval }} \examples{ +\dontrun{ x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) } +} \keyword{internal} From 02fddc3ef915239fd3be5ae0434d46ee335c1cc8 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 12:28:05 -0500 Subject: [PATCH 08/27] Document `alpha` parameter Also mark find_permuted_perf_metric internal so doc will be created for developers to read. --- R/feature_importance.R | 7 +++- man/bounds.Rd | 3 +- man/find_permuted_perf_metric.Rd | 71 ++++++++++++++++++++++++++++++++ 3 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 man/find_permuted_perf_metric.Rd diff --git a/R/feature_importance.R b/R/feature_importance.R index 5c795e59..6ced9ac9 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -191,10 +191,13 @@ get_feature_importance <- function(trained_model, test_data, #' @param progbar optional progress bar (default: `NULL`) #' @inheritParams run_ml #' @inheritParams get_feature_importance +#' @param alpha alpha level for the confidence interval +#' (default: `0.05` to obtain a 95% confidence interval) #' #' @return vector of mean permuted performance and mean difference between test #' and permuted performance (test minus permuted performance) -#' @noRd +#' @keywords internal +#' #' @author Begüm Topçuoğlu, \email{topcuoglu.begum@@gmail.com} #' @author Zena Lapp, \email{zenalapp@@umich.edu} #' @author Kelly Sovacool, \email{sovacool@@umich.edu} @@ -261,7 +264,7 @@ upper_bound <- function(x, alpha) { #' @title Get the lower and upper bounds for an empirical confidence interval #' #' @param x vector of test statistics, such as from permutation tests or bootstraps -#' @param alpha alpha level, e.g. 0.05 to get a 95% confidence interval +#' @inheritParams find_permuted_perf_metric #' #' @return the value of the lower or upper bound for the confidence interval #' diff --git a/man/bounds.Rd b/man/bounds.Rd index 0cd02457..2292f430 100644 --- a/man/bounds.Rd +++ b/man/bounds.Rd @@ -13,7 +13,8 @@ upper_bound(x, alpha) \arguments{ \item{x}{vector of test statistics, such as from permutation tests or bootstraps} -\item{alpha}{alpha level, e.g. 0.05 to get a 95\% confidence interval} +\item{alpha}{alpha level for the confidence interval +(default: \code{0.05} to obtain a 95\% confidence interval)} } \value{ the value of the lower or upper bound for the confidence interval diff --git a/man/find_permuted_perf_metric.Rd b/man/find_permuted_perf_metric.Rd new file mode 100644 index 00000000..92867461 --- /dev/null +++ b/man/find_permuted_perf_metric.Rd @@ -0,0 +1,71 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/feature_importance.R +\name{find_permuted_perf_metric} +\alias{find_permuted_perf_metric} +\title{Get permuted performance metric difference for a single feature +(or group of features)} +\usage{ +find_permuted_perf_metric( + test_data, + trained_model, + outcome_colname, + perf_metric_function, + perf_metric_name, + class_probs, + feat, + test_perf_value, + nperms = 100, + alpha = 0.05, + progbar = NULL +) +} +\arguments{ +\item{test_data}{Held out test data: dataframe of outcome and features.} + +\item{trained_model}{Trained model from \code{\link[caret:train]{caret::train()}}.} + +\item{outcome_colname}{Column name as a string of the outcome variable +(default \code{NULL}; the first column will be chosen automatically).} + +\item{perf_metric_function}{Function to calculate the performance metric to +be used for cross-validation and test performance. Some functions are +provided by caret (see \code{\link[caret:postResample]{caret::defaultSummary()}}). +Defaults: binary classification = \code{twoClassSummary}, +multi-class classification = \code{multiClassSummary}, +regression = \code{defaultSummary}.} + +\item{perf_metric_name}{The column name from the output of the function +provided to perf_metric_function that is to be used as the performance metric. +Defaults: binary classification = \code{"ROC"}, +multi-class classification = \code{"logLoss"}, +regression = \code{"RMSE"}.} + +\item{class_probs}{Whether to use class probabilities (TRUE for categorical outcomes, FALSE for numeric outcomes).} + +\item{feat}{feature or group of correlated features to permute.} + +\item{test_perf_value}{value of the true performance metric on the held-out +test data.} + +\item{nperms}{number of permutations to perform (default: \code{100}).} + +\item{alpha}{alpha level for the confidence interval +(default: \code{0.05} to obtain a 95\% confidence interval)} + +\item{progbar}{optional progress bar (default: \code{NULL})} +} +\value{ +vector of mean permuted performance and mean difference between test +and permuted performance (test minus permuted performance) +} +\description{ +Requires the \code{future.apply} package +} +\author{ +Begüm Topçuoğlu, \email{topcuoglu.begum@gmail.com} + +Zena Lapp, \email{zenalapp@umich.edu} + +Kelly Sovacool, \email{sovacool@umich.edu} +} +\keyword{internal} From 9cb8da5481f981739bfd8f99d4a59829c1ebcce2 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 17:54:37 +0000 Subject: [PATCH 09/27] =?UTF-8?q?=F0=9F=8E=A8=20Style=20R=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/feature_importance.R | 8 +- tests/testthat/test-feature_importance.R | 291 ++++++++++++++--------- 2 files changed, 182 insertions(+), 117 deletions(-) diff --git a/R/feature_importance.R b/R/feature_importance.R index 6ced9ac9..9832fbc6 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -249,15 +249,15 @@ find_permuted_perf_metric <- function(test_data, trained_model, outcome_colname, #' @describeIn bounds Get the lower bound for an empirical confidence interval #' @keywords internal lower_bound <- function(x, alpha) { - x <- sort(x) - return(x[length(x) * alpha / 2]) + x <- sort(x) + return(x[length(x) * alpha / 2]) } #' @describeIn bounds Get the upper bound for an empirical confidence interval #' @keywords internal upper_bound <- function(x, alpha) { - x <- sort(x) - return(x[length(x) - length(x) * alpha / 2]) + x <- sort(x) + return(x[length(x) - length(x) * alpha / 2]) } #' @name bounds diff --git a/tests/testthat/test-feature_importance.R b/tests/testthat/test-feature_importance.R index bb346c52..574702a4 100644 --- a/tests/testthat/test-feature_importance.R +++ b/tests/testthat/test-feature_importance.R @@ -21,7 +21,8 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049", 0.6473684 ), - c(perf_metric = 0.647368421052632, + c( + perf_metric = 0.647368421052632, perf_metric_diff = -2.10526316379855e-08, pvalue = 1, lower = 0.647368421052632, @@ -38,7 +39,8 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049|Otu00050", 0.6473684 ), - c(perf_metric = 0.647368421052632, + c( + perf_metric = 0.647368421052632, perf_metric_diff = -2.10526316379855e-08, pvalue = 1, lower = 0.647368421052632, @@ -57,11 +59,11 @@ test_that("find_permuted_perf_metric works", { 0.6473684 ), c( - perf_metric = 0.639315789473684, - perf_metric_diff = 0.00805261052631578, - pvalue = 0.188118811881188, - lower = 0.621052631578947, - upper = 0.655263157894737 + perf_metric = 0.639315789473684, + perf_metric_diff = 0.00805261052631578, + pvalue = 0.188118811881188, + lower = 0.621052631578947, + upper = 0.655263157894737 ), tolerance = 10e-4 ) @@ -83,36 +85,56 @@ test_that("feature importances are correct", { seed = 2019, corr_thresh = 1 ), - structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, - 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, - 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 - ), - perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, - 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, - 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, - 0.00768421052631585, 0.00984210526315787), - pvalue = c(0.237623762376238, - 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, - 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, - 0.435643564356436), - lower = c(0.581578947368421, 0.531578947368421, - 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, - 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + structure( + list( + perf_metric = c( + 0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c( + 0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787 + ), + pvalue = c( + 0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436 + ), + lower = c( + 0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c( + 0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947 + ), + names = structure(1:10, levels = c( + "Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010" + ), class = "factor"), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC" + ), + seed = c( + 2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019 + ) + ), + row.names = c(NA, -10L), class = "data.frame" ), - upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, - 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, - 0.660526315789474, 0.652631578947368, 0.721052631578947), - names = structure(1:10, levels = c("Otu00001", - "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010"), class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet"), - perf_metric_name = c("AUC", "AUC", "AUC", - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), - seed = c(2019, - 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), - row.names = c(NA, -10L), class = "data.frame"), tolerance = 0.1 # https://blog.r-hub.io/2019/05/21/nold/ ) }) @@ -132,36 +154,56 @@ test_that("feature importances are correct when tibbles used", { seed = 2019, corr_thresh = 1 ), - structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, - 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, - 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + structure( + list( + perf_metric = c( + 0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c( + 0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787 + ), + pvalue = c( + 0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436 + ), + lower = c( + 0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c( + 0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947 + ), + names = structure(1:10, levels = c( + "Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010" + ), class = "factor"), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC" + ), + seed = c( + 2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019 + ) + ), + row.names = c(NA, -10L), class = "data.frame" ), - perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, - 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, - 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, - 0.00768421052631585, 0.00984210526315787), - pvalue = c(0.237623762376238, - 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, - 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, - 0.435643564356436), - lower = c(0.581578947368421, 0.531578947368421, - 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, - 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 - ), - upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, - 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, - 0.660526315789474, 0.652631578947368, 0.721052631578947), - names = structure(1:10, levels = c("Otu00001", - "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010"), class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet"), - perf_metric_name = c("AUC", "AUC", "AUC", - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), - seed = c(2019, - 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), - row.names = c(NA, -10L), class = "data.frame"), tolerance = 10e-3 ) }) @@ -188,56 +230,79 @@ test_that("custom grouped features works", { seed = 2019, groups = groups ), - structure(list(perf_metric = c(0.629157894736842, 0.596921052631579, - 0.633605263157895, 0.639105263157895, - 0.642421052631579, 0.596842105263158, - 0.640289473684211, 0.629868421052632), - perf_metric_diff = c(0.0182105263157895, - 0.0504473684210527, 0.0137631578947369, - 0.00826315789473686, - 0.0049473684210527, 0.0505263157894738, - 0.00707894736842107, - 0.0175000000000001), - pvalue = c(0.237623762376238, 0.257425742574257, - 0.336633663366337, 0.366336633663366, - 0.336633663366337, 0.0891089108910891, - 0.207920792079208, 0.336633663366337), - lower = c(0.581578947368421, - 0.463157894736842, 0.58421052631579, 0.6, 0.623684210526316, - 0.523684210526316, 0.623684210526316, 0.560526315789474), - upper = c(0.668421052631579, - 0.7, 0.678947368421053, 0.668421052631579, - 0.657894736842105, - 0.671052631578947, 0.652631578947368, - 0.702631578947368), - names = structure(1:8, - levels = c("Otu00001", - "Otu00002|Otu00003|Otu00005", - "Otu00004", "Otu00006", - "Otu00007", - "Otu00008", "Otu00009", - "Otu00010"), - class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet" - ), - perf_metric_name = c("AUC", "AUC", "AUC", "AUC", "AUC", - "AUC", "AUC", "AUC"), - seed = c(2019, 2019, 2019, 2019, 2019, 2019, 2019, - 2019)), - row.names = c(NA, -8L), class = "data.frame"), + structure( + list( + perf_metric = c( + 0.629157894736842, 0.596921052631579, + 0.633605263157895, 0.639105263157895, + 0.642421052631579, 0.596842105263158, + 0.640289473684211, 0.629868421052632 + ), + perf_metric_diff = c( + 0.0182105263157895, + 0.0504473684210527, 0.0137631578947369, + 0.00826315789473686, + 0.0049473684210527, 0.0505263157894738, + 0.00707894736842107, + 0.0175000000000001 + ), + pvalue = c( + 0.237623762376238, 0.257425742574257, + 0.336633663366337, 0.366336633663366, + 0.336633663366337, 0.0891089108910891, + 0.207920792079208, 0.336633663366337 + ), + lower = c( + 0.581578947368421, + 0.463157894736842, 0.58421052631579, 0.6, 0.623684210526316, + 0.523684210526316, 0.623684210526316, 0.560526315789474 + ), + upper = c( + 0.668421052631579, + 0.7, 0.678947368421053, 0.668421052631579, + 0.657894736842105, + 0.671052631578947, 0.652631578947368, + 0.702631578947368 + ), + names = structure(1:8, + levels = c( + "Otu00001", + "Otu00002|Otu00003|Otu00005", + "Otu00004", "Otu00006", + "Otu00007", + "Otu00008", "Otu00009", + "Otu00010" + ), + class = "factor" + ), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC" + ), + seed = c( + 2019, 2019, 2019, 2019, 2019, 2019, 2019, + 2019 + ) + ), + row.names = c(NA, -8L), class = "data.frame" + ), tolerance = 10e-3 ) }) test_that("empirical confidence interval works", { - x <- 1:10000 - alpha <- 0.05 - lower <- lower_bound(x, alpha) - upper <- upper_bound(x, alpha) - expect_equal(lower, 250) - expect_equal(upper, 9750) - expect_equal(length(c(x[1:lower-1], x[upper:length(x)])) / length(x), - alpha, - tolerance = 0.01) + x <- 1:10000 + alpha <- 0.05 + lower <- lower_bound(x, alpha) + upper <- upper_bound(x, alpha) + expect_equal(lower, 250) + expect_equal(upper, 9750) + expect_equal(length(c(x[1:lower - 1], x[upper:length(x)])) / length(x), + alpha, + tolerance = 0.01 + ) }) From cfcd292327b5b356eb9cea61fad6d34380440379 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 18:21:44 +0000 Subject: [PATCH 10/27] =?UTF-8?q?=F0=9F=93=91=20Build=20docs=20site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dev/articles/introduction.html | 48 ++--- .../deps/bootstrap-5.2.2/bootstrap.min.css | 2 +- docs/dev/pkgdown.yml | 2 +- docs/dev/reference/bounds.html | 124 ++++++++++++ .../reference/find_permuted_perf_metric.html | 176 ++++++++++++++++++ docs/dev/reference/get_perf_metric_fn.html | 6 +- docs/dev/search.json | 2 +- docs/dev/sitemap.xml | 6 + 8 files changed, 336 insertions(+), 30 deletions(-) create mode 100644 docs/dev/reference/bounds.html create mode 100644 docs/dev/reference/find_permuted_perf_metric.html diff --git a/docs/dev/articles/introduction.html b/docs/dev/articles/introduction.html index 5493b38d..976dc8c0 100644 --- a/docs/dev/articles/introduction.html +++ b/docs/dev/articles/introduction.html @@ -656,28 +656,28 @@

Finding feature importanceNow, we can check out the feature importances:

 results_imp$feature_importance
-#>    perf_metric perf_metric_diff     pvalue    names method perf_metric_name
-#> 1    0.5459125        0.0003375 0.51485149 Otu00001     rf              AUC
-#> 2    0.5682625       -0.0220125 0.73267327 Otu00002     rf              AUC
-#> 3    0.5482875       -0.0020375 0.56435644 Otu00003     rf              AUC
-#> 4    0.6314375       -0.0851875 1.00000000 Otu00004     rf              AUC
-#> 5    0.4991750        0.0470750 0.08910891 Otu00005     rf              AUC
-#> 6    0.5364875        0.0097625 0.28712871 Otu00006     rf              AUC
-#> 7    0.5382875        0.0079625 0.39603960 Otu00007     rf              AUC
-#> 8    0.5160500        0.0302000 0.09900990 Otu00008     rf              AUC
-#> 9    0.5293375        0.0169125 0.17821782 Otu00009     rf              AUC
-#> 10   0.4976500        0.0486000 0.12871287 Otu00010     rf              AUC
-#>    seed
-#> 1  2019
-#> 2  2019
-#> 3  2019
-#> 4  2019
-#> 5  2019
-#> 6  2019
-#> 7  2019
-#> 8  2019
-#> 9  2019
-#> 10 2019
+#> perf_metric perf_metric_diff pvalue lower upper names method +#> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf +#> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf +#> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf +#> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf +#> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf +#> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf +#> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf +#> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf +#> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf +#> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf +#> perf_metric_name seed +#> 1 AUC 2019 +#> 2 AUC 2019 +#> 3 AUC 2019 +#> 4 AUC 2019 +#> 5 AUC 2019 +#> 6 AUC 2019 +#> 7 AUC 2019 +#> 8 AUC 2019 +#> 9 AUC 2019 +#> 10 AUC 2019

There are several columns:

  1. @@ -728,8 +728,8 @@

    Finding feature importance#> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance -#> perf_metric perf_metric_diff pvalue -#> 1 0.4941842 0.1531842 0.05940594 +#> perf_metric perf_metric_diff pvalue lower upper +#> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> names #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed diff --git a/docs/dev/deps/bootstrap-5.2.2/bootstrap.min.css b/docs/dev/deps/bootstrap-5.2.2/bootstrap.min.css index 1acf704c..f5babded 100644 --- a/docs/dev/deps/bootstrap-5.2.2/bootstrap.min.css +++ b/docs/dev/deps/bootstrap-5.2.2/bootstrap.min.css @@ -3,4 +3,4 @@ * Copyright 2011-2022 The Bootstrap Authors * Copyright 2011-2022 Twitter, Inc. * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) - */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #dee2e6;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222,226,230;--bs-primary-rgb: 13,110,253;--bs-secondary-rgb: 108,117,125;--bs-success-rgb: 25,135,84;--bs-info-rgb: 13,202,240;--bs-warning-rgb: 255,193,7;--bs-danger-rgb: 220,53,69;--bs-light-rgb: 248,249,250;--bs-dark-rgb: 33,37,41;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-body-color-rgb: 33,37,41;--bs-body-bg-rgb: 255,255,255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-2xl: 2rem;--bs-border-radius-pill: 50rem;--bs-link-color: #0d6efd;--bs-link-hover-color: #0a58ca;--bs-code-color: #000;--bs-highlight-bg: #fff3cd}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:#000;background-color:#f6f6f6;padding:.5rem;border:1px solid #dee2e6;border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:#f6f6f6;border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid var(--bs-border-color);border-radius:.375rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color: var(--bs-body-color);--bs-table-bg: rgba(0,0,0,0);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;border-radius:.375rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + .75rem + 2px);padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.375rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,0.25);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input[type="checkbox"]:checked,.shiny-input-container .checkbox input[type="checkbox"]:checked,.shiny-input-container .checkbox-inline input[type="checkbox"]:checked,.shiny-input-container .radio input[type="checkbox"]:checked,.shiny-input-container .radio-inline input[type="checkbox"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input[type="radio"]:checked,.shiny-input-container .checkbox input[type="radio"]:checked,.shiny-input-container .checkbox-inline input[type="radio"]:checked,.shiny-input-container .radio input[type="radio"]:checked,.shiny-input-container .radio-inline input[type="radio"]:checked{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.375rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,0.9);border-radius:.375rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select[size="1"]:valid:not([multiple]),.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid[size="1"]:not([multiple]){padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control.is-valid:not(:focus),.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select.is-valid:not(:focus),.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating.is-valid:not(:focus-within){z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.375rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select[size="1"]:invalid:not([multiple]),.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid[size="1"]:not([multiple]){padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control.is-invalid:not(:focus),.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select.is-invalid:not(:focus),.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating.is-invalid:not(:focus-within){z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #212529;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: .375rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49,132,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130,138,145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60,153,110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11,172,204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217,164,6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225,83,97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211,212,213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66,70,73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13,110,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108,117,125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25,135,84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13,202,240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255,193,7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220,53,69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248,249,250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33,37,41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: none;--bs-btn-focus-shadow-rgb: 49,132,253;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: .5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: .25rem}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #212529;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: .375rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(.375rem - 1px);--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: #212529;--bs-dropdown-link-hover-color: #1e2125;--bs-dropdown-link-hover-bg: #e9ecef;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: #6c757d;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: .375rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #495057;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:none;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: .375rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{background:none;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(0,0,0,0.55);--bs-navbar-hover-color: rgba(0,0,0,0.7);--bs-navbar-disabled-color: rgba(0,0,0,0.3);--bs-navbar-active-color: rgba(0,0,0,0.9);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(0,0,0,0.9);--bs-navbar-brand-hover-color: rgba(0,0,0,0.9);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(0,0,0,0.1);--bs-navbar-toggler-border-radius: .375rem;--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .show>.nav-link,.navbar-nav .active>.nav-link,.navbar-nav .nav-link.active{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-light{background-color:#f8f9fa}.navbar-dark{background-color:#212529;--bs-navbar-color: rgba(255,255,255,0.55);--bs-navbar-hover-color: rgba(255,255,255,0.75);--bs-navbar-disabled-color: rgba(255,255,255,0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255,255,255,0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-border-width: 1px;--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: .375rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(.375rem - 1px);--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(0,0,0,0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: #212529;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: 1px;--bs-accordion-border-radius: .375rem;--bs-accordion-inner-border-radius: calc(.375rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #212529;--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #0c63e4;--bs-accordion-active-bg: #e7f1ff}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: #6c757d;--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: #6c757d;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: .375rem;--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: #e9ecef;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: #6c757d;--bs-pagination-disabled-bg: #fff;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: .5rem}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: .25rem}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: .375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: .375rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: #595a5c;--bs-alert-bg: #f8f9fa;--bs-alert-border-color: #f5f6f8}.alert-default .alert-link{color:#47484a}.alert-primary{--bs-alert-color: #084298;--bs-alert-bg: #cfe2ff;--bs-alert-border-color: #b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{--bs-alert-color: #41464b;--bs-alert-bg: #e2e3e5;--bs-alert-border-color: #d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{--bs-alert-color: #0f5132;--bs-alert-bg: #d1e7dd;--bs-alert-border-color: #badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{--bs-alert-color: #055160;--bs-alert-bg: #cff4fc;--bs-alert-border-color: #b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{--bs-alert-color: #664d03;--bs-alert-bg: #fff3cd;--bs-alert-border-color: #ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{--bs-alert-color: #842029;--bs-alert-bg: #f8d7da;--bs-alert-border-color: #f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{--bs-alert-color: #636464;--bs-alert-bg: #fefefe;--bs-alert-border-color: #fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color: #141619;--bs-alert-bg: #d3d3d4;--bs-alert-border-color: #bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: .375rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0,0,0,0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #212529;--bs-list-group-bg: #fff;--bs-list-group-border-color: rgba(0,0,0,0.125);--bs-list-group-border-width: 1px;--bs-list-group-border-radius: .375rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: #495057;--bs-list-group-action-hover-color: #495057;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #212529;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: #6c757d;--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{color:#595a5c;background-color:#f8f9fa}.list-group-item-default.list-group-item-action:hover,.list-group-item-default.list-group-item-action:focus{color:#595a5c;background-color:#dfe0e1}.list-group-item-default.list-group-item-action.active{color:#fff;background-color:#595a5c;border-color:#595a5c}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255,255,255,0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: .375rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-toast-header-color: #6c757d;--bs-toast-header-bg: rgba(255,255,255,0.85);--bs-toast-header-border-color: rgba(0,0,0,0.05);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: 1px;--bs-modal-border-radius: .5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: .375rem;--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: .5rem;--bs-popover-inner-border-radius: calc(.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg: #f0f0f0;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #212529;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: ;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075)}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(222,226,230, var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(13,110,253, var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(108,117,125, var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(25,135,84, var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(13,202,240, var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(255,193,7, var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(220,53,69, var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(248,249,250, var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(33,37,41, var(--bs-bg-opacity, 1)) !important}.link-default{color:#dee2e6 !important}.link-default:hover,.link-default:focus{color:#e5e8eb !important}.link-primary{color:#0d6efd !important}.link-primary:hover,.link-primary:focus{color:#0a58ca !important}.link-secondary{color:#6c757d !important}.link-secondary:hover,.link-secondary:focus{color:#565e64 !important}.link-success{color:#198754 !important}.link-success:hover,.link-success:focus{color:#146c43 !important}.link-info{color:#0dcaf0 !important}.link-info:hover,.link-info:focus{color:#3dd5f3 !important}.link-warning{color:#ffc107 !important}.link-warning:hover,.link-warning:focus{color:#ffcd39 !important}.link-danger{color:#dc3545 !important}.link-danger:hover,.link-danger:focus{color:#b02a37 !important}.link-light{color:#f8f9fa !important}.link-light:hover,.link-light:focus{color:#f9fafb !important}.link-dark{color:#212529 !important}.link-dark:hover,.link-dark:focus{color:#1a1e21 !important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-1{--bs-border-width: 1px}.border-2{--bs-border-width: 2px}.border-3{--bs-border-width: 3px}.border-4{--bs-border-width: 4px}.border-5{--bs-border-width: 5px}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-semibold{font-weight:600 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-2xl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}.bslib-card{margin-bottom:1rem}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p,.bslib-card .card-body h1,.bslib-card .card-body .h1,.bslib-card .card-body h2,.bslib-card .card-body .h2,.bslib-card .card-body h3,.bslib-card .card-body .h3,.bslib-card .card-body h4,.bslib-card .card-body .h4,.bslib-card .card-body h5,.bslib-card .card-body .h5,.bslib-card .card-body h6,.bslib-card .card-body .h6{margin-top:0}.bslib-card .card-body p:last-child,.bslib-card .card-body h1:last-child,.bslib-card .card-body .h1:last-child,.bslib-card .card-body h2:last-child,.bslib-card .card-body .h2:last-child,.bslib-card .card-body h3:last-child,.bslib-card .card-body .h3:last-child,.bslib-card .card-body h4:last-child,.bslib-card .card-body .h4:last-child,.bslib-card .card-body h5:last-child,.bslib-card .card-body .h5:last-child,.bslib-card .card-body h6:last-child,.bslib-card .card-body .h6:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card.bslib-full-screen>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-card-title{padding-left:var(--bs-card-spacer-x, 1rem);padding-right:var(--bs-card-spacer-x, 1rem)}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .tab-content>.tab-pane.html-fill-container{display:none}.bslib-card .tab-content>.active.html-fill-container{display:flex}.bslib-card .tab-content.html-fill-container{padding:0}.bslib-full-screen{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:1px;right:3px;margin:0.5rem;padding:0.55rem !important;font-size:.8rem;cursor:pointer;opacity:.6;color:rgba(var(--bs-body-bg-rgb), 1);z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card:hover:not(.bslib-full-screen) .bslib-full-screen-enter{display:block}@media (max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:0.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:0.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);z-index:1069}.bslib-value-box .value-box-grid{grid-template-columns:var(--bslib-value-box-widths)}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem;max-height:var(--bslib-value-box-max-height)}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa{opacity:.85}.bslib-value-box .value-box-showcase .bi{font-size:5rem}.bslib-value-box .value-box-showcase .fa{font-size:4rem}.bslib-value-box .value-box-showcase.showcase-top-right{align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{color:inherit;margin-bottom:0;margin-top:0}.bslib-value-box .value-box-area.border-start{border-color:rgba(222,226,230,0.3) !important}.bslib-value-box.bslib-full-screen .value-box-grid{grid-template-columns:var(--bslib-value-box-widths-full-screen)}.bslib-value-box.bslib-full-screen .value-box-showcase{max-height:var(--bslib-value-box-max-height-full-screen)}.bslib-value-box:not(.bslib-full-screen) .value-box-showcase.showcase-top-right{margin-top:0}@media (max-width: 575.98px){.bslib-value-box .value-box-grid{grid-template-columns:var(--bslib-value-box-widths) !important}}.bslib-column-wrap{display:grid !important;gap:1rem;height:var(--bslib-column-wrap-height)}.bslib-column-wrap .card{margin-bottom:0}@media (max-width: 575.98px){.bslib-column-wrap{grid-template-columns:1fr !important;height:var(--bslib-column-wrap-height-mobile)}}@media (min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav.nav-stacked:not(.nav-hidden){flex-direction:column;-webkit-flex-direction:column;height:100%}.nav.nav-stacked:not(.nav-hidden)>.bslib-nav-spacer{margin-top:auto !important}}.row>main{max-width:50rem}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar-nav .nav-item>.nav-link{border-radius:.375rem;padding:0.5rem}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}.navbar-light .navbar-nav .active>.nav-link{background:#e9ecef;color:#212529}.navbar-dark .navbar-nav .active>.nav-link{background:#343a40;color:#fff}.navbar-dark .navbar-nav .nav-item>.nav-link:hover,.navbar-light .navbar-nav .nav-item>.nav-link:hover{background:rgba(13,110,253,0.1)}.navbar-dark input[type="search"]{border-color:#6c757d;background-color:#212529;color:#e9ecef}input[type="search"]{border-color:#dee2e6;width:12rem}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:#4d5154}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 575.98px){aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:#f8f9fa;border-color:#dee2e6;border-radius:.375rem}aside h2:first-child,aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem;border:0 solid #dee2e6}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:rgba(13,110,253,0.1);color:#000}#toc>.nav a.nav-link.active{background-color:#e9e9ea;color:#000}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:#4d5154;display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}::selection{background-color:#cfe2ff}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid #dee2e6;padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dd{margin-left:1.5rem}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:5px;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h3:hover .anchor,.h3:hover .anchor,h4:hover .anchor,.h4:hover .anchor,h5:hover .anchor,.h5:hover .anchor,h6:hover .anchor,.h6:hover .anchor{display:inline-block}.orcid{color:#A6CE39;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px rgba(0,0,0,0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:1rem 0.5rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:#6c757d}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, rgba(13,202,240,0.2), rgba(13,202,240,0.7) 95%, rgba(13,202,240,0.1))}.algolia-autocomplete .aa-hint{color:#212529}.algolia-autocomplete .aa-dropdown-menu{width:Max(100%, 20rem);background-color:#fff;border:1px solid var(--bs-border-color);margin-top:2px;max-height:50vh;overflow-y:auto}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:5px 4px;border-bottom:1px #e9ecef solid;font-size:0.9rem;color:#212529}.search-details{font-size:0.9rem;color:#0d6efd;display:inline;font-weight:bolder}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor{background-color:#e7f1ff}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} + */:root{--bs-blue: #0d6efd;--bs-indigo: #6610f2;--bs-purple: #6f42c1;--bs-pink: #d63384;--bs-red: #dc3545;--bs-orange: #fd7e14;--bs-yellow: #ffc107;--bs-green: #198754;--bs-teal: #20c997;--bs-cyan: #0dcaf0;--bs-black: #000;--bs-white: #fff;--bs-gray: #6c757d;--bs-gray-dark: #343a40;--bs-gray-100: #f8f9fa;--bs-gray-200: #e9ecef;--bs-gray-300: #dee2e6;--bs-gray-400: #ced4da;--bs-gray-500: #adb5bd;--bs-gray-600: #6c757d;--bs-gray-700: #495057;--bs-gray-800: #343a40;--bs-gray-900: #212529;--bs-default: #dee2e6;--bs-primary: #0d6efd;--bs-secondary: #6c757d;--bs-success: #198754;--bs-info: #0dcaf0;--bs-warning: #ffc107;--bs-danger: #dc3545;--bs-light: #f8f9fa;--bs-dark: #212529;--bs-default-rgb: 222,226,230;--bs-primary-rgb: 13,110,253;--bs-secondary-rgb: 108,117,125;--bs-success-rgb: 25,135,84;--bs-info-rgb: 13,202,240;--bs-warning-rgb: 255,193,7;--bs-danger-rgb: 220,53,69;--bs-light-rgb: 248,249,250;--bs-dark-rgb: 33,37,41;--bs-white-rgb: 255,255,255;--bs-black-rgb: 0,0,0;--bs-body-color-rgb: 33,37,41;--bs-body-bg-rgb: 255,255,255;--bs-font-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--bs-font-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--bs-gradient: linear-gradient(180deg, rgba(255,255,255,0.15), rgba(255,255,255,0));--bs-body-font-family: var(--bs-font-sans-serif);--bs-body-font-size:1rem;--bs-body-font-weight: 400;--bs-body-line-height: 1.5;--bs-body-color: #212529;--bs-body-bg: #fff;--bs-border-width: 1px;--bs-border-style: solid;--bs-border-color: #dee2e6;--bs-border-color-translucent: rgba(0,0,0,0.175);--bs-border-radius: .375rem;--bs-border-radius-sm: .25rem;--bs-border-radius-lg: .5rem;--bs-border-radius-xl: 1rem;--bs-border-radius-2xl: 2rem;--bs-border-radius-pill: 50rem;--bs-link-color: #0d6efd;--bs-link-hover-color: #0a58ca;--bs-code-color: #000;--bs-highlight-bg: #fff3cd}*,*::before,*::after{box-sizing:border-box}@media (prefers-reduced-motion: no-preference){:root{scroll-behavior:smooth}}body{margin:0;font-family:var(--bs-body-font-family);font-size:var(--bs-body-font-size);font-weight:var(--bs-body-font-weight);line-height:var(--bs-body-line-height);color:var(--bs-body-color);text-align:var(--bs-body-text-align);background-color:var(--bs-body-bg);-webkit-text-size-adjust:100%;-webkit-tap-highlight-color:rgba(0,0,0,0)}hr{margin:1rem 0;color:inherit;border:0;border-top:1px solid;opacity:.25}h6,.h6,h5,.h5,h4,.h4,h3,.h3,h2,.h2,h1,.h1{margin-top:0;margin-bottom:.5rem;font-weight:500;line-height:1.2}h1,.h1{font-size:calc(1.375rem + 1.5vw)}@media (min-width: 1200px){h1,.h1{font-size:2.5rem}}h2,.h2{font-size:calc(1.325rem + .9vw)}@media (min-width: 1200px){h2,.h2{font-size:2rem}}h3,.h3{font-size:calc(1.3rem + .6vw)}@media (min-width: 1200px){h3,.h3{font-size:1.75rem}}h4,.h4{font-size:calc(1.275rem + .3vw)}@media (min-width: 1200px){h4,.h4{font-size:1.5rem}}h5,.h5{font-size:1.25rem}h6,.h6{font-size:1rem}p{margin-top:0;margin-bottom:1rem}abbr[title]{text-decoration:underline dotted;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;-ms-text-decoration:underline dotted;-o-text-decoration:underline dotted;cursor:help;text-decoration-skip-ink:none}address{margin-bottom:1rem;font-style:normal;line-height:inherit}ol,ul{padding-left:2rem}ol,ul,dl{margin-top:0;margin-bottom:1rem}ol ol,ul ul,ol ul,ul ol{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem;padding:.625rem 1.25rem;border-left:.25rem solid #e9ecef}blockquote p:last-child,blockquote ul:last-child,blockquote ol:last-child{margin-bottom:0}b,strong{font-weight:bolder}small,.small{font-size:.875em}mark,.mark{padding:.1875em;background-color:var(--bs-highlight-bg)}sub,sup{position:relative;font-size:.75em;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:var(--bs-link-color);text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}a:hover{color:var(--bs-link-hover-color)}a:not([href]):not([class]),a:not([href]):not([class]):hover{color:inherit;text-decoration:none}pre,code,kbd,samp{font-family:var(--bs-font-monospace);font-size:1em}pre{display:block;margin-top:0;margin-bottom:1rem;overflow:auto;font-size:.875em;color:#000;background-color:#f6f6f6;padding:.5rem;border:1px solid #dee2e6;border-radius:.375rem}pre code{background-color:transparent;font-size:inherit;color:inherit;word-break:normal}code{font-size:.875em;color:var(--bs-code-color);background-color:#f6f6f6;border-radius:.375rem;padding:.125rem .25rem;word-wrap:break-word}a>code{color:inherit}kbd{padding:.1875rem .375rem;font-size:.875em;color:var(--bs-body-bg);background-color:var(--bs-body-color);border-radius:.25rem}kbd kbd{padding:0;font-size:1em}figure{margin:0 0 1rem}img,svg{vertical-align:middle}table{caption-side:bottom;border-collapse:collapse}caption{padding-top:.5rem;padding-bottom:.5rem;color:#6c757d;text-align:left}th{text-align:inherit;text-align:-webkit-match-parent}thead,tbody,tfoot,tr,td,th{border-color:inherit;border-style:solid;border-width:0}label{display:inline-block}button{border-radius:0}button:focus:not(:focus-visible){outline:0}input,button,select,optgroup,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,select{text-transform:none}[role="button"]{cursor:pointer}select{word-wrap:normal}select:disabled{opacity:1}[list]:not([type="date"]):not([type="datetime-local"]):not([type="month"]):not([type="week"]):not([type="time"])::-webkit-calendar-picker-indicator{display:none !important}button,[type="button"],[type="reset"],[type="submit"]{-webkit-appearance:button}button:not(:disabled),[type="button"]:not(:disabled),[type="reset"]:not(:disabled),[type="submit"]:not(:disabled){cursor:pointer}::-moz-focus-inner{padding:0;border-style:none}textarea{resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{float:left;width:100%;padding:0;margin-bottom:.5rem;font-size:calc(1.275rem + .3vw);line-height:inherit}@media (min-width: 1200px){legend{font-size:1.5rem}}legend+*{clear:left}::-webkit-datetime-edit-fields-wrapper,::-webkit-datetime-edit-text,::-webkit-datetime-edit-minute,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-year-field{padding:0}::-webkit-inner-spin-button{height:auto}[type="search"]{outline-offset:-2px;-webkit-appearance:textfield}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-color-swatch-wrapper{padding:0}::file-selector-button{font:inherit;-webkit-appearance:button}output{display:inline-block}iframe{border:0}summary{display:list-item;cursor:pointer}progress{vertical-align:baseline}[hidden]{display:none !important}.lead{font-size:1.25rem;font-weight:300}.display-1{font-size:calc(1.625rem + 4.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-1{font-size:5rem}}.display-2{font-size:calc(1.575rem + 3.9vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-2{font-size:4.5rem}}.display-3{font-size:calc(1.525rem + 3.3vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-3{font-size:4rem}}.display-4{font-size:calc(1.475rem + 2.7vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-4{font-size:3.5rem}}.display-5{font-size:calc(1.425rem + 2.1vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-5{font-size:3rem}}.display-6{font-size:calc(1.375rem + 1.5vw);font-weight:300;line-height:1.2}@media (min-width: 1200px){.display-6{font-size:2.5rem}}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none}.list-inline-item{display:inline-block}.list-inline-item:not(:last-child){margin-right:.5rem}.initialism{font-size:.875em;text-transform:uppercase}.blockquote{margin-bottom:1rem;font-size:1.25rem}.blockquote>:last-child{margin-bottom:0}.blockquote-footer{margin-top:-1rem;margin-bottom:1rem;font-size:.875em;color:#6c757d}.blockquote-footer::before{content:"\2014\00A0"}.img-fluid{max-width:100%;height:auto}.img-thumbnail{padding:.25rem;background-color:#fff;border:1px solid var(--bs-border-color);border-radius:.375rem;max-width:100%;height:auto}.figure{display:inline-block}.figure-img{margin-bottom:.5rem;line-height:1}.figure-caption{font-size:.875em;color:#6c757d}.container,.container-fluid,.container-xxl,.container-xl,.container-lg,.container-md,.container-sm{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-right:auto;margin-left:auto}@media (min-width: 576px){.container-sm,.container{max-width:540px}}@media (min-width: 768px){.container-md,.container-sm,.container{max-width:720px}}@media (min-width: 992px){.container-lg,.container-md,.container-sm,.container{max-width:960px}}@media (min-width: 1200px){.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1140px}}@media (min-width: 1400px){.container-xxl,.container-xl,.container-lg,.container-md,.container-sm,.container{max-width:1320px}}.row{--bs-gutter-x: 1.5rem;--bs-gutter-y: 0;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;margin-top:calc(-1 * var(--bs-gutter-y));margin-right:calc(-.5 * var(--bs-gutter-x));margin-left:calc(-.5 * var(--bs-gutter-x))}.row>*{flex-shrink:0;-webkit-flex-shrink:0;width:100%;max-width:100%;padding-right:calc(var(--bs-gutter-x) * .5);padding-left:calc(var(--bs-gutter-x) * .5);margin-top:var(--bs-gutter-y)}.col{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-1{margin-left:8.33333%}.offset-2{margin-left:16.66667%}.offset-3{margin-left:25%}.offset-4{margin-left:33.33333%}.offset-5{margin-left:41.66667%}.offset-6{margin-left:50%}.offset-7{margin-left:58.33333%}.offset-8{margin-left:66.66667%}.offset-9{margin-left:75%}.offset-10{margin-left:83.33333%}.offset-11{margin-left:91.66667%}.g-0,.gx-0{--bs-gutter-x: 0}.g-0,.gy-0{--bs-gutter-y: 0}.g-1,.gx-1{--bs-gutter-x: .25rem}.g-1,.gy-1{--bs-gutter-y: .25rem}.g-2,.gx-2{--bs-gutter-x: .5rem}.g-2,.gy-2{--bs-gutter-y: .5rem}.g-3,.gx-3{--bs-gutter-x: 1rem}.g-3,.gy-3{--bs-gutter-y: 1rem}.g-4,.gx-4{--bs-gutter-x: 1.5rem}.g-4,.gy-4{--bs-gutter-y: 1.5rem}.g-5,.gx-5{--bs-gutter-x: 3rem}.g-5,.gy-5{--bs-gutter-y: 3rem}@media (min-width: 576px){.col-sm{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-sm-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-sm-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-sm-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-sm-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-sm-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-sm-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-sm-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-sm-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-sm-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-sm-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-sm-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-sm-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-sm-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-sm-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-sm-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-sm-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-sm-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-sm-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-sm-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-sm-0{margin-left:0}.offset-sm-1{margin-left:8.33333%}.offset-sm-2{margin-left:16.66667%}.offset-sm-3{margin-left:25%}.offset-sm-4{margin-left:33.33333%}.offset-sm-5{margin-left:41.66667%}.offset-sm-6{margin-left:50%}.offset-sm-7{margin-left:58.33333%}.offset-sm-8{margin-left:66.66667%}.offset-sm-9{margin-left:75%}.offset-sm-10{margin-left:83.33333%}.offset-sm-11{margin-left:91.66667%}.g-sm-0,.gx-sm-0{--bs-gutter-x: 0}.g-sm-0,.gy-sm-0{--bs-gutter-y: 0}.g-sm-1,.gx-sm-1{--bs-gutter-x: .25rem}.g-sm-1,.gy-sm-1{--bs-gutter-y: .25rem}.g-sm-2,.gx-sm-2{--bs-gutter-x: .5rem}.g-sm-2,.gy-sm-2{--bs-gutter-y: .5rem}.g-sm-3,.gx-sm-3{--bs-gutter-x: 1rem}.g-sm-3,.gy-sm-3{--bs-gutter-y: 1rem}.g-sm-4,.gx-sm-4{--bs-gutter-x: 1.5rem}.g-sm-4,.gy-sm-4{--bs-gutter-y: 1.5rem}.g-sm-5,.gx-sm-5{--bs-gutter-x: 3rem}.g-sm-5,.gy-sm-5{--bs-gutter-y: 3rem}}@media (min-width: 768px){.col-md{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-md-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-md-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-md-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-md-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-md-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-md-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-md-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-md-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-md-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-md-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-md-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-md-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-md-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-md-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-md-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-md-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-md-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-md-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-md-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-md-0{margin-left:0}.offset-md-1{margin-left:8.33333%}.offset-md-2{margin-left:16.66667%}.offset-md-3{margin-left:25%}.offset-md-4{margin-left:33.33333%}.offset-md-5{margin-left:41.66667%}.offset-md-6{margin-left:50%}.offset-md-7{margin-left:58.33333%}.offset-md-8{margin-left:66.66667%}.offset-md-9{margin-left:75%}.offset-md-10{margin-left:83.33333%}.offset-md-11{margin-left:91.66667%}.g-md-0,.gx-md-0{--bs-gutter-x: 0}.g-md-0,.gy-md-0{--bs-gutter-y: 0}.g-md-1,.gx-md-1{--bs-gutter-x: .25rem}.g-md-1,.gy-md-1{--bs-gutter-y: .25rem}.g-md-2,.gx-md-2{--bs-gutter-x: .5rem}.g-md-2,.gy-md-2{--bs-gutter-y: .5rem}.g-md-3,.gx-md-3{--bs-gutter-x: 1rem}.g-md-3,.gy-md-3{--bs-gutter-y: 1rem}.g-md-4,.gx-md-4{--bs-gutter-x: 1.5rem}.g-md-4,.gy-md-4{--bs-gutter-y: 1.5rem}.g-md-5,.gx-md-5{--bs-gutter-x: 3rem}.g-md-5,.gy-md-5{--bs-gutter-y: 3rem}}@media (min-width: 992px){.col-lg{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-lg-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-lg-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-lg-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-lg-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-lg-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-lg-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-lg-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-lg-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-lg-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-lg-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-lg-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-lg-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-lg-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-lg-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-lg-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-lg-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-lg-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-lg-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-lg-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-lg-0{margin-left:0}.offset-lg-1{margin-left:8.33333%}.offset-lg-2{margin-left:16.66667%}.offset-lg-3{margin-left:25%}.offset-lg-4{margin-left:33.33333%}.offset-lg-5{margin-left:41.66667%}.offset-lg-6{margin-left:50%}.offset-lg-7{margin-left:58.33333%}.offset-lg-8{margin-left:66.66667%}.offset-lg-9{margin-left:75%}.offset-lg-10{margin-left:83.33333%}.offset-lg-11{margin-left:91.66667%}.g-lg-0,.gx-lg-0{--bs-gutter-x: 0}.g-lg-0,.gy-lg-0{--bs-gutter-y: 0}.g-lg-1,.gx-lg-1{--bs-gutter-x: .25rem}.g-lg-1,.gy-lg-1{--bs-gutter-y: .25rem}.g-lg-2,.gx-lg-2{--bs-gutter-x: .5rem}.g-lg-2,.gy-lg-2{--bs-gutter-y: .5rem}.g-lg-3,.gx-lg-3{--bs-gutter-x: 1rem}.g-lg-3,.gy-lg-3{--bs-gutter-y: 1rem}.g-lg-4,.gx-lg-4{--bs-gutter-x: 1.5rem}.g-lg-4,.gy-lg-4{--bs-gutter-y: 1.5rem}.g-lg-5,.gx-lg-5{--bs-gutter-x: 3rem}.g-lg-5,.gy-lg-5{--bs-gutter-y: 3rem}}@media (min-width: 1200px){.col-xl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xl-0{margin-left:0}.offset-xl-1{margin-left:8.33333%}.offset-xl-2{margin-left:16.66667%}.offset-xl-3{margin-left:25%}.offset-xl-4{margin-left:33.33333%}.offset-xl-5{margin-left:41.66667%}.offset-xl-6{margin-left:50%}.offset-xl-7{margin-left:58.33333%}.offset-xl-8{margin-left:66.66667%}.offset-xl-9{margin-left:75%}.offset-xl-10{margin-left:83.33333%}.offset-xl-11{margin-left:91.66667%}.g-xl-0,.gx-xl-0{--bs-gutter-x: 0}.g-xl-0,.gy-xl-0{--bs-gutter-y: 0}.g-xl-1,.gx-xl-1{--bs-gutter-x: .25rem}.g-xl-1,.gy-xl-1{--bs-gutter-y: .25rem}.g-xl-2,.gx-xl-2{--bs-gutter-x: .5rem}.g-xl-2,.gy-xl-2{--bs-gutter-y: .5rem}.g-xl-3,.gx-xl-3{--bs-gutter-x: 1rem}.g-xl-3,.gy-xl-3{--bs-gutter-y: 1rem}.g-xl-4,.gx-xl-4{--bs-gutter-x: 1.5rem}.g-xl-4,.gy-xl-4{--bs-gutter-y: 1.5rem}.g-xl-5,.gx-xl-5{--bs-gutter-x: 3rem}.g-xl-5,.gy-xl-5{--bs-gutter-y: 3rem}}@media (min-width: 1400px){.col-xxl{flex:1 0 0%;-webkit-flex:1 0 0%}.row-cols-xxl-auto>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.row-cols-xxl-1>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.row-cols-xxl-2>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.row-cols-xxl-3>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.row-cols-xxl-4>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.row-cols-xxl-5>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:20%}.row-cols-xxl-6>*{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-auto{flex:0 0 auto;-webkit-flex:0 0 auto;width:auto}.col-xxl-1{flex:0 0 auto;-webkit-flex:0 0 auto;width:8.33333%}.col-xxl-2{flex:0 0 auto;-webkit-flex:0 0 auto;width:16.66667%}.col-xxl-3{flex:0 0 auto;-webkit-flex:0 0 auto;width:25%}.col-xxl-4{flex:0 0 auto;-webkit-flex:0 0 auto;width:33.33333%}.col-xxl-5{flex:0 0 auto;-webkit-flex:0 0 auto;width:41.66667%}.col-xxl-6{flex:0 0 auto;-webkit-flex:0 0 auto;width:50%}.col-xxl-7{flex:0 0 auto;-webkit-flex:0 0 auto;width:58.33333%}.col-xxl-8{flex:0 0 auto;-webkit-flex:0 0 auto;width:66.66667%}.col-xxl-9{flex:0 0 auto;-webkit-flex:0 0 auto;width:75%}.col-xxl-10{flex:0 0 auto;-webkit-flex:0 0 auto;width:83.33333%}.col-xxl-11{flex:0 0 auto;-webkit-flex:0 0 auto;width:91.66667%}.col-xxl-12{flex:0 0 auto;-webkit-flex:0 0 auto;width:100%}.offset-xxl-0{margin-left:0}.offset-xxl-1{margin-left:8.33333%}.offset-xxl-2{margin-left:16.66667%}.offset-xxl-3{margin-left:25%}.offset-xxl-4{margin-left:33.33333%}.offset-xxl-5{margin-left:41.66667%}.offset-xxl-6{margin-left:50%}.offset-xxl-7{margin-left:58.33333%}.offset-xxl-8{margin-left:66.66667%}.offset-xxl-9{margin-left:75%}.offset-xxl-10{margin-left:83.33333%}.offset-xxl-11{margin-left:91.66667%}.g-xxl-0,.gx-xxl-0{--bs-gutter-x: 0}.g-xxl-0,.gy-xxl-0{--bs-gutter-y: 0}.g-xxl-1,.gx-xxl-1{--bs-gutter-x: .25rem}.g-xxl-1,.gy-xxl-1{--bs-gutter-y: .25rem}.g-xxl-2,.gx-xxl-2{--bs-gutter-x: .5rem}.g-xxl-2,.gy-xxl-2{--bs-gutter-y: .5rem}.g-xxl-3,.gx-xxl-3{--bs-gutter-x: 1rem}.g-xxl-3,.gy-xxl-3{--bs-gutter-y: 1rem}.g-xxl-4,.gx-xxl-4{--bs-gutter-x: 1.5rem}.g-xxl-4,.gy-xxl-4{--bs-gutter-y: 1.5rem}.g-xxl-5,.gx-xxl-5{--bs-gutter-x: 3rem}.g-xxl-5,.gy-xxl-5{--bs-gutter-y: 3rem}}.table{--bs-table-color: var(--bs-body-color);--bs-table-bg: rgba(0,0,0,0);--bs-table-border-color: var(--bs-border-color);--bs-table-accent-bg: rgba(0,0,0,0);--bs-table-striped-color: var(--bs-body-color);--bs-table-striped-bg: rgba(0,0,0,0.05);--bs-table-active-color: var(--bs-body-color);--bs-table-active-bg: rgba(0,0,0,0.1);--bs-table-hover-color: var(--bs-body-color);--bs-table-hover-bg: rgba(0,0,0,0.075);width:100%;margin-bottom:1rem;color:var(--bs-table-color);vertical-align:top;border-color:var(--bs-table-border-color)}.table>:not(caption)>*>*{padding:.5rem .5rem;background-color:var(--bs-table-bg);border-bottom-width:1px;box-shadow:inset 0 0 0 9999px var(--bs-table-accent-bg)}.table>tbody{vertical-align:inherit}.table>thead{vertical-align:bottom}.table-group-divider{border-top:2px solid currentcolor}.caption-top{caption-side:top}.table-sm>:not(caption)>*>*{padding:.25rem .25rem}.table-bordered>:not(caption)>*{border-width:1px 0}.table-bordered>:not(caption)>*>*{border-width:0 1px}.table-borderless>:not(caption)>*>*{border-bottom-width:0}.table-borderless>:not(:first-child){border-top-width:0}.table-striped>tbody>tr:nth-of-type(odd)>*{--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-striped-columns>:not(caption)>tr>:nth-child(even){--bs-table-accent-bg: var(--bs-table-striped-bg);color:var(--bs-table-striped-color)}.table-active{--bs-table-accent-bg: var(--bs-table-active-bg);color:var(--bs-table-active-color)}.table-hover>tbody>tr:hover>*{--bs-table-accent-bg: var(--bs-table-hover-bg);color:var(--bs-table-hover-color)}.table-primary{--bs-table-color: #000;--bs-table-bg: #cfe2ff;--bs-table-border-color: #bacbe6;--bs-table-striped-bg: #c5d7f2;--bs-table-striped-color: #000;--bs-table-active-bg: #bacbe6;--bs-table-active-color: #000;--bs-table-hover-bg: #bfd1ec;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-secondary{--bs-table-color: #000;--bs-table-bg: #e2e3e5;--bs-table-border-color: #cbccce;--bs-table-striped-bg: #d7d8da;--bs-table-striped-color: #000;--bs-table-active-bg: #cbccce;--bs-table-active-color: #000;--bs-table-hover-bg: #d1d2d4;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-success{--bs-table-color: #000;--bs-table-bg: #d1e7dd;--bs-table-border-color: #bcd0c7;--bs-table-striped-bg: #c7dbd2;--bs-table-striped-color: #000;--bs-table-active-bg: #bcd0c7;--bs-table-active-color: #000;--bs-table-hover-bg: #c1d6cc;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-info{--bs-table-color: #000;--bs-table-bg: #cff4fc;--bs-table-border-color: #badce3;--bs-table-striped-bg: #c5e8ef;--bs-table-striped-color: #000;--bs-table-active-bg: #badce3;--bs-table-active-color: #000;--bs-table-hover-bg: #bfe2e9;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-warning{--bs-table-color: #000;--bs-table-bg: #fff3cd;--bs-table-border-color: #e6dbb9;--bs-table-striped-bg: #f2e7c3;--bs-table-striped-color: #000;--bs-table-active-bg: #e6dbb9;--bs-table-active-color: #000;--bs-table-hover-bg: #ece1be;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-danger{--bs-table-color: #000;--bs-table-bg: #f8d7da;--bs-table-border-color: #dfc2c4;--bs-table-striped-bg: #eccccf;--bs-table-striped-color: #000;--bs-table-active-bg: #dfc2c4;--bs-table-active-color: #000;--bs-table-hover-bg: #e5c7ca;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-light{--bs-table-color: #000;--bs-table-bg: #f8f9fa;--bs-table-border-color: #dfe0e1;--bs-table-striped-bg: #ecedee;--bs-table-striped-color: #000;--bs-table-active-bg: #dfe0e1;--bs-table-active-color: #000;--bs-table-hover-bg: #e5e6e7;--bs-table-hover-color: #000;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-dark{--bs-table-color: #fff;--bs-table-bg: #212529;--bs-table-border-color: #373b3e;--bs-table-striped-bg: #2c3034;--bs-table-striped-color: #fff;--bs-table-active-bg: #373b3e;--bs-table-active-color: #fff;--bs-table-hover-bg: #323539;--bs-table-hover-color: #fff;color:var(--bs-table-color);border-color:var(--bs-table-border-color)}.table-responsive{overflow-x:auto;-webkit-overflow-scrolling:touch}@media (max-width: 575.98px){.table-responsive-sm{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 767.98px){.table-responsive-md{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 991.98px){.table-responsive-lg{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1199.98px){.table-responsive-xl{overflow-x:auto;-webkit-overflow-scrolling:touch}}@media (max-width: 1399.98px){.table-responsive-xxl{overflow-x:auto;-webkit-overflow-scrolling:touch}}.form-label,.shiny-input-container .control-label{margin-bottom:.5rem}.col-form-label{padding-top:calc(.375rem + 1px);padding-bottom:calc(.375rem + 1px);margin-bottom:0;font-size:inherit;line-height:1.5}.col-form-label-lg{padding-top:calc(.5rem + 1px);padding-bottom:calc(.5rem + 1px);font-size:1.25rem}.col-form-label-sm{padding-top:calc(.25rem + 1px);padding-bottom:calc(.25rem + 1px);font-size:.875rem}.form-text{margin-top:.25rem;font-size:.875em;color:#6c757d}.form-control{display:block;width:100%;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;border-radius:.375rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control{transition:none}}.form-control[type="file"]{overflow:hidden}.form-control[type="file"]:not(:disabled):not([readonly]){cursor:pointer}.form-control:focus{color:#212529;background-color:#fff;border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-control::-webkit-date-and-time-value{height:1.5em}.form-control::placeholder{color:#6c757d;opacity:1}.form-control:disabled{background-color:#e9ecef;opacity:1}.form-control::file-selector-button{padding:.375rem .75rem;margin:-.375rem -.75rem;margin-inline-end:.75rem;color:#212529;background-color:#e9ecef;pointer-events:none;border-color:inherit;border-style:solid;border-width:0;border-inline-end-width:1px;border-radius:0;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-control::file-selector-button{transition:none}}.form-control:hover:not(:disabled):not([readonly])::file-selector-button{background-color:#dde0e3}.form-control-plaintext{display:block;width:100%;padding:.375rem 0;margin-bottom:0;line-height:1.5;color:#212529;background-color:transparent;border:solid transparent;border-width:1px 0}.form-control-plaintext:focus{outline:0}.form-control-plaintext.form-control-sm,.form-control-plaintext.form-control-lg{padding-right:0;padding-left:0}.form-control-sm{min-height:calc(1.5em + .5rem + 2px);padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.form-control-sm::file-selector-button{padding:.25rem .5rem;margin:-.25rem -.5rem;margin-inline-end:.5rem}.form-control-lg{min-height:calc(1.5em + 1rem + 2px);padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.form-control-lg::file-selector-button{padding:.5rem 1rem;margin:-.5rem -1rem;margin-inline-end:1rem}textarea.form-control{min-height:calc(1.5em + .75rem + 2px)}textarea.form-control-sm{min-height:calc(1.5em + .5rem + 2px)}textarea.form-control-lg{min-height:calc(1.5em + 1rem + 2px)}.form-control-color{width:3rem;height:calc(1.5em + .75rem + 2px);padding:.375rem}.form-control-color:not(:disabled):not([readonly]){cursor:pointer}.form-control-color::-moz-color-swatch{border:0 !important;border-radius:.375rem}.form-control-color::-webkit-color-swatch{border-radius:.375rem}.form-control-color.form-control-sm{height:calc(1.5em + .5rem + 2px)}.form-control-color.form-control-lg{height:calc(1.5em + 1rem + 2px)}.form-select{display:block;width:100%;padding:.375rem 2.25rem .375rem .75rem;-moz-padding-start:calc(.75rem - 3px);font-size:1rem;font-weight:400;line-height:1.5;color:#212529;background-color:#fff;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right .75rem center;background-size:16px 12px;border:1px solid #ced4da;border-radius:.375rem;transition:border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-select{transition:none}}.form-select:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-select[multiple],.form-select[size]:not([size="1"]){padding-right:.75rem;background-image:none}.form-select:disabled{background-color:#e9ecef}.form-select:-moz-focusring{color:transparent;text-shadow:0 0 0 #212529}.form-select-sm{padding-top:.25rem;padding-bottom:.25rem;padding-left:.5rem;font-size:.875rem;border-radius:.25rem}.form-select-lg{padding-top:.5rem;padding-bottom:.5rem;padding-left:1rem;font-size:1.25rem;border-radius:.5rem}.form-check,.shiny-input-container .checkbox,.shiny-input-container .radio{display:block;min-height:1.5rem;padding-left:0;margin-bottom:.125rem}.form-check .form-check-input,.form-check .shiny-input-container .checkbox input,.form-check .shiny-input-container .radio input,.shiny-input-container .checkbox .form-check-input,.shiny-input-container .checkbox .shiny-input-container .checkbox input,.shiny-input-container .checkbox .shiny-input-container .radio input,.shiny-input-container .radio .form-check-input,.shiny-input-container .radio .shiny-input-container .checkbox input,.shiny-input-container .radio .shiny-input-container .radio input{float:left;margin-left:0}.form-check-reverse{padding-right:0;padding-left:0;text-align:right}.form-check-reverse .form-check-input{float:right;margin-right:0;margin-left:0}.form-check-input,.shiny-input-container .checkbox input,.shiny-input-container .checkbox-inline input,.shiny-input-container .radio input,.shiny-input-container .radio-inline input{width:1em;height:1em;margin-top:.25em;vertical-align:top;background-color:#fff;background-repeat:no-repeat;background-position:center;background-size:contain;border:1px solid rgba(0,0,0,0.25);appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none;print-color-adjust:exact}.form-check-input[type="checkbox"],.shiny-input-container .checkbox input[type="checkbox"],.shiny-input-container .checkbox-inline input[type="checkbox"],.shiny-input-container .radio input[type="checkbox"],.shiny-input-container .radio-inline input[type="checkbox"]{border-radius:.25em}.form-check-input[type="radio"],.shiny-input-container .checkbox input[type="radio"],.shiny-input-container .checkbox-inline input[type="radio"],.shiny-input-container .radio input[type="radio"],.shiny-input-container .radio-inline input[type="radio"]{border-radius:50%}.form-check-input:active,.shiny-input-container .checkbox input:active,.shiny-input-container .checkbox-inline input:active,.shiny-input-container .radio input:active,.shiny-input-container .radio-inline input:active{filter:brightness(90%)}.form-check-input:focus,.shiny-input-container .checkbox input:focus,.shiny-input-container .checkbox-inline input:focus,.shiny-input-container .radio input:focus,.shiny-input-container .radio-inline input:focus{border-color:#86b7fe;outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25)}.form-check-input:checked,.shiny-input-container .checkbox input:checked,.shiny-input-container .checkbox-inline input:checked,.shiny-input-container .radio input:checked,.shiny-input-container .radio-inline input:checked{background-color:#0d6efd;border-color:#0d6efd}.form-check-input:checked[type="checkbox"],.shiny-input-container .checkbox input:checked[type="checkbox"],.shiny-input-container .checkbox-inline input:checked[type="checkbox"],.shiny-input-container .radio input:checked[type="checkbox"],.shiny-input-container .radio-inline input:checked[type="checkbox"]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='m6 10 3 3 6-6'/%3e%3c/svg%3e")}.form-check-input:checked[type="radio"],.shiny-input-container .checkbox input:checked[type="radio"],.shiny-input-container .checkbox-inline input:checked[type="radio"],.shiny-input-container .radio input:checked[type="radio"],.shiny-input-container .radio-inline input:checked[type="radio"]{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='2' fill='%23fff'/%3e%3c/svg%3e")}.form-check-input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox input[type="checkbox"]:indeterminate,.shiny-input-container .checkbox-inline input[type="checkbox"]:indeterminate,.shiny-input-container .radio input[type="checkbox"]:indeterminate,.shiny-input-container .radio-inline input[type="checkbox"]:indeterminate{background-color:#0d6efd;border-color:#0d6efd;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20'%3e%3cpath fill='none' stroke='%23fff' stroke-linecap='round' stroke-linejoin='round' stroke-width='3' d='M6 10h8'/%3e%3c/svg%3e")}.form-check-input:disabled,.shiny-input-container .checkbox input:disabled,.shiny-input-container .checkbox-inline input:disabled,.shiny-input-container .radio input:disabled,.shiny-input-container .radio-inline input:disabled{pointer-events:none;filter:none;opacity:.5}.form-check-input[disabled]~.form-check-label,.form-check-input[disabled]~span,.form-check-input:disabled~.form-check-label,.form-check-input:disabled~span,.shiny-input-container .checkbox input[disabled]~.form-check-label,.shiny-input-container .checkbox input[disabled]~span,.shiny-input-container .checkbox input:disabled~.form-check-label,.shiny-input-container .checkbox input:disabled~span,.shiny-input-container .checkbox-inline input[disabled]~.form-check-label,.shiny-input-container .checkbox-inline input[disabled]~span,.shiny-input-container .checkbox-inline input:disabled~.form-check-label,.shiny-input-container .checkbox-inline input:disabled~span,.shiny-input-container .radio input[disabled]~.form-check-label,.shiny-input-container .radio input[disabled]~span,.shiny-input-container .radio input:disabled~.form-check-label,.shiny-input-container .radio input:disabled~span,.shiny-input-container .radio-inline input[disabled]~.form-check-label,.shiny-input-container .radio-inline input[disabled]~span,.shiny-input-container .radio-inline input:disabled~.form-check-label,.shiny-input-container .radio-inline input:disabled~span{cursor:default;opacity:.5}.form-check-label,.shiny-input-container .checkbox label,.shiny-input-container .checkbox-inline label,.shiny-input-container .radio label,.shiny-input-container .radio-inline label{cursor:pointer}.form-switch{padding-left:2.5em}.form-switch .form-check-input{width:2em;margin-left:-2.5em;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='rgba%280,0,0,0.25%29'/%3e%3c/svg%3e");background-position:left center;border-radius:2em;transition:background-position 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.form-switch .form-check-input{transition:none}}.form-switch .form-check-input:focus{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%2386b7fe'/%3e%3c/svg%3e")}.form-switch .form-check-input:checked{background-position:right center;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='-4 -4 8 8'%3e%3ccircle r='3' fill='%23fff'/%3e%3c/svg%3e")}.form-switch.form-check-reverse{padding-right:2.5em;padding-left:0}.form-switch.form-check-reverse .form-check-input{margin-right:-2.5em;margin-left:0}.form-check-inline{display:inline-block;margin-right:1rem}.btn-check{position:absolute;clip:rect(0, 0, 0, 0);pointer-events:none}.btn-check[disabled]+.btn,.btn-check:disabled+.btn{pointer-events:none;filter:none;opacity:.65}.form-range{width:100%;height:1.5rem;padding:0;background-color:transparent;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}.form-range:focus{outline:0}.form-range:focus::-webkit-slider-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range:focus::-moz-range-thumb{box-shadow:0 0 0 1px #fff,0 0 0 .25rem rgba(13,110,253,0.25)}.form-range::-moz-focus-outer{border:0}.form-range::-webkit-slider-thumb{width:1rem;height:1rem;margin-top:-.25rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-webkit-slider-thumb{transition:none}}.form-range::-webkit-slider-thumb:active{background-color:#b6d4fe}.form-range::-webkit-slider-runnable-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range::-moz-range-thumb{width:1rem;height:1rem;background-color:#0d6efd;border:0;border-radius:1rem;transition:background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out;appearance:none;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;-o-appearance:none}@media (prefers-reduced-motion: reduce){.form-range::-moz-range-thumb{transition:none}}.form-range::-moz-range-thumb:active{background-color:#b6d4fe}.form-range::-moz-range-track{width:100%;height:.5rem;color:transparent;cursor:pointer;background-color:#dee2e6;border-color:transparent;border-radius:1rem}.form-range:disabled{pointer-events:none}.form-range:disabled::-webkit-slider-thumb{background-color:#adb5bd}.form-range:disabled::-moz-range-thumb{background-color:#adb5bd}.form-floating{position:relative}.form-floating>.form-control,.form-floating>.form-control-plaintext,.form-floating>.form-select{height:calc(3.5rem + 2px);line-height:1.25}.form-floating>label{position:absolute;top:0;left:0;width:100%;height:100%;padding:1rem .75rem;overflow:hidden;text-align:start;text-overflow:ellipsis;white-space:nowrap;pointer-events:none;border:1px solid transparent;transform-origin:0 0;transition:opacity 0.1s ease-in-out,transform 0.1s ease-in-out}@media (prefers-reduced-motion: reduce){.form-floating>label{transition:none}}.form-floating>.form-control,.form-floating>.form-control-plaintext{padding:1rem .75rem}.form-floating>.form-control::placeholder,.form-floating>.form-control-plaintext::placeholder{color:transparent}.form-floating>.form-control:focus,.form-floating>.form-control:not(:placeholder-shown),.form-floating>.form-control-plaintext:focus,.form-floating>.form-control-plaintext:not(:placeholder-shown){padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:-webkit-autofill,.form-floating>.form-control-plaintext:-webkit-autofill{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-select{padding-top:1.625rem;padding-bottom:.625rem}.form-floating>.form-control:focus~label,.form-floating>.form-control:not(:placeholder-shown)~label,.form-floating>.form-control-plaintext~label,.form-floating>.form-select~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control:-webkit-autofill~label{opacity:.65;transform:scale(0.85) translateY(-0.5rem) translateX(0.15rem)}.form-floating>.form-control-plaintext~label{border-width:1px 0}.input-group{position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:stretch;-webkit-align-items:stretch;width:100%}.input-group>.form-control,.input-group>.form-select,.input-group>.form-floating{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;width:1%;min-width:0}.input-group>.form-control:focus,.input-group>.form-select:focus,.input-group>.form-floating:focus-within{z-index:5}.input-group .btn{position:relative;z-index:2}.input-group .btn:focus{z-index:5}.input-group-text{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:center;white-space:nowrap;background-color:#e9ecef;border:1px solid #ced4da;border-radius:.375rem}.input-group-lg>.form-control,.input-group-lg>.form-select,.input-group-lg>.input-group-text,.input-group-lg>.btn{padding:.5rem 1rem;font-size:1.25rem;border-radius:.5rem}.input-group-sm>.form-control,.input-group-sm>.form-select,.input-group-sm>.input-group-text,.input-group-sm>.btn{padding:.25rem .5rem;font-size:.875rem;border-radius:.25rem}.input-group-lg>.form-select,.input-group-sm>.form-select{padding-right:3rem}.input-group:not(.has-validation)>:not(:last-child):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group:not(.has-validation)>.dropdown-toggle:nth-last-child(n + 3),.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-control,.input-group:not(.has-validation)>.form-floating:not(:last-child)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group.has-validation>:nth-last-child(n + 3):not(.dropdown-toggle):not(.dropdown-menu):not(.form-floating),.input-group.has-validation>.dropdown-toggle:nth-last-child(n + 4),.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-control,.input-group.has-validation>.form-floating:nth-last-child(n + 3)>.form-select{border-top-right-radius:0;border-bottom-right-radius:0}.input-group>:not(:first-child):not(.dropdown-menu):not(.valid-tooltip):not(.valid-feedback):not(.invalid-tooltip):not(.invalid-feedback){margin-left:-1px;border-top-left-radius:0;border-bottom-left-radius:0}.input-group>.form-floating:not(:first-child)>.form-control,.input-group>.form-floating:not(:first-child)>.form-select{border-top-left-radius:0;border-bottom-left-radius:0}.valid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#198754}.valid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(25,135,84,0.9);border-radius:.375rem}.was-validated :valid~.valid-feedback,.was-validated :valid~.valid-tooltip,.is-valid~.valid-feedback,.is-valid~.valid-tooltip{display:block}.was-validated .form-control:valid,.form-control.is-valid{border-color:#198754;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:valid:focus,.form-control.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated textarea.form-control:valid,textarea.form-control.is-valid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:valid,.form-select.is-valid{border-color:#198754}.was-validated .form-select:valid:not([multiple]):not([size]),.was-validated .form-select:valid:not([multiple])[size="1"],.form-select.is-valid:not([multiple]):not([size]),.form-select.is-valid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3e%3cpath fill='%23198754' d='M2.3 6.73.6 4.53c-.4-1.04.46-1.4 1.1-.8l1.1 1.4 3.4-3.8c.6-.63 1.6-.27 1.2.7l-4 4.6c-.43.5-.8.4-1.1.1z'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:valid:focus,.form-select.is-valid:focus{border-color:#198754;box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-control-color:valid,.form-control-color.is-valid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:valid,.form-check-input.is-valid{border-color:#198754}.was-validated .form-check-input:valid:checked,.form-check-input.is-valid:checked{background-color:#198754}.was-validated .form-check-input:valid:focus,.form-check-input.is-valid:focus{box-shadow:0 0 0 .25rem rgba(25,135,84,0.25)}.was-validated .form-check-input:valid~.form-check-label,.form-check-input.is-valid~.form-check-label{color:#198754}.form-check-inline .form-check-input~.valid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):valid,.input-group>.form-control:not(:focus).is-valid,.was-validated .input-group>.form-select:not(:focus):valid,.input-group>.form-select:not(:focus).is-valid,.was-validated .input-group>.form-floating:not(:focus-within):valid,.input-group>.form-floating:not(:focus-within).is-valid{z-index:3}.invalid-feedback{display:none;width:100%;margin-top:.25rem;font-size:.875em;color:#dc3545}.invalid-tooltip{position:absolute;top:100%;z-index:5;display:none;max-width:100%;padding:.25rem .5rem;margin-top:.1rem;font-size:.875rem;color:#fff;background-color:rgba(220,53,69,0.9);border-radius:.375rem}.was-validated :invalid~.invalid-feedback,.was-validated :invalid~.invalid-tooltip,.is-invalid~.invalid-feedback,.is-invalid~.invalid-tooltip{display:block}.was-validated .form-control:invalid,.form-control.is-invalid{border-color:#dc3545;padding-right:calc(1.5em + .75rem);background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-repeat:no-repeat;background-position:right calc(.375em + .1875rem) center;background-size:calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-control:invalid:focus,.form-control.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated textarea.form-control:invalid,textarea.form-control.is-invalid{padding-right:calc(1.5em + .75rem);background-position:top calc(.375em + .1875rem) right calc(.375em + .1875rem)}.was-validated .form-select:invalid,.form-select.is-invalid{border-color:#dc3545}.was-validated .form-select:invalid:not([multiple]):not([size]),.was-validated .form-select:invalid:not([multiple])[size="1"],.form-select.is-invalid:not([multiple]):not([size]),.form-select.is-invalid:not([multiple])[size="1"]{padding-right:4.125rem;background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16'%3e%3cpath fill='none' stroke='%23343a40' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m2 5 6 6 6-6'/%3e%3c/svg%3e"),url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 12 12' width='12' height='12' fill='none' stroke='%23dc3545'%3e%3ccircle cx='6' cy='6' r='4.5'/%3e%3cpath stroke-linejoin='round' d='M5.8 3.6h.4L6 6.5z'/%3e%3ccircle cx='6' cy='8.2' r='.6' fill='%23dc3545' stroke='none'/%3e%3c/svg%3e");background-position:right .75rem center,center right 2.25rem;background-size:16px 12px,calc(.75em + .375rem) calc(.75em + .375rem)}.was-validated .form-select:invalid:focus,.form-select.is-invalid:focus{border-color:#dc3545;box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-control-color:invalid,.form-control-color.is-invalid{width:calc(3rem + calc(1.5em + .75rem))}.was-validated .form-check-input:invalid,.form-check-input.is-invalid{border-color:#dc3545}.was-validated .form-check-input:invalid:checked,.form-check-input.is-invalid:checked{background-color:#dc3545}.was-validated .form-check-input:invalid:focus,.form-check-input.is-invalid:focus{box-shadow:0 0 0 .25rem rgba(220,53,69,0.25)}.was-validated .form-check-input:invalid~.form-check-label,.form-check-input.is-invalid~.form-check-label{color:#dc3545}.form-check-inline .form-check-input~.invalid-feedback{margin-left:.5em}.was-validated .input-group>.form-control:not(:focus):invalid,.input-group>.form-control:not(:focus).is-invalid,.was-validated .input-group>.form-select:not(:focus):invalid,.input-group>.form-select:not(:focus).is-invalid,.was-validated .input-group>.form-floating:not(:focus-within):invalid,.input-group>.form-floating:not(:focus-within).is-invalid{z-index:4}.btn{--bs-btn-padding-x: .75rem;--bs-btn-padding-y: .375rem;--bs-btn-font-family: ;--bs-btn-font-size:1rem;--bs-btn-font-weight: 400;--bs-btn-line-height: 1.5;--bs-btn-color: #212529;--bs-btn-bg: transparent;--bs-btn-border-width: 1px;--bs-btn-border-color: transparent;--bs-btn-border-radius: .375rem;--bs-btn-hover-border-color: transparent;--bs-btn-box-shadow: inset 0 1px 0 rgba(255,255,255,0.15),0 1px 1px rgba(0,0,0,0.075);--bs-btn-disabled-opacity: .65;--bs-btn-focus-box-shadow: 0 0 0 .25rem rgba(var(--bs-btn-focus-shadow-rgb), .5);display:inline-block;padding:var(--bs-btn-padding-y) var(--bs-btn-padding-x);font-family:var(--bs-btn-font-family);font-size:var(--bs-btn-font-size);font-weight:var(--bs-btn-font-weight);line-height:var(--bs-btn-line-height);color:var(--bs-btn-color);text-align:center;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;vertical-align:middle;cursor:pointer;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;border:var(--bs-btn-border-width) solid var(--bs-btn-border-color);border-radius:var(--bs-btn-border-radius);background-color:var(--bs-btn-bg);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.btn{transition:none}}.btn:hover{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color)}.btn-check+.btn:hover{color:var(--bs-btn-color);background-color:var(--bs-btn-bg);border-color:var(--bs-btn-border-color)}.btn:focus-visible{color:var(--bs-btn-hover-color);background-color:var(--bs-btn-hover-bg);border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:focus-visible+.btn{border-color:var(--bs-btn-hover-border-color);outline:0;box-shadow:var(--bs-btn-focus-box-shadow)}.btn-check:checked+.btn,:not(.btn-check)+.btn:active,.btn:first-child:active,.btn.active,.btn.show{color:var(--bs-btn-active-color);background-color:var(--bs-btn-active-bg);border-color:var(--bs-btn-active-border-color)}.btn-check:checked+.btn:focus-visible,:not(.btn-check)+.btn:active:focus-visible,.btn:first-child:active:focus-visible,.btn.active:focus-visible,.btn.show:focus-visible{box-shadow:var(--bs-btn-focus-box-shadow)}.btn:disabled,.btn.disabled,fieldset:disabled .btn{color:var(--bs-btn-disabled-color);pointer-events:none;background-color:var(--bs-btn-disabled-bg);border-color:var(--bs-btn-disabled-border-color);opacity:var(--bs-btn-disabled-opacity)}.btn-default{--bs-btn-color: #000;--bs-btn-bg: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #e3e6ea;--bs-btn-hover-border-color: #e1e5e9;--bs-btn-focus-shadow-rgb: 189,192,196;--bs-btn-active-color: #000;--bs-btn-active-bg: #e5e8eb;--bs-btn-active-border-color: #e1e5e9;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #dee2e6;--bs-btn-disabled-border-color: #dee2e6}.btn-primary{--bs-btn-color: #fff;--bs-btn-bg: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0b5ed7;--bs-btn-hover-border-color: #0a58ca;--bs-btn-focus-shadow-rgb: 49,132,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0a58ca;--bs-btn-active-border-color: #0a53be;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #0d6efd;--bs-btn-disabled-border-color: #0d6efd}.btn-secondary{--bs-btn-color: #fff;--bs-btn-bg: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #5c636a;--bs-btn-hover-border-color: #565e64;--bs-btn-focus-shadow-rgb: 130,138,145;--bs-btn-active-color: #fff;--bs-btn-active-bg: #565e64;--bs-btn-active-border-color: #51585e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #6c757d;--bs-btn-disabled-border-color: #6c757d}.btn-success{--bs-btn-color: #fff;--bs-btn-bg: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #157347;--bs-btn-hover-border-color: #146c43;--bs-btn-focus-shadow-rgb: 60,153,110;--bs-btn-active-color: #fff;--bs-btn-active-bg: #146c43;--bs-btn-active-border-color: #13653f;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #198754;--bs-btn-disabled-border-color: #198754}.btn-info{--bs-btn-color: #000;--bs-btn-bg: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #31d2f2;--bs-btn-hover-border-color: #25cff2;--bs-btn-focus-shadow-rgb: 11,172,204;--bs-btn-active-color: #000;--bs-btn-active-bg: #3dd5f3;--bs-btn-active-border-color: #25cff2;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #0dcaf0;--bs-btn-disabled-border-color: #0dcaf0}.btn-warning{--bs-btn-color: #000;--bs-btn-bg: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffca2c;--bs-btn-hover-border-color: #ffc720;--bs-btn-focus-shadow-rgb: 217,164,6;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffcd39;--bs-btn-active-border-color: #ffc720;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #ffc107;--bs-btn-disabled-border-color: #ffc107}.btn-danger{--bs-btn-color: #fff;--bs-btn-bg: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #bb2d3b;--bs-btn-hover-border-color: #b02a37;--bs-btn-focus-shadow-rgb: 225,83,97;--bs-btn-active-color: #fff;--bs-btn-active-bg: #b02a37;--bs-btn-active-border-color: #a52834;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #dc3545;--bs-btn-disabled-border-color: #dc3545}.btn-light{--bs-btn-color: #000;--bs-btn-bg: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #d3d4d5;--bs-btn-hover-border-color: #c6c7c8;--bs-btn-focus-shadow-rgb: 211,212,213;--bs-btn-active-color: #000;--bs-btn-active-bg: #c6c7c8;--bs-btn-active-border-color: #babbbc;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #000;--bs-btn-disabled-bg: #f8f9fa;--bs-btn-disabled-border-color: #f8f9fa}.btn-dark{--bs-btn-color: #fff;--bs-btn-bg: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #424649;--bs-btn-hover-border-color: #373b3e;--bs-btn-focus-shadow-rgb: 66,70,73;--bs-btn-active-color: #fff;--bs-btn-active-bg: #4d5154;--bs-btn-active-border-color: #373b3e;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #fff;--bs-btn-disabled-bg: #212529;--bs-btn-disabled-border-color: #212529}.btn-outline-default{--bs-btn-color: #dee2e6;--bs-btn-border-color: #dee2e6;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #dee2e6;--bs-btn-hover-border-color: #dee2e6;--bs-btn-focus-shadow-rgb: 222,226,230;--bs-btn-active-color: #000;--bs-btn-active-bg: #dee2e6;--bs-btn-active-border-color: #dee2e6;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dee2e6;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dee2e6;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-primary{--bs-btn-color: #0d6efd;--bs-btn-border-color: #0d6efd;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #0d6efd;--bs-btn-hover-border-color: #0d6efd;--bs-btn-focus-shadow-rgb: 13,110,253;--bs-btn-active-color: #fff;--bs-btn-active-bg: #0d6efd;--bs-btn-active-border-color: #0d6efd;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0d6efd;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0d6efd;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-secondary{--bs-btn-color: #6c757d;--bs-btn-border-color: #6c757d;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #6c757d;--bs-btn-hover-border-color: #6c757d;--bs-btn-focus-shadow-rgb: 108,117,125;--bs-btn-active-color: #fff;--bs-btn-active-bg: #6c757d;--bs-btn-active-border-color: #6c757d;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #6c757d;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-success{--bs-btn-color: #198754;--bs-btn-border-color: #198754;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #198754;--bs-btn-hover-border-color: #198754;--bs-btn-focus-shadow-rgb: 25,135,84;--bs-btn-active-color: #fff;--bs-btn-active-bg: #198754;--bs-btn-active-border-color: #198754;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #198754;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #198754;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-info{--bs-btn-color: #0dcaf0;--bs-btn-border-color: #0dcaf0;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #0dcaf0;--bs-btn-hover-border-color: #0dcaf0;--bs-btn-focus-shadow-rgb: 13,202,240;--bs-btn-active-color: #000;--bs-btn-active-bg: #0dcaf0;--bs-btn-active-border-color: #0dcaf0;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #0dcaf0;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #0dcaf0;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-warning{--bs-btn-color: #ffc107;--bs-btn-border-color: #ffc107;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #ffc107;--bs-btn-hover-border-color: #ffc107;--bs-btn-focus-shadow-rgb: 255,193,7;--bs-btn-active-color: #000;--bs-btn-active-bg: #ffc107;--bs-btn-active-border-color: #ffc107;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #ffc107;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #ffc107;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-danger{--bs-btn-color: #dc3545;--bs-btn-border-color: #dc3545;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #dc3545;--bs-btn-hover-border-color: #dc3545;--bs-btn-focus-shadow-rgb: 220,53,69;--bs-btn-active-color: #fff;--bs-btn-active-bg: #dc3545;--bs-btn-active-border-color: #dc3545;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #dc3545;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #dc3545;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-light{--bs-btn-color: #f8f9fa;--bs-btn-border-color: #f8f9fa;--bs-btn-hover-color: #000;--bs-btn-hover-bg: #f8f9fa;--bs-btn-hover-border-color: #f8f9fa;--bs-btn-focus-shadow-rgb: 248,249,250;--bs-btn-active-color: #000;--bs-btn-active-bg: #f8f9fa;--bs-btn-active-border-color: #f8f9fa;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #f8f9fa;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #f8f9fa;--bs-btn-bg: transparent;--bs-gradient: none}.btn-outline-dark{--bs-btn-color: #212529;--bs-btn-border-color: #212529;--bs-btn-hover-color: #fff;--bs-btn-hover-bg: #212529;--bs-btn-hover-border-color: #212529;--bs-btn-focus-shadow-rgb: 33,37,41;--bs-btn-active-color: #fff;--bs-btn-active-bg: #212529;--bs-btn-active-border-color: #212529;--bs-btn-active-shadow: inset 0 3px 5px rgba(0,0,0,0.125);--bs-btn-disabled-color: #212529;--bs-btn-disabled-bg: transparent;--bs-btn-disabled-border-color: #212529;--bs-btn-bg: transparent;--bs-gradient: none}.btn-link{--bs-btn-font-weight: 400;--bs-btn-color: var(--bs-link-color);--bs-btn-bg: transparent;--bs-btn-border-color: transparent;--bs-btn-hover-color: var(--bs-link-hover-color);--bs-btn-hover-border-color: transparent;--bs-btn-active-color: var(--bs-link-hover-color);--bs-btn-active-border-color: transparent;--bs-btn-disabled-color: #6c757d;--bs-btn-disabled-border-color: transparent;--bs-btn-box-shadow: none;--bs-btn-focus-shadow-rgb: 49,132,253;text-decoration:underline;-webkit-text-decoration:underline;-moz-text-decoration:underline;-ms-text-decoration:underline;-o-text-decoration:underline}.btn-link:focus-visible{color:var(--bs-btn-color)}.btn-link:hover{color:var(--bs-btn-hover-color)}.btn-lg,.btn-group-lg>.btn{--bs-btn-padding-y: .5rem;--bs-btn-padding-x: 1rem;--bs-btn-font-size:1.25rem;--bs-btn-border-radius: .5rem}.btn-sm,.btn-group-sm>.btn{--bs-btn-padding-y: .25rem;--bs-btn-padding-x: .5rem;--bs-btn-font-size:.875rem;--bs-btn-border-radius: .25rem}.fade{transition:opacity 0.15s linear}@media (prefers-reduced-motion: reduce){.fade{transition:none}}.fade:not(.show){opacity:0}.collapse:not(.show){display:none}.collapsing{height:0;overflow:hidden;transition:height 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing{transition:none}}.collapsing.collapse-horizontal{width:0;height:auto;transition:width 0.35s ease}@media (prefers-reduced-motion: reduce){.collapsing.collapse-horizontal{transition:none}}.dropup,.dropend,.dropdown,.dropstart,.dropup-center,.dropdown-center{position:relative}.dropdown-toggle{white-space:nowrap}.dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid;border-right:.3em solid transparent;border-bottom:0;border-left:.3em solid transparent}.dropdown-toggle:empty::after{margin-left:0}.dropdown-menu{--bs-dropdown-zindex: 1000;--bs-dropdown-min-width: 10rem;--bs-dropdown-padding-x: 0;--bs-dropdown-padding-y: .5rem;--bs-dropdown-spacer: .125rem;--bs-dropdown-font-size:1rem;--bs-dropdown-color: #212529;--bs-dropdown-bg: #fff;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-border-radius: .375rem;--bs-dropdown-border-width: 1px;--bs-dropdown-inner-border-radius: calc(.375rem - 1px);--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-divider-margin-y: .5rem;--bs-dropdown-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-dropdown-link-color: #212529;--bs-dropdown-link-hover-color: #1e2125;--bs-dropdown-link-hover-bg: #e9ecef;--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-item-padding-x: 1rem;--bs-dropdown-item-padding-y: .25rem;--bs-dropdown-header-color: #6c757d;--bs-dropdown-header-padding-x: 1rem;--bs-dropdown-header-padding-y: .5rem;position:absolute;z-index:var(--bs-dropdown-zindex);display:none;min-width:var(--bs-dropdown-min-width);padding:var(--bs-dropdown-padding-y) var(--bs-dropdown-padding-x);margin:0;font-size:var(--bs-dropdown-font-size);color:var(--bs-dropdown-color);text-align:left;list-style:none;background-color:var(--bs-dropdown-bg);background-clip:padding-box;border:var(--bs-dropdown-border-width) solid var(--bs-dropdown-border-color);border-radius:var(--bs-dropdown-border-radius)}.dropdown-menu[data-bs-popper]{top:100%;left:0;margin-top:var(--bs-dropdown-spacer)}.dropdown-menu-start{--bs-position: start}.dropdown-menu-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-end{--bs-position: end}.dropdown-menu-end[data-bs-popper]{right:0;left:auto}@media (min-width: 576px){.dropdown-menu-sm-start{--bs-position: start}.dropdown-menu-sm-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-sm-end{--bs-position: end}.dropdown-menu-sm-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 768px){.dropdown-menu-md-start{--bs-position: start}.dropdown-menu-md-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-md-end{--bs-position: end}.dropdown-menu-md-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 992px){.dropdown-menu-lg-start{--bs-position: start}.dropdown-menu-lg-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-lg-end{--bs-position: end}.dropdown-menu-lg-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1200px){.dropdown-menu-xl-start{--bs-position: start}.dropdown-menu-xl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xl-end{--bs-position: end}.dropdown-menu-xl-end[data-bs-popper]{right:0;left:auto}}@media (min-width: 1400px){.dropdown-menu-xxl-start{--bs-position: start}.dropdown-menu-xxl-start[data-bs-popper]{right:auto;left:0}.dropdown-menu-xxl-end{--bs-position: end}.dropdown-menu-xxl-end[data-bs-popper]{right:0;left:auto}}.dropup .dropdown-menu[data-bs-popper]{top:auto;bottom:100%;margin-top:0;margin-bottom:var(--bs-dropdown-spacer)}.dropup .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:0;border-right:.3em solid transparent;border-bottom:.3em solid;border-left:.3em solid transparent}.dropup .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-menu[data-bs-popper]{top:0;right:auto;left:100%;margin-top:0;margin-left:var(--bs-dropdown-spacer)}.dropend .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:0;border-bottom:.3em solid transparent;border-left:.3em solid}.dropend .dropdown-toggle:empty::after{margin-left:0}.dropend .dropdown-toggle::after{vertical-align:0}.dropstart .dropdown-menu[data-bs-popper]{top:0;right:100%;left:auto;margin-top:0;margin-right:var(--bs-dropdown-spacer)}.dropstart .dropdown-toggle::after{display:inline-block;margin-left:.255em;vertical-align:.255em;content:""}.dropstart .dropdown-toggle::after{display:none}.dropstart .dropdown-toggle::before{display:inline-block;margin-right:.255em;vertical-align:.255em;content:"";border-top:.3em solid transparent;border-right:.3em solid;border-bottom:.3em solid transparent}.dropstart .dropdown-toggle:empty::after{margin-left:0}.dropstart .dropdown-toggle::before{vertical-align:0}.dropdown-divider{height:0;margin:var(--bs-dropdown-divider-margin-y) 0;overflow:hidden;border-top:1px solid var(--bs-dropdown-divider-bg);opacity:1}.dropdown-item{display:block;width:100%;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);clear:both;font-weight:400;color:var(--bs-dropdown-link-color);text-align:inherit;text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap;background-color:transparent;border:0}.dropdown-item:hover,.dropdown-item:focus{color:var(--bs-dropdown-link-hover-color);background-color:var(--bs-dropdown-link-hover-bg)}.dropdown-item.active,.dropdown-item:active{color:var(--bs-dropdown-link-active-color);text-decoration:none;background-color:var(--bs-dropdown-link-active-bg)}.dropdown-item.disabled,.dropdown-item:disabled{color:var(--bs-dropdown-link-disabled-color);pointer-events:none;background-color:transparent}.dropdown-menu.show{display:block}.dropdown-header{display:block;padding:var(--bs-dropdown-header-padding-y) var(--bs-dropdown-header-padding-x);margin-bottom:0;font-size:.875rem;color:var(--bs-dropdown-header-color);white-space:nowrap}.dropdown-item-text{display:block;padding:var(--bs-dropdown-item-padding-y) var(--bs-dropdown-item-padding-x);color:var(--bs-dropdown-link-color)}.dropdown-menu-dark{--bs-dropdown-color: #dee2e6;--bs-dropdown-bg: #343a40;--bs-dropdown-border-color: var(--bs-border-color-translucent);--bs-dropdown-box-shadow: ;--bs-dropdown-link-color: #dee2e6;--bs-dropdown-link-hover-color: #fff;--bs-dropdown-divider-bg: var(--bs-border-color-translucent);--bs-dropdown-link-hover-bg: rgba(255,255,255,0.15);--bs-dropdown-link-active-color: #fff;--bs-dropdown-link-active-bg: #0d6efd;--bs-dropdown-link-disabled-color: #adb5bd;--bs-dropdown-header-color: #adb5bd}.btn-group,.btn-group-vertical{position:relative;display:inline-flex;vertical-align:middle}.btn-group>.btn,.btn-group-vertical>.btn{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto}.btn-group>.btn-check:checked+.btn,.btn-group>.btn-check:focus+.btn,.btn-group>.btn:hover,.btn-group>.btn:focus,.btn-group>.btn:active,.btn-group>.btn.active,.btn-group-vertical>.btn-check:checked+.btn,.btn-group-vertical>.btn-check:focus+.btn,.btn-group-vertical>.btn:hover,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn.active{z-index:1}.btn-toolbar{display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;justify-content:flex-start;-webkit-justify-content:flex-start}.btn-toolbar .input-group{width:auto}.btn-group{border-radius:.375rem}.btn-group>:not(.btn-check:first-child)+.btn,.btn-group>.btn-group:not(:first-child){margin-left:-1px}.btn-group>.btn:not(:last-child):not(.dropdown-toggle),.btn-group>.btn.dropdown-toggle-split:first-child,.btn-group>.btn-group:not(:last-child)>.btn{border-top-right-radius:0;border-bottom-right-radius:0}.btn-group>.btn:nth-child(n + 3),.btn-group>:not(.btn-check)+.btn,.btn-group>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-bottom-left-radius:0}.dropdown-toggle-split{padding-right:.5625rem;padding-left:.5625rem}.dropdown-toggle-split::after,.dropup .dropdown-toggle-split::after,.dropend .dropdown-toggle-split::after{margin-left:0}.dropstart .dropdown-toggle-split::before{margin-right:0}.btn-sm+.dropdown-toggle-split,.btn-group-sm>.btn+.dropdown-toggle-split{padding-right:.375rem;padding-left:.375rem}.btn-lg+.dropdown-toggle-split,.btn-group-lg>.btn+.dropdown-toggle-split{padding-right:.75rem;padding-left:.75rem}.btn-group-vertical{flex-direction:column;-webkit-flex-direction:column;align-items:flex-start;-webkit-align-items:flex-start;justify-content:center;-webkit-justify-content:center}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group{width:100%}.btn-group-vertical>.btn:not(:first-child),.btn-group-vertical>.btn-group:not(:first-child){margin-top:-1px}.btn-group-vertical>.btn:not(:last-child):not(.dropdown-toggle),.btn-group-vertical>.btn-group:not(:last-child)>.btn{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn~.btn,.btn-group-vertical>.btn-group:not(:first-child)>.btn{border-top-left-radius:0;border-top-right-radius:0}.nav{--bs-nav-link-padding-x: 1rem;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-link-color);--bs-nav-link-hover-color: var(--bs-link-hover-color);--bs-nav-link-disabled-color: #6c757d;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding-left:0;margin-bottom:0;list-style:none}.nav-link{display:block;padding:var(--bs-nav-link-padding-y) var(--bs-nav-link-padding-x);font-size:var(--bs-nav-link-font-size);font-weight:var(--bs-nav-link-font-weight);color:var(--bs-nav-link-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.nav-link{transition:none}}.nav-link:hover,.nav-link:focus{color:var(--bs-nav-link-hover-color)}.nav-link.disabled{color:var(--bs-nav-link-disabled-color);pointer-events:none;cursor:default}.nav-tabs{--bs-nav-tabs-border-width: 1px;--bs-nav-tabs-border-color: #dee2e6;--bs-nav-tabs-border-radius: .375rem;--bs-nav-tabs-link-hover-border-color: #e9ecef #e9ecef #dee2e6;--bs-nav-tabs-link-active-color: #495057;--bs-nav-tabs-link-active-bg: #fff;--bs-nav-tabs-link-active-border-color: #dee2e6 #dee2e6 #fff;border-bottom:var(--bs-nav-tabs-border-width) solid var(--bs-nav-tabs-border-color)}.nav-tabs .nav-link{margin-bottom:calc(-1 * var(--bs-nav-tabs-border-width));background:none;border:var(--bs-nav-tabs-border-width) solid transparent;border-top-left-radius:var(--bs-nav-tabs-border-radius);border-top-right-radius:var(--bs-nav-tabs-border-radius)}.nav-tabs .nav-link:hover,.nav-tabs .nav-link:focus{isolation:isolate;border-color:var(--bs-nav-tabs-link-hover-border-color)}.nav-tabs .nav-link.disabled,.nav-tabs .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-tabs .nav-link.active,.nav-tabs .nav-item.show .nav-link{color:var(--bs-nav-tabs-link-active-color);background-color:var(--bs-nav-tabs-link-active-bg);border-color:var(--bs-nav-tabs-link-active-border-color)}.nav-tabs .dropdown-menu{margin-top:calc(-1 * var(--bs-nav-tabs-border-width));border-top-left-radius:0;border-top-right-radius:0}.nav-pills{--bs-nav-pills-border-radius: .375rem;--bs-nav-pills-link-active-color: #fff;--bs-nav-pills-link-active-bg: #0d6efd}.nav-pills .nav-link{background:none;border:0;border-radius:var(--bs-nav-pills-border-radius)}.nav-pills .nav-link:disabled{color:var(--bs-nav-link-disabled-color);background-color:transparent;border-color:transparent}.nav-pills .nav-link.active,.nav-pills .show>.nav-link{color:var(--bs-nav-pills-link-active-color);background-color:var(--bs-nav-pills-link-active-bg)}.nav-fill>.nav-link,.nav-fill .nav-item{flex:1 1 auto;-webkit-flex:1 1 auto;text-align:center}.nav-justified>.nav-link,.nav-justified .nav-item{flex-basis:0;-webkit-flex-basis:0;flex-grow:1;-webkit-flex-grow:1;text-align:center}.nav-fill .nav-item .nav-link,.nav-justified .nav-item .nav-link{width:100%}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.navbar{--bs-navbar-padding-x: 0;--bs-navbar-padding-y: .5rem;--bs-navbar-color: rgba(0,0,0,0.55);--bs-navbar-hover-color: rgba(0,0,0,0.7);--bs-navbar-disabled-color: rgba(0,0,0,0.3);--bs-navbar-active-color: rgba(0,0,0,0.9);--bs-navbar-brand-padding-y: .3125rem;--bs-navbar-brand-margin-end: 1rem;--bs-navbar-brand-font-size: 1.25rem;--bs-navbar-brand-color: rgba(0,0,0,0.9);--bs-navbar-brand-hover-color: rgba(0,0,0,0.9);--bs-navbar-nav-link-padding-x: .5rem;--bs-navbar-toggler-padding-y: .25rem;--bs-navbar-toggler-padding-x: .75rem;--bs-navbar-toggler-font-size: 1.25rem;--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%280,0,0,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e");--bs-navbar-toggler-border-color: rgba(0,0,0,0.1);--bs-navbar-toggler-border-radius: .375rem;--bs-navbar-toggler-focus-width: .25rem;--bs-navbar-toggler-transition: box-shadow 0.15s ease-in-out;position:relative;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-navbar-padding-y) var(--bs-navbar-padding-x)}.navbar>.container,.navbar>.container-fluid,.navbar>.container-sm,.navbar>.container-md,.navbar>.container-lg,.navbar>.container-xl,.navbar>.container-xxl{display:flex;display:-webkit-flex;flex-wrap:inherit;-webkit-flex-wrap:inherit;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between}.navbar-brand{padding-top:var(--bs-navbar-brand-padding-y);padding-bottom:var(--bs-navbar-brand-padding-y);margin-right:var(--bs-navbar-brand-margin-end);font-size:var(--bs-navbar-brand-font-size);color:var(--bs-navbar-brand-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;white-space:nowrap}.navbar-brand:hover,.navbar-brand:focus{color:var(--bs-navbar-brand-hover-color)}.navbar-nav{--bs-nav-link-padding-x: 0;--bs-nav-link-padding-y: .5rem;--bs-nav-link-font-weight: ;--bs-nav-link-color: var(--bs-navbar-color);--bs-nav-link-hover-color: var(--bs-navbar-hover-color);--bs-nav-link-disabled-color: var(--bs-navbar-disabled-color);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;list-style:none}.navbar-nav .show>.nav-link,.navbar-nav .active>.nav-link,.navbar-nav .nav-link.active{color:var(--bs-navbar-active-color)}.navbar-nav .dropdown-menu{position:static}.navbar-text{padding-top:.5rem;padding-bottom:.5rem;color:var(--bs-navbar-color)}.navbar-text a,.navbar-text a:hover,.navbar-text a:focus{color:var(--bs-navbar-active-color)}.navbar-collapse{flex-basis:100%;-webkit-flex-basis:100%;flex-grow:1;-webkit-flex-grow:1;align-items:center;-webkit-align-items:center}.navbar-toggler{padding:var(--bs-navbar-toggler-padding-y) var(--bs-navbar-toggler-padding-x);font-size:var(--bs-navbar-toggler-font-size);line-height:1;color:var(--bs-navbar-color);background-color:transparent;border:var(--bs-border-width) solid var(--bs-navbar-toggler-border-color);border-radius:var(--bs-navbar-toggler-border-radius);transition:var(--bs-navbar-toggler-transition)}@media (prefers-reduced-motion: reduce){.navbar-toggler{transition:none}}.navbar-toggler:hover{text-decoration:none}.navbar-toggler:focus{text-decoration:none;outline:0;box-shadow:0 0 0 var(--bs-navbar-toggler-focus-width)}.navbar-toggler-icon{display:inline-block;width:1.5em;height:1.5em;vertical-align:middle;background-image:var(--bs-navbar-toggler-icon-bg);background-repeat:no-repeat;background-position:center;background-size:100%}.navbar-nav-scroll{max-height:var(--bs-scroll-height, 75vh);overflow-y:auto}@media (min-width: 576px){.navbar-expand-sm{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-sm .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-sm .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-sm .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-sm .navbar-nav-scroll{overflow:visible}.navbar-expand-sm .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-sm .navbar-toggler{display:none}.navbar-expand-sm .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-sm .offcanvas .offcanvas-header{display:none}.navbar-expand-sm .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 768px){.navbar-expand-md{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-md .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-md .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-md .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-md .navbar-nav-scroll{overflow:visible}.navbar-expand-md .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-md .navbar-toggler{display:none}.navbar-expand-md .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-md .offcanvas .offcanvas-header{display:none}.navbar-expand-md .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 992px){.navbar-expand-lg{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-lg .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-lg .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-lg .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-lg .navbar-nav-scroll{overflow:visible}.navbar-expand-lg .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-lg .navbar-toggler{display:none}.navbar-expand-lg .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-lg .offcanvas .offcanvas-header{display:none}.navbar-expand-lg .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1200px){.navbar-expand-xl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xl .navbar-nav-scroll{overflow:visible}.navbar-expand-xl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xl .navbar-toggler{display:none}.navbar-expand-xl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xl .offcanvas .offcanvas-header{display:none}.navbar-expand-xl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}@media (min-width: 1400px){.navbar-expand-xxl{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand-xxl .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand-xxl .navbar-nav .dropdown-menu{position:absolute}.navbar-expand-xxl .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand-xxl .navbar-nav-scroll{overflow:visible}.navbar-expand-xxl .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand-xxl .navbar-toggler{display:none}.navbar-expand-xxl .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand-xxl .offcanvas .offcanvas-header{display:none}.navbar-expand-xxl .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}}.navbar-expand{flex-wrap:nowrap;-webkit-flex-wrap:nowrap;justify-content:flex-start;-webkit-justify-content:flex-start}.navbar-expand .navbar-nav{flex-direction:row;-webkit-flex-direction:row}.navbar-expand .navbar-nav .dropdown-menu{position:absolute}.navbar-expand .navbar-nav .nav-link{padding-right:var(--bs-navbar-nav-link-padding-x);padding-left:var(--bs-navbar-nav-link-padding-x)}.navbar-expand .navbar-nav-scroll{overflow:visible}.navbar-expand .navbar-collapse{display:flex !important;display:-webkit-flex !important;flex-basis:auto;-webkit-flex-basis:auto}.navbar-expand .navbar-toggler{display:none}.navbar-expand .offcanvas{position:static;z-index:auto;flex-grow:1;-webkit-flex-grow:1;width:auto !important;height:auto !important;visibility:visible !important;background-color:transparent !important;border:0 !important;transform:none !important;transition:none}.navbar-expand .offcanvas .offcanvas-header{display:none}.navbar-expand .offcanvas .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible}.navbar-light{background-color:#f8f9fa}.navbar-dark{background-color:#212529;--bs-navbar-color: rgba(255,255,255,0.55);--bs-navbar-hover-color: rgba(255,255,255,0.75);--bs-navbar-disabled-color: rgba(255,255,255,0.25);--bs-navbar-active-color: #fff;--bs-navbar-brand-color: #fff;--bs-navbar-brand-hover-color: #fff;--bs-navbar-toggler-border-color: rgba(255,255,255,0.1);--bs-navbar-toggler-icon-bg: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 30 30'%3e%3cpath stroke='rgba%28255,255,255,0.55%29' stroke-linecap='round' stroke-miterlimit='10' stroke-width='2' d='M4 7h22M4 15h22M4 23h22'/%3e%3c/svg%3e")}.card{--bs-card-spacer-y: 1rem;--bs-card-spacer-x: 1rem;--bs-card-title-spacer-y: .5rem;--bs-card-border-width: 1px;--bs-card-border-color: var(--bs-border-color-translucent);--bs-card-border-radius: .375rem;--bs-card-box-shadow: ;--bs-card-inner-border-radius: calc(.375rem - 1px);--bs-card-cap-padding-y: .5rem;--bs-card-cap-padding-x: 1rem;--bs-card-cap-bg: rgba(0,0,0,0.03);--bs-card-cap-color: ;--bs-card-height: ;--bs-card-color: ;--bs-card-bg: #fff;--bs-card-img-overlay-padding: 1rem;--bs-card-group-margin: .75rem;position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;min-width:0;height:var(--bs-card-height);word-wrap:break-word;background-color:var(--bs-card-bg);background-clip:border-box;border:var(--bs-card-border-width) solid var(--bs-card-border-color);border-radius:var(--bs-card-border-radius)}.card>hr{margin-right:0;margin-left:0}.card>.list-group{border-top:inherit;border-bottom:inherit}.card>.list-group:first-child{border-top-width:0;border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card>.list-group:last-child{border-bottom-width:0;border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card>.card-header+.list-group,.card>.list-group+.card-footer{border-top:0}.card-body{flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-card-spacer-y) var(--bs-card-spacer-x);color:var(--bs-card-color)}.card-title{margin-bottom:var(--bs-card-title-spacer-y)}.card-subtitle{margin-top:calc(-.5 * var(--bs-card-title-spacer-y));margin-bottom:0}.card-text:last-child{margin-bottom:0}.card-link+.card-link{margin-left:var(--bs-card-spacer-x)}.card-header{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);margin-bottom:0;color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-bottom:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-header:first-child{border-radius:var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius) 0 0}.card-footer{padding:var(--bs-card-cap-padding-y) var(--bs-card-cap-padding-x);color:var(--bs-card-cap-color);background-color:var(--bs-card-cap-bg);border-top:var(--bs-card-border-width) solid var(--bs-card-border-color)}.card-footer:last-child{border-radius:0 0 var(--bs-card-inner-border-radius) var(--bs-card-inner-border-radius)}.card-header-tabs{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-bottom:calc(-1 * var(--bs-card-cap-padding-y));margin-left:calc(-.5 * var(--bs-card-cap-padding-x));border-bottom:0}.card-header-tabs .nav-link.active{background-color:var(--bs-card-bg);border-bottom-color:var(--bs-card-bg)}.card-header-pills{margin-right:calc(-.5 * var(--bs-card-cap-padding-x));margin-left:calc(-.5 * var(--bs-card-cap-padding-x))}.card-img-overlay{position:absolute;top:0;right:0;bottom:0;left:0;padding:var(--bs-card-img-overlay-padding);border-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-top,.card-img-bottom{width:100%}.card-img,.card-img-top{border-top-left-radius:var(--bs-card-inner-border-radius);border-top-right-radius:var(--bs-card-inner-border-radius)}.card-img,.card-img-bottom{border-bottom-right-radius:var(--bs-card-inner-border-radius);border-bottom-left-radius:var(--bs-card-inner-border-radius)}.card-group>.card{margin-bottom:var(--bs-card-group-margin)}@media (min-width: 576px){.card-group{display:flex;display:-webkit-flex;flex-flow:row wrap;-webkit-flex-flow:row wrap}.card-group>.card{flex:1 0 0%;-webkit-flex:1 0 0%;margin-bottom:0}.card-group>.card+.card{margin-left:0;border-left:0}.card-group>.card:not(:last-child){border-top-right-radius:0;border-bottom-right-radius:0}.card-group>.card:not(:last-child) .card-img-top,.card-group>.card:not(:last-child) .card-header{border-top-right-radius:0}.card-group>.card:not(:last-child) .card-img-bottom,.card-group>.card:not(:last-child) .card-footer{border-bottom-right-radius:0}.card-group>.card:not(:first-child){border-top-left-radius:0;border-bottom-left-radius:0}.card-group>.card:not(:first-child) .card-img-top,.card-group>.card:not(:first-child) .card-header{border-top-left-radius:0}.card-group>.card:not(:first-child) .card-img-bottom,.card-group>.card:not(:first-child) .card-footer{border-bottom-left-radius:0}}.accordion{--bs-accordion-color: #212529;--bs-accordion-bg: #fff;--bs-accordion-transition: color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out,border-radius 0.15s ease;--bs-accordion-border-color: var(--bs-border-color);--bs-accordion-border-width: 1px;--bs-accordion-border-radius: .375rem;--bs-accordion-inner-border-radius: calc(.375rem - 1px);--bs-accordion-btn-padding-x: 1.25rem;--bs-accordion-btn-padding-y: 1rem;--bs-accordion-btn-color: #212529;--bs-accordion-btn-bg: var(--bs-accordion-bg);--bs-accordion-btn-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23212529'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-icon-width: 1.25rem;--bs-accordion-btn-icon-transform: rotate(-180deg);--bs-accordion-btn-icon-transition: transform 0.2s ease-in-out;--bs-accordion-btn-active-icon: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%230c63e4'%3e%3cpath fill-rule='evenodd' d='M1.646 4.646a.5.5 0 0 1 .708 0L8 10.293l5.646-5.647a.5.5 0 0 1 .708.708l-6 6a.5.5 0 0 1-.708 0l-6-6a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e");--bs-accordion-btn-focus-border-color: #86b7fe;--bs-accordion-btn-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-accordion-body-padding-x: 1.25rem;--bs-accordion-body-padding-y: 1rem;--bs-accordion-active-color: #0c63e4;--bs-accordion-active-bg: #e7f1ff}.accordion-button{position:relative;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;width:100%;padding:var(--bs-accordion-btn-padding-y) var(--bs-accordion-btn-padding-x);font-size:1rem;color:var(--bs-accordion-btn-color);text-align:left;background-color:var(--bs-accordion-btn-bg);border:0;border-radius:0;overflow-anchor:none;transition:var(--bs-accordion-transition)}@media (prefers-reduced-motion: reduce){.accordion-button{transition:none}}.accordion-button:not(.collapsed){color:var(--bs-accordion-active-color);background-color:var(--bs-accordion-active-bg);box-shadow:inset 0 calc(-1 * var(--bs-accordion-border-width)) 0 var(--bs-accordion-border-color)}.accordion-button:not(.collapsed)::after{background-image:var(--bs-accordion-btn-active-icon);transform:var(--bs-accordion-btn-icon-transform)}.accordion-button::after{flex-shrink:0;-webkit-flex-shrink:0;width:var(--bs-accordion-btn-icon-width);height:var(--bs-accordion-btn-icon-width);margin-left:auto;content:"";background-image:var(--bs-accordion-btn-icon);background-repeat:no-repeat;background-size:var(--bs-accordion-btn-icon-width);transition:var(--bs-accordion-btn-icon-transition)}@media (prefers-reduced-motion: reduce){.accordion-button::after{transition:none}}.accordion-button:hover{z-index:2}.accordion-button:focus{z-index:3;border-color:var(--bs-accordion-btn-focus-border-color);outline:0;box-shadow:var(--bs-accordion-btn-focus-box-shadow)}.accordion-header{margin-bottom:0}.accordion-item{color:var(--bs-accordion-color);background-color:var(--bs-accordion-bg);border:var(--bs-accordion-border-width) solid var(--bs-accordion-border-color)}.accordion-item:first-of-type{border-top-left-radius:var(--bs-accordion-border-radius);border-top-right-radius:var(--bs-accordion-border-radius)}.accordion-item:first-of-type .accordion-button{border-top-left-radius:var(--bs-accordion-inner-border-radius);border-top-right-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:not(:first-of-type){border-top:0}.accordion-item:last-of-type{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-item:last-of-type .accordion-button.collapsed{border-bottom-right-radius:var(--bs-accordion-inner-border-radius);border-bottom-left-radius:var(--bs-accordion-inner-border-radius)}.accordion-item:last-of-type .accordion-collapse{border-bottom-right-radius:var(--bs-accordion-border-radius);border-bottom-left-radius:var(--bs-accordion-border-radius)}.accordion-body{padding:var(--bs-accordion-body-padding-y) var(--bs-accordion-body-padding-x)}.accordion-flush .accordion-collapse{border-width:0}.accordion-flush .accordion-item{border-right:0;border-left:0;border-radius:0}.accordion-flush .accordion-item:first-child{border-top:0}.accordion-flush .accordion-item:last-child{border-bottom:0}.accordion-flush .accordion-item .accordion-button,.accordion-flush .accordion-item .accordion-button.collapsed{border-radius:0}.breadcrumb{--bs-breadcrumb-padding-x: 0;--bs-breadcrumb-padding-y: 0;--bs-breadcrumb-margin-bottom: 1rem;--bs-breadcrumb-bg: ;--bs-breadcrumb-border-radius: ;--bs-breadcrumb-divider-color: #6c757d;--bs-breadcrumb-item-padding-x: .5rem;--bs-breadcrumb-item-active-color: #6c757d;display:flex;display:-webkit-flex;flex-wrap:wrap;-webkit-flex-wrap:wrap;padding:var(--bs-breadcrumb-padding-y) var(--bs-breadcrumb-padding-x);margin-bottom:var(--bs-breadcrumb-margin-bottom);font-size:var(--bs-breadcrumb-font-size);list-style:none;background-color:var(--bs-breadcrumb-bg);border-radius:var(--bs-breadcrumb-border-radius)}.breadcrumb-item+.breadcrumb-item{padding-left:var(--bs-breadcrumb-item-padding-x)}.breadcrumb-item+.breadcrumb-item::before{float:left;padding-right:var(--bs-breadcrumb-item-padding-x);color:var(--bs-breadcrumb-divider-color);content:var(--bs-breadcrumb-divider, "/") /* rtl: var(--bs-breadcrumb-divider, "/") */}.breadcrumb-item.active{color:var(--bs-breadcrumb-item-active-color)}.pagination{--bs-pagination-padding-x: .75rem;--bs-pagination-padding-y: .375rem;--bs-pagination-font-size:1rem;--bs-pagination-color: var(--bs-link-color);--bs-pagination-bg: #fff;--bs-pagination-border-width: 1px;--bs-pagination-border-color: #dee2e6;--bs-pagination-border-radius: .375rem;--bs-pagination-hover-color: var(--bs-link-hover-color);--bs-pagination-hover-bg: #e9ecef;--bs-pagination-hover-border-color: #dee2e6;--bs-pagination-focus-color: var(--bs-link-hover-color);--bs-pagination-focus-bg: #e9ecef;--bs-pagination-focus-box-shadow: 0 0 0 .25rem rgba(13,110,253,0.25);--bs-pagination-active-color: #fff;--bs-pagination-active-bg: #0d6efd;--bs-pagination-active-border-color: #0d6efd;--bs-pagination-disabled-color: #6c757d;--bs-pagination-disabled-bg: #fff;--bs-pagination-disabled-border-color: #dee2e6;display:flex;display:-webkit-flex;padding-left:0;list-style:none}.page-link{position:relative;display:block;padding:var(--bs-pagination-padding-y) var(--bs-pagination-padding-x);font-size:var(--bs-pagination-font-size);color:var(--bs-pagination-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-pagination-bg);border:var(--bs-pagination-border-width) solid var(--bs-pagination-border-color);transition:color 0.15s ease-in-out,background-color 0.15s ease-in-out,border-color 0.15s ease-in-out,box-shadow 0.15s ease-in-out}@media (prefers-reduced-motion: reduce){.page-link{transition:none}}.page-link:hover{z-index:2;color:var(--bs-pagination-hover-color);background-color:var(--bs-pagination-hover-bg);border-color:var(--bs-pagination-hover-border-color)}.page-link:focus{z-index:3;color:var(--bs-pagination-focus-color);background-color:var(--bs-pagination-focus-bg);outline:0;box-shadow:var(--bs-pagination-focus-box-shadow)}.page-link.active,.active>.page-link{z-index:3;color:var(--bs-pagination-active-color);background-color:var(--bs-pagination-active-bg);border-color:var(--bs-pagination-active-border-color)}.page-link.disabled,.disabled>.page-link{color:var(--bs-pagination-disabled-color);pointer-events:none;background-color:var(--bs-pagination-disabled-bg);border-color:var(--bs-pagination-disabled-border-color)}.page-item:not(:first-child) .page-link{margin-left:-1px}.page-item:first-child .page-link{border-top-left-radius:var(--bs-pagination-border-radius);border-bottom-left-radius:var(--bs-pagination-border-radius)}.page-item:last-child .page-link{border-top-right-radius:var(--bs-pagination-border-radius);border-bottom-right-radius:var(--bs-pagination-border-radius)}.pagination-lg{--bs-pagination-padding-x: 1.5rem;--bs-pagination-padding-y: .75rem;--bs-pagination-font-size:1.25rem;--bs-pagination-border-radius: .5rem}.pagination-sm{--bs-pagination-padding-x: .5rem;--bs-pagination-padding-y: .25rem;--bs-pagination-font-size:.875rem;--bs-pagination-border-radius: .25rem}.badge{--bs-badge-padding-x: .65em;--bs-badge-padding-y: .35em;--bs-badge-font-size:.75em;--bs-badge-font-weight: 700;--bs-badge-color: #fff;--bs-badge-border-radius: .375rem;display:inline-block;padding:var(--bs-badge-padding-y) var(--bs-badge-padding-x);font-size:var(--bs-badge-font-size);font-weight:var(--bs-badge-font-weight);line-height:1;color:var(--bs-badge-color);text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:var(--bs-badge-border-radius)}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.alert{--bs-alert-bg: transparent;--bs-alert-padding-x: 1rem;--bs-alert-padding-y: 1rem;--bs-alert-margin-bottom: 1rem;--bs-alert-color: inherit;--bs-alert-border-color: transparent;--bs-alert-border: 1px solid var(--bs-alert-border-color);--bs-alert-border-radius: .375rem;position:relative;padding:var(--bs-alert-padding-y) var(--bs-alert-padding-x);margin-bottom:var(--bs-alert-margin-bottom);color:var(--bs-alert-color);background-color:var(--bs-alert-bg);border:var(--bs-alert-border);border-radius:var(--bs-alert-border-radius)}.alert-heading{color:inherit}.alert-link{font-weight:700}.alert-dismissible{padding-right:3rem}.alert-dismissible .btn-close{position:absolute;top:0;right:0;z-index:2;padding:1.25rem 1rem}.alert-default{--bs-alert-color: #595a5c;--bs-alert-bg: #f8f9fa;--bs-alert-border-color: #f5f6f8}.alert-default .alert-link{color:#47484a}.alert-primary{--bs-alert-color: #084298;--bs-alert-bg: #cfe2ff;--bs-alert-border-color: #b6d4fe}.alert-primary .alert-link{color:#06357a}.alert-secondary{--bs-alert-color: #41464b;--bs-alert-bg: #e2e3e5;--bs-alert-border-color: #d3d6d8}.alert-secondary .alert-link{color:#34383c}.alert-success{--bs-alert-color: #0f5132;--bs-alert-bg: #d1e7dd;--bs-alert-border-color: #badbcc}.alert-success .alert-link{color:#0c4128}.alert-info{--bs-alert-color: #055160;--bs-alert-bg: #cff4fc;--bs-alert-border-color: #b6effb}.alert-info .alert-link{color:#04414d}.alert-warning{--bs-alert-color: #664d03;--bs-alert-bg: #fff3cd;--bs-alert-border-color: #ffecb5}.alert-warning .alert-link{color:#523e02}.alert-danger{--bs-alert-color: #842029;--bs-alert-bg: #f8d7da;--bs-alert-border-color: #f5c2c7}.alert-danger .alert-link{color:#6a1a21}.alert-light{--bs-alert-color: #636464;--bs-alert-bg: #fefefe;--bs-alert-border-color: #fdfdfe}.alert-light .alert-link{color:#4f5050}.alert-dark{--bs-alert-color: #141619;--bs-alert-bg: #d3d3d4;--bs-alert-border-color: #bcbebf}.alert-dark .alert-link{color:#101214}@keyframes progress-bar-stripes{0%{background-position-x:1rem}}.progress{--bs-progress-height: 1rem;--bs-progress-font-size:.75rem;--bs-progress-bg: #e9ecef;--bs-progress-border-radius: .375rem;--bs-progress-box-shadow: inset 0 1px 2px rgba(0,0,0,0.075);--bs-progress-bar-color: #fff;--bs-progress-bar-bg: #0d6efd;--bs-progress-bar-transition: width 0.6s ease;display:flex;display:-webkit-flex;height:var(--bs-progress-height);overflow:hidden;font-size:var(--bs-progress-font-size);background-color:var(--bs-progress-bg);border-radius:var(--bs-progress-border-radius)}.progress-bar{display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;justify-content:center;-webkit-justify-content:center;overflow:hidden;color:var(--bs-progress-bar-color);text-align:center;white-space:nowrap;background-color:var(--bs-progress-bar-bg);transition:var(--bs-progress-bar-transition)}@media (prefers-reduced-motion: reduce){.progress-bar{transition:none}}.progress-bar-striped{background-image:linear-gradient(45deg, rgba(255,255,255,0.15) 25%, transparent 25%, transparent 50%, rgba(255,255,255,0.15) 50%, rgba(255,255,255,0.15) 75%, transparent 75%, transparent);background-size:var(--bs-progress-height) var(--bs-progress-height)}.progress-bar-animated{animation:1s linear infinite progress-bar-stripes}@media (prefers-reduced-motion: reduce){.progress-bar-animated{animation:none}}.list-group{--bs-list-group-color: #212529;--bs-list-group-bg: #fff;--bs-list-group-border-color: rgba(0,0,0,0.125);--bs-list-group-border-width: 1px;--bs-list-group-border-radius: .375rem;--bs-list-group-item-padding-x: 1rem;--bs-list-group-item-padding-y: .5rem;--bs-list-group-action-color: #495057;--bs-list-group-action-hover-color: #495057;--bs-list-group-action-hover-bg: #f8f9fa;--bs-list-group-action-active-color: #212529;--bs-list-group-action-active-bg: #e9ecef;--bs-list-group-disabled-color: #6c757d;--bs-list-group-disabled-bg: #fff;--bs-list-group-active-color: #fff;--bs-list-group-active-bg: #0d6efd;--bs-list-group-active-border-color: #0d6efd;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;padding-left:0;margin-bottom:0;border-radius:var(--bs-list-group-border-radius)}.list-group-numbered{list-style-type:none;counter-reset:section}.list-group-numbered>.list-group-item::before{content:counters(section, ".") ". ";counter-increment:section}.list-group-item-action{width:100%;color:var(--bs-list-group-action-color);text-align:inherit}.list-group-item-action:hover,.list-group-item-action:focus{z-index:1;color:var(--bs-list-group-action-hover-color);text-decoration:none;background-color:var(--bs-list-group-action-hover-bg)}.list-group-item-action:active{color:var(--bs-list-group-action-active-color);background-color:var(--bs-list-group-action-active-bg)}.list-group-item{position:relative;display:block;padding:var(--bs-list-group-item-padding-y) var(--bs-list-group-item-padding-x);color:var(--bs-list-group-color);text-decoration:none;-webkit-text-decoration:none;-moz-text-decoration:none;-ms-text-decoration:none;-o-text-decoration:none;background-color:var(--bs-list-group-bg);border:var(--bs-list-group-border-width) solid var(--bs-list-group-border-color)}.list-group-item:first-child{border-top-left-radius:inherit;border-top-right-radius:inherit}.list-group-item:last-child{border-bottom-right-radius:inherit;border-bottom-left-radius:inherit}.list-group-item.disabled,.list-group-item:disabled{color:var(--bs-list-group-disabled-color);pointer-events:none;background-color:var(--bs-list-group-disabled-bg)}.list-group-item.active{z-index:2;color:var(--bs-list-group-active-color);background-color:var(--bs-list-group-active-bg);border-color:var(--bs-list-group-active-border-color)}.list-group-item+.list-group-item{border-top-width:0}.list-group-item+.list-group-item.active{margin-top:calc(-1 * var(--bs-list-group-border-width));border-top-width:var(--bs-list-group-border-width)}.list-group-horizontal{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal>.list-group-item.active{margin-top:0}.list-group-horizontal>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}@media (min-width: 576px){.list-group-horizontal-sm{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-sm>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-sm>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-sm>.list-group-item.active{margin-top:0}.list-group-horizontal-sm>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-sm>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 768px){.list-group-horizontal-md{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-md>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-md>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-md>.list-group-item.active{margin-top:0}.list-group-horizontal-md>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-md>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 992px){.list-group-horizontal-lg{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-lg>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-lg>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-lg>.list-group-item.active{margin-top:0}.list-group-horizontal-lg>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-lg>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1200px){.list-group-horizontal-xl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xl>.list-group-item.active{margin-top:0}.list-group-horizontal-xl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}@media (min-width: 1400px){.list-group-horizontal-xxl{flex-direction:row;-webkit-flex-direction:row}.list-group-horizontal-xxl>.list-group-item:first-child:not(:last-child){border-bottom-left-radius:var(--bs-list-group-border-radius);border-top-right-radius:0}.list-group-horizontal-xxl>.list-group-item:last-child:not(:first-child){border-top-right-radius:var(--bs-list-group-border-radius);border-bottom-left-radius:0}.list-group-horizontal-xxl>.list-group-item.active{margin-top:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item{border-top-width:var(--bs-list-group-border-width);border-left-width:0}.list-group-horizontal-xxl>.list-group-item+.list-group-item.active{margin-left:calc(-1 * var(--bs-list-group-border-width));border-left-width:var(--bs-list-group-border-width)}}.list-group-flush{border-radius:0}.list-group-flush>.list-group-item{border-width:0 0 var(--bs-list-group-border-width)}.list-group-flush>.list-group-item:last-child{border-bottom-width:0}.list-group-item-default{color:#595a5c;background-color:#f8f9fa}.list-group-item-default.list-group-item-action:hover,.list-group-item-default.list-group-item-action:focus{color:#595a5c;background-color:#dfe0e1}.list-group-item-default.list-group-item-action.active{color:#fff;background-color:#595a5c;border-color:#595a5c}.list-group-item-primary{color:#084298;background-color:#cfe2ff}.list-group-item-primary.list-group-item-action:hover,.list-group-item-primary.list-group-item-action:focus{color:#084298;background-color:#bacbe6}.list-group-item-primary.list-group-item-action.active{color:#fff;background-color:#084298;border-color:#084298}.list-group-item-secondary{color:#41464b;background-color:#e2e3e5}.list-group-item-secondary.list-group-item-action:hover,.list-group-item-secondary.list-group-item-action:focus{color:#41464b;background-color:#cbccce}.list-group-item-secondary.list-group-item-action.active{color:#fff;background-color:#41464b;border-color:#41464b}.list-group-item-success{color:#0f5132;background-color:#d1e7dd}.list-group-item-success.list-group-item-action:hover,.list-group-item-success.list-group-item-action:focus{color:#0f5132;background-color:#bcd0c7}.list-group-item-success.list-group-item-action.active{color:#fff;background-color:#0f5132;border-color:#0f5132}.list-group-item-info{color:#055160;background-color:#cff4fc}.list-group-item-info.list-group-item-action:hover,.list-group-item-info.list-group-item-action:focus{color:#055160;background-color:#badce3}.list-group-item-info.list-group-item-action.active{color:#fff;background-color:#055160;border-color:#055160}.list-group-item-warning{color:#664d03;background-color:#fff3cd}.list-group-item-warning.list-group-item-action:hover,.list-group-item-warning.list-group-item-action:focus{color:#664d03;background-color:#e6dbb9}.list-group-item-warning.list-group-item-action.active{color:#fff;background-color:#664d03;border-color:#664d03}.list-group-item-danger{color:#842029;background-color:#f8d7da}.list-group-item-danger.list-group-item-action:hover,.list-group-item-danger.list-group-item-action:focus{color:#842029;background-color:#dfc2c4}.list-group-item-danger.list-group-item-action.active{color:#fff;background-color:#842029;border-color:#842029}.list-group-item-light{color:#636464;background-color:#fefefe}.list-group-item-light.list-group-item-action:hover,.list-group-item-light.list-group-item-action:focus{color:#636464;background-color:#e5e5e5}.list-group-item-light.list-group-item-action.active{color:#fff;background-color:#636464;border-color:#636464}.list-group-item-dark{color:#141619;background-color:#d3d3d4}.list-group-item-dark.list-group-item-action:hover,.list-group-item-dark.list-group-item-action:focus{color:#141619;background-color:#bebebf}.list-group-item-dark.list-group-item-action.active{color:#fff;background-color:#141619;border-color:#141619}.btn-close{box-sizing:content-box;width:1em;height:1em;padding:.25em .25em;color:#000;background:transparent url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23000'%3e%3cpath d='M.293.293a1 1 0 0 1 1.414 0L8 6.586 14.293.293a1 1 0 1 1 1.414 1.414L9.414 8l6.293 6.293a1 1 0 0 1-1.414 1.414L8 9.414l-6.293 6.293a1 1 0 0 1-1.414-1.414L6.586 8 .293 1.707a1 1 0 0 1 0-1.414z'/%3e%3c/svg%3e") center/1em auto no-repeat;border:0;border-radius:.375rem;opacity:.5}.btn-close:hover{color:#000;text-decoration:none;opacity:.75}.btn-close:focus{outline:0;box-shadow:0 0 0 .25rem rgba(13,110,253,0.25);opacity:1}.btn-close:disabled,.btn-close.disabled{pointer-events:none;user-select:none;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;opacity:.25}.btn-close-white{filter:invert(1) grayscale(100%) brightness(200%)}.toast{--bs-toast-zindex: 1090;--bs-toast-padding-x: .75rem;--bs-toast-padding-y: .5rem;--bs-toast-spacing: 1.5rem;--bs-toast-max-width: 350px;--bs-toast-font-size:.875rem;--bs-toast-color: ;--bs-toast-bg: rgba(255,255,255,0.85);--bs-toast-border-width: 1px;--bs-toast-border-color: var(--bs-border-color-translucent);--bs-toast-border-radius: .375rem;--bs-toast-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-toast-header-color: #6c757d;--bs-toast-header-bg: rgba(255,255,255,0.85);--bs-toast-header-border-color: rgba(0,0,0,0.05);width:var(--bs-toast-max-width);max-width:100%;font-size:var(--bs-toast-font-size);color:var(--bs-toast-color);pointer-events:auto;background-color:var(--bs-toast-bg);background-clip:padding-box;border:var(--bs-toast-border-width) solid var(--bs-toast-border-color);box-shadow:var(--bs-toast-box-shadow);border-radius:var(--bs-toast-border-radius)}.toast.showing{opacity:0}.toast:not(.show){display:none}.toast-container{--bs-toast-zindex: 1090;position:absolute;z-index:var(--bs-toast-zindex);width:max-content;width:-webkit-max-content;width:-moz-max-content;width:-ms-max-content;width:-o-max-content;max-width:100%;pointer-events:none}.toast-container>:not(:last-child){margin-bottom:var(--bs-toast-spacing)}.toast-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;padding:var(--bs-toast-padding-y) var(--bs-toast-padding-x);color:var(--bs-toast-header-color);background-color:var(--bs-toast-header-bg);background-clip:padding-box;border-bottom:var(--bs-toast-border-width) solid var(--bs-toast-header-border-color);border-top-left-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width));border-top-right-radius:calc(var(--bs-toast-border-radius) - var(--bs-toast-border-width))}.toast-header .btn-close{margin-right:calc(-.5 * var(--bs-toast-padding-x));margin-left:var(--bs-toast-padding-x)}.toast-body{padding:var(--bs-toast-padding-x);word-wrap:break-word}.modal{--bs-modal-zindex: 1055;--bs-modal-width: 500px;--bs-modal-padding: 1rem;--bs-modal-margin: .5rem;--bs-modal-color: ;--bs-modal-bg: #fff;--bs-modal-border-color: var(--bs-border-color-translucent);--bs-modal-border-width: 1px;--bs-modal-border-radius: .5rem;--bs-modal-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075);--bs-modal-inner-border-radius: calc(.5rem - 1px);--bs-modal-header-padding-x: 1rem;--bs-modal-header-padding-y: 1rem;--bs-modal-header-padding: 1rem 1rem;--bs-modal-header-border-color: var(--bs-border-color);--bs-modal-header-border-width: 1px;--bs-modal-title-line-height: 1.5;--bs-modal-footer-gap: .5rem;--bs-modal-footer-bg: ;--bs-modal-footer-border-color: var(--bs-border-color);--bs-modal-footer-border-width: 1px;position:fixed;top:0;left:0;z-index:var(--bs-modal-zindex);display:none;width:100%;height:100%;overflow-x:hidden;overflow-y:auto;outline:0}.modal-dialog{position:relative;width:auto;margin:var(--bs-modal-margin);pointer-events:none}.modal.fade .modal-dialog{transition:transform 0.3s ease-out;transform:translate(0, -50px)}@media (prefers-reduced-motion: reduce){.modal.fade .modal-dialog{transition:none}}.modal.show .modal-dialog{transform:none}.modal.modal-static .modal-dialog{transform:scale(1.02)}.modal-dialog-scrollable{height:calc(100% - var(--bs-modal-margin) * 2)}.modal-dialog-scrollable .modal-content{max-height:100%;overflow:hidden}.modal-dialog-scrollable .modal-body{overflow-y:auto}.modal-dialog-centered{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;min-height:calc(100% - var(--bs-modal-margin) * 2)}.modal-content{position:relative;display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;width:100%;color:var(--bs-modal-color);pointer-events:auto;background-color:var(--bs-modal-bg);background-clip:padding-box;border:var(--bs-modal-border-width) solid var(--bs-modal-border-color);border-radius:var(--bs-modal-border-radius);outline:0}.modal-backdrop{--bs-backdrop-zindex: 1050;--bs-backdrop-bg: #000;--bs-backdrop-opacity: .5;position:fixed;top:0;left:0;z-index:var(--bs-backdrop-zindex);width:100vw;height:100vh;background-color:var(--bs-backdrop-bg)}.modal-backdrop.fade{opacity:0}.modal-backdrop.show{opacity:var(--bs-backdrop-opacity)}.modal-header{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-modal-header-padding);border-bottom:var(--bs-modal-header-border-width) solid var(--bs-modal-header-border-color);border-top-left-radius:var(--bs-modal-inner-border-radius);border-top-right-radius:var(--bs-modal-inner-border-radius)}.modal-header .btn-close{padding:calc(var(--bs-modal-header-padding-y) * .5) calc(var(--bs-modal-header-padding-x) * .5);margin:calc(-.5 * var(--bs-modal-header-padding-y)) calc(-.5 * var(--bs-modal-header-padding-x)) calc(-.5 * var(--bs-modal-header-padding-y)) auto}.modal-title{margin-bottom:0;line-height:var(--bs-modal-title-line-height)}.modal-body{position:relative;flex:1 1 auto;-webkit-flex:1 1 auto;padding:var(--bs-modal-padding)}.modal-footer{display:flex;display:-webkit-flex;flex-shrink:0;-webkit-flex-shrink:0;flex-wrap:wrap;-webkit-flex-wrap:wrap;align-items:center;-webkit-align-items:center;justify-content:flex-end;-webkit-justify-content:flex-end;padding:calc(var(--bs-modal-padding) - var(--bs-modal-footer-gap) * .5);background-color:var(--bs-modal-footer-bg);border-top:var(--bs-modal-footer-border-width) solid var(--bs-modal-footer-border-color);border-bottom-right-radius:var(--bs-modal-inner-border-radius);border-bottom-left-radius:var(--bs-modal-inner-border-radius)}.modal-footer>*{margin:calc(var(--bs-modal-footer-gap) * .5)}@media (min-width: 576px){.modal{--bs-modal-margin: 1.75rem;--bs-modal-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15)}.modal-dialog{max-width:var(--bs-modal-width);margin-right:auto;margin-left:auto}.modal-sm{--bs-modal-width: 300px}}@media (min-width: 992px){.modal-lg,.modal-xl{--bs-modal-width: 800px}}@media (min-width: 1200px){.modal-xl{--bs-modal-width: 1140px}}.modal-fullscreen{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen .modal-header,.modal-fullscreen .modal-footer{border-radius:0}.modal-fullscreen .modal-body{overflow-y:auto}@media (max-width: 575.98px){.modal-fullscreen-sm-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-sm-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-sm-down .modal-header,.modal-fullscreen-sm-down .modal-footer{border-radius:0}.modal-fullscreen-sm-down .modal-body{overflow-y:auto}}@media (max-width: 767.98px){.modal-fullscreen-md-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-md-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-md-down .modal-header,.modal-fullscreen-md-down .modal-footer{border-radius:0}.modal-fullscreen-md-down .modal-body{overflow-y:auto}}@media (max-width: 991.98px){.modal-fullscreen-lg-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-lg-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-lg-down .modal-header,.modal-fullscreen-lg-down .modal-footer{border-radius:0}.modal-fullscreen-lg-down .modal-body{overflow-y:auto}}@media (max-width: 1199.98px){.modal-fullscreen-xl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xl-down .modal-header,.modal-fullscreen-xl-down .modal-footer{border-radius:0}.modal-fullscreen-xl-down .modal-body{overflow-y:auto}}@media (max-width: 1399.98px){.modal-fullscreen-xxl-down{width:100vw;max-width:none;height:100%;margin:0}.modal-fullscreen-xxl-down .modal-content{height:100%;border:0;border-radius:0}.modal-fullscreen-xxl-down .modal-header,.modal-fullscreen-xxl-down .modal-footer{border-radius:0}.modal-fullscreen-xxl-down .modal-body{overflow-y:auto}}.tooltip{--bs-tooltip-zindex: 1080;--bs-tooltip-max-width: 200px;--bs-tooltip-padding-x: .5rem;--bs-tooltip-padding-y: .25rem;--bs-tooltip-margin: ;--bs-tooltip-font-size:.875rem;--bs-tooltip-color: #fff;--bs-tooltip-bg: #000;--bs-tooltip-border-radius: .375rem;--bs-tooltip-opacity: .9;--bs-tooltip-arrow-width: .8rem;--bs-tooltip-arrow-height: .4rem;z-index:var(--bs-tooltip-zindex);display:block;padding:var(--bs-tooltip-arrow-height);margin:var(--bs-tooltip-margin);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-tooltip-font-size);word-wrap:break-word;opacity:0}.tooltip.show{opacity:var(--bs-tooltip-opacity)}.tooltip .tooltip-arrow{display:block;width:var(--bs-tooltip-arrow-width);height:var(--bs-tooltip-arrow-height)}.tooltip .tooltip-arrow::before{position:absolute;content:"";border-color:transparent;border-style:solid}.bs-tooltip-top .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow{bottom:0}.bs-tooltip-top .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="top"] .tooltip-arrow::before{top:-1px;border-width:var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-top-color:var(--bs-tooltip-bg)}.bs-tooltip-end .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow{left:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-end .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="right"] .tooltip-arrow::before{right:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height) calc(var(--bs-tooltip-arrow-width) * .5) 0;border-right-color:var(--bs-tooltip-bg)}.bs-tooltip-bottom .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow{top:0}.bs-tooltip-bottom .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="bottom"] .tooltip-arrow::before{bottom:-1px;border-width:0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-bottom-color:var(--bs-tooltip-bg)}.bs-tooltip-start .tooltip-arrow,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow{right:0;width:var(--bs-tooltip-arrow-height);height:var(--bs-tooltip-arrow-width)}.bs-tooltip-start .tooltip-arrow::before,.bs-tooltip-auto[data-popper-placement^="left"] .tooltip-arrow::before{left:-1px;border-width:calc(var(--bs-tooltip-arrow-width) * .5) 0 calc(var(--bs-tooltip-arrow-width) * .5) var(--bs-tooltip-arrow-height);border-left-color:var(--bs-tooltip-bg)}.tooltip-inner{max-width:var(--bs-tooltip-max-width);padding:var(--bs-tooltip-padding-y) var(--bs-tooltip-padding-x);color:var(--bs-tooltip-color);text-align:center;background-color:var(--bs-tooltip-bg);border-radius:var(--bs-tooltip-border-radius)}.popover{--bs-popover-zindex: 1070;--bs-popover-max-width: 276px;--bs-popover-font-size:.875rem;--bs-popover-bg: #fff;--bs-popover-border-width: 1px;--bs-popover-border-color: var(--bs-border-color-translucent);--bs-popover-border-radius: .5rem;--bs-popover-inner-border-radius: calc(.5rem - 1px);--bs-popover-box-shadow: 0 0.5rem 1rem rgba(0,0,0,0.15);--bs-popover-header-padding-x: 1rem;--bs-popover-header-padding-y: .5rem;--bs-popover-header-font-size:1rem;--bs-popover-header-color: ;--bs-popover-header-bg: #f0f0f0;--bs-popover-body-padding-x: 1rem;--bs-popover-body-padding-y: 1rem;--bs-popover-body-color: #212529;--bs-popover-arrow-width: 1rem;--bs-popover-arrow-height: .5rem;--bs-popover-arrow-border: var(--bs-popover-border-color);z-index:var(--bs-popover-zindex);display:block;max-width:var(--bs-popover-max-width);font-family:var(--bs-font-sans-serif);font-style:normal;font-weight:400;line-height:1.5;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;letter-spacing:normal;word-break:normal;white-space:normal;word-spacing:normal;line-break:auto;font-size:var(--bs-popover-font-size);word-wrap:break-word;background-color:var(--bs-popover-bg);background-clip:padding-box;border:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-radius:var(--bs-popover-border-radius)}.popover .popover-arrow{display:block;width:var(--bs-popover-arrow-width);height:var(--bs-popover-arrow-height)}.popover .popover-arrow::before,.popover .popover-arrow::after{position:absolute;display:block;content:"";border-color:transparent;border-style:solid;border-width:0}.bs-popover-top>.popover-arrow,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow{bottom:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before,.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{border-width:var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-top>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::before{bottom:0;border-top-color:var(--bs-popover-arrow-border)}.bs-popover-top>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="top"]>.popover-arrow::after{bottom:var(--bs-popover-border-width);border-top-color:var(--bs-popover-bg)}.bs-popover-end>.popover-arrow,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow{left:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before,.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height) calc(var(--bs-popover-arrow-width) * .5) 0}.bs-popover-end>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::before{left:0;border-right-color:var(--bs-popover-arrow-border)}.bs-popover-end>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="right"]>.popover-arrow::after{left:var(--bs-popover-border-width);border-right-color:var(--bs-popover-bg)}.bs-popover-bottom>.popover-arrow,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow{top:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width))}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before,.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{border-width:0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-bottom>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::before{top:0;border-bottom-color:var(--bs-popover-arrow-border)}.bs-popover-bottom>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="bottom"]>.popover-arrow::after{top:var(--bs-popover-border-width);border-bottom-color:var(--bs-popover-bg)}.bs-popover-bottom .popover-header::before,.bs-popover-auto[data-popper-placement^="bottom"] .popover-header::before{position:absolute;top:0;left:50%;display:block;width:var(--bs-popover-arrow-width);margin-left:calc(-.5 * var(--bs-popover-arrow-width));content:"";border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-header-bg)}.bs-popover-start>.popover-arrow,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow{right:calc(-1 * (var(--bs-popover-arrow-height)) - var(--bs-popover-border-width));width:var(--bs-popover-arrow-height);height:var(--bs-popover-arrow-width)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before,.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{border-width:calc(var(--bs-popover-arrow-width) * .5) 0 calc(var(--bs-popover-arrow-width) * .5) var(--bs-popover-arrow-height)}.bs-popover-start>.popover-arrow::before,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::before{right:0;border-left-color:var(--bs-popover-arrow-border)}.bs-popover-start>.popover-arrow::after,.bs-popover-auto[data-popper-placement^="left"]>.popover-arrow::after{right:var(--bs-popover-border-width);border-left-color:var(--bs-popover-bg)}.popover-header{padding:var(--bs-popover-header-padding-y) var(--bs-popover-header-padding-x);margin-bottom:0;font-size:var(--bs-popover-header-font-size);color:var(--bs-popover-header-color);background-color:var(--bs-popover-header-bg);border-bottom:var(--bs-popover-border-width) solid var(--bs-popover-border-color);border-top-left-radius:var(--bs-popover-inner-border-radius);border-top-right-radius:var(--bs-popover-inner-border-radius)}.popover-header:empty{display:none}.popover-body{padding:var(--bs-popover-body-padding-y) var(--bs-popover-body-padding-x);color:var(--bs-popover-body-color)}.carousel{position:relative}.carousel.pointer-event{touch-action:pan-y;-webkit-touch-action:pan-y;-moz-touch-action:pan-y;-ms-touch-action:pan-y;-o-touch-action:pan-y}.carousel-inner{position:relative;width:100%;overflow:hidden}.carousel-inner::after{display:block;clear:both;content:""}.carousel-item{position:relative;display:none;float:left;width:100%;margin-right:-100%;backface-visibility:hidden;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;transition:transform .6s ease-in-out}@media (prefers-reduced-motion: reduce){.carousel-item{transition:none}}.carousel-item.active,.carousel-item-next,.carousel-item-prev{display:block}.carousel-item-next:not(.carousel-item-start),.active.carousel-item-end{transform:translateX(100%)}.carousel-item-prev:not(.carousel-item-end),.active.carousel-item-start{transform:translateX(-100%)}.carousel-fade .carousel-item{opacity:0;transition-property:opacity;transform:none}.carousel-fade .carousel-item.active,.carousel-fade .carousel-item-next.carousel-item-start,.carousel-fade .carousel-item-prev.carousel-item-end{z-index:1;opacity:1}.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{z-index:0;opacity:0;transition:opacity 0s .6s}@media (prefers-reduced-motion: reduce){.carousel-fade .active.carousel-item-start,.carousel-fade .active.carousel-item-end{transition:none}}.carousel-control-prev,.carousel-control-next{position:absolute;top:0;bottom:0;z-index:1;display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:center;-webkit-justify-content:center;width:15%;padding:0;color:#fff;text-align:center;background:none;border:0;opacity:.5;transition:opacity 0.15s ease}@media (prefers-reduced-motion: reduce){.carousel-control-prev,.carousel-control-next{transition:none}}.carousel-control-prev:hover,.carousel-control-prev:focus,.carousel-control-next:hover,.carousel-control-next:focus{color:#fff;text-decoration:none;outline:0;opacity:.9}.carousel-control-prev{left:0}.carousel-control-next{right:0}.carousel-control-prev-icon,.carousel-control-next-icon{display:inline-block;width:2rem;height:2rem;background-repeat:no-repeat;background-position:50%;background-size:100% 100%}.carousel-control-prev-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0z'/%3e%3c/svg%3e")}.carousel-control-next-icon{background-image:url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 16 16' fill='%23fff'%3e%3cpath d='M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708z'/%3e%3c/svg%3e")}.carousel-indicators{position:absolute;right:0;bottom:0;left:0;z-index:2;display:flex;display:-webkit-flex;justify-content:center;-webkit-justify-content:center;padding:0;margin-right:15%;margin-bottom:1rem;margin-left:15%;list-style:none}.carousel-indicators [data-bs-target]{box-sizing:content-box;flex:0 1 auto;-webkit-flex:0 1 auto;width:30px;height:3px;padding:0;margin-right:3px;margin-left:3px;text-indent:-999px;cursor:pointer;background-color:#fff;background-clip:padding-box;border:0;border-top:10px solid transparent;border-bottom:10px solid transparent;opacity:.5;transition:opacity 0.6s ease}@media (prefers-reduced-motion: reduce){.carousel-indicators [data-bs-target]{transition:none}}.carousel-indicators .active{opacity:1}.carousel-caption{position:absolute;right:15%;bottom:1.25rem;left:15%;padding-top:1.25rem;padding-bottom:1.25rem;color:#fff;text-align:center}.carousel-dark .carousel-control-prev-icon,.carousel-dark .carousel-control-next-icon{filter:invert(1) grayscale(100)}.carousel-dark .carousel-indicators [data-bs-target]{background-color:#000}.carousel-dark .carousel-caption{color:#000}.spinner-grow,.spinner-border{display:inline-block;width:var(--bs-spinner-width);height:var(--bs-spinner-height);vertical-align:var(--bs-spinner-vertical-align);border-radius:50%;animation:var(--bs-spinner-animation-speed) linear infinite var(--bs-spinner-animation-name)}@keyframes spinner-border{to{transform:rotate(360deg) /* rtl:ignore */}}.spinner-border{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-border-width: .25em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-border;border:var(--bs-spinner-border-width) solid currentcolor;border-right-color:transparent}.spinner-border-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem;--bs-spinner-border-width: .2em}@keyframes spinner-grow{0%{transform:scale(0)}50%{opacity:1;transform:none}}.spinner-grow{--bs-spinner-width: 2rem;--bs-spinner-height: 2rem;--bs-spinner-vertical-align: -.125em;--bs-spinner-animation-speed: .75s;--bs-spinner-animation-name: spinner-grow;background-color:currentcolor;opacity:0}.spinner-grow-sm{--bs-spinner-width: 1rem;--bs-spinner-height: 1rem}@media (prefers-reduced-motion: reduce){.spinner-border,.spinner-grow{--bs-spinner-animation-speed: 1.5s}}.offcanvas,.offcanvas-xxl,.offcanvas-xl,.offcanvas-lg,.offcanvas-md,.offcanvas-sm{--bs-offcanvas-zindex: 1045;--bs-offcanvas-width: 400px;--bs-offcanvas-height: 30vh;--bs-offcanvas-padding-x: 1rem;--bs-offcanvas-padding-y: 1rem;--bs-offcanvas-color: ;--bs-offcanvas-bg: #fff;--bs-offcanvas-border-width: 1px;--bs-offcanvas-border-color: var(--bs-border-color-translucent);--bs-offcanvas-box-shadow: 0 0.125rem 0.25rem rgba(0,0,0,0.075)}@media (max-width: 575.98px){.offcanvas-sm{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 575.98px) and (prefers-reduced-motion: reduce){.offcanvas-sm{transition:none}}@media (max-width: 575.98px){.offcanvas-sm.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-sm.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-sm.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-sm.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-sm.showing,.offcanvas-sm.show:not(.hiding){transform:none}.offcanvas-sm.showing,.offcanvas-sm.hiding,.offcanvas-sm.show{visibility:visible}}@media (min-width: 576px){.offcanvas-sm{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-sm .offcanvas-header{display:none}.offcanvas-sm .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 767.98px){.offcanvas-md{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 767.98px) and (prefers-reduced-motion: reduce){.offcanvas-md{transition:none}}@media (max-width: 767.98px){.offcanvas-md.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-md.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-md.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-md.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-md.showing,.offcanvas-md.show:not(.hiding){transform:none}.offcanvas-md.showing,.offcanvas-md.hiding,.offcanvas-md.show{visibility:visible}}@media (min-width: 768px){.offcanvas-md{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-md .offcanvas-header{display:none}.offcanvas-md .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 991.98px){.offcanvas-lg{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 991.98px) and (prefers-reduced-motion: reduce){.offcanvas-lg{transition:none}}@media (max-width: 991.98px){.offcanvas-lg.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-lg.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-lg.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-lg.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-lg.showing,.offcanvas-lg.show:not(.hiding){transform:none}.offcanvas-lg.showing,.offcanvas-lg.hiding,.offcanvas-lg.show{visibility:visible}}@media (min-width: 992px){.offcanvas-lg{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-lg .offcanvas-header{display:none}.offcanvas-lg .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1199.98px){.offcanvas-xl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1199.98px) and (prefers-reduced-motion: reduce){.offcanvas-xl{transition:none}}@media (max-width: 1199.98px){.offcanvas-xl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xl.showing,.offcanvas-xl.show:not(.hiding){transform:none}.offcanvas-xl.showing,.offcanvas-xl.hiding,.offcanvas-xl.show{visibility:visible}}@media (min-width: 1200px){.offcanvas-xl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xl .offcanvas-header{display:none}.offcanvas-xl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}@media (max-width: 1399.98px){.offcanvas-xxl{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}}@media (max-width: 1399.98px) and (prefers-reduced-motion: reduce){.offcanvas-xxl{transition:none}}@media (max-width: 1399.98px){.offcanvas-xxl.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas-xxl.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas-xxl.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas-xxl.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas-xxl.showing,.offcanvas-xxl.show:not(.hiding){transform:none}.offcanvas-xxl.showing,.offcanvas-xxl.hiding,.offcanvas-xxl.show{visibility:visible}}@media (min-width: 1400px){.offcanvas-xxl{--bs-offcanvas-height: auto;--bs-offcanvas-border-width: 0;background-color:transparent !important}.offcanvas-xxl .offcanvas-header{display:none}.offcanvas-xxl .offcanvas-body{display:flex;display:-webkit-flex;flex-grow:0;-webkit-flex-grow:0;padding:0;overflow-y:visible;background-color:transparent !important}}.offcanvas{position:fixed;bottom:0;z-index:var(--bs-offcanvas-zindex);display:flex;display:-webkit-flex;flex-direction:column;-webkit-flex-direction:column;max-width:100%;color:var(--bs-offcanvas-color);visibility:hidden;background-color:var(--bs-offcanvas-bg);background-clip:padding-box;outline:0;transition:transform .3s ease-in-out}@media (prefers-reduced-motion: reduce){.offcanvas{transition:none}}.offcanvas.offcanvas-start{top:0;left:0;width:var(--bs-offcanvas-width);border-right:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(-100%)}.offcanvas.offcanvas-end{top:0;right:0;width:var(--bs-offcanvas-width);border-left:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateX(100%)}.offcanvas.offcanvas-top{top:0;right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-bottom:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(-100%)}.offcanvas.offcanvas-bottom{right:0;left:0;height:var(--bs-offcanvas-height);max-height:100%;border-top:var(--bs-offcanvas-border-width) solid var(--bs-offcanvas-border-color);transform:translateY(100%)}.offcanvas.showing,.offcanvas.show:not(.hiding){transform:none}.offcanvas.showing,.offcanvas.hiding,.offcanvas.show{visibility:visible}.offcanvas-backdrop{position:fixed;top:0;left:0;z-index:1040;width:100vw;height:100vh;background-color:#000}.offcanvas-backdrop.fade{opacity:0}.offcanvas-backdrop.show{opacity:.5}.offcanvas-header{display:flex;display:-webkit-flex;align-items:center;-webkit-align-items:center;justify-content:space-between;-webkit-justify-content:space-between;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x)}.offcanvas-header .btn-close{padding:calc(var(--bs-offcanvas-padding-y) * .5) calc(var(--bs-offcanvas-padding-x) * .5);margin-top:calc(-.5 * var(--bs-offcanvas-padding-y));margin-right:calc(-.5 * var(--bs-offcanvas-padding-x));margin-bottom:calc(-.5 * var(--bs-offcanvas-padding-y))}.offcanvas-title{margin-bottom:0;line-height:1.5}.offcanvas-body{flex-grow:1;-webkit-flex-grow:1;padding:var(--bs-offcanvas-padding-y) var(--bs-offcanvas-padding-x);overflow-y:auto}.placeholder{display:inline-block;min-height:1em;vertical-align:middle;cursor:wait;background-color:currentcolor;opacity:.5}.placeholder.btn::before{display:inline-block;content:""}.placeholder-xs{min-height:.6em}.placeholder-sm{min-height:.8em}.placeholder-lg{min-height:1.2em}.placeholder-glow .placeholder{animation:placeholder-glow 2s ease-in-out infinite}@keyframes placeholder-glow{50%{opacity:.2}}.placeholder-wave{mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);-webkit-mask-image:linear-gradient(130deg, #000 55%, rgba(0,0,0,0.8) 75%, #000 95%);mask-size:200% 100%;-webkit-mask-size:200% 100%;animation:placeholder-wave 2s linear infinite}@keyframes placeholder-wave{100%{mask-position:-200% 0%;-webkit-mask-position:-200% 0%}}.clearfix::after{display:block;clear:both;content:""}.text-bg-default{color:#000 !important;background-color:RGBA(222,226,230, var(--bs-bg-opacity, 1)) !important}.text-bg-primary{color:#fff !important;background-color:RGBA(13,110,253, var(--bs-bg-opacity, 1)) !important}.text-bg-secondary{color:#fff !important;background-color:RGBA(108,117,125, var(--bs-bg-opacity, 1)) !important}.text-bg-success{color:#fff !important;background-color:RGBA(25,135,84, var(--bs-bg-opacity, 1)) !important}.text-bg-info{color:#000 !important;background-color:RGBA(13,202,240, var(--bs-bg-opacity, 1)) !important}.text-bg-warning{color:#000 !important;background-color:RGBA(255,193,7, var(--bs-bg-opacity, 1)) !important}.text-bg-danger{color:#fff !important;background-color:RGBA(220,53,69, var(--bs-bg-opacity, 1)) !important}.text-bg-light{color:#000 !important;background-color:RGBA(248,249,250, var(--bs-bg-opacity, 1)) !important}.text-bg-dark{color:#fff !important;background-color:RGBA(33,37,41, var(--bs-bg-opacity, 1)) !important}.link-default{color:#dee2e6 !important}.link-default:hover,.link-default:focus{color:#e5e8eb !important}.link-primary{color:#0d6efd !important}.link-primary:hover,.link-primary:focus{color:#0a58ca !important}.link-secondary{color:#6c757d !important}.link-secondary:hover,.link-secondary:focus{color:#565e64 !important}.link-success{color:#198754 !important}.link-success:hover,.link-success:focus{color:#146c43 !important}.link-info{color:#0dcaf0 !important}.link-info:hover,.link-info:focus{color:#3dd5f3 !important}.link-warning{color:#ffc107 !important}.link-warning:hover,.link-warning:focus{color:#ffcd39 !important}.link-danger{color:#dc3545 !important}.link-danger:hover,.link-danger:focus{color:#b02a37 !important}.link-light{color:#f8f9fa !important}.link-light:hover,.link-light:focus{color:#f9fafb !important}.link-dark{color:#212529 !important}.link-dark:hover,.link-dark:focus{color:#1a1e21 !important}.ratio{position:relative;width:100%}.ratio::before{display:block;padding-top:var(--bs-aspect-ratio);content:""}.ratio>*{position:absolute;top:0;left:0;width:100%;height:100%}.ratio-1x1{--bs-aspect-ratio: 100%}.ratio-4x3{--bs-aspect-ratio: calc(3 / 4 * 100%)}.ratio-16x9{--bs-aspect-ratio: calc(9 / 16 * 100%)}.ratio-21x9{--bs-aspect-ratio: calc(9 / 21 * 100%)}.fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030}.fixed-bottom{position:fixed;right:0;bottom:0;left:0;z-index:1030}.sticky-top{position:sticky;top:0;z-index:1020}.sticky-bottom{position:sticky;bottom:0;z-index:1020}@media (min-width: 576px){.sticky-sm-top{position:sticky;top:0;z-index:1020}.sticky-sm-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 768px){.sticky-md-top{position:sticky;top:0;z-index:1020}.sticky-md-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 992px){.sticky-lg-top{position:sticky;top:0;z-index:1020}.sticky-lg-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1200px){.sticky-xl-top{position:sticky;top:0;z-index:1020}.sticky-xl-bottom{position:sticky;bottom:0;z-index:1020}}@media (min-width: 1400px){.sticky-xxl-top{position:sticky;top:0;z-index:1020}.sticky-xxl-bottom{position:sticky;bottom:0;z-index:1020}}.hstack{display:flex;display:-webkit-flex;flex-direction:row;-webkit-flex-direction:row;align-items:center;-webkit-align-items:center;align-self:stretch;-webkit-align-self:stretch}.vstack{display:flex;display:-webkit-flex;flex:1 1 auto;-webkit-flex:1 1 auto;flex-direction:column;-webkit-flex-direction:column;align-self:stretch;-webkit-align-self:stretch}.visually-hidden,.visually-hidden-focusable:not(:focus):not(:focus-within){position:absolute !important;width:1px !important;height:1px !important;padding:0 !important;margin:-1px !important;overflow:hidden !important;clip:rect(0, 0, 0, 0) !important;white-space:nowrap !important;border:0 !important}.stretched-link::after{position:absolute;top:0;right:0;bottom:0;left:0;z-index:1;content:""}.text-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.vr{display:inline-block;align-self:stretch;-webkit-align-self:stretch;width:1px;min-height:1em;background-color:currentcolor;opacity:.25}.align-baseline{vertical-align:baseline !important}.align-top{vertical-align:top !important}.align-middle{vertical-align:middle !important}.align-bottom{vertical-align:bottom !important}.align-text-bottom{vertical-align:text-bottom !important}.align-text-top{vertical-align:text-top !important}.float-start{float:left !important}.float-end{float:right !important}.float-none{float:none !important}.opacity-0{opacity:0 !important}.opacity-25{opacity:.25 !important}.opacity-50{opacity:.5 !important}.opacity-75{opacity:.75 !important}.opacity-100{opacity:1 !important}.overflow-auto{overflow:auto !important}.overflow-hidden{overflow:hidden !important}.overflow-visible{overflow:visible !important}.overflow-scroll{overflow:scroll !important}.d-inline{display:inline !important}.d-inline-block{display:inline-block !important}.d-block{display:block !important}.d-grid{display:grid !important}.d-table{display:table !important}.d-table-row{display:table-row !important}.d-table-cell{display:table-cell !important}.d-flex{display:flex !important}.d-inline-flex{display:inline-flex !important}.d-none{display:none !important}.shadow{box-shadow:0 0.5rem 1rem rgba(0,0,0,0.15) !important}.shadow-sm{box-shadow:0 0.125rem 0.25rem rgba(0,0,0,0.075) !important}.shadow-lg{box-shadow:0 1rem 3rem rgba(0,0,0,0.175) !important}.shadow-none{box-shadow:none !important}.position-static{position:static !important}.position-relative{position:relative !important}.position-absolute{position:absolute !important}.position-fixed{position:fixed !important}.position-sticky{position:sticky !important}.top-0{top:0 !important}.top-50{top:50% !important}.top-100{top:100% !important}.bottom-0{bottom:0 !important}.bottom-50{bottom:50% !important}.bottom-100{bottom:100% !important}.start-0{left:0 !important}.start-50{left:50% !important}.start-100{left:100% !important}.end-0{right:0 !important}.end-50{right:50% !important}.end-100{right:100% !important}.translate-middle{transform:translate(-50%, -50%) !important}.translate-middle-x{transform:translateX(-50%) !important}.translate-middle-y{transform:translateY(-50%) !important}.border{border:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-0{border:0 !important}.border-top{border-top:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-top-0{border-top:0 !important}.border-end{border-right:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-end-0{border-right:0 !important}.border-bottom{border-bottom:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-bottom-0{border-bottom:0 !important}.border-start{border-left:var(--bs-border-width) var(--bs-border-style) var(--bs-border-color) !important}.border-start-0{border-left:0 !important}.border-default{--bs-border-opacity: 1;border-color:rgba(var(--bs-default-rgb), var(--bs-border-opacity)) !important}.border-primary{--bs-border-opacity: 1;border-color:rgba(var(--bs-primary-rgb), var(--bs-border-opacity)) !important}.border-secondary{--bs-border-opacity: 1;border-color:rgba(var(--bs-secondary-rgb), var(--bs-border-opacity)) !important}.border-success{--bs-border-opacity: 1;border-color:rgba(var(--bs-success-rgb), var(--bs-border-opacity)) !important}.border-info{--bs-border-opacity: 1;border-color:rgba(var(--bs-info-rgb), var(--bs-border-opacity)) !important}.border-warning{--bs-border-opacity: 1;border-color:rgba(var(--bs-warning-rgb), var(--bs-border-opacity)) !important}.border-danger{--bs-border-opacity: 1;border-color:rgba(var(--bs-danger-rgb), var(--bs-border-opacity)) !important}.border-light{--bs-border-opacity: 1;border-color:rgba(var(--bs-light-rgb), var(--bs-border-opacity)) !important}.border-dark{--bs-border-opacity: 1;border-color:rgba(var(--bs-dark-rgb), var(--bs-border-opacity)) !important}.border-white{--bs-border-opacity: 1;border-color:rgba(var(--bs-white-rgb), var(--bs-border-opacity)) !important}.border-1{--bs-border-width: 1px}.border-2{--bs-border-width: 2px}.border-3{--bs-border-width: 3px}.border-4{--bs-border-width: 4px}.border-5{--bs-border-width: 5px}.border-opacity-10{--bs-border-opacity: .1}.border-opacity-25{--bs-border-opacity: .25}.border-opacity-50{--bs-border-opacity: .5}.border-opacity-75{--bs-border-opacity: .75}.border-opacity-100{--bs-border-opacity: 1}.w-25{width:25% !important}.w-50{width:50% !important}.w-75{width:75% !important}.w-100{width:100% !important}.w-auto{width:auto !important}.mw-100{max-width:100% !important}.vw-100{width:100vw !important}.min-vw-100{min-width:100vw !important}.h-25{height:25% !important}.h-50{height:50% !important}.h-75{height:75% !important}.h-100{height:100% !important}.h-auto{height:auto !important}.mh-100{max-height:100% !important}.vh-100{height:100vh !important}.min-vh-100{min-height:100vh !important}.flex-fill{flex:1 1 auto !important}.flex-row{flex-direction:row !important}.flex-column{flex-direction:column !important}.flex-row-reverse{flex-direction:row-reverse !important}.flex-column-reverse{flex-direction:column-reverse !important}.flex-grow-0{flex-grow:0 !important}.flex-grow-1{flex-grow:1 !important}.flex-shrink-0{flex-shrink:0 !important}.flex-shrink-1{flex-shrink:1 !important}.flex-wrap{flex-wrap:wrap !important}.flex-nowrap{flex-wrap:nowrap !important}.flex-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-start{justify-content:flex-start !important}.justify-content-end{justify-content:flex-end !important}.justify-content-center{justify-content:center !important}.justify-content-between{justify-content:space-between !important}.justify-content-around{justify-content:space-around !important}.justify-content-evenly{justify-content:space-evenly !important}.align-items-start{align-items:flex-start !important}.align-items-end{align-items:flex-end !important}.align-items-center{align-items:center !important}.align-items-baseline{align-items:baseline !important}.align-items-stretch{align-items:stretch !important}.align-content-start{align-content:flex-start !important}.align-content-end{align-content:flex-end !important}.align-content-center{align-content:center !important}.align-content-between{align-content:space-between !important}.align-content-around{align-content:space-around !important}.align-content-stretch{align-content:stretch !important}.align-self-auto{align-self:auto !important}.align-self-start{align-self:flex-start !important}.align-self-end{align-self:flex-end !important}.align-self-center{align-self:center !important}.align-self-baseline{align-self:baseline !important}.align-self-stretch{align-self:stretch !important}.order-first{order:-1 !important}.order-0{order:0 !important}.order-1{order:1 !important}.order-2{order:2 !important}.order-3{order:3 !important}.order-4{order:4 !important}.order-5{order:5 !important}.order-last{order:6 !important}.m-0{margin:0 !important}.m-1{margin:.25rem !important}.m-2{margin:.5rem !important}.m-3{margin:1rem !important}.m-4{margin:1.5rem !important}.m-5{margin:3rem !important}.m-auto{margin:auto !important}.mx-0{margin-right:0 !important;margin-left:0 !important}.mx-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-3{margin-right:1rem !important;margin-left:1rem !important}.mx-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-5{margin-right:3rem !important;margin-left:3rem !important}.mx-auto{margin-right:auto !important;margin-left:auto !important}.my-0{margin-top:0 !important;margin-bottom:0 !important}.my-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-0{margin-top:0 !important}.mt-1{margin-top:.25rem !important}.mt-2{margin-top:.5rem !important}.mt-3{margin-top:1rem !important}.mt-4{margin-top:1.5rem !important}.mt-5{margin-top:3rem !important}.mt-auto{margin-top:auto !important}.me-0{margin-right:0 !important}.me-1{margin-right:.25rem !important}.me-2{margin-right:.5rem !important}.me-3{margin-right:1rem !important}.me-4{margin-right:1.5rem !important}.me-5{margin-right:3rem !important}.me-auto{margin-right:auto !important}.mb-0{margin-bottom:0 !important}.mb-1{margin-bottom:.25rem !important}.mb-2{margin-bottom:.5rem !important}.mb-3{margin-bottom:1rem !important}.mb-4{margin-bottom:1.5rem !important}.mb-5{margin-bottom:3rem !important}.mb-auto{margin-bottom:auto !important}.ms-0{margin-left:0 !important}.ms-1{margin-left:.25rem !important}.ms-2{margin-left:.5rem !important}.ms-3{margin-left:1rem !important}.ms-4{margin-left:1.5rem !important}.ms-5{margin-left:3rem !important}.ms-auto{margin-left:auto !important}.p-0{padding:0 !important}.p-1{padding:.25rem !important}.p-2{padding:.5rem !important}.p-3{padding:1rem !important}.p-4{padding:1.5rem !important}.p-5{padding:3rem !important}.px-0{padding-right:0 !important;padding-left:0 !important}.px-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-3{padding-right:1rem !important;padding-left:1rem !important}.px-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-5{padding-right:3rem !important;padding-left:3rem !important}.py-0{padding-top:0 !important;padding-bottom:0 !important}.py-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-0{padding-top:0 !important}.pt-1{padding-top:.25rem !important}.pt-2{padding-top:.5rem !important}.pt-3{padding-top:1rem !important}.pt-4{padding-top:1.5rem !important}.pt-5{padding-top:3rem !important}.pe-0{padding-right:0 !important}.pe-1{padding-right:.25rem !important}.pe-2{padding-right:.5rem !important}.pe-3{padding-right:1rem !important}.pe-4{padding-right:1.5rem !important}.pe-5{padding-right:3rem !important}.pb-0{padding-bottom:0 !important}.pb-1{padding-bottom:.25rem !important}.pb-2{padding-bottom:.5rem !important}.pb-3{padding-bottom:1rem !important}.pb-4{padding-bottom:1.5rem !important}.pb-5{padding-bottom:3rem !important}.ps-0{padding-left:0 !important}.ps-1{padding-left:.25rem !important}.ps-2{padding-left:.5rem !important}.ps-3{padding-left:1rem !important}.ps-4{padding-left:1.5rem !important}.ps-5{padding-left:3rem !important}.gap-0{gap:0 !important}.gap-1{gap:.25rem !important}.gap-2{gap:.5rem !important}.gap-3{gap:1rem !important}.gap-4{gap:1.5rem !important}.gap-5{gap:3rem !important}.font-monospace{font-family:var(--bs-font-monospace) !important}.fs-1{font-size:calc(1.375rem + 1.5vw) !important}.fs-2{font-size:calc(1.325rem + .9vw) !important}.fs-3{font-size:calc(1.3rem + .6vw) !important}.fs-4{font-size:calc(1.275rem + .3vw) !important}.fs-5{font-size:1.25rem !important}.fs-6{font-size:1rem !important}.fst-italic{font-style:italic !important}.fst-normal{font-style:normal !important}.fw-light{font-weight:300 !important}.fw-lighter{font-weight:lighter !important}.fw-normal{font-weight:400 !important}.fw-bold{font-weight:700 !important}.fw-semibold{font-weight:600 !important}.fw-bolder{font-weight:bolder !important}.lh-1{line-height:1 !important}.lh-sm{line-height:1.25 !important}.lh-base{line-height:1.5 !important}.lh-lg{line-height:2 !important}.text-start{text-align:left !important}.text-end{text-align:right !important}.text-center{text-align:center !important}.text-decoration-none{text-decoration:none !important}.text-decoration-underline{text-decoration:underline !important}.text-decoration-line-through{text-decoration:line-through !important}.text-lowercase{text-transform:lowercase !important}.text-uppercase{text-transform:uppercase !important}.text-capitalize{text-transform:capitalize !important}.text-wrap{white-space:normal !important}.text-nowrap{white-space:nowrap !important}.text-break{word-wrap:break-word !important;word-break:break-word !important}.text-default{--bs-text-opacity: 1;color:rgba(var(--bs-default-rgb), var(--bs-text-opacity)) !important}.text-primary{--bs-text-opacity: 1;color:rgba(var(--bs-primary-rgb), var(--bs-text-opacity)) !important}.text-secondary{--bs-text-opacity: 1;color:rgba(var(--bs-secondary-rgb), var(--bs-text-opacity)) !important}.text-success{--bs-text-opacity: 1;color:rgba(var(--bs-success-rgb), var(--bs-text-opacity)) !important}.text-info{--bs-text-opacity: 1;color:rgba(var(--bs-info-rgb), var(--bs-text-opacity)) !important}.text-warning{--bs-text-opacity: 1;color:rgba(var(--bs-warning-rgb), var(--bs-text-opacity)) !important}.text-danger{--bs-text-opacity: 1;color:rgba(var(--bs-danger-rgb), var(--bs-text-opacity)) !important}.text-light{--bs-text-opacity: 1;color:rgba(var(--bs-light-rgb), var(--bs-text-opacity)) !important}.text-dark{--bs-text-opacity: 1;color:rgba(var(--bs-dark-rgb), var(--bs-text-opacity)) !important}.text-black{--bs-text-opacity: 1;color:rgba(var(--bs-black-rgb), var(--bs-text-opacity)) !important}.text-white{--bs-text-opacity: 1;color:rgba(var(--bs-white-rgb), var(--bs-text-opacity)) !important}.text-body{--bs-text-opacity: 1;color:rgba(var(--bs-body-color-rgb), var(--bs-text-opacity)) !important}.text-muted{--bs-text-opacity: 1;color:#6c757d !important}.text-black-50{--bs-text-opacity: 1;color:rgba(0,0,0,0.5) !important}.text-white-50{--bs-text-opacity: 1;color:rgba(255,255,255,0.5) !important}.text-reset{--bs-text-opacity: 1;color:inherit !important}.text-opacity-25{--bs-text-opacity: .25}.text-opacity-50{--bs-text-opacity: .5}.text-opacity-75{--bs-text-opacity: .75}.text-opacity-100{--bs-text-opacity: 1}.bg-default{--bs-bg-opacity: 1;background-color:rgba(var(--bs-default-rgb), var(--bs-bg-opacity)) !important}.bg-primary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-primary-rgb), var(--bs-bg-opacity)) !important}.bg-secondary{--bs-bg-opacity: 1;background-color:rgba(var(--bs-secondary-rgb), var(--bs-bg-opacity)) !important}.bg-success{--bs-bg-opacity: 1;background-color:rgba(var(--bs-success-rgb), var(--bs-bg-opacity)) !important}.bg-info{--bs-bg-opacity: 1;background-color:rgba(var(--bs-info-rgb), var(--bs-bg-opacity)) !important}.bg-warning{--bs-bg-opacity: 1;background-color:rgba(var(--bs-warning-rgb), var(--bs-bg-opacity)) !important}.bg-danger{--bs-bg-opacity: 1;background-color:rgba(var(--bs-danger-rgb), var(--bs-bg-opacity)) !important}.bg-light{--bs-bg-opacity: 1;background-color:rgba(var(--bs-light-rgb), var(--bs-bg-opacity)) !important}.bg-dark{--bs-bg-opacity: 1;background-color:rgba(var(--bs-dark-rgb), var(--bs-bg-opacity)) !important}.bg-black{--bs-bg-opacity: 1;background-color:rgba(var(--bs-black-rgb), var(--bs-bg-opacity)) !important}.bg-white{--bs-bg-opacity: 1;background-color:rgba(var(--bs-white-rgb), var(--bs-bg-opacity)) !important}.bg-body{--bs-bg-opacity: 1;background-color:rgba(var(--bs-body-bg-rgb), var(--bs-bg-opacity)) !important}.bg-transparent{--bs-bg-opacity: 1;background-color:rgba(0,0,0,0) !important}.bg-opacity-10{--bs-bg-opacity: .1}.bg-opacity-25{--bs-bg-opacity: .25}.bg-opacity-50{--bs-bg-opacity: .5}.bg-opacity-75{--bs-bg-opacity: .75}.bg-opacity-100{--bs-bg-opacity: 1}.bg-gradient{background-image:var(--bs-gradient) !important}.user-select-all{user-select:all !important}.user-select-auto{user-select:auto !important}.user-select-none{user-select:none !important}.pe-none{pointer-events:none !important}.pe-auto{pointer-events:auto !important}.rounded{border-radius:var(--bs-border-radius) !important}.rounded-0{border-radius:0 !important}.rounded-1{border-radius:var(--bs-border-radius-sm) !important}.rounded-2{border-radius:var(--bs-border-radius) !important}.rounded-3{border-radius:var(--bs-border-radius-lg) !important}.rounded-4{border-radius:var(--bs-border-radius-xl) !important}.rounded-5{border-radius:var(--bs-border-radius-2xl) !important}.rounded-circle{border-radius:50% !important}.rounded-pill{border-radius:var(--bs-border-radius-pill) !important}.rounded-top{border-top-left-radius:var(--bs-border-radius) !important;border-top-right-radius:var(--bs-border-radius) !important}.rounded-end{border-top-right-radius:var(--bs-border-radius) !important;border-bottom-right-radius:var(--bs-border-radius) !important}.rounded-bottom{border-bottom-right-radius:var(--bs-border-radius) !important;border-bottom-left-radius:var(--bs-border-radius) !important}.rounded-start{border-bottom-left-radius:var(--bs-border-radius) !important;border-top-left-radius:var(--bs-border-radius) !important}.visible{visibility:visible !important}.invisible{visibility:hidden !important}@media (min-width: 576px){.float-sm-start{float:left !important}.float-sm-end{float:right !important}.float-sm-none{float:none !important}.d-sm-inline{display:inline !important}.d-sm-inline-block{display:inline-block !important}.d-sm-block{display:block !important}.d-sm-grid{display:grid !important}.d-sm-table{display:table !important}.d-sm-table-row{display:table-row !important}.d-sm-table-cell{display:table-cell !important}.d-sm-flex{display:flex !important}.d-sm-inline-flex{display:inline-flex !important}.d-sm-none{display:none !important}.flex-sm-fill{flex:1 1 auto !important}.flex-sm-row{flex-direction:row !important}.flex-sm-column{flex-direction:column !important}.flex-sm-row-reverse{flex-direction:row-reverse !important}.flex-sm-column-reverse{flex-direction:column-reverse !important}.flex-sm-grow-0{flex-grow:0 !important}.flex-sm-grow-1{flex-grow:1 !important}.flex-sm-shrink-0{flex-shrink:0 !important}.flex-sm-shrink-1{flex-shrink:1 !important}.flex-sm-wrap{flex-wrap:wrap !important}.flex-sm-nowrap{flex-wrap:nowrap !important}.flex-sm-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-sm-start{justify-content:flex-start !important}.justify-content-sm-end{justify-content:flex-end !important}.justify-content-sm-center{justify-content:center !important}.justify-content-sm-between{justify-content:space-between !important}.justify-content-sm-around{justify-content:space-around !important}.justify-content-sm-evenly{justify-content:space-evenly !important}.align-items-sm-start{align-items:flex-start !important}.align-items-sm-end{align-items:flex-end !important}.align-items-sm-center{align-items:center !important}.align-items-sm-baseline{align-items:baseline !important}.align-items-sm-stretch{align-items:stretch !important}.align-content-sm-start{align-content:flex-start !important}.align-content-sm-end{align-content:flex-end !important}.align-content-sm-center{align-content:center !important}.align-content-sm-between{align-content:space-between !important}.align-content-sm-around{align-content:space-around !important}.align-content-sm-stretch{align-content:stretch !important}.align-self-sm-auto{align-self:auto !important}.align-self-sm-start{align-self:flex-start !important}.align-self-sm-end{align-self:flex-end !important}.align-self-sm-center{align-self:center !important}.align-self-sm-baseline{align-self:baseline !important}.align-self-sm-stretch{align-self:stretch !important}.order-sm-first{order:-1 !important}.order-sm-0{order:0 !important}.order-sm-1{order:1 !important}.order-sm-2{order:2 !important}.order-sm-3{order:3 !important}.order-sm-4{order:4 !important}.order-sm-5{order:5 !important}.order-sm-last{order:6 !important}.m-sm-0{margin:0 !important}.m-sm-1{margin:.25rem !important}.m-sm-2{margin:.5rem !important}.m-sm-3{margin:1rem !important}.m-sm-4{margin:1.5rem !important}.m-sm-5{margin:3rem !important}.m-sm-auto{margin:auto !important}.mx-sm-0{margin-right:0 !important;margin-left:0 !important}.mx-sm-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-sm-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-sm-3{margin-right:1rem !important;margin-left:1rem !important}.mx-sm-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-sm-5{margin-right:3rem !important;margin-left:3rem !important}.mx-sm-auto{margin-right:auto !important;margin-left:auto !important}.my-sm-0{margin-top:0 !important;margin-bottom:0 !important}.my-sm-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-sm-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-sm-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-sm-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-sm-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-sm-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-sm-0{margin-top:0 !important}.mt-sm-1{margin-top:.25rem !important}.mt-sm-2{margin-top:.5rem !important}.mt-sm-3{margin-top:1rem !important}.mt-sm-4{margin-top:1.5rem !important}.mt-sm-5{margin-top:3rem !important}.mt-sm-auto{margin-top:auto !important}.me-sm-0{margin-right:0 !important}.me-sm-1{margin-right:.25rem !important}.me-sm-2{margin-right:.5rem !important}.me-sm-3{margin-right:1rem !important}.me-sm-4{margin-right:1.5rem !important}.me-sm-5{margin-right:3rem !important}.me-sm-auto{margin-right:auto !important}.mb-sm-0{margin-bottom:0 !important}.mb-sm-1{margin-bottom:.25rem !important}.mb-sm-2{margin-bottom:.5rem !important}.mb-sm-3{margin-bottom:1rem !important}.mb-sm-4{margin-bottom:1.5rem !important}.mb-sm-5{margin-bottom:3rem !important}.mb-sm-auto{margin-bottom:auto !important}.ms-sm-0{margin-left:0 !important}.ms-sm-1{margin-left:.25rem !important}.ms-sm-2{margin-left:.5rem !important}.ms-sm-3{margin-left:1rem !important}.ms-sm-4{margin-left:1.5rem !important}.ms-sm-5{margin-left:3rem !important}.ms-sm-auto{margin-left:auto !important}.p-sm-0{padding:0 !important}.p-sm-1{padding:.25rem !important}.p-sm-2{padding:.5rem !important}.p-sm-3{padding:1rem !important}.p-sm-4{padding:1.5rem !important}.p-sm-5{padding:3rem !important}.px-sm-0{padding-right:0 !important;padding-left:0 !important}.px-sm-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-sm-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-sm-3{padding-right:1rem !important;padding-left:1rem !important}.px-sm-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-sm-5{padding-right:3rem !important;padding-left:3rem !important}.py-sm-0{padding-top:0 !important;padding-bottom:0 !important}.py-sm-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-sm-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-sm-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-sm-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-sm-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-sm-0{padding-top:0 !important}.pt-sm-1{padding-top:.25rem !important}.pt-sm-2{padding-top:.5rem !important}.pt-sm-3{padding-top:1rem !important}.pt-sm-4{padding-top:1.5rem !important}.pt-sm-5{padding-top:3rem !important}.pe-sm-0{padding-right:0 !important}.pe-sm-1{padding-right:.25rem !important}.pe-sm-2{padding-right:.5rem !important}.pe-sm-3{padding-right:1rem !important}.pe-sm-4{padding-right:1.5rem !important}.pe-sm-5{padding-right:3rem !important}.pb-sm-0{padding-bottom:0 !important}.pb-sm-1{padding-bottom:.25rem !important}.pb-sm-2{padding-bottom:.5rem !important}.pb-sm-3{padding-bottom:1rem !important}.pb-sm-4{padding-bottom:1.5rem !important}.pb-sm-5{padding-bottom:3rem !important}.ps-sm-0{padding-left:0 !important}.ps-sm-1{padding-left:.25rem !important}.ps-sm-2{padding-left:.5rem !important}.ps-sm-3{padding-left:1rem !important}.ps-sm-4{padding-left:1.5rem !important}.ps-sm-5{padding-left:3rem !important}.gap-sm-0{gap:0 !important}.gap-sm-1{gap:.25rem !important}.gap-sm-2{gap:.5rem !important}.gap-sm-3{gap:1rem !important}.gap-sm-4{gap:1.5rem !important}.gap-sm-5{gap:3rem !important}.text-sm-start{text-align:left !important}.text-sm-end{text-align:right !important}.text-sm-center{text-align:center !important}}@media (min-width: 768px){.float-md-start{float:left !important}.float-md-end{float:right !important}.float-md-none{float:none !important}.d-md-inline{display:inline !important}.d-md-inline-block{display:inline-block !important}.d-md-block{display:block !important}.d-md-grid{display:grid !important}.d-md-table{display:table !important}.d-md-table-row{display:table-row !important}.d-md-table-cell{display:table-cell !important}.d-md-flex{display:flex !important}.d-md-inline-flex{display:inline-flex !important}.d-md-none{display:none !important}.flex-md-fill{flex:1 1 auto !important}.flex-md-row{flex-direction:row !important}.flex-md-column{flex-direction:column !important}.flex-md-row-reverse{flex-direction:row-reverse !important}.flex-md-column-reverse{flex-direction:column-reverse !important}.flex-md-grow-0{flex-grow:0 !important}.flex-md-grow-1{flex-grow:1 !important}.flex-md-shrink-0{flex-shrink:0 !important}.flex-md-shrink-1{flex-shrink:1 !important}.flex-md-wrap{flex-wrap:wrap !important}.flex-md-nowrap{flex-wrap:nowrap !important}.flex-md-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-md-start{justify-content:flex-start !important}.justify-content-md-end{justify-content:flex-end !important}.justify-content-md-center{justify-content:center !important}.justify-content-md-between{justify-content:space-between !important}.justify-content-md-around{justify-content:space-around !important}.justify-content-md-evenly{justify-content:space-evenly !important}.align-items-md-start{align-items:flex-start !important}.align-items-md-end{align-items:flex-end !important}.align-items-md-center{align-items:center !important}.align-items-md-baseline{align-items:baseline !important}.align-items-md-stretch{align-items:stretch !important}.align-content-md-start{align-content:flex-start !important}.align-content-md-end{align-content:flex-end !important}.align-content-md-center{align-content:center !important}.align-content-md-between{align-content:space-between !important}.align-content-md-around{align-content:space-around !important}.align-content-md-stretch{align-content:stretch !important}.align-self-md-auto{align-self:auto !important}.align-self-md-start{align-self:flex-start !important}.align-self-md-end{align-self:flex-end !important}.align-self-md-center{align-self:center !important}.align-self-md-baseline{align-self:baseline !important}.align-self-md-stretch{align-self:stretch !important}.order-md-first{order:-1 !important}.order-md-0{order:0 !important}.order-md-1{order:1 !important}.order-md-2{order:2 !important}.order-md-3{order:3 !important}.order-md-4{order:4 !important}.order-md-5{order:5 !important}.order-md-last{order:6 !important}.m-md-0{margin:0 !important}.m-md-1{margin:.25rem !important}.m-md-2{margin:.5rem !important}.m-md-3{margin:1rem !important}.m-md-4{margin:1.5rem !important}.m-md-5{margin:3rem !important}.m-md-auto{margin:auto !important}.mx-md-0{margin-right:0 !important;margin-left:0 !important}.mx-md-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-md-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-md-3{margin-right:1rem !important;margin-left:1rem !important}.mx-md-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-md-5{margin-right:3rem !important;margin-left:3rem !important}.mx-md-auto{margin-right:auto !important;margin-left:auto !important}.my-md-0{margin-top:0 !important;margin-bottom:0 !important}.my-md-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-md-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-md-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-md-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-md-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-md-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-md-0{margin-top:0 !important}.mt-md-1{margin-top:.25rem !important}.mt-md-2{margin-top:.5rem !important}.mt-md-3{margin-top:1rem !important}.mt-md-4{margin-top:1.5rem !important}.mt-md-5{margin-top:3rem !important}.mt-md-auto{margin-top:auto !important}.me-md-0{margin-right:0 !important}.me-md-1{margin-right:.25rem !important}.me-md-2{margin-right:.5rem !important}.me-md-3{margin-right:1rem !important}.me-md-4{margin-right:1.5rem !important}.me-md-5{margin-right:3rem !important}.me-md-auto{margin-right:auto !important}.mb-md-0{margin-bottom:0 !important}.mb-md-1{margin-bottom:.25rem !important}.mb-md-2{margin-bottom:.5rem !important}.mb-md-3{margin-bottom:1rem !important}.mb-md-4{margin-bottom:1.5rem !important}.mb-md-5{margin-bottom:3rem !important}.mb-md-auto{margin-bottom:auto !important}.ms-md-0{margin-left:0 !important}.ms-md-1{margin-left:.25rem !important}.ms-md-2{margin-left:.5rem !important}.ms-md-3{margin-left:1rem !important}.ms-md-4{margin-left:1.5rem !important}.ms-md-5{margin-left:3rem !important}.ms-md-auto{margin-left:auto !important}.p-md-0{padding:0 !important}.p-md-1{padding:.25rem !important}.p-md-2{padding:.5rem !important}.p-md-3{padding:1rem !important}.p-md-4{padding:1.5rem !important}.p-md-5{padding:3rem !important}.px-md-0{padding-right:0 !important;padding-left:0 !important}.px-md-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-md-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-md-3{padding-right:1rem !important;padding-left:1rem !important}.px-md-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-md-5{padding-right:3rem !important;padding-left:3rem !important}.py-md-0{padding-top:0 !important;padding-bottom:0 !important}.py-md-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-md-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-md-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-md-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-md-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-md-0{padding-top:0 !important}.pt-md-1{padding-top:.25rem !important}.pt-md-2{padding-top:.5rem !important}.pt-md-3{padding-top:1rem !important}.pt-md-4{padding-top:1.5rem !important}.pt-md-5{padding-top:3rem !important}.pe-md-0{padding-right:0 !important}.pe-md-1{padding-right:.25rem !important}.pe-md-2{padding-right:.5rem !important}.pe-md-3{padding-right:1rem !important}.pe-md-4{padding-right:1.5rem !important}.pe-md-5{padding-right:3rem !important}.pb-md-0{padding-bottom:0 !important}.pb-md-1{padding-bottom:.25rem !important}.pb-md-2{padding-bottom:.5rem !important}.pb-md-3{padding-bottom:1rem !important}.pb-md-4{padding-bottom:1.5rem !important}.pb-md-5{padding-bottom:3rem !important}.ps-md-0{padding-left:0 !important}.ps-md-1{padding-left:.25rem !important}.ps-md-2{padding-left:.5rem !important}.ps-md-3{padding-left:1rem !important}.ps-md-4{padding-left:1.5rem !important}.ps-md-5{padding-left:3rem !important}.gap-md-0{gap:0 !important}.gap-md-1{gap:.25rem !important}.gap-md-2{gap:.5rem !important}.gap-md-3{gap:1rem !important}.gap-md-4{gap:1.5rem !important}.gap-md-5{gap:3rem !important}.text-md-start{text-align:left !important}.text-md-end{text-align:right !important}.text-md-center{text-align:center !important}}@media (min-width: 992px){.float-lg-start{float:left !important}.float-lg-end{float:right !important}.float-lg-none{float:none !important}.d-lg-inline{display:inline !important}.d-lg-inline-block{display:inline-block !important}.d-lg-block{display:block !important}.d-lg-grid{display:grid !important}.d-lg-table{display:table !important}.d-lg-table-row{display:table-row !important}.d-lg-table-cell{display:table-cell !important}.d-lg-flex{display:flex !important}.d-lg-inline-flex{display:inline-flex !important}.d-lg-none{display:none !important}.flex-lg-fill{flex:1 1 auto !important}.flex-lg-row{flex-direction:row !important}.flex-lg-column{flex-direction:column !important}.flex-lg-row-reverse{flex-direction:row-reverse !important}.flex-lg-column-reverse{flex-direction:column-reverse !important}.flex-lg-grow-0{flex-grow:0 !important}.flex-lg-grow-1{flex-grow:1 !important}.flex-lg-shrink-0{flex-shrink:0 !important}.flex-lg-shrink-1{flex-shrink:1 !important}.flex-lg-wrap{flex-wrap:wrap !important}.flex-lg-nowrap{flex-wrap:nowrap !important}.flex-lg-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-lg-start{justify-content:flex-start !important}.justify-content-lg-end{justify-content:flex-end !important}.justify-content-lg-center{justify-content:center !important}.justify-content-lg-between{justify-content:space-between !important}.justify-content-lg-around{justify-content:space-around !important}.justify-content-lg-evenly{justify-content:space-evenly !important}.align-items-lg-start{align-items:flex-start !important}.align-items-lg-end{align-items:flex-end !important}.align-items-lg-center{align-items:center !important}.align-items-lg-baseline{align-items:baseline !important}.align-items-lg-stretch{align-items:stretch !important}.align-content-lg-start{align-content:flex-start !important}.align-content-lg-end{align-content:flex-end !important}.align-content-lg-center{align-content:center !important}.align-content-lg-between{align-content:space-between !important}.align-content-lg-around{align-content:space-around !important}.align-content-lg-stretch{align-content:stretch !important}.align-self-lg-auto{align-self:auto !important}.align-self-lg-start{align-self:flex-start !important}.align-self-lg-end{align-self:flex-end !important}.align-self-lg-center{align-self:center !important}.align-self-lg-baseline{align-self:baseline !important}.align-self-lg-stretch{align-self:stretch !important}.order-lg-first{order:-1 !important}.order-lg-0{order:0 !important}.order-lg-1{order:1 !important}.order-lg-2{order:2 !important}.order-lg-3{order:3 !important}.order-lg-4{order:4 !important}.order-lg-5{order:5 !important}.order-lg-last{order:6 !important}.m-lg-0{margin:0 !important}.m-lg-1{margin:.25rem !important}.m-lg-2{margin:.5rem !important}.m-lg-3{margin:1rem !important}.m-lg-4{margin:1.5rem !important}.m-lg-5{margin:3rem !important}.m-lg-auto{margin:auto !important}.mx-lg-0{margin-right:0 !important;margin-left:0 !important}.mx-lg-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-lg-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-lg-3{margin-right:1rem !important;margin-left:1rem !important}.mx-lg-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-lg-5{margin-right:3rem !important;margin-left:3rem !important}.mx-lg-auto{margin-right:auto !important;margin-left:auto !important}.my-lg-0{margin-top:0 !important;margin-bottom:0 !important}.my-lg-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-lg-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-lg-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-lg-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-lg-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-lg-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-lg-0{margin-top:0 !important}.mt-lg-1{margin-top:.25rem !important}.mt-lg-2{margin-top:.5rem !important}.mt-lg-3{margin-top:1rem !important}.mt-lg-4{margin-top:1.5rem !important}.mt-lg-5{margin-top:3rem !important}.mt-lg-auto{margin-top:auto !important}.me-lg-0{margin-right:0 !important}.me-lg-1{margin-right:.25rem !important}.me-lg-2{margin-right:.5rem !important}.me-lg-3{margin-right:1rem !important}.me-lg-4{margin-right:1.5rem !important}.me-lg-5{margin-right:3rem !important}.me-lg-auto{margin-right:auto !important}.mb-lg-0{margin-bottom:0 !important}.mb-lg-1{margin-bottom:.25rem !important}.mb-lg-2{margin-bottom:.5rem !important}.mb-lg-3{margin-bottom:1rem !important}.mb-lg-4{margin-bottom:1.5rem !important}.mb-lg-5{margin-bottom:3rem !important}.mb-lg-auto{margin-bottom:auto !important}.ms-lg-0{margin-left:0 !important}.ms-lg-1{margin-left:.25rem !important}.ms-lg-2{margin-left:.5rem !important}.ms-lg-3{margin-left:1rem !important}.ms-lg-4{margin-left:1.5rem !important}.ms-lg-5{margin-left:3rem !important}.ms-lg-auto{margin-left:auto !important}.p-lg-0{padding:0 !important}.p-lg-1{padding:.25rem !important}.p-lg-2{padding:.5rem !important}.p-lg-3{padding:1rem !important}.p-lg-4{padding:1.5rem !important}.p-lg-5{padding:3rem !important}.px-lg-0{padding-right:0 !important;padding-left:0 !important}.px-lg-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-lg-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-lg-3{padding-right:1rem !important;padding-left:1rem !important}.px-lg-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-lg-5{padding-right:3rem !important;padding-left:3rem !important}.py-lg-0{padding-top:0 !important;padding-bottom:0 !important}.py-lg-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-lg-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-lg-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-lg-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-lg-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-lg-0{padding-top:0 !important}.pt-lg-1{padding-top:.25rem !important}.pt-lg-2{padding-top:.5rem !important}.pt-lg-3{padding-top:1rem !important}.pt-lg-4{padding-top:1.5rem !important}.pt-lg-5{padding-top:3rem !important}.pe-lg-0{padding-right:0 !important}.pe-lg-1{padding-right:.25rem !important}.pe-lg-2{padding-right:.5rem !important}.pe-lg-3{padding-right:1rem !important}.pe-lg-4{padding-right:1.5rem !important}.pe-lg-5{padding-right:3rem !important}.pb-lg-0{padding-bottom:0 !important}.pb-lg-1{padding-bottom:.25rem !important}.pb-lg-2{padding-bottom:.5rem !important}.pb-lg-3{padding-bottom:1rem !important}.pb-lg-4{padding-bottom:1.5rem !important}.pb-lg-5{padding-bottom:3rem !important}.ps-lg-0{padding-left:0 !important}.ps-lg-1{padding-left:.25rem !important}.ps-lg-2{padding-left:.5rem !important}.ps-lg-3{padding-left:1rem !important}.ps-lg-4{padding-left:1.5rem !important}.ps-lg-5{padding-left:3rem !important}.gap-lg-0{gap:0 !important}.gap-lg-1{gap:.25rem !important}.gap-lg-2{gap:.5rem !important}.gap-lg-3{gap:1rem !important}.gap-lg-4{gap:1.5rem !important}.gap-lg-5{gap:3rem !important}.text-lg-start{text-align:left !important}.text-lg-end{text-align:right !important}.text-lg-center{text-align:center !important}}@media (min-width: 1200px){.float-xl-start{float:left !important}.float-xl-end{float:right !important}.float-xl-none{float:none !important}.d-xl-inline{display:inline !important}.d-xl-inline-block{display:inline-block !important}.d-xl-block{display:block !important}.d-xl-grid{display:grid !important}.d-xl-table{display:table !important}.d-xl-table-row{display:table-row !important}.d-xl-table-cell{display:table-cell !important}.d-xl-flex{display:flex !important}.d-xl-inline-flex{display:inline-flex !important}.d-xl-none{display:none !important}.flex-xl-fill{flex:1 1 auto !important}.flex-xl-row{flex-direction:row !important}.flex-xl-column{flex-direction:column !important}.flex-xl-row-reverse{flex-direction:row-reverse !important}.flex-xl-column-reverse{flex-direction:column-reverse !important}.flex-xl-grow-0{flex-grow:0 !important}.flex-xl-grow-1{flex-grow:1 !important}.flex-xl-shrink-0{flex-shrink:0 !important}.flex-xl-shrink-1{flex-shrink:1 !important}.flex-xl-wrap{flex-wrap:wrap !important}.flex-xl-nowrap{flex-wrap:nowrap !important}.flex-xl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xl-start{justify-content:flex-start !important}.justify-content-xl-end{justify-content:flex-end !important}.justify-content-xl-center{justify-content:center !important}.justify-content-xl-between{justify-content:space-between !important}.justify-content-xl-around{justify-content:space-around !important}.justify-content-xl-evenly{justify-content:space-evenly !important}.align-items-xl-start{align-items:flex-start !important}.align-items-xl-end{align-items:flex-end !important}.align-items-xl-center{align-items:center !important}.align-items-xl-baseline{align-items:baseline !important}.align-items-xl-stretch{align-items:stretch !important}.align-content-xl-start{align-content:flex-start !important}.align-content-xl-end{align-content:flex-end !important}.align-content-xl-center{align-content:center !important}.align-content-xl-between{align-content:space-between !important}.align-content-xl-around{align-content:space-around !important}.align-content-xl-stretch{align-content:stretch !important}.align-self-xl-auto{align-self:auto !important}.align-self-xl-start{align-self:flex-start !important}.align-self-xl-end{align-self:flex-end !important}.align-self-xl-center{align-self:center !important}.align-self-xl-baseline{align-self:baseline !important}.align-self-xl-stretch{align-self:stretch !important}.order-xl-first{order:-1 !important}.order-xl-0{order:0 !important}.order-xl-1{order:1 !important}.order-xl-2{order:2 !important}.order-xl-3{order:3 !important}.order-xl-4{order:4 !important}.order-xl-5{order:5 !important}.order-xl-last{order:6 !important}.m-xl-0{margin:0 !important}.m-xl-1{margin:.25rem !important}.m-xl-2{margin:.5rem !important}.m-xl-3{margin:1rem !important}.m-xl-4{margin:1.5rem !important}.m-xl-5{margin:3rem !important}.m-xl-auto{margin:auto !important}.mx-xl-0{margin-right:0 !important;margin-left:0 !important}.mx-xl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xl-auto{margin-right:auto !important;margin-left:auto !important}.my-xl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xl-0{margin-top:0 !important}.mt-xl-1{margin-top:.25rem !important}.mt-xl-2{margin-top:.5rem !important}.mt-xl-3{margin-top:1rem !important}.mt-xl-4{margin-top:1.5rem !important}.mt-xl-5{margin-top:3rem !important}.mt-xl-auto{margin-top:auto !important}.me-xl-0{margin-right:0 !important}.me-xl-1{margin-right:.25rem !important}.me-xl-2{margin-right:.5rem !important}.me-xl-3{margin-right:1rem !important}.me-xl-4{margin-right:1.5rem !important}.me-xl-5{margin-right:3rem !important}.me-xl-auto{margin-right:auto !important}.mb-xl-0{margin-bottom:0 !important}.mb-xl-1{margin-bottom:.25rem !important}.mb-xl-2{margin-bottom:.5rem !important}.mb-xl-3{margin-bottom:1rem !important}.mb-xl-4{margin-bottom:1.5rem !important}.mb-xl-5{margin-bottom:3rem !important}.mb-xl-auto{margin-bottom:auto !important}.ms-xl-0{margin-left:0 !important}.ms-xl-1{margin-left:.25rem !important}.ms-xl-2{margin-left:.5rem !important}.ms-xl-3{margin-left:1rem !important}.ms-xl-4{margin-left:1.5rem !important}.ms-xl-5{margin-left:3rem !important}.ms-xl-auto{margin-left:auto !important}.p-xl-0{padding:0 !important}.p-xl-1{padding:.25rem !important}.p-xl-2{padding:.5rem !important}.p-xl-3{padding:1rem !important}.p-xl-4{padding:1.5rem !important}.p-xl-5{padding:3rem !important}.px-xl-0{padding-right:0 !important;padding-left:0 !important}.px-xl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xl-0{padding-top:0 !important}.pt-xl-1{padding-top:.25rem !important}.pt-xl-2{padding-top:.5rem !important}.pt-xl-3{padding-top:1rem !important}.pt-xl-4{padding-top:1.5rem !important}.pt-xl-5{padding-top:3rem !important}.pe-xl-0{padding-right:0 !important}.pe-xl-1{padding-right:.25rem !important}.pe-xl-2{padding-right:.5rem !important}.pe-xl-3{padding-right:1rem !important}.pe-xl-4{padding-right:1.5rem !important}.pe-xl-5{padding-right:3rem !important}.pb-xl-0{padding-bottom:0 !important}.pb-xl-1{padding-bottom:.25rem !important}.pb-xl-2{padding-bottom:.5rem !important}.pb-xl-3{padding-bottom:1rem !important}.pb-xl-4{padding-bottom:1.5rem !important}.pb-xl-5{padding-bottom:3rem !important}.ps-xl-0{padding-left:0 !important}.ps-xl-1{padding-left:.25rem !important}.ps-xl-2{padding-left:.5rem !important}.ps-xl-3{padding-left:1rem !important}.ps-xl-4{padding-left:1.5rem !important}.ps-xl-5{padding-left:3rem !important}.gap-xl-0{gap:0 !important}.gap-xl-1{gap:.25rem !important}.gap-xl-2{gap:.5rem !important}.gap-xl-3{gap:1rem !important}.gap-xl-4{gap:1.5rem !important}.gap-xl-5{gap:3rem !important}.text-xl-start{text-align:left !important}.text-xl-end{text-align:right !important}.text-xl-center{text-align:center !important}}@media (min-width: 1400px){.float-xxl-start{float:left !important}.float-xxl-end{float:right !important}.float-xxl-none{float:none !important}.d-xxl-inline{display:inline !important}.d-xxl-inline-block{display:inline-block !important}.d-xxl-block{display:block !important}.d-xxl-grid{display:grid !important}.d-xxl-table{display:table !important}.d-xxl-table-row{display:table-row !important}.d-xxl-table-cell{display:table-cell !important}.d-xxl-flex{display:flex !important}.d-xxl-inline-flex{display:inline-flex !important}.d-xxl-none{display:none !important}.flex-xxl-fill{flex:1 1 auto !important}.flex-xxl-row{flex-direction:row !important}.flex-xxl-column{flex-direction:column !important}.flex-xxl-row-reverse{flex-direction:row-reverse !important}.flex-xxl-column-reverse{flex-direction:column-reverse !important}.flex-xxl-grow-0{flex-grow:0 !important}.flex-xxl-grow-1{flex-grow:1 !important}.flex-xxl-shrink-0{flex-shrink:0 !important}.flex-xxl-shrink-1{flex-shrink:1 !important}.flex-xxl-wrap{flex-wrap:wrap !important}.flex-xxl-nowrap{flex-wrap:nowrap !important}.flex-xxl-wrap-reverse{flex-wrap:wrap-reverse !important}.justify-content-xxl-start{justify-content:flex-start !important}.justify-content-xxl-end{justify-content:flex-end !important}.justify-content-xxl-center{justify-content:center !important}.justify-content-xxl-between{justify-content:space-between !important}.justify-content-xxl-around{justify-content:space-around !important}.justify-content-xxl-evenly{justify-content:space-evenly !important}.align-items-xxl-start{align-items:flex-start !important}.align-items-xxl-end{align-items:flex-end !important}.align-items-xxl-center{align-items:center !important}.align-items-xxl-baseline{align-items:baseline !important}.align-items-xxl-stretch{align-items:stretch !important}.align-content-xxl-start{align-content:flex-start !important}.align-content-xxl-end{align-content:flex-end !important}.align-content-xxl-center{align-content:center !important}.align-content-xxl-between{align-content:space-between !important}.align-content-xxl-around{align-content:space-around !important}.align-content-xxl-stretch{align-content:stretch !important}.align-self-xxl-auto{align-self:auto !important}.align-self-xxl-start{align-self:flex-start !important}.align-self-xxl-end{align-self:flex-end !important}.align-self-xxl-center{align-self:center !important}.align-self-xxl-baseline{align-self:baseline !important}.align-self-xxl-stretch{align-self:stretch !important}.order-xxl-first{order:-1 !important}.order-xxl-0{order:0 !important}.order-xxl-1{order:1 !important}.order-xxl-2{order:2 !important}.order-xxl-3{order:3 !important}.order-xxl-4{order:4 !important}.order-xxl-5{order:5 !important}.order-xxl-last{order:6 !important}.m-xxl-0{margin:0 !important}.m-xxl-1{margin:.25rem !important}.m-xxl-2{margin:.5rem !important}.m-xxl-3{margin:1rem !important}.m-xxl-4{margin:1.5rem !important}.m-xxl-5{margin:3rem !important}.m-xxl-auto{margin:auto !important}.mx-xxl-0{margin-right:0 !important;margin-left:0 !important}.mx-xxl-1{margin-right:.25rem !important;margin-left:.25rem !important}.mx-xxl-2{margin-right:.5rem !important;margin-left:.5rem !important}.mx-xxl-3{margin-right:1rem !important;margin-left:1rem !important}.mx-xxl-4{margin-right:1.5rem !important;margin-left:1.5rem !important}.mx-xxl-5{margin-right:3rem !important;margin-left:3rem !important}.mx-xxl-auto{margin-right:auto !important;margin-left:auto !important}.my-xxl-0{margin-top:0 !important;margin-bottom:0 !important}.my-xxl-1{margin-top:.25rem !important;margin-bottom:.25rem !important}.my-xxl-2{margin-top:.5rem !important;margin-bottom:.5rem !important}.my-xxl-3{margin-top:1rem !important;margin-bottom:1rem !important}.my-xxl-4{margin-top:1.5rem !important;margin-bottom:1.5rem !important}.my-xxl-5{margin-top:3rem !important;margin-bottom:3rem !important}.my-xxl-auto{margin-top:auto !important;margin-bottom:auto !important}.mt-xxl-0{margin-top:0 !important}.mt-xxl-1{margin-top:.25rem !important}.mt-xxl-2{margin-top:.5rem !important}.mt-xxl-3{margin-top:1rem !important}.mt-xxl-4{margin-top:1.5rem !important}.mt-xxl-5{margin-top:3rem !important}.mt-xxl-auto{margin-top:auto !important}.me-xxl-0{margin-right:0 !important}.me-xxl-1{margin-right:.25rem !important}.me-xxl-2{margin-right:.5rem !important}.me-xxl-3{margin-right:1rem !important}.me-xxl-4{margin-right:1.5rem !important}.me-xxl-5{margin-right:3rem !important}.me-xxl-auto{margin-right:auto !important}.mb-xxl-0{margin-bottom:0 !important}.mb-xxl-1{margin-bottom:.25rem !important}.mb-xxl-2{margin-bottom:.5rem !important}.mb-xxl-3{margin-bottom:1rem !important}.mb-xxl-4{margin-bottom:1.5rem !important}.mb-xxl-5{margin-bottom:3rem !important}.mb-xxl-auto{margin-bottom:auto !important}.ms-xxl-0{margin-left:0 !important}.ms-xxl-1{margin-left:.25rem !important}.ms-xxl-2{margin-left:.5rem !important}.ms-xxl-3{margin-left:1rem !important}.ms-xxl-4{margin-left:1.5rem !important}.ms-xxl-5{margin-left:3rem !important}.ms-xxl-auto{margin-left:auto !important}.p-xxl-0{padding:0 !important}.p-xxl-1{padding:.25rem !important}.p-xxl-2{padding:.5rem !important}.p-xxl-3{padding:1rem !important}.p-xxl-4{padding:1.5rem !important}.p-xxl-5{padding:3rem !important}.px-xxl-0{padding-right:0 !important;padding-left:0 !important}.px-xxl-1{padding-right:.25rem !important;padding-left:.25rem !important}.px-xxl-2{padding-right:.5rem !important;padding-left:.5rem !important}.px-xxl-3{padding-right:1rem !important;padding-left:1rem !important}.px-xxl-4{padding-right:1.5rem !important;padding-left:1.5rem !important}.px-xxl-5{padding-right:3rem !important;padding-left:3rem !important}.py-xxl-0{padding-top:0 !important;padding-bottom:0 !important}.py-xxl-1{padding-top:.25rem !important;padding-bottom:.25rem !important}.py-xxl-2{padding-top:.5rem !important;padding-bottom:.5rem !important}.py-xxl-3{padding-top:1rem !important;padding-bottom:1rem !important}.py-xxl-4{padding-top:1.5rem !important;padding-bottom:1.5rem !important}.py-xxl-5{padding-top:3rem !important;padding-bottom:3rem !important}.pt-xxl-0{padding-top:0 !important}.pt-xxl-1{padding-top:.25rem !important}.pt-xxl-2{padding-top:.5rem !important}.pt-xxl-3{padding-top:1rem !important}.pt-xxl-4{padding-top:1.5rem !important}.pt-xxl-5{padding-top:3rem !important}.pe-xxl-0{padding-right:0 !important}.pe-xxl-1{padding-right:.25rem !important}.pe-xxl-2{padding-right:.5rem !important}.pe-xxl-3{padding-right:1rem !important}.pe-xxl-4{padding-right:1.5rem !important}.pe-xxl-5{padding-right:3rem !important}.pb-xxl-0{padding-bottom:0 !important}.pb-xxl-1{padding-bottom:.25rem !important}.pb-xxl-2{padding-bottom:.5rem !important}.pb-xxl-3{padding-bottom:1rem !important}.pb-xxl-4{padding-bottom:1.5rem !important}.pb-xxl-5{padding-bottom:3rem !important}.ps-xxl-0{padding-left:0 !important}.ps-xxl-1{padding-left:.25rem !important}.ps-xxl-2{padding-left:.5rem !important}.ps-xxl-3{padding-left:1rem !important}.ps-xxl-4{padding-left:1.5rem !important}.ps-xxl-5{padding-left:3rem !important}.gap-xxl-0{gap:0 !important}.gap-xxl-1{gap:.25rem !important}.gap-xxl-2{gap:.5rem !important}.gap-xxl-3{gap:1rem !important}.gap-xxl-4{gap:1.5rem !important}.gap-xxl-5{gap:3rem !important}.text-xxl-start{text-align:left !important}.text-xxl-end{text-align:right !important}.text-xxl-center{text-align:center !important}}.bg-default{color:#000}.bg-primary{color:#fff}.bg-secondary{color:#fff}.bg-success{color:#fff}.bg-info{color:#000}.bg-warning{color:#000}.bg-danger{color:#fff}.bg-light{color:#000}.bg-dark{color:#fff}@media (min-width: 1200px){.fs-1{font-size:2.5rem !important}.fs-2{font-size:2rem !important}.fs-3{font-size:1.75rem !important}.fs-4{font-size:1.5rem !important}}@media print{.d-print-inline{display:inline !important}.d-print-inline-block{display:inline-block !important}.d-print-block{display:block !important}.d-print-grid{display:grid !important}.d-print-table{display:table !important}.d-print-table-row{display:table-row !important}.d-print-table-cell{display:table-cell !important}.d-print-flex{display:flex !important}.d-print-inline-flex{display:inline-flex !important}.d-print-none{display:none !important}}.table th[align=left]{text-align:left}.table th[align=right]{text-align:right}.table th[align=center]{text-align:center}.bslib-card{margin-bottom:1rem}.bslib-card .card-body+.card-body{padding-top:0}.bslib-card .card-body{overflow:auto}.bslib-card .card-body p,.bslib-card .card-body h1,.bslib-card .card-body .h1,.bslib-card .card-body h2,.bslib-card .card-body .h2,.bslib-card .card-body h3,.bslib-card .card-body .h3,.bslib-card .card-body h4,.bslib-card .card-body .h4,.bslib-card .card-body h5,.bslib-card .card-body .h5,.bslib-card .card-body h6,.bslib-card .card-body .h6{margin-top:0}.bslib-card .card-body p:last-child,.bslib-card .card-body h1:last-child,.bslib-card .card-body .h1:last-child,.bslib-card .card-body h2:last-child,.bslib-card .card-body .h2:last-child,.bslib-card .card-body h3:last-child,.bslib-card .card-body .h3:last-child,.bslib-card .card-body h4:last-child,.bslib-card .card-body .h4:last-child,.bslib-card .card-body h5:last-child,.bslib-card .card-body .h5:last-child,.bslib-card .card-body h6:last-child,.bslib-card .card-body .h6:last-child{margin-bottom:0}.bslib-card .card-body{max-height:var(--bslib-card-body-max-height, none)}.bslib-card.bslib-full-screen>.card-body{max-height:var(--bslib-card-body-max-height-full-screen, none)}.bslib-card .card-header .form-group{margin-bottom:0}.bslib-card .card-header .selectize-control{margin-bottom:0}.bslib-card .card-header .selectize-control .item{margin-right:1.15rem}.bslib-card .card-footer{margin-top:auto}.bslib-card .bslib-card-title{padding-left:var(--bs-card-spacer-x, 1rem);padding-right:var(--bs-card-spacer-x, 1rem)}.bslib-card .bslib-navs-card-title{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center}.bslib-card .bslib-navs-card-title .nav{margin-left:auto}.bslib-card .tab-content>.tab-pane.html-fill-container{display:none}.bslib-card .tab-content>.active.html-fill-container{display:flex}.bslib-card .tab-content.html-fill-container{padding:0}.bslib-full-screen{position:fixed;inset:3.5rem 1rem 1rem;height:auto !important;width:auto !important;z-index:1070}.bslib-full-screen-enter{display:none;position:absolute;bottom:1px;right:3px;margin:0.5rem;padding:0.55rem !important;font-size:.8rem;cursor:pointer;opacity:.6;color:rgba(var(--bs-body-bg-rgb), 1);z-index:1070}.bslib-full-screen-enter:hover{opacity:1}.card:hover:not(.bslib-full-screen) .bslib-full-screen-enter{display:block}@media (max-width: 575.98px){.bslib-full-screen-enter{display:none !important}}.bslib-full-screen-exit{position:relative;top:1.35rem;font-size:0.9rem;cursor:pointer;text-decoration:none;display:flex;float:right;margin-right:2.15rem;align-items:center;color:rgba(var(--bs-body-bg-rgb), 0.8)}.bslib-full-screen-exit:hover{color:rgba(var(--bs-body-bg-rgb), 1)}.bslib-full-screen-exit svg{margin-left:0.5rem;font-size:1.5rem}#bslib-full-screen-overlay{position:fixed;inset:0;background-color:rgba(var(--bs-body-color-rgb), 0.6);z-index:1069}.bslib-value-box .value-box-grid{grid-template-columns:var(--bslib-value-box-widths)}.bslib-value-box .value-box-showcase{align-items:center;justify-content:center;margin-top:auto;margin-bottom:auto;padding:1rem;max-height:var(--bslib-value-box-max-height)}.bslib-value-box .value-box-showcase .bi,.bslib-value-box .value-box-showcase .fa{opacity:.85}.bslib-value-box .value-box-showcase .bi{font-size:5rem}.bslib-value-box .value-box-showcase .fa{font-size:4rem}.bslib-value-box .value-box-showcase.showcase-top-right{align-items:end;padding-left:0;padding-bottom:0}.bslib-value-box .value-box-area{justify-content:center;padding:1.5rem 1rem;font-size:.9rem;font-weight:500}.bslib-value-box .value-box-area *{color:inherit;margin-bottom:0;margin-top:0}.bslib-value-box .value-box-area.border-start{border-color:rgba(222,226,230,0.3) !important}.bslib-value-box.bslib-full-screen .value-box-grid{grid-template-columns:var(--bslib-value-box-widths-full-screen)}.bslib-value-box.bslib-full-screen .value-box-showcase{max-height:var(--bslib-value-box-max-height-full-screen)}.bslib-value-box:not(.bslib-full-screen) .value-box-showcase.showcase-top-right{margin-top:0}@media (max-width: 575.98px){.bslib-value-box .value-box-grid{grid-template-columns:var(--bslib-value-box-widths) !important}}.bslib-column-wrap{display:grid !important;gap:1rem;height:var(--bslib-column-wrap-height)}.bslib-column-wrap .card{margin-bottom:0}@media (max-width: 575.98px){.bslib-column-wrap{grid-template-columns:1fr !important;height:var(--bslib-column-wrap-height-mobile)}}@media (min-width: 576px){.nav:not(.nav-hidden){display:flex !important;display:-webkit-flex !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column){float:none !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.bslib-nav-spacer{margin-left:auto !important}.nav:not(.nav-hidden):not(.nav-stacked):not(.flex-column)>.form-inline{margin-top:auto;margin-bottom:auto}.nav:not(.nav-hidden).nav-stacked{flex-direction:column;-webkit-flex-direction:column;height:100%}.nav:not(.nav-hidden).nav-stacked>.bslib-nav-spacer{margin-top:auto !important}}.row>main{max-width:50rem}@media (min-width: 1200px) and (max-width: 1399.98px){.container .row{justify-content:space-evenly}}@media (min-width: 1400px){body{font-size:18px}.col-md-3{margin-left:5rem}}.navbar-nav .nav-item>.nav-link{border-radius:.375rem;padding:0.5rem}.navbar>.container{align-items:baseline;-webkit-align-items:baseline}.navbar-light .navbar-nav .active>.nav-link{background:#e9ecef;color:#212529}.navbar-dark .navbar-nav .active>.nav-link{background:#343a40;color:#fff}.navbar-dark .navbar-nav .nav-item>.nav-link:hover,.navbar-light .navbar-nav .nav-item>.nav-link:hover{background:rgba(13,110,253,0.1)}.navbar-dark input[type="search"]{border-color:#6c757d;background-color:#212529;color:#e9ecef}input[type="search"]{border-color:#dee2e6;width:12rem}.headroom{will-change:transform;transition:transform 400ms ease}.headroom--pinned{transform:translateY(0%)}.headroom--unpinned{transform:translateY(-100%)}.row>main,.row>aside{margin-top:56px}html,body{scroll-padding:56px}@media (min-width: 576px){#toc{position:sticky;top:56px;max-height:calc(100vh - 56px - 1rem);overflow-y:auto}}aside h2,aside .h2{margin-top:1.5rem;font-size:1.25rem}aside .roles{color:#4d5154}aside .list-unstyled li{margin-bottom:0.5rem}aside .dev-status .list-unstyled li{margin-bottom:0.1rem}@media (max-width: 575.98px){aside{margin:0.5rem;width:calc(100vw - 1rem);background-color:#f8f9fa;border-color:#dee2e6;border-radius:.375rem}aside h2:first-child,aside .h2:first-child{margin-top:1rem}}body{position:relative}#toc>.nav{margin-bottom:1rem}#toc>.nav a.nav-link{color:inherit;padding:0.25rem 0.5rem;margin-bottom:2px;border-radius:.375rem;border:0 solid #dee2e6}#toc>.nav a.nav-link:hover,#toc>.nav a.nav-link:focus{background-color:rgba(13,110,253,0.1);color:#000}#toc>.nav a.nav-link.active{background-color:#e9e9ea;color:#000}#toc>.nav .nav a.nav-link{margin-left:0.5rem}#toc>.nav .nav{display:none !important}#toc>.nav a.active+.nav{display:flex !important}footer{margin:1rem 0 1rem 0;font-size:.875em;border-top:1px solid #dee2e6;background:rgba(0,0,0,0);color:#4d5154;display:flex;column-gap:1rem}@media (max-width: 575.98px){footer{flex-direction:column}}@media (min-width: 576px){footer .pkgdown-footer-right{text-align:right}}footer div{flex:1 1 auto}html,body{height:100%}body>.container{min-height:100%;display:flex;flex-direction:column}body>.container .row{flex:1 0 auto}::selection{background-color:#cfe2ff}main img{max-width:100%;height:auto}main table{display:block;overflow:auto}body{font-display:fallback}.page-header{border-bottom:1px solid #dee2e6;padding-bottom:0.5rem;margin-bottom:0.5rem;margin-top:1.5rem}dd{margin-left:1.5rem}summary{margin-bottom:0.5rem}details{margin-bottom:1rem}.html-widget{margin-bottom:1rem}a.anchor{display:none;margin-left:5px;width:Min(0.9em, 20px);height:Min(0.9em, 20px);background-image:url(../../link.svg);background-repeat:no-repeat;background-size:Min(0.9em, 20px) Min(0.9em, 20px);background-position:center center}h2:hover .anchor,.h2:hover .anchor,h3:hover .anchor,.h3:hover .anchor,h4:hover .anchor,.h4:hover .anchor,h5:hover .anchor,.h5:hover .anchor,h6:hover .anchor,.h6:hover .anchor{display:inline-block}.orcid{color:#A6CE39;margin-right:4px}.fab{font-family:"Font Awesome 5 Brands" !important}img.logo{float:right;width:100px;margin-left:30px}.template-home img.logo{width:120px}@media (max-width: 575.98px){img.logo{width:80px}}@media (min-width: 576px){.page-header{min-height:88px}.template-home .page-header{min-height:104px}}.line-block{margin-bottom:1rem}.template-reference-index dt{font-weight:normal}.template-reference-index code{word-wrap:normal}.icon{float:right}.icon img{width:40px}a.footnote-ref{cursor:pointer}.popover{width:Min(100vw, 32rem);font-size:0.9rem;box-shadow:4px 4px 8px rgba(0,0,0,0.3)}.popover-body{padding:0.75rem}.popover-body p:last-child{margin-bottom:0}.tab-content{padding:1rem}.tabset-pills .tab-content{border:solid 1px #e5e5e5}.tab-content{display:flex}.tab-content>.tab-pane{display:block;visibility:hidden;margin-right:-100%;width:100%}.tab-content>.active{visibility:visible}div.csl-entry{clear:both}.hanging-indent div.csl-entry{margin-left:2em;text-indent:-2em}div.csl-left-margin{min-width:2em;float:left}div.csl-right-inline{margin-left:2em;padding-left:1em}div.csl-indent{margin-left:2em}pre,pre code{word-wrap:normal}code{overflow-wrap:break-word}.hasCopyButton{position:relative}.btn-copy-ex{position:absolute;right:5px;top:5px;visibility:hidden}.hasCopyButton:hover button.btn-copy-ex{visibility:visible}pre{padding:1rem 0.5rem}@media (max-width: 575.98px){div>div>pre{margin-left:calc(var(--bs-gutter-x) * -.5);margin-right:calc(var(--bs-gutter-x) * -.5);border-radius:0;padding-left:1rem;padding-right:1rem}.btn-copy-ex{right:calc(var(--bs-gutter-x) * -.5 + 5px)}}code a:any-link{color:inherit;text-decoration-color:#6c757d}pre code{padding:0;background:transparent}pre code .error,pre code .warning{font-weight:bolder}pre .img img,pre .r-plt img{margin:5px 0;background-color:#fff}@media print{code a:link:after,code a:visited:after{content:""}}a.sourceLine:hover{text-decoration:none}mark,.mark{background:linear-gradient(-100deg, rgba(13,202,240,0.2), rgba(13,202,240,0.7) 95%, rgba(13,202,240,0.1))}.algolia-autocomplete .aa-hint{color:#212529}.algolia-autocomplete .aa-dropdown-menu{width:Max(100%, 20rem);background-color:#fff;border:1px solid var(--bs-border-color);margin-top:2px;max-height:50vh;overflow-y:auto}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion{cursor:pointer;padding:5px 4px;border-bottom:1px #e9ecef solid;font-size:0.9rem;color:#212529}.search-details{font-size:0.9rem;color:#0d6efd;display:inline;font-weight:bolder}.algolia-autocomplete .aa-dropdown-menu .aa-suggestion.aa-cursor{background-color:#e7f1ff}pre{background-color:#f1f3f5}pre code{color:#003B4F}pre code span.al{color:#AD0000}pre code span.an{color:#5E5E5E}pre code span.at{color:#657422}pre code span.bn{color:#AD0000}pre code span.cf{color:#003B4F}pre code span.ch{color:#20794D}pre code span.cn{color:#8f5902}pre code span.co{color:#5E5E5E}pre code span.cv{color:#5E5E5E;font-style:italic}pre code span.do{color:#5E5E5E;font-style:italic}pre code span.dt{color:#AD0000}pre code span.dv{color:#AD0000}pre code span.er{color:#AD0000}pre code span.fl{color:#AD0000}pre code span.fu{color:#4758AB}pre code span.im{color:#00769E}pre code span.in{color:#5E5E5E}pre code span.kw{color:#003B4F}pre code span.op{color:#5E5E5E}pre code span.ot{color:#003B4F}pre code span.pp{color:#AD0000}pre code span.sc{color:#5E5E5E}pre code span.ss{color:#20794D}pre code span.st{color:#20794D}pre code span.va{color:#111111}pre code span.vs{color:#20794D}pre code span.wa{color:#5E5E5E;font-style:italic} diff --git a/docs/dev/pkgdown.yml b/docs/dev/pkgdown.yml index 3f21f45c..e26a5b44 100644 --- a/docs/dev/pkgdown.yml +++ b/docs/dev/pkgdown.yml @@ -7,7 +7,7 @@ articles: parallel: parallel.html preprocess: preprocess.html tuning: tuning.html -last_built: 2023-01-20T20:51Z +last_built: 2023-01-27T17:56Z urls: reference: http://www.schlosslab.org/mikropml/reference article: http://www.schlosslab.org/mikropml/articles diff --git a/docs/dev/reference/bounds.html b/docs/dev/reference/bounds.html new file mode 100644 index 00000000..191ef110 --- /dev/null +++ b/docs/dev/reference/bounds.html @@ -0,0 +1,124 @@ + +Get the lower and upper bounds for an empirical confidence interval — lower_bound • mikropml + Skip to contents + + +
    +
    +
    + +
    +

    Get the lower and upper bounds for an empirical confidence interval

    +
    + +
    +

    Usage

    +
    lower_bound(x, alpha)
    +
    +upper_bound(x, alpha)
    +
    + +
    +

    Arguments

    +
    x
    +

    vector of test statistics, such as from permutation tests or bootstraps

    + + +
    alpha
    +

    alpha level for the confidence interval +(default: 0.05 to obtain a 95% confidence interval)

    + +
    +
    +

    Value

    + + +

    the value of the lower or upper bound for the confidence interval

    +
    +
    +

    Functions

    + +
    • lower_bound(): Get the lower bound for an empirical confidence interval

    • +
    • upper_bound(): Get the upper bound for an empirical confidence interval

    • +
    + +
    +

    Examples

    +
    if (FALSE) {
    +x <- 1:10000
    +lower_bound(x, 0.05)
    +upper_bound(x, 0.05)
    +}
    +
    +
    +
    + + +
    + + + + + + + diff --git a/docs/dev/reference/find_permuted_perf_metric.html b/docs/dev/reference/find_permuted_perf_metric.html new file mode 100644 index 00000000..f9099445 --- /dev/null +++ b/docs/dev/reference/find_permuted_perf_metric.html @@ -0,0 +1,176 @@ + +Get permuted performance metric difference for a single feature +(or group of features) — find_permuted_perf_metric • mikropml + Skip to contents + + +
    +
    +
    + +
    +

    Requires the future.apply package

    +
    + +
    +

    Usage

    +
    find_permuted_perf_metric(
    +  test_data,
    +  trained_model,
    +  outcome_colname,
    +  perf_metric_function,
    +  perf_metric_name,
    +  class_probs,
    +  feat,
    +  test_perf_value,
    +  nperms = 100,
    +  alpha = 0.05,
    +  progbar = NULL
    +)
    +
    + +
    +

    Arguments

    +
    test_data
    +

    Held out test data: dataframe of outcome and features.

    + + +
    trained_model
    +

    Trained model from caret::train().

    + + +
    outcome_colname
    +

    Column name as a string of the outcome variable +(default NULL; the first column will be chosen automatically).

    + + +
    perf_metric_function
    +

    Function to calculate the performance metric to +be used for cross-validation and test performance. Some functions are +provided by caret (see caret::defaultSummary()). +Defaults: binary classification = twoClassSummary, +multi-class classification = multiClassSummary, +regression = defaultSummary.

    + + +
    perf_metric_name
    +

    The column name from the output of the function +provided to perf_metric_function that is to be used as the performance metric. +Defaults: binary classification = "ROC", +multi-class classification = "logLoss", +regression = "RMSE".

    + + +
    class_probs
    +

    Whether to use class probabilities (TRUE for categorical outcomes, FALSE for numeric outcomes).

    + + +
    feat
    +

    feature or group of correlated features to permute.

    + + +
    test_perf_value
    +

    value of the true performance metric on the held-out +test data.

    + + +
    nperms
    +

    number of permutations to perform (default: 100).

    + + +
    alpha
    +

    alpha level for the confidence interval +(default: 0.05 to obtain a 95% confidence interval)

    + + +
    progbar
    +

    optional progress bar (default: NULL)

    + +
    +
    +

    Value

    + + +

    vector of mean permuted performance and mean difference between test +and permuted performance (test minus permuted performance)

    +
    +
    +

    Author

    +

    Begüm Topçuoğlu, topcuoglu.begum@gmail.com

    +

    Zena Lapp, zenalapp@umich.edu

    +

    Kelly Sovacool, sovacool@umich.edu

    +
    + +
    + + +
    + + + + + + + diff --git a/docs/dev/reference/get_perf_metric_fn.html b/docs/dev/reference/get_perf_metric_fn.html index 225edfc2..2c159a6e 100644 --- a/docs/dev/reference/get_perf_metric_fn.html +++ b/docs/dev/reference/get_perf_metric_fn.html @@ -93,7 +93,7 @@

    Examples#> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, "pred"], data[, "obs"]) #> } -#> <bytecode: 0x7fba6bcf27c8> +#> <bytecode: 0x7fa6eefdbfe8> #> <environment: namespace:caret> get_perf_metric_fn("binary") #> function (data, lev = NULL, model = NULL) @@ -151,7 +151,7 @@

    Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fba6db4dec0> +#> <bytecode: 0x7fa6d6ae6668> #> <environment: namespace:caret> get_perf_metric_fn("multiclass") #> function (data, lev = NULL, model = NULL) @@ -209,7 +209,7 @@

    Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fba6db4dec0> +#> <bytecode: 0x7fa6d6ae6668> #> <environment: namespace:caret> diff --git a/docs/dev/search.json b/docs/dev/search.json index 14a1362c..ace2ae2b 100644 --- a/docs/dev/search.json +++ b/docs/dev/search.json @@ -1 +1 @@ -[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. names: feature permuted. method: ML method used. perf_metric_name: performance metric used. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together names column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue names method perf_metric_name #> 1 0.5459125 0.0003375 0.51485149 Otu00001 rf AUC #> 2 0.5682625 -0.0220125 0.73267327 Otu00002 rf AUC #> 3 0.5482875 -0.0020375 0.56435644 Otu00003 rf AUC #> 4 0.6314375 -0.0851875 1.00000000 Otu00004 rf AUC #> 5 0.4991750 0.0470750 0.08910891 Otu00005 rf AUC #> 6 0.5364875 0.0097625 0.28712871 Otu00006 rf AUC #> 7 0.5382875 0.0079625 0.39603960 Otu00007 rf AUC #> 8 0.5160500 0.0302000 0.09900990 Otu00008 rf AUC #> 9 0.5293375 0.0169125 0.17821782 Otu00009 rf AUC #> 10 0.4976500 0.0486000 0.12871287 Otu00010 rf AUC #> seed #> 1 2019 #> 2 2019 #> 3 2019 #> 4 2019 #> 5 2019 #> 6 2019 #> 7 2019 #> 8 2019 #> 9 2019 #> 10 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue #> 1 0.4941842 0.1531842 0.05940594 #> names #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"library(ggplot2) perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features. can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, names) %>% summarize(median_diff = median(perf_metric_diff)) %>% filter(median_diff > 0) %>% slice_max(order_by = median_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"names\")) %>% mutate(features = factor(names, levels = rev(unique(top_feats$names)))) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + theme_bw()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: doFuture, foreach, future, future.apply, ggplot2, knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; names) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] +[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. names: feature permuted. method: ML method used. perf_metric_name: performance metric used. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together names column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue lower upper names method #> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf #> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf #> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf #> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf #> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf #> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf #> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf #> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf #> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf #> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf #> perf_metric_name seed #> 1 AUC 2019 #> 2 AUC 2019 #> 3 AUC 2019 #> 4 AUC 2019 #> 5 AUC 2019 #> 6 AUC 2019 #> 7 AUC 2019 #> 8 AUC 2019 #> 9 AUC 2019 #> 10 AUC 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> names #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"library(ggplot2) perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features. can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, names) %>% summarize(median_diff = median(perf_metric_diff)) %>% filter(median_diff > 0) %>% slice_max(order_by = median_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"names\")) %>% mutate(features = factor(names, levels = rev(unique(top_feats$names)))) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + theme_bw()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: doFuture, foreach, future, future.apply, ggplot2, knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"Get lower upper bounds empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"lower_bound(x, alpha) upper_bound(x, alpha)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"x vector test statistics, permutation tests bootstraps alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"value lower upper bound confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"lower_bound(): Get lower bound empirical confidence interval upper_bound(): Get upper bound empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"if (FALSE) { x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":null,"dir":"Reference","previous_headings":"","what":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Requires future.apply package","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"","code":"find_permuted_perf_metric( test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, nperms = 100, alpha = 0.05, progbar = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). feat feature group correlated features permute. test_perf_value value true performance metric held-test data. nperms number permutations perform (default: 100). alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval) progbar optional progress bar (default: NULL)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"vector mean permuted performance mean difference test permuted performance (test minus permuted performance)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; names) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] diff --git a/docs/dev/sitemap.xml b/docs/dev/sitemap.xml index 4e2ce259..cd16e92f 100644 --- a/docs/dev/sitemap.xml +++ b/docs/dev/sitemap.xml @@ -45,6 +45,9 @@ http://www.schlosslab.org/mikropml/dev/pull_request_template.html + + http://www.schlosslab.org/mikropml/dev/reference/bounds.html + http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html @@ -63,6 +66,9 @@ http://www.schlosslab.org/mikropml/dev/reference/define_cv.html + + http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html + http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html From f7b3d359599f024a8ce0b0dee99c6c10d3d79f11 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 14:34:10 -0500 Subject: [PATCH 11/27] Silence caret::train() warning about setting rownames on a tibble --- R/run_ml.R | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/R/run_ml.R b/R/run_ml.R index ffb23013..72c96f5b 100644 --- a/R/run_ml.R +++ b/R/run_ml.R @@ -174,7 +174,11 @@ run_ml <- check_cat_feats(dataset %>% dplyr::select(-outcome_colname)) } - dataset <- randomize_feature_order(dataset, outcome_colname) + dataset <- dataset %>% + randomize_feature_order(outcome_colname) %>% + # convert tibble to dataframe to silence warning from caret::train(): + # "Warning: Setting row names on a tibble is deprecated.." + as.data.frame() outcomes_vctr <- dataset %>% dplyr::pull(outcome_colname) From f68d086f1f99d1202e2bce4cdfbb26828dd24234 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 14:37:49 -0500 Subject: [PATCH 12/27] Use `all_of(var)` instead of `.data$var` To fix this warning: Use of .data in tidyselect expressions was deprecated in tidyselect 1.2.0. i Please use `all_of(var)` (or `any_of(var)`) instead of `.data[[var]]` --- R/performance.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/performance.R b/R/performance.R index bd5410fb..bbeadb31 100644 --- a/R/performance.R +++ b/R/performance.R @@ -201,7 +201,7 @@ get_performance_tbl <- function(trained_model, )) %>% dplyr::rename_with( function(x) paste0("cv_metric_", perf_metric_name), - .data$cv_metric + all_of("cv_metric") ) %>% change_to_num()) } From 26b2104ad859af4ab8a33bc83e18fdeb5dd7c686 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 14:43:51 -0500 Subject: [PATCH 13/27] Rename `names` column to `feat` for feat imp Because `names()` is a base R function already, and it's not obvious that `names` referred to the feature or group of correlated features. --- R/feature_importance.R | 4 ++-- tests/testthat/test-feature_importance.R | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/R/feature_importance.R b/R/feature_importance.R index 6ced9ac9..c34f3bbe 100644 --- a/R/feature_importance.R +++ b/R/feature_importance.R @@ -13,7 +13,7 @@ #' grouped together based on `corr_thresh`. #' #' @return Data frame with performance metrics for when each feature (or group -#' of correlated features; `names`) is permuted (`perf_metric`), differences +#' of correlated features; `feat`) is permuted (`perf_metric`), differences #' between the actual test performance metric on and the permuted performance #' metric (`perf_metric_diff`; test minus permuted performance), and the #' p-value (`pvalue`: the probability of obtaining the actual performance @@ -173,7 +173,7 @@ get_feature_importance <- function(trained_model, test_data, return(as.data.frame(imps) %>% dplyr::mutate( - names = factor(groups), + feat = factor(groups), method = method, perf_metric_name = perf_metric_name, seed = seed diff --git a/tests/testthat/test-feature_importance.R b/tests/testthat/test-feature_importance.R index bb346c52..a13550b0 100644 --- a/tests/testthat/test-feature_importance.R +++ b/tests/testthat/test-feature_importance.R @@ -102,7 +102,7 @@ test_that("feature importances are correct", { upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, 0.660526315789474, 0.652631578947368, 0.721052631578947), - names = structure(1:10, levels = c("Otu00001", + feat = structure(1:10, levels = c("Otu00001", "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", "Otu00008", "Otu00009", "Otu00010"), class = "factor"), method = c("glmnet", @@ -151,7 +151,7 @@ test_that("feature importances are correct when tibbles used", { upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, 0.660526315789474, 0.652631578947368, 0.721052631578947), - names = structure(1:10, levels = c("Otu00001", + feat = structure(1:10, levels = c("Otu00001", "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", "Otu00008", "Otu00009", "Otu00010"), class = "factor"), method = c("glmnet", @@ -210,7 +210,7 @@ test_that("custom grouped features works", { 0.657894736842105, 0.671052631578947, 0.652631578947368, 0.702631578947368), - names = structure(1:8, + feat = structure(1:8, levels = c("Otu00001", "Otu00002|Otu00003|Otu00005", "Otu00004", "Otu00006", From aa2aa9134faabded102c1932d6b39c4baf9aa0ec Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 14:45:12 -0500 Subject: [PATCH 14/27] Rerun feature importance with new column name --- data/otu_mini_bin_results_rf.rda | Bin 96774 -> 96756 bytes data/otu_mini_cont_results_glmnet.rda | Bin 39442 -> 39468 bytes data/otu_mini_multi_results_glmnet.rda | Bin 165520 -> 165530 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/data/otu_mini_bin_results_rf.rda b/data/otu_mini_bin_results_rf.rda index 326b76402310fa21226c00a53538f0c28097d6e9..5f0cf9e4d35aa8d3c5490563a475244d3085a7bf 100644 GIT binary patch literal 96756 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�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▹$D5vk(kYtGRgGm6qKTo3L*vll_0n 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

    U`&ea&$*7!$?8- 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 diff --git a/data/otu_mini_cont_results_glmnet.rda b/data/otu_mini_cont_results_glmnet.rda index 4cf7367c0619e19678c906f850f28f1716f02400..e33bff8bc3ed26f97917300718ddc9039068ad6b 100644 GIT binary patch literal 39468 zcmbrFQ*bU^u%=_%wv!#(_+s0(v%?+Rwr$(CZQHh!`OmqYs=1iAx_VWuzUiB;wVtkS zVJ!0B{_TqDS`9Bpf>^)bfz1|2yiGbp6J}!qJG|ypo{wa#1 zwqR^t-gZ^vHcz&fv_gBj*;MLt-NV+GZbx&o0#TO=;^X}R=|-qElmfyWzU_YP>_hZ; z86+;v@40zx{Iig0Up#PwxkA+?E2%eKVgLjL+=s$G=X}KoOaqi@5`?kdh}P(OKIz%m ziFKu0kvw_HceUB+x$S)GwkvYYzw2GAYqxRPwcVWS*1hv$@7cNQ(sOft-7?#=v+3DG zS98Kjh0DTYpC6+}fm1D4vfXO$SZ+5?U<0k0VzO&Kt8S3WQ zlS^6uTIH!-Hzrb8TdP+_{j}Y>*}=c^YTwp9GGTA$Wb(9WYwD)W zl~f3SGgsQVRcj1feRFJg>zUHAlC|2db|YEcYAam1NqyZixKi`k?N%>%3pCrUY*RU3 ztUmY3I!H|n1Y*R*NI?7z__$@ z&zMHKG$t=A9+WAs42+GFNqrD2mVr%~^vuV`CofczI4{2_xzC(aMwS2pn4?GsW=x03 zprEj1gjyO&6G2L6M3u=DDhaZcmlzcGfcZzvn*$iIC{4#PD!pKlWnEO+p-5+zVa+M6 zu-uzlFq4IcC#7H$f{};=j9C^9^T9#$ilr$plH`_@D6iuv&tGIJFR_;v-BXq)T3*D; z%A-mqE|}%V9~fEv%gDgtExn+~U`Kl&1aKe+EiXDZ7D4& zoba&7$-v1lWK3tIz!5`Ev`ANeR7Mw&@{vszP-bOCE|FCbB?|z8S`@?z6a<0}8yb%< zKQ9j#EE?(ste9gL32p@9x?)Bz5Bgc2785el+e! zVLKEA$cDlp5@Ogf+K1}Vk)KCX7#;$11cSkmg3*$)jJ6EV!x4*zhzmz5!a>Wk1PKNq zM_unDP6%^Ic!Ojx%j4?^Y5_B&FuT|L6|^$R3DKT$n<4%F(EQA_H|50Gg#YOgvX6zKFGP%^1ct^ zCIs4etS^w@?bq@KF7P9FGEIg;I8svY6E3}pxh`Ma%0P0oPleS)A2lb7iej6`4GL&- zEgXi_53N1&vPqY%Rg^`Gc}`6Pv|*>B_XOfF^JUlm&5?p<5_?WpR0LBI8pj?E4^l+? z`{;0QhufL(kA0bK(>&6;vfzNYntd?57CC0+`N1AGN)Y68e0AT_YPov?3QGs&y$Z#G!lU`w~js<7e# zg(p=NS9ZDJgH=2Ia`#VL4#`(hH&DrsD4N?*ca3@gWbzWjo%N8be({ZP-CPL2@ejR2{xDp-ZueMcsUz zbeajNf!|++_<5_^btyEftQiT*)$pZ0wqWC#7dPA%oAH;I_RnEUln%1+!si#Z zyrdU57}^`4XrvsVg6nA{gT$WkMH`&6)NqpXv&kf_D*j1WlP-DJ@X@(nE@<8Naj<`6n4e*oLP@*@#exkx7lmq$Dbdwq8G*xK_HBA ztBz|2$LX4IDR#|kD$%dU3>Cu=g2=?x=KCSKTjf6j z(wUU9*7ZI_ij&TdQ61us{15!uXq@(#!P#L#6|4v}ATvRyI`r_4R*`3BxY*FN*XO24 z%p`&)hWd7xMN&>@pxAPA!a(Ax4@pUH4cuSxa2xscm`}`*@v?pr?OZ&y$H^$l0Mu1Y_g0Km2PU4| zN1b1mMReR_l})CWr`xU-QDxB;!9|4>btVaU(&S-tEu%GMT-15Q0OD{1Tq)=(i$X%O znDtX9PfoI;Dt;`&MF0{cNt=>UAlEnJ(=Nn9Uh>KSji&gZ2R@lO@r5M>)+nfuCjTid zCE%9ExlYBir7a}9ASgeHaJHr^EjPzQ*!(q~Ab6bC`t0>@@i~Y6GndFya$gXj?Us1{ zxWFoYA^)x_VSsyko3$wLVPVC5*lJGTC7b^zBOhWl8u|q}($i@5utL6CS{xNfGPtAx zRS1!P02YeG#VEK6|2Q~gJjWTCA6Xcc_hR9OMJ-7nKcO0%E;eZc>!(wyl|dC1a9Vb) z{H8}m6r}3#dDe4j8 zH;A*(;p^z?^~?eu7Fq4!W&D{#gcN01Y2GB&IJuSeDfs~sI6=kmu%6;ARZ6T#F_T^tD2Pul zcLq{2Lhnz62xs6S!4Zfa++dLFEYS*X4TuEuoQgC+j-;S6~t z<}77sqAn~Fa9r#lmWT2>_cYigtHLP%vr-8o^z0NC9OxCaaC0aCMmSe;8qtg&IgqFv z_&N#;0p>BA`_js>c;+f0U@L6|Tp8+P*zr_8x1aujpWU-Jo`{F1(@lH)@!6p&rMTGq zPOYCuNJx3*y(27JTnrXFvtZM>9ixN4mASNbZNZV}AMGk?IGea4ZDxr&1NDW}io(~! z!}7v&Wr>uWTyj=5O)G-4@1Gim;`GwM7Pr4#TBm8VR^K^2`#8*}lYD>sBxo62pbSfMgvQdNz(fBvlQ++4OzTcy^%*8ZX)cXnRF;^#U&`CUYx?Rs=i ze&t}Gk`4~I=rI4*U~ zcr%pzK92r;^k^e4qsxyjJVxDp(bDn|;9$+RIyH;DHkUQLewX+3P@Z1%OUsumT2^>3 ztE8|duP}Dt-?miD=fXa)K5jQYuk8sS6vR+@uCLba>Z97ewSdtK z9xB6WN*Lj-v$mI;{{C0R}!EWZl8E(J>@)d;Ko zUl9jib-y@`wR3JYljXsIY7|)lrnZA9ul7Bx69e8vsEIA_+Bo%bCWg4Unt5v=5(XY| zC~${x{{#ba2GXk2uiVF_z4R#DE6qs(-p|n^Qfd~y^h#O>%6UV<#jU=9qCq1P9mzT) ze(WCe2Mw88ktEl}aNP9f)!5{W*Y|i!*O0BwaoFt_`D(aYS|AErP%O?GY3^eyKx51i zCsd6lL)eersSXdn#cYHMk+YBDgPhJxA-TEg5D;1Nk#KJC5JYsqug&nYMgO#7dh))A z)ZoC6DDpt@@qWo)?-#cogkb0mqwc$DWCOJVH84N!0zZe-@3zn_9hlb=r$}SSc`K#1 zIDfq%eb~_wx*JN8s2hET)QsSzQ)&F=K!Lh*sg$&f=$=AGr{M4RUsEb^u-*L}67`T= z(hD>30c%|3{u^9M`Z#~jmVxFtTs`^q@3q%$`=hsKaMc7em|ZQ(sK`?DyF#QDtqiRb z_N-XQK&z+m&LF6`pR!~)dP?X>jV92ao~nRn-)u$B@lQ6F->_NNHKc3o{RfsW{hGJw z56_@CMnmu?Vl=E*KOzIPk4O&X4Dz}f6ZT$HxEsDrFuYIyJuz}_>ygMY3{V_uz2U%% z-^KZ*A+nP}j0HQ>A?@Z=+PBV}OIYuvm-&I|*Wr4j;aKO_k;VUL&PkT8YGIPDVQQI) zhwC)Q{WR$DKg5$|{X2^1I58+q*Dy&}wa7KKa^SS{+QTt%ZknRq{krS@vT57$f3^8) z>;H}Dx~%F-0d!qb0X7>j)gpvQPq*jRx3Uc=U{wlc_dXs&9(1%`HK0QtcG?3+t_J0) z@_b%5k-2}DIEr0*0diwOz^TgNuTRuC;iO!dLhV5nR zyN}Lm1fei@4ZK9WM|=p{TWvsphq+AB2cYovpI4}fk2U2X(_?m9Da}tqc{eE;$n6I< zPrVUQs_prVeWQQgGcpU-pPRM6W*nfv1LUWe-*RckoE%S}ebYG8K#oK~ecOwW6RQB} zkVw$;xe8PAf>a+JYAThE(M3(I*mLLfo&KH|Su=oP@UG*2@nihb`CdyhSQY{nDx6~B zg^A|3y7kafP&1b1ux(aR{9O3b&nszDc6k@LkALgyD06FTT3fd%AA|>HI?;zKuIa=& zP1Q)Xf1UecQ*^SQIR@67+Q3Aot{p@D^6CfbT<6*mTe>#$ZTe}aRqYo9Y+zZD4Y`7m z=>!^8Ev*5xs6mJ{2qk9oFXJaSmlw*RotDyh(AV^ctNo9iu>&5*%6<~fb?q!OZ+*Ho zSe#U`*VIxEx>&+-a@>F`s>#!>V{qL!wbKv{j3YWUZYh#|S?n@mTl1U&n zn3U!O1fPRGAL2}m%!+28o6dPsX+6C-hG7#4*?y=0NY67@-+x?a(Y6!mS) zYSJQ}Md@wuM3zVdrK;IReFpm}tuuk^*p%HxQvE+>F8>;s`@zWN=CpJd6uL*ia-xpN zfI$37u4S$wggf>bq^OiDCd|;e+ZFS-+~Ve?TxDS4(-8q>ayqxf8{AD=7@Q6VZrdna zk`%j@u%lm>+$eUxt{u6oX13#hpI{a#Q;n9a(Pd6;u{r7pT6JhCf`*A|@LspZ`ktZ5 zQN%z2jehOy3{8_)8H-*u=P%^RBbcX=*)h%sx<#D%itQ)Uv@XtADazPvQ8F=Ai&0@N z?K+H1va5)ZEH;9xb?L_s>F!r9`MEp(pcgK#13g^wP6I{B$_NUfuHAy#+BohmN+`o% zisvzCVYh`i0B}ISge5$bq7_T$^F+-*Q^$wzG;8PSgWdj)9^QuDekzR~?zHymxGG=6 zk8X#fwj^K^>HnBiQh9nWqc5+nknu0X-OZKk0wHIk%RF{krkyDm&rc|=;HbBO^#BgQ%~jIT=$ZQi|I+qwdQR; zQPp9Wmd_~z63xX~mFr>7mHO5RNBS9D525p-`By+OJWK@cZNvC;3-h)4W(mv*A|l zR6+TkNjSoWdFuv)6gp569CV0E{v!DIF7wp`*vz}c4y1Nz^!W4MZq%>m^)*`2xV_Oq#=tx%F zU(n^3d&X~$n(%XdT6&MQAHH2b2;CW)>@!IBtyM>Bwgxu-zW7LN_H^{=1((&MAJ}+7 zrYS)qw;%=D5QC0wL|g1ew*?~=#&Chai6B~R!T+MV^o7TUZ4dfxMvYv?GxbbMn!R@3 z@X0>}t_~(w?vL5GC)YQz*5Cg?@5q`YrG(c;Vq=Q*yFIr!_|kM{_)+!s*pHy?%YIZi z+FBHs44j!E3-*;!`TG)ZlbC75LaRd&Kuk#lTEUO`A%XaR_%!hl44WuaS*&1~hjjn^ z$^{86lnWhG5TOzioz0~uYlBfImNzGqNTtF@u~Wq9-H6M);fkR8Uymu@^@|#DxK+w0 z^%17o!S#D~*hda;9Wa{6ptS{GkXuP4(^f-#sDC(n7qc6X!WHUHiWbRGkwm-5OD zuNPQ_J2r>i2z8IIGDMhD0OM+_TfB#X_i}{vC`Z;dF+q{YBz#%a|B&7z$~u4%AKmXC z)FaB0q3YS(!!*RG3V`~#pTjeB{1qW|y7Ve*8VCJ?j7p|_eNuQjb;#G>h@Qrq%v@sr2}gbn4!;y7bM-BXnhjG+b5!r$I`=m7IgOP`s$XJ<*EzhNbdLV=sZ9+2PTkwXxnzcr3o&!tbXX}3v@-d8TT9RJyysV3nOX!&9DfnV*XMj4HL$_GKm#pX&J@tFyKpF)jM<%8P=IetShl1nV!4ue1TPN{(hV6=_$|%xEE7 zQKXYx0=Y5xK#c^3k`XoD*}}|8IWxRv2P-?bL&vfaNyFqV?drFknkI?bT+xHY2WT?$ z>#%;1c~usRUBz3}MBa&dIWx3zhwXZRb0K}+tEj!74P7QAiEGc%0n8L>EjDC?^C+6# zB(C9nEQoexX`X#r=kWH2e#(dFI?RuJz_uIqRpf*0+7XH zyo;ZmC8A)%2f}l>%Y!!_aiqiA-mnYm=KKe|6!>5&#dmq{o@+aSPW0A+aVpV>lD4F3 zVt7d=l5SiVwg=79`{1!}i||B$_2G|JgZcE_SY6y2daz+qy8gQ>e?G+jNUdj)5a-9qq%t(3#LW08#Y-a=WM;wQ}5)hXU}c=TWjFIUS|&1mTu_y zW?KVJm#H+;%&B#rbsl}7xy6y5Kn@NlwAU}L4E*2txJV?ZdANM40-t*sT)r>PbtlX5 zW3*-YELG98xdXi`Xt2|yy?skK-I~VWU!SMBh)9xK+&~jRT^d1>oZzPNqnmfaz@!|* z8Lj7{e#**?16*BeX^Vjo;>h4?3Wr;$d9^t-JAx-MRb7qsYZ_`S9Y`Tn zQxP3U=~SO2Z8i7?9fwQX*hbx%7>t}Cvjml?lA%l<$q%|rleo&Mq_k>%lj=X;?sR;s zK;VX2gj*T1?T(Wx8K4O)nuJ-k^LkQS-LfhGK~;K9T4c=Z`&an!kBV`Bxron}g~x~# z^i;+vu9>PNnbgJhdQO|~`N9WdOi z>3+-Pclw^CJR+$yN~7jxE%vYKFjL%{4JgqJc%OL4huO$lq{*cn-4$q!j7M3?nQxpc zMz`OR?~*@Q8F}g1QOO5-T*EOm)`Rhrt9$g*wyY(lsuYgur5r_vQgUR&{Of9ol`v5l zcS??GEibp{lZv9d;ANE^#R2ye(?!e0+1uj)UL(an#=mRv^sEDOiptseoyCqFwtnj8 zx?9L3lZ+UDipdjithkJ)&u1ceowWu|!Mj>jnyvfsxQTWBk@j$%&|f3G6KzB@XXw9b zE7sNE0`I^7BnM1_hb1J1!9TvF_XyL2*%{3!H(w)YTSC+li0j49S6xni#VYoZ z?cazP%*K&{Y!TVBxlROqNN`#Ur^)KyLU?6$;5DJD|(@JtL zXlftU?JMm2w#&Je##pP;K_}cz(Uwj(a#7a3sE@M+H4wv?kG+Ae5hW5`>K~t#hAt8H zwH}rFe6v4AA`o^X(QHW3g!?K|&U|bBbHN_Kf5Ud}MjjW&0M7wTlP0J#v^y{v_Mu)* zr{B*GN>dotLr4v%yl49>h0BHcjhWOQNaKYp|3(lR=*@r4bo~nXW}BfJ7wgh^H00cs zcJZLXqN8K`*#vb(@KjLF*-HxgxHI^o=))aM!2iVP$8b3zP1LStFVHrtnPjDu4KQ7* z?#id~lEjp=P%oI1N7=|Fwr#6yZP)Vr%9TtU6up%k=*rL2y%D1K3btrK5_zqxJgjmR zaTy0K=+zqNFDH!iDBoo-l%MVANNlCI~Z~A;11|$r8DVD{6%oCrk=R;sB0^HiT0sePDESwIyTQTj``X& zpqg6l57I!XY@g2%w$+u<5d*4b?CyOZ(bjhIZ58R?vB#iUq8n`xZxZ@TM6Yh`lj%YE z2FXTL7W_x;l(Q(sVPfW07>99{PIIPMPhunO%UiZMZh>_!uCA%r4y=cYs!5AC~U9vu}IB4qq@FcPjA<{GlkCi%doRB!oxf8l%yaM$Mq6uKk#n zn_5AqVPvBpL&@EPQ@kI2`>%Iyy~Ru=InGTz`czL=WKvpTFzJ18aDQs1G<3y%PPNB}NSLk9SgY$q3wqG44Vx{X9V zBW(ICZ-&VGJ|Xf|SX_4MpVa4N`VZT#82n+vE#0mV8JTk6nX!J>LgPtuqRQMZc{C#x zD#X02!e1YC>nV~7OZi}+*@AbM$U8+?GbeTG@dThRFmf+)y4t{eT30PErK`yMzudz) z9c8e3YOh|F>AVk$=7>A?z4D(0$`E2Gb|^6=M6bB_p>j!vwkYsbf6TFX&4 zqT||;=O)fqhPJUrBcCR4gq^;^-=>lEOqPAeuE3XYMq!8*s2`ra{l+aH$hT;We;Z@S z++YVb13_OQ-s+tL#{#!dNHJg)Wr*>2SiH=>{1adhx80&uC2nF{W%-5Le*b9rhO0|1 zBJQyT)I}0*hTRMXekH(j5e%dmfz zf%Yg^14)X%b$3;`*$<}~m5UwO01d|-Adl#h)#lxC-}e-hFU~!u zUlT5nb|$E@?jf?u*KMhXiRQlkpC6%1<30TCKaESvsz0BoHquwAy998Di=NS78K)EB z_#2WB5?N->x%s|Mo#bD9-uG|NzdG#)Bn2)6#M{up^j5~*sT+!(fQEyq*lU*h-D$)h z#(yQL!TX3gKY1}lJ?UgWhrh^_X@ADMF|wLOLOp+&c45zf|M2zZr?Iubx0OY%$8BWs zp-vCs63>4R#NpGN%OKHXSIJ zaeXDHVsC@-6q)X@7dZLM&=jQ^)QLpN|B(427re(m-rvJHCAN!aJ5I7@4R&I9l1NB? z7V0;|k7$M)aayi#%X1Z^#aEn@F10^Q_A?=EPpx!JeoA$>BW_`vuU{-n^&>Xb;RzI-~L7J z7SKdYl6^o#*o~!2_&)Wt82MGMx+e2^8~k18rp(Ipmb~&`jdhgu%%>~a8~b4+bh>>L zaleenpTX+aPLuy*%@ACLxJ2f4=Iy?7V=oB(OOitis!{&0*G+9vt?Nw#OxA;h-N!RE zG)dEWJmaw2QF|KBF_YZkxsDfxQwB|O%)Mv zh*WVBkevkutAT^!$O1!YWRXq@Vtol%bMd|c3CCvpOVbyvUN5 zUk3Bkz-#-^e=ut6N)ZC-BPmmq^MlWKImuo6AV5iY-v2&~9#YMt-4-{d;#gao*H^FuinnmkP3aN}XhX3^q zL1O`rh{f=2UvL1>RBbW!MtR0&(t=|`xCE_%Xu}H&jopdn99Rw?oi9RNtjInLxil8( zx#RE+L}`Dp0mG9^`x6B_7TaWTyNFsSF8IS# zCm@s2n;_ZQ6G*FJ}++AxzWjgFiN7&pMjzHEwkZ1WxaXQFH6=2ezxna4eNMWYi)- zeLWK&Vx@qTmVI+Vm9L4eUEv7Ezh}fFYfgyEXm|Fz;dgT^M?z9ZUy#igi8>dv$Affc z&8`iM==t=jXl||>8@;`YC?j2HWjcF=rq_}R{gZ=BZA*LtWct>bL&dH8VdHn@_xWgh z0)TiLD@ShEmZYWjSne)tHNV7@Y$XXM1Sm|aZhtOsrj^^v-)R|NVsWHwtL6E+*ybmB z8NECGRM9fRQ5#oPJ~OHntN~pYrd`~4&stbcdFmPG>{m=4<7ZY%2Pi}MdE1K(d+oeZ zu2;cGmlLqf`#2<0XUuwCU=>CXC;}uZ7)7JIQZs3i$g8oNWP>lElMw92_vq6mrowwX zO-pSLy{5$|JnSwlAT4j@1ip9p@c8+^Y_Nvnw4^ULNSS9ZPM$-YdWX$@R}hhiG18O4U| z`N!r2@;33^l2jeCUPi@P!;cSHGRJ4%6UQ+rWzk=Ug{&X5!_9c~uw5Czk^gmU=eMD^ zz3r&Zi1^f)FQ0E|`UFKLzL|Ly@0Oz)8KgND$a8*)`8GWTC%G3C_>kr1O7PX2;A@x> zff2S5V&d!nG$JNx5KS<`zTJeC_Hy!`?jCdkOx}ne-k1W1n95*z*(P=^#3__{>ehpd z_iOHdj9hd&`*tduM6VY*P5Ap}Lr15d0wC-iBnHz7{{2&yV${1(z+suL>)ZJXz^gJYgzzfncdlnR z$*br~F-oK8N`qYRbhz?Cym3NXbemvqb4l^ zHDN&|s0Tkv2aDeylaRxP4iSdnqohO}q~srK6;4We7^QqrOrBWlh@cHUv(S-`yvN_? zhc#7(on0d}#g3;+dP7`L(UV+|pbdw}$^Z!6ghnpG(%B0D0W!%mmyc*0U0q zLtM$Qe2>tasu)rD=vS~_VEg&NHXFLk6LCm^DkzytMlOx+c!g$iKvq*V+K!Xu89^{V zT$ga8ywcm`Fc;$LfE`i1NlM3&|ClYsp8PrF%MRf_l){OlNd{&Rx|1aWvC2EXj;s#% zke)x!`m1;-k~0$W^c?1Pt~r>`@z$o0m?JHUPZzQlIf5aCg@FZvoDvVUc++GeouwaR zjv^Mwub2S%?NItnib$Fw2-cfX7lTA6IzmBi)1)l%{&jM|J|& z2k#Q`OBWNn1o1_J{?Hv>i1lMdG^ zanS(%0#66wp&b~!EX*?w>2etPumBvKU^MC`!g8SM1}%h`xASg$vTaH64F1htM3<9A z!KPCvF6VYdI)i9g&0QIXw2~YvM&6L8CsuoP3d{B?M+YIxzyZ*o&g#fw`n8(-vS+h+ z&cn!apYFN%h4$M3F48)ND>M{sum=@t2ze$R%GQxlKR+sxL0X7GQE_&A0j!+D^uV2f zphW$<`a!||cMko_oM xp2(Cj7?RHY6#zQAi6w`5ODKLbt7kB$0dBK=cTFNl$Nhb zy37#zo!%PfID{q>zU*V1ichtYX4IQV9nG<-n86CM=u0)*M4q)XT1EgjiSMuXt%OSg z0<$BE-k2na#G-k%{$-q4k%1by-l>k;B}*%dEF*Vq8hL)f+xjJ8J32$l^r<{Z_0wUgV%b}0z@zx`>Hv`!4JqE_BmoRr1mai-kuK5A0NR86Z9_s;}j0312u$}2l(9!J5Oab?%pX%!IPX) z)uIp)knJg!X7m_r(H+t$G1xgZ8B{5SuqPR!9=9Y&hX4M^T)EhiFbG36u!=f4(gysQ z*Wrv$eA|7V6fI*#NS#7I80w+mVmR|5#K@1-z9KItMXNmk?7}F|ziJ;U&9F>Gdk9VM z!r!c}ffgv_1Uy>Q$PjGSmMUlfhG&aQvJ90f%<{t2xg_^^23a_gi5!eWnHkKrt%8N5 z_rViDfrQG3xc$bfrHXjJ9{_wp&xaKNJsN~Xlp;nFI}uyC)vvJYXa&Lq2JhtDNzC95 zryWNB%gw>+hrdMF{29H(O7g4!>30W2K4|FVH#+)(f}Cd#!bwgL24hKvyz z&QM)UBX6N>pM-^|V+sjwAbeP8OcZVk7zSA~2!vQ!p)gGhCNd91Rh>*JNoRZ*j6%T? z*$CVPDnSq-n$!r&5GIj`iRO|~Fq(o2JCe)*HZTT+n^>F;fu;i%7gUPsQ&>m>mKK~tLTMyMiW?K5V{R&vsOwXJV=ksaE5Qyc zrV#;B$PY21V<9U8P{S25R>MPy!1W~(3&-`Lk;Bpjv;H9#WTFZNNveiorBVW?mO`T` zQ;LXy>u#rSmK7o=H(69|gf!uGv!5;md{%OAN^lfBM4}|xt^D1yUNkaQic=g1zLT(1vsk1D1KO14w}<|6ONT@FN9L318qo zGnx7=HdIa2YgDPxqDKrH)ob{JfI%S<3I2Z`SrwCgX42X>H3jv0%~nl|GR-Ho|1*5I z$ah=wKl$xKcK6`%MGpib@Dk`c zB@FQke@l}cLuliEr1UCKWLDNnvFDrBx{N3&rrK@RWf*-z)UUAMVq*E&+6Lass@+in z>kf`@>qXN>FboH#i_h_2R!qe}? zPD!FuyBX!_nJN37W)s%biJ*1C=S4MuF+?Hqz=?p!&`edC|02cpB>>E{I1jt}d;9*= zcv%fIEL~))X2b<)O(ep4Y;4@_*mKv6?CbSk4*wm34ff8kqwBxSwrv(*dNU`N@H>gs z^JU!9iHzrDpq+|zC%8bt`2WaQg1Y(X)d@9!X`IQ5p#i z92g9M%&Gv6j)Vp%RsbMF(MlDZB`F_8MLrhK!$7VH#}uRP!1?)qh)_W~;bnoL3_y7n zf~y6gGb1Tl06Ihbj9?X!zK|65j0)J0RUb!3^14ibI=%cAoApkRy;3otuT*FaJLV7aL&iI@e!Fquz0P{3J%FcBVUQ{7e{vvm`d z44mi^ROCxM8mc-lM(aI}9#P3VDso%iW1WK!rgY=$>&F&lun|xGRx~6(6VkkpJ_=$c zn#eL1=^z~HRs_v)2xWFaKA8uv*?g$%)Rbuh&$V9w~2 zs?!4CWMn`{wdczTDt~+8>+1my(BU6NG!S+-ibtdZE~s#35HspxI=F&5;BVwJqnGb3 z=Ng9JByR7M-%ePbT2_QwrU9};)M-(31EmiEgPC@o=c3##+tQh^Fb~!z91@C4D_z9q(tEcbwN10_s}^s=jtyfhkg1>R#0F zZ>7W0y-`cpcqsc#e`)T9w-95*9V`n67ciZ>niX$6l>gPOB*OY zt-!{(I8)nj?s%wi=YR%S6ZC?js9-1uxA~FseW8TKy(!rZ8DBMo3WHoOV$cWTCUP1W z9>GU>X6$ADto_IJu;r=imfEYJg5c&xM+SU1(0xQ;@q8GI?f-p8kXvs{{0ylcgO{7Y z%Yi)M(QdB{sjkE6g*E{dd=)|j5QPR(ZTG_@11Cl)^2_bLFlS+l634gAc@hA0IW*27 z$lgf0ug~gJvQh)}ph7$crHWK^hPAq#Uw%-7pMUnar7e0V@ep5s&p*F=e0cpl|F`X$ z7pF_aP~?o1AbjC4ydeW$_nwd=hn`Hn!F<4KbOD^?myjq44gBG})hi)D_LWLlG$Pjr zr)NCfNbqLQH_G>~04kt;4YP7bLb)i~gxEl!(31V8;C%czR9iQ!2xAdn&UYUNbFAEi zYUav6EPxEnPXa6$pcD=oPW<(F*i5j|Qn}Opq>-dLH}q{KD)8Z#pcm9< z-8vea*!b(FdsecR;3Wd=$&oC+G1x#%0dpXg*p-MGD}mG)kw9SbdDs0CQmsD&g7_0} z0IrS$$nXc55%zE(K+qJ@^h_a#-;7qOe=jS$uGOk**SvcA@y1bK>RSW1NEm8cqE75A zEN>owEfNO-hXPQElQIE@kvO7|j88Mugh0w5mz5%?@DETx1|!JUhAoPCV?>%~#lL(w(1Ea(5LgS((krN37#|{n#^;iFE$mJ!;z5>dcuedeA1*`)l z6$S-O*6$#JVi+PWPECiHFI{)=S7d%}(t|&HW8ZS?T5QVFx}8qpCq4`EaMroe>xc8; zX1#X48i!3_%Ct`n#bz%|h)kH7s55~aj0}!!2vuh6dz&wmaP6`8w)ynu{{VJCiNB%P z*Lyl~_N=W3FKzB)hgsxc6T;1L**e-Cr*Jurdf(E}4a0aFgoK1+RC%bvq9i1Wq^PQb znhH%wnG`@xQV6tFHC0trRS`{6olLDE+e$b{gF#vhAyiSQgdjo{6>H9dw=6z)WIe9t z@BR26j=(&6$JUjQPF)0$33*3Z08@g1*~WsiP58@aUzKy(x)cLM4Et9ZlGX~5 z36msK()hpc|3BAz-t>B|k6+z_?mps{$z#4pbCZ~aR{Z@Nx7=%mhjvE_4wq}jpm|&Y zw332IZ9qg&`N#t$>oYKIq0tUlNcxYV{LdlmKQwyJa1J~eTko0OWM`1CK)uigH~wE! zQwG=Ot2J36V>s<`UwT>6|H_Ip7K&E{6h}kCFxFUEtr|3DpvKl$Rk5v&pc+KU&`B16 zhXYtZ40_@=A5-vqzpfwk{r9>jD?$v2F?yZW+#FwvW75_y#a%A9z;e;bP|d1+-Ku~Z z2q++s4RBLMTi;D7h`9*5KQbc3g+uDSXeJV@83 zbYl_Aj*e}2Y4nXxm>>!LWO|vQ%W&A~_QUk$D)Sr&?s2sVxYL+RjQkmm$JK z35bidL74{|Ob?}g1%9WKK@&B1h|+`RaVC0?T$x2^fvwtAgTV$*on0S!%WisK-;e&s zvU*s9vVftW8b!$j$pQ!r7!au|**GT-iwr#VDBXR#;O=?R>_;RuSx=05{dm{-SK;%2 zzg@zA4P^|Li}Ty3cao z&}Hr2Tc|Y|9`HNs3r}|E|8ZZ|Q-kWC=>t~*T+CX?xFkvdKm;KK2}qNe84yZ9$Yfr! zgYRvqWA9_9`bM(2Y4igh!}QC=)=1sphy7tIbwi-|G#y3a>4X|_`No`h+P|9U$OvE} z1#Dn6C{UotLkLg`6ydOcrr(m8{vY@+=lr`J&q0aR`>26?%L78kBn+C^G0+;U#ZGZv z3Nf>9D}u;_-EF13aV5FfS^|;69`gfp(Ke34`0#N4$4#WCB~^7X94C;Q|2z5EpgNbU)TqAr4N2QCUbSK zAAos2N68=O@BfTBYLJE=Ks>quQB?$K0GsqA$uv9k-LCVF%lCcnFVYACRBJvQ=UhFN zRjhHD%$U^=3%AW}H<89@|IV7vF}T@hI(|OLusMhbVk9D!KoOw| zUfb_*2aopCIXT5mPA&t0tnFmtQf$R(%5QbbBOb{Rx1cBvI*gD%d zJheC-=0S8AkX!aC1Mt{p!GO@PYXSa1CJWMZK~v4@_di?5?x*@<^FQL7@3&_hTqh%g zL}LImAQokWNApO+VssF5V*~--{+mvlR5}dM_!GSX*D)ee|7QaPeM9otn+;B@_-{8o zpJXn3CuRJPYmJh`e1u8DN~8bM?F zakQQn%lxzdc8qj6Z)dWy>b-&T2Yk!sI$_U`LCO8^4164i&2ell5MU7nkU_(c5=g-) zM&S7Chot}4U7{Mp?N@8P%g-+}Ir?R}?EhzKJBs{I16tqg4k*w`MnB>%=w~c%GW8;{CUQ{eb8`;H(Vt8R#}Q(0ATt?N}_J?=o1Rdw+I-clrDL z7nB@GU>3fxW%Jp)R7wDIF_g0;1^Rq}Swt{FDI^~j@@jrgUf;?M6sv$M>a+EK=sHJA zKgXgdA7DF)8)oO!$$x)u+XI%cK^($f=^vw+tFMWPVm)jWqypvwkbww__`3St&wKsr z_5G4%sc>v4l)&Qfl|3F&aZ(q`4)8Mx|IlC*14U%3@bLV*YRz3lfMp>MyBIq1PTYea zCJm(%y%JqU45TDb0USC|b*(izTKEoZRA@0()P45-4<@c08LdqiF?5;WQmE*I;&XY9 zlg9i#ZN0&>aWaTfEdpG?5~3z96d?vMLjwr}FgU3{X6qH(c+wB7j^#8=@gp4&tGx zVZ#u3TJOpFJf3GUz3K;=^1a><+uHfTOV2C|O>5;h=ouT!h4OuNVK(?52Lm_`V*Ar} z)8DQs)!feuoR^|AE|tKiP!`^4HkjZn3!NSdi`q>>rbz?ezZ^fO_${=SSd?e7@gg5KKt0 zfD&PVK!FhfD}n(-y4KeNTg0%K>h!_ecxkX&9tDOt7b8jS*mhFBq5qk8sL#m1>fXV$ z+46ZH)`PX2)J@rRk+DvXc; zDDa9{iX>VTMz)~^D=mRl*+d&NNULi$6;hqHfK<<Duy!@_9$G3pVkbwuAh#GT*qgnvGAVpxoHIT_x-uJVD;J6)Z+9EtXE<~vC={g% zQiO#eI6gAmZb!=<81kdYbmOSi{b9|9j8y{|rm2wLJ23e-v{$YuJ>Xv+d^+s!Cuyw( zhKGsOawXLlz<>!1FatPn<0Bx*(rC1i8be5FO(`)kr5;TzvdJYxw5{=d4`Lvx&*zkL z^9;-~3oy*XBFrC=GMU|t`a)d+Pf`qLW(0xk6-M^_=EVppW%956Va>F z^%=bPO+0vE>qo1kx^F%1Q*)f|e(YKp6vdEAQc+|^4Ty(gX!Lq57K<`UN=j(SjG^Pm zWkL{yAqZ4T8_h_qT(%VaA1kaKUh}T|1F{`&vN}=SdY0yYl^*l0^0(en zzm3&*UEdjz;D_EFou|)WWhOc?s)QgcmLD!e$7nWt?SGZ^58yO*MmNmFWXItsa~HlR zQ{8x@<&1zmkba$@W^!$KnE-b)6CU+zK4xm3+&~T8cIw4x#Q=oi3P~gi0ssV{Adp-C zs|mIs(A2rH0$kAgVKQqdk@uKYvy`x6M3`Ajsx-hawBp8yX}k2q8C#- zLJYwOz3c! zze6_XqsvwRgaCvCKvGcB&;<%K0uA_one94{owj`6rtvGhdVGg!7X8?pUfpcHkDDco z4hrngmw?}2dy-J^8;Y&#Jq{&BSNFuIx83XT@0wpXFIMBC_Ih&A6_HR>JPrS^TW?jG z=XSS$EXK*x>s<-5`2TTPhx!gjs;gU&jrpl|yEJo-K3+ff^Ep$WfSayjboF_xxJ(o* zS|09eM)JJ}Wy9j`9JwB(QB5g%VsI6b``z+&MXD#~mv`A8&R?dN%!)zw7(*-Hs<0Pm;}TFTboCs^`}4vvd3V58(29f3FG(8Um7r zmVhWxpa=yPPo5cU>*l*rfTP*yYh~pA{;gIeNn0+#^Q?NnbfI=SD%)?z!AV!;wekLI z{~eg_l9swJ_D2dz^JC!I?lqap&vf$m=0{20_I*1BcU*p0JJ5KjTH)NLZ?cy=#xXqp zMyfMR*Hwww#`#-vm?sX3ZsIW=Z>u~N2lnCJWM$UEX!g7{J1Jat|3$rObmYQT^4Nd3 z{L74FYw{!Z7K`6%&szV>wUp`hcpi_L8Ej(b6DOjMtmZ@SviaFxFU@Z2lGAtOC~^{( z)S_cFc5pAN@sau;1HQSk8)um8`kr@sUc^27hv{%$in&NqNOYXH{5`F={LDM^^7_8Z z1xII_xO)0=8+6Pz_zpMU7_s-{VLUC3@ftYBuLJ#6ohR+abyFvC_vIq~6C-s+-A!_; zyfbZUIUXCm(0ABwgY$aBzgFk|g*89XkR%BNkYq^)KnhT36dM%DSMu?G0R5K09)XD+ zvlIxJkb+Ez&hNm){;!Mj`oY=w{)gpqssIPH00~e~fa@H^Fr0cUwGCNZKclG94??lG zyK#qFA_pG|3cb)DtFMjkp@P7%!m-2C14UL1@V}7zBl^b_I^oQXpxqBhI`Q?# zYCj zt`1Kg4A?I#Aij2iX9l@=7QkgenC$~R4i|YFi#&MZbED|*>D>>lnjL8A$Iu<$#yz;_ zJ#oAbZa4Wqh#aUkVD5o*3wZoxYT)Da*>W&0L1hdJ=rEfASO-IFx3oAx{DYm`YsWx7 zAmN8^@(z-rkMYi3jtq7`m-5~Dqs0yXa6NyHIP3Pbb{vrLL!tRcYj!^P{ZYOT zJU@7MT0cO4xWV$f;r(6+?*r(M{r02Tj+?_Be*QfG@R(7p#1C*i7i>9!`G;~no^*Qg z@`p?O#{NAms%ATJ@$tG8ynpyxf$3I6gN=Fy7#v$tU}=H!LVL7W;t~aCFbe4sR=QwV zzgf26bsbeuS^<#O_rX%lk;290h+f}q0p$OZ;O=wpSoi%$ieG>X{l@LAq|b5nd+>hG zfWOyuJUkg(AC2zs3Fc=8#2x@DV6Xzj58_lCa5g}_kD5Pd`h)5XAmaz#9}Ibs!Vi=* z2S>n-u<>I^JgD@X2>RZ@=7;o-L3cyBAIG>J50V|2@}sOB*z`I~;48r2LHJ27gM_BW z-yZZG{m**#(~eMVH^J|R zG&!6|<2s@0N3$POj2%Gj$7VDfc=LmdA5?WC;15hW(c_2AA0T-ouKWX~9Xe~ZqmSnY zB02%;hax?2=<_4aj{G*m_XeTr#_W6nxgQ*Uo>+T9)sH4U80bgwjj-SPVXYimboqhL zk9IuR?guzG0jNrDDq-eF@gER*!T&?o4?sVMTs#Q!!;K#=C$b*mn0O)le$lG@5T%UJ8u^n2#*cmSl2&?;#F07w9kNE8GV4(*lyEs4)c z)yeBxlf>|t-5IgIi=h&iO6M*YBbx=|1wWc`hZ@GWDho!R$JyE11C5;pJ{%jom^$!U z+rjENEsDo23Sd$w2x~0a7HQDDcnn;W$BplbKBl7UcGU5Y(E+GVhk_n**d_-D`h*BAD%jD~{Jr@zc zb&&uQkn{dw>9pQQ6>p6TfGoVU>s0d_ddP>i5Z|o~p)(uTh0jv23b9UyvJucV1{#|!rzx6|NZtz{?NCd+Ylo5DjPFaZnCCw+B zJVIBvKF~6C;O8hJYeDn7e&$vwu6oj+RSmq);DMFt zRK5ZL1Ud78ng`X|a6T;XItR=pMb>IsP|5)+gegHl5)dM&zsF*q#IMuv`FZ8ZNcrQW zwM)RJ2LIg!^6PcrK?5J-RR#8=OO*yqUH}}#=1-)EVW{2!~?e1>Y|5q4`X=wGg(3^d>*|J~m5@}6t+y{}|;U_<1H z%rf>xksuLRFyusq1_43=2!9TD9DTi?+uu5ilm0&^AEzAuBsgsd=d}AV>2&mrjnIAd z)4o2Qzb?Nf53ig2Y4Kp(B-U$XGuQ`%GMVsdvf#>@Z~+B`kU8iJLy0Kw#X~mL94PMi z?^tiScs(D&F;*C$W9uG(d+mI?%HROa1M^LRu1~cILW)!jG_(!F=HMNijEAjG;BLp4 z8`bXx>SfdcF0vbMTStw4dSReaAmdAds-Rc^vOeFxomf6x=ee!>c@kjNgI){xIM8ow zy88{(FPMlDh3-?=$8mR(%bltCJiUKg^X|u&9w*ozC!*mr84pK{^YEq=Ai_i}1VAhh zuwh9OLJ5}`F1SKP|-hVbL)?LD9X!*x7IfoIGPUm7$=#>;v& z{MXmw{hg-+_2jKkyQzI(kqj~cV6X(BKoB4n`2W+n)1`{z$^#^|4ijD12LcX5$>P;e zf`+28*`duIHTP^P9<3_&?XBYxDIQz*BH! zh>$}ffP*FxU{*^534x=7%D%>fbI$^)qGXZ=z!6e_GISY#DP1$WAP685d4TG;E=-~% z1X*cEyV`7N2Yen|DP5c&v*^-~g@@|KY#!IC{3@^^fdV534h{uim@r)(0khgv|1sb8 zx_h3Nv+~DnUN}+s!j^pwzyR2t%O(pylvP~w3GvjvP!IK5o-(vzt-aS$Bio-jKZmdm)}eq0f-BnZ(oYI?pC>`S$(?HW4AMb|`u5Zs^vx~gZ10zeT{PrOI-4Jl#>o2_M#~=vQAfQr$ zpiqjU2^O%DAe3_cXG%Oj4eXD}$|s^D#N?^pGpdyDR_`uE>B zJdZ`xfV_cqLJ(U503aj~0z}H%^6{(Fmd#pw-Up4-a-+X*k$(b{0U;P6SR{S-ncj`LkQYE|f#XR`e>y<7*E9na zt+w@-X*M9xUx8MpZU=p7X}4>8Xb!<(f&CuGMvTk^Fgl|gA{fvZE`G!vd*i3cI*9wu zazhVw66MBL4ZcCwXXOTf8VDONE=N=jPu1CizkXmJICIwwMo@eF58?L@tB)K;w#T9! zN1ukd!+9d<2{a-YVi*umSr_o&)&p9a`Om@7*aM{pnVh}LHbp4y1DZ{Iwu2?Cfx!KL zydUPD*=M57Vate@478y^s)ZF{0Eqyj0O7Xx8BpCY-5zvBYrljTiQs#Hqt#{(8s3;1 zRp4s@k!{0#TxV}pZ`h3}KI%XGIs3}qi`=h}5}H5+gp@7vL+SM+%KgJ-+GsKhowe(J z)&bDv!DNERIVl3u_jB)kEkTrgZUv!gcg*te46OXGQB&C74u0lKfdV(+hyp_*SMBSi z+;l_vhjoU5rKG`RVXbb?Flj(m z`5JBfY^XE9;lcUSk5$Njk=AN3?j8!*MZ^;fl3Jg)+TZ>0>}O$m>xI)AI2@?u?$P$} zSMl#Sbi68IUVIhWNuX6}EM%uaTnC5>*eY=7@iw}b*0hm^+|_b+(z#b6)+vh?>8P6u z>ZRalQ1vf=C)eHB76#xr3^g#bnu-N#YkT}=)M%X+Xv+n^R&X$8N6(BOwOu@j0`H9} zgp?#iW`YS$%#{%-N$#fF+{@233$;J#PUg;j2EM_kArb_i3<+jQobad`YUM15u&}vE zq%1MxR4TSu!Q$+<0;Q^K=^2R0j09j~k3|Y?j7V^mdpVjygN?%YUC;QqDFTK=R=x9yuz+#!_X{ZLNZ7&goG?Z3t3Hm8n`cHKes{c-R3`s!N8Xz$!f=g`hAe~ zKcDG~{?i+l#nd2Bfe4Wyy^sp-Dx+V7@OuuI<>c|5i0lW)+MCh_idjT}5E2EVfVE)3P~SoIJ#LS0%k^aXAHRpC2CDMXwde(fft)n+ ztSDZxB_@bzI20HqfynYs2(v@*=tm^*chd@@t(f3Srxg@Ov092Clv3~a3VM1+p!yVx zB9w@*LOeD3feJZL1BYdh^-Fb2MhzTwm5D**2c-UjE*A=_#ZF-+ioNszmt5goYzng5FIoK zDt5J5OXicMoklX1bobHoF-N0WJo2|3b?9e%3K+WrM?;0kWAXt0N?S9IA_?+SD|$5+ zT=`a_638jxBd92+StkWzlYihe!uR-G88(F%Y*`|x>f4*leso>-QzK{pZ(D93lopvz zJyrL4#gYEhKF3l*cuGmvMblpb_bSh<0_@RcnXDCwO*DA)DSFx>r(ih%WD(UUYAQ74 zE<|*?a(4s92Nb$mwW~9jntFe?i}LsJbUHmy#ZiN@A_0X+U6v2gf5&$l@UO1zHKDEB z5%@3s3idehSo3%4voaN|8-&vK<2o-P%439%$=pPH>c=5yq&N5twDhJ(UP6kp7@3fzi1d54#vo5$az{qs!KMm60U}ORy zk+E3bG2x$^2>>4y;O$OIGq@Cp_XduwQMdT~%wH2pHQm}2KD~l2Z|Lc~nT379 zTwwk;jDFvH*pHw&t9~lwWh<1%E@m;3f<%;Vtiv)uR~Kkcoqz}9*ID*FZT=6j)O&pE zU{$jR2>C$>1bC1^6o`n8Ezy*P`ZxV6*)ElmI1L^ji8b33hMXZgv{hKLR)`FztE@z9 z7O?@j23PW={ob~7>j#6V2d^FkR3JlRSeKx|u|TpJmDC7^1NBEG=kwD}1cus6Vu^ju ztWgWj_B+1U8+p`%&wDiZ!n{(ntT>>O5+J6&OcNFmI2j2eOlTqeF#dhh8+IOZ3=L2> zdfU)2JYSPB9X;@8daW(C7tD|F?98{lP@$Sdf)WZ4fdNi{a~Y51=5%%SK;HAtpuvON zs|R)H2l5SnAQ^8nty^FhtkESJREV^lJELGUJ&b&~qXJ?;#iL0qjGO!>Gi!g&$51IN zD0&ccMiqtEj2{wNbzb0f4oNgYw2CEmd}ge^7fH6=mDDa?-Q764j2%|)cRhQ}f6=da z%*-YkqUJ5~4b47aDzglRWSJxhcD0PKOkI7c`N~~-=V|ZlE^S_=v#WhA+p^Iywc?ru zyuMTyXcEM3u`;%>0Z+t6(``AvQpJ4BjT|S3$Bmcz2N^9`3~#{!{pyG6fW+0ntVjSW zm4D-dd(O`3bx=!hZ2^r3_r%sn0<;a%AwVp+>#er`eo)6zwo;qd0>s%kh0t&c?3dbE zkY2&NT`vm5`f%MIF|`J7o6$l^Du}d%GaX3FUxSeQJI++D?(bMVFGs!R={MsEQ+(kz zo1wPs$8tS|ezW}!KT+0>c93rs*n%@T*%1tQJqP#*`yB9w&tHN z%bPYF^JmOX4cOb|Zumb(m3{2)quk@h=sJO!K6&uLlK04JO~?W*M{tqzWh$ zL_g~jVX~NIBdY~aOJqTT>w}NgN@;7SwgRN-Ci=OELt0C5YJ!C2qyY&z5n?r=ltIOX zXdCKHb@X7OWEyIePK8NP)FoBKR-BwNwZP9Guw2y=6C|7|SPM?+((`{6<lcNhRp-ISO>rJo21BMI*0f5m!gRl8~8+xE~m;v#}YB&+k_?W7mj}O7!v5~@- zGL%H6#8@Fb0-Q~~cwOs@J*AC7 zN>M7qz#)*&TagbWIln`#oxYqt{h|JLqf9tq?eDlT*Nr|_sCUrL7xLq4pvn{{%1All zFyhdk7+Mmi;5Ai)Zsao_bs?j!1VLX1($(I*>bmicM|ZvQ81pB=;j!Z0C(Q7kr(y-T z+Xj<>HDafA)TZ8Pfn|gehDF-CM0rN`uQ)Q%3|G9ICmmU@Qb3e-?<|#QEpxf&4rYp3 z3@h#K|B3&a(Q7y1aeuE}^wQS+SXx1-&~T&uXAY}yIht#B_&eDOkPt6x(b(bE&}wDA z=!dG9ASb#in48QSgT;&spPsnRgXcBi(;Km}nEOc${2T z5{QaelW1e_L5_)rViaiFlp>BR?vrnZtFx;e*R8M`hM=Sf7zU~Y@J4K9cI+0COTPb- ztSX)_*vt453FM_w$o2-VMz;t|wua-3M-3>XAjc5nBsPRwXA%Pp!Sq@CULP^E!m&mU z)1DkzW1ST#AW8aq^i`(Nqvul};e8JQTgrG7-CWRj6zV2hA+R>@q}Rq|nz*FQjU z*2+Ug`EV$zQs+28%PkTA<-)E3#%D2;J^*z?G>;YwAc$eJI0>C}>@nF(J zUu!RT$1?0#@FZxXb2CMQDCfzQ8>f;eriu|qK&XhANl4P1E1wjyz9|q&A>!acF(Zkl znu#ZCsN`Z;qN1xari&x+3g}*|3hIMUF*#7Q6%N!Gk|t&;Br!e2C2auX2#Jg=`@W<* z;7EZY1c(wKMi>yo0vKRJ3<$-jQ0m_Qp|UT_@2}ou>9zNXL2O3d&e#WUcFU##=!34#k%t9nct}=MYNVSH%YNjs` z$g0b_SOO{&NWH4#QNL9?D z5khE3QX&MdjhscKXU8o^Dy)ET*|Opg0*DQb<#A10Jzo^Wz%~J}eGdRxJScQO8!ccv z9;jTWh2Q^xz4d{8Ea_mZU2oKQ(rd8EhCn+riy?|EZA92C7$mc}h@8hGJNS_8M;FFS zm?s$48sUYvV~~6WSb18pw>V7pfdyn;CSitVGi>4vGZB4zdXBcpihbCtPy-CSVQp`& z>u}drj*#Ln62vLCl2j?ocFizYYu1Wc2}r_CNB~P(xb;w#QBwJ<96k;%FfO}G>hzkO zgsEbE{zoq_t&*y(CYm#aP(?*T0EkE^AV*o~8O0~T+ofO~Wr{u&+H z4EPz$ltjX2EO~NhNdzCb$dmy&)baHLF_Hm>%h-mwK3;KGtZG6s)I8exW! z(UH(AI$va3&i{#+*H`I9waORd7t`uRTN~JQtj=pXD8;|HGn@i6WS^(pfs+23;Itfz zo+&Y1v+bRJz~;f<`fGF~K~|*+^D_P(TKwR37OtK=ADc2(%V=`)-i7=YaF@KmLIHat z8pz$yzHa|U5XbH_Befhq;xyG9xb!%V(s<&0-KTy&Z8lU>S>|KQivLNXjEb<~e;zN6 zvF)gu{m~*m*wx}O7?Ay*-BEdnfSrm8ZPzw4fz06l`aMA7hu`i7@v^^DVtU&V zur~v4pdn#aJYeW}3)TEI*ZBg(A$UJr94sF{nDsir*9~y({QH|UtTwy9Mxo{B+K`$i zR)I`^%ia$?pkrfW-R^Qhj_X3%cd5a)yn+A(dcM2GU_Qi#yczT7e-pEVo6XR!h$JBj zx(mqdKOUDi?B0bGI%uVdN$HGuUU&Ax>M~Yc$kHS9VF%clYX?P}8bf2=b5`3QbamE8 zU)Pvq_5>q?{NvUdG&`C%7al zw`0isBlfUPo7Ry9LIIjt2Z>8NUH(%7!2k}3AF^xz3wy&3D&mT_a3}#n5539PulzyU zOcuj}*K}E(^m(zQ(ZvX+ujnI&8N&-z7S4G)fu)+UX!ugN<33eWKceq(S*Wyr%rmykUWVPzrxL zU&}n$Oh_`#sh(x`k-(%px&lE4%ZH@&FIo&F<)GgTbv}P(q$=x}g{5GWaj>Z|9pyqu zsFl|KmP&y6aCX|-2zp~MyeR7|YWFYvMsFQ_<_7!4)r}rJY5mH<9UkC*IhUHQBo1!l z`}R}1co^=6L)OP<-j5wypY?j{;cwgCS5bMl3#f2I6=4yexWApdvXGj8pzg+Y@iJ`=0~dsukgq|*jLcQ zjI}Tvz{Ny$!v=V3zWV9Q_u~0u0e@TsDRUVTL@*=+A&H3+fkzOWJXoC*XLH_u(osml zg987ro-ZI)eGz$*zBdY;#R2bd)EST6j=r!sPdsdd0W7Nn*LE7phP#NM`gk6oeD0id zIa>kpV6GrB0|-I_^M)azHrMM*4VFHFw!OaMtrT8!d%oFyTb{6N2WBvQo|7HpR!2L? zSyVZAI=Qg&w%e-9u+!@Ns>AVgqd~)Q-Ssg}Dk2dn^lQiZT@8TObo}o(f*n}u$7DR1 z-F}L16W*)`jotOLQhJiIfO&0)Z~y7byMS@AO9mGwCF=Z3IiRyM!;>aZCW2rfEG`}; z6X=arN7UKgeQgNg#_90$bo56hk-1I>GC5fR<-pE?+`tpCS&^m7Wq0mdDdO=KL!0v` zJWpTBRqtnh-?R0xyV7H1A`BoDAwmEo-g*o-bl&aDKWW`{%imTFPC;Er9Iv`e7aA1= z?GdZlb>WkM4%8Snx&DroXf`|+%MFGtaP3G0A*;t?HKTeTVh%81_gkElD*onMi75AZ zsl0ssKy`0eX3&lSPkr+xox)@9e7JomEwWgg2YdT-D*xqlcsV&rfNxsg{juY^OekTa zOMWDWkqVQKZ^ZJ)+8dDG{{hcqt;@*{*lapouGD6rIsMGj4|fAcIr5GRS4QJR9`t{N zhc5%vTckHA9`^D%KjCEAKp_K&BWIVqYbnR#<9<&{o_PKKzkQkWuOnbR25aWLkJ$3L zoA~{$c=lEUXgCTFo;a+Iy0GZ0=sPWUU^ZB+-|YT1^wnBj#*|F00J{+c5ThaqbenxI zacO|zyK(A9@HM`7U4$MV-L)IQJ&eO4@cs@rU2R`>F~j~TR4Fk7A^#QrO+)1m(#Uvs z0;RzS5YIxud{{S~W#*yjzqK@wz#Yfpxch;uF`x1wjZV5-Ul8qbJwa3pRv0A zU%T9}_v}aL<#Hp1$srK9Al4R?Xha$s(ZlAi1K-vC1!qp}p-J&};tvDYqXw<g$tnIXzM2qvTKH44~89>{B~Obvk<%rHeyJT>2jPv)lzzV zt#J2nJztaec|J$hJMZ2(&lqWkQOb_HS){eXjsC=DHhg?<(_L8RH~r@Qxb5>}=8f!i zaB)gvh_PSo6BkiL8VsUPWJ8*OTi~z%CiB{UzJ~7h6zUTohZ>ZU6lemr$=Lh@L| z1-f+k-hEg-wCeh=4!9VY9JdlqO=EoRklcSt&#KsXd+p1&^ZD#98VExVB3NW00FY`X z0;IDCS_%P6Y5nzs$50Iq*dMzecf(E#ww6&?9~bHQFgp%%K(T`PeD{LWd#S7i&IA@^ zhk#dAV3xtbXaS(&s}0iM8Bi5(W>bKfI4`Q(P*V)y>%sO0s6>x*u6~A6sXQnn1y6fCFeFhDZPq+X4@RhcNm7Tr>dwow*V%i`W_e@EP`8 zmV$|F7M*M0W#d~?&253S{GP>-pb2e|gaA)x-{wZ;*m3uNyl>drO6?Xu^>q|}KkKFX zwnKerVr+jey*hCapg}MaA!p1J@!jE%>-USpqK30lg zu7H3bqc9{(SGM zVS!bLs=K(V0@Mupnx%!EP&!55`q?B5R_aU{p|BfX#CClb#jCNjyo(8FLkj>f0b{VQ z9AM9##OH_S{`Nct4*qXKVY`0&ZMWys+TRDNrL7%(h!*4m3lPK;9bP%-_XwyDs@ug{ zOOH|1hQ&E*0s8HMzyrp^#w~Gu;K$wbvb}}&3->1bn&Pm7YNr~zzNqIW{dC&yWCGrh zNP$Lz;7kZhP!ErF-3E7X3X5YMO7EfTcYn6r8)slrzKUJi%kS<3u&7~}JHO`7y%7Du z&Drc{KX5UTB!of;Yy|}!XM0Yk3n&fqSB6Q_EwCF0?e+8=>y+3%U|C^7js>t0tOuM6 zb(l0D&07=3xcMD{-h!cT`qajnf&s)IC1^NHrO|N&3!sFZ0`RbbFll6d!P^aYNm)@h zcgK6Tf6w8K3HF0a(&BZqP-8^2u4~{1u7DPwm2o-<+uM!z`f}GtRh*14;Q|n1LLn)o z04V^%Dm!hyQvb~_ZBK{QSo}ojI_zGsc%Z8`*n)wUk!0n$Gt#Q}P^-aGcTHe8S_PqK zmM{zun4F-`#Zt?l#SiD5q1O*#Y08bT`lCzg`dVOFxXNqUtw(nO(){{wo}fG2@H=+V zmW=;y_jV=W5QGRKlmdj%GS-12QW=JD5VUFi3T{`Oo$3D?{$m~YX?@Ko^xrnGKUtX7 z1uv@XfHrc8f`@KbEBlVZ_9m5RK~{-m1{=9z3j(J`F}RXTdAW&nu9-xNK{x>-pdl>m}U`!{9zCH4@;nPwd@#?Wg!0pcjFS4tcj09NKfUzZ2U3(zwFvsWxEOalxJdT}YylVaj1r_}g5 zG2rYg;$dNvp+#5=0mFLGyu@bPHam6Y+CO z3jqHl@c8n0@K=yz4DEM37T$mB=JUYKg3~CT1kOR6<7(!J(?^l@{DU7aKiBp)j-YpS|L^RmsJs5X+p42PQl2$E={NkimzVLD@J$1v zR#WMrFK9D>(t{Dk2S(zjc1JCCuonQ}To8dqgor{7y--2zUQ>Gk-muzv?P&H}u%y@y zChQA#65RupH0r1s`cXxxlfPp82oz8 z}=Qsb|){Zkl z>-@iH=Cs!VxaI$-v+ry~8dD^#ZFX|ToO<~{%S>FZbE9MP7U6s}^;RY?i)@bT- zd91T9FJ)WjI-Q24fa*gxP9unFdg>|&5Fr1c+)_w3)vi4MQWN+Tsw|ehe$rd$lD{It>r<>IFbBo|YUWU1S zwq=5wEHjzI1sD)(*1@O-#+!5u-&_^HR(@K3wVlT0UkD6+`-18ZnVoTg9v{ywCo$-L z{P&MwH2<>!?qYArYFghyM9B#fAq|!Ycdq|2Q#zk^7lto4QS=xo^%B6$TjqhjEy@EI z#Nq?Ls?bZftG#M*>(RL$*R9#GfpG*kN2G2@1Rzg20>&djTF?7^fbFfW&hZ)$f3J~C z4XE;}r1hGy$nnA3`0cuv;8Ir9eg7(+D>W%*EXX$y*joxTNB|@&K~kRVVsq*%Fsu*R znl{A%_5texxC;Z=HS&T1&lR35p+p$`$@6nE%Cso7o#}fwH@{AD`n7x;!+p5CrQ7GiSQp|9&)cqrHmPE!$WXq_b_C zWNBsb=KS6rtKn^b*j}&f`&-M-M%4d#;_(H>Nt%Yv>8STX-9D{j)m!uAzH@=LXz`cs z1L2DXBp9NF5D=vWWUh8GKKtYUUz1-}{0l%WKafwcu= zr&Y9Q)ToA9cik?wgdd6?P(omU++66KTW;FFDtdY4>?THuw}Vp>z(!_>78h}ad6!0@ zHDW-h0)YW8JK**K<84#mJ}b7n2S{3QT7gyB z{iI@8b2VViTyYmrdMgnC-~qS0)3SS-2WhY#e}Js1(A&kST387X$O2KD)sJ{KIIT^v z@l`#Aw!RvgUhAcb2XqVm{2W+4Ynt#_hkDI?%&|Tw2n*Knt$nQ9UniTKm5H&c{4-xZ1{TuGT|YOR-hDeCM(>li)_)6K|3aC3D6``O z3#q1_{#shh6F!VB%4Oy8F zw^Gu#V;_ID#rCgBYu2{Bby}G%rl#*YG5Y?8dpAjLl9iO+DY@jHAggyY-shEmY};(7 zt`iY`cXaK0ATYcI`JDqrpNA^9=9AX$od4MAJ%08rN_?sPyb{eUw!}Gj~4UFzP~q3-ZmVc#X8lU2P_r7t@f^NcFU~6IgiO*d7JtF zCsDft#K(0#4=ufY_X8J~Ueena|Gx!|P0dxu(^E+`nEY|5FZZX3SzF^qmOB~leRKb8 zcx)iB+#YK+(-SOvPZztf2Xs^DW|+6l3)!t+fxA)1sH126^sQrhn60}XJ&JQ%tmVsO z=oLC1KSkSrO|Wps>H&wwT_JNDIuG(AY5qU@dL5d-3xCf_th@f+A#vB)$BH@YqL=q& zK>>h}@4QvoeYUE$&~+Ug#ttXHCrYI^dgpB1xBQCLk7dUttMyCms4E_!bdbJhTs*F4 z75ec!4%cC~8G2e_kkY~Xyon2I7K8?*gZk02+|HQKQ_ljKJt|zwIIwQOu)l)BtMK^g z!BWz4LH>g^01m_!VImAzI`DB3&EkLHJ$tS$yYzB4>kYB;-*xsYZqB>;&CI1cYWgSIxq zh#k1q^ak{xaMvKt@*^Ds&1WA<4@eyLT3@A$!Grzva2C1vohN#(&CMt^%Etqo-v@~s zBrl^vFVKX<5I{%(In77gQ;xjbDu8 z@^qPN7)i{SU;_=S%Tb9JiS6G<5$?aigRcg78h~^&9!0OV8+ocu(8nH_WBY*ifpMq* z(O}hsS_`-?+5loiQ9vTf02C7}#Z&htP4$c3UALu;wW+A2oCaIJev*?1iu4UO;*qQ1 zh)nz2Od9t|($Xrl6xMCk6%_^$06eSoI*R2dk)_@NIJQUA;ZwuW0+vY(8t_#sHUOx5 z2T+iILAB&=SAEp&fW!FzEchCp?-*Hhw8lG`4jrt~i}AkbUxZjue#%8Iv&j8>ZS&3R ze=%cjL0x81x%m1s`n3yf+jWp>DyL>aUAKa)7CNB$`e3Jel=CpBT}HGYR*nLn}lB-UjtLpYzyC_ohj!f)8t+ z3Uk4kTysxoh7QmvSRj3co_3Sj_?d$=HoVQa948KNw~O5h2jH{e`GWQ2GI{%v2cHhm z4J}L`i+ZVZ>obGBUthz5r_O6hAYPmF)IBy}b0bd-n0__O3w?Gw_-AFUOHwbS5MPLr zL${%**4s@}i@0mH*WT0R8-=LW8olNa^tgv_kSovCasaSm)K&v@s0M0djtZ6x9AqTU zdC~XexY^7FUhgLG56j>U$6VG$)dU0zM(=XK^a8oF1=4Gl*bCnAt64Kj4!S*Uh#crY z;_BggcS}TTqybymyKAP^G3jb9Y9-&n^_lvOx)av0_SVfY;HC_l$O1a@LWm96dG<4l zFVFa6vOw72A3nCcTGck=ZGn$n)lf65cd-q9)!MuJD`Td5g@Kk#yHLbuns?MWDm?2M<43L6a7S8!r}~|dcU1({1_qq-y zmB>8%xLv~U1!)7C`ztW$jgHnfp zRR#6C(c3+hdZ{vIS+wIo!0|9XR zO})C%0;#CwS;&0>!9%H81LAxKNbzdk3fJfxof>_g#pD5U1YCvACLjrh2j%{D85-KW zX6u+A;5u>deu1Oh=ZDCTnsNB$b(M3res8aR^kelEUd&6g-}->X#3}$7rg1+aMI=}y zpja)vx9QdJ9Ru|e-vZScaz5X$Rv+OWi{u|~u^RsRb|4+lJ!TEc2>duIkd?N; zF6{k!{Q+q);>Bip9PEFVAbpPINDzcV0u&NjXSWe@x*%RE;&>gm)8GkeZ-71018wDB$3yi&hoTC>tnh= zzXHgye&heCHex~0gMxb0RA(hYjP~8=u`so&;P3Ia+Gsr43_*ng;DAB^aKVF@2H}H} zd+w`f)B_X^POF*Y-0-QkVC4a^S%n5c*^{$t)p!L@SxgKgq(+-xh=dAl&CSRFqt01s zc)3O@TW~Wx%iZ_yA-0z6{BZNwNF1Ob07C9ZS`W9g>;*@PzRpq$94f zv#1V~9(H+GGd8pCy3D5w_=|~tFlJ24lZOrfihrap1Ag=O{(I6Fy_Q12uerU4 zlm<{1GCn}y0ZJ#|cwz-{vg^&>Z$ZND8o{l4xqB8j0N^7*W(JO<=BLI+zt*=`E}^N! z)47Cz_g1_Dr?lJhu0Z!#ss^s6U3tEzd2bE;6{! zgiWaZ0ILG01@r~jA3!YgvMrE+!#)E@42%owcq}PPEx3baO!Oe z5Rfj&08saVxr3GlF5?}a@7*&ptDw`yXgJ=S`c5vqm}|fOW%2KKE!l zj8^%#9!E=hFOdWQ5KnPw^fb2Ij(o$2D zu>adRwfu(*+0|Tnk+T~}Lr6W>JK&ANpdZUC1P#zVZJrKul}HaqQPF+G#$thz(DK23 zcO0+VYoWA-6apPV0stY=nqO&|ga(m_9P?{yus>lXJi-k`HXiE`#16-tv6M%TmGbQ1 zn&m(D=ossPYev*05~g(B<5%FhkC1jVvLLg;I)do))?Mao&-+J=Dj>H4QZ?KZ}JA=!ny$}GMR2F;m8cf9~1cV}&7_3VQKcB_v`C;}K5X=uN ziVKtG4Y?fdA4PY&IT}S7)B)G{~unuCke}3`<^kL(GkR<`d z1qC1|pbldi^SE&G-!sjhr{#OzZ(=4S7W(Gb{0t4OR*)Qq8H61Nq!-V|5P$$9#ogS4 zU;0mr(#C_9BC9lDi{!MfihuZE85QLJmAuUR=A)P{*A}t1^gb)nj$P3tcMo2X!Z-{Q;SQ_ zNoyo|L^s9KioQMHtn!ITg?xJQ86M+4Nt+k=?& zw!aieEaOaIKm=$&Mc6$kc;ULH1~OYfuRtAs^QQp8!eVyPZxteF>)8RrcpPzgzojrS z0JMgZpdqLrkaQ9ke*2x~{?&oWVb=YirONV7|jJc5z+L9+Q8T zaNIqt`MI|-rEm!Vfd}rez^ly0K0FWr1ZBGbqz}6;&Xzwn;;4dv-)^*C#@|FX+JqXt zJ2Tuh=JXFC$Q~8MH#Y==Sg?>lK`9`S=9dRn4!O7-Gi8Q%y2)R>_Hmt9xs|UP`fczt zA8mj>nh(EB7R^eiG^76`r{42i9w-q+F=oaANIo3FKq`*b6qQC2RjdqvjqS|QRO&(@ zTO0uU`9aA|LKb2<50v5zx6CT2W(uOIU_Fil#TybSsS7jM*&C?xNYGPB$H|srWCOf{ zal!`DQqxJa21}_2f|M}_9%2ANv={_J(AKjMRPGGReBzBoL97#m8Z8x=69S;}%5iHb zQy>!|$w~?jv$loT7A`-NpxQ!CnjGbUqHg zw-Xm`{!&y%GSg0Zfm6W)z2tE{mqOrThnH~>nB*u14KR3Jm(I$l3+Qo1K7l$D1>tN7 z9&(PngAJlc(6@-AFFu#P_VRnmVER0>2NIfa`N?^!T+V zvAmprf@(Xe=to3kpLEh+&-i~>xCkK=Ni?DKCH2?Rt!3^ZCZC{va}O(5CkHN}w7jyS zk3-qX(AUpWRBW9VPqP%4A716wj*i}mJ~X`j23|`QvhqFMnURpIuHR-po1*QygBp%*;PasJn$)jOcfIM07rIymY@=EphF zNNl8>9x@k}r5_sKGUB3#=ws)0);Vt`D2c9{_T4+?wNj|g_hg*&S|k1!l05CK8f=a~ zrl};2&iWP&Q)~*#(&{l^Kg6i*4!R3PSbtUiQNd9>C>BwO2nwri3kNvpeSu#qywzw$ z>NNwud7koGuLtALslH_`&<5A^en(Z_OfzQUeMrLZb}k#UT@ja==6&C<*2F`HS7FLB ztB*gKGd3x2UT7<}C!Lb+m)`ZGRyi%~Qw?CFjRK`?zR-5L=Tw-ylPJA#aM8rJSPFJ| zU9KFelK(Y|kJVxwx-0_v(R@&~wNc6f%3B#Otc!&D!DP7n;vz0Ac(82+YBy#%ynkNE=A}~-x& zZ_SQmrz^v*9itdlQ5U`8a?{93y)@OX87aM47RDUFk6h_K*!04bglG>n!umqLXr_8H9FHl&IkY8pY*>FcD>x zxJFAU5%sRUww~IipN!Z4YtF+~ zMT`;iS%a<-(xpL*tUDmBywQAL?SGKKMwQ2HA`T6Q@T8NrTD-~}tWN9H0bTt*{O{yl#II-#VKLVlLKA}a72(S*{N5W-K z!~g0yIHvbm9lmfGkXwOd2Gdt`siOyjh?HE`AUdF55F3yX2mcpxML1B9Ds`R_7-@u znp`$pw=ZuRwwMW)TaPaI(z=>mb6>o6;Avi3w6|JTUa!5pZoIBP%&xDWdT+YAylk3o z+FG}7S{l33=kje#u9`$sB0}G{q>s1S?7XU0%XI%-*;YPu*j_(rUv$1^c_?&jfo`6; zq-_ek=zS3CUUOD^aq23goL*e$f+{e!-q^k~)?BZe4V}sR;BIZ-*z!2kZ%D6nxV3p) zk6+kal<5AMDH6B3UaW*@$;a_z@2ZWnttwvaP`{SSvTXtDYAUk^udV&)ajQ@6>Sw)C zv!;2pR1;~EG$o_(hZr_uf|y%`VZ*VoGO$=wVVeW7pgs-)LIDwREdGOuWkjh6g?J_o z3kxC}J4a{`1v+XH&}44T!X$r!7y>6t4wN4RG(R0SfQbT>jbc$mD$|l96A_1P4&ooh zd_^e*oV$3Y#khhT=sAwbf|=5pf{BSCPDZ$8X^?Cwg~hNbzoHZwLPWkC3z%gR(IQZG z!H}5+99=vU9ZL8=K0sM3EDJVt2yA|w^bArKb`DVw9Lv%ollda4&?E&VLGeI?K?=%3 z8@bYQVktD({L)3KNKYn|xrxHOBr*OZ>V38%1r;mLXa%Xmr6(NABZ5q(B8l?F1r~mO zm8Clcbg6SA8wIj)gG^5=M2`G9W?ZQjsDS)M1xZhT3mejeEL{1v%;uA<7g%%LW#W@8Pxk4ixwi#KNMR5wS zTq_T8)z9>@B&brN$I|>r$>4O@aLarnD1Q)8od2pTD6M`{xbGT*Pyr zXZRwbjcdwIo^xt*VH+&90Nd1Thmpj7k}dh(eThb!Q)}&qsLzM`g4R z#tjCENDfI)&NkXSJcmds86+thu8at$$QB?R08{8}4?ztOo+Z1S^7iyUOcwfU_j~Ek z0u5TwZ8`VVWRs5xEEbB0uc8>2@!o7^ta6rc2JP50c9g~vAcr#F>{Y9{!yFCH1kq!A zjmkt}AfKHcmX>Xx>pPm(-qtKSZW47j8`jKEJeWf*)XJ~3hlLw5r4DMs`PEX+3pP+p?HNVIHD7b_aP>vntQGjX;~TxX9Ql*>&%#)&Lg7vx3XfLqeaIwEX3rLLy1Gyu%CCf1Yr7XUleZ(*}F6SJ+^1DrEu3*u3g5-$} zY94lK9n@jIBx8FW*U6`a+Qx9~QTY(*_$5V;tz=a8qOkecyD;K#*-;;(Q_g`;>`ltk zDM4kYwS4b^Qr^$wqnjV`y#E%8--$;hRE@6*x}^5FbI8$tSvY^gKGY3#Xj~dX+7dzd zWy|Di#!YwC-eGon`wxpf>u(K&OjEt-d&t&0cmz+B&e1c&d&=VBk+z~-tI@`(h5nKH zTkL6*v=N&%E!L^QC6QMxoaiR=KW?G-jTTr$JQ5wqJ(-U+n9*YWq9n&JiOHupA_UpZ z=C(WFmU)pQ&j7XCO=Z%r%MJ!h|BLjGD_T-9V_b-iP+<-WXjoXh66}`R^E{g_Y~TYZB*NaeQs+)2%M^fP>=aEyF;Ur3W2_^sP;og! zbkz`L6Em*;J&zbHx$?<~>M6WPgdupk#{M{;SPbg&{PD&SDpn-r?KOzs|3=9HAeJwX z2k@t$U;%6pyN!>Et*ilCze)tMPw=t6O+Mi@Jh;7opV9y7ZwRHP0x^@mEe;pPWOeOv zNX_}JFyIwiClzGc6C zG*H7obahkE6Q4ikGH)32oV$$KP7>1Np9f)j10HFV*h2evjyo33&6`rCns9dQUJqF^ zQ(M~JokOyV6@3H|1{2J1?Svyi+P_1?Rj-CJp@#Ai#jB>kUF7#AFA`^q2xlu3R01F3 z8H<9~LU^f=q!ci5kRH6H6$@_3Cg2{KKyR*81z;&;Rm<4we25p4&r8tl6AlCR1K4St z4Ok#K;KCHG2sEKHp>v$uozZn9M7R!@lj;Ji8smQPWV71jb z{o`aYnLWmxKal$ycAEt@k~%!{;!n5qv{k#7-Wb<)<-c<4IOYqwjLeQ&URBXWF;yWY zMO6)+v3WD}!P9@n>MHm)bMpzPLrk$QA!=-MiYj7PP28OsrG=G1>;h#HR2VYXBx7Hm zPt=*dxFkOEKVaHy@xj+^8ToN#l>~>uFrn=M(>f}k9c^=6N@svu7$h(VAQ?pBzf=an zKkdU7t_sB9;&qrwUHWU^Nnyxx)%r*pw?v2=mgpzrJP(IhxRb+V5+R(37WsV9E}hIc zkM=$S^#cCLa+hL|o*kn6N|z3*RBEMUa3Cc@%9?P*;Y0?Z5Q#i{18PV*fk7i#)o4I8 zQ2-Bm{%v#We&8U1wB?O(=&rf1QYIr6K@bt7(Kk1qWa|WJ-MBfT4>^8s49E^$l6}ZA zQl65Yi$ROnHVG?n@<22hRxgFLRz{=&N!@|r$5>0-m~I_iOziZQP%Yc@C#Sd@LCwS4 zeE^VodM4OA>=FBbL)5<_0s8f;_zn zqN{^*u{aGVgWjOPb|;I>n9W_-OD=MntyTQlki3s21w}WJpfs#1A}Ev1It?6~^|jc2 z#H3=OHTL5opc%!DY&D|20~S-Rk+8F??%uO0N%fU)tC z6PI)GKd*@0P%V~T^fm*9TQ`KJSl1zs#>p0w>k^>+Y-NC7 z4EI@Mk4D$PxuTQv3(L1LPMG1fgGVv|6=Mwx&U7nb7Luq+Tdk`J5sacLXI?Wl?V;zB zK<8U_rONL4k0$`NYs{5G;l%Aez)Sqq?o00&Ngo+HX5Wa(u_v#uuWac4y|C#KHfwCvz2RBEQdW*qp(%BO|H{ipOIqGdJZaJQP2jtXZ-p=uCoZlG^!wEp!^Ni# z5kfc4)idbI^0e_~ZPCYDt9v^Mzj*%i(S_hVQ!oeLZWiOm=c?jcLU(2j_>S?>uhgINN+-i$aZ@Y9-N#<-7jt^o93^365Z` z8y}~S>IhT>n>_s39bnue@E(%UHf#68M9uCEg6fbMn54tXj9+kn{k++&QRqW`pgI1X z7I=GunUo!~wUY6Ld1qjgH#>#Grocr-JC+MZ{Sto}u}jx!6HD>Yn!u;qBtJMZ>-i4W z)+5{euxY#uYZ-^TZ6@2$;#4AWvS_|KVHbi*1cJ&lu_4Lv2U6x5Z$TA zJcT(0BW7<8Z7YrEaHSXa^9#OYsbi!eXw*u%Jw8BhSRa0}l+@x&PLkH$$yU;oY7b81#)-GyYEy3Z;FO`JUj>kI~t<9JNNp&P%n`u zAI>g@yzP~x7#%vGx{X;WG3`-Ew>)uUW~Ubv$EN(Mwe42YkO@ruH&-$O10`&fW;6J! zj~2uzl8fj;+12vG_W}Qkfk?A?I*R_kH{10L$HY^G|NNHOh6;F)yy?roOAT zsVf%Kt`{Q;lg{DB+lG~GQG#t@a)z#Pif%>)xh>b@B-dSmZBg#OIG)28T{YW(iN?tp z*6bNuO8y(K1Mk{YEz_jKx7L*XFUsK_rJ2RsR~-kprE|hBrM1 zUMr6h1rL6i1{yCm{(jeJ4MA4Qoog16>Qq^7uanpu*ZIcnmU$tii7?16HVbyDO3ltb z`EK?PSVwzbp?cGV6Y-R1*H4Dq<=#$L&8n&A#}yKHs7E@kI`=UTp2T)*M3Ccb2K8fv z#Pxl5+#g>r%5r0~m%{9-ixjy%Y@%Pj^9h}pIIynU$tNyZh|ou((*|u_h9l{l2+$B| zx%y9;#!0*SQ@{2yx#U3XiGtf7&cTno63K(a0@mj$P05YYe08X)R6EDa8e0g_^KxAg zUmC4hND&x5(hwQL@Xd1JEfuBu_X3zka0D8~{*z05Vv;gSAzA9{lT!FFISRLqJQd4X zwT*MUpX*TCx^z98BW=Ndg`Y?W<)<7wv{#y#YYhJ6w$PKB5@C;o@-H`_^|Us=G%c^c zEzV9`H*U#)Iht_`*tOOEI=sf6krrQ2N09q05RQCoaiFSZY8i|ex%LhBsljW-b~sE; zehKt7yW!>h;amH64SvyY3fI*`yA;;TQsbWpt5%nGCcOu+u*JsuB(&rZl!{2I9<`cZ z9hTRt^zdCF+#Ic#Y&-ce19tIVSy&P6fYU-qYrRv5+552*j>jr4|Lb?_K1(TYpo`@i z+8ZwDyNJNf%Ay)vm!rjkp~DJ2ZXnOh9ba*1e+a|zebgx!YAgzvUf}qI=LOy zcTp{g8c3K%wAYBm)2nG7o+?kU&Y`HuJjP{x&vkgtRt{%_**Cz)Xuo7ot5`T`EP2l< zYg@~)1DCiM69~&l=W&18JWdZskgbYYG7gm{$7Ltx2I^Dlf8VBMO(@sSc2&upmRicz z02Y(q%izP;AxT0PPRNDUwAJ%kZ#dL>tNEJkUlyMcFgn&tQswz$eqGKIWIMhY^)Nf# zBk^_pr@yV*La@yk^H5)n+~1azMNL+sok>%=ge)78)~YRsl&)uS^fMN>UVeMJ;+GEY zK#puIU+q84;jG)KRf~K(rt}|Q1{H2vkP)r>bP`FU_a_GuA>d&qNm>j>sSKH3R#8Fy zW@cOutIud^w|l{&EY;*9hnE;*d1<+>kGmAqV!*>(1HlxXgk%Jh&aFG#0}C9C?ik8y zI#|mp6VNidC}u_F*qwlJ_rb*U{Em7j0sP+BKeUt{7Gi<1C1(tm&m)^v5Ssasf;!*M z#NRPA?JsUFp4}t!_^V5M|1l-TKflb`B{Cbl;z#POEq}v_KvP-n>*X--N{5uVvAF~# zcjCI}w(7BOC*wW!yut~wxFj8;^e$~?c=%g5P?&F%!q9dmte-9IBtOS*8G%t(ojYv! z{&9Xi6@Qbz2nGI>j1KK(CllNYRFtyy-OqDl?wp=zF-V)Ilwy%e^VWFEs$FwKYAf+b95;mU-EUM1df z+E#j-v*oSc-C%{=u>qT`r^BoX4o0Q)A2y6(fNLo*x!b^_TTP(oj|_V%e=VMu%0nu* zU$O()>9;${1Sf_GQ>3?2r_*~*-XzA!H4QDqapeUU<`tT&&2RTqTwM3?j0|h#B}vhJ zLdDg$ld}c#U_Toh{A`IrAD5L(nC~PG`jEgwgCTh56wQs_Qt;$O;aE~0AvQFL~ToZG1K3WacO_(NK!jFFt|Jan(KE_Lx0|^XsoJh_7W6nw#A4PW#Xu|h56Ef@Z81GVrU>zdX2jd#TFoBy9Nr2c4Q-z?BCK8SA zdWj#}b9J@HA~*{?IJ9gYae8Oid~1s^_U?=?`JQ}vOYzi_`Tpc+VGBv&wIn53i_vrZ5@Cphf)o-(z`9mKXBl>vUK8@g zRU$$h=PU#P!a<+C-(GsUOBMuMtYDh^_aZ|p2MaA$2%S+dp%W9G&t-1b1pp?NTG5JA zP7`v6H+<$AUif$n?zdCL zB8Epa{VJmGw>!B=kmk#QIM$xsWaybY;6R)@COvu_q8r}&NGXb}D<=*tELX9E`7eu7LQD7Fq!&Me#l+Y9y6Ell+L0S(=L#(NtR0 z(n;m*&K}lTW8O~LUk}TmPP0LT!(LG-T@$W5_$wRDKJx7{)O-x&y!PBWyxtHC{DTQ9sH^!z#>u%8PG zI7s)W@%+Ph3BTqxY!?6YC}S_Xm%Tom?(*d5xWEc{I2h-0yp`^ahT96~7H&FZYYqQw zS{E{dt}J~M|BjobgM#Xm88AR%^YC``8>O*$<9bStfYNYH1FqdT)*nMPCMzN4F{J(( zsFV@RuAH})CY&>GOTf8l17Xi4-x$ucuSqmeN8r2H(4ED9J4*N>@tJ zA|3-dBbCYOy?7CSZb;)*{zO+#pTL#}*0ep`rpyH|v@=NHCLWsZe3RN*Umw{PcDr(* zV`4t7sES}~=Jb-+VbdtEtt6vvE1Q$fXD)~>EEY#-4%k;ELMEq2O7O5XWn{`aY1_&n z#+Ea*a9LD0Zgf6{t<6S5Lwo&+sXV6@l8j8T}yR?lZF&9l*hDLC6y~7*tf7u}u7{GhjZ|wKI)g8fJ?y^-i6STgpN|pBBW1jk1 z>LNkxwUVfxclWL?!fjgqI6j$$&LYwoM*Xk&p- z5c?Y;e`+Ae=fBn^poVuiX) z(4CB{`;pwOrMmbOR8*R=x-I>K!U*H&p{H2f&bjnXm1cFCk)`_ z#GzTB&m}$z1!f)zBw0z&zZ~ht_gX-6(@~3@UF8Hr$@G!St@B=p`-qE6TLj&_YWHVn zfQ_VZyc=p)3zd!nx&%F*WBT)luvJq_YUB!T`*zioy@vrb8T0l90fG6oL)XFB#ohIN z#Xia4#9<){?zsJxyRpYEt7II^8lzD-Rnr!xkRkz1i>`gY?kiI%@WV}TPv!SC?va_^ zDWs_x967A}@5X&OA;^>njoxYXW14ebAv9VNv^u8xrYBR2&DeA=()(-K0==0iEZj5m zc(tkGq4XZ zn{Y~EXnJKcEa{~@`yF|nc)#~7Wjn4zE{ox%oOKFKzwUVi0Ou7bnjp-oP>_QL8cC-@2EQkBz3!tHBi*IV zxCBQ}>FFsf**U}_Ryp_mxm3W`8;~o?yN?T8Y2kzXU?*YBeF|1Yn?{@M%7pLAhw=8Z*ldfJff?Cr5I&b*61FP+> zBZ`|QaPHXXfEcOzfBqkbXq+vBnw~I#>3F|OR zJfS7qb1LNSZy|p~IYGbgdJro~RVD4iYlyGZz-Hu74vs8zyGZH!Zwlzc;*$n6HSVBp z{Oj@?4_DtqGvOS1t*5V`UY4etZQsfg1oARz)@(Yne^_ZzEVGKGn7MSnW|#5r$ci|e z)2(Ra^XrO(%u^|rRItcQxUa5b_Ur#uWG73xm)MmuPBQ>YJ|VC2W3aEio54Y&6pA|An|O7=WMDJjb25~yK{Sf9rBK4$<}Igu!(QS7>md2 zxEl4(8WZfn4SR6rV`pLYLKH%4eKYe4$i+ed=7~9PXKle+ntl+#Dod(L@-NXm-Y2oW z<>PU81JlGu333=sOc!*vSSi)sqyFL0cZFIGi4np7`m3Qs*tD=JC$1sVUtjE2Pc)1EsK-A>RoEvjx4*>v*`V&vT%r)3(+_1!GfS)C0~@uV9eqiA)%fu$p2YvX zy992ij!F$}rcAXV+I`22=>Phd;QxGNYKR)nPHj?|Ab6~>w6bs#2z7LnL)R@ahyTaz zg^N~3*{EAFlB6O7t0tWzrJfs@7nX*Nl8+q~!7lH8sQh76^*7hDkZUjBR=&Kp?Pm1t zknqvnXj>Iy71GebJeB=*NLg0lx0C)1+exI)W<;S{`rqO~npeJwSyY$imeX{2sGyIZ z*pF4Kjy^__f$i!`wF<2`ow!3GCnCDq7eoQRg1zjez*0c#?_%SvQ9J~{dxTO`Q;OkO zSSRx(cAQAZH6zcQ_z4z8TDzn5?PxLh9wjk|D-lW!=}Db|1NbMLA~Q$<*tXsf5ff%J zOShp3rq0EC9G2rz12?oI2GTIiwp7;)zA`2k^3`4pyjR63iyMkW~l+S(q0Pb-bEg9r2YU;X+tmpCN6dERWhB36fQmmr=xI3v1qE#*v z#iT@MmAG>fDai>1)q&KH@!>Umj#Uq)!S%Lzdf0PFC=ULD=XPgs9eGQUx4ow ziv2W;yn`0?Nrz2>1Lxp!OEi626TXzqYeR&=5>h!b)TXUDWJ9U8hcbA&qZ+&LBZx2O zZpLYQQnnGf6Il^f&N|-h4-@h~O8mf!UzK0n&(JsSNjZ12yj=-}B_}uMFK+>ZoyNh3 zCCw4(X&2Mudx_>UDSSK2IIPWBJ`tEF>Hf~R)X~g@SCVE%jQjrbcjPD6MmLqeQdO2?xq)xjjbM z&dpF*j_)DCBndLTjHtG9O9dRMT)*t!cc`6!&T zb^kgh+ax{Pf0v+u9s@jl8lUN8PfxhKaigk#Ht?74g*4+M@HXRb^D9U&IkgQ2wsHsKLi|gi5Dg=)g(T za?FAC2rpil9$Q+?yBPXNA6C61`$+5ymI}M-)OYz7;|cOKPLlITp{RJllev>>${YU1 z|9x(vPpJ8$b#7(#V-wIy{&n;+62$fRpYuiu^QJ`F6~TK?i5)|EroZ-j*ca8*%g^Gc zr*np?#1ohAHfSi5k$!9Xtg1Ib*PcYWk+JsocsdIISz%m;^Ir?G)lu0nc&MD)-_T#^ z-tMTZPdp{*f&>_b;ZSjKBZx3YO4`Lj195yuU-Olhdho(;DgPSD+Vw7Xsm0^( z-K%+f{_vX8cW7(aI9c16JtA5ViJuPTo7 zbvjDZ92RkF(!ONjSwB_`%G^kaO@e!8r^|h(N`gX|P5c`Fkjs0Y#ba(WHk)D;B}qs- zN$HQ%;2#h?kmQj-)o_f72lK2ENzxLF>N4;+g`$S|*!{fC40jc^zh1)5ZWu(xLm)tA6l~-UeZ2i!^dqT(- z5d=JCWM9s@tYN9?DJ`ErBw>gO8z{qwdDjUmvk0inQ~yiRJh=P3m>)N=5nspLtS%Y9 zE)q+bed49X;tRDKT5efwB0}>q!B3_QrdOjcq7j+Hf_+-(vtAnB#<(K}Cz2KxA_M-q z|N7t=mn5FR;{B(pU#r^9uI*v%w3L~utACgH(jC4{(19E;cNdpuH<>Es`_VIO^i#3s zh9=m_(#Ms9J}bAS;<;-r(M{2-l&Z1L;x(Dq@xo#3xq@Mw$6VM3%>S*vBV)mz(4=j2 z-4}N647B2JQ(uc8nLF^lp8qQL3?wppm7Njm;=$v4RB8+KNqA-STQ%IG-sc-6^A8>j zo|H}iiLU|&1yOD!0|kYLho^-Tk%gcJD*ES+{}g)|yWY3smzE&a7~akT{w^<|^^P~HKmR^ejvpkU47Xuw3o2xW^fu19aK zJCoP4L#%IcUqrsytaCG1Uw(*OI(x3sCO0AbzX2;qLYkPpYZ^kLEN@!;EI9~_ z%5QzNwIEE`%sW$g$%3HL@nr!R$cswCE;#G2`m+CAn!6_rNrnHtzvpgz_xv?MZ(<=uwkk0#6mgV#VENOYHXY~0N#rhWe>bT=F7!R| zr$>whjT63sixeSNW>el^#|!!oS*BH^;RP(&gHw?G$rBz)tC4ATxiEAgb@$CbstCdr zw2y|?%a5CB`t_`Lu*qcW7^KabgLK|U6(YCCN34o`Ha>&C0ZE2KDCL%|6r$A1iO5^S za1TvHGE<4xZVcHK8hT>B)L!yhmnk*gH;b3P)w z!31Ibq%2u38w{+iNJONHVEFIf#QWh$PGBGcQKn0T7H#9qgzVQ;*zr?OyonV&N2|HzJFZwamR`>)Ar%d+cpM+mH znF`Zu2_BL_K-cvAXaOIgo#e1#m!_!08Uacd;L|Ka|ys#W^^aRK>0(U}oTherJcNZU5=7K8f4mLTu7D3g zf+|z#CjY>iD&8>g4zK!g`JoJC^AD8WBB1;<1=E`MGdeqyg1gaH0cqVHth@$s!3m4^ z;qLYs7ysFP8seW=Zyurmz8D3l!d}agjO!yO@9B7QsDKj(*W^-bg>=)P5tJ66|v8hwT!=BSt)m?c1qcR2nU~W( zt}^=>ap&Q+RB)6vJIZ3Za#r~a;Nd~JnYO@;bs27cL7ew|ygp(qlY$-T8W9?p4;`G8 zpMi6BNPaKJne+qnd5GOswGxs&II>3fnvL3);2bLy^&0S3ROlG%B(??fe%pw7+%rQd zxhDrfn#=VWE&95n7kgDP%$zkRl#3x(#jl>2wQ8~&@ zAy~^!V{uO~h3h;wCf52+!|JBvz5tguwlb`#BJ!`bI2T~9e?3%eRl^6bL4lsU}R zj0R<rtPF>wUVavcfrK_2_HM@Fc?wFkP?{;6rx=E1I8}sP8HHLkR=;a{HSAsc z64d#$-ALVE8sl?siE?+0w;oiB)hVjvAfj2Y92a@_ag|KE(9|U34o%^{@e+Xuxfe7evz_z6sIEKDpg)YJr+#p`Ah8QUJIY$+UsH*q2K?>m`qVHy=CPYf>)T`WA+ zpm<5~Jrjb2SK7S_qDdA?@~-nv9W-&x&jcpIVDG`Sh4^7x#_RDLy1Iq&@MrV+H$CDg zA%r?tGS0Qj?oe)t?YwZNlfkud&A)`(-i8C=_d`Fi`8GPUju~r$7JgKN{@EGm@jT}M z-UlRPpRv5yX-8M6aa-``IUL+Up*w>4z9h%6hGBfm?@5^TJn`Lh5i=p=ZC8nQCmeXn zMLzHs42f*;zc^q|@hJ1?G!nc1Jt$BxcX8Q1gxMA}?TP5wcn+$puJy6Uh~XQvZ;5}M<=&_EbY7C0w+lmOm6rhsW=d#1uKBhpZRhmzMu{Cq<&e=m{R z(k&qy3~4XBy=e+lj5CaWyTEoV(fw#g%<6i%$vB&Qt#bQ%-YPN(%wmyE|F9i^M0hv= z;6)(VLw$l_z6WE3KG_$u+l?s45IhxgX1L0NDMSVTFw-$bn<0w@^y4S|Fo=%`B#ltmaePCRL#G(Aw*p(WIf zrlsDIP;8>(-zla7@CT+5|I+Bv{`I4OP6AjR`rg0$O=JZ?(+M$G@%jwR!53fz3G3QS z%*MT`?#)y@v@2V(47JZlb}2bfLfOG{9-~~0!_eAN)l3(H1mw(_$L-*sH_ziSO#Ca~ zdSt6%6JzG>NM$T4f6%`*Y$xQZ9=jYNx_L|bmHVWt-xAy-P{&%&llsDNkqSZo6c78K zAJ*~8J2r9`hvrDJ_(L}zj32~vOlvADK2RmvSOGPH=X09Pk~2#R1%;sNJ=!y6w91MG$3HnH6G`KPup?_G>_7@wno?Lgqn zz_XFkQ+B-slStTz^)E{%@HU@H&cHuiL zAq(p1j4AV$)^bb6k#tfp>rt3qEwAceEhg%*(y4Fqb};i!Ba)FmGb?~o{mpDh4z zIIf@*uo9aJEX{W(?oUw~gaL{@8qh@Epdv%q4ISkYo@B-0KomB?m0Lq1pa==DA##cM zVR5u8Yr#eA46x_6prBVr212X!CNKvnDcR%~zOcckgbWx!@P}iz&|#p+Q?@q4g;O1q zX4GV;p(2?br>Q^dm-a^jG9svmJ2K))TSgW#Fn*kIgqZxZWd+@K?<`dX2SQ<>^V%Pc zU?>St3<9;VA_bEO+MFOod?w0ahEdpOO4eb$#*H?G+`h0j7eGAP1$Ccs%Pqvd(`M!{ zFc60rRm*hWFpMZw|Iffr0bRyaxwXkq{> z69knQ1qw`voN%lm77c?xteQ@Ow2~7g03}0cTr3=8i9`y7hb<- z3xp7kK!cGt3a9`L1!0qBUg1`1K>oUiIA+|01;-UU(C$nnwSZ2DAcME+M?6;U?EhH(<9>X6e0)?%KjzT{skpe zV5tH5MC4||#KiHTnx>YL35NdpSfN<#mG$)rMi=ZD#sUcGnA(!#Kw8?Wt`|JmM3Gc8S1 z?kC?&Q*Kkyrsya#k-dpw1T6mxmj>;@2nRFN^ciDnBJ$EqS7Ahs7&T~CtJ7kHqYwcD zz#w4${|?y6>RxLW?QMZ`T8sugU+oG_g>3=hKssGX0 zVQUnB6-E=*lw%|MkG%Js*9G`S*;I#aedj24Vwbtf+EpJCVZo5+j*nYIokEz|yI<$! z^FM-b$4~8!or&WG`yh*Zl@u!^tE7oHK6WBC$Ml}qq!`{ZDkE;>e^V<{r0lKKBhEHz zbyyLR9bxoI)S<`=lV3rg2{%qnzoQv5BUclscxitz`h?T@emLM9|jX0u0VKoQ9DTRP@n^1b1$Pkl??WG#WgO zvBr#Fqz|U0pulfYqI}yu2t7|o5Rq6Qs7Mz%beA%X5)@4e>diPd(9EA4#RMzdDt`$Z zP%M(jL&hR4AqtCzLqsARqE_N4LqiJ&UVlBuC0ilM29F_SBc zE-NabVWSS$VyaT7$BgdDqgJS zJ%4*jUjc&I3*D-*%_WvW?(@eWDSP&nv z3giZ}0{+vx2C@UXVbF;X$RRw)756}3Zc`xL$oVZ{2j$hIV3o8C$#x+^g$K1LgdnJc zxRqxhAc@&U!I?k-sK8}dR8$B$G;D78_(Pst8h;R4=z_>Di~O)Q5WPr}urL(h_pMBM zsjLC4GZPRIWk89KIgn8e1w=N?%`XFI9{@ERto9ce5P*045hS_>Ko%j&V^PV3KuWfw zsrxEG@OLssEmjnnkEDFZLNqWdd51B$--Z<8eFc3DV(dxbU&43q=cm$0e@6gi0Rpb3 zhr{m|AcW1YZxPW8BVhdPmlIg_Fyl40Buy(x(bh7S-x7~~!*X|OT#_2|+YX0;Sj@8GOJWp)5seFCLZCu- zh6Zr>pNzJI;_l;wP9sk~Xxe~3&lAGG^1LwVouFRZH3VsBfZX-_uoZly1AG_>5%H8p zD6yeLW{~5F5dbENt$~;%E7W&;*@qTZB;700kx-F@0*se8$_&ApY(!cZaEJbSxC`p+${z{=|;YJ76`Mgq~ip)yCX&qukxPW5` zg`gfFaRJLQz{2<;T(-ByAPwZ-AuHZ}Q^fu`0f1Ng0Zau1dPq zDE$ZkMx~|xN2jYEy}ranWr+U4&@g=3X$lLk2pHY?U?MbtWPq0?C;}x3c|dA1Axg5g zXfcE|hO@NEv3W#8c)|4usk&~XP8;uNw3RWSLSf?bE9QeQ$D>3ynq4^(FB@+Pf7+V1y@Bg zV;M#SiGXhRBMnXD_jNLg5WbJa4jsO72u(URBg(Qp)Likp>Y}}L#hpv&-n+0(Oor4^RrU7u@e zf^Ua-o$?8-#EP0hzW_abTPsCc@#TSzxxm{`ed>>wt5&qeb_Xo(WK{S)1Yme18c3A~ z2qO%fFu5|A@6Geu`VlDMryL?tjJjt*L$FAzH)st9!Y?W-P9e<$>VKQn^prmS~5|MqdU}&&+!quf! z&&7{m+`7ZTGw+lw36YPcpKr1W9`fDFZruk`_nZo*AmT>%*$45>8Ihs{g%qx)I)o{x zx0d5CBXHsf5)P(&kxxI<=N)C9RJ?kox9;C4EdDJ)h_}1_OvrGsV4FyTDZ=h&?m6hl zfo8UY>t%%vUe8Q~za@HhFTuUTg>cU>VRldfI8;GYjvxbpl97q9vi`(Uc)=4atO!#? zgXp3a6{5v+OwwRPCcr?hQ#=S-VXzSMnQXk2oz#*$3kk*!#GJpWNNui2_kyRj9$24t z+JtcZ5p9YDXg&Vw;0(wB+~wx$Kh_=roBF@@Z$1rQ1rwh1NvH2c2~5k04XzCeCbZBT z@vx|->8SAFx|f5GUhZwGp)7@qx{@8i+EG$aP|%b@@rhEf=1$MVg5IxM{^4(W^78)- z-7#x=_4p1u6xp;nYBpSi+H+>VC~?jl#IoGvd~Q)KRKAL9WiH57|M$Z#Ts)W)Erb{i zK{~!h8~;Zp^x!Fbr|+d>$JzIL>+pf}i-C!>Z{KG+{YiiVoA>etwMTQ_T`=0oduz2| z6mjDZrzI@R=>GwAK#ISp@M8*ykdi8rqN)mLDK#QwQ2{kbBGFXURaI3~MKwxwlC+1H zlyH#-g2Wg?u|}jJ0uZTQtmiCpBjxM|w)Qh0KjnXmLF|A1qQ+c{po)U;)4qZH1{nQ! z)!SF#&*?bpZa10nVEF^#V{jPaDj4XJv=t!)q+&ux1IYS+_snZ|al~P9o$Y6J`RQ<$ zOVn>cIfq4O%9nWkin-W#xfnonTRuGg0dxl9N(mvk0TDytz!@)JnS*T(h;qV5)_Nby z@_yIz2e0>FzJm(yMSNNrq%2Rb%mW#>w(VBxBSzT_%wl;ui5|OAxgs2c`6`=qaeKHmYkl1dV!0i71sGN-eJb+@f z+r79rj~2dbRKXJ9=XwVv8mYK$Q{LIA0ic3{2>|jihi4;HFI@j z#DriTcl;0i|Iz5ZKi{PuW}dp~=xH%SUYsz-Czl;0-G6KJjaQf;3G&F>XGebF@)R{g z^yO3v}T80 z7DWpXkdRUy1w4L2Q=7E>KdU9vjvQ=MHCEJTB(ZMP>fPhdXJE#f; za#1jaCTbE$kdWK@IyIzicb!?y7&U+Zzy=UJg527T;~0Lzvpz> z`-0HqpdpTsidF!P2ns<2fC&1a`uWLOcDpveeasmf9UGIRPfBHU8~t4NKSOq50_>Zo~7vOa~E{O zkHz+WIQ`A2=`Oy^RenDi$b1|atz10*Pcq@gXdJg38{W^2^;qTKe9ml$HK6?xP$&?t zDgdO(OeF)_m^dK}xGjO1uanwS_{00Xs;e!%b?kTT1=^x=03r|@>c#2yBxRs45-H*ebupUBw%BiZAmu^!Sdx3=yT;do9WBf%yy z3PLl+76I_g5^!StcuWKWLb*995duNPqWZw%QXxhiqz4fL7(|1GC|4{NLLuQ~V6qgI z$ptvWf`XwKRV)V1VzFSDvQkw)eX_9_IRCCc@pB{E_G8I!BfbyCyl4FU#kGvCSs@XM z8E63*QYemGhG!s1kW4d^%{=4c$Sz%WHk-uw|F0AGX$L`<_4IaqU#vcu;d1-`PCQui z+Af>TA1@ueyxj%73;_r%K!a*PNh1WI8?*db4@33)4H(!T>1C|f$+lOIHE?LBXg;Cx``KESMu z${G9G=Wut_OZtFq!0$27K+k=e0pI5@&|YA0;e=Xx!Ia{7Yt&0HG_x~}CF0kid{S31SQV#gwqWR8Xnyp(FnxgTBkfzCQ!V>Ja@vEEut6NsaWq-D z#%nABW7v;h1t|c$fTSQoBEApYvH3f%?PvEpG|O^;*m#tI7s6Gf@{4+)y?3X<=O@|& z0H7ZglDEUbT|BPU)kq6*2z~Iu*^+l8838bDD4ujlbr>>`kw64-JmA2z`ZQJW645b$ z#MaRN*C+l}OfWqiH3%_OS)fv<>4V?$*}t#){?B1`c5B>xq7;ijmyiUh6801!1~5Yd z2?Q`Wxj$#Si|#yH0m+o(+Slm5OmP3PxsOISsxWc07JUtFm6_>*&SjVDTgV6Ni^FlJ zfv5*LiUu)oi-AB3NC^}I?f~Br3c&nz8jLs+4*_NN{||}D=J!27^1d&-y!&29loY7t z0copzrTl})yWHmK34{tjASOXOj<`B{P-g-9()F{-|7ngLfBpw_4{ml8AH!#Bd%MMA;dmkP z$NLYb&GsD6^5Tc>4kzc1&V}Xm^#T+P(L6z}5czvH<i39V>Ld{7oEB2yxX7KIV5s6k50U{!We2Bj*Bvb3-& zq>YOZ1xj#3q~&Io_6KNoUoN^PnaEyJ4>1}_nh4kOi3J?kqH0ghVF(OV7b)ZO*1cqW_ zVgn`pFMI`0i{j-pxDoBN+Wx0RgoY?Mhz-I;qUcEh z0u}0%B8gT&+$RgdaJ)~I>iG{IJb3Zr$B!QO%OspEqOO4`#j`$(lVJt;00A!#8y7I5 zs;kqVmFxS#^W*3J1OPnW>&xuC_hc%;mHh2~ACp@q4ZesTh%t0v?SYaZ_{jtkNI;2% zA|fOX53`*u<78)Zx!SoI*N+}Nc=6-MnDB%l2tp94&4@sfqqG;bU_QvR{IGyR&&_Jl zY9U0IlD0O)Fp!MIFw6r92+UkF7YvY+B_J?I9rSZNaQx%ej|4vNDU8+bG`^754Oe}y zACs2G47fer@HM7iW*LbDo8~rKwQH;J zF1ct-ANy+b0`a@j`T5Y+FzYy5IT@M1Y|t^90ABz1pP9>e_V>OC5JUA62i6`QJ3udn z60pL3jCcEYec7zmZ~ED^M1+R4l-83P(c|9tzGPM~7Z{P|SS4Jk3DM}Qj3T$gqu%szU1d>Q3l0hcGT${n{x_;TY9xC}~`TD?Mfq)17 z2geNc5VlSR7kP^O@r=V{VU|2(5`|d|BqmIPP+D3T><&90j<@5lr6OWuOgwn;=9&vGcd@r4DEe?i|~GLY!wlp+~_xQ z6M+71I{fcPH`C|Qe}MJ<;Pde}~r(+mDUY>7GL{%)=uhjEs!T4E}WKI1^rN zT)Mthh0#|5r3d{6gdFyrTOtiK$TykbKmd(yChiWU#8*ii_`{hbEVwW^i+DyBHbzE9 zcR8KTym;~B$B!O7&cYCT=9;2U>;Lb9^tsVkusO~vIm0mLICGpc3Q~d~Qj`_s_p)_0 zVA+G8!~6O#snxhYzas(tXlX&fRO&DQ>1vq+`^RtGW^aLpAPhDdLIDtjNo0g?*OK*m z!r^fETs|8OF)=YQp&mSV^Fs(i5PRQLhQHk9#q4&ypE;P;+Pf`l1r$cJ42$9ZNApL0 z&Em``%)>Jb`d^Ls-qY*H_+$8ezu|hE_oG?N^;|C#)X*Lre?aw=*I%F8dn8_YIhD;#{LJ);Sp}XIOYUgkFgX%tq&Glzb zFwDa{{b<%cBD#xyz@yvl$=aD_yY1pxp8P!LErFY3x|cr+Cbj9{zI$?O5k#_^>eqk)>$ zgT98GUu^t+PJ8Fra~wbO{aQ+QopsNNn7?`*MaKEH&ySUDfgFa%h{fPDVIW8{ z0U}5;EPw$B1cHPB2n7$4^k}#EUEd$xV!4&+LE>B1GLlVBYksm35xqXREy47`boM{sucdrMc4SHFAIHx@YoLU?Bh@0MHbaG_(OijR1px zU-JBZuk?1$ne={^x5=c&PeR{&T{ZpQ!`S(-S^qFMMtqzG{olJG4Dq?C-!sr*)Kvd` zN~@jj&l2^bqUP#cbKcKRN&>DYSwRuN^}yRzx?KtF<#tnG>-DXK*nEGlSxp50C)HB} zjEwmzPfqyeTzt|$-^9&Eas#JY#_Q^$vf;4MF~9e++57_h9hVc0xpL(Ckwel{^KftV za=Y#Nbyd0?-U9gj$oypcTTbTsf5F%La8xDBpXA~3{Vi{k3hId4Kc8MQ`;otEd-9#G zFB?gY%WR$hI4j!k*6Xo!`+HyCa(kbu3JMwml7^OmC{dsY1r|@98BELM7MB0x*uU0F z^1j}!J{?hCCd2Zpd%w*>>+{u?zmI~BtIcWT{8#;s(}%DU`&whZ^T+>pLc_^2BpoTc65t~YP>KW`gT7o%*c!|UTb&DjhM�Taj5lNI z&#a&RwfC8A&@h?(pAk)zo-cu(-!(e&;VU_;U)%Oo#x659i0yTn{f%F(g1UPl)t!i? z`4N);S9rMm^le`{8-J6`$@#uZj(F`Kem;X4C2LEA7oYxW-ldPTpSgSbaa*)@yKDy^?f$I&xi~)y zbA&#AEw90#ss2&^oTk-r?f(3PSHfIw=zGbo6*qQmonIHg{*E)d#&e&0(H+*u)!pf- z^qB%ckVytakYoU*27y7bOqGAri}z#odjNP$NbQtRAs9p;M5G~2(|MwIJdeM)4Tr|z zJll0Z0f|5Wl?4bFxYjvj;+D%w)slIo>okKgR^8sW!!41keT4;Kz#pye$%&Z2|BR5V zkkr7?)dO~%A%aWt557nlFj+RB{lV7)!*>P%I#KoeZX2u}NbKl7(Co+QkIf%i{6Bbl zfw;>Kv~h#>M-)Bxm_DffVaN|uIl;h<@blxFPAoI79eJ;40$Ol^m_9JUL~9!PmX??&h~H|+*? zapW~zns7DaM$B#lck70L^S_R7?l*z#2Zi~2G2=(h8$tO$=;@{%2HbOl>gTtiyN_?# zc3anw7rpAb(euHN*V} z=J1EV9&61W&k{O;%2|y32<*qB@W(Pc!T-VU_)*u7s5*aeZUfTTCTGMSO9jUzyWtyQ z+I%{};Io6&4sOm910Mt51ye3Z4-t|f ze}A$Em#CEob)0*B&}n>9u>kh%_f1tEYDZJR2F36l1#er!!jr*yF*jIBCUAaW!~&!i z5Lm(c$%AYL$Q(%d!}gBYcEe0K(e}sn591st`6EPhnZeZ$95lnqk58N*;p+}`df~|~ zc@0F7MDH>_%7i5Bo~3f(_*h!obP{i-v?z8ziM5nrw451NyzW((XJ?-2Z#eEV)g3mdd``%J<^9)D(EM}wzKA@kw$5U^mXntI3VOhC|6aqh zM(5U(0!SG!go30dgdy;eYE*?Gn%Hf-9Tz{r{GPfX0&!k%`W}-_;(XhzkZxexxvAFa z<+k;3_?97ZfehpOw!~Vla@W_C_!%O0J#crMI|u6!c^yCAZ+&15Kg?s%u@Mn?<&DnHTxWjuMSb{_M?QMP$s28R3% zhX+Yg4L~u@E+N-pBokp|gAmOH;t3%^fa@mh^4!S#T}A8j@Oh0`)m3J7KM?LN{MV4m~v8rEZGyR#DEdE!0TPRnx5X?Mr($#H{WaRu;T4(Aj8lz zVlq()1+7EP%mN4mo!B`&fm7)ZAUjVVz~?(+g~)3L=oi~!P((^dj+}QRoX69HzSPzJ z{D6GGWUPVCP(;^*;Pt&ctW#X|#ZIyteV@YvDbA~W1ONze;Da;|kGA$WdEj&po%L4Z zH7kHP03{HGC@2C#1XUM9r&Ii^_WQnF`LZ03JZy%Yd=$XnyTHCVxx{M$j`Ax4{pitT zLFFt!1C*J^%`sWRUv?DLU9Yj0(O(+>(fpYtD24mD^*I`|9O2!t*mq$5Ta5TG0P zx5D?oKy}_vm2PzdbEx-n*iOHLR2Nl=^{=Y|rHTd;UW^v-f2;MN@jWthX=cA5-!g9x z_0snyq8AZzLSzs~#(@D4OtMHM6ZaoB3~$_^@b>=;hWc;=q8`+Q?HG;q~61fsJP+~0U8h~0VPEsNRx?3&mE+r5p3*G~C{QTG&V3w*U zIFTOuz;uA+C_(D&F?m;h?qjy-9RNUcLJ2?!Km?#dP)dab5D+X(!#UlyYZV8x=ukMFPSx z_~lB1!UQ05x=pXO=kNIaj^;Tk?|d&!{D*`dH{$;tF8AO{5C8-xa($&BLC6$f<#F}B zVPNZ>Yj6%#m43h)uwo=5z({ZenE>ew2_hCm!z@P>Iv%ud`TNhocO6y+_3&i*%@wDy z>h$^m(tDW@W_wyLv&D7qA;ae%imC8^4t8^y&ualuzmXx*83Y6wAe9=^edxE}C!x>i z{^;a*;kD$kJ%IayZ6I+TCWp*$PRC9Ng1!iTehZW-2>}+I!0fy&eK7B1%jIjc0AKw~dAUn^EoU zJK@=0(7l6vA)rE`&=9k;lTf{C{E5fUeZp8;t?zoHmuu_;l?RFDbs_s&E=!JDNX$ z6CQ;F(UXIx-u8d}@4oZ4^XC^!oU{cX&=fQ@g#qqI`a0AG(iF6`zUweb5cYcg&^O%f z!Il5@9q__NHgv(nf8D#^pHEs1rg854whwiJ_k7mBdBNn;xsVs&!o)*+AP|uOCD`u# z48Z9s{tt7C;I^EWquct&6U1%0zmJ&xb-In%^jopR>ZtuA=lz?HgMQB5eZLRJ>UmMi z?{R84Xsi{QCcRU+0(gZgiR4X?GIsm>Lus z(4wp$5g-&`91pD5fCa+~)aXOjUpyeg^}+6fk5}*?TxRbTS-dug zKEIQ;9R4|R=0cZ{DOvy&5|M8xJ}3PTE&fLt*6~}(IO|Tw>0}rDm@K-?TautHKW9(- z>1Yg-<9IC#b97h-fMok}ePv%|$Q>p9E<_05!XOC@iC^*kN3+ro;vLQ(7(BI1!t9}+sDX**9GJs&!P^# z+x7=jqn9%18=(Zu1%Xit(sudPT@ZHb%IzQErvZ||gN3?BTR~ubz&xelQWiU4uTk`Y zR-^gIO@g`)6cxZ!!z0AqdoRtDoCmR6!?%`7xpu)z(QlfQTV+{nG$?H^`))UDXj&e) zVy!8~ovET*)1~lnyHTWcnbUp?hNR9xn;$+fpUS#{5C-FwEyScrCj=0sjOl)qr60jv zjwHuvqU=xbTs$$(!ChNa41_R=88Sv7~1N2?v@Gq4`B@McB$(Vzw?Z?O3IeA#)Z?|%uK@HmQo@qWfA~D zNEZqM<%0!7NDqzVe7$b>`^ob6d<{S~l5H#7fUvVOhNg9e35=0Rq8d&I3=+WFZCnv% zN9AZn)!^@<6-8Swzm-lZD34;b6hSDNOWmovbZ#F)kz`Vl76^c;mOaJ1u=Dn=vtaVK z;O;O~@LY}HJ+CUawUp$8x_AbFAHz}$h%p5S6&|lIEGUBvlp$T?79qR_q8GL(D_{VQ^NrzVHZ(? z3*M_funV(AmS(V59@=Q}s8aScMNYhO0LLS$P}Edu%3O%)bmZ;_j1DPuwQE*qF*Nl1 zenRwAO~VY)7Ym^K01T1!L@Is?5k%ux=Ae zy&2JYZc`ChJI)N~>l}@uk?$Fe_;9B!#VdGBLTIvIzc^`;x%YaOHauiS>GF_&;A43jh<*y1POl5%ou zz}6M(oTpBn5GNg!nbU|E-0;Pq^{z{jOu)Gp^vPY7cz*K?nqRbb=`n5gKVxl!f{? z%`4e1p^`V<9#`m1cEsVQ2u|%4RxFjG110L~7aIkxKyN{m{OP<;BRTa0ztscMj{+(X zA+*9Iz+l=SSq#eR1V{tro`sLwkEa5G$k4cq&#Tgm!|8v1*I9bi^nl?0s;!{dsc$Pz zG$e$GDetoc#l{B(AtY(d1UtM(pLNGw$DFYSup8}sz%V}7Covs8?dN(eF1A=Kmz~s^ zc$lF>G>Zfz6d?ivodD%BpShgK?CHV0=C5GEgWReIcS;Z78vaN!lvlc@&@UNcN;Ihv zX*#Dyz-W6|`Ef=B#DR%Ml35uyz?jV~^En+rq^zOnLCqLe7iKVg8D-S)1E6hFL>x>} zE3@IXW$*fZw&<>*a`x`&#nfQxw{yAcme+XI?-`kd!!%sQzD2pW%mr3qkj#@LfiC8; zlnINkw?5vNUb)(P`%9cxscfp>OLpv}OlN_5fUHCvE%eHw&!R7deyyUVd9@IL>DusrkO{+lHlS&x;R~x$HBDeFYSOahQJacA|`}c zK?Y}BF=6%SIeVV^Q1R++`hJrIVA7mQJjVCluhb3akPplb*~X`^4E~S%17gq^XSslt z)+z{vORFBUTGd87-L#{lZ&{sTvD>5$(YEHFJmb{_L0 zH&N6K$@5kkk&3>iR~fpC4H=*0bb2Oeo_2s>=eP|Jb=_##X1pr024Lj*t-46Xvr2_m&RyA8_4tOA z6fLn;DJ5t#w%~*+iWS5VR~)UDAKh`(=knfv*^&8Oe!S3U0nUQT!)Myw zOnCKAz{QA|gez19lm$$Luvm~;F)kT}DfLPPXVe(XHWEQEEwh)42XCtft%H7_gZ+Gg zz60|H`*CH#wC(7D(qK-5pUgyTx~+b|VU%WR)bO0dG0=;oj`7JD;~MrDv`9pPHc_&q z4yhkb!jUB+t*vV6575~nLdw$N=^@7u^28ofWsRSRqcYY#?U;s1MH8zt7BBW)qARlb zM|doqTVCxq$wN0qcX=-ja0@Dr&>0tx3Yo6Kx z>Ft22I(fdHUJ%xjy5iJ@3Clq)4HU-$K$-ZETjo56Qb#eltt|M)0Q`~uxBbH7%JNz5~tD| zOy2YT4u9Rvk7HHh4cv4-w|nu9D1A5%`eTK_q=`r*Bo#?fg_lsK;xco2v9SikFcbxL ziUb{x#oF>~0nSK+!3W$1NE7vqluljk}&-D@<-R2I3% z0c^aMHFQ_0qH?S*&|Mw&y?~%c;JOSeCMV9ZsV&7Kuskvu4F$3xr(4Es)@bRKvuM#AH6r zAjT$WkW$%>SDv-UeKPLq>W97fdXb_}bj4#Lw3I|!qD|z;-oqgi48$nXwkX9cU)?6* z4PLsicR$0o8kVG{2p9&g1n~xJZJp39B$s|3*08F1A73r=WE06sqmk?lT#a++Ot_Pu z;}OEjDF`vcxX2D9i)`XRVVFE-e$Qi<;&7}{gT(X0i!5`Zr6dVIPhN_&+7x{2b{&I} zeIqj?5|ppVlx&hxE9?<+E{fSJn##URGJ5DJ4m#OLXumcE6-r#^2pMG}ItztegO1K) zrh7o^0f7f6V#ib;qht#!JN&nsJPQE!SMR~5hNQx2F-~dNk>E(tM&@RV22szGCO1zc zQB4#gj)74TFp`m_I5$2iWqeW~ltab8f?`J#O*Ilu*HOqZEKyNanbSp&>5AxIp@nrp zs2H56S_+493`r9+6p|Qx1SM?&h7l7OS@8P6?|~u&h!P-3febJqh6FIch8PivP@&bm z=S5^+o1?#Zk*3#T6$P~$r-rmDJ;>%LIx)g|-d-yVA-r~1UpE3?W$x*qJEc`xv!kcU6=n#Ln>-|-j_5fnpCLe+x;}mU~_ksAo|W>!QATVvv5+O zltZk00L8AjNp@>6fx^fZk(-Kf7Ys0I#zdEzpF znT782v78?dr{pnY-v!B(7K)*^tmE%``)<@-$EGe%#qju|SLj-27|62mFBl2j?oX3VfyYu1Wc z2}r_C_y8rXTzaTVsHuF_jgAf`C@#xO`Z|64Un*FCgK3tR)sar=1}yTAYdCa+e$@&%{s-@?P=pwEGu$V5ygV#k~=DlogkPZ6Uu98wAh zgqnkFcjVi;%O`~29MT4>H>qla(H87^AzdQ5cq#J+O6M?S3bTE$q4oc|pC;Ob!{c;< zt&8kB)?+iA6k^{T8NKxyGEdj;fXIJSa9Rzco+&XMvhLk}fOMerI0>k3K&7}rINb%8 zaX)+*O*1Oz=D|rRv+!C6O{NGHEZ2wtgaY_RIgz@fecgU+DUtSbW3?Pc@M-FKap8zh!rQ+`YcZaXCDC31S^LO!!-7S zx{(2(avb6=hp_XirI`=PN@>U&yF&3ZoV|%&Pzy8F$Nrq9@VcH1c){zeYAiVErX9== zA3$dbX6oyrd19;P0T!5c9Qh^7US}#jJhd9oejbx&>1OP;qZZyQ|Bi4Dp3?hK%}YxzHPewInm`qCh%Ks_a(c(jvsx{6>} zU;)nqV_Yu*f5r|%?uxmH6ab+I-s7y-{owdBaMtB|u75eY4=gm=NTU?>{S0v9IPjFD zI!N7Pxav7=^Ey8u(=X9fYR7{d2;Ou9YiPg$YX#VS+~@799|JdXA1-`$!^q!#Y8GSB z@|@h`!Bu!q)H^U$2sPTg0&mA{;|dOeKq>s~mD#4!cp%C*CcsMXV?juHv!sL^XAx`q z@%&cjVQkyOFL9sjxg!C$GA*+TO(ayQHW%cfQdwPk8^r!`Q73+QD=D#9Z{axDa?!<4iGzS1h-8W%gDa-i}s48hB!1|>kwWE2b{Re6`o1ExR> z7~H76hQ{Wg=LRoOFn_1|9W_U_@9k>5wlFU7(tso)kzwyy51j!z`&wzoZT~)hIe*=} zUfgjy8F88CM*mUMb^Yf%Sz-_OX6}If$PFI>Q(4wjYscx-32xo}Z0INs%>iKvyTAHt z59JuS3(<>uQc+xSZ02|EaWaZV6c`ut`GWGrXVDj(E8}pf<)jYM(nAHnF@!Rbo+d!@8FGBQx?VSt5Q$8!nEF`}v=tEWTDKrz!Gi`!9SAn>lD|rsbOV~Kh)k>hB+`HmlaC?r zPEBF}w5zmlS!ZrmsPnNmf`y+w( z;qL)=wZ>O=J{~o1{IHJ)Nrb5e_tSsg^GDQSgAW>O`6M=wsX6@rUz9({Y=-%}9w#AS zypZ~%aq4!vQJRSHTZyI~`UaMN;~XBQmClep0Q!;~#1B9)P7$5mmFU3ghK3tU|Lb3 z5NK-$8=bZtjeQ_iw2sf|J}+Cri1p{es(fe#lHKF<`vIopgIo3HF)_>fU%HAJf&9oz z+(*EpcpLCr0R%A$kXs$R#_MW6fbA)VFIqg^*A=?aabvj}IFY6tMy@uyS{u4IQNdEx z&N{iSS&T*;b|bd5?Z(tX%u%%xM2}09;>NC<)8%W2WdqiEA9sh8IDD%0;7L8I6uT{$FG6DDUc$?eVCWED1$+iN(_i{unVoj z3%1+)U(L^E7Qs%U7#_4nI2}B-UGL)}uS&j``hdAkpEJ>_2e_SMPvL?GgR9ALd0eHP z{zHZKf3~W&ugm=d=2=%&!03_&6da2SDAv%z#VuOF z@q)S6_k$*!9N0O2r$Y;+VFi9&tuQ^iYbzX&v0ss|&+)e4{}H^%i3Gik@epb=dMpJ% zhh`36PaF)Kvi5uwNc_G)u{#6j@v^Ql1A#y@pvkRl6w4+{TQT!ZZe5kq>Fa7 zh%S4rxYOx8KLmb0pHI#Ij3C^L-;1TrRDIj`OiyyY{Zw7Oj^b{~p_;q(B%*71aNv*t zBJzO<00KFk8=!CdYgk_BE~gqj=(0VhRZHOcbl+CMZ_ON4j|1(`IS`;hFcKkXOi3mo zW4*B3{thg6LyyV-Yi_6Z@FSQX*JoTPq2}o%rIq++?}qc3ogW*s9B#)G<#i*J?sx6H z#LJuy4R?I=09<=o@x_e^_^up&PoBpyN57lTm~Q{Kr1do# zd*$qUt98748xSlI2rNSmOm%pti!G|CHCDbV+FXiht-cw{Mi0^q8|X2(P9onI+6-mY z`X+{x60v|!NgyMXm!K~ZXCr(W4{ zEIZL)>6O7no&M;ro%UA)zIjlj9$#Tk)v1f4q|k6LTYy`d$p}FNMS_JmbN%0MYl{YQ z>ZMa#c(8vwmd1b_jsw{Th729(K1eZOjYu-!xBmg}gVD7o<2d;pfrkY`=k=+PH+liY zA0=2gHwOSifI%jKct}8)G}14=IPJ!}rmd-)W263-f0Jf3XkLch)8f9#sL;_ZE1LGf zt)K;`=U`5PHf^`5^|))KtjQn#JoDNOOtwozD8Fhv8*)dLu?-J?_cvHCTxAp{^GHY5T;)C{^%BuYat z&IBzgk3yf8=V$c)jeegY_j4c9m>#F()bUlhu8dOpuSbLYl1vmkb2*>fUK6#_R-gr6 zg31o#yYmHwSE&}>NhaiOB2_00f<+*l0Fh7<0DAm3ch-1-V0soy&+^ZJ__<0YL1yjn z*P;256!)Czd0{}>UehVjG zan}7~#NGqpHXLUlwfg~?QxCru32xj~n$aNVJ-2R*4!vsbq5`NmLNKUVps-nzSuj;z z2mgMd{hip*sI=gFAIq4#Sr5x+vmO|GA?@~Cnj{qMpuZ+#+^T5sm(%CynV+Re$R!tG7 zji>tfhCV)nTlG?~_hsvUQMRkI8XEKfOn~K4v?A6qx0$8);Jsh3qZ1^ubF*S7r=z>ebvHwo6D3v=_Toa4TXH-Qm7C0~=5F zRhIm7bVyHEO`f&|@PZH!AF)`KR~=Mu%RKYhvaa2~bvS+XwJ<>GIj_n;9UKdHKYR+M zZYUczUW-9&2ra1s7p{+8Vjv0g>-o+9&HV$7&~5%dv~#+9klgbhDCEc6^g+q0Q-X{V zkY1@Q8k)EtZ~8-y3&wyNpU01peDv{HI84)dqUeGO0^%;WP>~$~l0hE!Xk|?TWpr40 zEW00Ic{dlhAaVfFbK-M*=w7GJ8v?=L2SLw?2a*f)fG(48dS>DqkPu52KpP(pmiy;w z-Z5wtE`plF!Vao{7pSgKY2)oT9sjxvTVt-$Rpj$oW?k;0y+<0omaTy0)^4On5Y+UP zR1hFR`~!DP>EB%n9(C{$5R26EJo%OiO|%n^!{F1rPkDJ9F551f5 zwmy5@7VCudeyFi)d7D14RX)dA+s-bU67*He?XxTt*+HDn7)bvCuUrP8ADuqz9-m|t z%Dm*KZn2%l;a><0b@zpP28o?@g&rTrH77vyUw;$h+(x7JV1K46{+7kH_#{k_ks=V- zV8&+(v$mp88EbDy8`9*EFH^D${;M)M>Xhy53U>;G@iKfp+ayEBrIy=P4Uv?Lp@+fDpn=AchIqMS=x_1rsQW3+XEv2%0Q5 z&bycBT={+*D3D|>0IGwI2ha{W-Q>);=5O;Ls~T68CD;&kUFh{Re(K!Z2?*8)a=?c>NRbr_08h~9=cMY3j`6y zSC=OlEuQ&T=Q0LrV6O#Ho{1P`lLi*2?B>uXjhBl!>&g z{BvB)EG@=UVLvyV-+Z6j!@lDAI`2D8(4oR7eHtFHEc=Wjw5%K6De1cZr*MJ1ztLr+ zI2>6X#>3LqvAWrLwk<9C_@_vg4NQ8=%>R`zl#)e;*m zHP&oC>t;Xfy&bYbPD^^F(;V@vtld+4unQdin{=116AbTsb)NP>VImkM^Q|Ax4n=Z{ zl>@tU+D7uXQ+F$dYa+Fz_PpPfFPt1!Huu7h_~JHK3XRuV-{*X%+T$Oez5m^R8t=?^ z&A0UK+U{T8op1R+%>{CC-m9lKW!PbveaAWTxE;SQS-%+vHo#~@R8~*#Boi?97BM>Z2cnY{FX?9JQi{09Ta8ogs zW8btd<+VB1{Vb28#?Sbgw2bRLZP_|3b1*utY^FYaR%6Labl_8Ku5Y?fVZYZ1T&Bi< zQ4g}zXgxC%wO$*S%S5idw7Wv$-R53AeRl;p!A>t*MiJB0L25o2O!?E z*IW%(7G@vn(a;A*4ZYMK(-PZbMgvrzVhqP8w4T~qOPT^i0HU%G7%+RkeDpsam(?AQ zFRt!=98me=?PW9C{*#~$U^cdS{_a2+=J{nHcYT_vsKxF`E&$epWw>z$;6r#>xFkS9 zLl`-JQ#Q}3U+lo~0ciNq$y`1+_n>gNT^);S!wcv)RQPlR;Iq6*%f4%|c9GfIMrHqh zrJX~0BH#!J2szXS(0e>LjiVUM`1PAGa1|acjwV;Dbkyjo`vHx|hiA$8SrO?h^q$z$ z_YheR%sq}`_AX$BFK{FjZC77}4D$GZX!S?%|! z84*jC*ZOdOaBzcrcsG&^y@@~~LJk}A=y6z+WH{mVhP$}ms11$iGrUO0Ao1D9(}T_j zJ(iZ|cldCAZEOY3ekV=Xt+#Pb4T7=&=O{;v8$>U|MlbM$#1KG806EP^+vH`tUvA}# zsn6+0Lbv?~BMHU@ecnVE5P3ElEo(j9G+TU4l$6{n+%ZxV2mk^d8?t$1Mc=Qy>S4Xt z_%L;#^}+N4|1ITPv3cI<)3mZjCK%4>Gr+l1|LCA9$y8KS7(f8; zFU#kv-cIa1{$+6E%IMTDt>uEOQazgS51*vrR z*o?`3kVs@oL#ud^w;ttphx>>BC>S1IbZas!@cgzeAAgSm!B#j6mZW9l@63XXglKcww5yChmctC;BMG%MNWuw(zEc1bX+47_JUvMw+z`YGe zUQluIuGPS==IW!tVZKml(m!gQ#9yFH+@bjf0?8^6#47YZ&o$SG7{l z;Q0*vXMSAu%sti9Oo%CmCQJbxCPIi03_W>S#h3W_an_*PS3Z4Bcvb3m_ctKNuI8{A z)w>wBzN+nBe6_SgjHTJm><23$<_3ko33*#YEnq@iX}g&XwKw^>aTMe5w#H!EV|Yw< z7m&cKFvqA0)0Vxv7vdl7f#m|z$&gjuXf2kq_tyWtr3h}~n%;Jw)NiTl>!@bs@$tw> z2wHhu`234MPCJY_afZ4E*c1)Ntt}Q$>I!0H8+uPbu))=W<H zEW`2!?Unq$+%>2#NDc@f=6$Oa3^x1qscFMmkcm&0qr}5bG}lUZftm$@Xcau&c|sMD{&EY9EL1=ap$!& zbGC!v_}^&MXnv9PM?*C9TMn&M{RJ2}a9CY|>Cgk#Tc&GiGH7flAZPLY7l2+Y7}smv z6Ebf0da!Y~Fn%v!?K+&0aZ-TG%f15_ov)W{2W3kP@ZDebmbWH@_j)4wfU6i21a6{P z(nRFUpghsS4Ic*^_Ez5Q28wAi797XIG}tY?u>US^g1C-*8I~VrZl<(qFnzG}xQq6l zsT(mnBGy7+2st6R;Q6AU;rF)gho2fqrlF@`1j5FAX;v@5yg3&j;@X0i(_3 zA_VY28zfQy5KoHC?6JKtK|IjqM&Lnn`@=k9u+PcZj zj-ogGg}6dt`0Z-z{+nh|sViVDidyIp*oM$bs7w=cHWZIt7Eox(S$t+nv5+wOzkAl| z1FdPLgHXuIb2L9Y4tCqe8xIkac34J=wkRb?& z2vA9B>+WKt^T51SaCi`(MX*;0fy4vR1%w}B>eH)4z%z`}x9N~?+<#;mUi#DRc*xvy z+i-!pUtjRl?<66R08*$SB#xB!cizzhuiZ@pn+26-`y;eTw+;*VI2XMyqcJ87U$*N* zhlQ+I2Z4&U(?R9PV+=?QXapb&o(LS6EqEymPkCQHpcs&9H2m)->xWIT2Otm4Y7`jv zW?9=w$ADDosey!bhtcbB(1A;PdwKvU^P6=?8z9F?YzAMQd3XCq?WHGvFFkx7uOJ8j z5WS6o2irUB1xJd%`6aAni(AUS z_)^r`yzL3;li0h(RXgU-X`KQJN4D*Og?t8x82wxI z$QC5Ii;f`KQodlZuRz%Y_r@_aG=`CI2uK%X06X*G+(F3$6K{;pf6f_MCE#hex!CHg z;!DB2408WZg>tMzPoy{QU&jI;`h?Pz*0C+>WPu-|r_WdL%AiIgj;yt#-720RT>e zDP8@?l+@ewSnZA4duD^*ezF%L(OS$hTy{aDtu%g=kLx;$XCF;oLN&5D)*umHI7IFyj^FBSS3uKr6{DT_STM@Gf1gTwjn5GS9Ir0v|Z;%T< zvi1wE1F*f%2Bm#rmce`#>`czs95-6m(ze?Hvjtm~J(~s5M&KBlnEuyk;$MinatIrg zl6nXMBxeD8w{c(Xcd%e$w*cV*zyk6MMdgz-dEQU!omgLR;PD(jQXZFZd9=5Z015YC zvui=5kO>GyF7g=m6nrnU$d9JKGvf!D77L5!2OFti-UF})-<`YoLGA+xxJxho2hSX3G)_=0lB1u)p3LKy6?N3=o7HT3Wn^pgd21J=ky`j{)v= zm`^lx^sGHm=*iIfv%GM7{=YB0%jB-WlT(;m(TNct#RQ=UGFb6f>CoAAbvz8VSGoCfG``#p1W8oZRNNi0dEKdbHSo%ZydZJEzXcBZ2{Kn z{k+5O+6H>xUejsJ{G5YR@k!TN{=EQp0K zl0i@${mvOMJO#98vbjTU2NuFC!Koc&&>k`GHY35C_n;6d}S0PUkhbZ}5ra8N*msRzTo0yy?bQXhOsowcJm~57Jnr+51W^mqT>zvW z{%#No$H|2yV+fUN10W-Nb2L>tkcd{t06ykWa#K)+n2tl{c!MqT3aS}`sH#{GZGiDc z#ENP{%=Xqs>O7J(6w-0>Wtf=&?;xCTfwYvg(rp2f>OtV83_-`3fDmm40T8q`ti%;O z(V1_YQK+ajf^dUHqO$^ER32GQEoBO10%SQUK|%Y=XkBq)R2ysK~`gA4>;?xp71s$07D>RV*atV`{o>8 z+MS%*euh@5#kHFM<&-wkY@OZx58siYubrf**%~a5-xQZ0Ugg$~jqMVAIeH2V zw3aJnq@qg1Slev8o(GFvvy-8<3KppUC{Elopwl41i zeMrLZc8#7Hu87MMiTnEhjv5>~yADy6Tz#%+%vhzpX`rsyo_0&VUw_q&SlaI*m}>P}8{)^j+mlK+ zJy^~#XV7P4&c_w+Z^aA#J9mVw3LaG+0MV_c&o+V{s=hM3b7iaTk#PN=W$uBSdDZ=pUhiJwXY>U9uWhao6>gF&d>ES6A zXL1cYH2frv&dH4^=>7HvJEMmf;-lnzamOb-!_=ENCGn`TB23youH7+c_K*!04+y>$ zb(VVMQAs#c48l7pN>p%xjbcrOFcD>xxJFAU5%uE=vgnn{WsSjCy)e!gSFd@SQkgOo z3T+foMG^jO6Kb8T#E$k~)NQb3)CN~h&P#3oJ!d&_e`oPWNK26|5`y+(bg}WO;gM#5 zA_cWHlRuVb>GkGpSm1>y+y#Wt#ns2{M%-AtR&fRlTnqwfR>4MzI{WSp zFv{koXGP$sP3s%8V9( zV0_$uDpSVXcH-BjvVywZQ~4WgzXBp6L~sy6CQsjrjE;_Rbccti?I?}la5QbwXoN@Z z9;=VtyYOb>My*kHQul(s-k9$=JG(=3u8TpQ;4>F7vYOxRa^-t=?c29*-Me<}+qZ7r zyLRpUn|Qc4E?l{C<;#~YT)A@P%a<-(yvEnxe73#3yu7@;yu7@za^=gHE?l{C<>A0h5`~2a&!5$n!FKO7h%N+QQbik zB$lgtFg%XvN@Gr5zf=h=B02orH@XPLU25ns99`KwqfUM4cBqZc~ z>@{B|;J1Ge4iirP{~r5)DFyk5Ez3^aB%CH3!XR8391@$R&oR$40~qk-Wk}&PwE0&| zxHSLu#`VO*w_?G;d31ars}iq;gHxHC8O&3_f+Ld{1k`m-tGyn>t>1rpa+ZGe=E`TU zOgdnV=`3Kl^z!rXrGU3@k8;N)+Fv$zEDg80y5u^)U1|O9{DzFVYuvlp_i+7LS<%w! zkIjyw)1Omw<88UlZKJDiqsGouP4Zl%pRSorPp=O6X*w0SdcR*ZzdnQh{PceD?aEw} z%k}FblTj1zPwmV6pW4QqKfZ1Iy7+Txb@XFE+YC4kb*5#_ecTz;>u?lydO1#CwYs`; z+EM88)AyvDVR81oqcv?kpF>8HvkE{zx{Cghbw$09l|%ltgAt2fMu8qA3jqf{Ks6?h zeh_OKO^vQng{Xb46kCK>MwzZoaQ|HW*pc(9y6v^n%JPr;j&XyGw^>!yRxe%O4%AC6 zJoEmPR?+72ZE0|MX?5KB^sVjooGZU-o0qZo{72vGqlPuFwzKx@-_LfRt*j=!U4FBB zEnIofwR+Td>g#c^l(W*baw?g7`Rcug)mT=MXPfY&RK z&t9&Kd(W-@u=MpFSrt2d)6ze3{JH&dWht)6HzRU&XUXiyuf}fW>}{9b@79g0J+s=e z=(CQF?SSRu$Ev5l+t=r}j`mha1Ae%E_RLc|GCApY_L!`D*5qA%_Uz4Cz?t;blKAnS zf#S-vc-rfXn z+j1+$hQ9r-Z~WBujC6Uc@!RW{Mm>!Yj0fFWpI)`qHy1s7ZQv}K=CUPrQu!vu#Hgw5 z&1mL~b27(CnX%dDEXg^kGwFZU)b`PAE@jpHT5suKwSJOQom}Jh;@0t4dcFu@sBAuS zsH_vtFKHYivtuq1zlr?^HTY%uez^HWY|}FMRaBL-l8$KB<3U;(BrVAiNu-=gu!MCyHK#=R+017Ol9#1>HSH``RH}U z%1Y%b4x7jCebGe3^&r5^BB1M8mUnn%CeD8Vz|?R6)>be@ju^E;dlWs4O}2xI2K^@ynfQb3-SX3+n8UuURVrigk$ zX%IbFo>~T1p!0Ehx;fF}qPoK`S*cFWA~{)uiCmUDj>!+a+qJSUbOOyaz0fM@`0K(1 zmOeey@P#`%8#N>Xd8o{IEVF4#lBt>$aRrCxVYdhV^k=6+$8n3;H5nq=XzT{JeB`pU zFY+yk+aL&5LT=h7Tk31dU9QTc{@P7Osuw%Y%z4A}Nj1-Ma0}UX5Hy-7<=8p`#mn?& z8Qc||=RfWB^u*K2W^;N-c|sjL`Lw+L_$JA0Up+eUtFl@7`$}YQd+@Mne12IP)cT37 zSzWZ_XCUDZTWu8v9KvK3%3_*gxga?I@Ak9bono%_@78{=u6~#;t-5Du9RH3-D!PZe z0k-#g%7G!LK&G!BI}U_93N_01+i+sf3t|1dGQo`X(UcgYs<@!LSJUzI;_Gz4Ei#ZR zrsfkwh~BXA5N)JPbn4)&?pYr>m6!b`NTVpPVEQTejPBUzb?${ZM4U+(X z_ry5o%t#8Ov5kvVYtYktSIy(8w8C9AYPi@JMy1>qx;GdO34Bg0bt{rs_=8c@GH-We zHYzX6e;GF33f$H)I{La$*?lqJNKxuYbsZA0K2D2#Y8^lXkCsrF!_O5j?fe@REQTBoZj(}=@h_lxOB^Frm?%q1KPfpm z#gz7qad-q{4zBz2w(%gswkGnEZ|a9pVID^wu4hJ>C!)VUua&+pta+a~K&>XG7_24R zEEPV={W?a0pm~I6*6LyQ2rElfS60je7-k`T+T??9gH_AIr=sdV$HQr(7FEIZ=CaS0 z_)>=&`Z1WCofP6sMMNfl)EKTfBnf6!}ZS&CtEWZYcs4^of(Y<|Y3akZKCH z`kao}kaRn_^-HiZEiSoSo{3c!>ZttmYEX|@fu|cTHzMSaqq;3hI$iUzew2faoQe#L zrzg`piP^*>l?56!$5+7nBp*E7mx*`MmBroYH7wM@C-Y!w-&6c78;Yy+yf{eau$JE@ zJf4A5N`c(Q@GzDspo@Nr1`fnIHZQhhiM|j{>e1@sOlENS+DIRN+^P)SVJticsJqU}w?N;-v^9zy-+bAgCt7Bv2*DDLt5sXG&h=(SC>z%PFD5U^D!DH|XLk`&A?N=yc8?jf{+iNnIFw!`?@Gpt1#dWcn()oOY` z1))^w;>{xB;xb)Nf_lP1;+?Rs6vJ{lqBHmLNIZ&K8t zP-qw!3|sGAA0vZ`+mL91x~U-=H1x6|TO2TmPH1Sbju; zpf;e+Z5oOx6>36Cz-GEUnVk?=9spa1H3I+?BfPlyK{8-Kjhdx=Q0FjMgID$mj1aUA z5M=Jy5?Klyni*ljA!t8XAuE2({LoOu+t3|m)!PGrSw+L_pp1-y zjPyWDHjq3X5FL-PX@6~EwOw^E>iq0J&Tg+SjZ2Tp+4QN2=o>16OCbVuVp(P+F|mv_ z8!_I5)w}s_F`7PBmX6-)t=;2l9o6z=L8eq6V#kyHOp#|H-{jc~pBABIB{?65yy$el zO=9m}lqGAqV3-#PxD`P;vfJN8ZLsPfis;^!p;LawrPop=^+80-%WjFr+#(oRK}J#r zv94G>=5|@t6@b<0JMv=(^5`1ND+l#R6ykNc;E|4Ym>V-iWD~3$!#CXf+P11BBL)I5{w45_pY|pz+=qY}$M*C4b!BpmW zEOC78-rM_Gf8y})iAA1Y^dRpbef;G!sX_9>p;8a&gEiF%Vq9jgRqkzJ{HM8tR|}5= z*$00ZhTAB#_a1zyf0KV5(;?D(A{`-x!*~v$hAS-MY2s!u5NM}xi0qQt*%|iHQVNQ+ zr1#F+NzhwS+M?yv*>p4L!^H_H!-h7{lSbhR3Zm*rhj5UZZ7|iZBj7B4B?Bo(_6RZ! z*1MeXUM);ZKoeX7k!uyG0c0BF${cf5s5nrd2Vpx8=p=}@i*St~L{03=^%LVG5u(LX z)+E_-j9j=u@L)8NC9HG87Sa{L4s-99O%f&oQFMb*Fkl1`pbHHPVZj;^1H-zyI_ZhQ zR#reuHAb+!P!9#>-|iX#gOhuRi2iMEw{8#^=oT)=$cRS|L?=R&Em?(q|Gu=4ns<|r zjE(gFQS8Ngv`GK#Cb%C)L`c!u4I%_v)n_vxaGW2`V$QNW5R!Re7T791xOBwfKq#11#z?l6LzmmueK_$Y zuEE&qj>U08vka^~xaT-cm7ZCMxpHd}p?UMfEdCMO$FZ8`T;w*XIZ-kfu3yPl>!Hm$ zUBL(r4$4o=9YUW9f|}vEwMio*W)C1%K1B_~)6wTTVV>mm;ur@Sy`mM}^F0*_8J-G# zSPy-d=Y#ZnGFIRvs4EdI<=Y}TTexHjQS)jzN>FW9kmu!d9e^!{QYTN)%W1GKgh=ML zJTS6H)YBpah(5lTG#=^FV-heatGfI_RVr!}JQ5OnSU;PVZIoF=3LI-)4e`61AZua% z$>NmYf5lOVd+7EkLnBZ{zV1~&M>02=iw;*xwI}HHn72alY^lp}5ZP?EgGVPUWiftT#VJ|cimg3(DOe;$+#VFHE{k-9kj|9;^~Gcjdb)Qz$2-pJ zxn)$Uvo`w(F4n7cbD+XCE1sJ#5Y{Y?%@w-+UQz6gJs~{BAN_t?efgc?=R(^?L(j(P zkMn1KKNJhZR9tO^nw_4yxlL9$$R!kV5M$XltcISvrGJEUjDc*{Kb=g?h&`NT@{>8F z>}blb>Pu9ANFJ*r>X7bkY}LD41!?=1X+J0L!dJ2E=IN+HU)3&T&y^M3*`wycLy}$* ziDfO1e9~mp*gCQL!^|#?GB^e4A~G=*!^x8QD%6VZVzvPLDSe`U#!~&gP$~(Z;TF>& zEGoR7H?zviz;d)L)UlFb+3wj9hh5c4b3-9VCQl(rWJuvB{TGet8nfNTf+flQ*Q@&| zxU(H)YfWWoCJBjsbN1*Ok%%Ktx!4{LK{S`i`THf}L_8XGd?_DFx~JV_T0Xk6WW-{y z&&(ff{U_E5u`+Tr4roIT*`Ic+j-=oFl8B9qej};oH$E6{&%`RIn2c(glKqkDax}wI zZOVJd;i-v<*qZZ_FRf31X5vn&U!(m+$G|D!T)N^^0~_;bho$@pf@JB%N5~_ytuCWA zRLybqK;)D!y^=^?b#$#abneUSwqNA4&2MNIYZYUS0mT$DT(q|F_P}^(I5CpOs<<_B z9r!U0BJrARNS1*8nnyV9D_gr zC|KtRsoEBw67Ng~NuBm@b} z9Aq;T7mu&$73bhaqhaek_#r!?>7a02?6>cu|Dpnv4bajG7Tg1Zb^nW6AU5EC3iLwU z1WlFQtRi4m=uWF}MnXA=n^iEzn=srSW<-xKzL6A!hz1CTf`p@my4UBag*GsD;$&Ps z=$>#~GEy=LbTuK!vX+!jRW>weogX9)7GLiL2;;JN0_;meHk)Cvy7W3Ul$e5Iy(dHg z0#glzb#8%$gV9!`fSSQ1v>=EOR3i_D^^@`TgmTIBij$F-{bp8`*D4S7qUZUnJkn30 z5+OlrMnO?5Xda*JJM*pH_tzJ}K)pl|yD4^s?g^cr!LWRLaPUrgM+d+q z&@ARZK&&@$wTQ5P5aZI8!FS4ZF9a1EFUpM+lGmI((0u0h@In4BkuH5@v53+}9iTJ#7IEDy}*bQ+-~PGH4Y#$#Fapd6Ogr-RD4#;RB!5qjjHsfxz} ztr@qucG@PC^q=Leyt1EhX=)DEexO8VNo>=?Jo#*3c#8&5?Y=#%dgjuR`dhp?6ljB? zQWzM(u-0bWDC-NZ8YF!ia&VxC?&X_zJGu?H@bvrOXLdVEm;3Km2|H3V9KMkIF6u1t zAvO?MQsrV%wmrMwcs$MIeH@vmymxIP678i=ngbuqRZ$TOW|r99k!I$J4CBg;*tP8! zv5R0R*RyP`$pj(%%>`oKkUlKH|ATqTQmY<-)nJt9siApMkW@2lnqywW1wD1D&)IgNLzbyh9(}K#vbzw+K}f*y(r_*t2r$cEmeD?<-2=95 zF&~=rY3{V=uSOVNX&_4^)cVIQYm$2l@+pEK0JaA;(u~4ay;brP z9)ryqUuii&0Bw!ROs}#OJg%$ZvUO8B%TngFbuCET%H$TZMd#M^Sq`PxMT+(DC=@5q zCA1}3&g>8zvTpj&)c#hCRHBY)OsFE?L+Jqm*8#jgi8CtK5?xUzp{0j4qh$KqDDfeu zKC=HnORq)IbVT)qoYdYQfm6@=a*Ku3r&@5oC4bs+tV)hGM zyWhL=daTyZc@?^nlgpix176<&M#&}wx2I7VaQ$?7X;%K-RpCy646$un?2SfmY*UdG z9jY#1^Q`+;wlizhM12}&!#rv5!$<~i*;NeLPFm-BQ)j{$DkwY(6O|bg3aXa0%C%6?(?|NUoA!W8-n6#h79G@sZb_wTSmCd~CH%|>$jBTp+HT()G zt5(WuD^;FtTl14!=3Lr&{k75JrwX~5b*`Af@H2ukuPlq}HAj{K@9x(&l5fXXI89cN zOOPgv#g(`9!F}3Wia&$%$Ei;`4!Xkdgo|S=d>LqyJI{HX&0mvXav3Udb04qQfez-R zPJ5VckrU}E36QgQUzntJvbXtXazu~Xz11_Du1`udaDVC@N9Yee#L?;uSeO}8`$cZc z`7k@l9PtSFoh-_&%;)Kv-USJO1^t7{EgQc#lCVr6kDkfIXCt{M$V#Iur^jmjjo?qj zl=?xJ0F;_WUwLr%l_09<;Z~h0$>Az^mTSSR->PWqGTYuxQ`J4L{r#7!%Tz-m_ zLjJvaS2%m5;FEL-6gON~h14B_W&xvR-K|3&C+{|2wlIFwH;W)|?me2rX?UX?*ces% zohyOBGWuykT3dFt2Ul@YA6*V7qxu_CdIs$wf``1`B==3*s>=Q!)RKxlsAwiMFxpCX zv*`EwCrepgCHbW3=;rP|AD&BGP$^eholsApo!t@5Rdey!>Z|kcPmAv-E1(e?;)%8= zBJ%6Io;#$sfPD5JiLTQtyT1te&Bd%t{!DekU#sGh$iel@i7d!{{N_D?o0$c}=O~^f zWUJu=iCb_6_ZOW=jYQgF+I(IhiUTbJ4aVQX!QgK~-Pjekb*b75lkBa(!__)fGDo^t z-bY2_=+mhJqm8J6EtS@%vQ&?Cd!s6k-q*nVxB3`y?H@P$Bt|RDtmV2ZvyN|POY59* zg^^P8!q~;|gIL4(ydQVltJgkHH4G~x0NBDKef*fT)IEC+iQ!=Zm(_;l`vM0@KmsKN z^g}vFA0^H#t%rUsRdp@SL)F3Qg&u1gD@ErWnH}S@164UIcKz*|{;zR!BsJ%cGfQnq zTBtNB^jRk45jf>vc^lFes(58CT8%57b6AW34I~tV1Wsrr~r98%7YT+8_%`~7i}h@8pc1%=f9ac*$V>`1GA|EgY>n_-{~0(k_9^h|aZex>`Z zHr&Yu+@H;3$_u1mkqNpXeP#TuQ3aXY4;B-QwgKDCu#9PQd1mi%kH~}j5mm2@XG*yL ziT@uGpIq{P8skGnxp^d#<-W+ zcuP$B#tMiaDtF$IJ&MZS)KGHOW5z$omORfRxp~|+K5j?>`-4*7+thK!<)ZhYzb zRTDNh^tFl;$JoYIGz+j(-DGT>6B(rEI!MPM=Ja=JhDYYZIg*@{yw=cn+z8$hx11?; zko;;iztP@<{*jcd0Uy)g);DP6kOkXV2KC|-=wka%8;%2@t~&v~QvllN!$sLJi3$EN z4^*aEd45 znXbKkA1z>Nh?eJ?px22thkg53wMUItwS_^@OpCW^k1l2Vv^+fa@%ufeB(smO%v9LO z2lF*aPlh@+<+snzL=}r^fFKrYZ?lB9@cK%#zk}B~Rs9|4tf9Y&&mQ!4Wqm{AV3ger zD9qmH5>Y2uln@c8yfIPG`E2easraV`RY>9%eUOIiZAtpUnUGMT;6X(gJYfRCbVaYc z5W*Q#wddN@I>tkWv5e|{&Gb3vFqJ6yZM(Rk^1K*xJcAvxeXv+msC>L;$p zB-WkfvbK#hR}HM2m6c9Q@Om)Fq8j~N!(NhB_EEe0d2*`?m~F;INzUK1m@f77Iw zy`d$>`fa$gH>vM9&7*1iO8@VkyWzwkpY;@{{L3_w%cl^tcQh!jK}tOQErQTppkD0) zRd)nc;IFzusiL?nwX}kLUHAvD;Js;zPi|p0g9RBE-!-3HMbDc25eqO)@wsdGX9EW=1|pBmbrcG`vn&qV2_&f?|zgxrZ?2Z z1y|h=^ub+~rBjUSw6oR?W5_Qzmyk>$ym4FCcAc8&qr~9DVYa-#C5ZM*XdsDph+8g_ z4}Eg6D;HY5DatPvR>FqjdXnvx<3qe-FxJHwqz@Z_sh*xOQCS;j3;~|D;8vi~QMCUVMy@}(md{f6LY=87Y~Eo9(*Iosl%H~c+MyG<_X{_ zK%$fdm6HVHBL5a^qQ+FAuWr2=$7|Z=B$5uDW0yn*N4x&jvb~L& zn$dw9`^D`nY_get;88?u;h_~lq#Ygk2|SQLWFsU~DD7jx^aNJ83>kkHUX!rh{3G9* zT3nB)P(>F{F)mnu&@ENEj=5Odwjk2DEXg)OjcyZMmUPMi{EEpKmy%WPU~0y;ukkD9 z^GJ{kRx0na6LN0@l7{$wGd!|1z;Jig@)&!>;D^Pdy9BJ%>Aq6R(xOg<&(@-&8MQ zHkUl)Mm|I{JqOYoZunLrZ1^@=dl-}~{ZRY`r?Yzw_H*LBhEvLnmY>hl8w-Pi8023v zB1&v50mbm6j!kK?{Cro2yRNN~x00uMsy8q#6l=DU0@>?pX-DnjR~_5s%%0aOeipw= zvaiyxkxV*u`s$`V!Yu z*e#!SsTNR{YYSOas@KKR zLpsuymQ?LAM$GnBq<3hZgEUx1JH1$UTRGw^z#%{us1?@KoalC)&e3|e%|OROmG^pi zH_i&)8<7``W~Pg9J4zv;-DlZNRSjTLL&>t>?zFc4ZYC47pf1Uj$RGkdF|GUUJ8U?D zB_mBOQ5nYGdTk`!|D6j;IL3D%KO0L>u1wv8zlo-#a4%=j8RZ!6b9cj(aPo7BdbHr3 zyARPbmL5nyXkjGTS{pw(F_l63%(1ni*{(3 zU5BO6{2la@!dsbOX`j{cEG0bIaF8!9>3huD57obYUC**J#dar@l@(yyFJSN!=N%5q zyaL@2oh4_*RBz+;9L=Zmcg0&pQBN~EV_PtDehW97zn=1b;^uw4bDwEKD?)F<|LJoG z_0E}AXg>p+j}s{+N;q8n95cB^YhA1tSt~B2VA(@kB%>7>Yzzsj*+Uu5TP_)y%uaoi zn%hDdcbIl8F7A1{o<2A9GD`FD@?Kr~EASMbX!u*t?xr>Cn)!;oakYCw)$>uif)Nos zMJkz9gs%QffT_|kt$`kMPGI>9-t~{Vj5p7Nhh`g&fPu5cm9Cxo+G~__2F@jgnZ~M! zM(FX&UMrFeJ8^dV?=*$H4ddLKQwj@3$Aty_&~o6b>K`?ayn_kB^&b>RJZy=WE|U#j zHSE7<0O}=qAwzV zG&{aTs_8njT$4JmXk*HOzl89IEL8NA^K!CZ3PVd7e1oqM@xO;84$ga0C;#?@Z`Tk& zeQNX~-xnTyW0gyGC-=@Zj^vJj;F*{3A2b*S)B!zCfBHWDB7Lw_Mf7Bx_iTKNvwZen z8B^o+aHS4gku1p-kjBX>A%T&}dH6saX1ISrJ#pmnd3ihRHU%MTkp1Rfg)|OC5nCA5 zMPV#M9nZ%S__pID00Wcrm1bU+f2Q<1$XT9A_)Za#YoKQNFVTny8S0$F)rAbJ2s*ZTeHi+~z_V--{ay&}FKesAn<-xP{0|mm zFCcYmZbcT53!-OX2UwV9-pWl3?7r*Dcux-1-JR6*-M;W;j8!;G7+fFR%)f8;jF1oe zd+@Gqk9|2MVlLxxqQ@AL2tdcGnRMR8x~Qe4l>vl^Xkzz`ALv|0TN^nm#{P3StW0eYs}~jC!TW4 zQM4RO{iBgL!~D~e0(mJtt!rUrECh z)H`cS=G$crG_2BhEYsmuF|p1tM0wyTI~rhwZoV-!mN-QB_cJ1Y=yNPj=lD(5o zrMNQn#lH`Jxh}dW*VR+___JdwR=;v=hYRm`Su(r2y=g+?A*qDUDK%vX0VAQ|cAy0d zp>VfuU#K(SfX;eej<)9(BGvMXrc)9rbx4+MnVg*M!`Q{#9czu3CNp(ioQI6DWG4|I zOhr^B@GDRgh@X$Eq1k(KZB`Ai#J}REIXNq>IED0^RUrj$-zIU6k7v6OTX(676(@!` zah3h6GDBLVq>GPNDB7tRukg}@%M3{_jcaeK)T&<&-K<|!(+;jMG<&y(2DmmG3{$ zjZ-g44qoNSzF@~y6KUhwZoU*%cH7`Fa(Zf;ocBK2s8H^0rfOoJxmv9tzl0L?&C5jH zFK?y>lUcA9$Eg<@DzzXD0rWZr(NDAjomO%Tj~-VmseGk;oh)-N8}GN!q|rcVtUR#< z4MD8C7khaf?cz|&3&_Q9UY~L64rB=;Hzw~GGH6GSE+m(^Q@)vc5@-i<_iqU7WB7_J z9!ajbW5F^;6Ew_(j|_)Ie;?V+LbP07i@Yx>8cBNLhkK)P*Vp7!dv^{+ zP^eH$7H^pN4XTaQ7hfkAg4x$B(-6xvA79O}f*d+dXu0GhrTP+Ps2U!TG70M%Q9O~e zG(GuY#hc;I8@sopaPOUppN*Tq%~j>PPN{rFXhZz+NlG;#54*gql+u+Bv0w5ijlK1V z)iBd~u+&OOw013foV0dv3U}b$8*>3?1S820G}P3A>_D-j7qrN<&dDwPz6 zRpFY!+yF3cdFjYZu2hDQPybypZQ_-bl9n;Nwx|5O_#n~ibMwBC(FPEk!VI?Jm-%yF zt-;8Y@r3D|wrCYPe9j5UdZN9>b$}Zo$dj_eC%Yi!?4Af^9}}}&OM*A*PCn{>bi+Q5 z>KIW}GYUUWZB6eS0esD16wjoZ@{d?FEjo=*p3kuPChaL>r5fBMcxDqE_hnD}X|5nd808d|yrIt9&~gG+;QelWXpsf61mgX>;!O(wbgM*5 zh_X@-mz`#xTZtO?_{cVTWv>N{$ES-G_}tLY~W# z#1s9|=0jz>Pw>@Ff&8do2!`7Ad{&Wi@w$dcihh}q#jh1S7Q`*Y&GXq0Ij8S<_ZP|n;B846|W`n3-R=P20WJZ)`nZ2uX&x5 zQflQObH+rUzw@50nhWH-<#v^|7X~5viq_)Iy4jF-Qb|$+1#I+%fs4;x;lNJr;k1zS*)`109i|Kj!?ua5vo_z?VJ~~!r()< zivrjsE?i~cuasR`YiaZSXu<;YiKj$SuWz5HiNF)~at0F>LH;g*-B{+7z$joo=zG%p z<)n74QG~)R$$=&F#~GRdin51AgGnSq^9PE`=nS4@%A-sJowwxw>R-tHtF*<-2Hy!a z_3;Y}3Z(KiPm#&5JXXR~PHZ9cNxRijTB2hNhJ|Nb*CU1(^U8;|t`qR@WJAQ;B=lHy zj+Mk!l(N24Gz(q1sQU+s$$c~!No639ePR4)gJ(|rz%s>c3{{SG_GaqNRC|pjm#SHd zhAA`&rRK(f<2*D_l}Ee6@Z}uFA4HG3`;`WCSQ5TUIME{yw7=6Vs>!_iK4co_R-d=P zfv}0j>a$^)Up1fqauv4J@!8>J*KC}g8n1^%PHAokD0=G1q+EG#?Y!tURflqd&av

    dp0ozG5H5KvFXuLiZ?m2@o#?YiDcoSa_R-PTUtc^6$MUC7coq^(@&|Z zEIFM&X30<%WRprs;i4_$w#h|ezjPMUhQuq$G#!8C2C6F0B*w?diI?JRW))iYQ0Cz> z?hS({ixjBYgw)y6Q0+GTEZdH!NE>a|!V`t>4GB$mB{wA_gLztr;!ZP6Xzl%>26qNW zh}@y;J2sggzfYge6piy4=`iXbRBjV9(ox?Bd9jjYM`xU0kPG8=h}2L;?XMPfTD+BU z@o@=`^4x;lg`sQ^h!0oLotc+q!80uF6h%fn>47lWE2Iuq=?k~&0@@-U_RR)38lVZU(R@MfT zntJwLW&*rUyTUD+o<=#Xa8;pCL6Drc)X)RTt#qStPI?(Xaj`mNBY;aY%8>%$;oN^c zxO5u*cR=cWrc*6@U}9ptC@pD2z6y&2yy*THR9z-2Dyr$B$ArJK5(e9l=g|1vKFfiY z_B1s~Qr{L#Q)zK!hu&t`Z!Z53th3Jy*ELDOX0uxwclZJofAvW6CmXQYc%!txa}{R} z=vS9aOVw8fmVD^Wz!TcEuIf`x31f%3)p-!5VtX?LFxxp`_n4BcYL&j;6@+MNg1eui z?_**=e~X>~=W?64Ye#4D*&)VYTFxB=go$nb zJHzyHMXq2u+sr#wSgdDV*i0&yT_maJTCxH$!44OFC7>(K<~IlN-XQq)$?XWoS?EKF zpDMKsSR9fBrgNQ0&1ywU(cqS;Xk4pECuVyOt!toyFv|?0APH75E_R%D+8pQU2V0 zqKaDKn`T2VwcwpT_U|nFkCe|Iy}!T9wa9ZkIXth~Atf#|1-SiCMj0;7tb{tb1E;&V z3)Aa#Rf`pwIIKca@rBD0&!`B<wB)OwqGy-s>s zjxq&_7*qi=Hb1TE)=v`JMfk+Syn!;7Jxv<#Vz)N?0)d6le_v~&jtI!=$=fb?TjaaYJB0=%?ka_Ge@d`-+l@J8^+&=Zodf(*tF2frw`^{Dj2+Mya6BD20iQpG}v^ob5M zxzkJ)&vBdBxY)MQvcd)z(sk7e1^>bnem&xDt*b#OlY>l54Ryo~B3EJ-K2xafrIHZB zgF+b)-s@=?2~6E;gYmNgR>nfT26@TxWf`uehE!{(Foe4_B zIGd4#=QtuOX>mm8)5*N?4hnk>JCL$zTkX7?~iag$>5L&nD;t;9fS#k-QL0>wp* zD;~;Yx&7#bVZniJ`B88TjnW3xD@2N-mEMdpTzzuTYRJ7c><+T>LwU9=)zuI51FW^JM(23=D{&&hYNH|WdZ|5b4P85XqpnACcJHJ0DXLgsDlt z{CB6z+~Cg84JO%)EKeqLpX5DHx9K~KFWrxc-V3EHqD@XGDq^h;XE3Zb1s+d2@LV%O zXk36-;>sPApC@CuQF_)ix^ybqTxJf3a?;gYxwR=vc@lqm$HYC{_ecuk~uz$ ze^t5*rPkuAM2Oft;<_M{k@F0;4YDosSSN=^bm)MWQu`^JhFb~9rydMiSYUES;!Z+s zOZ^6`uoC0nWqh#z-xmRb;4xcsoKx_sa3wfkxeoz zF7nOrc{AIooQO@5klN5Q4JE}t^V*ZXgR=5MI#?$XJ->+s@Ocd)4+kkG@j%@ zu0+^=C|yxdoM%~LJyqyA_~6p^<{rfuB83lUZsOKz*hI`9n^vGt2)PNbkdK|AjK_JC)hH# zy&i98Dbi2dk_1cn{l2y#jD(czhXl`*77JV}5}@?;l9IE*7s?Io6$iXX)zS1hN-)CX zr%JecT+qkUYhgGc7$n~lPBmnqR!dD^wAFI}%$SBgR}BzMD8eVULy-x`oKv9GZy!G{ zZ3>_BQ36=5>2dS;X{{uNIo-v=cFqz9v41@TKZZm({y9wvylAtgM{8|Lo5N*lOg-p`6J( zMEyHj$coEokiX=YUD``M#>j0I3>5h~Y*Ik?W9Iacpd!QbMR*?LZj%IXEin(PAz3uZ z?5oT56p!udE{7j>NjW5>akd+`9R4N2fO8U?egqR z=Evc$t=p9v)DzqjLZVT{R5v6DEs@>~cx+r2Cop!|COy?^NJ4;^#tG;TmEVf{#nk&O zI5UJjPsp~pc;#ysHM*5DMZ8xLVAyM|q4I<9S>EA2Cq+brReAxtno4O={oj@*UK9#{ zo^N-tCF_@0ul*P}mMRH0DaAeYIt+-U=Pu5T`4MZid83?8RA@4S`#Y_px3E;<4sZnI zByBfK^jo%oH1tq%S#c_R92LK)gIfS!qYARSD6{}Ml$-3s$?7#F3PxlZgIq+%Mq7Q4 zg?in3h?V3L-jEn!Ly1AcJaT%;1?Nh;@1SbY8%!!~@04Sr?5qVjP=y^^YOmFCP9XGM ze2Q(EzLb&t(Mb}DCG;qs(ugGy6zcQ%f=`?6t^_8I%}_p5nkOW7Z#hn8FiU<`D53F! zi$+I{o!WL7AB-7G3}rrO$yS0f8~CZvAnjqF=N7l`otgUegn6}wDvk^L_#)#sVJGO zD{7!bo0l(fx+#iZ{4t3l%5@{m9>|o_0BAP8?8yB{2Pz_9;%==(dJsKK_usa?Cq;RI zN63B`?oGqu4u-S~)>XQ>6hnnsQ>wUH4Dze{F-XOI~`;8u0 zQ7YhKnpoo>c`kB)Zta4-bHdE&F$XR02E=73t7_qq6QYWsnVDfIEqEiNUwmU^0{Z3$ zx?9Lj0f&1@gb&`sIE}|q@Bl@#JP~$-;ZlUB<`X(=!H+I2Wgg&j8ps6wFWS!Y9j^9^ z_cIJepV7N9MvdsAGmPFcM30CbElQN=41*zhNwnxK(TU!BjUa;L(MyO#iRktCo%1)G zH*4Q7?tAUEu4}(od$0XjUuTBmQl^(<2B&#rvv>=${XT~a#5cNACbQR1V~X9Yh8srp!Xuy z;E~|n1Q-w{B#AzqW@rT)q~U)YrQ`!(E)Xi0&%dpe$hep|n>gpu>=z3})-K<{NHkaFD|D1&>Y{@UmaQts7OB6T@Fen7i{~5mB_S2R_BlzzxD9`I@_TjTI&) z+4cUugk-f;3V&ryBrh$BnU8a@9as!<)NP*-s4t3NI(k}|j;2=Dh#^!Z*00Mxf5aj5 zP;mWe6(58%%S9B8f^4Zhr)E{F_ex@B!cuAfct_ndZu*u5D(^~3HKf9iwZJ&ihoRg1 z6o`iQkgza6Q5u@(cpkc2o!_EJ^LVjFfP+o^t3y28fuyNF=UB!c&Q$vCygNr?Qj%9k z!xaq?=xh`&t(Yq7k?L&hR?yEh+}ZEHd)`5MR+NiP3=P66+h1;8eP(&ZZ_Jm$p!K$s zFVI5AiRHzJKS5SZq_Uj*r|2QI-5Y=0e8mb^k61Ow(Ok-jgaHVEWJ%@1d1(UT4-lfy%}~Rr0dZtVLK1$>;F!Na$0z|HOONnCoXMb-En12UFn zRE+D96Br7x`Vt};LsTHt|0b{x#Yv$=xx7!OeJFX z^u9)a3JV^L7PKbq?lO@7x5397^G3x?fD2HpnuH4n4oO4CJy+r(%gi{Ghr&kN1B{%J`LOnLDyh}Qp^p7ILqASCi z7*PHO95pXy43lLpby?otvMm+t(+R=<39HoGWl(sID;i)<4L(o%DNJaJh#7Jw6#)h_ z*B4cj6gdW+VJXqY(qj-}$=qx$L8&NFyFHfJwUn&`oZ9yK22lJ6J->FeG{?Um*tE{V zW=EFVwmB%Zp8jD>oP%skf@hK7nF;5I^jKG}XiNitO)OW6T{}G$Q&3k9=N<>nF)GnR znh#X)iHQD6h>P+FcV8-%mS|{Q1`K^_OZ^$kIv|G0QsPr7j@jE5c9ZX+TQ9O%=y3aO zy1PdAZZI!x-{C51>l7Z$`8klnn1XL8By3Ea@P+iKEJ5NM4n2++uma^Vu1%^LJ3Kye zD-8!me$hl;Lf8PK4K27{`L)JNW$uB@l({F)c^?4rb}@)1q9Lo;Z!Q;NypdLX#4e*= z#b|ESZ_c%D{J(HUxRMZhC%IQbNn$twb>KWtsWQCu+RlH^Ko@u`ztIBu3b>mh{yq zRcSv13-7Yj&~|#w*&&thC8{|Cf(vG1reKIe0R(D!WH8h!Az}eDl)* zp*%{2s9kX;f3Kf(q_^K&oMgQS2sv6jQ^A!e!6hCwbce8zK)`L(bW-2bz13;2*jk4T z)3fr?;KFc@#hH^@KWs#Xg#P1DQpT|Fr(ecYV>SziaK@TpzK9xkU8}*CA4%xglhp}y zng=eR3;WL>UC#cz9?q^Dq}mFm4qYY|5BVHO7ZV^k=n+Me_RUc9w?5=432^`2vt0Qc9Gd7= z)$OA;$Fq(Z2uEg${tx9WJA|&&ZmzYx^p-4;l`g|B%U(dpZ-ee=H(+YP%FzLp$?IJ* zi=dffI<5U_;@!Ep@A+@?uEDL$Lx{LtsycL=IT$1Rwr|8wi%A#t&t1CsQ8?Z4x>bXL!&DjV^X)w~?Y>XyZ00G~K5elIbSWo|mW*H{>dt6LOg0 zi?^XQ{sS^I{>n8gh2@^e@J+sgoAHPnJpFD%W%2l%OU~)K;E;-D?qO|z~2UF7vIIPte`P8NP;E@9-iQ;vcBf1IiQNzXC z8H7&3?;}qL!W=TRe-Gqoip0p&;UZ_n@anisIkcpI@Q_LzM}r-rwKOP+?+l4HD3X+6 z{wY-fTO_U>%2xxzt9Ci7@Sh}`4|xwDeUVgAcs_cQd3+2u1srO2QCcagba|gTl;NYK zoN824PjR1ps-PG#4mTEBde10 zB9C!REZ6~XXgo1;47toAW=JzPbPRWEQHJFAp;t!n=|Y+7=NxdZ^U%?pL5S93-bozs zI4lXnohoWb5W@NV4achi)9@XfsZwZ4g6d+w z=t5$x7>Gi?_mh{h)6fA^N&>dKOnJn%=UmPzqpZkt9>Ly76pLE~iP~knGF^-r5J4+W zJ0$($$<<~RPN(CGj5!$YQ%>6VLQEfis`-4Cgr4z2%%0r7wfVyU2mN|TCOle2-~3nc z`p4gX&gPWcivc%<*2$O59w{r?(de}+;3^dF84vLIZN1~*{Zlqvu_mXYSgh#;X(=n! z9EwT${A}#&1hEe;CDJR4Bef+eDURN1Tn5PU@H1W3E0~Iy2;s|3Rfv+YvPH2Hxd>bN zLGbEx4<${k-9NTjq31dD?NF{0;tXDNY|d*gVdX-my{KEh1gT4qMs0V2+r%ni@I9bJ zBu3n4=NNo!@J2&hXebe3A)q>{z^$8&aR?LW(<(4^_nK}d; zAE7!BEftmNIonCS<+Svjw@x9^^^vOSbABF}5*vxDH9|e?}{B%W*-pvC7ppK6laH_;80s#ftK)~2!%G!mh~D>>A&5+ za>pb4EtpEB1s7qO_3+o|&;L9|9&{59&I7W8c&BK?v4(3p88vam8_?xdI||=EkP`w6|LD^AfgV$5=kv3;T(lKUXC1KZ}xG2B0(Vp!dd$r$b+# zKNQ6FIJuR&-$n#H*jfy|a^w5J+g?=rx~S@*e~Au+kK??NBQLw}eIYK?hu0sk zO96Etq1qL}g!-u$r{}9)D+A1%UR9ZQWPDH?N;dP_Wy0*2f6-3nc6jI?2o)MdC|vG4 zcorfPfqGWhn``Z$Gx5^wO3u^ocV>ObW}31Rpx{lb!N&jy@mitN@y(fSCacqW z(nEr^l@Iej*<0>>JwrGA6uZijqgU?;H+51{Z!a(pOg#dKeH2K;&Z)I2Pa>{&sD?i= z2q#RlsZFR50uR$KGJ?`3|Nh60lO4W5S%hbpYiKM! zn^&;))-vX%cZsec{y#RZ(eoKh!Jl^zKV)+oXv9|9a(bx`DCL(cy=2rsD|3EbV0YB# z8ht#c{GbRLn9B-l3{Ilnq7d#OuRRPr{5*d#%TC;mxp+@(7I|yK$w6|Fz`7T2A$|qL zDP1QIiKvfU4bHwcEqVw2t;80PUC$4^D*a)j&1m^R%~6x2T$vG?AjXD4vsh7@T0>88 z{{-Ci)Z3U?->E_Ya-IM%?C&@isdSja2ppm$i;C;+vSkCZn}Nns)Q3eaa4ICkG=?vR zrzq23QMa9QD7X?^uTl?PAE{&3Zv*%SZMXX%XzT@xf*gYIJgAfwc!=tykOo7L;|U)% zgn4b%V`Xe3nBl9_-Czi@two(XgYbwm^+rY@78G8U#{1g)2@bD7jqO{S#~i1LoWYDn z)hw<&jN}*RGezr@KZ%pj;fSN~crzjuIkqQ@BAc?i?!Y8=XgB+QuBTBVEJHh9mtz3bKVBTwr2YUTc!4U(uqx z4dnS6;o|0z=EhGskl(-6ya)bxI;DGPk`G`Zk2624dalO^Jg}mawdYhU;zzy5zuOic zJbrn(INqCDKfOd2{PIDi?L>{Cr@rWvI-+Kw%+5}&D?ojfiemhC< zG9XOh`5@MucO~IO!YjEYOP_NcRfh&49a(XLsc;bVHPI_B zoY;N9_Hjk$hxgTOrtl919<^HZ>oh)uk?b&6kb?%(88NZL3Oj$Aie?4=f%rK%5|*P5 zHs05#5&-Fs7z^zc3_`vb+QFiOiba`6SoTC#g;57HuZsE?;kn*rBz&Ooo(X(y9uDL| zox>)(fIfjMuCg-hhNRSi2uqqT+_3F0^<27!by3JmiWLL4)eaIQ?2vk9^ztKHaZE?X z2Be$}8ZbynSnT2i4nciSF_LrEU3Jo4efS>JGegg4gffzt-9%R!phGJ4_ z6GyoP^YcP==-NLOvWQfy*9x{V zlFj6agDuswFT!hYFrUzcN#L99}_d?T(=mG7VPD}}X)DK*r#8W%76H zr(2>!+l3xekR6uc>#gFT=7E#d+ur0^MgqU|3^tixwQ^CIH9>~N>Zd$4qlcp`a&HEh z*mBZ=&!xfAXsy-XM1@Xd;n)_YKFE7!ZV?)h4-6MyX_I4?!K+QiLrU>%bTBBUQ5CiusQZ z@w;lCcG?Ft{zwq=gb}7uAlwmjccsy_uzN4{Z^Fk769SJ^mad6_r#{g%0eI60N7@}RV zW&vy*6HVe+DTm`QrQgGl$Iv+Wa|M%K6Hc8NV8FJ<>^qbrl3r9~=&Hkb&hTax9Nr^n z)%QCN%$4wc>_(eRfGLI--N1PJ7u>ZT9`sX4z_vB2jb1NcGFC{<@grNyMZi?@bEVvT znhyVOTj^eVy&3-qyaZ03qw~~f&B*wHPzaQ`AQ$~#*FHHvgb%Pab# zAXDvvGx}UU@+jsD2|+6J=@b!Fntq0jqckBqI3GR-;Y1^ahS}ZU5#<<$!E7EFFSo|Y zh*7Q)g@lN!;zy`8i5gT(q~EFLx!cUWK!rU zTr@GHu-IFMWJv?q(4)X|M(`Ypf(8LwHHcodkFf!PlH&(*QWl?$$AI$51?-6csB~Wz zKvIkPpV0ng{{e|XY)F)-Cdq(q0kyaAQ55@!gM4}@EhMAP z54Yo`4+xq#TL_`ZeH9#>V_x%dMB@$1%2$OCpSXLhA&URTGkASMH-+&n!tn>Rr0Ki3 zbPORu-+ctXAp9~3E2bo=Q#X*H6iXL`iZFBG>c1XhUk3Ku6!3?oQ5uvTINB}k`27>K z8x{HYN+ZQnH`M1lv@`lIJy%n9w5p0+)7GFN{(oN-ubGaYw_BLS@~}cL7A_zO`udSFo^BaAH>fuibejFs7OP`Jkg?SZAP%V^&x^ zNa-EuU9%<~F4mWF@4p`sBnh1SJgaeLPzQbWF7@W~AMXohVLZj@Pc&qN`cIp)Hr$<5 z#iw(>FkwmsD0as&9!HAh?d8WR3uf2=^f0&t{0ullD~_W8&?aL8 zb97vfC>36PLkJB|0OHm0w^`ZX7g|}xAd8hBg6p*ev@pmxWeRItLWb3c`~Ng}tuw+w zNNy=BzG6HSUKS*516-X{j^>TFOa^*S>8N;-0UUuPgkf5$2&`GU7LB7}f$BsLy%<2p zik3Eq!w%;b9Po5ic?WS%R0W1>#f5SB?Y|qcZ_GnkY0!l7_uO*!?Z64U!nF z@RCV@!V^d>AV-oGNO%GQwx-gA=;I)uC<2a1Eqy*f6pe$vvb8yZp#dX0-;lr@WS>T& zFWWsJK7}q&PPQ>pi!@FqOjb*x!l;EYf%qUL&~Na#>%ir0>B)Oo zx$_`!@#j6hyl~oBHYtiFM-Qv_i6lJ zlQq{E7ic-xS>?hoEaDQ#FkGeeljFf3i=@?%K8%9dqFB;kK2D!uN#eEuK*UFBkV z`aiSXc#nV&cmCg4_U}U!8TVoslCCtLJL%jD%-NRTyWiaE9ESI0F)BP>Bwd(uB5owj zt_V;Yt76=@`4ED^ByBohRq~w&X{(xzAl5dcSn!qyv^7opz4=S9O z6}{)+5Jl2L&Y&cJ9htoF)rQYUr(ZAy5Ww)0-79nT%ckVz*``)1Ol_uk4!?VAP{CSgESjebT}kKGYpQW zffr7rm;k^pP6NvD(LzyiNsnEXc@;?X4MS%@fRoxX{WSW-NC4|V7-?4${ne(_cO&v` zj_~)|EAJVHoY4^ZMb@q(QC`X+o|JT>AIIk;G22_vtxaT*;qOTGqaMz|D{^y^u%kl& zdjp#c8r81>&V6O5zO6K>Ty)wV6C1JE{+739cJKTnehZh<)(Fx^>%ng;mE%|WIXw6P z{CZ@$Pr?ai&$oRtjN?B@y0S6=54FSe37`u(U3!58PJ=ZNbm4IM#DOWOI4X8fWkB)y zmA9%c(uFw!r{LI33BvhYh8G_5HIWTVjlL(4@ystwCSHKfc~{Y)~Z0kA<>|_kk2jR zDP{m1jzDf*SOqxkZ(;N}@w{PAqdX*o;D)N4r4AOooQ_JnI>)gB0YscIBFYY9BY7Y=##aM%$sQ`Gz`UWwcl+nYF;uoVHZV^ptYSW&XvlLpZ-Oa}@^3o*pONUQ z%LS6ahCk~Z-ABz23k$C6KXj&lfYAhk71qCf2noc!jqJ!M`s3Fb> z-HFY%7;-d#=${r7Ql?lZj3Jo{Y|MdHFd?GsM3&g!JeoBp*o|~DoVmCv^q%;!?Y5#K`%9^PX~=v zqCrk;83~N2K;d8mah$(2^ambPaiziL!}asJ|Bel1DFX65KcMegOuoCNLMd)eK8q_! z86f3yVBJH0)m8biE(lciUq74-eZ=>$f@N#`akY9wnHtY^ZzXBLs(%eg)K8=v2^afi zGQ|>%|C`7tSg6SaknrbLOI0BSjOkB$*D?xg?E4X@@V$~ou9(;Bj%E=5x0d3~P96G} zUmQ{fOKcz~&i?CAX-xj*zdoqkC|)8XUOXe7!h%p1|J{ngAb!z>A0T9Md%!Wwe-xtl zr6L1=tS=m4&GqJo!7@Nt2PT#M0)~g;H_fFoYEm|dq9P6bY!wrXAREEgOz{BxGpK$x zIzOZR;Fr_3s~j(1lZqyNcpYtl4A%@z7hxvf(68>@^4A2D<{~2J5-&vHq`wH_eTilC zP1neD><*s@_&WGQkh)*~Rl`boMGJFduieJ}eXJWZn;9sv7$ zIghZedV&+yXdqjkVv3;xkM|&`?Lf8=(~(A@2ap7n>&_xb8VLWOz;s9ht2 zo}aSI>VH56F9JfpgFE6XPTOmU3o)Z!=KwDR>11C=9gMxG&I;3(j(<4P9c8r4#taBD zgR?mvEOO(z+RzexiU#^OJg8WrrUc&PkTX79_Ze>p1B5cgGw_B$_pIR}FB^?u%Gu~s ze78Y_^<$upqB~f8rG1wFZyEp6O7RPP>PR3bnsfB86!fqbWYr_|KK2d5vy??>I_2); zd4M`uSn7?#9TV!^0EkGogEWO*i+UD9G<>j7#D45_dQgaVV00Ry+I8_f0I!Hblo%g= z7U|V0%37kYnEdX~-WaiaN62yJ_vJ<5r60||DIP`qtI#rN)Yr*GScz#)ih>%!sNDlw zMEUJFw)^a$;cHj&#?B2}uzJm>6NQ!V+ZfPZ?YWyG@OfkRfbQ_m9;t++-bFtPOP$0X z4e!HHkix0@>oZW<(G)+CuV@#?qCSutwBzJA zyU9-6c$wDtd>L#ASJOpxd-@B?dr*d9e_%!uJ$y;AcEFTEga)2#I<*B!ByT}6FQz&Y zX8KOsOhvGYY*yJV%%>#*z>E4QqMZOEOHR&W%u((dvm)yL58b;DoNQy2`DSqbtpqnv0$mE-+Liox+brjNJzFu*btiQ3EU$L~_Ukwy(DpR5@BRRI(b zU3#`+vfC+AWMO@c85!w*8t`*L3r2MyRbPP!nQ*I)l-oC!SKyyi_*?cWcR`eJ>98+W z+-%SRyQa#JiLT5gjm{?2IW8nK@Ylw5S@#t5Z+rLI6s6epd9LxrO!3VyybA5PZddRl zYvgG_MMP9D|IiETqYi|R-$o7leC;9AO=;xnd~K&MbW_ya0J{8l&(@Oa&x%MQ!j(}- zKFL@q-v6Q%J~_U?Kzb#3K61-wbwLxV`>(g+6?|N3L)wZ(L74R^DaMBZFQrd0FCgpc zR%&ER#Mt(t{{GbR*ZvefMb6|IYrDp3@e+c*E|z%?Qv7iiJ_mwoYt{-)h?EJY{!+q;Gw-K^r6j$oLLDGQL~ok2;&1UQt?sqBR7qKk+k9XD0jYpU5r8hVI9sU zHH6PHn`45g!wlHtvHc1lI(61$xCp83YDe5l{h>OnjheY0XG#jwR9`h&!lR?a+@Lb_ zBHK#-s^!!u^HrI}+aQ@Lf4g_&$<T9}iY+-nJEWZU0@S+_2m!y#wDHT zVSiy}#zKYkjo{EF%iaUE3mL>A&Y+tjl$obW=jM(`C_<4YQJ$yu&K19AMPGFw2|KfO=YkLqn92*<@iIrmmN`TSPU>k&cuBLB*Y|pslM{63cMBg+G1Hk zRm@3=cvr>qTC=+f1)n8Z4AJMbv0>&6>)Ca<+3Z~CmR~;~`RGR&Q?6iM7&M$>hQB0K z1HO!P(mZ>yYRC8x*JEKWn)RYtgouRrh+ShtdFqF{;OqAiQBgSV0%(+-z|(+euj0e* z_}@v7k8_wW*|d5Tf~GnHT)heEZIDCl)IQ1nU=LgFR7`>;gW$SLH9~uU*PrVvdmn}- zY`t!$S6tv-EaxCas~zKp^Aq^m$(5{3lX-AN9t76uMaxV#Y6Bl3oe~zKZr#Kt@_MQVUZM4`L;6)E{Dw82> z3{^%@FjXB+W%LYkDxP>B^riryfc(O>T+zEIIrwV&X-pb^9k=)}%P% zb(~;sV{xNh3Qc;jZ=_iBn-c`#GF@)z^jmrKBIZplU46=uOcpZ3IpBj5nE8l?Qi3Dz@gp7o zDar>A@7}oo0>}g7QT_tjL2U20UjP*2YsmZ=P??Wx6Ommj3iRN+ke1}0W<5t5g&@@z z>w__Kz|Ng=wNqo%++kY`jX(2AL~U)0*~@phhYPfY2 z7K2@*C={NWRf{Mnj)=)vfA4<0YUQy{uwUy?pw1@g8?wh6Y@(CwDpY%_O&8`jNMEKU zsx*pYq0jvAyHOACBbk2ow!4Zghotk;?V+qBzgz8?&5Ht}oh;jF-Y45DMw6OJKjkBT zfBKI<{h~L^hDvg={LYWzk-*c^r`J-9^5a{n%(|uH$VD<^lU#I6VgfR%Phuof?#~U0 zT$TtKWe;v^hB4stZ}}2=)|dF4x#G@V-42%)EdS7=g+lS4`dBr-2-I16+UISRTo2>B zu>K_f6UT5$FZgw2E6*nd+YkRZ4+xu8~P4_uZQ1p!=Ui}CnipR_$ zDEU7fNjEZ|z%9YckMuX^mU>llC!`+bZlOKVb|+2DwMoMI{JcVXjCINo|MQbXyb7Laj9CV7|YRSkUjZ<{5#0f zjre~ORLS5_3wl?djxYTU$(2b_!0=xNEIQWz>T0qbbSpYKof-mD4-RGZjfX$KJdX8e z|HlUJwEy~Dz~iw|V$+*{R>3PWBubgcjP-gwDh6fX1Uv={<|SU%#TtG^VS&b33z$Rb!$}_`dGGSAroB0jd}{HbxGVGf>(D^< zCK`OuuLC9gA5xa9UlM)Cn6v30t!Y>)S4X>Qb#{jSD3s+`)4F_#8`KD|=|<4sQkM0@$D?C-YN z@WxL)*V#cW22lEp4oc zJgRRBs6s=Xt1k6sCrMS)gI9)ls`Vg*Tn+NUtIErN)5(+oq52%dS7{{S0AB3HmcKjl z8DZkQg4IxNB8~Z8m-b-bcb1Ryqi_tWT{R&p>U-vLs2+cvoxJ;Dw@K`;&)IF0j|Xq% zAHA*?uI%5-9M%Z$R?|q6d!wyqE;}%1)!#?PPvB+08EuvERs7Lw3OfPY=`jAR$#AVO z14p8Mrn>!ZjOM#BVaazk`Rw=-W~`QE&j@V(wcr#Z8h^^gtOd=xecKJPZ@r`7Twq5v zx&e_OQbh(ZS^$iSj4+2T74>V51a<^(NB%Y^ z3O~PFX`c;Jtm=I+<9(Hg^&7QhZWB3PlkvTrH|LCae^>00wQ)YZWUISpNi*NO)>B&4 zxAS8Z z<^RK0lz~rdgZ8&Ig}tN?I;gp9WAf4axhe(qrk$C~#>l*;tyA-M#(W zx_Cxjg~XQ21JM|~iu%8zx9yW^{^1Trz20`O{Sts;Kw$c9kF=1G&DL@K<)bM#p`(nC zjTOpkFfQ-O5bUl7m+<5^`KE46PO@Ar3+go>NJP_;t zA04Lc%aD)QwJ($Cn1UB3jCAA{FWm%G(tpEy&+)1}d^mE66;~oTgfQ zNKTd0zgOn_y~+?`yo!EIk;`%Z>_6L=!DXDQUoD>QESb)Qz=zgpBaJ6b5mT9E8!fk# zD$Zqpr^y_B1a^7ZZu?`uZjA+5>b$aSn{C&guyC5ISM22tZE<%!>mu&d5B@itkk@k{ zTb7`Js=Pb6?qiRDiITBA{v|ixY_#>+4^cWzjz?l}c7$Ih{g1V99)W~V)C*5VtLcIh zZW7K`^6L7iu$vw;jN1gvOdGev?~xB_i#E`q20ALS(f^`E>9V3CVWk@McuGA_=!4uI zU&~qkY%^7Ghx>C(J zN&OQo@s#{CwGO&G1oB3^m>v#FQsPvaUaVN*>P;YTXL5doE~ zgfuH}cdy;EPk!iN&~Dy@AXS9i81dAam+%5zN`gLx)(P>zm%1O6-PwP)Ay7s9(v{~1#Q_%x{8G(S>BXC_N^ z_j^n8dEme;9BGBgcfvh`$e63mZO>S&Wx-8OQms$v}y zj#d|JhDk@W$+7$I>d~>;#)#=|PtjG^3`qTDlZtjmxQZq^@|LF;kE)Oa{2CUEzclrkBhZ$s2!fT%ZJ$I1@j4wUQ(t-Dl~0I^X*sZ~ zaj@g*?GMZfw&`$>Ua^qH@EQHgA^5j&2W{#GTS6OKRPfBuOxj)9}IC~R5&sFl&W9x zlp{!;3uVjy@WAI0>%~D@gjxCCIeY}$1T6sy{U0mYmp6^uS7th4h4W!y0;Srk4cGQq zdB})&gv{8AC*f-QpEsedN(-MCtp5gxP+e(IOJlz&(^Bp|k)n)#!1`^RbJE-1@eP?p z>%;7g@F2CdhJDpu({Gnf?GxiwFYk6ld;jb^j49z4t&6RE{Ti=+$|ujjOl$nlR~Y~L zQ6$|gwaKx~cs%_p6ckYz-p9kg+sa2mg~RnPw5>>-9JHQ89+mAvml?p+S)ysdYi40aqJ{C?Z|8Dn+Bd(7gr zW3(r1H?euR#(8L!E=|6EqiailghxU z`AOm?87;@x0Ab7v&2k|lqHnPZmp(T7_fzNA>&3u}`K6=oi61l%8pj>vpS51(ti_eo zehms&Q_rFAo0mR#TFyycV$m+1t5iM1@!ixvgf@_=zJ-UurP(grT?A~5Y>lf?R)rnq zF_j*;NVG{fmNLDAdM(6$>Id0n@Up}decAS)Z_WSk#^iUWLW!qi4QzgmepkVkOze|l z%GH>oqFIygok?2rRH&}pIz4>iI}=KsGR(iKp9GeaqyfbL;n9Zw*NTuPjIT_8&;g1~ zW`aVn5d=(-0rsE4dOsasQXM|lzFrw+1s=UT?_xUqkDgp^%tlw0Vj8H>PQLqk1VR|o zJ_oYiQDn`qrhArgr{8(#ajTsio-;!i{oTlpq{_!mdHHVn9Y5~t)Hk zm|Wi+eET6f^Z0=0r`fS{{wI{mhR@w7!9B(2FX!ivcP!g^?HGVTT&7pHP|@!($ zckcWL-*}+cl(T9r@ykxX5|>ZTnaP`qcDCDpBMv-~hE83a>9OGrwk~iz-6+_%3yt*n z?|G=SWP=E5Z+K!TyAsJfBy|e2|BLsDDmbsG>7>>~!YNA}A^0p5{fen2qF3B^pM19H zdxPA#Md!nsPPi*t#uy@}wTUhX9OiGRjebZmdiimtzRD!-<7*C&*kt3A7iBLXC0eDh zBpp`gGm(EZz_XsAgDsIh8<*Qa>+fbigUm8w)-jyK_=nz=cXS0UAx70y#4oqR@Eq1j9`|Q07$?7vrQlwCgB*9pVmCz~>FnO*vr*isW+ zQ+T2(Bhc8&>#b`A`Y2_WXL}U_ZWPSjpMB}C?Vsl^qMMa3KfNKQv1jg3*nE{1Q(70)$jcA6Rl(y)Gvkz-x}w|dAJ)#7er&dvLgJUS1}3F1SZ z)?tSrJ&#s}hpwN)1?|_5e(b*QvoiafwwUd7Nm&Jw{KadVVh*}=B-o^N%vq3s>%a1) z;fU{A=xeXK=A?ZhDWp!llCzIkbE30eKQSz+)s!J{MZDVYM!PAYSG^-YbW$-<=A#x| zPK{nw#-y_^yvb_hdg;yd;c5_#O8TPzANh137@&nWOY}BU1gr^0q`+XXOd<}jfkk9a z@5qGk2pLB=aY4~1Q@wIf8S$%UU@=v)$a>+p+N3_UBrPbBA@JKO{tR7JWlz*4A0jEH zEKO25xR6l=*_u09M(|;PEIM3KrNOj)!j5?9P@51l_{mliF4fEE0C!`0`PmE1Xb^l= zt`_||(mbuXw4})*LbrTxIt3eWfxScUu`SEQ?Py1PK2{`XyO(3$-)Nm&{jyYUeqVEC zNm2hD5|4BoFlpV~hXqcE)mL}=zNtBUpgtbw{PAs+ zht*A)r;{DbX^vNiSnAtPht8>&o-H~C56_q>wvA09FR-Vglsz{0T8wh|5^(&cpX%D0 zl({cQY1rrJ!<%o@J^qvD7Jho(Q59)zjkYodjw`BJ>2a0*6uP5q2CKChzPk|^O!{C% zYuOoc`PJ_=n_7SGBJtBe{gGU#d83{C{<1d6)5)u8GlI>W%z+@mB!riv(K|wQ5nxUm zq@7z|pB-SR_TWKgHVLt*|IUzl>VaK;h7#iNp__baOJot=y!}9Ff#DD+)6$ z8J))#5yjNCevq#nlr9}%1D=x$A5FnMZ%LU38fXOK!BF>4Z5RN_twLy8!2bbcK%2jw zQ;3N1(S&hLK>$n8z}6B`46KPJLxNP%g-BpdslrT;)gWpmi3+(q=!p$&C`GFWw@8kV zZIPDX(;us}{SOn>{b8$cZKOu*j3aVDKnyZx4oSnG96TlzOIIO#m`Bnu{{d>-RXg)E z4xjnc=$7aNJ>0_2uNK?CH`{ieh{h7^x|(N0-R;y7|UXm16j(s+4jpGdLMMHVaB+htccgE1%BkgRGmLRAFbn5+cKe0bZ zdT4vAT}=5_^mHMVRYbk7JaTK$w+{6lk5>P-kr^Bxuld^KJe`pn43ANe$%KuQ2?OIH z<6>YM7sJrO)JY`@VS|Aa4_A++{D%&vX=EV3qG}_uiq0oP)A|d@F#XbR-GC_ngK3SU zr9wj=T)ZskGz-9hV|yh12?r%mrVx_(8mej&_yFNjj@zjJTk82~|?W>1*xaQ{D+KY6A_4l3u+R6aCP-G7`b_^f5t+&)B0!Fnnav z|8pO$5XoP|h6t8^1}ni+$%W*xHKCQec$QB1snENe>M;{M3Bt7LTRL6(sy&6$iQ{fZu;cPQaps*bfka_bTPL$A`6TY$04Obyu zrn{|xi(kGC88`uUrmzvS+M(9I?(+*k=CtZKq~LY?P3C81xMnOSL^%Anl=_QgujqY=arr^X9$+kM28S6j(-tS z;tA*+al9R9vDaA1jmd^~&=;aGDu{seT${pVJ`E(zQ8Y}!H2(x)Q6y6nR3%9bQdCt` zRTWJ$6q{@qF-X%?QxpWv6%|!NC=^vyR83V?RaHb&RZ8u~PLNTd1VT{w87W5zQ3_j3 z2MY-eBk5>hnu$Un!hTt5ElQF7B;h+A)`d@i(<)NR1s5;$ zV_x33G=0ZRR7rRYHG6*e+)oG7ZXQpv3sfI)#!Ow(u#X8w`ax`K4q-O~B(;Z|hg|~6 zTGCn^OAnx9$X*|Uo1Y~otn_bXx_Te6k&IK<907{*DkQKcY7@Lpk11|{AsRIfqG)Ov zRHVkJwJuingC93y55SFW2iqS&P?ijtPBrDCtUgUYevPeB$6%X9bRM5H#6o&e}XpoW^8Af3pG;7;tpW-_^fDTDN0m` zIT~2WU`h?reck~iX#CLg3oK02ypTwL>*Mf{(_xT}qencY+(vn;&NGuuCGJC@G7Xfb zMigQ*bLQMgs(N1zgDSJJA9a6mX-x3Lofv%|RnA|9_>cO4QJ?4JwQ@EhQ1kN6kdNCo z4MOp}tZmZSgLp_@qYDr)yH7iA1!7qE+F_v<0>P||qJ4k!d%mI7I8CnM_F6u#?_{lZ}18{T+_z^s3?KhA65=OCmoH^YgawGb>i}KoHp$%t;X`& z$HKeoqsHMP)~xsD=bHwLh{Xdps<(%cHf1~e!8B6KBuQem7(86&lP$-I#B^Fu&($Z|jD zGY4(LfixhF*MVg<5ve}^p z_T*2M^ex>Rn5b4$&z(bEd%URhdVUw&(Yqm(kKDE$5Z__z5ifM%zen~;HPr{tP*q%J z>c1HMKM$OCwBh#1xb;Wth@H8nm zuw{}Ccd`W<`Tmp+s3z7RY9Y*G+_B0Uie$u5f1>C3D>udx8NH{9|9PA|F5s~p;PSKN zz&lv;eUkhpaNx}6(oFZ2jkX?x4KbSrTj7KE=A6u$5k~}@``i@)AMfDyg4cF5;>x4+ zLGqw7EN&sD`so?@h=FUP;=BUQ;``CVI7TN2q>(J=EhP4zU|Z-CbILG3J#pt8b<*IT z$y=aa4lx+aSMoioOJy^^1IVHY`mS*GiP8T7+?g?R|8}@$!_#wLxu4iHB`-GYET0uj9kFWM3H9q&G6le6sDGD-GvvZ^0evT1IUyUEfZ$WuK0kH%quPM> zz8?hXi%*JR>n?kS*G<|gY3rA6qsZBYKF0u%ihe9@uLx6n(VUYWiB#`0Z;o*kY zO45qYQn$#D*+^Ysctodp1p+I@;584wK^(84;6-aoA-d$WRer}};h#+%?^w=F-H zU{(g>y+xBJC)$8^d7gEKz9Z^XZa#b`4*H2Q^~6Xc0qj(Kke zN>#9!b5-^#>CJQTKOV|zwG4A%W`+=FrjWt!%jZ$7n+Npy1HlR-0jM;35*G#C+c9D4 zez^u`Zy>3&7a*6y_ZN5QaZt+05&qAqpyH+nh_gW*ww3MnzOKwoVkDqbaAs$hvH!I` zq@-HdUFi0Q9K69bG+L@XaWTxiu)Ugg-lQD75<}p8@;|I4f@JN zr#~g=zU>#$#N<}Oi(sR)Jmv9Fr#@nVh;%u84fVgZV7T&%$Dzb zy8Sroik|>wgaBlKOr5yFLW4sw5~yNPO{pCv0ML}uP%vo{X##oEQKP8C4p-*=j?C7R zf}wV)A}irH4gzCB*c^Js5=wBTz- zKzUx>JmfK5IL;#sOx*tYL!b=Tf>CDH;yb5)y~x_-_2`77+_onI=q+1D$_<0$9vgv@ zQPfTgm)8;86nwl#_VnW9sLk#d?yEAQj&KpF_h2V`%bHFr!$HiNdwW%u6Hiv`5bdaU`S6Z4>WS zhMCZwxc=Ih`x`xHNkJx*KoV$4@V7TS=}2L$jZp@|3`jI$y}52|rkRnfi+|W=@H?ek z1h7FXnSi)it={@Y)n4dP?kC;uc}ITCd>L&%6GMK^p=FdUf*F>O?Pol0iAFz7dc~5c zxBY`3-50m|(5t)eMrWD7)izo`5Kv~|UMLo84-zYxp_$JTw!;V2&Qv}hdI?KXionAR z(3GN{+EoMG!VX4|38;dD2%#bdFpLNiD+!=3$A<%x@&Dax?Gx1Ds%ogZ*@MhF!`C5} zl)UMsKTXa{bSVXrFNX6ym1ZJ}2Y5GFa@9jo{5H4NV#jW)_OFYvLMg*HCUcR%4i2?a z1FXD3@}*IA!6whQojyTE@4-Fc%x7^K1s)jA2XiSJvuenv`;ui&u!-lDQ)RGMrye28 zMA;Z!b7)-rEe*OJnN$sz*lnK$4!^v7CXM`~lo-0f?1{zkj`MwM+ z6`gQCDy@^{Fa9i3ke0q#soDYnL{PM*l^^+kgqE`+RHg?Hg>~I-E77eIuG~@G>g)+9 zAH=ajEeDjy8J89ifKA`i3^UI;Vv@oz_Vz@HsB9SYb{ggs?mmif+(Tz!?mlbO97m7v z{HC58>O`lu-_q-A6{_DwD-wQlGr2C6zr>II!u=yWqNj#8J=Yl#=il{0(yJBO-%LcUr?vRe#r7eJpCC!r-yuKD!>DLh;FiKTC+in5+ zx!B?KC^4^v`sjr~R&#|k0KKmD=~ zc^*y*FNNdjv` zECTFgj=4XQL}{T^ui&MIQI7ahgn1F>rKoidTqh9$`zb9%WSl>p?f>1BxgW*FQzAYA1DHb$B;R+pyON;F z5_M=gSzPt~7CM22v%<+#>$f=isZh7fWTt`&_)(*DC(!&Dgcn(eHbQ#zKVMm= z%7(BGRW|?X{Lw8LbrZWdcVKsRlksavGhdkG#oXXMchY0j?Gl{E_Tzuc_ib9m$Q-u@ z4m`NruiJoi=LSc5<2M@K$n%!J^9;E*j7}&=*`8p{o|me})$xbQhJkfW7%&sZD%sTL z!zqr+HW2aSwc8a)a0&GzD7gH@%Uz6<44(nT!7!>VL-taj3jM{hpX(WqQn2?-Gmd9r z98vcgcuigRC-Fqw$hZh1=|;-<-V&tE{zRw9(B*RDe(rSV_YS!Z40W2EpRid1s?JKjRYJJZ~z+ z*FBD>c;MLln~l-3e92MaY60dv)JuyAW{YwbySoU0u}DEHqQxhX6n1>lx@o8ak{)@KR^(4kq=V;yUT5~i{9 z2%IQ~%5-9huFMBKE-HD7_S2r0o{c+QGAqQumE~J~2EwvcE6?lEyaescqmeo!SBR-2 zt?yAAORqoSm2B=+B_KteZg5H{{^Mf|xMkJRmEvbS*)w;hHjy_!5R-Tzt}ez67?f|0 zi@q5|QPaF*>rzVh0wuu`QYE{d0g#E31`zqf3`tW!z%(u-2!aEx(}vIu5Z=4U+4E%& z?X0y1L3T>kD`tb#vT2C;^OuDuV-e&^gD#d@0W8o_Jc{+y=z|_+d3UR#-WuOI=W+!! zCe(k)NrSPB@_bNKO%d%e8x_nLXg}qAD7bVK6J?SurcRb6`WMG>Sht&FYG2DJ%`l{g z)M|iA9}r*GS-#CsXR~20nB8Ynb0p|Z``({j+0(0LT<*jJu-)0>Q0(9f^=&wSlgMa{#|9z2A>UC*Fpbc>$EL z$^D(JikE*z@=bLY2d;XX>YOEq7D(ZRV|5Iy824kj;t9n*?I0Pz%Y*f}Z=1d0R7dLh zZBCAS63_+kWW7WQ##{$|>lfEFYVL+3kjb&bPE1gwcKYpuMP4MPoayS}M_c|= z<1&`d!IX1@CiOW;EBA8S%P>4*F z!bIo^(S~L~t>c0APmUa)U}M+0o=o@bJ$~Fm`d&^R2fN09ieZX*0q^4|c_Y9#3gP>o|pdfII2oR zqAgs>ae5nW^|9EZ4ayhzeHaNLj0o{+4Rw{p$pwke^bU8mBuE&HCKbd7?F%oPb!f?o>T?&sZp0!5zyxWe1-jqD;bDu)FZ~c1?Q&so&GXGyA!|hmX$L7OO zTuDuaRc7!^)H;EER2Im6P|CRlxw+I8)nb2!N0z8Rf_|^`+7A#>7FjuMlfpR<-{~#w zNAUYKtIcna<<^1Al#uyi5`aPHT8-x&ci*3>nwUN9nF;2$C?yeulL!?o}JE%|l zte=_pvbVlybl67c8n*<1;=TL2S844qUYs3Vda~1{@$#Hf%{3`sj9h%H%%? z5hU+U6<;g4;5mo)dLK-Gdh09?i6+z#5EKY%A)y@xJ;8y-RB-?jVgek_y>h4iU+c;B zOhyJj)AB5IOUH2d{!LWIJG_;${~PU77nak*SnkVMZ~aEL>Qv<6@=xS-4GHi@2tS7J zn}x1{0HRKsdmrK@76!P0W^_5&hu>IxqEn%H?uL;2r1V92Q;HgkJMv&}7 zZ?9LLwbEcN?jmy?3I7l3m85!cjJ7>yCo@j!3b8=%3Mjf zC>HAna=7MhAmVLoDzuI*K`lNH!sP7QGL0XErYIoRpnDt8&T7W^fbug;DwMP)&@~6K zaT4ssbUBYtCBYC!m%%DaBa$Ct2G0xeTD<{9wHZCJ?-$dE6(bP+g^9DF z(jO`H=U}!;b+9)pen*_q)#GSP_V#*LlI=n-ucS?WMCX6+mi!$scvGKHVg`jW6)8~3 zQ8ES?0;V`gA>oohP4IKP+#CU6%Q?ZreIBhH|HGPEZ%)dna-%?`)zS^cp>==G*5bCR zGu)G|+vFZW@K=GQXcz>YBa#&OBdhO+oWVA<)`^6K;@-Z4T_imPyyzOF+pT0n*}ZZ? z%_?&bwSIItKOu1^2JE&!U+CzuUo;^i4F~LWJNu=n%YHmcfvS+N{M_`9plsO6vd9LW zQ`}$R{`BYiyq10xwcA`ubY!6OPsEtX9%nr;*QHCd*atU? zybsNk77?Vq{K<t4K@^x|o`A=9OnFb+%cs3%wtoD+BduJ7c&Q^NIvrUKq}bvi8|P5m@Aefk+gto_yvR~L}Ns;ZNj z(AUvoKz~j1qLr*KGirG$l$NKQRYE5R_ zV|Ge5XXM>;&q`Y>QxeRV)pgnI&h;RZH?$pLm~1`d^c$Zr zeiExYR4{{JF4gk_7bbIF(GfS&vzH*v3Jv{Nn<6-nz1i5Xs{A0ozc+sz8K2TzoFBOb z+tdMi!RPs)pyX1rI=V*RlS1R8HIH#As?HZ6WCpl(Zjwz!RqbymJn7O!>kcTrkQJc8 zkp89*mw;vbu6V!>sUqR8BG27J@N~y1ff*!!4-l?k^MR18i0+XHHU|A(Ke%>N5Ux6qCP8-iddq|IVMpP zERZMTcb;_6C|D$ET~dH!5KAbK0Ftoy5`s`ZJ1UqzmQL8Zq(n+Uf#lc&=x#Vi6R{gP zbcQy6g~ssLRm0rCfcbpIjb6d}XEpAi?lACM4@sIBJc`wM?xkALlU-WO$8}V}R~&a! zzCYlDod}u)pJ>yV4DjDa2j3BDlUYO)#|nUD5f{E8qTLKJ3nNHNzeC9V=^lbR`CYH9mx ze{SAXqzpb1om@ZYySYj4etCb7@sGM4z6KQF##I7o1v8s-8_RGsslWK%1VjQLi5HzT z%(ii@q!~M+@2AxigaHo#47mhFjH+P3FBPAcEWM}3aqhtTl=-D7nl=3xYzN$VW35;JiqL;M!C|2`O2#()@y` zQ*!^VOqB*B51{*PM7iCd5+NW2kVFw=kVKCW!~w(+T!JuogdY?Dh6WrAK3>QJ!gwbM zvZfCdf5Lhon?6n4W8>ole$3~Zx)@22q*$Z|91bv*VsFlPh^%cb`S52%`?K2f9fDg4>-9o^?4x%a*UaDHiag{>8%gM&h3 zaE+`WCf%$4)|x|5TKCkQL)7`2xLbE#N0GHD_zj&*6Q8|rk;^LsMI#{NWXil1TMv^G z^6`Ta*XT);R^0CsOJ)bpj{P5Pf8L-c^7l5&VG$|azg-8|&@D&nC~oLpg{(iO>r3;) zWz9_!iP`FVN9lL?F&>VD^vuQ&Em=bhgvbd-0huH;IRGJq#2(`Tclrcj%9;nVHJY}M zN$oni6%kk$Favc1DPZPF)dY3BhCd4uKZR^DDTtstkDSUQ*7=K-aK>c0jV+=$1*U}v zC7Mer$YjV%Mlb}WVSUWZ$Ap0*Qg0B1+2+QH+s+WEtLpzJ*uOjM8st?fnvLI}65)it z_o<0@2h+wNBGVhKpX65Z#sI}i+UNR*7Wkwsxm1}?YB7c63(i7a=R4k3Ia=gpjec-H z-A|^;M7pPA7(kOrlP_fwhr$@?Mt3Brk8!rMmafz?@@~U^}f-9Mw`(4A-4WopI+*Dd2QAO&SOJ{74y-6*%LK_5h`W z(TWujD`^%8FSgt{s?>6Os0Zr$uPvD z@7H^b#TSv_9IWew-qKWwI-tQTnLMQgjG!KQ7O+^C0ll74Ae;(7x4uArNs>yt^aE(f zRI9BV^~ws)z96wXwXSISvEm@wvlRsV-D{ZWB{2MT z*SIBLe(dXqk&3{*q_r9^JsO;&Ab2mtmdT9R{}k0|n0vqBVn~556GfUSG49D4lBI9+ z#92tRSbb?+E8v?QdPk4z*>Sz-l>WwIr%e)Q6cj{sg+fJn3!zeNfLM@{3$)>(Ww~z3 zhm_N4wR%V)>VKjL(;*5SSBmaTc<1Ru6hFC9SVPz^-i0pq_u6$ySwtDq7Xr>c1*7my zrqhNRgAV|F-h?yKDcK1+k~VbbK~Iy@P~5Dfx~+*ls5huLcBoy*;F#F5l_Z!u?gs3a ze0ljldx3}IzIVVTauyt9Y&%@_kHyvW%_5ttxOssY1`~%fkdfRN=?sEdk`_P`kO4vb zzblB&%x*E#(_Vir+B!;qgL(690d@Tc)pMHmM)#IF+doD>6EAht!4_R>ZOK`9LB4_T zB1gh_K}(uX?F)!6G<(I+_y_ZZviUGb81MKaDYx zwD3Zj6m`Aw9K8T!GGY*;Fm1(!b>kaA@cUL zZiB&YFK&qS`c7g~GlNf_(H`Z1y12Z;cNT7lgvBZrPZ|$YQjgnDiOK$ZUXpQlhpK;r zZ-=SK_H$nnNX;`qJ;zoc$n>)^LY6dR&GLY(r0#oVoe{OS>!hq}a*82q3xXR1H1B}0 za~yjQUbg{&H+)0XlrP8_J9jVaPY@Em!A3W>)Drz``}~X7WFN`qR@iMGlCZW|Bu|Up zo;w8ymdE8NH@`;LFExNF1l%%+aSlGR^23s1-_ek#JQ#XMG{&}e)Z&Cy8^vT|{-1JW zlGgqk6WHdH6IiqSG5O#Ta6+5T0FnTBV3VIUra<;+(@b^1CJ<1VRtm-jK>$EHf&-4T z&oi{|a~$>Od>s@Vq9y1#r*HbrZSO3P%0{<+%%v9H$0(ufZD-il{n%0hiAQ8L>B= zT&ob-U&s{E_ko2F$YnwE#vP7>-)SY=P>BRCzGWVdJ_XeEjX!K3~pX(gYtFl{{)nmZJOEI ze7*4~!<%*_GkV?~i}XrLMAbSRkD+JP+B=U$ ziur$q$q~i*l3UMgZ16G{HKU4=!Dwy$90;}f(g`D} z(*=j&tz24>l4gch{S&3}I2gxB;G&5C_a!Jcj9PtO{duCXjB}TO%-i#m!&^dKvK@hz ztZzjue?l|2TO4+qe<7N8N{DPT&d5HqE@#WRG_#R2!Z#(Rclas^wB-i zrcRD}(|n6#+c^(ZJQcq5)!Zy+{GJhF1z9L(3c3WzZed3%qpUr%1@Z}L_O$TSgW4g* z0MrR0ps8X^m$WiYb20(hoMY2LXFrZ;x2+F8Fd+xbbkdgiy$z0%Z`vtlbnm#= zADEj;JdARvs%X^JO z>r`MrRsTa#$%r-CJHTpBpc=%q_TupC4L)dUBtQeBA!goX4CnuHrOyikE)?n7x03_P z{3W#HMNm8^4jm-nL@>nW6SceH27Ze(Hr9*_gVp!$bWd|jMJV|*27yGPaZvl;SrXxA zvY?ODlZOTg!X;c^mqme8xAUd&#knx?Z5U3cE(uIKR}4|(y7~!?WGhO;_S7R^nMkkM z-^3CFrVZif#1SfSee-xx{iJwdb>4&g^LfueQ{we|i6fd)#i7Y!oUZkvHl@1^tOI7x zmKB*Mry9X=conTTD*VJW5}rYDy&K-2y_c*n-M83@9wpI?s+2>38~4ei$NDyC@I_5w za?yt-Dw^i7YVv)=sqE>z8Z=K9pVtAS# z^HA2#j@h+*KZZc^`yUpFeEuYq#t*ai{F^n|XeT>&eQsLi$e;5t_NtE`xmmKr5mA}@ zBgeNz0yR@QI>S0U1@a=1B@D}{h|DAWCd(J&u*vZ-L%#vR=XNGbJHE5*XV2`h5-g_ zIn5!{2{YG&WOTt~C;k2R2!U0SF{rqj%m69 z6(OxKdm;vEa&%-3z$`3@S&+@+pc&*Pq1EE{^s`VG)HERv1NbyT^%9`G2q0bkI~wb3 z9R9BFJoXJk7&CY86YL+kuoodD7n}NoxZxE$%cK*PM}h>Y{NEPUahK&ZyK*>Ki;|PZ zbDN&l`5cxte;&2EUng@lVR|2ESsMoUXT;llYh#feBCox1*%tlibf>#HYs_N9z&!4v z)!be)I(wfDgHhxEbM#2CXu9U`T>1sX>HN^QHjd8*z!e zBMqYu8QD$`2ryjik&cjhBh153Z6~5EN(9Pen?0e~-Vv~7?H5!4>+~|`eGW9~Mr%{= znBHv~H=mTJK-?E)7u8CFGkEjBCx-I+NkiIPM*o5A1_})lK@l_FuY7ytd)b%6y`;K) zTRHMAg5kNr5(~<^Z!Nzp`TOh{K(fQh9V9sZ+_>M;NXQBDP=s#(ei=FfPJl|^Apia-~83F#ohEXnQ?3@LBJ@f;K`Bxya(;Vkw9>ogH11DwbuV zq^xDv@e@Pzl=_Ic{9TxBoksl!*Q4|L!!mHQyG$j78O2EbSgGNigM-j&WEW&DDMxYP zH#&Sib0Gn{&}RG=P!75rm<>DbRWWE%|qB*gGs=f;?2tSCqYf0=J)>?RsM)E~A@aI|BI1R7n zY1Rdq;iuP21w?kRyl)md9=q2>-?EAu4q5#gI9*+JbJ=tJpM?TnREvNsdSDPy?cvXy zF+F6b$1v+lZ*yl74g6^Pi=lEKr-9hYor9m3g^1ZiVE%bDc+>&H-?I!bz-XMXO&LV( zq-bG`eEc7m2A~LqiTVD^{+eXgi~^q0KfqcM`2%hbSdTV%4*~ZnB-iF^wlug12bkYW z3vFd;;BjhmoyG;!6o#D+I5(q*g%>kbLcx>cVW5OyaQ|i$qCaC$e1EaF*h1^nUW&8d z1ttCxa|e`!Bq`lUG=34=w%jua+7MjJmJBy#-js!ho7mz{+nN~RhzDJ{^+AK!l?-0&y9nEa+KV;$qum(*P49kloNjX*_mSo+rr(inaI~0H zwLx+=oo-o5$nuEH!>r>}b;2y$Zb19BqD78_0@Hr6<;BId(HWWqqhYWYJ@V(c=9cffPkNrJn>|{St`<3&By$^&keqe>2@|`^ z0Kf`x_`Wbg+MDPX?MH;H+^~rn#`W%(*xM#W7rH|mw;uex7}EJLdNu*~uiW}l5OA!C zKM?JicJ9G6=ODu_ug4GOZUcS}D0&?d|J1WbUHQFNr+44RPc(e-rVg>M<8tgD(bZ5g>iDN3vG$ zk^HDX&Iz13uha*-`KO%4$nua%b)=<$4XFro`K5Z6ds$H1{1?zFP?yqy;`Z=* zMiP_q`I%J@6Vyt@&}0d?f^6qQ0WVY9j|+gyIEAJ#6|_cOh`;$z?m9zU@x>VDeH7ND z<^#*Ymm81^LjcSZ9&%LTKKpthum~Wj6&d{GmLAS*!dys_aiIDAW_nncw#fZi5gV+p?G{!g=sCnm^t;MC$=vTV&?@}uRH}D?+5Q%2 z^^1Giq76(@Rqzu3dFB}iUIK0*2`$ZoN**N#E0FgmX(wPI6D@)7>uCh`mT5Q{DHY$G zY2=!y-kv+)kHRm1qww{m1{lQ2j>0VWWO4di7ULc1TOOoZ0L^)ZBU~`vbPC_ z8g{`EON93WK_W*7d(G}hU2+9}abuft1GQ4jmhy10m}+{5gQbcgOq$}xvfoc~kE9)Q z;$FYw5vDIk1S+$-%Z<;MvX;wVt9$zwpujONW7}ftxvdn9(^ZpDj2vj?2Q7}bq3FZ& z^#21ybnN&FdXhs?6JZztYr;S(K$L)B#%m45kabX3{#AKBX$FVmbT^TX+*|a%HVfXw zVel0lkFR|*2I`iSzi5$`^^8VK8RX3Ne~-iMxSB_x8_>|x6i(2Glz4{Q zXMuR8iGq{Yt_rGV_q7Mq{>ky5NW3O0M+5J{2$%+v0vC6XJCRca?Iv1(^F|lD?qivu zfN&rRZhZ0tmRbzumbcU6=%qRg?=bABk^|WT)g9oI-i1k6*BA$BVKVIal<$@4)YU z7jp2z4)$@*jU6%^=pxrX9Q=Zitg^rQ2M#|!$&wqE-*+!Fy9MM;gJ&#dKz;OGT_}pp zWuja;%~568)gt(lu<34dR$D(}+>b?*mtHcC0j&3O_&9aK3Ou3P}*;yXEl4jJise`;q@D2G+!vBl^JbCg%zn zAa3~g!?Kg6q>q9F;U|9-3^evKwF&4CSlAnGAN@+ z$N;R92=zEAp`no;E1>HA=dcHGCOL_XZ%46TzOIfRN!rmHz#>>0#zPOtRP>JiF*0k7S&gy#>uOk7yoWt6~b z0000k##1GGs<13&&xi-OupU_?X z5}e`L4Jb3k1&X(_u!HO~)=5$GbF}(TlgKcGH{(NVJp-GHrPy$M8Xo6!zi|4z&RJK* z^~SbZy2(skaF;_@kF4vU-Fj3Fs7efRuY0_#y}JPEbBCpja|onc>;mX3p`7=ef@y&@ z=gx)~r8U+VT=eawn8CYoL$GU(Tpo^kF)3!r&n1Rtk#Lt4gU2>e_&1XB+!9-arO zSQ8*smf>tN8AEG0aUR~E>V_$orO}V??u#uVa*)G~9+;_J3Vvs0qvYoW#ZYL3p*_ho zfSG{tnH)_$?6?J9fQD|6kM+fqF0Q7b=co;~ep$<13mq0zLhIzE?i`PL<)_a*Y0>li zQ@t0CM=Z%-@H7>1t}#n}#GjcfKdb4-OKc?ssIezyz)37f z)-@W3`5}!<(?avac#gdn0EWxUqVx#oOs~oo^!o+g`0#rNhjg@8ByNxsZDP$1*^`yZ zo3$`6|0!V715j0R31umd*|><%4_-I4HBgB7bWK+1@{z7Xe^5OeZV7CDQGU^eavu@u zu)*gIBCmwFqh$;mkMrdS(Dk{)milLT(h!iDa0H9J7R)&%o$Pxjr9@k9T zS3TK2Hdg<-^u3?^>#_Wf*5OzxMi#fVzQFWa9o;^g^)1WC?7)l}tm>|TH}I1+-a z7(oR@B#=ua_!m?UqgQO$LzX?`d0``{8&q>MfWYd zGsDhX^xCoRah{m?^T9$~W0;+)=3WAnj#hLuF-&>Y{G^C2UHMXo2W0x8|4`7H3z2)l zw8>q8FrY#*n;b8>CdEo_B$3(Y<8B^U8SjkN-_5vJF zb8m9&S!$11U4^CIHXUA+UUk0CrbZ*huiTgxVVQ)rY`nK_-aH;l4pm< zitM=gf~iGU$iF0^?r%r;?|%Ng0p2}3F?+xW{E_2l^;2#OkR!N#1V8e*P2XxOpx{FUNu4qu}uZ*xgUC?#~0mlU@Xo^ z9ifSQnbIFVJS5T#txj}3`69hf*dLkHH2Hy_!O1_NUhL>b83ZnYP3fvvH7>Z) z(|0%A(rp8XMsUbMEZATvrxHtLD=b=M4&o$vvP}t=E28DMZM>a$cCE=Wb+jXqOnB@2 z^DF+#IMvZf>ExW$H@9xS>>>ZCb>yrbob=L~XrTyeX+fsPw5%Dm)u#-Mvv#S8WXJMQ z^CGkj$-zN)sJX_;Zg|-@=(nhF8&2=`f&%EmCVegO1~D4TBqjtrL+DL zu;v{MbODqBf!aZNBS!DKc@)p3-G9f``wyA4n@O~rNzNlkG=oS+km0@Vb6VE5uX|e7 zwXJiU#jWgPA58EBY&awUA<~z!;3?w<33L}Ave~1&@gFgT45lmCZ}V z`ADft>=V&BaZgo?OkH{Yugk|hi&4b1{qUoh$`*0ngLfr%C0u+n%(f6@%i@3)^A46?Y8M)=38@sb3V8?f*bHHrW|Lf(l>mhUe5L z=Xs(YhfsI_Dhc3|Q)d&Npqt=RrFA?6k|xNGp-SU$rSoy)Ov@~wusfFMkVz0G$7J~} zD-uRnHVtN`DL1m{r|?vV@(!oJKtXf3q}7V3ThbY~C0&}$sjo?YzuQC90}&oV$B3&S zgfcuOUWO-ida-%@ley8g>Ejexk-Pgi^EY9iq4%5yeB9a-18y$E@bGYb?rJ2IG8}V< zc3)ifB?bqWAg}^q^KLv4gAWNNDd>^lU?+L}=m>y_2!MzPyrZ6oL{|}`goK1@-u5w! zd))WA&U2jSJ!@Zo2!OQbfCNMV0U!kS@8$J4G>jfe_TLbGSJtN^eC=FlOe7|&=Z0b#;xQqm1=xkLsa)$));&M~ z$3Qs0hK$xhZ(|lfcreh?4QmuYD1wyLtc#hlLr68PYQV!7m^P4WTGfJ+)!Hcsr-+Wr z-S3pX^k0k0_m(n~)ZYu;xXa0_3I5m#^zJ06$EuSH8-cg)YT)@lx+Hseb)OKEvBT)E zI|Eu-bZ5=@pam)Xr2adEf1rL1LsTv$qQ$NY6}bkX&ftQe;xjbF*@sc;705bY+s&oi zuBe+cNfsl9lPvE_Czwk=_{*ZSr&W(hf|_>|qhS1hRt$K5E^a#|5*>6A`}?&nk1vYZ zoT7Zxmh{~4c#LN)@5Yd~lX@PtWrIwiQ5G5}q*vrV99sA> zWRGd8Y1>K$M>1oGB3XD7vXFRcK)kU4G7>KEh=+#YU z(aI(%sdQ^aT#OSD&Sy3x3REcNzrufgOpr!(p$ppnl4CQ1s139!3Nuhbtj+w6bO2C4M#i|E25mzx%X`e-@(?SgQ!S(LFMv7gq zNKo4a479XV8K?N|kU&I+iiE97uM&k+^#F*00s}igULi>qlD!Fl1`t}32qc3P#lc|{ z2r+An~~Lz;0yC-om7-xd=%ZDvGFKkZb?-|=7C+0%a;fEIIUwt3N8JaeejZ>Z7*uQg z&Hsj2iL1)CvLR>fh%}#aXP26x$yhyg@+W?pPHHYURl3 z#Si4Hu?T1lVt3?%B>wuarY(s;^vp)_7qep8SJS_Vs!tV)Re!%WgfbR6pl9>Ogv7!Y z|6t}U%XrL+uzpe_4-N;eE!N_Nl+z#GKmIw2plLlTA&VWq%{GYjSbqWk@tvT1Q|u&b zW()kk4^NKz`$HfsIP?6h^g$j`E5GoqW>Q;$3rbJO6GZx}X4H+{(o9_`SqNVl3O@Kz zFA4qT$Boc@KJykawD$bJc4}X>(HwqzEOiDz^qfKEy_+&g@_ZVZLY*82sRi}KMi`ht z5H4YX2WaB`x0p_I-0Q^mDWZFn_=)jTy`ywN#4FEx-uJ!ld)((a&U2jiz0GS_x3T&d zga-C+=;!tKQtYLsN0}S@%*K}BW~5%e1|pdtdCq9qVh7NP^BYaq3)iz2Rr zVFod304Rc)eozA=B8CuSn&p5!Y6C+^HLYsE3m~LVy)ji#OKV-ji zYStEQB6%g5*oNK6RD^(nj*yC3IfHUP5$dBUO7StY9xBx*fE^$Ae7~@6OLt3hN*j8kn}=^;c`&|)GTvrX^<$L{f5Y_ z=c}n>A^rt-C#2^0%ws<-_?U59L}{g_QE%R6 z)s&(A7^@?p+w^-Cd6-_&%#0rfI8d3POF6sNUq4sRJ^9hh4TVu_7QGz)r26(-cZgz= zg^dmSyYw&W7Bk@cIVK1RNKfP{Yb~K~OZ~uxhasL?;~{HkaY}uthSx`U@*5kw^`U&k zd;CLO9C#*P%m?k#fLY~|Q$78AMpAaoZoXwOGIKVI`S_YU-bUqA?N#9Dy(SqlLzqCl zAY_;Uh7ie^CD+P5DZxd`PievOrS9-i1rSjM5K)vwA{2xiLl*bF?|Yo)EpKBO_qnZW zTGq9@=+Xmy`bPD~;aMB3wq$QZNVE!vtP|xAr5>Dj;o*IOBjvFc)*l|U)h|65zu%!5 z-NyMLna<{9$nigww<8minRe_+2o)f#)=^Weyd%hmJ-L{;5U7Q#Ri8_*ih_tMSRj%K zVxcSmvI{@~1Q4Yt7Hrl*Y-1KcWii(TxPzS45DFlrIcp)>HV|VN%F8sd*3B5vY-%z? z?5IWgJNkRrou@N-bGmlLXM2mNj{FPC-4nJO6!G_`;I%V{GjW9uY$8+#LeS^2sa4{h zb-Lm~CDma}`H#&bk?mVME6* zVcd;(K|e5S2k`Zz{h6#1!ise8 zsZcYpIY=$JB1;#8MeHA%S36_qK$G47u(Gg1eSFt+T^L=2PtUoMYO=+`h+ zB(9$|__|P2^C5mb^qvB&9~xJw@~tUHZ|UefjUZ72Et(ULL810!*FEzU0!y#6?0`VL0veM4lcl$eDpx`(ge91Z5tPM~wEPLq-QBjIE^Fka&@q_GIb~xyh7R)q zS#3zb3B!yCm6aigvjh13T6peb*>u0d@%Wvj+D)X|O`;q^4It7PLK?Td?|YcVsq1qX z)-CK~9``-Gcw`5IdPej%TaVJ4sAeRzABiE<4l<0uuEI(|aAMTR%YHjyK8Uca?PnJA z7{x{8UHh`Py|~L)Xf)bc#X3V5IFZD!kfg3xED9j1>iy-cg4VVuf|Q&q7C~$Jl%fh# zRH6z}o1^2kq#D-YJ=QRS-zSpKF@zvC1FfHk$mfQUpbT7%Q@FX`hxqM4+B9f{81NfU zYWjy%aI!BTrNVz&_P*7jW-xLF9aC^yt*_vDg*J~@46~Xg>q3+@H#Fo>i)qTcI{N3& zSnp|e?)+)FFA)whILeb>DF^jy;9qvRg;)wuuR~htq1Z13MAIPw_<@yFf20A=n}R1f z3`QmMPTrE+z8>M^qr<^%-rbiro@}#o7A}I%%qDm<_#+Rc6bVR?!l$tM%5OSv&AaD+ zwju}34mQWEk{ep2)LDSQfvx7r zq7@LRID?2dgNQhToaZ^tb6UnNZn-h-Yux8K?{l2*f*4((k_>!(E81=V)wJ6yZE1wenZzf zOGTiCmZxRED21JCT#iSZnGha9?|MijDSp{x7PYRKWE7rLltHaup0$u#*OOYvEz44f zD4BUgcJGCTe-3|k$Sh2$YEo31zo!-w;?J2fg)(Dx0)3Ru#cun?&Pk)n@2~I}!O1n0 zJpPZwc$VwNLg7^n#h`ijFFHMNbPG3fexga=yt&Qt2#|57o84oMPXDPKMi;|E>2C|L~{5Tai>oHStSOgT2OLw53KT$Kasp0l~NX-*f)R%(nq{w?YLJ zll*KFd$%Kc*`F!X@bDms>EmrK4U%b)q)aVCv+0M)WH_UgWjIEU{UO5zt$% z^H6gw_w=7{6XH@$UN2NBwyMLGc}r4LR=%E11U)!G;(L0)tV+)CG)^oybtjw4+w_=u z4}W)+?3-OW5r>C7!ZSaAY|Q3&V6n8338@hQQcuBC@;+nx#@m1C*F@-PRm*8n^xFhj zZWTFLe|lO|{qXX~sAeZJAV4q83MZY&DEu~sL8^PPk_{iA6WlOnU!FB=Aieym4r;H_ zYs=w~!{S%q%e?f#CU_0Mi@FA$Zcy}OZ9@4gLI5=oVcyIzjbi)U zIs0a`*zVP0$z&m7u~@81Ae5&*#gJnd&CO#KZ;W{dz1J_slV=gc8xbiW^(%{pV+b*f zgF(xubBH<4b_t9i#aoo33{-&kIzRW#gH%TPvP?j&lOjs;SFf+|eUZ?;=qNv3dao9= zD^4CFNtk#cvIl)u=Y-h6%{??b-nm;nZTDy8HX|Mu8-7OQF=~Gcp5RwE2!#O_uX?6( zyJvqYmvNMee)6BMvb|o|v7pXZ4u>ujUcE|0Wj$u5gBKWa?=kxqPSghB*DKq6J89HS z+GvTRyKUc)H~3bDq-`(FMS3PK0E79TNN75mV(*#s7E)3XmXuC+^@e=qW0xLF2t{Ay zPtI2%42|AK(c#zmFxfpPq=+@+chOgeF^^td)2+*Au$?&hpj2&N%GHa12+e7!45}!F zeXYOe6Ci)WfSfGU`A<%(ov*GB_FgGGDJHg%x8bwPf+8$yYf-J9I4$)k&8Xhj2cUi24N$+?mDvJsR`~4DzVfsdT$x`V6@KgpwD8lJH;R0ct$R1;*(r3h!1|JQe z$@Mzo?u$IGhL^~=Z@v6XClGN55OD_(aR(4_3O6~#6!VO%5Cn1}C zY#SPZjwdR$?`USm$Xpm$SP7FZ1ei(H#ODgb6A}-5<5WRPRHBF}N<$PuFjA5VTJs+M z-K`+TIx{R7!UcsSq@;j}Nl$u@{+Gsnp`4FGV>3Wf7q5*G?3+Q}Q;N68rnSMU!5{4! zfzc8OW2YBGVmf+m?!K+x@J>yhdCPEUf(sf0?uJwJrWG&M28{K-qZ})({?+33$B-zl zvn^Mp2MClY-ldl)7*YC&+vY|6q5qS&+BlWY4+7-7o#Cv$=7{t?ofKGjpy(aMH|1-2 z;%~tkkgXuc2ZAwDEK72dNk?tnTF!i2-o|jPbSpQCYXRw$x=#wwsb`3+46F+T`Lt!w z<*XnWiS%f~`Xo-aH>npKX>mu8P=#~L@95nTvT!>ZjF#wYr?&h3!3ZA5dI8v-Vy6-}3K3LaMo_lRf)O20-yQh!~>D z`BnJL-ck*^Pn{33t&|_kBA~?*9r^km0C9Y0%)r5fek9RSV2HqhS*OZL@i=^K zQ3jA{4Y>ypaR(4_2N2_DUiZE4Yg*Q|t#h2_wXJ)a*SXGfodkf@o0==83!Cl^tj2V(4B@UMfwBS%#t3WrXC zcp;A|IR-MnjN`0=)z!qUWER$8ma+?4>7$lGO1}%oj`k2^Iost$-k1^vz=45*6Jk=1 z_VOfhG}pA4T=MOFBa|DL*Lo^=VuymLbU*Dus34lVa)SJNDYm>UUvD2&UZKLF7ktN!4ZA~e7fBNE!rRX$l+R!n3LQnlE{DlF)$^2nO79y zO1db(a)Om&7ub`a{9C36Ms;SbM8l^bD^F3m{!`pI-WLqE4YKLj6Y0RR~%y(hZwq9bIH0AnKiOX+> zfQDzU4~n+w!c;E?w^vT7=)5%1?Aq~J|<|B02f zJgfgz#&e8Ga$(5{?hW=0mjr0b$5QV!S_UXvt(!cUWS}NMhX{~l0sui7AaJDcSAX^? z_dMt7;kW$M$7~0q!2RyByHVl8&*C{PhwyTTdCR-}>*aS2Htk@dU%uN`%V@r3N9bv9 zSJ!#lGhB?ok#rK+dv+H8)1P)Xf4{4FHmtoK@bOIC;z?`!)1Jmo+T~V?h8<8b+e~2oCWrH5{a1nJ zxEi3mnD5Pe6iV!glINLpKJl%!na0f==xx;g`45uBfop}Q2oS5vOUN>Jl=C&SK6aMcy)M9R>!0H+{0?dMFt@|{?}&eKP0u6 z{knKBVC0IJ%)&NoAr2fk95ORQlZHStWDGFEc;{`nmcAbYUlAvPBBH#EQT@hg>9-hs z!E?&%aL2i{zwUw9K7Qk|GFr`_F1ZwBidot3xUUr>z>YX(&+Q0C9UJd)62HPiQw_RX zS;PBD2<>Aacu)xb>Bof4%#ZC8fH%UM3N*(WFjf=%f~`kPJzfYoot|aYam*+qv%)W4 ztC*6YfwZU2z|q;5*Nb>kK-tv0`>lz&HO z-Q#9AM12r$J|258lEwVUpzJGd%b|N|7kjf^s)G^09uWQyqkNy20sFeZi%&xE+>O;G zkhu$?7MBglWsV$Or7rKde3FIcLLAU_7%8_-JjeDt8*|pfpl_iqD`z9WH2odPS4Qx> z45qvfx%5WfLj@<@Nhv3cr`lq^rEYX{%65hu*%td!3ajO+$~SL>UFtQvD zs}l`kT*`zV`nJ2d#<13e`ZnY7V*8bu)#2PR_yr`ez3HX9(_`rKi>jN*qeA!Cu*~^i zst4GGo2}~>k~BEdq*66yIR=1$laAl`kmv^5FgK&+d z{pE3Q<$_FD<6uIQDm>@yamXe1_q`;Hf`rq*%Ju(Sf;f?NG$$pf2jo+|qZN1CwSZ(w z9Leyzp1FSjRP^_hf;* zmyeq-y}*B1!+?^f`n;}1dfA;2LO^l=DuW2-jPek}41xdx0$~Uz?#`S-e%LuGMxtpr zsyrB$G_TR0g1+2sUzziby)msY%DZz6A^d6%pd}HYkR%i_64lY|uK-1Hs?+hc;; zbTiL`P(bk6-)Mr=$$*A6f3nWmpttpJS%ms5L5{y@cf$)Rz>!WwyFQHYMHi%}tnmjsOte8UL|fFsPg zoL$BqZhtI!FYMO}r&lmIL36v}Jr^_oa@y&54jE8BkAm<$p!ExKZQf#rGQptdOgrc@ znX=dmRnfMz;QppJ_u9j`I#xMD`=r7Zuft?yFejP~-RVc|1T~+B=OY8j$eM$A`xcZ) z)X^|V*$n1nC~aTbc({%p>enBX9wbNe?`)ykD}=A|Kq$CjQtNO9P=;${a=m{~CGY)8 z61nLU<~yAE9NM|;DRmGjffBw|L|u;3R}`Rs>^h)VZqycR2W~RO1wSxuvlFlwIZS74 z_b2mKmx((tMck`F@Snc4rQ5nOvt6Ob@Z9C41)kd+$UHo^{$0e2XH6( zAXzDWnMis1-I7cYr*TW7ppFkY_1X^{2Xf8TntAT1W&r?}5XLyw%4u z_+#d+xxkmUMp@;Yv`I+k>`62o8C1OAm#>Tq4kvwrwP>ZPYoc2H1L*9fIr?E8{(#oF zVR5%9Oz4+jx|_r6nGeBnqq@?uuLNlXFmSm$b*sy~E0%mNlyN8SUOpGH%tI>hEc^xb9k5$Np#3 zqaQ3mDU`O*n|sak5Fwba&D5k>jP0dI)B15gZ%ZCVnfv+QwcePT!@E-OO|NRl6XMllW>+;`w>Zx5kSo-3G&SH}bX#c4rT- zO5%!szS(kC>Yf`Gw{hojqYLlOhIp{&JII4S5_KVsk`k(dk~{giM{iF4(`UCoOEu-p zprzTADN?aknzP{>xNl^~SUkV#|Ecn+4&|{GCfCdTZGH=7tcT7bc1KjJzi|GX)tl(~ zGp50xO@uV+uiS10KThNDl{{bNl7dq^qL;wB%Sz;+^(t*#8Q>QG=p|$Y)aLo3)>_1R zlSsZp7lUJs2zz_4{K{p?M;#`(|`zv3Ng2%OY;6*uE#5IkM0PHNG&Y7 ztdd47U>HJShldU1{j`*}4axMaHcPxO3sq4{`Zvq928(~nmr-{s-y*@F8~|udPAyCJRk3`;{}(W1x+&lEV#GT$^UF4T zHis>pR;gR5<1<{M)+u#Fi_H2lmb1x-skKSgBBY%ol%v&ox2bV6>E5HaZQgZtUq2eG z%2fU0MXl#Lw&(A~yYyM9W9Mx@4<;*m%?Sv74K=!6n^XL(O=C&ri*+&?w=v`| zqlnHOypViJ>L7KS^bt2<`sCyN-#y(YZ zIXRC0qn8h-T%Ja=uQ@Tr(bcV8lhdHn=rh}?KW(jW`*|dr z3E}9gG_UY?k3!x72tAB*?-wHx53F5*xa820v&-d}3bcjxYVEqn?V2^*xHMRl?^7nsJyx13PscdtP^Y)!wEym!1cesWV6JdK2FTU+f&+=UJ1XFof9RL8-z_d!%$^r|ahYGZzPy@*co;{3I< z-fJ1Z+TkBnc0red{;Zk&{@A5PkqL zhK5nTc~?m=m*0w-AHbmvA;ve)@%WfsvfyT=7ImYeEV3b_JF8piyh_i)cFiJdjM@A5 z;X0F!TzI{4S3d1gr@gAZ8Gd%#fLZA(#{j6lrJyQbVRc+wXdQYu0q$r+w=>A8>MA z$NRo%Z*=(C2ZllxOt@zh{4LXN0%SL!wq-PY;yFYPp#-A9tfmEoE8Fy#ipBV&w^0z% zL&R9rf7JBh>h7Z15Zm7?^ViJU{}KH%e41MVcG=&&1>Xacq%dw)?QU^cO#BZy;6J0i zcOG~84$ss4zXRKQzn2s!MJYysN(BL!NKDBy03?P%-u8Tr$@E-m#)BEyhr58|me zJ5=PE%!Sm^tb3^O>Q7683;2w8O8>7&#flt_cZI$7WJr`g3ID035@xiKkG&{X)YLzu zy>HtEy#UloZ0BEI$V=?Z%u0lfLPxtHgro~BbrO9auCIEGdaC$Z!c}So)ga8Xmm{{; zo;sD`Z&uWia?X4sc@PnoxrDg7ybPWqP*&ux`N>P)!$2Zp+9R-ZytW0M8y%W)7A&eT z0Ui$1zQ-jc+V&Rz1>bBFcXmGp>yd39(3&1DQInCpA}bF;z}W(ZBl}g+=hJ04%#Uk= z<_6woc4C5&S>5MpK zIl-1Za=J^6R*FU_+L@U-wbtX*G`t~TZCSwv9}Xky{AkksG6qE*4CS3pIjwpZUo8B-GZ};eJE$=4SR( ze-lH7HaQc@miR=0m_kD`LqMehfkKTf04hj+uSN5_+4Z^DZa3GK7-3adLj_Q~2ZM73 z=M17fwCIeyPTX?Ar|c3fxoW@=0-$VHl`P!Rps+W6BWx)KYbF9k!DxOjl=LVBuZ%Vp z)1#5Ti{5>@-FC?0hRy#SUfsd1Ve>@RHDs^WCq+BJ$DSEsa3AAX2Kiv9X_PH|< zu=I+N{f^|;#`UwdBHDOJBvIAPDt0#8RvO~*46@*=q#{qtUMIJ%gKw< zbZjp1pWrLx`zpe%u-^TLl?cc=L8>BwbNI?#5}=SlgOaCFn}G5*b(B1Fg2Tee=16Lv zI}t%hDCI;kB#zfgS#TtrSMPw8+uB1QSn%jT=e+#DftJ9b%M>p(i3 zWeCa(zX*pIivJza_>Gk6E)mmNi7^SD?QH@o^+i;~da-#Y^fUh&R|nEZZ!}9!iGZV9 z_?=57=?<9E9dGdfj`j>3%*6aykyxco5l6u5j>e)Sb+m<7(~2O`*`PD(MA;Vgj~9BE zKkfJ6Lkh%>0Q<0laNov}$F(A;IbR(5Z*Kq>HijWRuj>XalPYI|^+b6iBLBi*wcK1- zCeh~$t@x*yd>rN$FlhQQF%=I>x{RF?$se{xjc~e@av$C{2>Y|yO{~CTe(oWJ7|YYn z{TT$dAfbvPe#Zt*fkrU4-RxS*i{T}crxY;R1^_m&8s&pHL2`!>ew!9Qujio{8$33ai#NZXVB;gkRse%gm(`%17c%aYQeXiDewhiTGZ61Nes?v2yLP zIr|J~qZn(2xxjW_Igf#5$5It&OE*;xAW{h)be}E47Ie?mJNL#J!3pxggNBs{XGfF0gI5c^kIT+nw@l!e#uSC1_VZniaU*6v=M~?D8n|U~x#Cc&#P1(|@6;40v| z12hg|d-fg?{kh(+%=;$7<24+BZo)=O8GC&Pe3-v1KMOAa>Hm!IvP?#ZYVBs2aL-Eo zEP~%?*WikDY`gi39?)f|K%`>d#n)-E_ldz{Cf0&J@{7nZ^F$`j}^Xdo= zEYIlgdx%nR>*<8#o@ zsq1PRd#$L=rE$@|dV-0Mn&{yfzO?ai+X^aO3xhMD%~!@yF+Ykvi@bbQ_AR(Nlny|l zy4m_R{%V`{e^-j~7AaEOP;^R^7F4EaN;)j|f0s1ZOtk;QUv{6j$}0-E_Y8419nTTd zji!aN^q`p1>2UobPbFUkl+)R` z^wjH)a(n+^|3pv^DASb)<~ismzTex!m}-sEr7(^h6h#~B)LJJj^_c*ffv7r&BR^*E z9lZTfZV#{1+?{1Zzwoo26$q?uNPxiocYAT3!Fp!V(42v4HJO>j48Nx?4Gw>Qkv=-M zm)i&UB9(}nCJG_51Mg|bV<;v+Ja-a-fJz%r0~x^~&9inp*X_y#g-$iVS7wEBgEanx zBQ=X9x$8vX)IW=)@R(!%&`!NxFFx`%>`cPb{5e$h!`BzXh-)skQXcON+rLWvJHFy< zVR+so^e_naAXc{SHDk!#aNMCEo$8p4nTTtW40O*!;$G+Jep#^YAIr8vb+AX zdO$fy-)fG%98>F;{3d1k)i62vgN`;$sm<)`j@>6 z@05qd7S0VX!_oWI1Bo0Q6^R3$r{f)s8s*{{FWU3xtbrJYJtmFNVmnk(8+I~&v6jJ< zN)`*$@0*1aS;Y+PcsxY;Ca(RtiK(f#Z)4k)TPw%eE=}}G^Yb&$Xl92WtQ$0(U@2UA z?ZX3>Hk?k2Vmos2S&>Bz2d5Z507PcBN+}`g$mxEQaF2qB@oEgp$WoE=m8?(tj?PQZ zmWSVVD&QkDXT3g^mPVh3N6It%l|0zm3;6jVhl!>xO8S^+_l(tDmBpZAp6)6|)I$_U~ymA%7;rD9oi2<4Owi@BDhhyGT2L9tNuYs5Sm#}@1c9&^|HVFIu z;uaR88tpf9))e@f+LDRBE0MLGP&Orbq~m7HfN}fR!KxQ+PN+o*IDXXr7+Q7c8p(Qs z4Vv2ue*kDha<9}-);0&(kn~#)@X<7iP!`iEIlOedH>?*JZuEaY=*3);RKE{Cft$&x zFVeA*IS;v)T7A*UFC;d|Xv3b6l!X+S-^+iuIC_xi?V$@)1G`)PIAeBxu%c-PlbTkRZM zW(kC`QBvDxOS6Xv$IlLXR~bLLtb#U*?_XB^&8F9^(F$l5$~L39Q41*nyv3%O3BsLA zn+`wN6I3BsNt`vyp1ah0;YR^UlHeKbQtx+JavWdNr41~0cE-Tt$YfJf72z}r!wTv2 zVsm~4kGo@n%FlR#nd#fM%~=;Kf1q4Xsxge50uC}N)9@|*^!bd}sd(r-gYFo%j;&9G zdl<1|MT}pM8Q$(61}3WEwYwDQ(vY*L7H?p=<~3q)4S&DlJx5MrZGnedW8KhlP0Zcq zs9;sox>|j!NonY+P3VQ!l;sXJgIMx=cMw6udq=mrtP}FSpE@>sILv20qJOOezp29* zdfUu%f17RqAhB0U^z(dcFrV5{l|^RFP;Pb{W8#~CO^3Iia)UVu+Rq)?#h)p6oEEtK zTVDna#Zy=+tE94b`}(+#cJ|ihWZ&^U)g0>vQnHq^)*8Fl6WgWq%cVZZ#FZ7k&1Ub? zMK(-thYy(B)3Y`!Jq!^jfuF#_RUy{6;_}D~$r|;Ww;MwJ95wWqcPVp|s|*o2A)>+m$llw6eeTVv7_A*w>J@NH$0b&( z_+4hj*{k8*PMw?oo7LnKeZHSMwGOgpSYigWuim!zf#W8h?)BX+Aw{;6JLN28Ow?$6 z%JgsSOf&kAlqr=}&PLzOPKRlhE9}~)=VaD|uOnN_tbpE=)TppO@guB5`6uVtyw-cD zt95h^d|13wXU1_r6r{K0`wfFXlsW5#7$*DpED1 z!w-9x0HPSwzd$LCh3+=klN<*%c@&S8uz7|PE?#D)qhQ-+!}8c{(UQpelNdrH;>0d0 zx?>Rb`6RQ2)FwT)DS`_4#ZR2E1b<8uk2&d57L^|i&U4(izmZ21s97d+(3w}yS?qhh ze%B+?r|KxdBdNjf^-liK!TMr{0`aR$l&!TI94Yb*=f#oH9Q}=W?xc%$*q_{B&33`f zwh=(1l#vLXG7T+L%+5iAYt`ReUis)ud#Sl37I#xYV-GxZb-H+L;!qWL zjRS1eaFl43)69(Hi;?a9st1gFc|8mc?7a%liv>P2hfBc><*+_oPXU^&<-jls)hnCB zxJuLWL9tg=S>_p36^iwP&+nzy9wF@5hxoA;l^e&FB=7uphKvr=t5`!SiN7AAWXGpV zJ~ku5L;T!~-_*mB3wHGK4*gl;{?tPZD8!G(JoX(Z_j9%U9i0CC%5+kQv+e#^*YS|* zM>jW*gfIcPbVOYkoU*9D4Ni%As6`bsI0Aji9=2XdeCa>I8)_zz zRS_(VPPa%V0s-HIGR+FoohpP`n|;Mj;JQ2$K_;GpBOz((OVhFG=Iy95hoFbTk+6Oz zzT|v3@uIPuBZzX9kFb!Ch>HIY_}ju?J7%8yi0H9!-`y8@{DQ$8)6{WC3OtNp#WuZ^ z8;V&s!b=C;S=p!H5?ca|_pn!$L{#qKm^<{L%8TikxB7E zuPtK9uv{_9k4Jsj`#<^7r5czi;>|E&g<{$(!!pc57wgG;cH%LvMr|%jvud2f?&C6QZUC_gM^Sl!O73 z_3}B7nEk3yn}?H{9y1)-H;XVpA&0DY)eny#VVMYV&JAwAT;y<5SQrFmXlfZBK+qiN zhwC{2x505ta56f=XJMyRW4Z3cBJ$q`g~SO#R9lD=L1KJDL-5Fq?~9#b-9+4MZzEC% zm%zv{zsx|&TbuI*V@_2dNmq_sC=`Kz0#tO>>pCN@AHrlXMebLn|I6!skpEAdI=#gQ zGibjU*BizMp*0O%&Kc-kV4yt2y8iHk-y#;>xZxX$L=8aM9c|Rx{0>C|33i0U^g0Hbu55?wR*Y84Ulpn_**xwja zYFEU>TyP@3)~Vl)U`Z2dvE<;);2wCdFH8K=0{>)gSFgKrgiiZzjJbKJ^d z1q}2n;@nn!#nt@Uv5;2xjt*gDozTDN4Bux6d}`a4Va}6-XNp0LJ7wVGGyR44(-eJE zhnrg@>PDvsbZ(DFUj)OM8)`M?1mf8H4?ovCJ|i#M=ResVU&AwPG-G&i1*v$<%xHm& zA-=SFPh5d8E9ZQZvjxC5gcHr;<4%m8&h-{?Wd=+4nT;+jxn#sR0iENVhe3=C?C)%U z#{Hv4YBzxIRyuj3@#+}w@PDY&(YzK=vxx_!W$?-D&c_(Uc^0E*RzizA7qDshyrU@i z6G0>+jJ__Ykbg+O`Uy>OICc#Eq6DVP`EWW{y0;@h=>@bc0(|ku-NEj2O9gPZk)v8W zJE}9E=;(&)d+}B=n1{DcG*fKEwd+`NKoh(N9phYZylf9I!W{+f9!08% zY5&HshcXF5d8093%+=XA2BBH(Y>4c6e*O4p!}dCtKEiS`LxH4kI|p@08gQ-yXlxL| z?M5_i3V)Y)RtLsvH!Mba8J;u`oFmX)jFHdB%voN%W?TYu!>Q0R!EJYQNZpD)51dw$?qy(w zR~Q8wy(33K#_&dd zmIj}Y67LtwdUgtedIz)XNbLx)GbrgrCoy>r;{NI27j)IEUI`6KXz9MSbH+Of1qXGkP?>JdT<(soR)l1=VNIt|SnN5H}+=yyK81b|$1 zKnsWL6r#!{%0X9cMc7argUx?WP<4A3RgvQGTno2ajeBvXA(~P6HP+Mp96{^uu4eep z@N~yZsUh5TLDD_XEPjKcAM+Eq|7_4-D*Gbx#B+T3=}l^`gw->VG25}I3Ik68*Ki{s z#d$jvqJ(`#m@w0V+U9n{0>zp5>R-!3zqA!*oKueIXCg7@hJw@|t-YGhs{ynk-NYBz zY;aJ*d5V$HIS~~|%rj&zH*ufbrIZdsR(Zf^YHtiG&8Yza7PNV8u=5TD3Eh_&+23s{ z=GjJ|;0y$*No^9+qnRF+#xmz_!jm zXKf^`8vAVg5p)sT?-4R0$}{gb0?An0G|;Tg3XM3w@uL1`4q@$2(H{;csEuWB#ER08 z``$jv7eerhW$_I>@gSW!9B}>(@MZ>)MQO<2Y$l(?UU$#=yKfvcha| z9S6dnZ=l(QbI29hi*@rzE$SCh&Z2bsFZUbR@OzY%P@Mi56*VNYU#(A|sp^c=_5er` zY}tLS)@$EuQYx-~;eW&2`ZJ?bgLEHL7%c0#9O^d*cfY}3Yw1w_fhGBra2ghP76W|q zY%GPLep!e!L8QK=gY=bHcM}H!AFC4FJ^sJ7;G zeS=IRt0NH~+{gM^zP}li;FQ`IS)ie~H zrbO*tIM56?FWoInQJSnIhVW3m#4-ikk3OZZ;Qx~!13oG9&O8B*Cg?T*W-^hO0_7c&v0o7I_n{|wXU9zm!zo&1A{Af`_=l!%P` zE29^!PO&SKf!4PLF82ipymN06!wj#Y*OV@PKamM@H%o`s1>NqJ9roU=QnJ9^2X0V*7tXO9XLwiPEtg1pgvvXzQZ_+`PB7=hY zofI_!GQ@{@Z#$!wbFupnY;ygL?dmtxq}p{6)gucJ!5YJo-@0|{enkwE%Hzxphx1ls zVD}W8?48F>*0kxFllp5DN%Po8xXAk(h=lW%vW}+~0TU;m4NoGej|Yc{NLu z?rv@DO_bYH-fTpo^NEl?v>&zOU* zlpUt@K0{Ys#%SDRdQ?>u1j2sFy!U23hWuVqW6gd^FfT@N`U=pYupM^j{&3+41ZB+r z3{5hdr|4j3Ni01siTkivULs4ni$j%ip=M{-LGJ0r-Kb*9kjN2`?)nxHu^+^`K~sD4 zh|TS7CsD9JIe!^Qvg9KnL#^pMe z6OEErm99%+)NqpB6jCH}31u|SbkaedUhwPY4+y$7YEkw+>5;4JYgcxH)R>5AA3&+r zF@o*Oxp|VvoRW$lP2o>`+uQjL$Y^<*{pgCB_^*|7+MHkUI~T6Wj;NF}=LVg>L#?-4 zDcyO>{(hhtFm8%LSZ+zlhkNS3V%qzFIE&w8=*^s6?6&@1&xr~-PX%rKa>8TeH?5YU zASEu3!UXqfO$JaoQz)VAzk}0%rLtmpyw46}4Lcvp`KK_QI_PNm8Uq*OR8q^659C6` zF`PHp6H10^cgt4W?_YHBu~n^~xRjAfT&SevT!Ya3jq$-pueW-o*$GXjVEmUO- z7r)XbTyK|;NHUy{o*_r?qD&h5i^oUW_?^aS;&G#y6vsLc2FEl)*P^=})A=WGwFD@J znF;?Rcz!6z;T;3TL@W^DVXV?*_Owi%HJ*d{c&74TeLdx|LC@Be5*R(ZBG#QqY?Gt_ zKS030Pi&Q5jK|?wQ6A{ASp5lt9GyrMmxroz}|6@rkW z3^a&#BAjS!WDoBn&U5uxZd>Bfiche;6v@w`z!$~wL~c}3c>Q8NPgrn*_^)@W9C*&a z^;XtLF>4PsXm<_+?O4QNXfnHo_@YG@ybI5Vdaf=H0af(8bHQ81Xq^T>syL;tHH#Tm zn-2rl#w6DbLjI#Hj)?J2`pe6~!DV0a`wgw zIyCfb^6%Jm_iuKCi2JDvV{KXZ@9RiUpdIFss2HIr`&T;L#<kYBCUikS@f8AT zh*nL$n@Byl{a>*TLBDt;=u$;tUErL!jZX*lfKH72)LZe%*4W6Cpm7S`XDQZwo(!_+lNQuCyux6cF!WK8-Ayhy)LJc&HHpFPrK5O zdIBQ6bPX#FNutzUq?PANn^wmMapa#BrFfUtSvI{y#X!LpV2pbS>F0Qn9KNgya@sLA6SbnKigLF9h^&NgW@iQjl$3o zj%(smB`F3FVYEfaBKSDSEz!0IK`@Qk2N*5a@k?AAxzOi9HTCRy1k4%`E8R$KdrAY4?8)67FuQ_Yp6$pff;|6t zcO*LEJ(_UJEby$a78+GWi{x4#TIQtdEXH~`kFz}Uc_u%dFBFp$Xu7BUPVr6Ohz#{) z0gO9g;9@^zCB+E}2v$w_WE!2Q9sz?m)P)=Fu|wjw-qFvwi6R&0`sbJjmS% z`{Cd9f9;qWh!vO5e~Ao#AZq#y-8y%?s1u&z<+E8&!y`_7za!?Rf@E#F@2PVpF|kX$&|cT;ee24otG!5AMng}U zi+T)5F;M!}GYS3GZGyUy8u-k09@^+Kd!<}F$H%emaxT-u?+5s;ZVKQwfbHJkshRI{ zxM45xDP7@~PZaCUX8NvHD*wISdtgroZ7WYXjb&E&A<&oHHuSp#noD#wSH=iOt5XMk z_lv9hm7^4))kNTz3Dw?QsY!xB` zH+D+1cGbjcs5v-`KQNO<>;_aq$AejymfJRIY8j>s~QXnzR9ZQUyLeo~T*XDeuQ)`v3Y9V)0b_gaPztI`!QvzYEWrWY5iWig~C=t zkUtwA$xVYEPrB{#zdfRQK)DcS?k)2|zk&&}ZAXc#RC&Sk0|+Oq4pHdy>i;c4@rASn z9m^=~mFZg2E+JJI`Mj{P3*CiSApQr{*!4_`vh>&q8norJfg0qds zkBFo|s3!UUqvO>JL!en2_VUa+hs$XvF4E92yLSA2?*0`)|L`GbgNd_4k&`~|iYHyT z+!f-FQ1$d6u{iwZF{+Y{_Keoq`D=teS)^UPkTRRH9&OIh_zx`c9z^AD8WcKvZ|309 zr~&!VqCS61Bg~D9Q`rebf%H-hl3& zH0Hwjr%1FBv z;amPk=A{jWp5X7k_m9a5|%!WtZ4&mQpyK9u|TJrW`_5A%1QB}RjP z68L0WKH%{;in4-&pT>s+`0NRD z1Z6O&+TsU|8y{jdcg0j;@a3D1`&*vDeW{2VpvXhPq?>p9Wg8YmbA!I{u($dj`qh2d z_4*R#!n5L~stfp{B;}LqjDGz(H&9=3LUIZ^P`0EKojTvkF_PP@L>Ph^zhu!mZ7Q~KQ}_dHPuVyZB|{!;@i?2 zwehwy6bATDeUvDSA)$?D?pzHMla#{_*(9-W(br_dou5cc#`nnX+|PF1UMY zxykKU_P+fTxrf=YK}Eh;NWYk?WATR$71mOD#Ij_9D!1gf zoxDAA$ydS`MHK0;pwE3>XRW2{#^6}6z;NW}OsBr<>CyhW4=EYEb=ZC`-GeHloMZG@ z(My2wYd*K7>uak!JZqw{?>vq5V1KZY z$+fPznWRPL%K30Qno!3K*Iyc|lLN)_C?n755oNuT&F5G^eG_FL{#@?89>2Rc6RpXB z<5olMAH3&L(@%m?VHVH3uXc|q3OiqC6};zM-u6WD#aw46oi4wAsE*x6H_epkTtyWR!}rvu?H_|P#FW=G zaftrppXLi6OvP5VlGbb?tsW1MOl18PEza{V73>)$Yfjf#K9O6_1)bGAZ-1Fwh0SNE zse**uc`sjvWR*pZ>V#}A!&~<5P>fAhxvTiHOg72R)Fk69xr`K5X+$*i%lMHxon|US z8n1x5GKk~oINR^_pS~y-+MH^CnrFtwO00BRrTy|@kk*OALyx~0rRk#L8)|bJW=@8> zVQ+o1OyT1xkt`>9RwZBu8l&OCyZdhiA5e00RCBEyHvdM|0yLg6YrScY#X9F~@}toh z`kos~*&<&F*e}oPbFwHY2UqAIu?8#>us6Tx>(a~gc{`&?PGd{(&LENP3>5x!+}pQSN6n40tUjJ<&y7YzNEh70F?uj2C zOSGBSemfVgZf;RnV7@K!C!z)?3yYL)8`!U8N_D;R!qk52VxvLI9Z+s~`@kc4_?le{ zv@Rmimd@fqvQxH7Agf>_7%QO=Bc~?poPnOW#z({+yx{40nzQhW59v){nD2IOVujcC zuPJeqUPJsmm~8Q({gh}0p9)?zPZoE---yo=+YD+naDM?eDSLx zPl7DnXoBYzK68OcqOiP$Tua^T z4b*HBTws8nnsF56;_3&*9?(Pgye)&y2d}2`Ok-uNl@X6!f9*W(fw11S%<`Pn=Lp~Wc_@b+3O3x~Z?6cx zyrakelUris9)`NsgIj$q?%Yg11?pFTN%!2nSrqTl5^)Y`C6z_CC-^6_ZB7`+cZ-6# z`?-~un*)`^=W*boLOohlclzUeqpRa*y+8wT4*tnI(3Rqv`i z!Tj_)zxN*{+TRY)V%%plWT-7im4i!26rz*^Znmml9nnL2Si1h`V&4li4=r6c?h5g^ zlimyJMri#u+ycWTutyZwc$ZG1cVR*;wVE$%L~z6`yQA4OA5|kEySbIU9&B{^F~8o> z^&a)So;|Q@lSH^37PDW^au0nKtLA$zZwt3-dPo(hgPCOt);?PIIip-k%2qam9*VK! zU~vv1y1BmKUUD%w4-&plg;1(m@i}gd(1}pLP4v6639v0zpS@*rmZ8)6@p}TctJ}iD zLPbQ+@jP+2B7&37?MW=G8wQrB`iYOo%nrfjt7QTSoe(o(WwcUW`aDuQA>8GU7&^RL zkp+XoH)J=G%wq&y$&UU#9~fXkoAaFfELXwZ)Ef9HF@_J!ctl!2Xt222E*;$(WG{mM zLBYxIKQgn+=CT+e&KJNfJlLZnz~i2dXA`{)t=&-%1uz5AK}twK%g+PKr0VTRx? z#H}kEBxaaQ5mdQjV=jZbEl{?ctOkIQ+QV}^x@+NGNeW|{>pvrQv~JY%LCiHr_e6B_ zh-gEgxm<%NYA#h%4%#OeXM#1o_e}pUt_s4C=ep7gUkQ#-g{5hV-w#pHCtka>*uEdl zW3Cir|Cv>NTI+5)-R>_vNJ5X<#PxezNcFf4p;4MEhSXD43v3vduooR1_fBM>oko#w zqzT4ThGUXU7rTAJHd?@K8m+$b4OZBI-zpAa=f^IWu;nZ}O)Y~34$OF`{DVHms41Fa znU1Ki*@Dj(k)2-&`0!S=L14^sSYai91hl2g@h%Taog=6GswbXc0dod(aGmOvryg_{25wV#pr(u+hHYV{A7dG?%$xgb3e}QB zv%7cmh$flER(}G(NU+TcV~rj(LSTa!qhdO|I_|N-_|bOj38;v1oBN68Wp6@UD3HX? z{O%ZSr#sL6!Q997zSJBq^@{a}g;C5MRNsx~>4AuK?mgSk)IMOZP+ zmjnRHvF%TSte;S*-5lekVb)717n2PMA}*6nOi7YcE)LWdXrhSsOKiYjIGc)oD6AI( z8$HZ$lY?O4IT4O^;(NYzqd${9tPdM61_T_Q7giH^5JRZAbrXV!GK-wyJScn(eS$|? z@J`GO@7hEJlc@6r@YFHZ$3%b0-eFgifU`KxJU_2+O>>>GAL9*q20wzwY+i;65rOgL z{TjYP9`ABXASw)AV@NF@4kW_WCiIBLaSq_F)u1!~UIuUYIb{$995&u^C}bBhUl92Z zVUGGH27u3=sSUS(<4sd1LA>ruB8@WfRT0kjulkga1^7!JPFjwLkq6>Kt#~}yUQr8e zLM}x}oP2e2(h&{9D^tJLZO_aXcDKp*g1CK{dUyl$ zIV-LLHA$z&=2#wr!QO%$Cu2%Mw7&h*U1d`+7!Jsm$@hp9TH#Wet}6E<<%irW!*U1M ze)k6RwxF(((2NN@I*2V0pK=Osw)r-n7oc9H9Ji6z*x?Pn1n_M~51BUi=2-){5C%GI zppm_UD)^cV=E*C;7AjZ$gO0U^5yiehG~!J!t!Qyj#qih^JYA75@>72e;Pn41jx$4+ z3oYDIUX^8OrvQ~!$+@E%%K%1>4|9MR!v~B^tq*oXAZ-uDM&i{nZJ}&=f*?XJ2maAg zDUJ=9Gmp+>yHP@QNYAC81;(`ZUj4%VbG4n*tjv5VtCR}V%hLJ!n`vQQ<4Zj*A z#c>cZ{^Ix)I%<4#EJ?_A_^JsD zQ$F>5@c2s0A@ywC*1-|i3PW5#_FQDeqNASeqCi}>Qo;w$ci7dKp>S?><|T#C0H3mS zRpR7>=->OsIG=XhAk#YabyN%BM!33*6pIs-z@r&_P!)Mz?M+a2*ablc%sWY* zLDdq)>cPIkB$)=tj9E4G08pS5pjt&J6bck*X$2FM{}0Qel&2k5wU*ohR!XpF%>v`z z|EV-nc;1YssmDAvNW@si`Ql#ilk5#lXFL64Z2VeX> z|C$@|uIZzW$vMv4ZM#~W#sAv1cCx%0+FN^%M6Zvsu}~bn?X%L5HJTjOCf_Q02ont; zg5r?SjR*}i#6uG}89c+83?!KkDlp;ZGIjomFaCR(H@a}YnSA{1`Dz8es~{yR$dq)m zOfdLKiG!a^#@j#4r>V%JUOYxpOtcYeIMNaBkz`Z7uX8I;n3(2}phK|`=P887NB?{z zmP0KwSA`J{Q(|5^+%xe#5BdTi%eusHPpau}C>#@Oq=pEAta)u?$@chmdlKgO9d<|( z6EZ-AZde2$p|e`HI!B)fh672NGu%B~1;Hs!Mdv&4Tu0;B58s;MSTfaLrSwx|TrEwZ z!rU;r%@o8I6tq@J;lucSo`$LWJm%hkxSWpye_jVOb-&GrxZ5z`Z}C%&dy=H@9AKeG zBi+j2s1;Mluj4UhfY%v+kCWBF#+Z*DlT_qbPjfTbCOn@{OZxRUeZ#?RrPVVlA?WtB z(>BXo(M4dI>pRD5i&ISdmX+Yub4T7gnWX44%Mq#>2{dNu6|ep%*zws%x!@x?RP6IR zO%)p^Zig*a^CNg;8<>-UEeDvF`!L!t1f+LFojs5dJ+<*(}RK$0@1!+scnyK7W;eYUU|Gzrl<-*Pq_0YvCA#A zK?TF~z*pxHBDJ_gPzNuN>KR#ihShO9;8pMJW6m-Ik^zNy$b6g5bmqr@lLDE019shH z&Dyb@1hncWV~sEppBtrYyJ7%d!>A?a%kr|pw={COYFniBI0k55Q55EL$Pb+UpwW0< zY!OZ_YA>E7AyOKLQyyv!cj{z|oiB&vIv?E$p2-Y$=*N^FXEW$2h9t@Avre(&b%)MI z4hhkP1)c^%2ZsaWz~qoX5(EIl1OaylNW!2i(DdoG{eLB=i5l%J#^ZsSvdyAAi-FG+ zO1Y0fayc;DC;4(#a!z?jb?e_l@to*xa*8X}t2ukVJn`qqJZ9{W7xLp~j5QxQP%%0s#10F35U0n5yyH zFjOLhZe#UX69>077urL`8JP^IC+=tmxKEUOx|s5JHw*P~U+Ozqp#G@A-x-X(ywWad zVp3f8%1joS;rBh7loBRqLVslfvKWw71x07Hm4CGxi^L8?h3CVEw483j^jKYkU}r3_sx%HiFV|S zs1bB(3vBTRvIkdZUbzE4MbSDN5&Idf!su9``-Fs5a{oi4^E(Wp*elID5CD)MT;f0% zIAKD#9FPMyk~}<|@Z^xlxBMSGK{c`Ibawk&-^_FA>+713_F}>4DJH|<-aeeUzu*rC zg|RNYHw@$m9>$j(ehofhC091tEwP*O^^@8&`ND-TbC-%JxnoQ1V{V+$Q`V=Qy14*uEFr6gzkk7|CCc7bmi>4!Tx|yE>Q2s zaBNthF>UJ-DH5bhNq@@atPlT=1_Bcs16#Gv_xKTyy%lqm#zwgY69$_{0tzoCOM^ya zcspx)=aYU^dZDmJJ!vF(C$md@!7cEyuf~v)UzPPK^A{1)!Vt1Q z6FV`UdRC9!r5|C5(}hvvPqDpk1mr>=AYt?m=sb@8`8uP#&RS>j1Qb2EJTP0x$cqG* zHa?XoTaSkRJs_9V4M4RnRvT;?Z;1`o`)Gn8ya&2LtY47#q)_7P?k-6>hkr^G)a6Cw4r71V9o12`2`Va9d8tQi%sh z4#I|2ShSU~L>Z|q%|XqHX-{dfFNsekBz444*xMZ9SX61G>GgD>ievB$kAfVd>^LxV z^1c9^d!ydLDoKxwns*O1K|pa#^-;&bqVz*?NbQqGd)>_J`L0>4C!Dzfv)Mq{Yelj* z9~nV*fBSOfst!+Dm?Vd7=!-Sk7o)8cUoZK&8PpCWpE+D~VVs8{^drPZJs1c?BKGAAh4UJdj9kWRB2NGgG{{tA+B zkS*ap^=m-bdCH)xK8L+jm4N8aCCx>tg5zX#LGd9c`-KLETd`ltIftQ;PlO)qHWIcK%JwhGvYsQ02W3xK;C%BhnOOi9aD& zLZI=~qk<}OHUCMCE5VoCkwczT(SnaSm&@NZC&!7dSu zbeEa=jQktD)pL)wdIhM1T)p-8qWIw^uqWWbhJnlqZQP2IoNS=CW6JN#*8CEYCwQ;M zqA?PzDh`wFbm;WH!#VUlP!3opNuc`(HMFmIMp2m+6zQ87F^aS3(FkS*KvwJ)jVZOp z`JuEYgLFbNq}La+e3n7GCdPHhpOg2ai{aYyw0T+Kd6A^zv_2W8ir)e|SCmG)vra>#)HYu){aw!ck$MUKbg@xR+UEzlLVgv5C z0wX1T3z$d&30P(%T|M}YA^PLBx|^qKE$TW(+JhLnw(+@#f2}CHQ6#UZah<7%mgbX(b!c^*IV{ z+&5mKGgFk)9Tj{j6%&JAtoz>`6Wc!u2d!Q6I^lm?mPUf8IWWRPVZ)o#91je`hk+-7 zK#@>{1zLZ;9gB!A z(6o2L_ktyY9G>?YT$Fv#EmAinu}Z2cfz}e=^+_GcKHVKJ%?CZaRjLi{gkb%x{NDk} zDr|W13(fC%#QVp156qzg)ryG1_Q)&GEQMk;KzJ)PX6)CJM1E0*sQ2}BxZyTZrL+@H z#)jD1QPL8yq`GXU77El9dd;4Zl;du+9R%Yb@tS?X50`uuoqDsDR=V(%r#tEw)y|3L z^;!^veE&PTV_09X(jWDg&HzaQ4lTp`Sr4bhJ=(TJ{Rge{#JpP%Kv!pRy*S8;6IfI9%jZCr8F_P*TRe7KTZZ=B(+DhPz1ruJAvjbtXmLVX$P)H(QE5sT%GG*TLR= zzd2Z^bgy=4UyGfg87_MxBQP-*CnNgJ3>i{Sig@_Jx{^Z=~sKk1R=NYI+)ddpApR+Ww!w5)Mhw2xHJA%Z}6Bq88a4ux1b|y$K@D5 zOgK$q{`Pvhyu6_79_x_QanlH_4d8_K{YT=QbiBP$KYI4wG+KuBrPBrm8zA1waRI&y zPESO?8(L!ga13IGpM+2)NOmZ91EqT0ntDQzZp#XtxWc3S4nk-58RB)pqnEEPa5WvC zzuMDM=g46}ayDF?nCSD3VGxI*gKay$T{Nfl!bRKod83X8tZf&2N{MQ@);8K(4MN&X zhFdkQO0dMRM@J^4t_Wzwm*skl(AeRe?qwi-#=4cmLC$LgK3K^y0EiI)2$bYy2bERw zY(BKmZNK6&jKMgHu$_%5;N5@Kw=raiI->#t}6tP&ls-{XAcE(!Mx>uoNI?d%pw@r$__6%*)`t1NZP}8 zP8+ctEOwP$SC{i%p4YNa7;woUVa6QJ9E38>JU{w>I=z{NJ@1moH|UWRJst02esSGT zlQS_aQ~UZmNnFSI)%$!4hb$%^-i$OFhD0+p4~|Y)+6vDreXuSyU%A z?1jxxL86c?;uB35iU!k`fefS>lt=5`#6a>^_kxvp@9$4@K_Tv4C}D>k>&P8xE9GZU z?X!SjfnXv$*@TE{y&3+Y)R0!`#HNg3PwUuUTZ-;Cz<$G-W-m3=DugxFW{~m`euDvN z-c$8aodw_D@2A*v-~?%p&J;Nr)DCA_$0DCZhS`C+ucX~o>_ICA)K^N1)(vxCutW+wZ!S}Bd8zM91~VHe#NeJrK&)@Qj@Fis zeET=?v$)Z5En_5BhG(1}n;`H+B6|Z_uRx0kia^v$q8d1Jy@TwSv<-9n)j=T7=w}Mr zd$v>{q#oUIhsst;sKL*e((Su)Q))`Sg!m9WeT-7^&xgWQvRFRF?%J5Adt-&Ovfr-Q zH3i~Co<}|KZy?XG0|$9jN!7gKq+{F14ySlB48gu^$9@Y>B5U8w`nQN&>CVVy+uMLv6LIopu~U7<4DbV=y-(7-~EEB>>m2$Cy)X*T9xPf2TBWmCXsHSthI z;RByHZWLaaJwHfRC0CBtZcR&BG;RNyI~k2+BIz)j54ytEJ~+bDxws3g)6jq->Mn}m=eBpL4l=G8tgWov82H)3*lcJxgj^H<j`5<#@ZTF zQmAbn@OuV?t#fv)OgePSb(vma*KB*JX?kznNsB@n8h73Pw7g8%_~FWsu>Ir(=jy=& zIv-JCerO6hohTY0ThHK;&nbXc1bD?_-ju()dCig}__?f;$Ujtmra99!2eEz2%Px9R zPeRyV(iy?3c&3wP%V)uPiug8LtzM~Qi{^I`5FBNW>>SmL{3fr}e1PyvvyLhz&<%We z-XdYSmEVXu1UNs*u>`8vB7=qAN4mUeA0q<6&og6OIXe|`h&r9rEUg+CY9_q(e~jRV zTYQ=ri&`FmlDAdsi}KEkp+7J0P9B*j9&bDNsRf;FS(4N8YAlDs{ z8smk>Q!=53TCAEI{>`4BPMQ31-felEKjxTjO4v~fCsTbO-4((Twg?a{_BeV z(j?jj2Q#O+p_=;4iBi$S%e62ME|M4`eCMy1;0|+Vac7*G20sWc?AZ4DffWdb#bls} z1tfCq>x{N{h~kqz0fkOyzc!#R1fJ(e<=6LJee5Mhj(zg|WernD?&f6XCskSK7#fF< zS-u`iLsn>HBY)Nz#`~I83-H;dnHA}Ngibvj{QDWW(Xj{|0=FVOHU3YUP8&L^D7JgT z)MhB(TyaeE^2s<Melkfe`Zq8lK8#2mc z*~X=moD{lsH{+AQ;0t0q;NVp+qaw)nc5o738Jv%-V(1KiE@izMtcQ_ZFy60&4z;$P)i8-;oR37+vKbQN-Z4^ry5Dma$D2{}5ALM?;yJ#)6JxPm zHO|^;YnFC*5<3>zr8ghRh-_lXQO*H4s@s8=c(3X;|CB2Gl=yPpAfm}EJ*+{ts z-a%zG=PaeAuXNzA=j#~CJoXgrYLel|V$2%jzE~`l$sr&e+E?Hcs7i7n3@t^q5M2D3QnHXhg|evD_!|>-g5DCU@XW}e9mL4 z4m0dj&GJf#+;7uef9^O*c*I-2yUExbHvUif*ULBQhi>c-vB-*FquLrlSiR6DSQICN zd*GBEM$_26@01SB>wL*(9J9h-j05A%2SJ74S$HSGx7TgsUaV>7_@7pz7 zD;a`f+#43tuvpnR8RsnO{{7xvaLpc30IU>aU@W|NslO1ZPYLD|ZUu^<3N6Czu!wQ_ zdtVptheqGJRKMRNLPz}!B0FVi>`M7Mu3~z;r3Ra9{kDIA>S|2XMO3`_RXT_Ml#uS* z9s=^7Tz-dcRUO)C#%rSxHfba&8&zZD^3j#KuPxy17I#p8f`>K&mXbVr^z{3Czr<0I zoNFuIxEqpnkZ4OQ-qv%J5!1J>VDqLOVx#3`R!>b56FSrJPON)lmiU-<15vf2p#*3|M1vEdqo5=p zD2$EL#8BLn{i`dlmkXU0%^SC_a&RW=A8#jrhEp%)6BB-KI^PK{gp<+l6!M@$53b0R z40h!e_jXXchtytN=Z_dP%fjYaCxva?ZR&yQZK)i18l(B?CyJSW$-8d60w9fyz3x+H z{VP1OKcyph(egpg)(!%jXu6hIF3lqf!kKo~`_Y@~V*Xf($WJ_v2TC|9)gukJVOhh% z&z691!Wub$Kvc8RBU8pOEA{^w_#QH8<$&=G#2pB|x3EE7W#VF$80Iw0+GRA5k?OF4 z06|373KN%mHi_oD@`MRki(>J2zX`u7PtHYPiyG8u7w?~VdeOfUv!y`17W)RMHJPF! z?6Piw?v?i#jU?mSa!}sn8=xwOWN)=qO{dS7$I&|YG~JfnmoU?ms-A~cCe=t`;wfCo zFd08|mLtgi$B~R4@g=@rySD9{bI-*?1tVMAzJttPC+Xv(DEPbnf&o9`&SQ#yh;>U| zE6V|kHF}q4o47eB3IE1-9C$9-3#wEREIB`;j@9f_5bz&*jkQVaBWY?`vd|*R6!6M* zo>U9_HOg^^@g9T6n*4t*c7!#_R#&g`i*+hzcxH9d?`Sp+rfRfcx@>M0IiCu7VoyJy-*d$ z@9i3PsEmjg*I>MAT3jKwbW$M0;kau_^4om=3D$+h+_0XR@G=;p5oS@9w>=T$C)4vf@niC#%Yh6`SAJ>9<{-6?X6jWc-N+Vj)}UuO$q3!Pa!63qCb$~nz+`!1&cundee8Y-HtFPCI%TQY?L7s;Q zXF_ST=c+sU$ga1vxN>(wN9ZD(M}%=g8@;hn=g%~kiP!6;=7arDs9E&8sWDLhrpI5M zvgZ(mWG|fMNm&I4$rR`i+;JGfts%%WN4(DMF8YSok3W!>hq8w>Kmq_3@Ok|;eivR0 zf8Qa@Sr@I|K>`#|052GTkV20Wc9mE4lc8AG9SqqamOj}FgVQxrJZRo8-!*-qKXNZT&sI&(2T;qz>vb>M=W0B;!cq2o#~V(+vX8*aHjlkDAkwdKpdT+L z^k)7GXz=*LOu_;zw2pm&!{eBI0AK*tf|8TILFwTF)HjmH4wk*nh_O({CkN3D(IEiQGGhq=5yKRr?rQ0ic#yKRD)7pFva zi(#D(@<-sTvNipX_nF)6oBmgB*W!E~XUn#Y&Ob&YUPN?$oq5p`Kc6Mq}WdaH3El5w$T&v_T|X0!^U?}CW~uZV7$x~_bw@VT z-QeJSD;GG}$3@a7%XB=}QY_jC4FQX((T;|rQKYW++EM(QBaTN?Lp(y4&iJ^Bbo)e;4SwZHpFr;w)6_SKs+NGH#W!AHX`CygE-@X>O9b@Q;uc>?2)^S_w4OytFw z2fqNHJ=h~Edw6LS20FwUp!&b3S{?C&GxQlJfWjqrR&v^j0LA1-;dsdX&ZpUQH>an= zCEArw6k&%pYEkG|(ZW2p)ewZDcbKj=1*$8Yj|Y-n>=3#P zwW*iNa=}_vd94jn>#9IwQ~gG*cbG|JK)^ORWrt&MRC9zM%i02ivh8Bnw}UZznB@-r z!J7`hgKD1etDpM|+OTNx*E}Uc)-=Re|3;;+q1YjWU&~8np#UU-2WURqO2+|{%E_Np z4%f@Ot!?N%T4ddlF0N8-7Xk%9qguV9zgjiFu&5slE5GSEaC*ZgM6^thSNYdYEq5~* znfzgpuko`!P`QYUl;HYvITuwIyj;7GFD&pM2ir}ur*S3U` z^Eo$Z17>$-lFfaL)6sulu=T%OX?!8f5sANBd6Y;NNN?7INx9rCI$XTsI#Vl*FBY|3*eu1+LrzOFa1XLGQyWxg;c>HGeyOw(Jwf`RK%JATA^%JigBB`Bw0)u5Wy-1Gje){XPfboqbYN)AZR_ zwsbri(ajuzl+Ez)SEp~*3;1wRQ4ZN#wIToE5f8W0|7v#{eHPTCK(o!|Rf-Zo+&Ttc zfR!{(SSy~=8~A6_W=pa2d~9=l3!e^sclm1|Ucw6hyF$6>yB%<4InqcBW#n*CLtU`V z^X1&4vwb)Mp3%WGFcej=`TnvUepl%LCp{Coz-ZRpH;r*{mDkZ6J>B0HaPTfx$4IS8 z0+HI%vHQ%naiCG7Bp1i1T&=3;`qJlBt5xhCDlZ80mO1>&g5l-DyWuI63PHV{vl8Xi zG5Fvi!Ftpgh86nx)HqL=4I{L|T3+=MFhWcwDaJ&8#bpe%f!WFH_h~8sDoV-n1f;VR zvysM%vA6Ji``_-1G(*DutRm5=`lzN$k)Rg+KlCf-T5zAaDI2fB*~-Xr05a6h#4n#byYYbktd)VErq^p$XO za-sX^(VG{`T~BQSg5twkVDR|HbG>WB!79~+@mSCl?3nk~;GVfbx5f^B$34k2+L1Gq zB+~NkeTCq&DkNJ+IU>HwvnAKrd3eUOiUpx7AMo%_`Gdg{)lbfO#fLf--li3Q4{*o3 z59d4~iGFkYXwtb#AyH=WCrnQr#Pr6S29%5{E$pb~|67bN0&~=jgxUC-# zm^<+}G~490_AOkw+eD&**)6YAu5ikC0L@K)v8a?2y3~AG8-eRoR~Dn7JY(c26)UUW zkbDsM9IhJ2Wc0G6eHy*v(}xb!W8yAzYIRv%eiCUPZvEzy$|{py@faSN>b%o_Zf5Urt?z_$(07TNHSmQ+7jgb7mU)(WbLN!=O}@u_-8l-?{gg}~ zK$EgWhy(}%MVjY9wrFwUr?5>4vT&T?eHA&3%JD_A(YIc!xW6W{#L5eP6lbO>BpD$i_+8`vdfBKwK?V?!8qBaVV3r{o01zZ3Bm^PD zOtvKKo5p0OSEV~Py!~BLE4`U70Hcge4`LC6htk^!f^h?&v zZ-4S{?+H{Vb~XM;I_%rl_ElbghkH8v{ZU5$*rmWN{r35osy)+>(`>7D=N~FuqSySx zLpFBY|I*%sE{;Jqu!)ZiCJt- zorUo|5dhIh{`S%3(bEH`Fz8)XYW-D;FK@Z?juhdbtSF=?T4oGX@9XN|^`_=XmKCwi zWerZfGgs24XqWQb`#ry>A*w+d4b}UGFyS80&c5uQ?`VkB<-T+2J;=W?(+h&S+B<-3 z{&~A-td-CEgeomz(64M#7@u-25Qep+7lY;k{%1j#9*f<>P7oWBJ+=yZYVIb4?AwUE z!Lo~w&RpO2M~xFTMn6hE?Yl=VaQVx)WRk&kSWg|u0Q0neLlYP#(&QGi+w(c-R2+VNS`sb z2^wtI$`N}I^hBmUI#$OY`tnb+(&!(1y0p%V*FPg^V#neVdwEZq#vuSH*K-T)Ix)g8 z%A3HUQeqJ!03)GE^=G^zx;&#|Q_?LI6(j!f(q%nH3)QOSV(>RgYYh)Ud!$^j#^Jiwi=k@Tzu=|=NAZmN)Cv(`A1!KfWp zV5%s_dYmPK7{}^~Tbs~Em|G1#WNRNEQt(;wy^B_){PAAj2&>NTd1pFg;Gg*W>>EjG z-ev2-_-L$IM2q_&0}L6^U}TZg962yHFY?P#dk3j^+GI|p)zjap=$&b72G(j~_6>5y zuyD+bCLI$+<4>XGplNID=dB9Y2*PWOo}2b|Xq`R~ zj`YLa zuA;L`Z8r9iIBE0w3WAB+l(Hm`rSoTARZ3b(?Ao|s4alY3pp>VA8J#<4>4KTaF-L4= z_Y};TcyW@j@9e(ny}D-fzs}*m4+b+#eHqfjZ^BGqMg2j9qZ*j|)Q6JGzP?gmcGxc# zv2hh*j9v@W^xbO&qSFFT7hj|M8#V`_ulhpJhRp!w_y_lE&MNq{v&!mWmz{+YDJz&6e&>rt1rlg2F6ze z(e~XEN1N9b2vfOaIeCJ{artng*m{00t$*uv=@3tHnqDV0^B%@!{B>Odk^<46UYPOU zbk=FBOsz1)i2%X_2++eBMhJ+Ih>4(}HH>ay8^u^}siWw84_V!}JPY}H3evFTeEt4` z^Pl<{x({hv!@je|NyRR$=(bBw=kL{VxoJ%^Qo^TsfobkQ+(?i_hT>xox2i)@tw7Ls z<5pEcT~|(TK|og-ah|8NyUT9UIA+aErSfb(g=q#Hz91SMV);nWvWW zps%nPW;)}>Ct_Zk50I&K%A!5?CR(+DgfDVADfSc>!(q{t9#-*ybbhJ$n^|g7*(vZl zWtc(~f^o7QtN;B*s>XY!F@p-vsZ|J4!?##c&U*sP_h7$%AA%#5O@k1Ij*pI|sHDS` z?X0-k#~_7H3*n+;o)Mq<*HmL|m&qRps$qy;BMnkr-VIr|YNp5#Tf@khwy zmN*nVSy)s@=2wS0A0o%}W`EAXTr;a8QwWEgZ>l;wq9E7aW4kU=_5E!b*C=EPVNbcRSrapstylw)()2-m;n3yW6!bDCkwuzFQUQ<@j4vlz zT#&D_O_7Z|I`-`f)!Qno2!$eGdU>R`5{G26?07pXxNB($9(e9+^m*l4mVTMXrf_eY z7N~us?Jb!s;ix0LZa=6W^Rq%u$K>nxJm_?65{&AxC{gMHtO|>f&)cfbV)Z~crrPmg z-&{#q>2_VsaxtLti~zWQxj;m66JrIO$q zv~yD-lQBkeaKQ72B!*$*&~Wn%fiTafB1p>SeGkK^Rp^IS#n&;|d#;4J8;o2xaMN$< z)Tx3AE!x%ew%u&?RwTz*;{?{_uBm3VL{m_23*drVvmVY-(Ya#>?`W2_LdnuJ5uWUL ziZ^*x@4c7AYLDC~D{)hG_#QS%4Ld9~#}K1DZg}8GoQm>J{6%=^HT+5NLviM$|Ht6p>F`CH*8oM>0F5zPE`)Uee-7f-$B;HoY~~>t-pU|QXg)eXQ6ZD+GtEM3b6Ke`$1e_b4LxTGdd~h(&Gzg zMjVoEkG_|E6jj?8wx{$lT0hfMw(<|KKTzi3X``O$w()5SGS z)ry{iv3?V@yaTB&u_Z)ng^|ykcJZm1l{7XtilfU4S6czau;}rJ)pHAG7>uYo!R!uIT*pG!hPeEJh(a;PH(bDq!sKmP`ins=tVg6=voZ7p**0XNc16bP!R{? z;h0VuF-}PB|J{RoXnkrAH?mMGn*)%oqu;iCnDlk&n#uR_Ly5=Hh{Mr-hzdV&LZ;{N z9;ok~!+&spbm68XA$Wt$0w|1&1o5A&a%1Q2{JkwLdOCtieR^mr3ER9|MYgk1FKgQf zUv9C+<`8);i9#}Y$Py`#F*>36V8N3n^Zk<#y`v&AYL#qoH|5#TVjl-?_wnB$V-H+5 zf1Yph1M@g^s_^Re*p{I697h%4u!HU6!jsZCK?fD3W(+!5ZxDTRyou$=B+3E(@pJG{ zKba=~g^BO`ni%S*L3-{)xR~W_->aU&Zz(-KYmU0@+NBG#<9rX{67SDa`TU^nEEkR_ zdA2C1E$Orj?U*`p;I)z`0 zjlfG_VK)-YWNOr_cY?ia-EARhkh#8N>!9bJPGAc7$Ok5H;UwYq9uwTJPGHCz@3ilj zi9g8B*)4RF_u%<2L|H*&|#fy!#1pFX*{?5rTfxVgar%AYX4?N$P|Z zV;N%jl}L{PiJXj+B3rR22lCqVEY`-Cl zoC>Ypdlb7Bx31d$-0oPc6=wF2S;$CXiD7~O@Zfl1$qDiNH@)}gZE|<`eR z4Xc*nEU-?$G}{!sue7lD%njA5Gef|jDGw4)$*Ve~_o2f$?E+2P0~_ivBzkWzgONMU zcfk!6E}}z215)8sU458FC}pyFWpM9GQOgM|^!mx~ekivb!0XHocD>cmLjquxd1K6C z*E{*PZk9rGr>+Lv9+wX(#kELxE`F>9bYj8y4>BbVC5?s{JDTo-vZTWw+P&hJ;A` zdV1=iFuuNITjg!l^dmZNdgpPgRby&wB?z@W{3dy~klBf2c>cp-ct4s^B3ZiX10;J@ zbu*vhWutc>`&IlZX(hQFzOKp1hhgHS+3PDrGrRaP#c zZ`0W_)5ibgJd-j`9(6(w0tG9J=}20R4j8hX(%JjyPp-q=V!P-a9Y>I#v(;NHP1b`~ z_mw(USNa`Rz9xsjz-$R*SV5v!t-zz)bgOddDcd~@$|-94uUr9zwSeeL9gi^)=X!7M z#WU(hD3p(P3u8==b#T>fM{q@r%x};p`U>Dj*9kF?kq55M5;cC$)tgBo$+fH#7${+? z-hXnx01PL;o;u$IOx2i7HA04E;X?LSosE1zZ2Giuc4i^%bUkm7Iqy#a*G}4R9oOL+ zQV5Pmsk@_+!A#napn>K{vDW!zd)Gvhc;8a{6#&$=I261q(rg?s>ele zyk7MD^&o0rS~}}+@Ts_aqrg9aIpbuJG*V2MW)l%13>jEs+o4!WJUEU$BCiq>WNVL{ z@BhEf@9wzVCOVJzZr@8}ULPnEEY^*vMdQ~Z71r$Y-7$4zSkV&O$miM7M@jQ^bA*Vm zNZLJ*p0W()fQ}VE>y8iLV*EK@u_@Y2oH88mi`AQPq0uC4qCbR-BlH!aQf>`;m1i8n zEQI~u3q;o(DVS^&t({~2B3Xr|neZhvIb;Xe?JE(VeYI9oL((u6#dLv1VC&(Z=g#?Z zneMi6JOmGl=q{7H!D{dJ8Cd0Zd-{;8R7i@LhA7G3E?FSY%H)l=ME%mxm3+B6jROcq z9Aw-3oDTW>M|15RN3`+C`UsOi-Nh)#v$F^qwvf_?d>ZC;grk9dao+x^KivM+Ko}q? ztI?7APuwtD?-(LCPK+EHpE3y>rMTZofPn5Rq7(-wzftap>^ab!FZFgj)uM2uRMLi; zAa+HYD*NVW&+YHLkFm#75mDR}38g48nr^u1hK8q@iRlmMH<_0X&8$d^k6W3Djff+) zJ|hJT7mH)~oant*!rB~X+j_Y5CDqQV-zpm_y4Z>myF#L85(A%bKuEn_6OZ$ zrAkcGFkgA&RK$(0R7FU6Bb|$5CF-EN1nzEA@26V*(S0k%h=LRIcT4RUB1)yTfWy} z1Apxdma}dl&@b7vO68;zNatC*GqSV?PAu@#XX6T=o1fT z0o3uoU#INn%{>p?AucT>7?RNWxX^LEgf3}oM@})~$=I)(Z=34NXnYFu!}2C56ag^z znjNFC&EE=`6mAd7r`JjLf)a48!7UWGd$Z|MfUqL^5YFucec|1oLG^E_MGZ@9;462; z_U)364t1^g$m{rrBTG>RlDUH!v#6z1gn=PjqJLEC=7$C=+))IM0rxt^2 zIp)@_I~W|N^ty>C+8v*e_AD5~9{?s7Tk8_ZLV$)!5DGp#c#O=(#v{{`qQ*x_Dor z&*(;paM%x$x9?~vmYeN7d*!V1tX;|oy>mvbSSTMmo)mb>@`t(jk75{X@+-!28?Rg+ zr7bajaYf+??g1`*W^uOBr++mZW+IMgmIi50y7nbw|>0h`kIg#cHhV~W#RH7 zWO)#FP4RzrI8hjrPm{+Pub!zm4~ryZXisI_ySPF4Mo@KR7xC{XXMqETFrBS7o?5ij z8j)iSS_h3h#-mml8%7z-{nOI>!Th~JjkBnfKo83z{r6u=-SMz!B4X)pMP9`zQ_;^2 z{&{AK@gwo>JXaD)goObNQ-%quVP%Z>z1q$E#A5hAw~P6p<$b@_UO`Cbj71JcR1!i< zvcf=+kt%sE5<&&+^F17%#v4nC%Gso@wXcUwXU#i1L!9Q?ZeGo2$iT2XK?kW;n?sGS zL$EwS)aI36v>hYi*!#TL=f1$akl!88oC!)Ux1^O0aPDOD=5fOgyo~ob%xrrNCc+zN z?_fJrI>e(hpZC9_L?`$EX_>2gBg^9+G-J93jN=&({kQbIMP4RiI*8ttD@U(RK+%MGMnDtg)oN_G%9cf zHC!u_Jb+2+c^ErfpucN3>VVk^r|g^whd*1n%}vk2wG>w)X{tX30pb^Yx-)o4MHbSx z$+U?bfzDt-=S!8Bg2)R@*r@iop{AqAx(}*|(Y+BHDGb36?j26_07BfvThV<7O#G!! zoov<)Km08g0l=jPnjX|fz4%%M%_>j|4K$isgku%~uh3!m&_}=x^Qi+kA;Az@LNNBF z19!E(H@35RxZ1(hz0U+~B5qB|hgdMy8VJJs?X)G~K7(Joj z7*wE63IXOc8;=$lM?Afek-;?eZ89)X?l=2IJg7ZE+n<<;L0rq@gn-@nqwmL--`z0g< zp1NyQS54%>C{!_Z&^iS;C1ZFBSl(z{zhm=A>{w%A=$bN*p1{ zWL~5fT;7oJ`BBI?HJ1L#auqW@1H>fWbyJ9hA}6+IW!23DO=jXv92oTvr5LhSLu|CU{|o2f0@Afa~pC29YHPt$-tjNUs2CrvTgne5Vy-0Zh|V~l^t&X>wu9$0P9 zv@0|@iyoWX1^73VN+D## zIt)scHfPMZEutSJ=JT3GlO}VsSIbX)|5@)RunTd=&-%X`sbg8c8y)Vu&&Enpj6LA3 zlqu|%chNQ@-JcBa6JpQVwidiK1rhADBMSsDKHoseA?JqF^Uk7*MI1!_p9h z7&SoF;_@&A*kG0BnnDhlov0|{(y|-JE7+NYskF-{(AdT4UH}nYaWsCoW%R@MGau&e zq!jW`O5U>)=3gDeSKrWO*{4;X)+(O(=(^?)A!l6@j%No&+Tw>cmd~Ozn{C@VsO&6l zZw}~dQwK+fJdYZJ^CoiH@6!$qzL(B}87H?8#|mgV!we_TVt2QfMqsn9*Id@4IybS6 zq40DWgU5vfMyC6%FZoG&;=^XjUbOlt_mI{!<&=%vG`#Jq9e`>C45^kw6}xN8Db%^? z&J(MhjMjqS+?x-H(WBS+CuZ(KiDu4hl#t%1#7yc%L!i=9ecW;%Q&2=iT)b=wgBh7W zaKHOrES>P-=^mdG9)Sp4quH^~w#SxPZHSlQR#ixI!SM(Sn6aI85$f)HLZ{o82^`xf z??63;Ye$p%PmgU41<<^xLB*Ns)I7cdmtj?F+kC?t*=+(ne>|Ua5Z9k=86pjib&;KD z<9_lSkLwZHH7K5Ajn(QeV#aK@66t0qb$Vudj^Y!4skc%nZEN{@7^-;@G?pdE5|)qQ z@;;5p)rEuU0(PJ+Swi$=u@&uSca=c*{`pQq%x0K(K+n89v=6v~z%v3)7+{bR5ClOm zU&6H$UFK;V;i@j5+6_(=)b>YPgp5+5^=J~(ADq`)-$USyzizVzlysj}Ml}-Yf&hMO zLBjw9b8u#|k%#=aPij53n2OJe2Z*qgcf~)=B{W)7$st3=Xb-{Qu1@p)$7?~lOa4}j@AOnDtAc1bK@@K(3t3-K^GY8oWm?x zGV}E8Bgthy&6G;jZ|p~S?AQIy4Z`2bE49BSrbp@gYOVt{+M)eixp}gV>_@|9mZUxZ zl17c zXW(~$1Z4a$VS%d98J7F+@!n@Kk)PdJvlIh9Tqb$?i?nQ^EuWM0HvH2ilZMt03-|E! zKXw^C^fS;B%RJ;mzMKLaGI@~j%#vC$z&!&ML!oaDHJ_AJ=C2+6j{ElLRJ|UCuGN9# zTGVuOcAN#|TEa0P2qMTk4P936tIxpZcSL!*f9GMvwpW@%VN$bED#^b)U}GA zeR7o_p?hfGehR$yf*ozbU#GIi=$#g+Lb!8|5zbqIbRz{DRyb^B1e*webgHC;Kfq! zG28LB^>?;8?bRb5RXywh*rVUtK5a_ zbK~~TwwtGA@r}2=@Oyh}kMEY(ewZ`w5J6EwJKx|+jwrKY(?K)iG&;$Q2@VV7iLLB^ z)}+cbRL?uiGFty#*lWH%CdSZM%U*FxqH?v(hf&EbVMNyvZbaohetOZ&ApV%S~;uOPa%7xJn`3SGr7WDDp7ZJ+={ z*bw(qnV!K*z#$k4dh0-PPX}NI0y-dkGi9ze%L@fy5^{AvW0i?GO3CA8bN+1cBoQ)X z!q-Oj;@r>zSX|}{j0iSN2=qB=Oz>u&c~$5Kb*0f<@bd1Ya)*;7=uVMwBKSHoP94yz z)%NtAOa$RNg;2y=z7G@Nu9s%of3$Dv2_&S3NMs2CrOL;anx)p7iWfpGnEhkAQZAsm z*n)lLe4sj^AP(?%7iEgD)D6*kbCf~%nS_It2Gc*h62G#x7bL4 z3iARg0}>|=!?Jx*quOcge-hc4`~1xY%0T5&sJS0|y&IX?(FZYPSEu|DFk;9b9ebmt zvlEgm-!01uglAyVt+a4zA2#p*oo4uuG=HGjDZ`1p+L}Yh;YOy=n+f6$^@y|k_Qn8& zE^jFYBELTQI4Qh+|2Aaw;Pp$6sjf|_N8-{uCO@2bBwhb?A?Hh;cc!SLcv&!t>U5{q z<>qy49q**tI5eA78SBGSyTtX66!xmMYq(f!-#)o~EQo=TNOk`zK0GoI4~&zTVIhWi zaTVX|UMP)DHC0%wPrpjjZGD=A!H)JwJ)BWe!Bp#&etvIXjN201pOx>N5&PV0hs5rP zUtuDDcYSw%4<69I=MjtK;{gL?z$Sg$0!ylb_jhP4K}7!0%G>zE!LfAu?-Ov3;f+wO zTSt#L(Ztx~52tSX*A0uie*Xf)7Fq|Gu8L;c=c%1+FW)hr*R z{QLn!fM9)oX6IiMj4>LQznuBQj`k_$ml|?RG48T+KxBmBgvdhz0DvI`B}5HNgJ7K? z!0E=CBoGF++-lZ1SNug@yFJ&+Z2V{&U1*NXyuA_?H@Q=?A;*N}EJKLGOqy4RLR@{4 zXb@H}C-g2v_g_rO+OVQs2(4%HiV_pm-()QsWr$Z^!c+o5XgB(E%*E6g%+`EVcFzxr z(>_Z_AEz&u#xh&qf0hgEShdoXq)zR>Dk8vs!N{R_hVy(f1M+2OD-~$U=X-)Kag6C5 z`t=@I0qj8$BU^^9hAhH4&3($t)%M+^&)kb3vcS2RjHQEX#?U}(Cmd<=laqFtuZIbP z<@EniSu4NvxOL3ig)8vm&pU{CTY+rxE|Rpc#T0+zB=xg~adTQpks#_U)^vg};e#sL zr@xOlb@f`RT(}DbgW`Ec9?IHt_~OgT`Kjsi`&C<{-}_6+A|H?0v1kJyEK|67Q67^A z4BqKbWDByWByV8-c|09LYQWZ(BuEF`@4%lKCyhmI8e(Me^w$!3~n7G@ckbqqG+zLF$HqhI#n zXqtdnXbU7i0Vl?SFog30Z2UW(PodPTZja|W=2M7!G;RhrA~g_J>b|f?2NmY;BZ;bu2C#UwFxn!-}ciAzDC?VuBqoK)*HUu(oeJ z%EG2yuz$n$({qQ%fAt8=Zh4Z|lS2aY{s`Hfx;%C;yPPScO1RZrRccdVu1#ZZi=ICH zA%09PGY1cP1@Xs|PhGr_e(+lv?sxRA=K_Ty@j?BS;c@o%h4GZV_N?*!z5VD`ot>u0f5(I^76Po@_dg&oCWBWJuBtx$&lx^VF)mnTx~0ZBNU zH+0b{RV=D}lUf`Hf9&YhnB7*vJILb9d`W@JKLUr`EUv@9YXGI%J9Tjsbicto#9$aO)zF|iIai1&8JY!M-El>S7` z!yzXabQe>kELP~x!zTLzMuH*~(%`GbG!69dNd_N?j@~ryeY_YgOxjge{-#isX~684 zm-#6L%&;jOxHkVhsR`S)A?l#D;T?>sht-uOq%?2)bFcOMJVP+yB&2p_uMaP=$jpj9_oZ zLjepBAVClhuBI7J9Bao40WLXl0%wjlOC7z$7$*5D#zb0aCvRd^xj_9HCk`|pyh-7e@2E|Y;$Ww zusp-!BwqxDD*G7X?3dZ1kD!ghDe|QsF7sg0rVvRSBH1s~Az!=WWMO|a+$9GE-cdkG zqN>c;-Pkm?*cY)qx^k2b-aIRrp`?9c8;^?9VaFu6O)as6twJfG`>kq?KOtw;Q?*~Q z73)38w;sn-mubwIGmOzuUl7|&Kr1#=54;C?sCEam!Ujl46FAZZOQEr7S%o^awC)JI z0D%{o;vF;-d`g-T!7eP?@jB4e3(^>FA~pMO9CDvbI>oQnC-R-M=a3u3O)dM-q8JYw zrZT>y&R2Jw7da}=i%RQJ0FvBqM3PV@0}U$I8#9ZE9T_zd+(Z)An85E9>%?L`b$(=+JMi4N+nve5;GtTHAzg0u z->wWr3)d5$egBVG668=uDnN2%MeW-~D1*O47e?#88CA&J48G$y==yzkFEG0;qCE`;%2Td;n$aKmmWPo!*TmsMjgrU*hLr8eI)--4uOKXaT=vB`P+j~ z&`ctHdxCvawBD44V}RB#!;K1c9(FS=>}=mwc9QlLJ7$$*&*2Ioux6|9z6;_c_`0sd zFtMA>e0l8G%dY3w8I-fU%E*kp;h4ugjO+KX0W|h}(dLO%!%TTH4HYd2)YxrqFGIDTkMH~q_f-Dga!y4h z;>k-e`x6($cka9K`o!%8m8fAoDWG8Z3iNk@R4`izMk0|>PGl~Mn|bt8efhNc2Y z5Opw~=al#fAVGR2uF~`Zg=9LmELCnr|NE|4C4~Q(c?4T=Jn#1NkM(fdPqNtrZ~1Y$ za5g$ZLRU%D!X~g1IsbrJe)oI#^uLYNU8wolh{j>hPYOW){oeNC7pos zseBt*AGH;BSOeNiyo+7vkODgA+)dNOc5NtJP6Sp0TV+H5iw*He_AzG{*`cU$LwAkh zUaZ3=P8gx335(KA(PL3sV1iB$&>D__L;zSsxI~X{h@_p+tDmmj3NcV|GeN{#-fWJc}J38e{lTwiBZHJR{mfP6T z($E(+)#EjAwvH%q_=b%3;#_DCY2pO#Gcof;BNd7^P?A}fSgT=tNg6NK2flDrJ7sdm zK6rx9pUG^uGlp)SCX)=ti`H*dZH7r8)O1PTu!>7wj^;ZX3LmmChZAm0+Xcq2`%<&*;0_{o&Eh zhQ?BF^9xkZ9}{cN9HD7(ZBWDz_XUXoGauQrt#X<-5nh`{lhPTHXw|s+|4S$w;Y?Lw zRr&WQD7(N)_Eugw?Q^C1pu=RO+-bjx5FKH*aAq3tp9eAcxbPWvQKkg2l455lWBn!JKo70D zp=$w|z*X>ihlvEtpRyUap^~BI*caBBEX?d2u0BjDrSt6b9e2&RxZSf6)yKJV}8Esj$^ghB;dT zWk@4yQemxp1ja;!#4_D7Hr+m4l~#V&(3r)4={UnT>(y*j!zN>HhA5V&S)U}P>=3Np z773kP{v3V7@+{c7zMs}n;%rYX@{G*{$K*(2~2>JO-MLzZq`nD z_<+x9woz!&Z9PY<#uhNO5hggC^;(@bkimd6f+c3QFzIuA14(OkZZxk?Ja^*;RRmd% zukT6wy6S%w$|Aak_yypr&;U+~bbEY;&l~*y8^;93H-)>7 z6TwK8#Wae&#vGSY_X`8oBku=JY>q49MI?D1$kfn)zR@OFqc?{~eB(y4g~C%@h+znd z7>jW{6_$n{t?iP1@j|dXB*JEh%hs~>Jgk<9_^!v5SsaN?s70Vi2!F0m0~Z?=9ufkB z={J4zZo$&l0Ly}RLps$9GUFCg zbFL>VZYnNWl8=ErFtzyIcL(iQu8AE&s2iUDkTMeM%RWaVtLPW~&YWF=-x$t09W$I`c+3H5F8M!7(iAF0_X$=D9pu# zFj+M?ojS+Zq4t09_l3Y`wVBb=;ELXJ;axSRw+eGfH7tFj3@V_D49|bu)0vaV9n?X@ zgdeMkf((#@=L}2`e9z+1G!T7mCI~+x69fxDbKVXKInmY;_~PkZjKS8BBn8VjtIqc0&-S)Edt&*%N_AJ} zpq&J**l2>-UZ=88B(c~VY4>d^kh%;k+A)#X$FN_U@1a>rF{&xQO@J&UI8lOM%r#*M zQnTclftoy-Xi*U2B*qB_ix_|=9OocN2_gbsE~WyFDYw+;DTF{+>GhYCDVUO**}r}Q z?s|vpb;p7gLqcf(fv3JSFx5RkNIHUjAs`$MNM}4zE)N|nW~)l65YX~5`~L(UafG(S zMU{FnZ=>a=Ym6&s(?HNSaDQ;J^${U(9fr9757sw!^3#Gv0KSpD65>XO=f`tPUZp|2 z)Ax^|7XFbSjwu441R&V`D!?p6d)hEK-UkJ)-p>!DxLLz65Mc8FXeP8&(&9-hy$3tfXd31!C z=ZRbcVub#2a5QbhRg`3{hF#+)0U3NevlF;{EZlpR*FcXEB)|C@HLI2 zvlykze~E9NV6P!{yVe+Y)w}NbM(U=-#|?GEsdcr0jSlpc(N#wlU7Q+LXEd@Sy9lcB z1;2JN?5h{7pojAqMvy=mf&h$Fs@(-EhAYnX$WlF#docgh#C${&F@g}eIC%yrba3J0 zMDiVO!NE)sXYk{Sa)uV+j539W6p>1mh$G|9Nyys46NF9xOhrm~3k{J*n7ogx={W!2 z=eIt8f+rKge}JSqQOOP&Z!0@V&t7Uv2`?~Mk5X|WltxX71WJULiAp5NwYm@-5>oDc z_yjQcK+9F8WU3ndsDy}_NWv{htfsfMX^sUPyr76WJ4_&aAyo*SY7~v1=0Mz~XT9EI zi!{BtZuT7U3iN2d59LDubaXC5F_x_Q8MeHoXD;e3*QM;`(UqQJNld+=616|imEL*d zUpiysTc6G>3UroKd-O)vST^H#QZ4vEtL)Mo*YDj3AhbGIWiJfDaV<7i zv?ZcMg><$$9J`r~A23|N@yn`mOv4O>XGU^JV%Th|T8~dcdt7T+P7g!j#A(dB^_qL` z-2Q94mcY^}M}mW5a`G~;M9W7;ou3yfIyMi!2B?JufQX27JV!xV$>bq@CKIz|e9N8y z{F*iw>+75LNAx5-@MBR#?e~p4ic%I12B*XgDk&lF#uuXsJsuX2cEzym{@b9T9;LPX zh~;(s&lc5=LUec__T4NL`+1Se16dEh^TdyxE-%GJn4lu-=ARxQ8~jG> z{4fC)8M00YVB>?N(F`Or1rJ|S=KftMXj~&B8By*f1>U5YGSh#exyBzu)c)`-*u_Y#(IZ86k-@DmstA4^#DmbZ}@vR zVE^Fw@cAf&_|(!$PPmH?6(LwxM$*@1+Xq7lQA6AV6_L3*hI7{%LfRqiU5l^lQd)q%#6 z?err0z#%M^%u3GoqVS^Ba8a$my52G*X(8sP*G~T+B!Pg zb9DL%@;bHRoO3Z8OO1a(j+WpyCN}R(UVHNWZg*zO-W1-Dj)3C{aSs3DCFw2PdGJKK zUW-st``Ub^q-%{|9>j8YuwaPDE?U@gIl8e>SUjG3A?FJ){Q8}Fyx8xOlvr6Rj*Ss;Q2-ER(~Rd zAe0X+CWx#@MAqLjQ$ojLdY@GV?**?6MvW+&^e{tg{C@Zzi0_ZO2<8T@Ty5wbiQsaA z8~cw0VaRSei4=#2@^}Qc+?hoRxdes|xk#dIqhpSLS@xUMd4sSae`hQ%aL}le9Ew6u8g!AB82#X({vJzf0*+|!u9xdDnm7h6p`$?ZQY&BhVr$3j; zh-fU&9V}!%tYlD_1{+k(Du}q1_cZ;<-}xA)=lS9jr-S8x%Aj+JC()y82xtJYCj0EG zejP&G*&azeP$qTGCkN{s9=jtJtmU6)@t#H`uPBGrPF-}l1FBzP=seQ+_H(F+p+OJW zm2DULW6#rGlNY;JXn&rB`{Fn->jEGGgOAD~rkTdcF&Q0zfZ^wD*+nvP_zHgI+QC2> zXMmE<(;T6Mr&HEyhAFvmtIN1-t%aJxBT*(*BCVHSs9QVoy(FNF;Ct>o&fU%G!nhqX z-ub>fRqE`}_pKy`p1C12!62B}CM7W9Jaj!##(~-0C8rYt1*rKv8t$c@DpN^B_V)#a zdJr6E%v&yufRR$k?JPl#Vi;rmH9}cuor7phH>4UhK9EQyg@|5#O%SbJxd+OFNAULk z#&kBGSCxGWxUE->6j8;XR$_}jlS`$m`v6TqvcE({n}Laipz&#+cB1o*=xy!rG?WT% zZlT<_(6%%k#fT$WFwM?z^Cu~G`88^KZ2~CKXjjD=8+u`yzhD8<1QKM(`A3kG$)44; z3(u=^EnaE*aqIOP)?Sh3Ls&J1^3Tj5`+tOTeUaEi{cLgLA;v0F_!xL^usVBGG%^WR)Lv6X-L<%24_p#{_aUDA)SnIAB~vqPIEl?*nUQuv zck5ifpde-$k4I={1$MV_Z&*;s#i-Z}>X6yO2yY&z5W}?eQb4bgr_!bdLuy3!Ty&ur zdvu0n!`R%CD_{+)bjMYAEsu)$>|!}djxq|VK*jqwK_>2piBiVbtp0p5k~t=o8=#OR z*4uqNPp24WPpfMn8H^?i+w!-%(yam&+&Yw&4z^+8%tS^0AVNT2zR_rAxCP6OhQ%;K zn6ggNMcWz=Q}oxQrN@WmXd5E0+W#0G+p00$BSk1YAsT=4c45&J210bNWc?RBZMI!? zU?YZyW(YpG-52kmf&8te(`K6oCPS9Th3IymwN2(BD6VI^n#$-h0C9SS~d;xBCD3l#kX^;ch=0e3>-Ccj4v4E6n!#t z;0bJl`slgN{?7`Qy1r<@u08Gg>DeYXryEeeIefUf z>3q5WiV#OMDqrsR0y@BTDR)vPCz>+vk#+PK9m^tP6eteJM|!Dz&vsv2;PJEqkZ;u4 zx^ax{0r83+D&vml_cqnaLJNbkeD6*azn`Dm9V-F$lLQ!+@DbG@IwI^xRFeb@HILaa zJQeobQ(|y&>j;=Rt#MiP{0Xb4%RhGD5VIRon=k9vp^12`?Zxj|nSz2A%cUVy=O!uk z>IPFmy8kxV^8thUvroqT!G@jd{@CNB#JW65qz1Z)X^ThiOelP&Sq6(7AW^>j1aWaY zl(ck=Zh*l^T!5L_Y}fHDDA6#2w-%p4j8}DAlqYtwa1+~DX}YI*a;xk+$|Bzej-LOJG|(YV(X50R z!SP1|n?WkBZp5jB-8N^MXITLzt0_-X?Dk1 zJgZ*3v;tR|mATDtjkmM>bh#P&iXjvzBpGCAiWKny>5EC#3q+#{8%3Zz_J-UoWgndb zLtaK(sFCWYT4VA-%kzuIQL;T=LO9c;d}YXo^B_TtD**ohx2hDTYi*zFth~qJ?ii|+ zir%bWz5-G&$qRpGw)1V<^UFF~^NJyIOH_&v25zMwJyJ=N&Kd+UDO1Cx)t=wK;XmkmD&bRgFFEyE{?19WLE=kGcGG+iwGGvo1<}%w?&HQ%lWyaxQ`?vZG zcZO#Bw4&5%yXu#}L8tqWj{XP-qzDe-gy{EL5D|Llfpsz+-4jYieon`N`Qmsi58j~l zBTfkt=x4gvrP;jYe;;ch)Ubd6C%Dc)bmPjY(3PlKJ`2eG_B`^6-H`qYj_*o&9SScy z8KiIcA_oq_H7J{}CNbAX2wkAm6Dpqi1`?Oh znRaqZr^L4hT;5W6(#b)e9J>kkwjN5ww~bae9~6e1vGhzg&+1vOTB`x+MlvEs0nBfh z63C36d4Mh=3yD1n7s%Im%4*WPP<6Icl-#V~=8RmZt(!mGgQVc`A)e7TOU#_HZa%k8 z;LvIoI=Tu=^Oubo)JHzb3-#K0WkQkf`W8Koq~IXxg52^fFGGmSwrL_RgwNAw(kPes zEZt^^)-u|@eJ5ssxvW4D$z-z7jgP3q?wECE$Yz{#gQ;_tt~ErsRFj%=5GalOL4Uloq=KKfSGbjrtD8+)Rpf z?>J?r9?ubeUic}k+y7K&<5n`EszQkTc-)EY9L~bZROWWK2Zd5(X&9SYqsTU)Olah}b^*S&ul>&&Z5Z~>laZ%*{ z89mI}rl*9M%irW-G>3+Uyh(l6C_LT1$MPsWs88{bL=1))D`N;w z7+_$5a0SE*g7Q<9HC#KNKI0|X^^hRw4am)cjtiR zU=jpKgP>PA^(gm?4tkF8_8%cB5o^kY6fEVWgLxtH`rdT1WzU70qFtgLZa1edd{3Ru zf)JT!hS?j}Vaud2K6Y@qdJHjRr0v+fUh_y~3aGxCmxU?UfIdUS5R$=1p$;ho|odmHk;Isk{w8(o$;uB`{IUUC<5<{{p_ zjAEYUL8)PGgu&t(9#E^~wDl>->gYymvICo~{*WQHOSE#6%Cn|qX^V9m(zN2q{4;Rw z*SV`sDr04|-O74judBi<$H(Bun60im$alAzj=Vt;Vlncu~^M0o{QW^^nkYsJP`{W->y!Yr~Z zv`Gekn6U616$~la3f`5_PyS$cV55YuSHEqcXdJ{v%W-C0vFuAL$n0x8zlvK7wte3~<3A}w&vI5^e`e_Nqg55E4diTjU z_UDDJ&}>PeZC`E1wdi_E!SC)O1qd@4W6t@zqeqQi$+<8pP&L!6HhGmFH>?XfgJnS1 z=y;AmE=`2{;R?J!-!v`%3@lz&Umo~Fs)+pKmTA;jVNd&k7ey!6ju#QZZ3d4ps>F0= z1nLB3!PsULxYz!e@Th_`zS2K3en>mDMW;yVi+?_FdDpWAwuQ8Piq~&)tmGy(OeUkN z(jm}>ODp_ub9#)@ys<58%;GKHPd4@jJ`rZ`gywT_dtp(#G%$ie{VHFr(;`I#2r@z$ zkja?{oopcXipl$1_V!YD#NKRV8W$g9chBd|ecobviQv8xz3Cp&PyKwPPQ)Jdkkc8{ zX5W>191!3i0x1@f|9(tO%XmH${^GAyyMy7-a?4DT)nhi~e~-Naxu&Dh8I1N6hD{G} z^XMdA?5r|J8!aOd_qli0pa^YOn|cucFjcX~4EtLu6L8Bp{Hg!oE9pahhM@4n2Iooi z*Rta7$l`@%C5&ich8Xcb4!j>FS_;PoNgUOa&nV0@k^&23>JRM>#BF3{_Z(<3m8My~q(61Wg4p$RL zh|{E!6qg_qGK^RUZ!=N} zf+_UyN8fX$Shr?L`Tsu$z@pi-#oDQ0sPJ|fPJhzvDSN^m)*Firv6!zc#>ki8{3PqW zQ+G6)B7nby&Msj>OdId?+X$Nv$s6`eC(-&RbB;lkZqPIod9;K-L!`OV|h4(nCC zp*vI|>~Xxnx$--ekNO#F@lS**J*bRQg(oLnjF`DKYFPFWC1n<)mxh1hmJ@jMh|~mKzL!XUv1XjYA(vQ#W1TkNU4B5s zgic@Yj-U%!nJ|VziPH}_A8g@3WhrN8E8*%$a|R!p=wEgYsW?UIsGl-m*grX2%=Q$V z!4NJX-`a45S^S@^e_Ni%S}>`nTfeMZ1J&a0><{uu!^wlKbV7sl#eFUOHq4krLcJ#R zO)Yp?>KYkQ9fIYf^&csB{PGCx8A`a!%g*O<0S8=veD7b86xA9s`5Bv`lYt8)adCabp+!Tz+uO?_=LUYH8%; zIvjb1$c%5L+W(M8OL?S!?)1eXuV)2bc)qyG{ky&GSewxeTph553b8FfH>MhlHH%k%_%+sI#hnN~uk`?WaZdwq?S z3QzuvQDi5=vG`k@B%@b+1_#5=WDI`NpKQ?J={U6HFNp~RnJ`V=7Be7pc0u?n=F#pO zFFiZ9Z3dkFC_Xgw4%m3~U>kTFrB?dRv|^b7GvY}D9GntUzigy4MD1a}E#fK-8Y(5U zlqixMiR2?!BgzU^$<7gzboXtc{p;?Fx}m*@{_kEhy5m&$>WH}#dJ$4cAxIU|d8Mdt zJQ{Sec}C1=8UNi&q#Fj<+wyD2tFk|jvF|ruvQIQzKPg0sHJq*u7+49t_VyswrOpOC zLv)Hezr?w0w#y@t_WbMQ%ibPgO0oK7zoYwS^gFrFlPA&bTCCYh!G!T_DL$aJ%z6Wd z15y}pm~LA+hCmF-gvmZ$$DR(2YNI`jkM#V~KhL#z`x@^i?Ss|KeXB|xDh|g4kG!pl ztSw(74KSu&St2L;>()}@vrNExDifvH{g#g9OT5Djhq)r6m2wcdKi)L7#+T^k%ixeD z8#LSQ=^3WRTTYf#&4*Z3sR@x%Kg;nN2!4$(P_^C}tzRl1<%E=QG%|wzgoc61bOpX^ z>V1TT-m-{X#z*+QC&b6CBMPV5xS-$}*>h*GxUSl;R8@8=bMLuBb-6Q_- z;4}50vz*H%KimIQWG3(>MkY^sO=(ZW;2IYg&0>Fs@#kc{rEKwlUg_ZS^yS?TGf*aF zW|yzyvAu3!odedeSwip(%FLWWt&`yfl|*}PHNc_J{SK`l;+~zH7_tQ=tAnm}9+gyx z`ySm;F8a>Cn@7;j5+-lKdgpt$4G-x`qLmEw$3pneU@pXl0vYmV$T@D(-Tuhi-W?nWyNw zV|uZf4~tV<=!pg1l72F`02-n!&-rQpzSX6{t2e3Z;=+9YTC$M9oLfMwzGlphS0>J} z;A56!IKw~}=@KZ>3#$$YcpR}K8syp;BevW9%c8ANh7)l*%_ToN#SmshMz-VRChtUB zc6_u)g+b4Su}}}fE9rtAaMj~1eu2}32zxu8;32^VF$CJltj}}^)^C^Q(TqQsI)Src zdts;Jv^D|j=WF2m)t!Jx7@7awW0JKP~jjgR3Faa ze2&a~@2${x!MuK)X4OkLQJVWqn*7wV?OlgY!_2~Cq!0P3YP9!WzQwP*mD$~itnCks zm9!kdyJj`iNu%H+-Asp2`0TeHU)RRn>uE%F&yiVSfEWq`3BwfzPEK-2HbD?bM3VS9 z!|9K(qF}e3A2qUO$J8Y0mqbwwto*#4+&#eS4HX}{b;+fX&Fuibb9~WpsR+l3S*T+$ zT#wy6(c+={JXo>glmfjL@ty2-`WMs4E1^qc|O#Vyp&5 za%1Ujc3hl+7;6s1XZ;8}5+TZrD!S5*zBcCC!gFfMOql3h%}Hbp4i58tzVRsy(zGkp zcd8`l%Np1tme%qF&C_}Yd5f3(tRzI1WsOmqK^!mxroMhwg}C~S5o@mH_0?`@^ww0Q zL3r)br~^I_Fck=4$!ZcC#+;>tpX#x*5V0PQIEEC+X5<`a-U+hG0=A;bjuWpDlK^+1 zse?>oNJldzX$ApN`$C$=Do%zeSS17Ja5aZvP)=Pf@FawTT{qu$kTkd*rWddMM0_Q7sRU zByEp8%z+*NF0U9hnEV2cpG)`@j4(7>21x2p}<(6c!}f1ZxD%kOyk&gT@S%QSW9@=)Qjbn+Y( zKMK?KxynIRbPPFrlNGbGM{rD=$(yMsjs{s%25VjTD7F8oHN{6tUrJHz?8c>yNqF+QAp5V@dLd*@5*ZjWTagXcu2hfR3d~_S zpcYF9fFb>K!aS~EM1yK}za4~S7FZFr&UJAMN-?y2^p5#{SnU+$KI~@jJ!AX-Gz|G? z=JhaoO)KrSt0!5ijRGy0JX=T~fYj0%{b^G(Lq?pG6QZ?dNYsXzhZU)?nV$P%*N3>L37PFo4Ehix!-cj4G}a`FU2!y zcp~e!JFS?t%Ty(m!yIb#iuv4&N+cXzrO=((pL1%kt_n zH_NTiZ*g;4jtk4mYX%Q9g!w-c3={r|Z>VI=E2m ztL}mup}#T_a^)%xuXpBlo~#RuGK_u=9Hjd+Mk(c@9z3OT2F^_xza)V)nhR#edq%~_ ztKqOO4zB3O2pyjx*M(lC$UO{1V*(Yb1uc2l-K55Ra_%ym4_gvHjhCI!-SIPir4r&%z(W*m32G!$|BeyDTT%qZ@jBY1Nw|qy;9K4V1CYU~$a|Mrzr3K>E3+R?|1`&pFk*&ICr2bF z4jec+2O+@m3FeafUfnuxqHGKYFMITvuT#Wex_NEC`>Z+N+0HZxNz!b?cxx}tT()da zSJiqR5P4sbA!C91~hQv(lDa=Uue>Nr#L@8lrOC z(NF^u<|(f#mbQFk+QZP*yp7JSR^&VPNRE);7e@;{pX60?NIf*gt@YJ@=mRV$z~s_G zEAyc|Vbl{bwHahu=g=V)R)p?t=eHh|Lnk!rM&p+D6u6(EBq7veJtsx88zYq-ggTn# z!30%muhgGYv97Fqhwx++7X_Xgq}A7GAy$NDzi_Pef0u2JT;7#azE;XoqJiQp{8-@q zhAZ+-KrrV?XyXf%mY&c`{wNMLL$J%(S?jxpF8541U$|BXS2oja!sy|QoE6fROC&^J z`?<*RG314AAAQEKHyyW3BoB;iSba0e#S`P7oql@gaCzjucb)n9f6wUeW^q4|>SQc) zET<}aN5*~*p;3q(hV+z7Kt2*+yhCS4_l>w^hd<={FFtkr{dAyax_{Sjz0AqCzn+Up z615Zg1^>lsXXKE(6KhaAkj#jDzSI+is$1p2+x`Y!g}JjhMjiiW$A98v^DHGtdX2Gr z9oW}B=A8Erk02p~F#UvNnK5Q9_c^Ey|5c=(&x!n!X#cnP$|xMC@_F;rjBkIg*t5Vr z%3g~J8fwlm?yfC(rvFjizUMTBSw`I2Uj3a(J5P2AQuJ2BhX(#rq&?n>0_cIe-ejeGUj1+c0|N?< zFyww?4rj@omsX2L-xo|_q1~7=xn`llt`FS+IR4-gFps1hkIC-xZxnoT1zpPbMyhye8%c_msia{IqVBe^>Pw1K={ls!U6*)Fy;!C+uiwTW_CuJiFViL5=0`n3vZ>$ORo1&I9N?L$)QG0 zs2HY&1?FYHU6fC`fU4E%X~8=wev%QcflbrDytMS!gl4i5oU1)7+}^Dl3^C+ai01-H z{OO+F`kv~q)atdxI1)T*;UcKfee75`70rJ4HI44rniInt_X!kh*2NT%qSCvRDEHby zU*0G_KU6z3O^B?ikaKTV2X>-CMBuAV(4H-EQr&pCm z!qMCf+*^)!Ykz@>ba}HlZ#XJiJNvP%hz`)HP}n$i;zN1To32*+0^-%@>g zoWf*7Oz#}A&%wt@lwX7@+!LWlP=4U-3xmPPZF=K`E@fj=p50h~Oj%%t?lFsg zgX(_!vBhL>Apg!o!z2UD42DAa0KOK>O*FT^e57YI2%yubU@)_D3oy6S&Ov?@-{*mn8nVtAX*VfSQz;qWl7IgTG~b7x*~z7ogR#KX$3L8FfBgA zev@sm5c3C0Lc`yI@C9{~G;4k(h{^J7LBftXYQgvI`GpAay9(Fw8w1aX&Lipcaivpe zU%9mhw_P+$)gP&`0y^hPismS!*=MERZ;$Am;xtzycDugmk{>XQ4Mr1zT8F6Cp+xLmr0C)~ z*MuPxI*#Q!!8X4%TL%Pw@jDM__rpk#KY#>f zYv>DN8Sx_pH4v0z1Fpi@{NnYu*W9fx3rEQ7QE+Xn(b2sQ?x;dyM+~UBMYisjTz>wI z_i%7N{#8+Q&pv~!!bl=|U8l5KTabkl&~Th4G^_A_2IG?QK03c( zcN3a0 zciKz}5JyxWDP9)_IS6|Q!emZHrk*0fONB4~_2FcM!yLhjQ#|nGIWkDIpn(w> z{ZSp}n)=-2(l9i~c^XKS!nx(D^$WpteC4|<_*sA0gfM!@wD97YdMX&EzEr$p#LLYI zKVqjp`4o;2DdIUuQ82hk%&y+4=mPX=ilTk{AC>thOaC>{)@qf z)yFPEbBA6?JY%gey1vr8_nV_N23EQMFn{v__1D-1YTkA+v#o#DBqIS4bdw4EJhXAx7lQI+r zJ7HH#_$!Uw329_5at)V_>eQ=r4~N~J&R45ttEbu0S+SUB5Z-;-*Ih%y3^2n8RzZdU z0sv(Z5>ctyW*)vlbE4$d1Bj+o=w7a^%e z<;drhBoC_qaV*JKs0~3U>NtWMI&@NoE#)ZcZDWo@!(`>IuQqloww-^%sp@BU@^G0F z$3}L_Q`Mn%>HRU5akI0SA6erGw;B`8zifXGe#JnERYyy!yg1QWujarD?s@ZG?cSM~ zS7;aCpp13Po+W+NK@g|%6K#bHLMr|gRce_{1%->645yC2u0Hd|l>K zub)NeWCYd`;V=A$^jg1buRcWOrhXpSAa1AL1hW{(H=7yvGbdw;3nps0NZo|Cq?V;r zYV+&Pkl?E`PYB&gcn`Xsgl& z|Br&=ZM4$v_HHnt>)TJ%Mk1&oUiz#Hflr z_|>sa66BMEpQbS}oYydQ9+K=cbUi&sdqGVlk#`s`!S${yOjzI}RqL!=Cke*`fg0T6 zG$Eo~KH&`!(i2+m-|7!8oyxTdpPvlBvOOeXh8kDVRZ#3OiN_8!a@B-kbxcW2^~94( zSx&LNgbO=1e>mDmx|^M8#bY`K;+lSx%;nDw>}3b+GZ~~=fQc$bL_}~xXiSNe@bJKg zhC+B@GbG~okNF~YxGmA{d3hUtiSFh4orN)HYNVO{9Ow{*Jx@W^wz;%cGw}p5aov%C z*AM}2nYW)m%=8_$+u_?%Y=oyc6S0sIqoGRpJZ%S&X_(ZvC@1<2f%CX&#)eY08A2)N zJV&nlTI+OXtqDQEsQ`2$2SS5MQEZk~zpnr@FbN4h;l+r~zHNz>^rKS9BKSgs3bGJ`Cy zqn6ZmIsU62M~#H~&j(c=KplrH+m!u1!;nSPTx1+-M5oxAaCu9pLoZ}YGbMvo&`k>1+u1|UTRD||c{;OW4*)dEQ(8MP7htObD`UZ^RVRtA% zy8YFJq#NPLp_@zvOUTpm&{*n$Oq>t8N6RNh<>+2 zU5kfb0B8p@g&Cqrs{7L5tP8TvnX9;$W&VR1{lJoge1^D}?FhYNXlMv+5e7JDII#;0 zo&Oi#)0~3Y3txWYBiEH7KTX!Cndh9TKxFs*XxyL`%%alH?JJ<%5x)Fs4zkE*D1{8XJ4R5Pzb$1 zcAV4>nK2|C{88q+@UF@>X6YlIUSVxF{Nbcl+zb6P9ZnIZ@$dKT@_Fx$tBL$dPdlb21~ zO&VeG4~M@7AN45x0VnqO^F!moM0DmmM2Uo&jYbmo!%|`T4rhiEX!|F5WVgJi6LH=h zhqK275n?WWej%Uwoe>nmO#5r={@xa8ryQZTXp`PCsl+;^ESO$d>8P5zC|THl4Omr5 z+dG_@&V;j;IKPp;BAM**uqC8EM`c-2A6{@VD|&J08OQPtMl~*~_hbD{K$|R|?o7cb z#)B*o(D$JE##6f1)tWO{C@tfRcten0Ho-`U>kJUm%j&>hiJC$CNl52oW#SYB-WxF_ z_E!4?vD=5di;Hi}E3qf)#sWah+paZ&mOF$`*9#yl-wr^*`5iRs$SIm#_wkBJ!{(ie z6D>?Q;T13P@nn4GJcUZKiCiSXy`%D@c{V=PN!=JT$k_~MjB(L}{|uhkS+ziw$Gs3! zN84eIh5oj$Ds2s#mwH^`yw6J8=n7u!13mtXlisT=3$NK=C5N$TNDq1GcfSt_*V1}X`cr@c7 zC?hBBa7!1~d}j~2s?TYobU%qizeZ_4wxm*Olnbp8Upe89IpS+kvmz$aT@GL zc9~3QMJeXs|7RzzS(ULyF1qcU>j8P27Ln>0e^nn~lia0c2cPP4%vvTBUd_LhV@hmr zSe+mS^-I$InW=}ualCP_JAcyN!a*?Clz6Z#C?g#{Ct^*()1d#VX_$H=YeE-xn({=d?@%0CvfhsIQOnqN?^3)*imf(I>@WOY zP%q=jU~yQW1>No5AHF|6Le;IS1`qbLkJjGo=EoT7U#Ze%dfpx1kB!ukJPlnyRuj}r zSqQ&Sqq{hc+rv%le?8?6@>?LU$k^r~&oWhG=o>aHco3g4>o52xnRc@BN8cAc`&{gN zpZK(DfW*LaxsDy289c!AAp??PtT=y@lhS)t(&M}g*sKzG1 zb_GX_Ri|x&vr+RLsA?U7C9ZahGviB{NE$33mWX$XG{S;2Id^<+4VwBX+Ef^57*G~k zLR-`k(*LhQHD=cbo`yb(E}rY#MMX^SXDnFlTuVLXzDbJV$1@LO$!nVO zgU$1c@uGe-cJ`*IA+L;vh+|S%-g850Y{vBuhKc^Lil{?V#m~1j$bh`7y9~wMRZ7e!J6$Y2VA5I8mCok-KODcZI!I01Vc69fP>M z_{$ikb2E^s!yoU(PH?UfJ&=!*DP_qA0Mrml4L}eX;DAVYVdgzBbAj~2aBhmE4p*#rq%yUu^CarZTP}AY|5pgUc)x;Q5-oA8?Nool4S{g^l;@-y;n6Y z?JtjZ*=)x@G|Pvijf;cw^{R=cpycY(!+IqW?6O_nd*m0%hGE#~ad!b)CyO?Jg74Jd}M7a4u zaAF~~tX5_oEsZm9z*-(EI&`lPZu{V`#-Wg__(NNtKc&{){_oNXTcdM@g3Sedf~$gH z!Ef5Q13{o2bGpped>C;Q37rFhLk&7pFhmaGss&$o*En5$eufEy7O+-jq#_KXQEHP( zDns13prGl{ogPRC@A) z_5T8oM!}ezUBE#Mpy~;CtS}VkRtpVXQwI#di@@nlpc)+s1aNV|FI1Fv2+dh1fYns_ zUJ<*bjB3|hN9}*$B`m!W?5P!!abZ40d*p{4_`Pk1{u-_~qrH$F8@8*%FDj4}wxL>O zXO&1+3-e|8JMJ$t2_1v5zXMYRq3?djZ5lN`D+V>%u$Q)Oxu6iO3w$JT(YFy|oyer> z@KsO26mVY$Sz6y1GB^_Ze1VzY`Stz}7?&~^I-Ud5JrSVb`9f; zBH4YXZfS#iQpt2+R)|`W;&#wdEy(cg?l*Oly(80oHSkQ}f?e;^g*`XvFH7)Ktw><%O!i!N6vZ@Npy3qzZ_v4zv? z&>stdww-07Qi=)^4lDhBILa)m43!FnMp(%-C<6CO&VEELgA3JfvCt9m%}nwL5)aRQ zp~tQFwmlDsvqVPFzW*a>+TG>;J%M6l6q%Wrm2;2-4jefYpoQ3W(0@DK>R$;(%P+*p zJ#s<3^ONsHq~A6#@Y$P}JmKFity&`K20%M~3Qy~}ALKg7Q$rGhAV`U^b*aNXBF4ywLW z==XWmR-XbXiT^r6HsjnT*=wF8XaW{-QUUlSX+PPBt<299{~|zj7<{$kywazSK#xga z`P<)SrG|Nj1BDaq@cb*HjqIRUKT1aWEDD6_pXNhl2E1)043Ys8jIm8-4;aB`G_fM5 z7!Ziz_Ix#BNIo+Jz8n7WJR*terJPlnxHb8lO8-e=8Pa+YURCRvdw!cCA%CypGS!%F zx35C)9}i0nMCM)%Ubg?($SSYH4&jDCwu6&`QGQeV0?oN~I;Mx@)CrxJy36Xqqv?X1 zyoggX@Vw~Zy)PDyvQ7R}ym~mhI9)Whfb57T2Bymoz(by5aMpvWbA}SS13?i$6eP?v!Fxb;qtD5_Ztk z?bZI!=r%Jl%8zi|5$OiHhOcln=NFwi*4!!FBl$e-XOSeM_EV;pSp*b`su{KZM&J zS_oZJW6mhbM^6y}*VxSBVz!p&hSB00qyD27^lE*X3Z z{`M2U;i3H&Z(-cJzjPKKBwx<8(U(*iRxTIf{H6&LG8s#a%Oh*nq`zt}+bhStG-qYX zDvL2Hqhy`@d#5OXp&gfD(`!v0v3EaCbQIn;O-%6&g+BC*84QrgnItgDm>DlPWu44Y zj9i(&%=+h>cvwNREhJYTgP10jt={2!N>we)v(p;|DGoQ79c;>URQ~ zNb4^8hBO*m`we8ZNRjjxf0Un-aeDWzA+Trss|J%FoIsjws>(!a;1mY_rG48-_Yc>! z&MocS95B#);xAr#GgV{+sKfeT=Bf>^@Zl^6JjP+>l_4THfhqJ`>c&qA5Zh!uIMSg9 zJGCR$JNUkZ0Vi-zRV99`A3TVKO=D8IqMY?qdmJSWOVEO9e~gwfGQ?)*ASkkb$~~n~ zB8@6^a^LaBX3akPws9&)gUKZiz;8hLC9omd=v;^Z;Oh{F*VGxMEzHIU8+TyCF;cL| z-l=;lm~~Ml;DP&Ba}-PxJXtkh%Eg6%Jo#NnO)}rpha@kgW11)2 zaWGLoE~DwklLj-<0^8_!rla?PgElN5F2pq`r zfQ#DSlUSbQd_F%hUX$S0Yrel1$v=KP~= zj)l`M-n3y#k{hBJF`ovtKMSyd2eCIW2}f@_>#xrc9+Si7(I(;O^gaaV-gV|RP$}j^ zLl4Ol=K0Abm`RVXNDvdxmfSz};k>h*FHn(%NgaHtv~loNzr(Cr4nN07Q1bGpS!gEh zH2keDNlB9L24M1NQj4RvqEPrd{c2Qmz5s~kc@oBk`PY1N$a8+6qr1w94nN&-drEg} z9)#Gmh?SqApAMhOSz_(LcdFACxe!j6xG?w1RXa76NQ7VJbZcLq2c`{wg_!+An@4N{UM6OXl@|Fr-^3}9j>-@eI zzVWkJJ5S5rD3&0w@)`aMVuW0ay1%B>8q;7lvq#~a^h8}BhOlVL!i$jcP?WqP>w(6L zn14IaIt(076r(R(ekYwKQ0bPF#{t$_zKSP3$%s~d9(Z3}50dC=g2IyKp+qqBss_*? z^QISJ@0yZA{PcfnE$;QA&_(}qMvjZE??ib%Yn`rma0%h(43iCk_dibsU;N42=-YS@ z6WWr=z$~LJ$rp$FDo%-j!53a8ph|{LSUwql0U529 z>X>U5u@HL0!%V8RJerkDMlMc@_na-J;SLWov>5jr^{&^uN`vuWbE$0;&@GloV~=GKDBN0$=zKM9as z+U}@_f=2QHO+d20{vN}=jpKX|KZAu{u`h^|#2q}Hrs=^q<$0~Ch_EZk)|jwIqzrN6 zW3{YUTnd%l@oV8nT?z>2N1kJQ9wLv4i`gq|4426I3re?hp^e4R{mNOB_q_)7q=bSa z8o(|3IS(_o+g-+3l(6jpC7*P;oWm>~r;F`>waEM*&NknFl}#W6Se$%$KEwB=PoT9gBttwZyc%pY(pNE|g%S zzFUWRp%zKM&%TGqxATbdu^PBHN;aEH>Xm^s#Wr%0i8xbQ@|!JTJT;4NvFjQE&KXcI z=56eI)7k|DL=|znidHF-isGKy_A{ zsR;niE75-J%lUk|NUQU=8sGyy9Y35+V$%;kmhFmPr^F*lIdkKCGv8&~iyhT4fQak2 z!f!aF_Ked6rFiBsUk?amJ24PV>P9`e1mxJ35!B*c81a=4PLD*iXiTRsSYJ%mG4Akf zLUdaY<^p$bB)ON?5Ar2rt=h}34l;k?Dw-FHf_7zl5e{zN>N6b4q6%?M&YlP|y{eaK*2}IBqpz<4XAz4Ye@5{W8vb z()fP!FxhYqp5{KOl1H@Sy=35k#(@aT^4BnAyuAx)fq>Pxn{^%*&^Z#Xh~kn4qfc@mg1ZVrTzNZ&xBgZr+zIAwfJcjCsL z(4-y1YQz#?!ecs9dA48-%)VXWsQepnAt0)oG133-;zQI}p=Aycp~mCx5&t&M@K@2} zCar5I(?YS9!ixU0w;&&al5(hGA(}x-X5%Af$(UCb5;`s>M>n!4=e>!oZh(0OMdF*H z+R=t8$dQFE;dslkem{H2|KZg_L( zEh;R=wXw<|)R<)lXB2F(^ik4Pqi0=f-X?t0kmXxNCYCWGX)BAZilw!-dG81^-0Ksy zC{Vs(4f4h?q2d{fQ5tEJ`ATS=w&fpFjFcZH&evRzHWo+j{n)X*-2IB!5z*{AQzeW; zwJ{5$Q3+;YVmV`k^BbN%=QHGSxpn@7YHJ@H^XjJ$YQN{Z)Ic)UTiFm0NSV|&RDyD9 zG(q(@e9RQ43iU@e(2q1C)~rx@Nd5xMtR(*}pjGi}j9b4mTLPyT6|1{3(-?F;T#WPy zaTqpfV~302^f^~)Hs@JKK2AHmk#GX)b{}tmy(_#K5Sx#vmXWZ+dS%4I%3?}m$`XCY!rYvL_nXr+C1=HhKcXwd!Bk0+>oBBq>8rAhf- zy4~#kSjo|;yYgY<>71}6Y+Z4Nl5%f1A@B6qJ@a>^4IF^DG?Ovz8F?OBixBp{qmQJB`<;^w=LUb39gbcye)raTRocD3Qe5riff9sm#ofRGYPq!;iLdOwYc(?8DT&+$}#o%xO+ ztFdG-`7X4WO)a{Y7p5_W5po82V~K(zx=VttecNQ(I(>UvVvU?N<)}-8QQ~6N8{Byt znM{<9UB?laD`kHT2W@)V@_=9|mj!tLI_RkeX1`Rcbk2CY+;s`>w#F7>R{$UmX}V3I z@Be|$tjfLU%!BE8K(Oj;F+@cSVN$)?@Wxy#J>(&uBq^c3C7&1%@x||;H($B;eUv%I zqKGtWbiaAZZ2aoc|8dYNe89o7RO;L%6i5_WnqY3B@K%?HE7lC@M$#sOvP)jU63^+3 zOhW`9sPDC&_00rOC&(x6a>(L^k|LzDv99|iEqto1WX@6ER^qkV+|ws^;h|9JBGcCg zWmSt3sy*!fYO>8;sR1g&F0s&C6M`bOjsMOc(W04$U%f79%lnILvmAcS^TD|9Xx^x) z^^vk%C9I;%fply5REm+hghb4<)wO#);q79~sC(~+%Kv|GD>I+L#*&Hr@r-Vlu2!f~ zW;wW+mJa7Z$Kp;g8E=^GK-lFRsO zyKm0BIZ7laO8WPk%_`)h#T@1b(5{-i9N!bVVCjG{UR~xBGBFX?_M6yQj;$S1@pI6G zEE3*Q;FI>Y1wM7LRFvGjyHzu?fDU!tX;u!_=^ifrG(Q-b zLBplQ^vh0u#CWzQ^ZGQMIAu^myt2@R(!4&rMmEs&SmMu}mv7XM;AWRbN*t~ zu>E5cb$L;!FIlK3cv=D*z9@~S2sQKkq`Wl-y>>x%UWcS7I|&LciN^fs+K=ap`cffw zIy852p&TB{33sWHiB=IG4w-XzxUxRJB1M&(jyc4CB6AxR_xwps7sVq`Df*3VJ#e2{ z=eB6b+*wSD4&EPH+W=rp_&db`O| zHw!jGT-{KQbVzL@t{dn#f$?FO&pBVA8gJM2!_kbjc-GbZ@8i&oJ30>D$^W|d%;w4T z2Zxc*W6orp$P*w;m|^2n`TnD>#RLaYf}0gQMl54(HZI0mLT;T7~#SqK6e2l)#Vf+gIS}ITBtko!{Bv|8I1X*WmYE z4b!1E8V^1s?D;LiTf z*#nz17hp!R<}FFpIkr*LxxD#y{&V-bZ?}j(&9o(^pQ*`h?B4yqmvr)KuP$>O&|qc( zFyF|-m>6K%#%L$%WQ|sD5BBoA8Vdj4%dnf1E^(qAG8O$JcJ34&XC3yj$e))4Y@peYGFpnfQhXCjqzsZyuj|LoK`D(wkEQg1p;BGup zcX)1(ZEOJ-06(2uHt2<#=SCVXHi&dK{m49G`*bSpev9sSt>KJ?t(VMs{QdYA=(RJt zMM3<#?ugY6=$D$E1x>EK9X~&=>%EtepmZ|?u#3TS8s!B!0Xm*6aN@jyR%ATc7>6`B z@yZP;4Xz{kepIeF>b`6~##N|=Y7o8wu%p%TS;--*?62DbszVxJu?)d!_{IWmOxS+J z;x%YJC=n+#(FD(dgWs4H0d43~wmI4CT<$Z6(1X*T4Mf22ESNGXV92^bV-COVj&H~D z^M!$^BPIvm=8ugSfTN;HvHL_+f-U`BK(3GFdifz?F)l*PGGeh(L%KMgk>&P0Dr{xzg z*YiCKaEmh`EGWa6(T;gD!^geU!*+ZV2*YW8wp#^nalPK)kQZSr%e&xN_KQrw&_(ghoPGKPU}Sn(-sO|9*>SQ|J9Z z8oOhL9&&WcT||$?xLgX5?zkEx#1~jygjhQTt#(r8U&%hxQ4;r?-vHsrRgNw1G30QM z>9HT@Qfu_l@0xiPe%S91aF}z1}N>k%3L!jR~x)-R?0P3OA2AorBY*I9+K?)xXAc zZGV$7G3^6kQvnZq2C|eK*t3Ttprv)BcbZ=j+vB3 zA3A$fDEG&d*X^dI%Wv5ZZugLXab<20r^H=awz!7}8SJ48;-|Xtf4MW6qM03=3rf5a zy+Sv3{>l(&wT+)h+U6*z3X^gM_KwE&9^pY7?N?O<{o2_uU|jR8#oF_ByTOoVc}vXa zoBD450d3^SJv-2*>6z|4;NZOrt8o8S+(=F2Mj(jnu7$zkvasRNi%vl9lGN`gF%LRp ziR}?bVI*P%GuE_rJ%C{Tu^uYts$kI^xkyr+ui;zljd5SwT&>*zb_oQXYi6o9is%ol zSxv}}@58a(mjHlW+h0D%U>uGs?klW{0Kx&l%+}J$DZS>*YrEO)eV7g<0?M zU4~R%%NG&jCyTI}KWk2_*ZDpg9is$n-%P&%=Jab$@zani2#$5<5BiOYUaxLbq99W{rc5rje_$>t z=a@EF=*_EKz9MXrT6Tf7KvzDFx9NzN+iMAJch_AVtKfRJ_h$8f`ILQWOAz4hlVh3; ze#$wXOyBxrI?^5Ty*6xpYxc*Kcwzni9Z=m2m|>U%%-ae)8vbDRh5-1=&=Emor8{Ka zR)EAh@c#xn>B#yw)*wXo_um=h{5%|Ua8JD0zN`R z{*uePaZf6G+0Vc9ZQ&J`?16k*Z$DKbI)LB6sC(o}WG*c1^~E-y_xmOK4illc9+mPH zXx2F>5`xrPkzAA#&rsuBHuXIsut8}o@3Jbl_8T8B1iq&fX5NM9I;4Lt^WDb9QOfT|`ikClI*uc)nG!tUkU)Uon`r)^OWFOR zgXT7Dp77yI5v~TjH_F%E0;cHhCWkN9a&J>X-k+I=$IH9J&=-xr0qU%u@;T@;XO{{% z?~H=jnIsIr$Z~)^|2$Ir1*huU(*7%f*uwictVjuY*B%gFo3-|Ml$5pGDcESkd^Np> z@3A&PUq5!nnC0TyVC3u~kre=(s40XS6urGR?+-`4rW+oOjuj1e&|wYnEg+A6+5#)1 ziG#!A)e3OKge0=Y&xD#Szx%ZBs2R&q(JDeKzQUamX5;swU9=v{n$BomhRe(WlWu;l)U7IE#3?J$nq2~2d?Jc@Ya)6GvS-i2$P znq#wo?vi?~Hhi#-;u!O@Z}|pL*PG^8>J>>5jJxRzVP5=ejz&{n(a{SOS^6-x`L|GP z;S>~f*cmEJ*U*W_I^-H1=lP@3+uh%SlFqq7s3wqU&^`u1hj&P?)IG2DT_Xk`#0=8+ zxQnxVma|M}3ew1}*n6l8s6*=IL2t&{>owlbs6H&lEd%M0OtjvqusX@&t&98*G9);0 zvH<jCI&=TO$KTVri|A>itWc4I34cYBYdUI~n< z-v1oDbQG7#c5k+fB^o(+72a0wlVGRHMz8nNkk3+trhPisAm*Rt_OXq`lfe5!HcOI} z9Zo3wgL2LlAdxsa@~>QkBmF&IXRP!f^^CdAwq?IDu4^W}w2Xmg0eJi#li@*SDPOA5 zC*q8p)4(=QrX>ncC}$kqUUC1MqB#p~8UMspBQ3K=$h$KAh7GCGVaP)a&<74?L(UCJ z#noK&ofiII*9{RElKy49d`<&5b~!uV<}=W88=`!Gu~c5t*J`8@5dcI0BBqPLs!D<; zK?`Nl&upHOlhb;Y;a_ZE8kUeFJ7^vBER`qdfsb*PFogk9Khx!evr%Bqkd#gop2h1^Tq6w1=E`NRAk ze>{VMO?KmJ@4Py_9rO;=8)T(Aw~`v8f+G1b`@zCkW9l>meSxC7A5=mB$bN%i%e&4? zuzhVAVWsNYG`y$7t;S9^|B@Tgy22qOAV9^1Hj7c>lc7`$Osq0jSo#m-17xuNYW9aamk2wCc!a24O& zKX-QVp+MMwv;T&lDT~{ekbDQsk7SQ=htf~j|B+;`2QF2n(Hq0-t?ug1qUc@iEDdl~ zRav3ww9<8XG#Q+2X3kAKiN;(J?a0m^hy*T1hT3u%J~fg?~25AN%E z)VdFkF)ON=78p2=pUZywhdqM$-36n5+sgMt&AU`^c-&C8*f#+r(=J6YK?rckk{XvM zW2f0R^Lkyy60%oMA;*kD6d4%2H?J)USTm--sC!#q2sF805SEyFh6Bqgr1}1SIc(`& zAMom~`~knv{m+7RXsa2u+7Z9w=2CC+-0Xk3$LBD|!)SokQ=a^7d71{EC*Bc*sCP`) znQ%I?qBFbY5$~dzoHv9%p@V^2U|JYdU2^hXl%(44*4(WFMhQbJoLJI0EE^}N@z&!! z@;63|6K=lSAtyXT-I4IkDE%FmX?bUUB|xHj?hVubzUVBM$dHB|9KVghe7`~Q1>_nA zgnmIFc%`C9GvI`*`5b}7bX2kZeKFWkZG#(SYoD*o^6Dnmcp6CM%z*zMV0+9G!=T<2 z?xq1jDFj{b)%4rc)-BIgbrH^EN3VE1C|AqgE_l&q$lXphRRa|Rgp)Ivi>_Jc!y}e8 z!ad!-`E&jT`nZ(s{06CExfrb#<*l>%a6?bm>SChp_`dzArqON$0zpEk$~#x{qcEX` z7BUo#0_!9lEytc`L6nMTexz8vEPL~U?r!g-;^j|0ZW*r0!`8PE*zFX44aJm^2vP6F5PqPnLn>}U@lMFD!B!(Dghj5%syhB6L`I*|*blpu( ze%Nk}tMZ)Zb-gP*eX~oYC{(Ao<=^rn1ElRmfqG2EoR2!R^)RSFUl;we!9SN3`hT)j zO1f35KpxSk>BR#Mpi;5xQsf+y(6>_ez54+AJzm2(L0RvEN(lfT#GK7^C)?$b*`}wbCgQap0T#6L+K^QUw zi)CMtS@!KWU;aUa189Mqu|hKS)l@r@^UdOKedDzA{Od~ucFekakLavp?KW6&QYu8_~?(r`Kx3M0D*L(W-<$-0!WOoUJ5{)I(ec8R%5R-Hlj7U{X`4)U87c0o|Ui{py8yVQTee#f6T9@D+?~G>U z^y^zA#=t*l$-3|P{>zExOA;;);lSDB*?;0wtrK0Yir<2;^R#`&?Gt~=n7%_Id*zqL zzh2yku6IkK4e0nD<*|RF3>yz@FxE~}fdT8Z!LXw&8f7WLIIRR5AHm)COD<#orl|qI z5QXes#5&ysvyv9%t@kD8j5QnYZlN+HW03Klag8|ndvd!l1dR2trxb?&V;g!<5WKl%w9$Zp0Y|83L&c^!N4-5*8yHI_n1>cdU)Pn{|oYk}j-@ zjBm3LUhr~`S>z*aDaFnNt)cT#)3h#kz1RK!pf5H1%f&b`^u|kL!(32tmawE+qs% z+yrxBaJsHrF}IU@@-Ojq7O}j6w?*s5 z!bbh`3S35+_lzv`9a*w{gkDAng`^#(Y&Kj7%yk|O8{rV(Fq#OY!=93Y>o9Mk{^R~T z4d9fle5Lh-Fsbyg%op8bXd`+wi%W%wzC!AwR0~T2p4K$AtWqbaOx^{v4x1`w?W3sk z0-k5Q;n_Wn_G^zy|9zIKID2m~o`Ria_gU=!oEEYQbvC;mhUvI_v;BYUiBT3Bk;Ae2 z4s_1EIw+7FK;1qLLC)N?G|s53sRV|$cC=R3eBK#AJz;X2^j7OL5BQ@ypq>j43JBXs zc8rAvc(NvG&bUMo#&gA+`EY8aq19*mr#$KvtajxiW!)9OVE=C9ajLSV#b|vc6ZDUL zl${7+CCfRJ9>V%r$|No71ve|myk;&NfQB>WWQBH%ODe;{6F8Q5c{9Tfp0SXCS2Mhw zYC4O>7y&e`*4$D`9|T@1NXkfmhA3S*EJG~%kAQfXqv?h;b@M)lim0ES{A*oh&lZ4I z3@$C+yn-gk{dGr6)-&OC`~rJr(ppG)m&Fj2ry6jBuO|X1Aj0=1I&4mRB$=HD9?)gY z53v6@CG|r_PWJdZ{FBqj_A;UjSR!Tnyy8n12RhJNg93j9O&c0TqCtg-mFQ*l4* zcl214sZKT6oI>&QMI&I}l%C$sxsp22DrKU0d{&N`baI6t%K(8<0p`OKJ|D4~d9N&3 z#7%nRN&Dl(8fmk3S#s?zay{f?RM3Nct;#n>0+z$m8Bg9!QOz+4v(9{#aC7%v?Hmj+ z`WG#1D%e8`EU%y#lwR{XRN!jLzvnY|2Wx7U9l^JbV#%M<7HJ=RHDL_(C5eB|9)=07 zNO4-+VOGW@FmP%fx=>6j0jO`Qf>3zd2dyOnKx0nUIt?kt ztH~Jtjw>Z{OdUd0D(7yfAgr_4 z7a}e?hF;Hv>}HuVsuWR=L%4n_+^wz(9LiYXU&FZSP@7FXe6YbPUlOp*Y!j#D*Nw&Z zsjb5w1 zb7b5UT2qS|@ST5Sv*W$U`y7C#XECT!1l;@}<(x#46E+#7YdnAtlZ-1owu z&*7z~tYlb`|GeH_@y#mk8{kunYGO5j zOEDgC$#R%}9AvFL2AxwN`E>pJFph=CTkAVnK-_c)(3 z%|SSSyn+rPL%m~om*veFW})uULs#fzh4O!jy{4Rx)4yyRgDIDyU+6JpUg15xLIZNkksp_UU)MD;iHm!Xupa-{q& zieGKfac{976-~=B=co@RWUp85+&uNQ0tbMaF|(i*#nHs~kb%|O_+c>$uWIRz4BOPs zEMS;lR}I=8xCs{IDcHN6sQj8PXi}9%5BZzxBmohJ#MHg%OdpxXg8-U9BUL7^iVWug z2D{@vxL6Gdg{xJ)Ua_il2em^UPsf=KRw%YK1;Ad`^|RniC`#tg(>(2mYRgh&#Hl;(JspOJ`{KI+rj( zjRR22Bj>pxW0^Q%lFs9?UmQ(aY02|^9rD&)W+Z*UULHW(Hk7%@VjSOZ5d{jdkDGoP&~4pI%ES={NHA zmAp2PbVMxfBQs;s5K1-~!UO_@?cizlXdd4<(|Mj7)x$NzeqglRGaUeJ-YmwK1WYu| zn2tSD!v!ty&R^GG7_d!===|PFM=&o z8NMeMBeQVg8;SnPhajv{v5Bu6o_;#l=kDf%Wd9kbY@55|851;9oF_tsi z`=p|zYIV*DeE%ic(aH?8a-V~!S9N#B1s$cZl6PuDVd1iJU)K&gV}!rZ{~2@kB|>_f z2k>9m6{04(XHW?8fnb<;I9CF$uN%+ykkcjIa?jfR>vZrs6)Kc&HNw6Yj(kgZ8h(#9 zw$q)w;d}nLjE)(D_fR=QKb2Xr<`AOuB}_I#bKYDU8-5})fl40!dH3nAR*U27UUy?q z9JkEdpdZD6=+%t5zI7&q5mMdGW|Id zv^Uq0GZ!3(;H%8Q3TZ8f@iR%vc=jFyH&>8yH=HEJOBRZi{Fr3c`p`x^JHKPvZAWdh zg1i-gq<;hNU@bmTe=C^979m?T1R*2@0}re~B7FPY9dYY3x*?q%U#=rHJ1!+oJHjZ% zm^j7bo|bmko!V=2qxI{RtTz5C(M!F46`B`g(K%Y%xi_Nmj7R0HjA4zNCUC=nIg^GG z7-5qpA!Izh;cdp)Z{NqBI;qe5qyEoEB21+4tM442LoD=X8l_>Y)e#H6@`aEl2zW~a;!x|%uzym|}05#rh} zZ+oC}X=1oAA)P*tZWltBPG*!kN`H+Y=AQ0_OQ|*;6o}SFx(gt}+VmPHf362epV^fA zObx#jOX7Fvl;SK2WxAmJyl=uue|%hr9LIqgRwK9@a5tOyD^Bs~g6UnkF?VDCV568& zfH4b2;B^xv#d<`doTp?ED-SEfYBpe?gvdc~+iF^#29toz)0RgfkG(xk(TJo}ZcCZL zqnZv~E71xLs77cwFen)*kYwHdo!2LzapnX#WFm1Ff{AZ9x10O5G1CnN%2_BPx)hjZ zQnZE^blS|?4h_lS@MSfbz;U>f507)9$v%V1*u9hCPBdD(lVm}A?1=DE3tDX$!z1G8 z@`KC#Z;Iwkp0w$hJKh|a69$3LbA8HxVN4vDDwr#XlK}?SMdwyQyuPeGdB3-}c<=u> zn(vfMvtXP$d|+_brT`uXmvxFBB7kJT{P&~^65Bg-VVm+0^0B&Yp-aRa?%i7LaBTZ- z!`x%x-=#|eFi-R{F*=$4)|0CWvHa0@jq;Sh3NO99%!`${WBVPLW~bta|Je2IAp*HJ zagEyWSjak>>^+psB_?tE7L{6RN`rHKHI{F#HogCW+8nsECY16K)d3ygJ~%hh?v-oS zZ1?wtC_kNA3QMYFPtc?1KF&UN<)sBBD7>Yet@dau`SkUruFDI7qp{!BR$QK}5W$+4 z)*n)pFTFBXmH>)h7>K|TygE{4n{BkQgG-9#T+B5G*28Yfwu`&wsm@l5emO)5-5N={ z*KANDNaV^T#E2)GR$y8TLRm*aM0oLSLOr!LLtAh!_gob865J8wIpV56z;bJ2d)YR0q#0Km(?#;_`F=1xDyLpVVhJa$&1W5aCnmjL`a zZ8jCVNA#rA+?70?ZL5*?&6B3`KdS*COY+5w^H88d)};AMAY9^KhAxWLnL$?pc=u!O&KJf7#V-z z!RuSjNKGj9AQPxCjR{$t(iy@7@c!o2*RUCNx?4!aSZGOJ&(T-HMwDh2+^9(+hZx>+ zu05QztXGRTvNvX&lvT4A)=w}G1@0V;GH`N{2IJQ>eZ8X_9!+nT%88mqfRJM2Y)p}- zK^83EVWaXDRs*M3EO?siyu}K}VW1L@&!gIpAW4X!vB_Usc*?D`^~xYRTl5zA640XR_{ZE+`Uh3EcgmW5?)Ujnf^qq=>yi zh6+3^qcgt4mAcjsn0co^hd#PMJj-)&)g}lkZDgGXB@kdd;TMjl@x=vhd2%yyWV%y4 zkTA7P;4AIPyME{pYKDhrM(%)8v*8K88E{Q&=^8`+7l8Ar2jNeWzc;x zMug%>aPugzH4kYMnG{4gE)0P;drBlidRO)r26Ascd=Z8kR$^g}l zfiYiJUV-jNBZ*XZy5ceMvIZOCP+nA)NK4lI`VdLuy-Yr>lFRTy=|Y}WUM0@8w&P4c z2(XePIKHWcG=Iy#X!@Et?*SI z5%vAPUqhah15G}+EQ9AYsU?7~q(C7+;KUV$B87>+b=O3GX9dx1KLfEqULT;#?C$&{ z;g8_1rgdI%=>r#3&s49nD-A@b-l&LL5P1lk&~1#?WXbCGW1yj@>yL8Kgw?+nu1}<0 zkPm8;OJAcluKH~r(YsG6%&cBTIT-aPgrb|p424Wpv04GvnGF}---*C#`KoQF^Zf(s z%{zwt_QZ64NF$S_L!;a}&7r{8;MiC;nFI_~Z)f>Mk&NNzTN-AE`@!6Q$n_pHe+7Xm zj!0JZccc#Rrto`HxO+Vk=6#B3q4GrIBa=p{|F1tWUY2;px=L;*9-`+RdInJ11=F`1 zie1HCFzq;fp7%ME#=M#OHk1u`dn*jDaw@&-GLdUlBk4w0?k|_KTE9i9dpQlCDRqw0 z=i~P|V+I;hq=a}A-)l||?gmYM@bb)sQlZRug{5QcxvZ?l!k;7EvMv0bnJ6B7B+z9h z?T<(-@jdpnH|vD!=H72pBdXio1~-2Laka@eoriMx%~^_S4hj?I;X4XHyz*5?bR%Mt z3pB{|8xS!0?>yRUHoqrU{x#=g@ImvSmouOy{SnX(G-{BHy)B2ApGC)}xkqrjAx+y7LfuBz z6x)bVcNjtgJ#d0`gK4QW##*+?&E(cXqIo(K?g(hMIhc~xBxRy3SGxB~efr4!m}*hH zf1|1NSZbqKIqP~fW$k#R`y~X)x08nmnRoP+u$!vtO72xtxAwb)U0x@`6rKwwPThuq zU$)lG)6U`~_4Ei?=6b%;3&AoLzNMu6p<0G@Q@e+yV{B4s8KB~43f6jm5E}WIZn&QF zT-4nML|5N8(BaE=PyXe8_!ik7&WRT(2xesOoPwz2q+j+x7G;+;z^{ zU}|WT&tAjG>K?0Y;o`VuuWSEy)l1NOEC+Ea)C$qXeF(nnM)l<3LSodTdya`TyIte& zIxF#eGkfTt}PiO>G$blje@I9qu4&W+?`sEMKr#;#C)!Tn>yGlkvx z=FC&o{z`WclfRh{Hgmh5CTdTNKe-4lNShMH>f%VR@xR;XbfgSb!#_*BOO+@0RoP;f zW#b=rwKoo~e`*~i`fY|F_mrn(i?Nr>u;s9sE*9^xSn+>0*mFkAG7@1#l;OkQj*lZ>(KmumbTO5;=h@mz~fJO;rlGdI>=iKJ(<61*{iIPCQ@&yXQ#|KOWZ%> z&v#5KE19yLJXKWwl+B%`LT-xs;_*Hq=O)wjc*V|VhripHXNsoK@BC*c+5OrpYn}&nYWU*tqUI>Kco~fl@W4! zG!&cOI!|r;8jbf?Yip^9ph9<-5Tf<{E8tD5^TDHR==W+H0Lj0Z6z9yQo%mZfBI{Pu zxkV=I6=RHB;&u;jI-h=1{&VVXt=EO4Lu>ZQ-&@_dHT}N&XHwr#|J`>+ zsI0Hslt6(vjJNq0=liM`LF4taOjp%+(DUH<8`f-kW6#x{oSo?Asp8f*~g0D2{ zan}5L8e-C<`Hqj=%EKLXHdWm7PZX?LYO$P~m6!F3uG#|(denxF7oR-;WsvTg^7Em_ z3Lfk?(!<_Lrs3oAYn+h_8|OsoOc!ixy?-^-+-UDBPzUZyiDO|>i&7Y+fcNgtyj*tj zefn^Jw=%;DVWSZv{<84IktmTOwBtba$82D)-_ib9TO8^C?oNAEJhq%eyIhn;<>pte zm(~3z$`zjcWVwGtm5_N*qp|+rTn&FZ8QrEce5Ju2`X?wUV9w{J#%2t;lt|y`q ze5z?2WBS!e^*Q+eH=iXM=PK_lh@Y&?Y4^BGZ<*bU{i%DB#kBJBmh%tu_l_}fmv&3Ji6V)Ds zKs;FH80ZK{>qBmB15>Xm5WdU%ETUK<2t8X7g>Y|eMLZr*{562LvPJO(l3gWO#-$#Dn5#0e_QK zehMw6h{pJV`;kRiDBo|vF#4*~cIQ?w&Z_74J9}I(WgSZ<7PcXbiWi_roSX!{5kcb&wr*k7Ti+wxjI^{lwN#mvlZz9!!HzUCcPKWJ}!zfe}c zYVD>kQ=bQag&nxbLAo+j5XZ6dUZ3KJU%sUv7@~XvXp)Pvf_c_m0nsIZwjx&71LMkEgxH`9s3~J-7N_ z$iu`Dt&Q1Qo+V6io2D?H2eo0B@p3p%GS2(FOyr7-k&QOr|$||CJ6mFU7Xq z;WW&wJCU|;C1diu!0iPT=ciS@&gp7jRUVT;QC(9^Z!f!^r3BYvIb7%p;j{$?*^^ob zU2P@J>O!^ucTn^fgi2iISUh6&KT0`#W9KMFe9!KUA|woYa7K(IcWYh`!sXj5LiJ}= z2xr+zAiX#J*p1HP$o&Vp=$=diW1T?Aq{F(z$t2-4Ef;`a9$$RaA9u@pahkPQ>k$5R zqwD-;W6ddz537`cB_0v`UgU7%(ZL>$Z)y9AYV<2aVhdU8#KkBLnoxX{dk(?mm1pi8 zwK9+~YSCouIq2KkY_LIKh95IX$_t76GA$yhl?*#q< z+QTOc#0e$0L&BK;r*8C8J72dPps1oZq2i6|EIb%!0^}xtaWYBcG!^b&?w1EY$z)S8 zd8A4dNG5^;Eue`}4mE{VVKDKwFbTj+Xt_YpgB5%=d1_fYVA#Hjgo@8ph{cM55i{iD z1NcSXV2E!v4t~xrGssdT6o`^}#+x$s0(qzgu^JBnz$DQ2Z3=KG@7PgppZ)WcOue{ zv!+bsD6$3dl{h!g~jam!(SFLQp%C{ybeYgX)nf;T92d@=r+8f}WpRv25I~`8442oXA`d9RgPt%6febSYhAPzP zt7}9th-a;3nwa_2tIPGLYX3uL_SE_Nm&YmmID{|QZnDFEu%nfv{xAdC$IW70Gf#~>751rv88z}9G-rbI_MOcFIsq$Cxbfg16`_T4`e^4ro9`Z$;*Q1#LoVAGgS601PKOdZ!gG!R0=9Y;KV%{MX4JV|C{58Vmx zE6$^S&qE*#I5g_yh4BmsJ~wZ+cwPsWCEO_!)xs6EL5*0R9}SxOmgcawExLC?k*A=# zjh5k_XVYM{UsngOKf;{xhdWy<)Pq`nZ&W5X*@xy~Tq|Z;l^hdCzl~Yub zsDMOVBPt*P0s!N)IsS^kTPPEolv~G7wd$)*b-qPPSZIDWLw&NtS@T#qz~;Gvir6C3 zbNPbJ<7%=)8Do-sX`JMVGD}a%94S$dml@|KOi7)_JiE6CyUu}zq+_=j4pfsz#AGS5 z2)fq)Ke7`0`o=*e`L?i_&IcCAEPjshqfigUo|O27F3)f+`mHAGDyygwW8!Mg)dpV2 zcH>xA=!DOi=%_8;^TB@-Ug43q}AQ@0=YWL#A5!`D2jaR8YTMi%&ukq7%R z%VR9Gi{aYU8=4gT?+H`q);E*wMjTT71OMlNepdGG+i~V63tuJnl5c*PpEf2zTOvN$ z62O#_f=alR2li(f;Hj@wLLp1lTa)=ve%gkT7`_m;CPxI4nWSGB_{+tE>QE15rvlkD z@?%g&-_MO9h3Psi+*01GoJxL(x3Brl{^bM0I^OKP8kAR<>}Hv(HdC7zPAM^nQgA?r zeGA&|+za5ryD(SsBpeGP0c1c-0N)4>&vCLcho-A{su4BVtl65dtUWaj4!($Jphc(D^JkoR#WuJjgMk z+-it1z`oWmUGTRc(+_{RVnM5mmVqq=Ne_>3hT?F@^vRmz2H|zZN zc}X!CHkpnO{!kC&k2N*J&}Bw~TBGDJO+w4*0<}RBhn7ueiafVIHH7|YdSyWTC()!7 zZ&Nv?C`5q)?(B8Vg6JuW{30tF+=+Q-UG_@T%T>M2%S838IA4rfjBeybQ!!^)y~?>G zEDr#BUI3{7imVu(-hA1nzSL)S2}L7JTMu2CFkEapAq0D*;xO<`Mihu|cWHz1m<5)W zgA)z&vERzf&3(OBZH)J}QeTbPyXRuCHB$O{Zx>5U{uh}muP_?h$>wE>b`mWf{qm0R z&x0u%49avSCNLem6=8PNqqY;n3H9jwu8yYA&0Ro6zU_8An4j_D8xd;*!HMFSdP7Xm zARIa)K?ezwzHK}y|ExRov>FT~3#TuY?Z7QKn-&m_NY`dVHV640ml8Pwiva{PntVCI z1v_wK#Iomb{{}NJ*B9)pjP|qWh(2*r{>7Fvc=4%KjSm{X0=MXV{?Qi zTZ4gkq;Z2K0EB;@74gf%^5GXE3WOavQq@YAOG$Gc+^wS@41K44F#~_P6g36=p4dRh z&x~41;em$*1V<__XE&}YaPFKWmYGbej|1X6Q6T$ zHbAkT+@Nv~w0;Do2Db*h+4(pm3%#KLeHwwD)gMiVt8;~s@_6@aWiAiT#mK$=>7C|T zYpk=3%*+fj7-1x32RVGxjy<|PrW~}$dG7?xc>D~m2;yu%m|IRNEZ@FD9j&!<0RWNe zj$}npKKa=l_U4KfKvws`SjGsaIX#kIhAc_r2M_E8~!Hn)_nO2-%x4sl# zs;7SJl7AB}WZD4InB8cck;KrTe0TY)FCk+Yn&jtt)^3wR`|losRh)Oy1Vt3>bFL>a z^K>1#4*<<3d#!d?y$^1^yN(RlwOUKRa18BV47u%Xd9E~4bCIVyGY zXVB3<2t1Sl@|cx5zqJ*yN8C@uHnu-j2GYsRybtd;TG$9Q!$o< zmK5w3WMe+GQXQ~=ln_)j8`vL6-;VSVIPJ6J!bYp?N8_`Y(&jqe+S&w`=>=~QJghW_ zcbFP796b_ujU3$ep?DjN58A!`vEzv7G*0n)?(6hDr_|$nze&&R!vm!%3^2rq2M96& z0K^XR$FgKN=Kw&^ON!F@c-ythr^ja7(m>Fd>D$p$vwxH7$Sh-1$o_{%@4kB*K+#BK zEaI$!@VN*SK+B06lTB>mZjdUT7`5~&)|w5i2r5d3@t_RG)SKd)ocTYIE=d93zt$uo z>~Z<<_gku&4R;V}Y1kQokT6>k+SMS9_`(sCq6Q#x_M_CxQECUgb=z`=3q@JdqSsfk z0FHul$#$ymawoH?oXMe<0gFV1HyUouUJ2AKsih(`(SH-w_Ek2*)iQ4wc)LT?N%D;! zt$=l#9TPk_6WkKfxbBlIXIv-bb@MmJOMZpINnDg7YJ4U zUKjrKMW6g}z$s>DtDd3eVG0$~zcfGHZ>(*%4aRiByJM*=$AVbPLFQYxCOJS=P9D>L z9zK=-+X@PspK{S$IveHuG~P~r2~!xl*M?rJvhnL0Kk}KvPF>o>fNWl z%`QJ1z5PPJZ0bGlT^^^A2|s+=I`KVDAAy@^!Zt5R^2X+yX0Oyg=%kU@1158LC8;q$&Hjj z8^`>iA6in;#SzwSFF&Yb)I=OR&DsVkowWDgL8PMZ?$43TXImWK>t^hB;)UjY^pov{ zQPeA&!+V1ifs*zZ8Il2p24Ufr>H+Nh-Kq}r0qA~IOou7sPn9B%(+GmKaF8oqZ+3-4 z*Q!*~J{=1`Rcy`)jQy)!Ug&>v!?fU5PDUO=o=XZ-fb9K#D+%HuM~sP9fOj%YH;E}SsRz%m+7 zewDkhkI;9w%-x15&wv_Z>xV`@!xV;8%+!D73!vj*6QJJIb))v?LEXEB7>bxb1nm|M zmp7Hr?YHDPx=+<2+o04YN9WhnE$b|QFVe&K%a6ovT&zAd0{>FUeOsl8$y7>0l1#bn z23p6XzhExe$Ww~Ndt0#N8|W1}=|1s`(;Ix)`L{c+p?YrJH8H*n95dE7I9{)~Jb4Z8 zjYjn7dk4i?WWyWw`iM_G!@Khs zveukmB?xN%?(}iA(5FR@Zwc>v5As7D0~Ilz%;JMrls?=$h`0{Q$hnn&Jv_+yjOS*S z=sRv9W0S{yy2b3aNHxQ5>aJHJZ|ivAw_|_&e$}hA8cs>xw!4V;WslXnQVyxmGcOe_ z1{vgac3pRj(8?z0<$YyzV&l<1CyP#l>3SiTz{M=+xmTkj%`b}AI|)OyxXDaA>uHg> ztg9Cv_31rewb+?YHXn^_%&?E!mA^GG^@zbVqqBk$0hh(e<9-8 z>2|*d%zGRU($8&wi!kd;FB{Nt?qazwD#HZ~W%GJBM}nu}a+cA!-1t7x=^r7=SJV97 z{-w<$+H+BQdstW8QMz15yi{X4^m|nP+IiyH;h?TfcPR2$-k9YiHr=cRCB{oA;v{1Y z3gvM89WO%RS9H;aY_G!F+epQIk9n;<#|uHa9SX~S-JES!d-&kw;R&`iOmW*^=x=17 z#WK}5rE0Ui8!+z&BhvrXSPBb%Y+ES9xAjL7tb5F^ejfgr^~`LWe>r+X%UHqGVjzn> zy@lJLc%dzWRGEA&x#RL^|E_CO>O!B(e@wA0z`tNezb3sglMhB@KC||Z>jp8$lRCip z{T?c$FIo4fVQk#J_>|DFR_EQCaL4OgZ#w1UDD{22EK}_rQf2+;mrWk-NSx<`UFA7d z4|&E)sXMl=kTaO48p&)nS@PsD;v3ELvX2WK*xgpm>NWMjyl8e`8!sKR##PgX#oYFC zs+;8GIA8(*^MGQH0K+#Om$+T{&vz<&hm_X8?tAiU{nncCa&4nx7|!^NtIK&j;_BE) zE-%*|0QZi^tB7>7D^pyWT6NGm6x9wtcW?Qn7$^;aEN!MUQyGWJ>iCVOPm9#2P5RJQC}w2lbf$y@hj>yT%L+(uDyCXU^uAqx`*UpC|6 z_ja!qjovtWecFc}F2iel=OYQnHBU!O)m{jn#_;iPWNK$@4{3^nzcwx9V25`)P6mmU zNT2sCbQlH`07t#W8sCI==0An%5B`t`ZkWMzou_O6I!d!6+aUVZ*BxGwO3=T9{&R8n z&h9LP{)W*p4J707{~Q=*MFqUxM8nFSOnXlrlO4l^?#765q{a>GZi2m2wRLG=?5hKk&@V<^F_M$Eev1O-%SU&ljlkymY0~$|5V7{kqKdl3*9_yB z)HXWYOqYTud6KW{ev0+m&x-A1PwPhg-KZ=TX41EY{5#>AahDqA#B5WaGY+sd58|_) z3ISRm`lDLDnmt|gyaOw{2bD1Ig{$r+e}8N9l(Fs2OOuK?a0OOli@-X2E_nd0(H)&*H+AMbZ|#mMGzT23 z@0~dP(Z52;{X7;U52<*Q^xS8e`;&^bW{Z>l zf^Mi|BdHcrn~s4O_WWB8YCzB)@a2sO#amH-Q`8zt)I;Wp*v%PQ8E5vXGN+equ*jQN=x_+)0yc{EUJPzu9- ze#y~!eY`q}J+>uaolk+rQMo+a+tT;ach=sDi*ezfY4odJwiGm0 z{EJP;<5(`TDf;J7_H@~EMy2agtSM)ou z*>=A-*}^(cFKMvcO18c`d_ja|)cGBig>-??bJRT>#YMW3w->8=Un7?KKdnsmrSQ}> zvA82eb*vOCjikQ9Ry_9$VBT6uE%B-~qg5UgkSB(BsOLD>W;plij@~DjcFh&Ye^A|q zu<2_3Kfica;U)gg81bxx*t~Op3$YeHV_Kcpa?b9Ys=vqM5I@arJ8Fuvw9L1xrC7&C z@E)z?e%gTgKL$Dteq>khXRP&p@OJ(M33D8Ai>ap$e^Hm5euelRR#0AVega$izTV#D&Vf7{m@&XzAVhJs{1a$=;XaSyet;K)!nMNJ4(yFw8xJY ze{J6+XzQE~BhpNNO+HcFzqaG;-F5sg(4+a`yynWZQybO~nhUcGxH47;i`}WmsG8}< znI6_$2UXa@?EYU9;Z+-v=E_nZE>$1-;`+~E#~*>ma;wIOWs1@*}mM zW5TzUU(?!uSjNoKx&~8);s4qQjXq=1A;l^-`>ULInq+#fIajhnnmO2PADw4>TvnyE z%l(phOY@xtgWO|w*+%a-;>9hmeg2Qe`BY^WDDA^4IKkl<)3NgUMn&re=giFKc<@4~ z*wKx<+Nv4pz#*(|I}N3fcjKwVyh4ntV<5pXl;nz`o8o&H$#MTj zI5ndd7Ax#Hl5){pX?SsTFL5$M}UA8ig zU5b0VtQ|v7A^yIV<1+8Li5tM>c0`koCqbGg#gGY&WOeN3HK(GUa(;yQAG3$ikH$|Z|aXgAYeJNfB>%Z%RpPO{%HzxIpLdZ)gWd0pcNBlc}e73y1x z*ug{ZM?F9)4q4_2Gvjd`BIOO0k$GqubA5GrR-65+xcw`4ZN5A9gX=I)vFLrHsrw7d z%00BaqKi>~;bNoRs1&&G+6c5p-(vPXjw=W7!Czw3*Jf4x4?*OpGTY7N-?i~X!lZu; zX*4zt`{AhJjtLgd_c0KdjBFHGnq`%}k9DVp`i5C%3$+c|pRd_^u*rEW6<#l}_n5)< zcOB_t9C1cm&pPc?^i5#}MYp8OkX_2z{6C&-d8fD6s9p;+C+cJMF9)tLtE?Mr9pQ@k zm2g+?FFXv$N0=%1vWLLIdm7sYipw}P zQqD_=#RvavN2)Z}25pZWk*EEfc1&}Ry^*nRwSyqXdvEqU3cEEzc=xLRWmAjsL1y!q zxV9Ol+qTC>+U5S9lwWQx03N~F%8wtT3g?J*w-Rv$!3>k)cht+W4ld0(dU2nVI|W0@yS1QXy$B-uNhGOXe~jIn|dm~e|xW; z==wKm2mXc!cB}FvxuzBt7pFmYPw%0b7youjfHYeMxxBh#zZNb`U>Mq+&)M&{B;}`I zmTF@y%}lO5Pqn3%fb}?U6$8iQJ-p9NJ!IRv6x^768_Q8)@&}^myyv;hrD6vjjtp?c zQOM82#9LpW=iMLVIZjz*p24-ohT^QrO6B7RsccvoTBlZHrM zAFaUqa+fi~#3rPMurb_YO2??i4Tfv$Vr;{iru&XvqJ-oVjHOvPSv_3-dy<#N!}w=& z2Vwd9t_G*>M*2TQC-IxyP8Eblj8+&QV!v^5AMoD?kJFvKc(B4d;3qhyG<>LV+?N@I zS4LDeD2;}g;_2^jA$tW4?ib2Cy?ykaQ1J1ORd#ME?Q>*oSrbDd=rUL_lIyWlZyKMk z^nP9)S`vcT&Q42_`THJ^cmDq|_`ZJPr+D`{P%GKqb2JlhaPNwvz~(kXeb$}?pwcK9 zzZGGzYh(*Nv5(|l3R;=qY()$}6A+NSJ2c0-+p0UG>CV8lY;EHl+H<=tU1E!Ja;P<% z`pUewj22IPsaf#a(C1_DbQpi6d8t2Sp2s_J=40C4!aWfO56u0IA7OHlS!x%M<3XTz z)1+}a+a}a$}#)J@_&|wkN%p6oyo`4s|Cq z@oZq+vQ^d*V{AU4gnNN7<@Z=;a@+C&6$s-cta0Jm3!lSYxPL9m`baCKy&rr5*$Elr zqKl!ixzrZuM_XM@&YKQ=u8RL?q}C|$OR~!ehUe+uSf*Q^ zoV(NPwgs{GkLSGWzmnh~dXC!m+#X8?Ex%S?^AypEh(~D)(}-546miR?BIHn*HVltx zjulbChHi%9$naYm3dM<$e&**M=QOz%>Z>0!Dx(|EeaP$#c?@>hOa0wPf|m_!;XY8= zZTaINm}W>+(asnu6};x-A^Md#aAr3QSH|y*V8&Zd;-QkD&%vSH@^2R!^*+?n1>WdNeE$?vGWBWP=ejL2-m_yFdj?NirrW>@D}0QPt*Ed% z?|EeFk z^jg})`y~lKPm8BOR)64et%q{^KbLd-hdgDA7isd`&Kk-x-L_SO7-t=dk;=Tj)>p5! z3zt|Sz2~*V5I0H4K}j(mXJfzKXVUq&eE1Fi=MOu1NIfsE!S94{JCTMtgFmQue$YU9 zQRFbA#5*6823eNbzpH__G`IK@G(ptwf!fGNDyFT~e4y%t3-=FYINzSmIC)GLP`IUCH+FFI1Xf zuHJmRbY(LbRB)Mnec;Sm<68?n9bp9b(5PV<$miU~(? zTGCU$ez%tdx?l%ae51^HA8pCS>Q{$Zrrb}%mzg4ndnqG3XCGWz8brxyG0MxiZPI3 zsQs)Ss{sZmV9NDyRl1A>TA5)6jb$Rn^Sa}TS?WW|_R}4#d&bINx;$qz#k!38`>t^r zarwScjC&@;s{~1IirV4{k_ojarupkbB~{1Pf4N|>S22h%E=Q#@DH?Soq&K*N2PscPfy;;g7MC)z>U&#|pKc4pZUc=N@BLD91#dv^Fw^ygCk~Fuzso!?zcN-<2!#iGN z_1(l*;Q8evmL1`tumwXnCUYE{5tZ_#A~aspUS^BE(+!FAh%-J^vEdl)cYEQm7|nn6 zQQo!YhfyB+apmFS(AbtU>^)?1iapl^OBMZ-v>(j@<@i|se`^Y6@DtFehWuPmY18i` zJ6*!z4QJ+TAvH42>W!Bfc{UGrhCVABB2WF)Jq`U)UOiSz57#TtB9JjeWOyV$xSiZw z94i>TWv$@JvL0pVMLS}}8Ifw=I1ZltiFlbZ@y`<*tIdGZaNwib$n2-5;3+opTKF-b zZRP#SU6CiPaK94e?~f_ry+%R*vKfc6%!fT%c|*;)9}|9@$4W5223%G}QL9?tbi zjS42G8H|2Kh`&U-?;nqgJNU=>hdTK@{di)t_c(}PpJKO5a`T3&;arcwuq3Rh@lqff zHc-tC-#!mbNCTjxZ1$vFw6*nXN1< zt4gq0SePR;oQ9$BKm5Vp&#;&0{oco?GZW$q)JH`H3^I@N6B(DkcD-co?gvYsd)(vo zWaIO1L*;m^dAGw=f$6FRTx@9}L&&p;>a}|BGYz7SHW^r!nx$QYK@h zaPWHrTqiCg%gSKvFllp~N3&5stHpfw-CAh2Ag~v9xa*yQ(COZmWd)TE8{Zxm?UMS5 zH9@)Ucyfn8boz3TZQa6uBpr4Sx$^Pn&Aj#g_bfXegFs@j9AjQ3tM1#vaHZ-d5Pw4m zW7xDXZ`+YZ`uRAReD?F_*wyd5(yI#*nv5=o3I~%=fWLl=k!NBHFB2Gnf#~OLo^TM| zFR;?SK{j{0UbVY8@}N1=gF~_vVYUt1@`niaTFN&w$Z{YuN3zxiOUUYZ z?e=3^)G_a3^Mi$`VBIp&G@C6OcyrDJyvV6Evmv?8Th>#oBR0UiZ%Neb1CW1_PF6-& zN+W`y+;LPO2?20hA`VCrRghiadgO6BMpYq#mv_-Pp_aF?Ar$2NEvTCF_XSVMf07zR zS3ZLddOn`ZI8v|sqjL&WZXZW9pQU<7u;r#{cc1-XFsr@Lf^kT0i{_!%sbNi6XJ`v7Wj@Ny+r!rKd8TZ*kSdmI;@7M^P2JZg#EwV zFgm0kt$!zP&krw5Pix|EJ)}QA6RdQ(`Lq@S;=s1%0m|==aEuOl%L2->Y~_cE49kd0 zyMxnWa(fJUTkl5)W(U4FIQ3ce()h_vp(n$Gantm=2cNvDO4<(x<5l)vM3V=n66CzL z4Sqq#=*Y42oRysOU1n~T?$PvIpnaL}@$fqbfzW--`gu-&-D3Nl<~`;;d>^eRA$+UN z&%5l{j*oS~S^nP(!H@r31O^Q&9N&4#a{G8u;Z9fF1p$_Qi^~V|RB|cIv^a_=@U89a zw?&Tgau_O<7a-p-eB0+BsCHh-rpwKjaE0Uu|6=LL+mJiCWF0IW;(Ej$?($IYAmB;u zw>bJE%;FyN_{?yVgz~t)LOv_mq+_X?a5V1(MMO$4-v`wB4|%q~0{Gug6Op%*yVD2Z zN^gjG$sWz%arLC1HcrJmsOrQo>c4&-ADzSSLBEI2UYMR6o5BCMPS9TdP7)7G9#%X7 zC!+7z-iXHn!!j#FBEZV+e{eq_I0=uD$X?5M?2YF+!ST01opM>WBN-Gnwl|u|M~sE8 zg>o~jNwErVGw(d#0p{OogL+EzU%;4j^x4V~97fKCkxhxF7XWg`An-#i;|@C~=kv@s z`!zIEH8;$-Jz~esX*$~i8^7M?$RBa6we=^zDd4HGSQ#SZ$62oJbz^Wc`!S=D_6&;6 zgNpJzhEXh$$oh1C7uBVOI>~F8HjGTNFg6^U!t)c|4d!&Qzn`N4`8H$fAm`52ooY|f zb6Yd#$bEiS&}eo+fZMR47b(W|kFWD`MwjDqGHuIbTo|UXYMFj5!26sha)ah}91j9P zy6V`RjB@w-UXDTgGvjCaCGb%CL4&Z$#@eP4=x|(&!K`u=##P1viUTg0mUNuuP41}6 zKbv)1@V>mV106<0|D^4XDZy@I=IOZ@wp3O#=OTph@C;a(`m950Lx1*hc?{+?*ID7vBwu9)L`OC^QFO#&mW?Cc-xMv9!4Kk9zUn-8V`W(xE)&jH@mwG zeR%)Q;m2v$C;emLN#T0v=y*dh<(Nkp{$mplEz-iE{#heMm~c}jM;mD2$wjr5fWR{8 zG5dVC=Z*Fe!cFivh-8*TXwklAHvqJBV&^v*vcAb%4kQ^0; zRMC!`3N5)7F~kv(rvF{s!4BXuG%Q#p9qM9m?ROkrhCj~vk{pHavz_ehQC+t>*=oa%+9Iet@988&1ns<- z87qr~x#Bo;^ZBa7$f^I1Dl@JQR~6f)Tb3jImt@%&wm4d`%d*7pL+{i+j*+2ojmsje z-a9YVzqS<}g?w#|%y4oz?zpxIg;ay&ka7}v2|T^{zV;m)J`2X@b-e5!UhT8oCv$ZB z$3Bc7ibMFl4s&oF-uL$<1O9XK&yj%pI5^*BgYV(%lEYn{s$>V|*l(LI_lWhJQ5w|3 zJPcqNX4pQq3_eNItZ%W7*fzw6_X-_w@_P<@Qcq%Ltnv)3iOYd^ZwmfBtVm*%y z+=bX)AOv2bs`4<+V`OcZQ9}#o@^-l=%ShHKk0pLlrQ-@e>g{=hx+r>D92U>_?7+QOi+Ei8!(K;-?5aWd0(h+Qk` zWD0pHQhYa~R9RA)c=V6zr1*512IY`jSyeU83*#8(Cz);<6qouW_tU_T;V17y^ zAE5!yAJhK&82U&(jPxX7AoRxBfutG`Pl14_HQSdNXcZSve^<6pPSM6wdO;C3+v1J zHM3EvOk? z%Hx8%+y*}OH5bPo;yYX~!h^Hjo?Xm`d6T-`obh-j=;TeD)}(*B9k;;X*034+hX}#G z8n!d-?+itZf}+b_(M(JKBZBfZqud-N`P~bs^gSWL#L>8sWn{S6oFllcR&v$Ks9zc#?eleyes#;wPq`*EuW`xKFbr@MOK7L!OVX-!MPaxhNjL znDbww9X@Uci-*|94+lHWVm?fR-Iu+S&|f|edp`T)VjXf%Ydlnbc^;BFfgg;Mz{lV{ zUU6`D`8TEJJ74^E{a%`S8_G{B6#mPOfZ4%=n^=DCotlpkOz)RT3^ZfQFDnskNFS*n0mpAmW57Pqf?DU(<_^%kpk>{4D1gln9 zon@zFxh#{{mm_KJjt?=aqif5vi(k0oCdZdCU3pS)EsK%1i&)oGAwL`BjdY(#z~Sr_DABui5M}B;Sce`K88VmWPhw!HZBye%_8yX zvZ^sQ-KNTCFV7@hBdNzrA=GEEN%KBQh;7Nfo)^hsKQ|WYF*fo#k8H>2+)l44u1<`*86H%Rkt5|j27Jgqg~6WTKfU++9-jb* zvBK{DL5clRa`1MJx19uMEMfQg6AwEEx!sZd%$(8;OfVb9F>EUE#odV?8QEs2HG>A} z<_@z4|2*Wri@xDh|9Dy911l8tCAyaZRzeA$4 z?!4Z=JG0_n4Q<@IYlUAaF0A`bSAW66jbT}a5mRTX_FbJC!%~Fx7!_r_fr1=iV_Qzk zl}j8Mb~cPvXPkqy!Bk_>M0<829n_ZBl$Fdvu3~BZ`l))W63=&M+O+ zj?I0T4mNwm?&SMs=MX3l2{|3A=WdqcXR69PQ3>ef;E;ANk%QbMH}d)7;w0V4%D{T4 zd7^%G^e>Mg++^(2(ayL}!9HY;UVJ3~^Qz|w(O^BR^84*i!2xDIcP+II+7>{5zjxbq zeEi$mW95kcUg}5uom&Tr^L)~M#cJw(-91-JUw98@=3cqm{`vgOpOjgZYLD5JI~jRs4-=~denhze$w!2gIuDVZ z{vSmG{m;3B+r0*I5FZ`~ai$!17`+STVuq+G^|vZ zH-iPemZ_0n=-FOY#t%7w`B*q?zjmEqDD44@p5fI-ylBTFyvgQ7qa&dnIU9yn####I zCF20|lBiW27V(Rmd%H}HlPnVj?Sr<)?W^@?D8Dpt1(lERxeh8!2mTlfyIo>+4+b%j zS70`*jO1_69fp7hzQMO_V;L3-o6e7IlT?QI##m9itRCYR7E1s!TlPrmXGeUjiO+JE zhW)ly!(ALHwB(R@bsqjkCb{Pc0tfn({5f zE7k;e(8WvGa4%JW$}oGZg1pGiH-c5bc$mMjCpP0k!CqjYv65ikg5guy% zX8Qo^SJ9L>Hu`(-ch2BPW#*2HNy1L!BrHJi^W1^K1MI5%4*>^y<^P!+)-B%#Vc~S! z(PHGwzQIbjxh4BDJ!U})!miSsWf>zkV{y1^0LUp^XIJ;G)tA)qCJ)lROs6q*8?AM- z6WvFGp8`)E-^@?)^O$~k4t=N$X_+s>4B+z_W}AJC9c&o}3d31=wlR@n(96JKYELUG zP*}8IT(bUytgNrF?hY5;;2`<^}q2JRC3e&;9n34znTq za{9@7B2K>tv7dV{PaDrdVarIL{hrc6#P%B-!MJYd!)y2B!CPS8u)7Rh@8hLfJlZ~{GT(c0MgXOL?neyqxz7tVrW}nM1k)n0GDZ=M(B1a0AMJ+#`bH_U42

    L%<5sQ@aG6PNu6p4|j^q)xb*ec8l6Yg@Q4aZ}_lz09ae9h|l_7b}KCH{)5z+f93-f!^h zCe6Scc3jpCM-9Ps8JE3A6|s?vZd9Xy^{*q5CW;N& zHBAquoyHWPf};G538{TLIY!ziAR!?1HX6l-WCnf z{So5|RmJ{G);`vn0OtRp_1u2&Uvg*^_(i8BYZn|J>sa+HX0N_b>e|mHFM7fEGV~bZ zw`<9ADUI;gv)C8uY#2*8<@PXq0}J>WWj)Sw$}zsSENrt(9IH(I5%BcA2XX-Un;&w^DpGA8J?|%oXnkUBV zj;G@7gTZNIyvbPEdJGgsRa@`Y@~@i5EVt8bw?0m?USnYxhK6_M$h=|)bp~77C(iIG zwlbFPL&P&I`BOC+1G562G@C9fDUTDqvZ~<|3>p?Tr8{QvlB{c9U&~9Kw+d(S9am&q z*oI|yVRrdWow+zS7kx*AtCF*G>i4{Nd(w(Ots{cRALiKy_L%o5HjR+=1(Dzy9}<4= zFPNz~?6DBXcw$2}e&N3bzlOC|;)jD!)tKm87QzGuAi;3IO>380{BCW}_E{LQg)-iQ zW*h6sxW`ekcwC;ozX*zXo&U#>|LD+Zl@aVCDMsV{lsil0r2C4)MqI~x$G-0&iFR9E zbB~pdn-^9uY!es9X<2hvs$Q_vG4yw==sf@)P@{pFbC__*Nyn~WhY&_jv3u-7t`jO2 z{-YB6>;=E$qr80FcOK(EyB$0z|ZF(&d0%6VHF}YA zl7XUa8!Xkm%9PhO7Oy<+{}tA`JMRhdwere5s}f_6Kh1F(#)X#W0`Bjd)p+-s&DzIW zp9}k6m_7DZ+W}a?YM^op9yU?(u*x?qY@Ya;e9Wo7g>m5fhW{GyV(o7WBeHTkngi*1 zOtjWX!KWDOwpD_H)-jK{y5kGt^Z)Nz^ivsoOinkLQ*b*0@pU6yk6z1?wNfgOkcje` zB16+068L=u((kUt!Wz<>TzG}hnn#gWq`E-z1?5z?Ie7Ov<4FGN+)P^JYj{ka2(3Osr|IdMM^BueU3ce-q z$~VZ|#uuHWad)V8syvtnRBFN9!u~sq_s0o=!n@J=bMF=sImdW!<&6UnDYeIr(+5|Q z>T?#hC+Y)_^@ze<#jwea;Wm)u4n}pWEL^#Rj++FK!9-(LP!p!TCm*QO%bG!Ezzih6 zG2uQu$;0!rP@CCD2j!!ic((w6K!3kRIckfGm$Ej!t_)&w?lmzEJwB92lkUJ~T*|wg z&vm382&Oyiaaj5W4zyFaM@7XPsJD7-}WlIO*|#w;Xtxo?!7x6qMq6Vn=f5TDEu4Mr0)kp+tI#d zQt$coMbR=RX6GC>j+f|O3frOe6^Vi5fVwdn%BILPw@=aIkA!k-yS(idf9#-GHuo4% z>~$PtH26o0Yf%QVHFslE=ssk0ql;`HGlTqYLw#O7hT4BI=2u}0^)jN*xGB8LaZur&-5m@u=56)MS%D3z<9wfU`gWu- ziElf8?k*zJIR6v=arU&8!?-+gYEv>-?Ub$w(830}N+BBzf8`KN6_CL~=YMta)+X7sJu$ zj>f`OJ}oQ_(diW@g~%BBdABEw%N3K@9q!fMCKDilFp_ab8N&c3+Iqg!GJx48DL!qU ztKce9+H8a}<}q4%*T2t}@lUH%hmzFs4;n4}<6wFHUlgR4ihidJ0kG{T$$LLMXEKb~ z}x1_Zy$((Je~z98>x`_o3SI$F0sev>&*W8xSFcwYoK! zO3MGY^vfg&aLqq-sz$=g3IuF}uT*yjr=e}M#n);x8?HRjNub)-U#)8_IiYwW<7jTQ z`6QuZC2dG=pM5ys|5L2IIv}!I-NwOwJKNuZOTsQ9E=adjXs|mmjy7ysZ0`S=XpJ$d zt3*)`Vz~+*ZoZIiJ%e*~y~2g%mymu^=_hghu5yJ12D?rbRp)xOl?+%hKk|Bts9L7D zn)kxtXaYx*%|x;PyWeR#csU6;w#|EZmk}+y@aW|~@8B-*Gq&UtK2cFj!IuJ!XM764 z?NPuwL5M)dO4ulNwlx+?a8$F-w4;%|5bKi>-Kgmgf)`1Tn>ujtv%{PYo*VlT!S9UC= zFn`t_ZQ$G8aL|DgHx6(3j(+b!9H22A-;Rsxd=-*=R}%p8 z82P+wE%WDqZ0G-fmHxLg9haQ)z?Eer(wkN85ZaU2B&i>n%`oh z_~~>PN-0<220;Vx|HvDo7ybx9s8vfz-M=rNJb_;R`5`g6L<_iwUhld5rhhT$>q*F+8AxEZ; zstaEl8YHk}3tOzZxtF#7godAQQlY{v(`(p1ro0S`Q&1Ud%!7xRp~bk2yv#gu&4WS_ zI<48|8r{-KG64$EAU@cp?T2ki?K{yGR~r5tA&e|%RJ%R{g2oB4>$ z^W_ZogC$qUMf2b7cDVk&r$VvyiJo}nU^t*jY9Xl--i#g;m{Sbl4%Y;;^<%S|yU}G9D zgJCeW3!kQe5|nh(CV$^gSfzDQX!baZyakIF@+1Gn3>iC97}stEKG{2>vG>lwfJ=C# zEr5;qY5jbjx4l8ZupPvtG zUEnWEJ5boaim2)bu$!8N`SYsV`+JV150k>P=phW`d@+69xfonG*g%jAYgx5=;$b!< zaKB}Ng*IJit5zliccw|2`z>4M0&f*r7!Cb4M$5`BB3Omd;GBCk)A+Pz%dx+zM3il> zszmB*v|Wqy-UmlXxRb^B?*#sd$24z+jPL$&x<8MOnrF?fnkyApKU44`H4#d2l%b&c z`S0UOUB->&K*(9*wbmW+cG;@_kBOvSR|-TsD3NL)NsIj=OM^+r)|E!7p#@<`HDGnO z{YF{dVi{>@Nc{V0<35&3%?;0+mznO%T44y^E~qf^G1UtKTc-WOLXJPj$lQ4{3@v3f z4;tf-kF0LtkMV;!&)8I`wL7dQ!1J1~_E4XR8*(w3(%cIVL{!0J2M!IpIALtYIxGM@ zRYwpWj-HC2Ex-D-U~L#93kyxdQ|>ni9;+JK(l0bk$w-N1lXAz68-iXqRPqvx|M03M zM9(59#njE@JV?!f6@fIS5VUSLgWfOTp|)w_H32~MLnwek4fBMy=Y`N_js*wh4d_?| z@`8g;BGV_$<=j;5KD$92Bo~s?$XG|8T7)sf7S!6>vG8>)U2GZ)dO;oFoBLD;o{4Oe zMIw^Z5-+d%e#{elY@#@O*~6KG2r`XVY)7PWDT4WCgCd>Ags z8auig_r+2~sxal1`P1E(Ir3Tm7+aoh_knT?9K+hV)W6urFj)8d{lr>k)u z2yfL0lH0WrE;a|!zv;BD+1tQ1gCt~+O8@87?NGnyfdIYD$D8{}$ihbXpZM7Lsij64 zbVmP*H}qO)x-N%V*_P+9gy3;W9vs6HQ&v;tp87jqyxvYygKD(c3g_s3|7_jWzt+K@ zo(*c}J}Uk}S3WF^ICEl(-v@Fi6akX{AaDIr7j|yFXL7)G-!s5S3{u+vn|aw4p3{Uo zD)DxV-heO%=uLa~q@M!m$kQP0E#k8uu>rImS-z|vM(}p_I8;khs?(*=bvk~Ik9(KB zzE2$2z?w+d3atzNF)gNMP+h1 zP2&pp!r$pvw83Q+eI{WTc!}&ds_{KM;WRvu!He83gM?NafUk@34#n%djEpj2x2y@y zA1unCiNI=R4B8L#5t0>2l(?X1C^Kd)JdI`)<5ks>+`B&~Jd-Dsk>dXUNRg0Ot3(hM+fzFF~S?JV3^30IXYCiL+`OTu!91PAiA z8QdfM*Mh5(xb$)LcQb0fl09tD#G#N7_gz3@;v??KF^=5w3qlD&{U9;AM1S7ZjPU9~ zKOy)PD*YU4n^3?yjY4V`t%-HB?D&%hvZ8geu0bj52kAbip716%#!xH@*tJ?dYvQ{z z1LQ1xiHHw&NGB>33h~DfvO((Hm5vlE4;rL*7DAtxKIK#A;JNC?eZC-@5YZP8DU4wg zR|CSg&1$)UTc~}^oz@>?M2PY2tl!~{8oyb%Ro)(Pxa>HkIE4geN7#&KNR2^pf2@Ha z4fqsfyydvVp92!5-lWvqqVIau;w$pyYFOA?1!LAR2M`c|ZaE?yAbWX~p#!~OslrTe zEChKCCIOkA4EIH87<{ey+>Ph77l;BGLY(mw%dh{m5~q(w(3Py1|AOQG9PgL5XmCWq9gA)m6$u9lrGy2yOLmJR*EwC6IOrt)I}ko+yZ( zPoZNi`yMA-R9eNeh&aS;Vw;*HHB>}Sbx6Sw?5WODtP}sbrLx~j$VhX>>!7mE(F9Op zIlXI#zN_{J;-5^PRoL9V>l8D_q1N{psItiE7G5~WSn9hti z7v)Vdqoft~TZ#Eo$F-K|K({}6gRh#%eeD#2|66OUYDEY`>`H`Jr8V;(N~c+W^RjCA zbTTBYA-^Tz7k$dSQ36O!aQaZy1{U5b&3GpM(gRtf58N>q+U$((MPsjnOEVNudPfu& znc{q*159YSCYlR}sQW$pb00TAe2D?%fedu)OmQ4^D;1ENN4KqVI{~OOo9h#at@#s+ z4}J(>ala-W2CXYn(InhRdb_A&xw@%ZS=tYq?I8H2@s`svi7ga}alvtGSTmJRQmRd9 za0q7l7|&ABM;TKY0hXpLqQU(x!jYD+d`7k;|I*}o-&ER1Ps^?-Xt24^p)H*|aB)}< zpjGu&AR3<-xAcfBXIB|*nXk$?hq47z!Q0QR&aqqIf_OKC^H)R&%8~3F|}m zz~UpW9T`xUhJcc83|44ZN@w8Ah1b7{%H9TW&hV7M)StOrz;kK=74;+U;QF6QqupMJEY_0z>W!nY>gKJDe2-NX{d z{5|Z+6(%e3^)3o-EXgAOMi2ZhREH7QSE!Rp4jauER8BW|kXH!@$0)MJ|As(z zDtTwpXAd1XbL`KY`R`Ksgv9;-(QBOeV)E2$q&&Z}Q1BnuS2VDkX?GI*m;(dACKwoG znPE?ipVU{szjJ%g*kiS{{IN&!Oyuq#HNv>VPgpb_Oy9#~{3|v()sVSX?kC<)nU{)L zh_-Om0UPr}|kPczn2jR%2VII7r#kD4q|`IMsc)h@T5{BRE5bxLChKfZ}W0)uxE7vd2V z0J0*zL&p$wCVv_g`U2_GTHVH-4y69JT%}5A#yxQ`6E7(!A!i77lrwmH+o6(mywIUz zpE|wlux{NmZ2Bk3(ibqxOkVJ*pm9>M{Rf<(yEfo>BBkgN+Y43>{XK!k>({b5%ou~o zQ``(XxbAB5S5LYtqm$dcY3A1}B~$IFa_2jL9`85i5^;7iYC`Q+MS+Gc;~|(w>R#L= zK0ffzFj}(&uPYJJ(wx%~XR~7;b_=@Hy>#k7#Q0Yu!P|C2}Ln}Ps%p0-HN)bcz z229aBS&Koo2Gczpezv|j$H3|2>NhB$#_fR@A87hC(b=Lt+7ju>JCD>=cOv8P!aXxc zW;#$cqTc*tA`Z60@cX@`H(gza`4{KQghp*Fm5PF-@Ju@izIofn6-T385yB0hRdQ0! zn$f(%c7DNSg{uM3jH3TNd)pr99v-y=xt8Vl9Uv_$^jV_KSUEq?!YdGuloB;IXK=#^ z@#kDrK_*hhOL;FWhp`^vH`BjMQ$uhe&oij^axa;FiWE;J784zsveA%%mQu6`L|g1Y zuzcc7UcHz<$<{0Tge;`nwY-qe)f+Tpz7wO03qHRpl!Q7!O&oi4OgjUN3zRH~&qX&O z1d?ND4?1n`_?eV$W^=U-<9@iF!x~Wh3W0?Rrg<`s7&_*ZN83bs){0p{=6$pID4m@B zd_wSa^MgnHtL|yH9{biYqCUjy@~zX_5{*adqHb7BRn&O&Rb?$p+II6A{^V^x>OA_D za!;D6E$R(o21b-&!wkqt;m#Ns#rz0}`o*ZK&3pD{7r8L4_s=qE@J@XV?EIg6c_)uv za)Ib-vu|HdP&wIHwxYN9Q%=ETKLkPraLTewA!;(k5Uy(-XCSCp-o#=SRE>I!x?0*y zdp&BY-3*O4CaZXBr(+O2rQz;HHld z^u&C-XRhmp&bt;{9*03NSZWRxPYUVHNx3a_X*@r3o#ox9I!o8crR#u1#ew3 znOiUXO87qF#p>Ja*e(xHM z5sCUgp)kQ0g%Ny`3xF;F7d;!W^8EDvjqBFrWX%R76G}gLy=_CNN*+u4p)0HTgenRg zAj)!ca(?e&nmxXmJiyZ#J!Rl`gy!)M@0g_I69k?ky{E!x0aQ{Co!_|twS z0nS?%|2WqJV>-?Zkl=QXD$cL5IkpPHbDIp!DFEH3)GBwm(D;Rz7OoDF{f*LNBy5Z1 z9SlURWFbWVTebxINVw_8{dIYvTk7@Bnf}SpdcIHPwztwQ|L4iC^6aO_4t~&MG4nI_ z%9XlFtLzg@SQ*0r5GvJbp;H(4sGHZpDK#3!YfPmdDC(eXKaS?|{#pyRJ4Ns6-N$?q z+K6C%)JsXg7=qXI5=UleBNzlJUT3E@U0ELl5ilWLnyK$Z9@dSFLHo96!QsU53oSMc zBEfud41;2yxm1UZXE%>VUqSf37vTtA+6>qX4Q(%HC(QZ0+l)>Y>ZcsbfjA>wxX*Sh z&>Jhht0MLGp)wV>SM5VMe~9Z062?!B>9}(;;Wjj|mBRZ2t5}=G9V|c3w9YesAhg89h~sKBCx77HAMar7+Wy-4VaDu8hm zy*1c=o#oK1^KW1l#;j&bvxhQviU2VxKe8td7rrFta5Hk@AxFQ-Kvj#eYW5qsUJHCa zo^i(crcCfSx7=L%IG~=t`SxU(qmRU>n;d8EBws+l@hffRRMg61u-!eq%L<~d1;s&3of*=2GaoObsQF=dj;$!p3_d%=}Ip1H~7 z7J^LS$N8oQ`uaBPMN}1H1KxNm@$0^G9xKvH4^q`bcP{%?$-X7KGcmFnyt&|vwm7wjc{IZ9-G0rSH6X3OCnx$61#ym z_z^++MIKAhmvZKI3Ng|ufIzANhw%wi=BzC;9=aljr~ni$NM z9;5LNY63oUz2M!F%huoVI(?wsBy1(jfZ!v`XR80~ur(o0k+mPw7{gQF6l zQ@x9rTgM@&8%={T9qhUTF63D|f4`d>JFw9t&fALk<{i zi1WZE9vnbUk`W)}3k4+^JsH>Gt4AC0{+Ci`rG_yqh}d3>)#di?WkckTcSC7q zdN@GO&7I@K9lU|ZXQK%YwJB0G5|oA~g6=3M^mP9g;DK&0QDjeq%H>*7HPYGTB^H;) z$vFf^uD-(#LWx-HLd!B`M6Kw(>!2XHN4N4v$A`R9_v-RlCk{13xolW}5P=<-QkwtX z+E|Dq!o1UXvA&Anf{0v@xLSBVEuY+>A`1#oVK;{*Gjvtnu-r0uVAyWr!xy6AKUN4E zij9(;MzSek$iqs)huI_d_Tm3W?WupW2o5&8l(Gl9<#dS?RzD>|JCppSa~66Xk(4GS zqVS)X-_Rx1zIxE3h#q9pLX(tX?dzR=RfFF-uDIo{Dmy)x<|_~+_e+5tyPg(CC^q1e z)umwakbkrZ4ZzcNb1vZCV;umqgS@bm{o&Cgm{3evJ#E1*?|%Fca^E6L4ed%Ag*bB6 zOy4dbStKDi2ofd+cxsEzPYfiSV_;Q^-yRK?z|fo+_4sqiR zgPKMe;{fJw(0k7_{TXp71kgZ(tpSfbCSjkH)8fWMLHs0Hd=T z?!Wmpjui)Q4O5w)Wcr{xJ94bzg`ltfT#SP-*U`+3(Ah2aRbynPI0l*i_$C{kal>{( ze(C~1%rM9Mu1fCiF3p;3ba>L1#j#;Y%ZGy(YL&b>0+vSwWTy}|LLL}(x2@)ingw!{m%Q6ps zz8j%vw2nkc3uYBmsk4J8Pb;rDz|KF6=ae-q^W`1%xzAE7zTZ#cv`3p`+L zw&k4r>l&B<)1)yW=Fs@gh?EP6+voIjG0xVqe#uyycxMIm!}e1?8hc9TY6_j(ao*SR zeug^D#rz;oq2o9obt%$>{%iDdQPYd;;N)`J^#>QpcpF3!Z@f~!BBl7XFG_#A*T36% zo)Kpjz7WxPDkWobJ5OTZL=3|@K;g2|J1Na3OFQCIk#e!t`{4D1!&p@Z<|D3&$zZ5L zvqt;SL!E;Bd9;u+2tG4t>n-6_4^-U2WBS@w2UofUU~ul$9N+WpkN10 zYM;<#Y;0r*>jmQAr%h$6xdkv4ywO0i{?mLP`i3T-z(bb}+&TvSUD9Kbys@IOtlY-1 zh1-3MM|TJ(_(|kh&QGo*b>`S6)71|Hc}bIlyJ9W`6gv}J`Y+>Rh0j*~PeLbKD0Di~ zu>N7-WUpFo0!d&Ho>atb9s6Mf^tp@Qt>H&l&!Y9qiXi zZu7w2C!RVZawo@Tjx(rA=t$(~m4CPL#&|2E2IQGgCKF+eW3%~m<7&?s98?R))0*O( z#*)9dz6ysd)7(x;?W;Y=bIdu$Z!uT5H__+fd`^>vPPp}z1}k1OcA@CZEvOr0yzlTu z_#3Kn@jg%?=hW#l_kE>-7kT2URaAY%YOEB8B$ePa4<)sxOqxD-Y!KkqxR7*m{$qXh ze=e=E!sl(sx1ur#?V&6(FUgEy1bZ2tv3s7l^bU_qbz)NpS0O{OinZUz3hr$D67^|B zha@j&?Vzc@oJ@`HhI@=NCwDBlBKoLPvt1^_nU*NEZ z(qb+hO%kYDly;!but)$T01{l^@`}!~wHqNhcyTLHtzX)|l(Dbz@r7SGZHojvd_&rImb+=sPjZ4t=c zh>Sx-%_bv*se(YXNMI^XJR=Q5P8eZ^NhbpiOi`^GZ%*!3Wg=yv=wAo<-;NN$_$vt! z*$;(>ZL#h7sdR%20&C)i8MK+9wu!Ie8RC#<=;u z3}tx-Othn3z?`elNARhs8O214=>ZYpB@z5V@SsIuQlV63^%+>*Ok-uPyj)+-zwY0$ zn;h?reb*@*$vXUX@U76yXb3I2=p+6O5qZjD)Gj}m@18R(@^OMO-4`~h?01#nXT@o? zJ+Jfm@8;yMDXJd7kAgA;r7RDVRy0(-OW7a^RZcP&Y0l|7R^KwHmU^iD(3%r0`wkSBm z`2CChNVyknMPcdW^&qgsEFAS3aJ7GhEV2J#v6&y_{Urp3#F`iLG|uSpM~O*bqN^@n zScj^6vPs+}X(Wpd+~`3Ea!{TeToB@4w@!GE!08090Ye!OW;`?XyDQS)-Xi%G53a3msp>wm{`{kCZW$1)Cc2!>$wSVP)LN*dr@ zB?DA|8syg~rjmd*Y$PW#0W$(iP%r=mFU}*4O>!p&Zh8@5>!85*p^g!Zy8oiJ5@aT& z%9Lsl#|+Z0@YFt_5@9}e=OWi3(PpB7M_ zHf?nn>=lx7(OdT7FTWHY*I;FNfP}1UkcCcQ5Q9`Ofe*N0hnEDSlmqSJ-(?}XSlJvD ze(Bw*&Qu&Zpp_oBQlWAOY7G{OCBOCIMrOw_86eOpJ4#V>c<4nB5vZN|P8`$hz;O7e zs(f}AlBaHYqQmk|zPddPW}REgkFfMb{7q2ms@xYLV!@9XLAAcqR8e@N^CyxpYGisd zQT_V-$1=t)VGvI1m^72Ve#z`IATgVVbv-L1_m|LyJRGf`GQ``~Y~}eXVu&bM0hXcM zwgB^5(CgtrEdxWz)oz^gLC*+O)5q`{)%9sSWF-@rzWGRv9FFnB7G5#0LVjUPZ_-G0Mtx z-g$X;g{6F$qLeSgQ^MuTX?TZ#`ly)yu%HR)WO!hinD9xLpU;onF6!nG!tYqwQQ<-1 z;L?Or@;4O#flY7h`rC_F2b%bA}OLEeI$=@*>T{;mB;CA`-y{FWWA<9#1oOBqHRQvN=~SF4aAJ>8|!ZT9W& z%Q!!YBS63?V67?}OH?1laB>B18H8hS;%qG-)eIC8S1?t}`BU2bd>Ql;2IH`TI1}-b z@T?(izDZ)`P+%UZb=$&+OA}>5Il>JyEWaM=9QXVsgx`Lm?=-OrowwLa4FV^fNpyPg zsuB79Mm0yl+hG52cT;DzPbiGgN6wY;W9P$y>xZZO5}D(Mm6fTgmmatwW8biHjZU zNa(piCH~iEg+Yf*5xI|`VGfz>r85j$j|l7mq89}xiX!mLu5jB|o>`4~c7VF59VWiq z;ZKnfPl6)FZ`dROhQ^G5AUK*VZ=Z?All2>Yct3oNqrvCJOI~rLnJ3&VnS9;aA2=7J ziA1>gg8oqo^`i|P(9-Lb!dI(4E=K5??wR6cb@t;-drk22W%*C_rv(7k;wX4(efH`x z%EmdEN8s;M(iOvWmng5rhSU{xL#RThzusm?e3YPY3XQdVXQ~ zMqo!6{~EincM3sRpFoXG+4++orJ8O>_G~w-g}JbC9&2(klfu!3{h**Wy$gp`?0>fg z@D%n+gJ7s@l%SpGyCx?TuTe5_lzsddbHlUfVesB!W}C;V1Zp&cq*w3S&2GIt>*$O# zwaov69uAj*L~}An6kiRoMuOmb;bVmgV~LHVy+IlMGcL%@qY?y~cj6+5DC~vukc~!P z<%e;!ofUz9>>$}78>)WEHo83!TlKCs{N4GjiqkuAPIFF!qTC8WtSQ7z4PoT)H|Y|; z7%e+s{BJO`Wl5H`79Pq&nZd7dGB6wBrU#CB?PXvqinWDejF6;K$RSn5D5qo0SA{r= zzdvU==K7F0-bP04mMLc8E+C^it{xjaG8}k^2nT=?U?RdR#{i^70Npb;!Q@5`#9FP} z$ED#CZoKt;H`r*kWxG(_ zSR*$dmHOB`!Rv#H}LZbSHLpQ!{^E>?nZ| z${NWIY+Icv&IHU(-441SfC*k|H&K6M9=)ZT*g}UeaPfuYmUX0%Rv& ze+3ZMP*IV>JBb>BJjq!CTTg49#}$b6c%+R=ZWY|O`#Nd#CATXPQ6MLU<#Q*PsC@!Yfui92PRMk{GR#!E-esKUUtkj zEB^MFZIGlbj_qsKefYgI_NFSPR|5SrZ18%t(CYYgd-(+#$NE15KV_s~$^L)g1Zru= zl$$?Tg*D~e3U(SM3S1%vrFv|nlQz?D;#hFM1`e3G{m`2Bfj}ZSknz&4sZ**MGe`eZ zD%JY^_wGOFie4+t$s5ZU2eOiJrDSmi2RL#R{3IFPcPd``|!J(Ly zjzw};3h50kzCk;np`_dtpGL8QWl>?NtoF~|eY~!wuqb=up+s9;Ig{MTzVGOK`uxzq z??)ya4azcoOVXdco>9NaTJp%dp)_ejxEe>lNQN*7uIIjF-jf|t?(u1F%Kd9#Gt+5# zmmmIpy539z)1n(jS4hf*x5rWD?Z%RhIr?Qg-+`j)rxMjcL(Oto;ErAQygrIs?(j`$ zRe}60W_8P$t5a#^1je!$Cd!<*1#ys*3iAKAhsu|(i8%JC_hE!rP)R6TFO}RgulipL zA)={yli}kf7k~c=h`wk5*HsfL3H=0_#@_Dm%ezB;g zr3#j$7I_|Xkn%J_hM@v+*#Anh?uiCLiU@!SAprnNKm=p4)uC<2ldoI#Ll<6AbL;WB z=8Zf=A?#T-`Oo95a;rzaLVT0(=~%;dB6bB{W8VY5$HhcJX$F~LnSv(fR~qfW+0T#0 zRB;y3+>E>(?(T_*p|w6q=A?DHSBhhkk>(u?n%5y?kcoQ}@%M0EPOZs}$^DqmhKluA z=mm2afPg&xLFxDAz!@+I!=oP4LjU8W3!QOXY0IAb9@NM$)|iBkNo`yh*+vNd59@(X zAkZ-ida9Fi0sw%E7(V~9d`FVpWd3krWdvzajg8Ty7SrAjGtBjvWff~}FBhL?Tt32b zvnqe}Y?$%#=@0nw9pcj{UuyWwcJB~QB`Wfee#HvJ{n&NDPmxU z+h3Q?%!Ol;yQ?~N?siRk-4Oh`#fc)t+8_zyG=X(UE-$is>bb||NG5p9w?~$n@VTKBguLELeck!#GUsa2{iAYDE;ZUe(qO#YSt8&z)PdEWf`V#tS4O0edN3G*qg<4@#N zFj!b~+7x%~>EMD*vYqK>^2r-1tfoa{E?g#PG@aHtJDtATZSI4&iZ|!^L=X=k3=rEQa>4u#5k!hd*fPTyYVH zP$AOyrM{&z{Y}wuK7mv*uE?s3Z1aIMGaDx?B%T89MBCrC~E3ul|r z0z%Z`H}X8KhWrhrYvUtxkn_lMZV=bs4Pf9I)C!IV?|}X_e&R(hi<16IMuC%Y^t}9; zh!=FP9~@;@4@>&)F0OHIB(^2Q3yh$ z?c~Io$wU$o0x}{ZA??aL+(Wyh9E$oatM+|ij9RlCIxbB)0b8R^=6Eruisymy{OfP@ zRx)UhuJd?Vdyk+NVN7c$D?~Iu;KJ6-!VWHRZx!6Za*N+9i;Kqr8j# zoN!573g@~>@tua0!Z2pi7)f&kTR!7%J<$vV} zsR6Z-<`qxm`OF;d<7a48S=iPy^eRV;5=A;uN1I9@-SvBA0F`GXX_g;oD4}^T>p@8| zUCVz&C>Y7axAxdfcrN6D0L>2>^}%FQXU7IW#^d-|AAiN1#lgnNp-JBk)hIwew(?P4 z>l8V7qPE%bxpRZBtp64^Uj%(L6GuHgMqB`CL>gi8qeh=27Cukl@L zojcT#b)zc!DYsqYKfCS~+N@@7a61<>hjp-9jW*UN%kN-ayq~ZI%|K~^p3@FRags+Q zc%iZi#t9AjVQc)xlXdEMF($jotqkzi-c9dEMjSS};K|5oGY3_Kg&>ig!R9EhFsP{H zq#s#=PbTggaX7+a>@x?_V3yQf;pTGAn7qmK?; z04@L*7G)Y$*pyN;vl3FWFAgo*;=O7zRY{9%MTLC4F*bKMXh;3u1hPz={Ui30%4lUc zjaHw5f=4i^hX!R zl+y~RB|5LRLq4Whs6u3ja?eow$#N0D8NS+G)MF2BB3A9<24+jHIfiy6puq(V1dXx| z!(6;U^x|jZMZF8Sw}B86S9e#z2O+WZ*pierb`ZQ_mreve z6KBnJUBWDIf8GcA$}cqL_Uh0lNaIpZ8B6wX@nPjXg-I$+n?D659vQQa&SATeHspkI>JvjbQG|^V1S_flMubN zo$BM)e52*8XTQRum|pN}#F`xX->ufhdU5BlgmA`l(GKU$ zSBRcI$C*eRkg+*jVX$@?uwvO3U@-*p1m1zt09oa1mv+^m24Nx6UugrQ-aFdt<~xX$ z&uc*UvYi)-{%l8tTbJvl@?OLwt^hVKG1}mX^kd3l=3-HM&dK$`h3c~p8KM=;*ssWd zT1X;h!43WB<&>KXVWoY#*LcHs(5n+HRzC5Av}4)?W>ZTL3`XW%=wu!8d&xf|6*Q2 z-U|OVDfX;*zlA`U9{q=Ed3@5-&hjRPeK0+bIhQH9l3dejMkqg;-ytd>K)-2;P?sD5 zAs`hng%tOP(t{)^DSyIGy#b{0c3MD01s0f@096|2HJWHuI!HvQSmGPp!6^)ZHArS) zBc!INLd-`c+6cAgRWU>)RIO1|u)enx+LUrzR&;hou~Ts%P!R@X;}=HacnghNDDgP#F7D|Vl_re&3YU0#NK(_C-ZLAX@}N69QfY}esu&x*+J49zqle4Q{8&3 z;A2e)gKlQ%J-@V2ipH<)KkV1 zDScVc-kv9y#ATUwm=W{&Hr-^c z$X5B70Xw=BwQ@d)#zM#vZ0+^zS|(wr7GlEV`19;R4scggKAxwcg16>2{??!B4SRjw z;5dahWmRz2@&@atD7-z_H$p!i2=eyJ8JSz6BewP4qQ&7bFGgW{VPs8 zgk?%%S2T%cqxsuXr<=MMcq-v)tC7_>Qk}@a{guMO+^Gu%AFnU$*!=%aB^6#aUt2c0 z;YD%1xghw6%Op)WehMsAghC(c<5W6niM^pu_uWca>nw;!*4LW~6?|kmb*mJ8EMSIp zn>9@emzH#LC1j?c*3c|t)`r}}zDRKgX)tKZek#jsUsId7$@jhXY)tyrPKzYN4K}Px0jcbzNrL)#Ahz0K_Ehp z2LngttXJ;tx^pwmByH=cVh1rqL;Vs~Glp2S!{QkGv#_}wRHQTravXO|%(rq2!RE+%8HzHGwQYFBw_>u1-&io|LlVDm|paa{{W}~q)56b5s~xQ zRO>7}GV{|3iHJ2qWywVj$$zlKBj_Z#q>KiafD*806mwSKq^&84K#wDnl}F&aygr%! z-{ABhM)%q1%q_sw(+h@X#w1WuRmip2aV57{Dd|OFMu$Rz@qseOb+RK95c=Slp|Gk| z^!R`3QNmQ=I`^NMuvCvs7t;c29MoUw%@t+Hlm zSQYOpgeRt?EpGbx2!XB_7*jM1D5wxhOZyQ>E|(Zm)|l!5yV2*xkV{Bn=xjWqpenF`{r!18g|SCw}!X5Ku0RT!KZq2Op?X{_cP-C{E^%qyD)#8iesgR**M zB^0id>X5Y=?IN#*%F08QmK_i|iiYYFGCrVZDs);zU`*M%Fsd4{-n-hb4HVGgfGc}A z$rFv0NAH8sCzsZilwE-`&EiZlY3ZG#mzR)$QDbZFjD@jgXv2)xeydSOupyM64SI#y zISHt5{Eic46EJZxsDm57N-WSYFGZz`I`cx)Jd`Fh)kRZCNMDb)hxOT3z;aNM^HqIo zV3PA4F6%oHN7`mXa)VqP(vop5d@Gr_Pc~ff=Pq?PDG~;%btN&Ci|wK+7SM1Igd)Z& zJ@V}eXn_hA>_c5h+SiKT}EG(K|k=R$X(G zEV_X>42v_0td_^Drr}JL=s6TXXBeFQ_zEbn#TCh+jC#;$I8ST>L+fc75F%W!GWv`Yo~$fzf}n?h5A z!?J_3v%|yVqr+v6))Q3u_p&cGYS!4O~xgv*TF=EF^D zwv89Xl>eMMR{QL&9q@l9I!c&$6OO>KfNLV>dx4NHg(FD0{WRx5!0~}^-_~l}YrJA| zs8wRWZpsb`wBhKvKEV|H)-gFIyt}j?pJRx>=O3w9LVL`7YllY7UB2%h5W1SjmqT^N vj|&}}zS{&llV(U^`R0Ndwp6>lMwi^c3WoL0VK86@|KjdQrwS4o{d*sv%T@y- literal 165520 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 AVD`h9*T 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 |t+8i7;EX^egsm3peoPsONQz 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 w>$nVNa_3 Date: Fri, 27 Jan 2023 14:48:45 -0500 Subject: [PATCH 15/27] Update vignettes with new feature importance cols - `names` renamed to `feat` - `lower` and `upper` for bounds of 95% CI --- vignettes/introduction.Rmd | 10 ++++++---- vignettes/parallel.Rmd | 40 +++++++++++++++++++++++++++++++++++--- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/vignettes/introduction.Rmd b/vignettes/introduction.Rmd index e3634000..464400e1 100644 --- a/vignettes/introduction.Rmd +++ b/vignettes/introduction.Rmd @@ -484,9 +484,11 @@ There are several columns: 1. `perf_metric`: The performance value of the permuted feature. 1. `perf_metric_diff`: The difference between the performance for the actual and permuted data (i.e. test performance minus permuted performance). Features with a larger `perf_metric_diff` are more important. 1. `pvalue`: the probability of obtaining the actual performance value under the null hypothesis. -1. `names`: The feature that was permuted. -1. `method`: The ML method used. -1. `perf_metric_name`: The performance metric used. +1. `lower`: the lower bound for the 95% confidence interval of `perf_metric`. +1. `upper`: the upper bound for the 95% confidence interval of `perf_metric`. +1. `feat`: The feature (or group of correlated features) that was permuted. +1. `method`: The [ML method](#the-methods-we-support) used. +1. `perf_metric_name`: The [name of the performance metric](#-changing-the-performance-metric) represented by `perf_metric` & `perf_metric_diff`. 1. `seed`: The seed (if set). As you can see here, the differences are negligible (close to zero), which makes @@ -511,7 +513,7 @@ results_imp_corr <- run_ml(otu_mini_bin, results_imp_corr$feature_importance ``` -You can see which features were permuted together in the `names` column. Here +You can see which features were permuted together in the `feat` column. Here all 3 features were permuted together (which doesn't really make sense, but it's just an example). diff --git a/vignettes/parallel.Rmd b/vignettes/parallel.Rmd index 0018f75a..82715902 100644 --- a/vignettes/parallel.Rmd +++ b/vignettes/parallel.Rmd @@ -254,6 +254,8 @@ be positive. In other words, the features that resulted in the largest **decrease** in performance when permuted are the most important features. +##### Feature importance for multiple models + You can select the top n most important features for your models and plot them like so: @@ -263,14 +265,14 @@ feat_df <- results_mtx["feature_importance", ] %>% top_n <- 5 top_feats <- feat_df %>% - group_by(method, names) %>% + group_by(method, feat) %>% summarize(median_diff = median(perf_metric_diff)) %>% filter(median_diff > 0) %>% slice_max(order_by = median_diff, n = top_n) feat_df %>% - right_join(top_feats, by = c("method", "names")) %>% - mutate(features = factor(names, levels = rev(unique(top_feats$names)))) %>% + right_join(top_feats, by = c("method", "feat")) %>% + mutate(features = factor(feat, levels = rev(unique(top_feats$feat)))) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + theme_bw() @@ -279,6 +281,38 @@ feat_df %>% See the docs for `get_feature_importance()` for more details on how these values are computed. +##### Feature importance for a single model + +You can also plot feature importance for a single model. +Here we report the actual performance, the permutation performance, and the +empirical 95% confidence interval for the permutation performance. + +```{r feat_imp_single} +feat_imp_1 <- results_mtx[, 1][['feature_importance']] +perf_metric_name <- results_mtx[, 1][['trained_model']]$metric +perf_actual <- results_mtx[, 1][['performance']] %>% pull(perf_metric_name) + +feat_imp_1 %>% + arrange(perf_metric_diff) %>% + mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), feat) %>% + as.factor() %>% + forcats::fct_reorder(perf_metric_diff) + ) %>% + ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + + geom_pointrange() + + geom_vline(xintercept = perf_actual, linetype = 'dashed') + + labs(x = 'Permutation performance', y = 'Feature', + caption = paste('The dashed line represents the actual performance on the test set.', + 'Features which have a lower performance when permuted are important for model performance.', + 'Significant features (pvalue < 0.05) are marked with an asterisk (*).', + 'Error bars represent the 95% confidence interval.', sep = '\n') + ) + + theme_bw() +``` + + + + ## Live progress updates `preprocess_data()` and `get_feature_importance()` support reporting live From bb3242f1d15cf28bbb0d71e0197840c74156becf Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 14:49:40 -0500 Subject: [PATCH 16/27] document() --- man/get_feature_importance.Rd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/man/get_feature_importance.Rd b/man/get_feature_importance.Rd index 1de06f35..27df7771 100644 --- a/man/get_feature_importance.Rd +++ b/man/get_feature_importance.Rd @@ -70,7 +70,7 @@ by \code{stats::cor}: spearman, pearson, kendall. (default: spearman)} } \value{ Data frame with performance metrics for when each feature (or group -of correlated features; \code{names}) is permuted (\code{perf_metric}), differences +of correlated features; \code{feat}) is permuted (\code{perf_metric}), differences between the actual test performance metric on and the permuted performance metric (\code{perf_metric_diff}; test minus permuted performance), and the p-value (\code{pvalue}: the probability of obtaining the actual performance From 4cad41515b8c84ca7700fd85ea111de7ebce476d Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 15:04:27 -0500 Subject: [PATCH 17/27] Update NEWS w/ feature importance improvements --- NEWS.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/NEWS.md b/NEWS.md index 333116f4..8e55274f 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,6 +1,10 @@ # mikropml development version - Minor documentation improvements (#323, @kelly-sovacool). +- Improved output from `find_feature_importance()` (#326, @kelly-sovacool). + - Renamed the column `names` to `feat` to represent each feature or group of correlated features. + - New column `lower` and `upper` to report the bounds of the empirical 95% confidence interval from the permutation test. + See `vignette('parallel')` for an example of plotting feature importance with confidence intervals. # mikropml 1.5.0 From a40c08c00d7534661a5f97b9c6706bcb43175252 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 20:18:36 +0000 Subject: [PATCH 18/27] =?UTF-8?q?=F0=9F=8E=A8=20Style=20R=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- R/run_ml.R | 8 +- tests/testthat/test-feature_importance.R | 291 ++++++++++++++--------- vignettes/parallel.Rmd | 42 ++-- 3 files changed, 204 insertions(+), 137 deletions(-) diff --git a/R/run_ml.R b/R/run_ml.R index 72c96f5b..7abe8b82 100644 --- a/R/run_ml.R +++ b/R/run_ml.R @@ -175,10 +175,10 @@ run_ml <- } dataset <- dataset %>% - randomize_feature_order(outcome_colname) %>% - # convert tibble to dataframe to silence warning from caret::train(): - # "Warning: Setting row names on a tibble is deprecated.." - as.data.frame() + randomize_feature_order(outcome_colname) %>% + # convert tibble to dataframe to silence warning from caret::train(): + # "Warning: Setting row names on a tibble is deprecated.." + as.data.frame() outcomes_vctr <- dataset %>% dplyr::pull(outcome_colname) diff --git a/tests/testthat/test-feature_importance.R b/tests/testthat/test-feature_importance.R index a13550b0..1f23f286 100644 --- a/tests/testthat/test-feature_importance.R +++ b/tests/testthat/test-feature_importance.R @@ -21,7 +21,8 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049", 0.6473684 ), - c(perf_metric = 0.647368421052632, + c( + perf_metric = 0.647368421052632, perf_metric_diff = -2.10526316379855e-08, pvalue = 1, lower = 0.647368421052632, @@ -38,7 +39,8 @@ test_that("find_permuted_perf_metric works", { "AUC", TRUE, "Otu00049|Otu00050", 0.6473684 ), - c(perf_metric = 0.647368421052632, + c( + perf_metric = 0.647368421052632, perf_metric_diff = -2.10526316379855e-08, pvalue = 1, lower = 0.647368421052632, @@ -57,11 +59,11 @@ test_that("find_permuted_perf_metric works", { 0.6473684 ), c( - perf_metric = 0.639315789473684, - perf_metric_diff = 0.00805261052631578, - pvalue = 0.188118811881188, - lower = 0.621052631578947, - upper = 0.655263157894737 + perf_metric = 0.639315789473684, + perf_metric_diff = 0.00805261052631578, + pvalue = 0.188118811881188, + lower = 0.621052631578947, + upper = 0.655263157894737 ), tolerance = 10e-4 ) @@ -83,36 +85,56 @@ test_that("feature importances are correct", { seed = 2019, corr_thresh = 1 ), - structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, - 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, - 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 - ), - perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, - 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, - 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, - 0.00768421052631585, 0.00984210526315787), - pvalue = c(0.237623762376238, - 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, - 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, - 0.435643564356436), - lower = c(0.581578947368421, 0.531578947368421, - 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, - 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + structure( + list( + perf_metric = c( + 0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c( + 0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787 + ), + pvalue = c( + 0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436 + ), + lower = c( + 0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c( + 0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947 + ), + feat = structure(1:10, levels = c( + "Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010" + ), class = "factor"), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC" + ), + seed = c( + 2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019 + ) + ), + row.names = c(NA, -10L), class = "data.frame" ), - upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, - 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, - 0.660526315789474, 0.652631578947368, 0.721052631578947), - feat = structure(1:10, levels = c("Otu00001", - "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010"), class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet"), - perf_metric_name = c("AUC", "AUC", "AUC", - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), - seed = c(2019, - 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), - row.names = c(NA, -10L), class = "data.frame"), tolerance = 0.1 # https://blog.r-hub.io/2019/05/21/nold/ ) }) @@ -132,36 +154,56 @@ test_that("feature importances are correct when tibbles used", { seed = 2019, corr_thresh = 1 ), - structure(list(perf_metric = c(0.629157894736842, 0.605473684210526, - 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, - 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + structure( + list( + perf_metric = c( + 0.629157894736842, 0.605473684210526, + 0.63878947368421, 0.636763157894737, 0.629447368421053, 0.637868421052632, + 0.642552631578947, 0.592157894736842, 0.639684210526316, 0.637526315789474 + ), + perf_metric_diff = c( + 0.0182105263157895, 0.0418947368421053, + 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, + 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, + 0.00768421052631585, 0.00984210526315787 + ), + pvalue = c( + 0.237623762376238, + 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, + 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, + 0.435643564356436 + ), + lower = c( + 0.581578947368421, 0.531578947368421, + 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, + 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 + ), + upper = c( + 0.668421052631579, 0.657894736842105, 0.652631578947368, + 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, + 0.660526315789474, 0.652631578947368, 0.721052631578947 + ), + feat = structure(1:10, levels = c( + "Otu00001", + "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", + "Otu00008", "Otu00009", "Otu00010" + ), class = "factor"), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC" + ), + seed = c( + 2019, + 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019 + ) + ), + row.names = c(NA, -10L), class = "data.frame" ), - perf_metric_diff = c(0.0182105263157895, 0.0418947368421053, - 0.00857894736842113, 0.0106052631578948, 0.0179210526315789, - 0.00950000000000006, 0.00481578947368422, 0.0552105263157895, - 0.00768421052631585, 0.00984210526315787), - pvalue = c(0.237623762376238, - 0.099009900990099, 0.188118811881188, 0.376237623762376, 0.386138613861386, - 0.356435643564356, 0.287128712871287, 0.118811881188119, 0.217821782178218, - 0.435643564356436), - lower = c(0.581578947368421, 0.531578947368421, - 0.618421052631579, 0.581578947368421, 0.494736842105263, 0.594736842105263, - 0.623684210526316, 0.521052631578947, 0.623684210526316, 0.555263157894737 - ), - upper = c(0.668421052631579, 0.657894736842105, 0.652631578947368, - 0.694736842105263, 0.718421052631579, 0.678947368421053, 0.657894736842105, - 0.660526315789474, 0.652631578947368, 0.721052631578947), - feat = structure(1:10, levels = c("Otu00001", - "Otu00002", "Otu00003", "Otu00004", "Otu00005", "Otu00006", "Otu00007", - "Otu00008", "Otu00009", "Otu00010"), class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet"), - perf_metric_name = c("AUC", "AUC", "AUC", - "AUC", "AUC", "AUC", "AUC", "AUC", "AUC", "AUC"), - seed = c(2019, - 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019)), - row.names = c(NA, -10L), class = "data.frame"), tolerance = 10e-3 ) }) @@ -188,56 +230,79 @@ test_that("custom grouped features works", { seed = 2019, groups = groups ), - structure(list(perf_metric = c(0.629157894736842, 0.596921052631579, - 0.633605263157895, 0.639105263157895, - 0.642421052631579, 0.596842105263158, - 0.640289473684211, 0.629868421052632), - perf_metric_diff = c(0.0182105263157895, - 0.0504473684210527, 0.0137631578947369, - 0.00826315789473686, - 0.0049473684210527, 0.0505263157894738, - 0.00707894736842107, - 0.0175000000000001), - pvalue = c(0.237623762376238, 0.257425742574257, - 0.336633663366337, 0.366336633663366, - 0.336633663366337, 0.0891089108910891, - 0.207920792079208, 0.336633663366337), - lower = c(0.581578947368421, - 0.463157894736842, 0.58421052631579, 0.6, 0.623684210526316, - 0.523684210526316, 0.623684210526316, 0.560526315789474), - upper = c(0.668421052631579, - 0.7, 0.678947368421053, 0.668421052631579, - 0.657894736842105, - 0.671052631578947, 0.652631578947368, - 0.702631578947368), - feat = structure(1:8, - levels = c("Otu00001", - "Otu00002|Otu00003|Otu00005", - "Otu00004", "Otu00006", - "Otu00007", - "Otu00008", "Otu00009", - "Otu00010"), - class = "factor"), - method = c("glmnet", - "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", - "glmnet", "glmnet" - ), - perf_metric_name = c("AUC", "AUC", "AUC", "AUC", "AUC", - "AUC", "AUC", "AUC"), - seed = c(2019, 2019, 2019, 2019, 2019, 2019, 2019, - 2019)), - row.names = c(NA, -8L), class = "data.frame"), + structure( + list( + perf_metric = c( + 0.629157894736842, 0.596921052631579, + 0.633605263157895, 0.639105263157895, + 0.642421052631579, 0.596842105263158, + 0.640289473684211, 0.629868421052632 + ), + perf_metric_diff = c( + 0.0182105263157895, + 0.0504473684210527, 0.0137631578947369, + 0.00826315789473686, + 0.0049473684210527, 0.0505263157894738, + 0.00707894736842107, + 0.0175000000000001 + ), + pvalue = c( + 0.237623762376238, 0.257425742574257, + 0.336633663366337, 0.366336633663366, + 0.336633663366337, 0.0891089108910891, + 0.207920792079208, 0.336633663366337 + ), + lower = c( + 0.581578947368421, + 0.463157894736842, 0.58421052631579, 0.6, 0.623684210526316, + 0.523684210526316, 0.623684210526316, 0.560526315789474 + ), + upper = c( + 0.668421052631579, + 0.7, 0.678947368421053, 0.668421052631579, + 0.657894736842105, + 0.671052631578947, 0.652631578947368, + 0.702631578947368 + ), + feat = structure(1:8, + levels = c( + "Otu00001", + "Otu00002|Otu00003|Otu00005", + "Otu00004", "Otu00006", + "Otu00007", + "Otu00008", "Otu00009", + "Otu00010" + ), + class = "factor" + ), + method = c( + "glmnet", + "glmnet", "glmnet", "glmnet", "glmnet", "glmnet", + "glmnet", "glmnet" + ), + perf_metric_name = c( + "AUC", "AUC", "AUC", "AUC", "AUC", + "AUC", "AUC", "AUC" + ), + seed = c( + 2019, 2019, 2019, 2019, 2019, 2019, 2019, + 2019 + ) + ), + row.names = c(NA, -8L), class = "data.frame" + ), tolerance = 10e-3 ) }) test_that("empirical confidence interval works", { - x <- 1:10000 - alpha <- 0.05 - lower <- lower_bound(x, alpha) - upper <- upper_bound(x, alpha) - expect_equal(lower, 250) - expect_equal(upper, 9750) - expect_equal(length(c(x[1:lower-1], x[upper:length(x)])) / length(x), - alpha, - tolerance = 0.01) + x <- 1:10000 + alpha <- 0.05 + lower <- lower_bound(x, alpha) + upper <- upper_bound(x, alpha) + expect_equal(lower, 250) + expect_equal(upper, 9750) + expect_equal(length(c(x[1:lower - 1], x[upper:length(x)])) / length(x), + alpha, + tolerance = 0.01 + ) }) diff --git a/vignettes/parallel.Rmd b/vignettes/parallel.Rmd index 82715902..9babb0b4 100644 --- a/vignettes/parallel.Rmd +++ b/vignettes/parallel.Rmd @@ -288,26 +288,28 @@ Here we report the actual performance, the permutation performance, and the empirical 95% confidence interval for the permutation performance. ```{r feat_imp_single} -feat_imp_1 <- results_mtx[, 1][['feature_importance']] -perf_metric_name <- results_mtx[, 1][['trained_model']]$metric -perf_actual <- results_mtx[, 1][['performance']] %>% pull(perf_metric_name) - -feat_imp_1 %>% - arrange(perf_metric_diff) %>% - mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), feat) %>% - as.factor() %>% - forcats::fct_reorder(perf_metric_diff) - ) %>% - ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + - geom_pointrange() + - geom_vline(xintercept = perf_actual, linetype = 'dashed') + - labs(x = 'Permutation performance', y = 'Feature', - caption = paste('The dashed line represents the actual performance on the test set.', - 'Features which have a lower performance when permuted are important for model performance.', - 'Significant features (pvalue < 0.05) are marked with an asterisk (*).', - 'Error bars represent the 95% confidence interval.', sep = '\n') - ) + - theme_bw() +feat_imp_1 <- results_mtx[, 1][["feature_importance"]] +perf_metric_name <- results_mtx[, 1][["trained_model"]]$metric +perf_actual <- results_mtx[, 1][["performance"]] %>% pull(perf_metric_name) + +feat_imp_1 %>% + arrange(perf_metric_diff) %>% + mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), feat) %>% + as.factor() %>% + forcats::fct_reorder(perf_metric_diff)) %>% + ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + + geom_pointrange() + + geom_vline(xintercept = perf_actual, linetype = "dashed") + + labs( + x = "Permutation performance", y = "Feature", + caption = paste("The dashed line represents the actual performance on the test set.", + "Features which have a lower performance when permuted are important for model performance.", + "Significant features (pvalue < 0.05) are marked with an asterisk (*).", + "Error bars represent the 95% confidence interval.", + sep = "\n" + ) + ) + + theme_bw() ``` From d76219136c9033086e765d175bd9d85e17ef09af Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Fri, 27 Jan 2023 17:59:17 -0500 Subject: [PATCH 19/27] Improve feature importance plots --- vignettes/parallel.Rmd | 43 ++++++++++++++++++++++++++++-------------- 1 file changed, 29 insertions(+), 14 deletions(-) diff --git a/vignettes/parallel.Rmd b/vignettes/parallel.Rmd index 82715902..a803e13e 100644 --- a/vignettes/parallel.Rmd +++ b/vignettes/parallel.Rmd @@ -125,7 +125,10 @@ param_grid <- expand.grid( ) results_mtx <- future.apply::future_mapply( function(seed, method) { - run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE) + run_ml(otu_data_preproc, + method, + seed = seed, + find_feature_importance = TRUE) }, param_grid$seeds, param_grid$methods %>% as.character(), @@ -266,16 +269,25 @@ feat_df <- results_mtx["feature_importance", ] %>% top_n <- 5 top_feats <- feat_df %>% group_by(method, feat) %>% - summarize(median_diff = median(perf_metric_diff)) %>% - filter(median_diff > 0) %>% - slice_max(order_by = median_diff, n = top_n) + summarize(mean_diff = median(perf_metric_diff)) %>% + filter(mean_diff > 0) %>% + slice_max(order_by = mean_diff, n = top_n) feat_df %>% right_join(top_feats, by = c("method", "feat")) %>% - mutate(features = factor(feat, levels = rev(unique(top_feats$feat)))) %>% + mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + - theme_bw() + geom_vline(xintercept = 0, linetype = 'dashed') + + labs(x = 'Decrease in performance (actual minus permutation)', + y = 'Features', + caption = 'Features which have a lower performance when permuted have a + difference in performance above zero. The features with the greatest + decrease are the most important for model performance.' %>% + stringr::str_wrap(width = 100) + ) + + theme_bw() + + theme(plot.caption = element_text(hjust = 0)) ``` See the docs for `get_feature_importance()` for more details on how these values @@ -293,21 +305,24 @@ perf_metric_name <- results_mtx[, 1][['trained_model']]$metric perf_actual <- results_mtx[, 1][['performance']] %>% pull(perf_metric_name) feat_imp_1 %>% - arrange(perf_metric_diff) %>% - mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), feat) %>% + filter(perf_metric_diff > 0) %>% + mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), as.character(feat)) %>% as.factor() %>% forcats::fct_reorder(perf_metric_diff) ) %>% ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + geom_pointrange() + geom_vline(xintercept = perf_actual, linetype = 'dashed') + - labs(x = 'Permutation performance', y = 'Feature', - caption = paste('The dashed line represents the actual performance on the test set.', - 'Features which have a lower performance when permuted are important for model performance.', - 'Significant features (pvalue < 0.05) are marked with an asterisk (*).', - 'Error bars represent the 95% confidence interval.', sep = '\n') + labs(x = 'Permutation performance', + y = 'Features', + caption = 'The dashed line represents the actual performance on the + test set. Features which have a lower performance when permuted are + important for model performance. Significant features (pvalue < 0.05) + are marked with an asterisk (*). Error bars represent the 95% + confidence interval.' %>% stringr::str_wrap(width = 110) ) + - theme_bw() + theme_bw() + + theme(plot.caption = element_text(hjust = 0)) ``` From 118be2c2b54804ec8f5378974cdd952e3e7c103a Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 27 Jan 2023 23:12:54 +0000 Subject: [PATCH 20/27] =?UTF-8?q?=F0=9F=8E=A8=20Style=20R=20code?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vignettes/parallel.Rmd | 70 ++++++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/vignettes/parallel.Rmd b/vignettes/parallel.Rmd index a803e13e..99e3c921 100644 --- a/vignettes/parallel.Rmd +++ b/vignettes/parallel.Rmd @@ -125,10 +125,11 @@ param_grid <- expand.grid( ) results_mtx <- future.apply::future_mapply( function(seed, method) { - run_ml(otu_data_preproc, - method, - seed = seed, - find_feature_importance = TRUE) + run_ml(otu_data_preproc, + method, + seed = seed, + find_feature_importance = TRUE + ) }, param_grid$seeds, param_grid$methods %>% as.character(), @@ -278,14 +279,15 @@ feat_df %>% mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + - geom_vline(xintercept = 0, linetype = 'dashed') + - labs(x = 'Decrease in performance (actual minus permutation)', - y = 'Features', - caption = 'Features which have a lower performance when permuted have a + geom_vline(xintercept = 0, linetype = "dashed") + + labs( + x = "Decrease in performance (actual minus permutation)", + y = "Features", + caption = "Features which have a lower performance when permuted have a difference in performance above zero. The features with the greatest - decrease are the most important for model performance.' %>% - stringr::str_wrap(width = 100) - ) + + decrease are the most important for model performance." %>% + stringr::str_wrap(width = 100) + ) + theme_bw() + theme(plot.caption = element_text(hjust = 0)) ``` @@ -300,29 +302,29 @@ Here we report the actual performance, the permutation performance, and the empirical 95% confidence interval for the permutation performance. ```{r feat_imp_single} -feat_imp_1 <- results_mtx[, 1][['feature_importance']] -perf_metric_name <- results_mtx[, 1][['trained_model']]$metric -perf_actual <- results_mtx[, 1][['performance']] %>% pull(perf_metric_name) - -feat_imp_1 %>% - filter(perf_metric_diff > 0) %>% - mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), as.character(feat)) %>% - as.factor() %>% - forcats::fct_reorder(perf_metric_diff) - ) %>% - ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + - geom_pointrange() + - geom_vline(xintercept = perf_actual, linetype = 'dashed') + - labs(x = 'Permutation performance', - y = 'Features', - caption = 'The dashed line represents the actual performance on the - test set. Features which have a lower performance when permuted are - important for model performance. Significant features (pvalue < 0.05) - are marked with an asterisk (*). Error bars represent the 95% - confidence interval.' %>% stringr::str_wrap(width = 110) - ) + - theme_bw() + - theme(plot.caption = element_text(hjust = 0)) +feat_imp_1 <- results_mtx[, 1][["feature_importance"]] +perf_metric_name <- results_mtx[, 1][["trained_model"]]$metric +perf_actual <- results_mtx[, 1][["performance"]] %>% pull(perf_metric_name) + +feat_imp_1 %>% + filter(perf_metric_diff > 0) %>% + mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), as.character(feat)) %>% + as.factor() %>% + forcats::fct_reorder(perf_metric_diff)) %>% + ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + + geom_pointrange() + + geom_vline(xintercept = perf_actual, linetype = "dashed") + + labs( + x = "Permutation performance", + y = "Features", + caption = "The dashed line represents the actual performance on the + test set. Features which have a lower performance when permuted are + important for model performance. Significant features (pvalue < 0.05) + are marked with an asterisk (*). Error bars represent the 95% + confidence interval." %>% stringr::str_wrap(width = 110) + ) + + theme_bw() + + theme(plot.caption = element_text(hjust = 0)) ``` From 69ba636de157f54e25eac473fdf678ee7b7302f0 Mon Sep 17 00:00:00 2001 From: Kelly Sovacool Date: Sat, 28 Jan 2023 14:40:39 -0500 Subject: [PATCH 21/27] pkgdown::build_article('parallel') --- docs/dev/articles/parallel.html | 95 ++++++++++++------ .../figure-html/feat_imp_plot-1.png | Bin 39472 -> 56929 bytes .../figure-html/feat_imp_single-1.png | Bin 0 -> 58141 bytes 3 files changed, 62 insertions(+), 33 deletions(-) create mode 100644 docs/dev/articles/parallel_files/figure-html/feat_imp_single-1.png diff --git a/docs/dev/articles/parallel.html b/docs/dev/articles/parallel.html index c67ab943..0aa0a67f 100644 --- a/docs/dev/articles/parallel.html +++ b/docs/dev/articles/parallel.html @@ -17,7 +17,7 @@ - + @@ -170,13 +170,6 @@

    Call run_ml() #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 -#> Loading required package: lattice -#> -#> Attaching package: 'caret' -#> The following object is masked from 'package:mikropml': -#> -#> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... @@ -194,7 +187,7 @@

    Call run_ml() future.apply package to run_ml() in parallel, but you can accomplish the same thing with parallel versions of the purrr::map() functions using the furrr package -(e.g. furrr::future_map_dfr()).

    +(e.g. furrr::future_map_dfr()).

    Extract the performance results and combine into one dataframe for all seeds:

    @@ -227,7 +220,11 @@ 

    Multiple ML methods) results_mtx <- future.apply::future_mapply( function(seed, method) { - run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE) + run_ml(otu_data_preproc, + method, + seed = seed, + find_feature_importance = TRUE + ) }, param_grid$seeds, param_grid$methods %>% as.character(), @@ -235,13 +232,6 @@

    Multiple ML methods) #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 -#> Loading required package: lattice -#> -#> Attaching package: 'caret' -#> The following object is masked from 'package:mikropml': -#> -#> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. @@ -262,13 +252,6 @@

    Multiple ML methods#> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 -#> Loading required package: lattice -#> -#> Attaching package: 'caret' -#> The following object is masked from 'package:mikropml': -#> -#> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. @@ -425,6 +408,9 @@

    Feature importance +
    Feature importance for multiple models +

    You can select the top n most important features for your models and plot them like so:

    @@ -433,23 +419,66 @@ 

    Feature importancetop_n <- 5 top_feats <- feat_df %>% - group_by(method, names) %>% - summarize(median_diff = median(perf_metric_diff)) %>% - filter(median_diff > 0) %>% - slice_max(order_by = median_diff, n = top_n) + group_by(method, feat) %>% + summarize(mean_diff = median(perf_metric_diff)) %>% + filter(mean_diff > 0) %>% + slice_max(order_by = mean_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% - right_join(top_feats, by = c("method", "names")) %>% - mutate(features = factor(names, levels = rev(unique(top_feats$names)))) %>% + right_join(top_feats, by = c("method", "feat")) %>% + mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + - theme_bw()

    + geom_vline(xintercept = 0, linetype = "dashed") + + labs( + x = "Decrease in performance (actual minus permutation)", + y = "Features", + caption = "Features which have a lower performance when permuted have a + difference in performance above zero. The features with the greatest + decrease are the most important for model performance." %>% + stringr::str_wrap(width = 100) + ) + + theme_bw() + + theme(plot.caption = element_text(hjust = 0))

    See the docs for get_feature_importance() for more details on how these values are computed.

    +
    +
    Feature importance for a single model +
    +

    You can also plot feature importance for a single model. Here we +report the actual performance, the permutation performance, and the +empirical 95% confidence interval for the permutation performance.

    +
    +feat_imp_1 <- results_mtx[, 1][["feature_importance"]]
    +perf_metric_name <- results_mtx[, 1][["trained_model"]]$metric
    +perf_actual <- results_mtx[, 1][["performance"]] %>% pull(perf_metric_name)
    +
    +feat_imp_1 %>%
    +  filter(perf_metric_diff > 0) %>%
    +  mutate(feat = if_else(pvalue < 0.05, paste0("*", feat), as.character(feat)) %>%
    +    as.factor() %>%
    +    forcats::fct_reorder(perf_metric_diff)) %>%
    +  ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) +
    +  geom_pointrange() +
    +  geom_vline(xintercept = perf_actual, linetype = "dashed") +
    +  labs(
    +    x = "Permutation performance",
    +    y = "Features",
    +    caption = "The dashed line represents the actual performance on the
    +         test set. Features which have a lower performance when permuted are
    +         important for model performance. Significant features (pvalue < 0.05)
    +         are marked with an asterisk (*). Error bars represent the 95%
    +         confidence interval." %>% stringr::str_wrap(width = 110)
    +  ) +
    +  theme_bw() +
    +  theme(plot.caption = element_text(hjust = 0))
    +

    +
    +
    @@ -459,7 +488,7 @@

    Live progress updatesget_feature_importance() support reporting live progress updates using the progressr package. The format is up to you, but we recommend using a progress bar like this:

    -
    +
     # optionally, specify the progress bar format with the `progress` package.
     progressr::handlers(progressr::handler_progress(
       format = ":message :bar :percent | elapsed: :elapsed | eta: :eta",
    @@ -519,7 +548,7 @@ 

    Parallelizing with Snakemake

    -

    Site built with pkgdown 2.0.7.

    +

    Site built with pkgdown 2.0.6.

    diff --git a/docs/dev/articles/parallel_files/figure-html/feat_imp_plot-1.png b/docs/dev/articles/parallel_files/figure-html/feat_imp_plot-1.png index ec7efc4fd5216bedf873534d4e297bc592620020..7a43acfd35d8ab9ef09085f313b51de4ecf53c24 100644 GIT binary patch literal 56929 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 Date: Sat, 28 Jan 2023 15:32:34 -0500 Subject: [PATCH 22/27] Add {forcats} to suggests for parallel vignette --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index 05651fbc..6ab9af0e 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -75,6 +75,7 @@ Imports: xgboost Suggests: doFuture, + forcats, foreach, future, future.apply, From d2007c1e8533dff5d3ab63a035a2b01e08eb3a6f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 28 Jan 2023 20:50:10 +0000 Subject: [PATCH 23/27] =?UTF-8?q?=F0=9F=93=84=20Render=20README.Rmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 6959ed9e..3c710c48 100644 --- a/README.md +++ b/README.md @@ -56,8 +56,8 @@ mamba install -c conda-forge r-mikropml - Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost -- Suggests: doFuture, foreach, future, future.apply, ggplot2, knitr, - progress, progressr, purrr, rmarkdown, testthat, tidyr +- Suggests: doFuture, forcats, foreach, future, future.apply, ggplot2, + knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr ## Usage From ab38c0162c0a9c197a441299469a98d1600de866 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Sat, 28 Jan 2023 21:17:39 +0000 Subject: [PATCH 24/27] =?UTF-8?q?=F0=9F=93=91=20Build=20docs=20site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dev/articles/introduction.html | 22 ++++++++++----- docs/dev/articles/parallel.html | 27 ++++++++++++++++--- docs/dev/index.html | 2 +- docs/dev/pkgdown.yml | 2 +- .../dev/reference/get_feature_importance.html | 2 +- docs/dev/reference/get_perf_metric_fn.html | 6 ++--- docs/dev/search.json | 2 +- 7 files changed, 47 insertions(+), 16 deletions(-) diff --git a/docs/dev/articles/introduction.html b/docs/dev/articles/introduction.html index 976dc8c0..6e1e8b45 100644 --- a/docs/dev/articles/introduction.html +++ b/docs/dev/articles/introduction.html @@ -656,7 +656,7 @@

    Finding feature importanceNow, we can check out the feature importances:

  2. -names: The feature that was permuted.
  3. +lower: the lower bound for the 95% confidence interval +of perf_metric.
  4. -method: The ML method used.
  5. +upper: the upper bound for the 95% confidence interval +of perf_metric.
  6. -perf_metric_name: The performance metric used.
  7. +feat: The feature (or group of correlated features) +that was permuted. +
  8. +method: The ML +method used.
  9. +
  10. +perf_metric_name: The name of the performance +metric represented by perf_metric & +perf_metric_diff.
  11. seed: The seed (if set).
@@ -730,12 +740,12 @@

Finding feature importanceresults_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 -#> names +#> feat #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019

You can see which features were permuted together in the -names column. Here all 3 features were permuted together +feat column. Here all 3 features were permuted together (which doesn’t really make sense, but it’s just an example).

If you previously executed run_ml() without feature importance but now wish to find feature importance after the fact, see diff --git a/docs/dev/articles/parallel.html b/docs/dev/articles/parallel.html index 0aa0a67f..2dcdf9e6 100644 --- a/docs/dev/articles/parallel.html +++ b/docs/dev/articles/parallel.html @@ -17,7 +17,7 @@ - + @@ -170,6 +170,13 @@

Call run_ml() #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... +#> Loading required package: ggplot2 +#> Loading required package: lattice +#> +#> Attaching package: 'caret' +#> The following object is masked from 'package:mikropml': +#> +#> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... @@ -187,7 +194,7 @@

Call run_ml() future.apply package to run_ml() in parallel, but you can accomplish the same thing with parallel versions of the purrr::map() functions using the furrr package -(e.g. furrr::future_map_dfr()).

+(e.g. furrr::future_map_dfr()).

Extract the performance results and combine into one dataframe for all seeds:

diff --git a/docs/dev/index.html b/docs/dev/index.html index 0c3b6876..cac89698 100644 --- a/docs/dev/index.html +++ b/docs/dev/index.html @@ -125,7 +125,7 @@

DependenciesValue

Data frame with performance metrics for when each feature (or group -of correlated features; names) is permuted (perf_metric), differences +of correlated features; feat) is permuted (perf_metric), differences between the actual test performance metric on and the permuted performance metric (perf_metric_diff; test minus permuted performance), and the p-value (pvalue: the probability of obtaining the actual performance diff --git a/docs/dev/reference/get_perf_metric_fn.html b/docs/dev/reference/get_perf_metric_fn.html index 2c159a6e..631aa53e 100644 --- a/docs/dev/reference/get_perf_metric_fn.html +++ b/docs/dev/reference/get_perf_metric_fn.html @@ -93,7 +93,7 @@

Examples#> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, "pred"], data[, "obs"]) #> } -#> <bytecode: 0x7fa6eefdbfe8> +#> <bytecode: 0x7fafe4313a28> #> <environment: namespace:caret> get_perf_metric_fn("binary") #> function (data, lev = NULL, model = NULL) @@ -151,7 +151,7 @@

Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fa6d6ae6668> +#> <bytecode: 0x7fafe98d3e98> #> <environment: namespace:caret> get_perf_metric_fn("multiclass") #> function (data, lev = NULL, model = NULL) @@ -209,7 +209,7 @@

Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fa6d6ae6668> +#> <bytecode: 0x7fafe98d3e98> #> <environment: namespace:caret> diff --git a/docs/dev/search.json b/docs/dev/search.json index ace2ae2b..12bf0784 100644 --- a/docs/dev/search.json +++ b/docs/dev/search.json @@ -1 +1 @@ -[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. names: feature permuted. method: ML method used. perf_metric_name: performance metric used. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together names column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue lower upper names method #> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf #> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf #> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf #> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf #> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf #> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf #> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf #> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf #> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf #> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf #> perf_metric_name seed #> 1 AUC 2019 #> 2 AUC 2019 #> 3 AUC 2019 #> 4 AUC 2019 #> 5 AUC 2019 #> 6 AUC 2019 #> 7 AUC 2019 #> 8 AUC 2019 #> 9 AUC 2019 #> 10 AUC 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> names #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"library(ggplot2) perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features. can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, names) %>% summarize(median_diff = median(perf_metric_diff)) %>% filter(median_diff > 0) %>% slice_max(order_by = median_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"names\")) %>% mutate(features = factor(names, levels = rev(unique(top_feats$names)))) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + theme_bw()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: doFuture, foreach, future, future.apply, ggplot2, knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"Get lower upper bounds empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"lower_bound(x, alpha) upper_bound(x, alpha)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"x vector test statistics, permutation tests bootstraps alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"value lower upper bound confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"lower_bound(): Get lower bound empirical confidence interval upper_bound(): Get upper bound empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"if (FALSE) { x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":null,"dir":"Reference","previous_headings":"","what":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Requires future.apply package","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"","code":"find_permuted_perf_metric( test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, nperms = 100, alpha = 0.05, progbar = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). feat feature group correlated features permute. test_perf_value value true performance metric held-test data. nperms number permutations perform (default: 100). alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval) progbar optional progress bar (default: NULL)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"vector mean permuted performance mean difference test permuted performance (test minus permuted performance)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; names) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] +[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. lower: lower bound 95% confidence interval perf_metric. upper: upper bound 95% confidence interval perf_metric. feat: feature (group correlated features) permuted. method: ML method used. perf_metric_name: name performance metric represented perf_metric & perf_metric_diff. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together feat column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue lower upper feat method #> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf #> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf #> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf #> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf #> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf #> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf #> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf #> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf #> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf #> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf #> perf_metric_name seed #> 1 AUC 2019 #> 2 AUC 2019 #> 3 AUC 2019 #> 4 AUC 2019 #> 5 AUC 2019 #> 6 AUC 2019 #> 7 AUC 2019 #> 8 AUC 2019 #> 9 AUC 2019 #> 10 AUC 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> feat #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE ) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"library(ggplot2) perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-multiple-models","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for multiple models","title":"Parallel processing","text":"can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, feat) %>% summarize(mean_diff = median(perf_metric_diff)) %>% filter(mean_diff > 0) %>% slice_max(order_by = mean_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"feat\")) %>% mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + geom_vline(xintercept = 0, linetype = \"dashed\") + labs( x = \"Decrease in performance (actual minus permutation)\", y = \"Features\", caption = \"Features which have a lower performance when permuted have a difference in performance above zero. The features with the greatest decrease are the most important for model performance.\" %>% stringr::str_wrap(width = 100) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-a-single-model","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for a single model","title":"Parallel processing","text":"can also plot feature importance single model. report actual performance, permutation performance, empirical 95% confidence interval permutation performance.","code":"feat_imp_1 <- results_mtx[, 1][[\"feature_importance\"]] perf_metric_name <- results_mtx[, 1][[\"trained_model\"]]$metric perf_actual <- results_mtx[, 1][[\"performance\"]] %>% pull(perf_metric_name) feat_imp_1 %>% filter(perf_metric_diff > 0) %>% mutate(feat = if_else(pvalue < 0.05, paste0(\"*\", feat), as.character(feat)) %>% as.factor() %>% forcats::fct_reorder(perf_metric_diff)) %>% ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + geom_pointrange() + geom_vline(xintercept = perf_actual, linetype = \"dashed\") + labs( x = \"Permutation performance\", y = \"Features\", caption = \"The dashed line represents the actual performance on the test set. Features which have a lower performance when permuted are important for model performance. Significant features (pvalue < 0.05) are marked with an asterisk (*). Error bars represent the 95% confidence interval.\" %>% stringr::str_wrap(width = 110) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: doFuture, forcats, foreach, future, future.apply, ggplot2, knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"Get lower upper bounds empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"lower_bound(x, alpha) upper_bound(x, alpha)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"x vector test statistics, permutation tests bootstraps alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"value lower upper bound confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"lower_bound(): Get lower bound empirical confidence interval upper_bound(): Get upper bound empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"if (FALSE) { x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":null,"dir":"Reference","previous_headings":"","what":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Requires future.apply package","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"","code":"find_permuted_perf_metric( test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, nperms = 100, alpha = 0.05, progbar = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). feat feature group correlated features permute. test_perf_value value true performance metric held-test data. nperms number permutations perform (default: 100). alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval) progbar optional progress bar (default: NULL)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"vector mean permuted performance mean difference test permuted performance (test minus permuted performance)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; feat) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] From b002fa18f23d7bac6ad8aa527b2c5eb293d4ca81 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:03:08 +0000 Subject: [PATCH 25/27] =?UTF-8?q?=F0=9F=93=9A=20Render=20Roxygen=20documen?= =?UTF-8?q?tation?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- man/bootstrap_performance.Rd | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/man/bootstrap_performance.Rd b/man/bootstrap_performance.Rd index 61a9389b..363f2609 100644 --- a/man/bootstrap_performance.Rd +++ b/man/bootstrap_performance.Rd @@ -29,15 +29,16 @@ and upper bound (\code{.upper}) for each performance metric (\code{term}). Uses \code{\link[rsample:bootstraps]{rsample::bootstraps()}}, \code{\link[rsample:int_pctl]{rsample::int_pctl()}}, and \code{\link[furrr:future_map]{furrr::future_map()}} } \examples{ -bootstrap_performance(otu_mini_bin_results_glmnet, 'dx', - bootstrap_times = 10, alpha = 0.10) +bootstrap_performance(otu_mini_bin_results_glmnet, "dx", + bootstrap_times = 10, alpha = 0.10 +) \dontrun{ - outcome_colname <- 'dx' - run_ml(otu_mini_bin, 'rf', outcome_colname = 'dx') \%>\% - bootstrap_performance(outcome_colname, - bootstrap_times = 10000, - alpha = 0.05 - ) +outcome_colname <- "dx" +run_ml(otu_mini_bin, "rf", outcome_colname = "dx") \%>\% + bootstrap_performance(outcome_colname, + bootstrap_times = 10000, + alpha = 0.05 + ) } } \author{ From 717a8cc9c2f583a49f6f8018580e12bf9fc44f95 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:06:52 +0000 Subject: [PATCH 26/27] =?UTF-8?q?=F0=9F=93=84=20Render=20README.Rmd?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 1fe419a0..b2942899 100644 --- a/README.md +++ b/README.md @@ -56,9 +56,9 @@ mamba install -c conda-forge r-mikropml - Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost -- Suggests: assertthat, doFuture, foreach, future, future.apply, furrr, - ggplot2, knitr, progress, progressr, purrr, rmarkdown, rsample, - testthat, tidyr +- Suggests: assertthat, doFuture, forcats, foreach, future, + future.apply, furrr, ggplot2, knitr, progress, progressr, purrr, + rmarkdown, rsample, testthat, tidyr ## Usage From d192c41b2493653e23471eb3490032f54ce4cb3f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Feb 2023 18:29:57 +0000 Subject: [PATCH 27/27] =?UTF-8?q?=F0=9F=93=91=20Build=20docs=20site?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/dev/articles/introduction.html | 6 +- docs/dev/articles/parallel.html | 81 +++++++++++++------ docs/dev/index.html | 2 +- docs/dev/pkgdown.yml | 2 +- docs/dev/reference/bootstrap_performance.html | 49 +++++------ .../reference/calc_perf_bootstrap_split.html | 4 +- docs/dev/reference/get_perf_metric_fn.html | 6 +- docs/dev/reference/index.html | 5 ++ .../dev/reference/plot_model_performance.html | 4 +- docs/dev/reference/tidy_perf_data.html | 2 +- docs/dev/search.json | 2 +- docs/dev/sitemap.xml | 6 ++ 12 files changed, 108 insertions(+), 61 deletions(-) diff --git a/docs/dev/articles/introduction.html b/docs/dev/articles/introduction.html index 6e1e8b45..c6ecd0d5 100644 --- a/docs/dev/articles/introduction.html +++ b/docs/dev/articles/introduction.html @@ -598,10 +598,14 @@

Case weightsright_join(otu_mini_bin, by = "dx") %>% select(-starts_with("Otu")) %>% mutate( - row_num = row_number(), + row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) +#> Warning in right_join(., otu_mini_bin, by = "dx"): Each row in `x` is expected to match at most 1 row in `y`. +#> Row 1 of `x` matches multiple rows. +#> If multiple matches are expected, set `multiple = "all"` to silence this +#> warning. head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE diff --git a/docs/dev/articles/parallel.html b/docs/dev/articles/parallel.html index 2dcdf9e6..b3119999 100644 --- a/docs/dev/articles/parallel.html +++ b/docs/dev/articles/parallel.html @@ -115,7 +115,8 @@

Kelly L. #> filter, lag #> The following objects are masked from 'package:base': #> -#> intersect, setdiff, setequal, union +#> intersect, setdiff, setequal, union +library(ggplot2)

Speed up single runs

@@ -144,6 +145,42 @@

Speed up single runscaret docs for more information.

+
+

Bootstrap performance +

+

If you only intend to call run_ml() once to generate one +train/test split (e.g. such as for a temporal split of the dataset), you +can evaluate the model performance by bootstrapping the test set.

+

Here we show how to generate 100 bootstraps and +calculate a confidence interval for the model performance. We only use +100 here for computation speed, but it is recommended to +generate 10000 bootstraps for a more precise estimation of +the confidence interval.

+
+boot_perf <- bootstrap_performance(result1,
+  outcome_colname = "dx",
+  bootstrap_times = 100, alpha = 0.05
+)
+boot_perf
+#> # A tibble: 15 × 6
+#>    term              .lower .estimate .upper .alpha .method   
+#>    <chr>              <dbl>     <dbl>  <dbl>  <dbl> <chr>     
+#>  1 AUC                0.489     0.656  0.825   0.05 percentile
+#>  2 Accuracy           0.448     0.597  0.769   0.05 percentile
+#>  3 Balanced_Accuracy  0.441     0.597  0.753   0.05 percentile
+#>  4 Detection_Rate     0.166     0.307  0.462   0.05 percentile
+#>  5 F1                 0.412     0.597  0.759   0.05 percentile
+#>  6 Kappa             -0.119     0.189  0.507   0.05 percentile
+#>  7 Neg_Pred_Value     0.333     0.583  0.774   0.05 percentile
+#>  8 Pos_Pred_Value     0.425     0.610  0.812   0.05 percentile
+#>  9 Precision          0.425     0.610  0.812   0.05 percentile
+#> 10 Recall             0.387     0.598  0.810   0.05 percentile
+#> 11 Sensitivity        0.387     0.598  0.810   0.05 percentile
+#> 12 Specificity        0.342     0.596  0.789   0.05 percentile
+#> 13 cv_metric_AUC      0.622     0.622  0.622   0.05 percentile
+#> 14 logLoss            0.655     0.681  0.705   0.05 percentile
+#> 15 prAUC              0.465     0.592  0.736   0.05 percentile
+

Call run_ml() multiple times in parallel in R @@ -153,14 +190,13 @@

Call run_ml() parameters. You will first need to run future::plan() as above if you haven’t already. Then, call run_ml() with multiple seeds using future_lapply():

-
+
 # NOTE: use more seeds for real-world data
 results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) {
   run_ml(otu_data_preproc, "glmnet", seed = seed)
 }, future.seed = TRUE)
 #> Using 'dx' as the outcome column.
 #> Training the model...
-#> Loading required package: ggplot2
 #> Loading required package: lattice
 #> 
 #> Attaching package: 'caret'
@@ -170,7 +206,6 @@ 

Call run_ml() #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' @@ -194,10 +229,10 @@

Call run_ml() future.apply package to run_ml() in parallel, but you can accomplish the same thing with parallel versions of the purrr::map() functions using the furrr package -(e.g. furrr::future_map_dfr()).

+(e.g. furrr::future_map_dfr()).

Extract the performance results and combine into one dataframe for all seeds:

-
+
 perf_df <- future.apply::future_lapply(results_multi,
   function(result) {
     result[["performance"]] %>%
@@ -205,7 +240,7 @@ 

Call run_ml() }, future.seed = TRUE ) %>% - dplyr::bind_rows() + dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method @@ -219,7 +254,7 @@

Multiple ML methodsmapply() can iterate over multiple lists or vectors, and future_mapply() works the same way:

-
+
 # NOTE: use more seeds for real-world data
 param_grid <- expand.grid(
   seeds = seq(100, 103),
@@ -239,7 +274,6 @@ 

Multiple ML methods) #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' @@ -266,7 +300,6 @@

Multiple ML methods#> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... -#> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' @@ -304,23 +337,21 @@

Performance
Mean AUC
-
-library(ggplot2)
-
-perf_df <- lapply(
+
+perf_df <- lapply(
   results_mtx["performance", ],
   function(x) {
     x %>% select(cv_metric_AUC, AUC, method)
   }
 ) %>%
-  dplyr::bind_rows()
+  dplyr::bind_rows()
 
 perf_boxplot <- plot_model_performance(perf_df)
 perf_boxplot

plot_model_performance() returns a ggplot2 object. You can add layers to customize the plot:

-
+
 perf_boxplot +
   theme_classic() +
   scale_color_brewer(palette = "Dark2") +
@@ -332,7 +363,7 @@ 
ROC and PRC curves
+
 get_sensspec_seed <- function(colnum) {
   result <- results_mtx[, colnum]
   trained_model <- result$trained_model
@@ -362,7 +393,7 @@ 
ROC and PRC curves
Plot curves for a single model
-
+
 sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == "glmnet")
 sensspec_1 %>%
   ggplot(aes(x = specificity, y = sensitivity, )) +
@@ -378,7 +409,7 @@ 
Plot curves for a single modeltheme_bw() + theme(legend.title = element_blank())

-
+
 
 baseline_precision_otu <- calc_baseline_precision(
   otu_data_preproc,
@@ -404,12 +435,12 @@ 
Plot curves for a single model
Plot mean ROC and PRC for all models
-
+
 

-
+
 
 sensspec_dat %>%
   calc_mean_prc() %>%
@@ -434,9 +465,9 @@ 
Feature importance for multiple

You can select the top n most important features for your models and plot them like so:

-
+
 feat_df <- results_mtx["feature_importance", ] %>%
-  dplyr::bind_rows()
+  dplyr::bind_rows()
 
 top_n <- 5
 top_feats <- feat_df %>%
@@ -473,7 +504,7 @@ 
Feature importance for a single m

You can also plot feature importance for a single model. Here we report the actual performance, the permutation performance, and the empirical 95% confidence interval for the permutation performance.

-
+
 feat_imp_1 <- results_mtx[, 1][["feature_importance"]]
 perf_metric_name <- results_mtx[, 1][["trained_model"]]$metric
 perf_actual <- results_mtx[, 1][["performance"]] %>% pull(perf_metric_name)
@@ -509,7 +540,7 @@ 

Live progress updatesget_feature_importance() support reporting live progress updates using the progressr package. The format is up to you, but we recommend using a progress bar like this:

-
+
 # optionally, specify the progress bar format with the `progress` package.
 progressr::handlers(progressr::handler_progress(
   format = ":message :bar :percent | elapsed: :elapsed | eta: :eta",
diff --git a/docs/dev/index.html b/docs/dev/index.html
index cac89698..88597ba3 100644
--- a/docs/dev/index.html
+++ b/docs/dev/index.html
@@ -125,7 +125,7 @@ 

DependenciesCalculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance • mikropmlCalculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance • mikropml @@ -105,34 +105,35 @@

Author<

Examples

-
bootstrap_performance(otu_mini_bin_results_glmnet, 'dx',
-                      bootstrap_times = 10, alpha = 0.10)
+    
bootstrap_performance(otu_mini_bin_results_glmnet, "dx",
+  bootstrap_times = 10, alpha = 0.10
+)
 #> Warning: Recommend at least 1000 non-missing bootstrap resamples for terms: `AUC`, `Accuracy`, `Balanced_Accuracy`, `Detection_Rate`, `F1`, `Kappa`, `Neg_Pred_Value`, `Pos_Pred_Value`, `Precision`, `Recall`, `Sensitivity`, `Specificity`, `cv_metric_AUC`, `logLoss`, `prAUC`.
 #> # A tibble: 15 × 6
 #>    term               .lower .estimate .upper .alpha .method   
 #>    <chr>               <dbl>     <dbl>  <dbl>  <dbl> <chr>     
-#>  1 AUC                0.523      0.663  0.781    0.1 percentile
-#>  2 Accuracy           0.499      0.615  0.721    0.1 percentile
-#>  3 Balanced_Accuracy  0.472      0.611  0.722    0.1 percentile
-#>  4 Detection_Rate     0.217      0.305  0.399    0.1 percentile
-#>  5 F1                 0.497      0.609  0.734    0.1 percentile
-#>  6 Kappa             -0.0539     0.220  0.442    0.1 percentile
-#>  7 Neg_Pred_Value     0.394      0.617  0.756    0.1 percentile
-#>  8 Pos_Pred_Value     0.492      0.610  0.708    0.1 percentile
-#>  9 Precision          0.492      0.610  0.708    0.1 percentile
-#> 10 Recall             0.496      0.617  0.788    0.1 percentile
-#> 11 Sensitivity        0.496      0.617  0.788    0.1 percentile
-#> 12 Specificity        0.405      0.605  0.748    0.1 percentile
+#>  1 AUC                0.496      0.659  0.838    0.1 percentile
+#>  2 Accuracy           0.510      0.613  0.718    0.1 percentile
+#>  3 Balanced_Accuracy  0.490      0.611  0.728    0.1 percentile
+#>  4 Detection_Rate     0.254      0.351  0.464    0.1 percentile
+#>  5 F1                 0.539      0.641  0.752    0.1 percentile
+#>  6 Kappa             -0.0121     0.213  0.421    0.1 percentile
+#>  7 Neg_Pred_Value     0.301      0.561  0.810    0.1 percentile
+#>  8 Pos_Pred_Value     0.539      0.654  0.785    0.1 percentile
+#>  9 Precision          0.539      0.654  0.785    0.1 percentile
+#> 10 Recall             0.521      0.642  0.807    0.1 percentile
+#> 11 Sensitivity        0.521      0.642  0.807    0.1 percentile
+#> 12 Specificity        0.44       0.579  0.661    0.1 percentile
 #> 13 cv_metric_AUC      0.622      0.622  0.622    0.1 percentile
-#> 14 logLoss            0.663      0.678  0.692    0.1 percentile
-#> 15 prAUC              0.523      0.605  0.699    0.1 percentile
+#> 14 logLoss            0.656      0.682  0.702    0.1 percentile
+#> 15 prAUC              0.468      0.598  0.743    0.1 percentile
 if (FALSE) {
-  outcome_colname <- 'dx'
-  run_ml(otu_mini_bin, 'rf', outcome_colname = 'dx') %>%
-    bootstrap_performance(outcome_colname,
-                          bootstrap_times = 10000,
-                          alpha = 0.05
-    )
+outcome_colname <- "dx"
+run_ml(otu_mini_bin, "rf", outcome_colname = "dx") %>%
+  bootstrap_performance(outcome_colname,
+    bootstrap_times = 10000,
+    alpha = 0.05
+  )
 }
 
@@ -145,7 +146,7 @@

Examples -

Site built with pkgdown 2.0.6.

+

Site built with pkgdown 2.0.7.

diff --git a/docs/dev/reference/calc_perf_bootstrap_split.html b/docs/dev/reference/calc_perf_bootstrap_split.html index 923e364a..9afd90c0 100644 --- a/docs/dev/reference/calc_perf_bootstrap_split.html +++ b/docs/dev/reference/calc_perf_bootstrap_split.html @@ -1,5 +1,5 @@ -Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split • mikropmlCalculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split • mikropml @@ -149,7 +149,7 @@

Author<

diff --git a/docs/dev/reference/get_perf_metric_fn.html b/docs/dev/reference/get_perf_metric_fn.html index 631aa53e..f8e7828b 100644 --- a/docs/dev/reference/get_perf_metric_fn.html +++ b/docs/dev/reference/get_perf_metric_fn.html @@ -93,7 +93,7 @@

Examples#> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, "pred"], data[, "obs"]) #> } -#> <bytecode: 0x7fafe4313a28> +#> <bytecode: 0x7fc310e7de38> #> <environment: namespace:caret> get_perf_metric_fn("binary") #> function (data, lev = NULL, model = NULL) @@ -151,7 +151,7 @@

Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fafe98d3e98> +#> <bytecode: 0x7fc30e979690> #> <environment: namespace:caret> get_perf_metric_fn("multiclass") #> function (data, lev = NULL, model = NULL) @@ -209,7 +209,7 @@

Examples#> stats <- stats[c(stat_list)] #> return(stats) #> } -#> <bytecode: 0x7fafe98d3e98> +#> <bytecode: 0x7fc30e979690> #> <environment: namespace:caret>

diff --git a/docs/dev/reference/index.html b/docs/dev/reference/index.html index 8b5629ea..22094450 100644 --- a/docs/dev/reference/index.html +++ b/docs/dev/reference/index.html @@ -119,6 +119,11 @@

Model evaluationpermute_p_value()
Calculated a permuted p-value comparing two models
+
+ + bootstrap_performance() +
+
Calculate a bootstrap confidence interval for the performance on a single train/test split

Plotting helpers

diff --git a/docs/dev/reference/plot_model_performance.html b/docs/dev/reference/plot_model_performance.html index e0e247b9..c22fb3e0 100644 --- a/docs/dev/reference/plot_model_performance.html +++ b/docs/dev/reference/plot_model_performance.html @@ -96,7 +96,7 @@

Examplesperf_df <- lapply(results_lst, function(result) { result[["performance"]] }) %>% - dplyr::bind_rows() + dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) @@ -113,7 +113,7 @@

Examples param_grid$seeds, param_grid$methods ) # extract and combine the performance results -perf_df2 <- dplyr::bind_rows(results_mtx["performance", ]) +perf_df2 <- dplyr::bind_rows(results_mtx["performance", ]) # plot the performance results p <- plot_model_performance(perf_df2) diff --git a/docs/dev/reference/tidy_perf_data.html b/docs/dev/reference/tidy_perf_data.html index 98281593..1a264aca 100644 --- a/docs/dev/reference/tidy_perf_data.html +++ b/docs/dev/reference/tidy_perf_data.html @@ -96,7 +96,7 @@

Examplesperf_df <- lapply(results_lst, function(result) { result[["performance"]] }) %>% - dplyr::bind_rows() + dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) } diff --git a/docs/dev/search.json b/docs/dev/search.json index 12bf0784..829cadb8 100644 --- a/docs/dev/search.json +++ b/docs/dev/search.json @@ -1 +1 @@ -[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. lower: lower bound 95% confidence interval perf_metric. upper: upper bound 95% confidence interval perf_metric. feat: feature (group correlated features) permuted. method: ML method used. perf_metric_name: name performance metric represented perf_metric & perf_metric_diff. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together feat column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue lower upper feat method #> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf #> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf #> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf #> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf #> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf #> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf #> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf #> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf #> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf #> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf #> perf_metric_name seed #> 1 AUC 2019 #> 2 AUC 2019 #> 3 AUC 2019 #> 4 AUC 2019 #> 5 AUC 2019 #> 6 AUC 2019 #> 7 AUC 2019 #> 8 AUC 2019 #> 9 AUC 2019 #> 10 AUC 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> feat #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE ) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"library(ggplot2) perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-multiple-models","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for multiple models","title":"Parallel processing","text":"can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, feat) %>% summarize(mean_diff = median(perf_metric_diff)) %>% filter(mean_diff > 0) %>% slice_max(order_by = mean_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"feat\")) %>% mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + geom_vline(xintercept = 0, linetype = \"dashed\") + labs( x = \"Decrease in performance (actual minus permutation)\", y = \"Features\", caption = \"Features which have a lower performance when permuted have a difference in performance above zero. The features with the greatest decrease are the most important for model performance.\" %>% stringr::str_wrap(width = 100) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-a-single-model","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for a single model","title":"Parallel processing","text":"can also plot feature importance single model. report actual performance, permutation performance, empirical 95% confidence interval permutation performance.","code":"feat_imp_1 <- results_mtx[, 1][[\"feature_importance\"]] perf_metric_name <- results_mtx[, 1][[\"trained_model\"]]$metric perf_actual <- results_mtx[, 1][[\"performance\"]] %>% pull(perf_metric_name) feat_imp_1 %>% filter(perf_metric_diff > 0) %>% mutate(feat = if_else(pvalue < 0.05, paste0(\"*\", feat), as.character(feat)) %>% as.factor() %>% forcats::fct_reorder(perf_metric_diff)) %>% ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + geom_pointrange() + geom_vline(xintercept = perf_actual, linetype = \"dashed\") + labs( x = \"Permutation performance\", y = \"Features\", caption = \"The dashed line represents the actual performance on the test set. Features which have a lower performance when permuted are important for model performance. Significant features (pvalue < 0.05) are marked with an asterisk (*). Error bars represent the 95% confidence interval.\" %>% stringr::str_wrap(width = 110) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: doFuture, forcats, foreach, future, future.apply, ggplot2, knitr, progress, progressr, purrr, rmarkdown, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"Get lower upper bounds empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"lower_bound(x, alpha) upper_bound(x, alpha)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"x vector test statistics, permutation tests bootstraps alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"value lower upper bound confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"lower_bound(): Get lower bound empirical confidence interval upper_bound(): Get upper bound empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"if (FALSE) { x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":null,"dir":"Reference","previous_headings":"","what":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Requires future.apply package","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"","code":"find_permuted_perf_metric( test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, nperms = 100, alpha = 0.05, progbar = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). feat feature group correlated features permute. test_perf_value value true performance metric held-test data. nperms number permutations perform (default: 100). alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval) progbar optional progress bar (default: NULL)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"vector mean permuted performance mean difference test permuted performance (test minus permuted performance)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; feat) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] +[{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":null,"dir":"","previous_headings":"","what":"Contributor Covenant Code of Conduct","title":"Contributor Covenant Code of Conduct","text":"document adapted Tidyverse Code Conduct.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-pledge","dir":"","previous_headings":"","what":"Our Pledge","title":"Contributor Covenant Code of Conduct","text":"members, contributors, leaders pledge make participation community harassment-free experience everyone, regardless age, body size, visible invisible disability, ethnicity, sex characteristics, gender identity expression, level experience, education, socio-economic status, nationality, personal appearance, race, religion, sexual identity orientation. pledge act interact ways contribute open, welcoming, diverse, inclusive, healthy community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"our-standards","dir":"","previous_headings":"","what":"Our Standards","title":"Contributor Covenant Code of Conduct","text":"Examples behavior contributes positive environment community include: Demonstrating empathy kindness toward people respectful differing opinions, viewpoints, experiences Giving gracefully accepting constructive feedback Accepting responsibility apologizing affected mistakes, learning experience Focusing best just us individuals, overall community Examples unacceptable behavior include: use sexualized language imagery, sexual attention advances kind Trolling, insulting derogatory comments, personal political attacks Public private harassment Publishing others’ private information, physical email address, without explicit permission conduct reasonably considered inappropriate professional setting","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-responsibilities","dir":"","previous_headings":"","what":"Enforcement Responsibilities","title":"Contributor Covenant Code of Conduct","text":"Community leaders responsible clarifying enforcing standards acceptable behavior take appropriate fair corrective action response behavior deem inappropriate, threatening, offensive, harmful. Community leaders right responsibility remove, edit, reject comments, commits, code, wiki edits, issues, contributions aligned Code Conduct, communicate reasons moderation decisions appropriate.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"scope","dir":"","previous_headings":"","what":"Scope","title":"Contributor Covenant Code of Conduct","text":"Code Conduct applies within community spaces, also applies individual officially representing community public spaces. Examples representing community include using official e-mail address, posting via official social media account, acting appointed representative online offline event.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement","dir":"","previous_headings":"","what":"Enforcement","title":"Contributor Covenant Code of Conduct","text":"Instances abusive, harassing, otherwise unacceptable behavior may reported community leaders responsible enforcement [INSERT CONTACT METHOD]. complaints reviewed investigated promptly fairly. community leaders obligated respect privacy security reporter incident.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"enforcement-guidelines","dir":"","previous_headings":"","what":"Enforcement Guidelines","title":"Contributor Covenant Code of Conduct","text":"Community leaders follow Community Impact Guidelines determining consequences action deem violation Code Conduct:","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_1-correction","dir":"","previous_headings":"Enforcement Guidelines","what":"1. Correction","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Use inappropriate language behavior deemed unprofessional unwelcome community. Consequence: private, written warning community leaders, providing clarity around nature violation explanation behavior inappropriate. public apology may requested.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_2-warning","dir":"","previous_headings":"Enforcement Guidelines","what":"2. Warning","title":"Contributor Covenant Code of Conduct","text":"Community Impact: violation single incident series actions. Consequence: warning consequences continued behavior. interaction people involved, including unsolicited interaction enforcing Code Conduct, specified period time. includes avoiding interactions community spaces well external channels like social media. Violating terms may lead temporary permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_3-temporary-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"3. Temporary Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: serious violation community standards, including sustained inappropriate behavior. Consequence: temporary ban sort interaction public communication community specified period time. public private interaction people involved, including unsolicited interaction enforcing Code Conduct, allowed period. Violating terms may lead permanent ban.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"id_4-permanent-ban","dir":"","previous_headings":"Enforcement Guidelines","what":"4. Permanent Ban","title":"Contributor Covenant Code of Conduct","text":"Community Impact: Demonstrating pattern violation community standards, including sustained inappropriate behavior, harassment individual, aggression toward disparagement classes individuals. Consequence: permanent ban sort public interaction within community.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CODE_OF_CONDUCT.html","id":"attribution","dir":"","previous_headings":"","what":"Attribution","title":"Contributor Covenant Code of Conduct","text":"Code Conduct adapted Contributor Covenant, version 2.0, available https://www.contributor-covenant.org/version/2/0/ code_of_conduct.html. Community Impact Guidelines inspired Mozilla’s code conduct enforcement ladder. answers common questions code conduct, see FAQ https://www.contributor-covenant.org/faq. Translations available https:// www.contributor-covenant.org/translations.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":null,"dir":"","previous_headings":"","what":"Contributing to mikropml","title":"Contributing to mikropml","text":"document adapted Tidyverse Contributing guide.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"fixing-typos","dir":"","previous_headings":"","what":"Fixing typos","title":"Contributing to mikropml","text":"can fix typos, spelling mistakes, grammatical errors documentation directly using GitHub web interface, long changes made source file. generally means ’ll need edit roxygen2 comments .R, .Rd file. can find .R file generates .Rd reading comment first line.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"bigger-changes","dir":"","previous_headings":"","what":"Bigger changes","title":"Contributing to mikropml","text":"want make bigger change, ’s good idea first file issue make sure someone team agrees ’s needed. ’ve found bug, please file issue illustrates bug minimal reprex (also help write unit test, needed).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"pull-request-process","dir":"","previous_headings":"Bigger changes","what":"Pull request process","title":"Contributing to mikropml","text":"Fork package clone onto computer. haven’t done , recommend using usethis::create_from_github(\"SchlossLab/mikropml\", fork = TRUE). Install development dependences devtools::install_dev_deps(), make sure package passes R CMD check running devtools::check(). R CMD check doesn’t pass cleanly, ’s good idea ask help continuing. Create Git branch pull request (PR). recommend using usethis::pr_init(\"brief-description--change\"). Make changes, commit git, create PR running usethis::pr_push(), following prompts browser. title PR briefly describe change. body PR contain Fixes #issue-number. user-facing changes, add bullet top NEWS.md (.e. just first header). Follow style described https://style.tidyverse.org/news.html.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-style","dir":"","previous_headings":"Bigger changes","what":"Code style","title":"Contributing to mikropml","text":"New code follow tidyverse style guide. can use styler package apply styles, please don’t restyle code nothing PR. use roxygen2, Markdown syntax, documentation. use testthat unit tests. Contributions test cases included easier accept.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/CONTRIBUTING.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"Contributing to mikropml","text":"Please note mikropml project released Contributor Code Conduct. contributing project agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/LICENSE.html","id":null,"dir":"","previous_headings":"","what":"MIT License","title":"MIT License","text":"Copyright (c) 2019-2021 Begüm D. Topçuoğlu, Zena Lapp, Kelly L. Sovacool, Evan Snitkin, Jenna Wiens, Patrick D. Schloss Permission hereby granted, free charge, person obtaining copy software associated documentation files (“Software”), deal Software without restriction, including without limitation rights use, copy, modify, merge, publish, distribute, sublicense, /sell copies Software, permit persons Software furnished , subject following conditions: copyright notice permission notice shall included copies substantial portions Software. SOFTWARE PROVIDED “”, WITHOUT WARRANTY KIND, EXPRESS IMPLIED, INCLUDING LIMITED WARRANTIES MERCHANTABILITY, FITNESS PARTICULAR PURPOSE NONINFRINGEMENT. EVENT SHALL AUTHORS COPYRIGHT HOLDERS LIABLE CLAIM, DAMAGES LIABILITY, WHETHER ACTION CONTRACT, TORT OTHERWISE, ARISING , CONNECTION SOFTWARE USE DEALINGS SOFTWARE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":null,"dir":"","previous_headings":"","what":"Getting help with mikropml","title":"Getting help with mikropml","text":"Thanks using mikropml! filing issue, places explore pieces put together make process smooth possible.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"make-a-reprex","dir":"","previous_headings":"","what":"Make a reprex","title":"Getting help with mikropml","text":"Start making minimal reproducible example using reprex package. haven’t heard used reprex , ’re treat! Seriously, reprex make R-question-asking endeavors easier (pretty insane ROI five ten minutes ’ll take learn ’s ). additional reprex pointers, check Get help! section tidyverse site.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"where-to-ask","dir":"","previous_headings":"","what":"Where to ask?","title":"Getting help with mikropml","text":"Armed reprex, next step figure ask. ’s question: start community.rstudio.com, /StackOverflow. people answer questions. ’s bug: ’re right place, file issue. ’re sure: let community help figure ! problem bug feature request, can easily return report . opening new issue, sure search issues pull requests make sure bug hasn’t reported /already fixed development version. default, search pre-populated :issue :open. can edit qualifiers (e.g. :pr, :closed) needed. example, ’d simply remove :open search issues repo, open closed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/SUPPORT.html","id":"what-happens-next","dir":"","previous_headings":"","what":"What happens next?","title":"Getting help with mikropml","text":"efficient possible, development tidyverse packages tends bursty, shouldn’t worry don’t get immediate response. Typically don’t look repo sufficient quantity issues accumulates, ’s burst intense activity focus efforts. makes development efficient avoids expensive context switching problems, cost taking longer get back . process makes good reprex particularly important might multiple months initial report start working . can’t reproduce bug, can’t fix !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Introduction to mikropml","text":"Since assume lot won’t read entire vignette, ’m going say beginning. run_ml() function running super slow, consider parallelizing. See vignette(\"parallel\") examples.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-input-data","dir":"Articles","previous_headings":"Understanding the inputs","what":"The input data","title":"Introduction to mikropml","text":"input data run_ml() dataframe row sample observation. One column (assumed first) outcome interest, columns features. package otu_mini_bin small example dataset mikropml. , dx outcome column (normal cancer), 10 features (Otu00001 Otu00010). 2 outcomes, performing binary classification majority examples . bottom, also briefly provide examples multi-class continuous outcomes. ’ll see, run way binary classification! feature columns amount Operational Taxonomic Unit (OTU) microbiome samples patients cancer without cancer. goal predict dx, stands diagnosis. diagnosis can cancer based individual’s microbiome. need understand exactly means, ’re interested can read original paper (Topçuoğlu et al. 2020). real machine learning applications ’ll need use features, purposes vignette ’ll stick example dataset everything runs faster.","code":"# install.packages(\"devtools\") # devtools::install_github(\"SchlossLab/mikropml\") library(mikropml) head(otu_mini_bin) #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00007 #> 1 normal 350 268 213 1 208 230 70 #> 2 normal 568 1320 13 293 671 103 48 #> 3 normal 151 756 802 556 145 271 57 #> 4 normal 299 30 1018 0 25 99 75 #> 5 normal 1409 174 0 3 2 1136 296 #> 6 normal 167 712 213 4 332 534 139 #> Otu00008 Otu00009 Otu00010 #> 1 230 235 64 #> 2 204 119 115 #> 3 176 37 710 #> 4 78 255 197 #> 5 1 537 533 #> 6 251 155 122"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-methods-we-support","dir":"Articles","previous_headings":"Understanding the inputs","what":"The methods we support","title":"Introduction to mikropml","text":"methods use supported great ML wrapper package caret, use train machine learning models. methods tested (backend packages) : Logistic/multiclass/linear regression (\"glmnet\") Random forest (\"rf\") Decision tree (\"rpart2\") Support vector machine radial basis kernel (\"svmRadial\") xgboost (\"xgbTree\") documentation methods, well many others, can look available models (see list tag). vetted models used caret, function general enough others might work. can’t promise can help models, feel free [start new discussion GitHub]https://github.com/SchlossLab/mikropml/discussions) questions models might able help. first focus glmnet, default implementation L2-regularized logistic regression. cover examples towards end.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"before-running-ml","dir":"Articles","previous_headings":"","what":"Before running ML","title":"Introduction to mikropml","text":"execute run_ml(), consider preprocessing data, either preprocess_data() function. can learn preprocessing vignette: vignette(\"preprocess\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Introduction to mikropml","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). may also want provide: outcome column name. default run_ml() pick first column, ’s best practice specify column name explicitly. seed results reproducible, get results see (.e train/test split). Say want use logistic regression, method use glmnet. , run ML pipeline : ’ll notice things: takes little run. parameters use. message stating ‘dx’ used outcome column. want, ’s nice sanity check! warning. Don’t worry warning right now - just means hyperparameters aren’t good fit - ’re interested learning , see vignette(\"tuning\"). Now, let’s dig output bit. results list 4 things: trained_model trained model caret. bunch info won’t get , can learn caret::train() documentation. test_data partition dataset used testing. machine learning, ’s always important held-test dataset used training stage. pipeline using run_ml() split data training testing sets. training data used build model (e.g. tune hyperparameters, learn data) test data used evaluate well model performs. performance dataframe (mainly) performance metrics (1 column cross-validation performance metric, several test performance metrics, 2 columns end ML method seed): using logistic regression binary classification, area receiver-operator characteristic curve (AUC) useful metric evaluate model performance. , ’s default use mikropml. However, crucial evaluate model performance using multiple metrics. can find information performance metrics use package. cv_metric_AUC AUC cross-validation folds training data. gives us sense well model performs training data. columns performance metrics test data — data wasn’t used build model. , can see AUC test data much 0.5, suggesting model predict much better chance, model overfit cross-validation AUC (cv_metric_AUC, measured training) much higher testing AUC. isn’t surprising since ’re using features example dataset, don’t discouraged. default option also provides number performance metrics might interested , including area precision-recall curve (prAUC). last columns results$performance method seed (set one) help combining results multiple runs (see vignette(\"parallel\")). feature_importance information feature importance values find_feature_importance = TRUE (default FALSE). Since used defaults, ’s nothing :","code":"results <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019 ) names(results) #> [1] \"trained_model\" \"test_data\" \"performance\" #> [4] \"feature_importance\" names(results$trained_model) #> [1] \"method\" \"modelInfo\" \"modelType\" \"results\" \"pred\" #> [6] \"bestTune\" \"call\" \"dots\" \"metric\" \"control\" #> [11] \"finalModel\" \"preProcess\" \"trainingData\" \"ptype\" \"resample\" #> [16] \"resampledCM\" \"perfNames\" \"maximize\" \"yLimits\" \"times\" #> [21] \"levels\" head(results$test_data) #> dx Otu00009 Otu00005 Otu00010 Otu00001 Otu00008 Otu00004 Otu00003 #> 9 normal 119 142 248 256 363 112 871 #> 14 normal 60 209 70 86 96 1 123 #> 16 cancer 205 5 180 1668 95 22 3 #> 17 normal 188 356 107 381 1035 915 315 #> 27 normal 4 21 161 7 1 27 8 #> 30 normal 13 166 5 31 33 5 58 #> Otu00002 Otu00007 Otu00006 #> 9 995 0 137 #> 14 426 54 40 #> 16 20 590 570 #> 17 357 253 341 #> 27 25 322 5 #> 30 179 6 30 results$performance #> # A tibble: 1 × 17 #> cv_metric_AUC logLoss AUC prAUC Accuracy Kappa F1 Sensi…¹ Speci…² Pos_P…³ #> #> 1 0.622 0.684 0.647 0.606 0.590 0.179 0.6 0.6 0.579 0.6 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​Sensitivity, ²​Specificity, ³​Pos_Pred_Value results$feature_importance #> [1] \"Skipped feature importance\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"customizing-parameters","dir":"Articles","previous_headings":"","what":"Customizing parameters","title":"Introduction to mikropml","text":"arguments allow change execute run_ml(). ’ve chosen reasonable defaults , encourage change think something else better data.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-kfold-cv_times-and-training_frac","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing kfold, cv_times, and training_frac","title":"Introduction to mikropml","text":"kfold: number folds run cross-validation (default: 5). cv_times: number times run repeated cross-validation (default: 100). training_frac: fraction data training set (default: 0.8). rest data used testing. ’s example change default parameters: might noticed one ran faster — ’s reduced kfold cv_times. okay testing things may even necessary smaller datasets. general may better larger numbers parameters; think defaults good starting point (Topçuoğlu et al. 2020).","code":"results_custom <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = 0.5, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"custom-training-indices","dir":"Articles","previous_headings":"Customizing parameters > Changing kfold, cv_times, and training_frac","what":"Custom training indices","title":"Introduction to mikropml","text":"training_frac fraction 0 1, random sample observations dataset chosen training set satisfy training_frac using get_partition_indices(). However, cases might wish control exactly observations training set. can instead assign training_frac vector indices correspond rows dataset go training set (remaining sequences go testing set). ’s example ~80% data training set:","code":"n_obs <- otu_mini_bin %>% nrow() training_size <- 0.8 * n_obs training_rows <- sample(n_obs, training_size) results_custom_train <- run_ml(otu_mini_bin, \"glmnet\", kfold = 2, cv_times = 5, training_frac = training_rows, seed = 2019 ) #> Using 'dx' as the outcome column. #> Using the custom training set indices provided by `training_frac`. #> The fraction of data in the training set will be 0.8 #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"changing-the-performance-metric","dir":"Articles","previous_headings":"Customizing parameters","what":"Changing the performance metric","title":"Introduction to mikropml","text":"two arguments allow change performance metric use model evaluation, performance metrics calculate using test data. perf_metric_function function used calculate performance metrics. default classification caret::multiClassSummary() default regression caret::defaultSummary(). ’d suggest changing unless really know ’re . perf_metric_name column name output perf_metric_function. chose reasonable defaults (AUC binary, logLoss multiclass, RMSE continuous), default functions calculate bunch different performance metrics, can choose different one ’d like. default performance metrics available classification : default performance metrics available regression : ’s example using prAUC instead AUC: ’ll see cross-validation metric prAUC, instead default AUC:","code":"#> [1] \"logLoss\" \"AUC\" \"prAUC\" #> [4] \"Accuracy\" \"Kappa\" \"Mean_F1\" #> [7] \"Mean_Sensitivity\" \"Mean_Specificity\" \"Mean_Pos_Pred_Value\" #> [10] \"Mean_Neg_Pred_Value\" \"Mean_Precision\" \"Mean_Recall\" #> [13] \"Mean_Detection_Rate\" \"Mean_Balanced_Accuracy\" #> [1] \"RMSE\" \"Rsquared\" \"MAE\" results_pr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, perf_metric_name = \"prAUC\", seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. results_pr$performance #> # A tibble: 1 × 17 #> cv_metric_p…¹ logLoss AUC prAUC Accur…² Kappa F1 Sensi…³ Speci…⁴ Pos_P…⁵ #> #> 1 0.577 0.691 0.663 0.605 0.538 0.0539 0.690 1 0.0526 0.526 #> # … with 7 more variables: Neg_Pred_Value , Precision , Recall , #> # Detection_Rate , Balanced_Accuracy , method , seed , #> # and abbreviated variable names ¹​cv_metric_prAUC, ²​Accuracy, ³​Sensitivity, #> # ⁴​Specificity, ⁵​Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"using-groups","dir":"Articles","previous_headings":"Customizing parameters","what":"Using groups","title":"Introduction to mikropml","text":"optional groups vector groups keep together splitting data train test sets cross-validation. Sometimes ’s important split data based grouping instead just randomly. allows control similarities within groups don’t want skew predictions (.e. batch effects). example, biological data may samples collected multiple hospitals, might like keep observations hospital partition. ’s example split data train/test sets based groups: one difference run_ml() report much data training set run code chunk. can little finicky depending many samples groups . won’t exactly specify training_frac, since include one group either training set test set.","code":"# make random groups set.seed(2019) grps <- sample(LETTERS[1:8], nrow(otu_mini_bin), replace = TRUE) results_grp <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.795 #> Groups in the training set: A B D F G H #> Groups in the testing set: C E #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"controlling-how-groups-are-assigned-to-partitions","dir":"Articles","previous_headings":"Customizing parameters > Using groups","what":"Controlling how groups are assigned to partitions","title":"Introduction to mikropml","text":"use groups parameter , default run_ml() assume want observations group placed partition train/test split. makes sense want use groups control batch effects. However, cases might prefer control exactly groups end partition, might even okay observations group assigned different partitions. example, say want groups B used training, C D testing, don’t preference happens groups. can give group_partitions parameter named list specify groups go training set go testing set. case, observations & B used training, C & D used testing, remaining groups randomly assigned one satisfy training_frac closely possible. another scenario, maybe want groups F used training, also want allow observations selected training F used testing: need even control , take look setting custom training indices. might also prefer provide train control scheme cross_val parameter run_ml().","code":"results_grp_part <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, training_frac = 0.8, groups = grps, group_partitions = list( train = c(\"A\", \"B\"), test = c(\"C\", \"D\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.785 #> Groups in the training set: A B E F G H #> Groups in the testing set: C D #> Groups will not be kept together in CV partitions because the number of groups in the training set is not larger than `kfold` #> Training the model... #> Training complete. results_grp_trainA <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 2, kfold = 2, training_frac = 0.5, groups = grps, group_partitions = list( train = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\"), test = c(\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\", \"H\") ), seed = 2019 ) #> Using 'dx' as the outcome column. #> Fraction of data in the training set: 0.5 #> Groups in the training set: A B C D E F #> Groups in the testing set: A B C D E F G H #> Groups will be kept together in CV partitions #> Training the model... #> Training complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"more-arguments","dir":"Articles","previous_headings":"Customizing parameters","what":"More arguments","title":"Introduction to mikropml","text":"ML methods take optional arguments, ntree randomForest-based models case weights. additional arguments give run_ml() forwarded along caret::train() can leverage options.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"case-weights","dir":"Articles","previous_headings":"Customizing parameters > More arguments","what":"Case weights","title":"Introduction to mikropml","text":"want use case weights, also need use custom indices training data (.e. perform partition run_ml() ). ’s one way weights calculated proportion class data set, ~70% data training set: See caret docs list models accept case weights.","code":"set.seed(20221016) library(dplyr) train_set_indices <- get_partition_indices(otu_mini_bin %>% pull(dx), training_frac = 0.70 ) case_weights_dat <- otu_mini_bin %>% count(dx) %>% mutate(p = n / sum(n)) %>% select(dx, p) %>% right_join(otu_mini_bin, by = \"dx\") %>% select(-starts_with(\"Otu\")) %>% mutate( row_num = row_number(), in_train = row_num %in% train_set_indices ) %>% filter(in_train) #> Warning in right_join(., otu_mini_bin, by = \"dx\"): Each row in `x` is expected to match at most 1 row in `y`. #> ℹ Row 1 of `x` matches multiple rows. #> ℹ If multiple matches are expected, set `multiple = \"all\"` to silence this #> warning. head(case_weights_dat) #> dx p row_num in_train #> 1 cancer 0.49 1 TRUE #> 2 cancer 0.49 2 TRUE #> 3 cancer 0.49 3 TRUE #> 4 cancer 0.49 4 TRUE #> 5 cancer 0.49 5 TRUE #> 6 cancer 0.49 6 TRUE tail(case_weights_dat) #> dx p row_num in_train #> 136 normal 0.51 194 TRUE #> 137 normal 0.51 195 TRUE #> 138 normal 0.51 196 TRUE #> 139 normal 0.51 197 TRUE #> 140 normal 0.51 198 TRUE #> 141 normal 0.51 200 TRUE nrow(case_weights_dat) / nrow(otu_mini_bin) #> [1] 0.705 results_weighted <- run_ml(otu_mini_bin, \"glmnet\", outcome_colname = \"dx\", seed = 2019, training_frac = case_weights_dat %>% pull(row_num), weights = case_weights_dat %>% pull(p) )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"finding-feature-importance","dir":"Articles","previous_headings":"","what":"Finding feature importance","title":"Introduction to mikropml","text":"find features contributing predictive power, can use find_feature_importance = TRUE. use permutation importance determine feature importance described (Topçuoğlu et al. 2020). Briefly, permutes features individually (correlated ones together) evaluates much performance metric decreases. performance decreases feature randomly shuffled, important feature . default FALSE takes run useful want know features important predicting outcome. Let’s look feature importance results: Now, can check feature importances: several columns: perf_metric: performance value permuted feature. perf_metric_diff: difference performance actual permuted data (.e. test performance minus permuted performance). Features larger perf_metric_diff important. pvalue: probability obtaining actual performance value null hypothesis. lower: lower bound 95% confidence interval perf_metric. upper: upper bound 95% confidence interval perf_metric. feat: feature (group correlated features) permuted. method: ML method used. perf_metric_name: name performance metric represented perf_metric & perf_metric_diff. seed: seed (set). can see , differences negligible (close zero), makes sense since model isn’t great. ’re interested feature importance, ’s especially useful run multiple different train/test splits, shown example snakemake workflow. can also choose permute correlated features together using corr_thresh (default: 1). features correlation threshold permuted together; .e. perfectly correlated features permuted together using default value. can see features permuted together feat column. 3 features permuted together (doesn’t really make sense, ’s just example). previously executed run_ml() without feature importance now wish find feature importance fact, see example code get_feature_importance() documentation. get_feature_importance() can show live progress bar, see vignette(\"parallel\") examples.","code":"results_imp <- run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE, seed = 2019 ) results_imp$feature_importance #> perf_metric perf_metric_diff pvalue lower upper feat method #> 1 0.5459125 0.0003375 0.51485149 0.49125 0.60250 Otu00001 rf #> 2 0.5682625 -0.0220125 0.73267327 0.50625 0.63125 Otu00002 rf #> 3 0.5482875 -0.0020375 0.56435644 0.50500 0.59000 Otu00003 rf #> 4 0.6314375 -0.0851875 1.00000000 0.55250 0.71250 Otu00004 rf #> 5 0.4991750 0.0470750 0.08910891 0.44125 0.57125 Otu00005 rf #> 6 0.5364875 0.0097625 0.28712871 0.50125 0.57375 Otu00006 rf #> 7 0.5382875 0.0079625 0.39603960 0.47500 0.58750 Otu00007 rf #> 8 0.5160500 0.0302000 0.09900990 0.46750 0.55750 Otu00008 rf #> 9 0.5293375 0.0169125 0.17821782 0.49500 0.55625 Otu00009 rf #> 10 0.4976500 0.0486000 0.12871287 0.41000 0.56250 Otu00010 rf #> perf_metric_name seed #> 1 AUC 2019 #> 2 AUC 2019 #> 3 AUC 2019 #> 4 AUC 2019 #> 5 AUC 2019 #> 6 AUC 2019 #> 7 AUC 2019 #> 8 AUC 2019 #> 9 AUC 2019 #> 10 AUC 2019 results_imp_corr <- run_ml(otu_mini_bin, \"glmnet\", cv_times = 5, find_feature_importance = TRUE, corr_thresh = 0.2, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Warning in (function (w) : `caret::train()` issued the following warning: #> #> simpleWarning in nominalTrainWorkflow(x = x, y = y, wts = weights, info = trainInfo, : There were missing values in resampled performance measures. #> #> This warning usually means that the model didn't converge in some cross-validation folds because it is predicting something close to a constant. As a result, certain performance metrics can't be calculated. This suggests that some of the hyperparameters chosen are doing very poorly. #> Training complete. #> Finding feature importance... #> Feature importance complete. results_imp_corr$feature_importance #> perf_metric perf_metric_diff pvalue lower upper #> 1 0.4941842 0.1531842 0.05940594 0.3236842 0.6473684 #> feat #> 1 Otu00001|Otu00002|Otu00003|Otu00004|Otu00005|Otu00006|Otu00007|Otu00008|Otu00009|Otu00010 #> method perf_metric_name seed #> 1 glmnet AUC 2019"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"tuning-hyperparameters-using-the-hyperparameter-argument","dir":"Articles","previous_headings":"","what":"Tuning hyperparameters (using the hyperparameter argument)","title":"Introduction to mikropml","text":"important, whole vignette . bottom line provide default hyperparameters can start , ’s important tune hyperparameters. information default hyperparameters , tune hyperparameters, see vignette(\"tuning\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"other-models","dir":"Articles","previous_headings":"","what":"Other models","title":"Introduction to mikropml","text":"examples train evaluate models. output similar, won’t go details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"random-forest","dir":"Articles","previous_headings":"Other models","what":"Random forest","title":"Introduction to mikropml","text":"rf engine takes optional argument ntree: number trees use random forest. can’t tuned using rf package implementation random forest. Please refer caret documentation interested packages random forest implementations.","code":"results_rf <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, seed = 2019 ) results_rf_nt <- run_ml(otu_mini_bin, \"rf\", cv_times = 5, ntree = 1000, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"decision-tree","dir":"Articles","previous_headings":"Other models","what":"Decision tree","title":"Introduction to mikropml","text":"","code":"results_dt <- run_ml(otu_mini_bin, \"rpart2\", cv_times = 5, seed = 2019 )"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"svm","dir":"Articles","previous_headings":"Other models","what":"SVM","title":"Introduction to mikropml","text":"get message “maximum number iterations reached”, see issue caret.","code":"results_svm <- run_ml(otu_mini_bin, \"svmRadial\", cv_times = 5, seed = 2019 )"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"multiclass-data","dir":"Articles","previous_headings":"Other data","what":"Multiclass data","title":"Introduction to mikropml","text":"provide otu_mini_multi multiclass outcome (three outcomes): ’s example running multiclass data: performance metrics slightly different, format everything else :","code":"otu_mini_multi %>% dplyr::pull(\"dx\") %>% unique() #> [1] \"adenoma\" \"carcinoma\" \"normal\" results_multi <- run_ml(otu_mini_multi, outcome_colname = \"dx\", seed = 2019 ) results_multi$performance #> # A tibble: 1 × 17 #> cv_metric…¹ logLoss AUC prAUC Accur…² Kappa Mean_F1 Mean_…³ Mean_…⁴ Mean_…⁵ #> #> 1 1.07 1.11 0.506 0.353 0.382 0.0449 NA 0.360 0.682 NaN #> # … with 7 more variables: Mean_Neg_Pred_Value , Mean_Precision , #> # Mean_Recall , Mean_Detection_Rate , Mean_Balanced_Accuracy , #> # method , seed , and abbreviated variable names #> # ¹​cv_metric_logLoss, ²​Accuracy, ³​Mean_Sensitivity, ⁴​Mean_Specificity, #> # ⁵​Mean_Pos_Pred_Value"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/introduction.html","id":"continuous-data","dir":"Articles","previous_headings":"Other data","what":"Continuous data","title":"Introduction to mikropml","text":"’s example running continuous data, outcome column numerical: , performance metrics slightly different, format rest :","code":"results_cont <- run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019 ) results_cont$performance #> # A tibble: 1 × 6 #> cv_metric_RMSE RMSE Rsquared MAE method seed #> #> 1 622. 731. 0.0893 472. glmnet 2019"},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"summary","dir":"Articles","previous_headings":"","what":"Summary","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Machine learning (ML) classification prediction based set features used make decisions healthcare, economics, criminal justice . However, implementing ML pipeline including preprocessing, model selection, evaluation can time-consuming, confusing, difficult. , present mikropml (pronounced “meek-ROPE em el”), easy--use R package implements ML pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. package available GitHub, CRAN, conda.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"statement-of-need","dir":"Articles","previous_headings":"","what":"Statement of need","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"applications machine learning (ML) require reproducible steps data pre-processing, cross-validation, testing, model evaluation, often interpretation model makes particular predictions. Performing steps important, failure implement can result incorrect misleading results (Teschendorff 2019; Wiens et al. 2019). Supervised ML widely used recognize patterns large datasets make predictions outcomes interest. Several packages including caret (Kuhn 2008) tidymodels (Kuhn, Wickham, RStudio 2020) R, scikitlearn (Pedregosa et al. 2011) Python, H2O autoML platform (H2O.ai 2020) allow scientists train ML models variety algorithms. packages provide tools necessary ML step, implement complete ML pipeline according good practices literature. makes difficult practitioners new ML easily begin perform ML analyses. enable broader range researchers apply ML problem domains, created mikropml, easy--use R package (R Core Team 2020) implements ML pipeline created Topçuoğlu et al. (Topçuoğlu et al. 2020) single function returns trained model, model performance metrics feature importance. mikropml leverages caret package support several ML algorithms: linear regression, logistic regression, support vector machines radial basis kernel, decision trees, random forest, gradient boosted trees. incorporates good practices ML training, testing, model evaluation (Topçuoğlu et al. 2020; Teschendorff 2019). Furthermore, provides data preprocessing steps based FIDDLE (FlexIble Data-Driven pipeLinE) framework outlined Tang et al. (Tang et al. 2020) post-training permutation importance steps estimate importance feature models trained (Breiman 2001; Fisher, Rudin, Dominici 2018). mikropml can used starting point application ML datasets many different fields. already applied microbiome data categorize patients colorectal cancer (Topçuoğlu et al. 2020), identify differences genomic clinical features associated bacterial infections (Lapp et al. 2020), predict gender-based biases academic publishing (Hagan et al. 2020).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"mikropml-package","dir":"Articles","previous_headings":"","what":"mikropml package","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package includes functionality preprocess data, train ML models, evaluate model performance, quantify feature importance (Figure 1). also provide vignettes example Snakemake workflow (Köster Rahmann 2012) showcase run ideal ML pipeline multiple different train/test data splits. results can visualized using helper functions use ggplot2 (Wickham 2016). mikropml allows users get started quickly facilitates reproducibility, replacement understanding ML workflow still necessary interpreting results (Pollard et al. 2019). facilitate understanding enable one tailor code application, heavily commented code provided supporting documentation can read online.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"preprocessing-data","dir":"Articles","previous_headings":"mikropml package","what":"Preprocessing data","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"provide function preprocess_data() preprocess features using several different functions caret package. preprocess_data() takes continuous categorical data, re-factors categorical data binary features, provides options normalize continuous data, remove features near-zero variance, keep one instance perfectly correlated features. set default options based implemented FIDDLE (Tang et al. 2020). details use preprocess_data() can found accompanying vignette.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"running-ml","dir":"Articles","previous_headings":"mikropml package","what":"Running ML","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"main function mikropml, run_ml(), minimally takes model choice data frame outcome column feature columns. model choice, mikropml currently supports logistic linear regression (glmnet: Friedman, Hastie, Tibshirani 2010), support vector machines radial basis kernel (kernlab: Karatzoglou et al. 2004), decision trees (rpart: Therneau et al. 2019), random forest (randomForest: Liaw Wiener 2002), gradient-boosted trees (xgboost: Chen et al. 2020). run_ml() randomly splits data train test sets maintaining distribution outcomes found full dataset. also provides option split data train test sets based categorical variables (e.g. batch, geographic location, etc.). mikropml uses caret package (Kuhn 2008) train evaluate models, optionally quantifies feature importance. output includes best model built based tuning hyperparameters internal repeated cross-validation step, model evaluation metrics, optional feature importances. Feature importances calculated using permutation test, breaks relationship feature true outcome test data, measures change model performance. provides intuitive metric individual features influence model performance comparable across model types, particularly useful model interpretation (Topçuoğlu et al. 2020). introductory vignette contains comprehensive tutorial use run_ml(). mikropml pipeline","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"ideal-workflow-for-running-mikropml-with-many-different-traintest-splits","dir":"Articles","previous_headings":"mikropml package","what":"Ideal workflow for running mikropml with many different train/test splits","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"investigate variation model performance depending train test set used (Topçuoğlu et al. 2020; Lapp et al. 2020), provide examples run_ml() many times different train/test splits get summary information model performance local computer high-performance computing cluster using Snakemake workflow.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"tuning-visualization","dir":"Articles","previous_headings":"mikropml package","what":"Tuning & visualization","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"One particularly important aspect ML hyperparameter tuning. provide reasonable range default hyperparameters model type. However practitioners explore whether range appropriate data, customize hyperparameter range. Therefore, provide function plot_hp_performance() plot cross-validation performance metric single model models built using different train/test splits. helps evaluate hyperparameter range searched exhaustively allows user pick ideal set. also provide summary plots test performance metrics many train/test splits different models using plot_model_performance(). Examples described accompanying vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"dependencies","dir":"Articles","previous_headings":"mikropml package","what":"Dependencies","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml written R (R Core Team 2020) depends several packages: dplyr (Wickham et al. 2020), rlang (Henry, Wickham, RStudio 2020) caret (Kuhn 2008). ML algorithms supported mikropml require: glmnet (Friedman, Hastie, Tibshirani 2010), e1071 (Meyer et al. 2020), MLmetrics (Yan 2016) logistic regression, rpart2 (Therneau et al. 2019) decision trees, randomForest (Liaw Wiener 2002) random forest, xgboost (Chen et al. 2020) xgboost, kernlab (Karatzoglou et al. 2004) support vector machines. also allow parallelization cross-validation steps using foreach, doFuture, future.apply, future packages (Bengtsson Team 2020). Finally, use ggplot2 plotting (Wickham 2016).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"acknowledgments","dir":"Articles","previous_headings":"","what":"Acknowledgments","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"thank members Schloss Lab participated code clubs related initial development pipeline, made documentation improvements, provided general feedback. also thank Nick Lesniak designing mikropml logo. thank US Research Software Sustainability Institute (NSF #1743188) providing training KLS Winter School Research Software Engineering.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"funding","dir":"Articles","previous_headings":"","what":"Funding","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Salary support PDS came NIH grant 1R01CA215574. KLS received support NIH Training Program Bioinformatics (T32 GM070449). ZL received support National Science Foundation Graduate Research Fellowship Program Grant . DGE 1256260. opinions, findings, conclusions recommendations expressed material authors necessarily reflect views National Science Foundation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"author-contributions","dir":"Articles","previous_headings":"","what":"Author contributions","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"BDT, ZL, KLS contributed equally. Author order among co-first authors determined time since joining project. BDT, ZL, KLS conceptualized study wrote code. KLS structured code R package form. BDT, ZL, JW, PDS developed methodology. PDS, ES, JW supervised project. BDT, ZL, KLS wrote original draft. authors reviewed edited manuscript.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/paper.html","id":"conflicts-of-interest","dir":"Articles","previous_headings":"","what":"Conflicts of interest","title":"mikropml: User-Friendly R Package for Supervised Machine Learning Pipelines","text":"None.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"speed-up-single-runs","dir":"Articles","previous_headings":"","what":"Speed up single runs","title":"Parallel processing","text":"default, preprocess_data(), run_ml(), compare_models() use one process series. ’d like parallelize various steps pipeline make run faster, install foreach, future, future.apply, doFuture. , register future plan prior calling functions: , used multicore plan split work across 2 cores. See future documentation picking best plan use case. Notably, multicore work inside RStudio Windows; need use multisession instead cases. registering future plan, can call preprocess_data() run_ml() usual, run certain tasks parallel. ’s also parallel version rf engine called parRF trains trees forest parallel. See caret docs information.","code":"doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) otu_data_preproc <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed result1 <- run_ml(otu_data_preproc, \"glmnet\", seed = 2019)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"bootstrap-performance","dir":"Articles","previous_headings":"Speed up single runs","what":"Bootstrap performance","title":"Parallel processing","text":"intend call run_ml() generate one train/test split (e.g. temporal split dataset), can evaluate model performance bootstrapping test set. show generate 100 bootstraps calculate confidence interval model performance. use 100 computation speed, recommended generate 10000 bootstraps precise estimation confidence interval.","code":"boot_perf <- bootstrap_performance(result1, outcome_colname = \"dx\", bootstrap_times = 100, alpha = 0.05 ) boot_perf #> # A tibble: 15 × 6 #> term .lower .estimate .upper .alpha .method #> #> 1 AUC 0.489 0.656 0.825 0.05 percentile #> 2 Accuracy 0.448 0.597 0.769 0.05 percentile #> 3 Balanced_Accuracy 0.441 0.597 0.753 0.05 percentile #> 4 Detection_Rate 0.166 0.307 0.462 0.05 percentile #> 5 F1 0.412 0.597 0.759 0.05 percentile #> 6 Kappa -0.119 0.189 0.507 0.05 percentile #> 7 Neg_Pred_Value 0.333 0.583 0.774 0.05 percentile #> 8 Pos_Pred_Value 0.425 0.610 0.812 0.05 percentile #> 9 Precision 0.425 0.610 0.812 0.05 percentile #> 10 Recall 0.387 0.598 0.810 0.05 percentile #> 11 Sensitivity 0.387 0.598 0.810 0.05 percentile #> 12 Specificity 0.342 0.596 0.789 0.05 percentile #> 13 cv_metric_AUC 0.622 0.622 0.622 0.05 percentile #> 14 logLoss 0.655 0.681 0.705 0.05 percentile #> 15 prAUC 0.465 0.592 0.736 0.05 percentile"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"call-run_ml-multiple-times-in-parallel-in-r","dir":"Articles","previous_headings":"","what":"Call run_ml() multiple times in parallel in R","title":"Parallel processing","text":"can use functions future.apply package call run_ml() multiple times parallel different parameters. first need run future::plan() haven’t already. , call run_ml() multiple seeds using future_lapply(): call run_ml() different seed uses different random split data training testing sets. Since using seeds, must set future.seed TRUE (see future.apply documentation blog post details parallel-safe random seeds). example uses seeds speed simplicity, real data recommend using many seeds get better estimate model performance. examples, used functions future.apply package run_ml() parallel, can accomplish thing parallel versions purrr::map() functions using furrr package (e.g. furrr::future_map_dfr()). Extract performance results combine one dataframe seeds:","code":"# NOTE: use more seeds for real-world data results_multi <- future.apply::future_lapply(seq(100, 102), function(seed) { run_ml(otu_data_preproc, \"glmnet\", seed = seed) }, future.seed = TRUE) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. perf_df <- future.apply::future_lapply(results_multi, function(result) { result[[\"performance\"]] %>% select(cv_metric_AUC, AUC, method) }, future.seed = TRUE ) %>% dplyr::bind_rows() perf_df #> # A tibble: 3 × 3 #> cv_metric_AUC AUC method #> #> 1 0.630 0.634 glmnet #> 2 0.591 0.608 glmnet #> 3 0.671 0.471 glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"multiple-ml-methods","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Multiple ML methods","title":"Parallel processing","text":"may also wish compare performance different ML methods. mapply() can iterate multiple lists vectors, future_mapply() works way:","code":"# NOTE: use more seeds for real-world data param_grid <- expand.grid( seeds = seq(100, 103), methods = c(\"glmnet\", \"rf\") ) results_mtx <- future.apply::future_mapply( function(seed, method) { run_ml(otu_data_preproc, method, seed = seed, find_feature_importance = TRUE ) }, param_grid$seeds, param_grid$methods %>% as.character(), future.seed = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Finding feature importance... #> Feature importance complete."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"visualize-the-results","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R","what":"Visualize the results","title":"Parallel processing","text":"ggplot2 required use plotting functions . can also create plots however like using results data.","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"mean-auc","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"Mean AUC","title":"Parallel processing","text":"plot_model_performance() returns ggplot2 object. can add layers customize plot:","code":"perf_df <- lapply( results_mtx[\"performance\", ], function(x) { x %>% select(cv_metric_AUC, AUC, method) } ) %>% dplyr::bind_rows() perf_boxplot <- plot_model_performance(perf_df) perf_boxplot perf_boxplot + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip()"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"roc-and-prc-curves","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Performance","what":"ROC and PRC curves","title":"Parallel processing","text":"First calculate sensitivity, specificity, precision models.","code":"get_sensspec_seed <- function(colnum) { result <- results_mtx[, colnum] trained_model <- result$trained_model test_data <- result$test_data seed <- result$performance$seed method <- result$trained_model$method sensspec <- calc_model_sensspec( trained_model, test_data, \"dx\" ) %>% mutate(seed = seed, method = method) return(sensspec) } sensspec_dat <- purrr::map_dfr( seq(1, dim(results_mtx)[2]), get_sensspec_seed ) #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column. #> Using 'dx' as the outcome column."},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-curves-for-a-single-model","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_1 <- sensspec_dat %>% filter(seed == 100, method == \"glmnet\") sensspec_1 %>% ggplot(aes(x = specificity, y = sensitivity, )) + geom_line() + geom_abline( intercept = 1, slope = 1, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_reverse(expand = c(0, 0), limits = c(1.01, -0.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Specificity\", y = \"Sensitivity\") + theme_bw() + theme(legend.title = element_blank()) baseline_precision_otu <- calc_baseline_precision( otu_data_preproc, \"dx\", \"cancer\" ) #> Using 'dx' as the outcome column. sensspec_1 %>% rename(recall = sensitivity) %>% ggplot(aes(x = recall, y = precision, )) + geom_line() + geom_hline( yintercept = baseline_precision_otu, linetype = \"dashed\", color = \"grey50\" ) + coord_equal() + scale_x_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + scale_y_continuous(expand = c(0, 0), limits = c(-0.01, 1.01)) + labs(x = \"Recall\", y = \"Precision\") + theme_bw() + theme(legend.title = element_blank())"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"plot-mean-roc-and-prc-for-all-models","dir":"Articles","previous_headings":"","what":"Parallel processing","title":"Parallel processing","text":"","code":"sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_precision_otu)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results","what":"Feature importance","title":"Parallel processing","text":"perf_metric_diff feature importance data frame contains differences performance actual test data performance permuted test data (.e. test minus permuted). feature important model performance, expect perf_metric_diff positive. words, features resulted largest decrease performance permuted important features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-multiple-models","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for multiple models","title":"Parallel processing","text":"can select top n important features models plot like : See docs get_feature_importance() details values computed.","code":"feat_df <- results_mtx[\"feature_importance\", ] %>% dplyr::bind_rows() top_n <- 5 top_feats <- feat_df %>% group_by(method, feat) %>% summarize(mean_diff = median(perf_metric_diff)) %>% filter(mean_diff > 0) %>% slice_max(order_by = mean_diff, n = top_n) #> `summarise()` has grouped output by 'method'. You can override using the #> `.groups` argument. feat_df %>% right_join(top_feats, by = c(\"method\", \"feat\")) %>% mutate(features = forcats::fct_reorder(factor(feat), mean_diff)) %>% ggplot(aes(x = perf_metric_diff, y = features, color = method)) + geom_boxplot() + geom_vline(xintercept = 0, linetype = \"dashed\") + labs( x = \"Decrease in performance (actual minus permutation)\", y = \"Features\", caption = \"Features which have a lower performance when permuted have a difference in performance above zero. The features with the greatest decrease are the most important for model performance.\" %>% stringr::str_wrap(width = 100) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"feature-importance-for-a-single-model","dir":"Articles","previous_headings":"Call run_ml() multiple times in parallel in R > Visualize the results > Feature importance","what":"Feature importance for a single model","title":"Parallel processing","text":"can also plot feature importance single model. report actual performance, permutation performance, empirical 95% confidence interval permutation performance.","code":"feat_imp_1 <- results_mtx[, 1][[\"feature_importance\"]] perf_metric_name <- results_mtx[, 1][[\"trained_model\"]]$metric perf_actual <- results_mtx[, 1][[\"performance\"]] %>% pull(perf_metric_name) feat_imp_1 %>% filter(perf_metric_diff > 0) %>% mutate(feat = if_else(pvalue < 0.05, paste0(\"*\", feat), as.character(feat)) %>% as.factor() %>% forcats::fct_reorder(perf_metric_diff)) %>% ggplot(aes(x = perf_metric, xmin = lower, xmax = upper, y = feat)) + geom_pointrange() + geom_vline(xintercept = perf_actual, linetype = \"dashed\") + labs( x = \"Permutation performance\", y = \"Features\", caption = \"The dashed line represents the actual performance on the test set. Features which have a lower performance when permuted are important for model performance. Significant features (pvalue < 0.05) are marked with an asterisk (*). Error bars represent the 95% confidence interval.\" %>% stringr::str_wrap(width = 110) ) + theme_bw() + theme(plot.caption = element_text(hjust = 0))"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"live-progress-updates","dir":"Articles","previous_headings":"","what":"Live progress updates","title":"Parallel processing","text":"preprocess_data() get_feature_importance() support reporting live progress updates using progressr package. format , recommend using progress bar like : Note future backends support “near-live” progress updates, meaning progress may reported immediately parallel processing futures. Read progressr vignette. progressr customize format progress updates, see progressr docs.","code":"# optionally, specify the progress bar format with the `progress` package. progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) # tell progressr to always report progress in any functions that use it. # set this to FALSE to turn it back off again. progressr::handlers(global = TRUE) # run your code and watch the live progress updates. dat <- preprocess_data(otu_mini_bin, \"dx\")$dat_transformed #> Using 'dx' as the outcome column. #> preprocessing ========================>------- 78% | elapsed: 1s | eta: 0s results <- run_ml(dat, \"glmnet\", kfold = 2, cv_times = 2, find_feature_importance = TRUE ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Feature importance =========================== 100% | elapsed: 37s | eta: 0s"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/parallel.html","id":"parallelizing-with-snakemake","dir":"Articles","previous_headings":"","what":"Parallelizing with Snakemake","title":"Parallel processing","text":"parallelizing multiple calls run_ml() R examples , results objects held memory. isn’t big deal small dataset run seeds. However, large datasets run parallel , say, 100 seeds (recommended), may run problems trying store objects memory . Using workflow manager Snakemake Nextflow highly recommend maximize scalability reproducibility computational analyses. created template Snakemake workflow can use starting point ML project.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"its-running-so-slow","dir":"Articles","previous_headings":"","what":"It’s running so slow!","title":"Preprocessing data","text":"Since assume lot won’t read entire vignette, ’m going say beginning. preprocess_data() function running super slow, consider parallelizing goes faster! preprocess_data() also can report live progress updates. See vignette(\"parallel\") details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Preprocessing data","text":"’re going start simple get complicated, want whole shebang , just scroll bottom. First, load mikropml:","code":"library(mikropml)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"binary-data","dir":"Articles","previous_headings":"Examples","what":"Binary data","title":"Preprocessing data","text":"Let’s start binary variables: addition dataframe , provide name outcome column preprocess_data(). ’s preprocessed data looks like: output list: dat_transformed transformed data, grp_feats list grouped features, removed_feats list features removed. , grp_feats NULL perfectly correlated features (e.g. c(0,1,0) c(0,1,0), c(0,1,0) c(1,0,1) - see details). first column (var1) dat_transformed character changed var1_yes zeros () ones (yes). values second column (var2) stay ’s already binary, name changes var2_1. third column (var3) factor also changed binary b 1 0, denoted new column name var3_b.","code":"# raw binary dataset bin_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = factor(c(\"a\", \"a\", \"b\")) ) bin_df #> outcome var1 var2 var3 #> 1 normal no 0 a #> 2 normal yes 1 a #> 3 cancer no 1 b # preprocess raw binary data preprocess_data(dataset = bin_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_yes var2_1 var3_b #> #> 1 normal 0 0 0 #> 2 normal 1 1 0 #> 3 cancer 0 1 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"categorical-data","dir":"Articles","previous_headings":"Examples","what":"Categorical data","title":"Preprocessing data","text":"non-binary categorical data: can see, variable split 3 different columns - one type (, b, c). , grp_feats NULL.","code":"# raw categorical dataset cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"a\", \"b\", \"c\") ) cat_df #> outcome var1 #> 1 normal a #> 2 normal b #> 3 cancer c # preprocess raw categorical data preprocess_data(dataset = cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_a var1_b var1_c #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"continuous-data","dir":"Articles","previous_headings":"Examples","what":"Continuous data","title":"Preprocessing data","text":"Now, looking continuous variables: Wow! numbers change? default normalize data using \"center\" \"scale\". often best practice, may want normalize data, may want normalize data different way. don’t want normalize data, can use method=NULL: can also normalize data different ways. can choose method supported method argument caret::preProcess() (see caret::preProcess() docs details). Note methods applied continuous variables. Another feature preprocess_data() provide continuous variables characters, converted numeric: don’t want happen, want character data remain character data even can converted numeric, can use to_numeric=FALSE kept categorical: can see output, case features treated groups rather numbers (e.g. normalized).","code":"# raw continuous dataset cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(1, 2, 3) ) cont_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous data preprocess_data(dataset = cont_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1 #> #> 1 normal -1 #> 2 normal 0 #> 3 cancer 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) # preprocess raw continuous data, no normalization preprocess_data(dataset = cont_df, outcome_colname = \"outcome\", method = NULL) # raw continuous dataset as characters cont_char_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"1\", \"2\", \"3\") ) cont_char_df #> outcome var1 #> 1 normal 1 #> 2 normal 2 #> 3 cancer 3 # preprocess raw continuous character data as numeric preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\") # preprocess raw continuous character data as characters preprocess_data(dataset = cont_char_df, outcome_colname = \"outcome\", to_numeric = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 4 #> outcome var1_1 var1_2 var1_3 #> #> 1 normal 1 0 0 #> 2 normal 0 1 0 #> 3 cancer 0 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"collapse-perfectly-correlated-features","dir":"Articles","previous_headings":"Examples","what":"Collapse perfectly correlated features","title":"Preprocessing data","text":"default, preprocess_data() collapses features perfectly positively negatively correlated. multiple copies features add information machine learning, makes run_ml faster. can see, end one variable, 3 grouped together. Also, second element list longer NULL. Instead, tells grp1 contains var1, var2, var3. want group positively correlated features, negatively correlated features (e.g. interpretability, another downstream application), can using group_neg_corr=FALSE: , var3 kept ’s ’s negatively correlated var1 var2. can also choose keep features separate, even perfectly correlated, using collapse_corr_feats=FALSE: case, grp_feats always NULL.","code":"# raw correlated dataset corr_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 0), var3 = c(1, 0, 1) ) corr_df #> outcome var1 var2 var3 #> 1 normal no 0 1 #> 2 normal yes 1 0 #> 3 cancer no 0 1 # preprocess raw correlated dataset preprocess_data(dataset = corr_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome grp1 #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1_yes\" \"var3_1\" #> #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", group_neg_corr = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw correlated dataset; don't group negatively correlated features preprocess_data(dataset = corr_df, outcome_colname = \"outcome\", collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var3_1 #> #> 1 normal 0 1 #> 2 normal 1 0 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"data-with-near-zero-variance","dir":"Articles","previous_headings":"Examples","what":"Data with near-zero variance","title":"Preprocessing data","text":"variables zero, “”? ones won’t contribute information, remove : , var3, var4, var5 variability, variables removed preprocessing: can read caret::preProcess() documentation information. default, remove features “near-zero variance” (remove_var='nzv'). uses default arguments caret::nearZeroVar(). However, particularly smaller datasets, might want remove features near-zero variance. want remove features zero variance, can use remove_var='zv': want include features, can use argument remove_zv=NULL. work, collapse correlated features (otherwise errors underlying caret function use). want nuanced remove near-zero variance features (e.g. change default 10% cutoff percentage distinct values total number samples), can use caret::preProcess() function running preprocess_data remove_var=NULL (see caret::nearZeroVar() function information).","code":"# raw dataset with non-variable features nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(0, 1, 1), var3 = c(\"no\", \"no\", \"no\"), var4 = c(0, 0, 0), var5 = c(12, 12, 12) ) nonvar_df #> outcome var1 var2 var3 var4 var5 #> 1 normal no 0 no 0 12 #> 2 normal yes 1 no 0 12 #> 3 cancer no 1 no 0 12 # remove features with near-zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # remove features with zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = \"zv\") #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\" \"var3\" \"var5\" # don't remove features with near-zero or zero variance preprocess_data(dataset = nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> $dat_transformed #> # A tibble: 3 × 5 #> outcome var1_yes var2_1 var3 var5 #> #> 1 normal 0 0 0 12 #> 2 normal 1 1 0 12 #> 3 cancer 0 1 0 12 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var4\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"missing-data","dir":"Articles","previous_headings":"Examples","what":"Missing data","title":"Preprocessing data","text":"preprocess_data() also deals missing data. : Removes missing outcome variables. Maintains zero variability feature already variability (.e. feature removed removing features near-zero variance). Replaces missing binary categorical variables zero (splitting multiple columns). Replaces missing continuous data median value feature. ’d like deal missing data different way, please prior inputting data preprocess_data().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"remove-missing-outcome-variables","dir":"Articles","previous_headings":"Examples > Missing data","what":"Remove missing outcome variables","title":"Preprocessing data","text":"","code":"# raw dataset with missing outcome value miss_oc_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = c(\"no\", \"yes\", \"no\", \"no\"), var2 = c(0, 1, 1, 1) ) miss_oc_df #> outcome var1 var2 #> 1 normal no 0 #> 2 normal yes 1 #> 3 cancer no 1 #> 4 no 1 # preprocess raw dataset with missing outcome value preprocess_data(dataset = miss_oc_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2_1 #> #> 1 normal 0 0 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"maintain-zero-variability-in-a-feature-if-it-already-has-no-variability","dir":"Articles","previous_headings":"Examples > Missing data","what":"Maintain zero variability in a feature if it already has no variability","title":"Preprocessing data","text":", non-variable feature missing data removed removed features near-zero variance. maintained feature, ’d ones:","code":"# raw dataset with missing value in non-variable feature miss_nonvar_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", \"no\"), var2 = c(NA, 1, 1) ) miss_nonvar_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer no 1 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 2 #> outcome var1_yes #> #> 1 normal 0 #> 2 normal 1 #> 3 cancer 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\" # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_nonvar_df, outcome_colname = \"outcome\", remove_var = NULL, collapse_corr_feats = FALSE) #> Using 'outcome' as the outcome column. #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_yes var2 #> #> 1 normal 0 1 #> 2 normal 1 1 #> 3 cancer 0 1 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-binary-and-categorical-variables-with-zero","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing binary and categorical variables with zero","title":"Preprocessing data","text":"binary variable split two, missing value considered zero .","code":"# raw dataset with missing value in categorical feature miss_cat_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\"), var1 = c(\"no\", \"yes\", NA), var2 = c(NA, 1, 0) ) miss_cat_df #> outcome var1 var2 #> 1 normal no NA #> 2 normal yes 1 #> 3 cancer 0 # preprocess raw dataset with missing value in non-variable feature preprocess_data(dataset = miss_cat_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> $dat_transformed #> # A tibble: 3 × 3 #> outcome var1_no var1_yes #> #> 1 normal 1 0 #> 2 normal 0 1 #> 3 cancer 0 0 #> #> $grp_feats #> NULL #> #> $removed_feats #> [1] \"var2\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"replace-missing-continuous-data-with-the-median-value-of-that-feature","dir":"Articles","previous_headings":"Examples > Missing data","what":"Replace missing continuous data with the median value of that feature","title":"Preprocessing data","text":"’re normalizing continuous features ’s easier see ’s going (.e. median value used):","code":"# raw dataset with missing value in continuous feature miss_cont_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", \"normal\"), var1 = c(1, 2, 2, NA), var2 = c(1, 2, 3, NA) ) miss_cont_df #> outcome var1 var2 #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal NA NA # preprocess raw dataset with missing value in continuous feature preprocess_data(dataset = miss_cont_df, outcome_colname = \"outcome\", method = NULL) #> Using 'outcome' as the outcome column. #> 2 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 4 × 3 #> outcome var1 var2 #> #> 1 normal 1 1 #> 2 normal 2 2 #> 3 cancer 2 3 #> 4 normal 2 2 #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"putting-it-all-together","dir":"Articles","previous_headings":"Examples","what":"Putting it all together","title":"Preprocessing data","text":"’s complicated example raw data puts everything discussed together: Let’s throw preprocessing function default values: can see, got several messages: One samples (row 4) removed outcome value missing. One variables feature variation missing value replaced non-varying value (var11). Four categorical missing values replaced zero (var9). 4 missing rather just 1 (like raw data) split categorical variable 4 different columns first. One missing continuous value imputed using median value feature (var8). Additionally, can see continuous variables normalized, categorical variables changed binary, several features grouped together. variables group can found grp_feats.","code":"test_df <- data.frame( outcome = c(\"normal\", \"normal\", \"cancer\", NA), var1 = 1:4, var2 = c(\"a\", \"b\", \"c\", \"d\"), var3 = c(\"no\", \"yes\", \"no\", \"no\"), var4 = c(0, 1, 0, 0), var5 = c(0, 0, 0, 0), var6 = c(\"no\", \"no\", \"no\", \"no\"), var7 = c(1, 1, 0, 0), var8 = c(5, 6, NA, 7), var9 = c(NA, \"x\", \"y\", \"z\"), var10 = c(1, 0, NA, NA), var11 = c(1, 1, NA, NA), var12 = c(\"1\", \"2\", \"3\", \"4\") ) test_df #> outcome var1 var2 var3 var4 var5 var6 var7 var8 var9 var10 var11 var12 #> 1 normal 1 a no 0 0 no 1 5 1 1 1 #> 2 normal 2 b yes 1 0 no 1 6 x 0 1 2 #> 3 cancer 3 c no 0 0 no 0 NA y NA NA 3 #> 4 4 d no 0 0 no 0 7 z NA NA 4 preprocess_data(dataset = test_df, outcome_colname = \"outcome\") #> Using 'outcome' as the outcome column. #> Removed 1/4 (25%) of samples because of missing outcome value (NA). #> There are 1 missing value(s) in features with no variation. Missing values were replaced with the non-varying value. #> 2 categorical missing value(s) (NA) were replaced with 0. Note that the matrix is not full rank so missing values may be duplicated in separate columns. #> 1 missing continuous value(s) were imputed using the median value of the feature. #> $dat_transformed #> # A tibble: 3 × 6 #> outcome grp1 var2_a grp2 grp3 var8 #> #> 1 normal -1 1 0 0 -0.707 #> 2 normal 0 0 1 0 0.707 #> 3 cancer 1 0 0 1 0 #> #> $grp_feats #> $grp_feats$grp1 #> [1] \"var1\" \"var12\" #> #> $grp_feats$var2_a #> [1] \"var2_a\" #> #> $grp_feats$grp2 #> [1] \"var2_b\" \"var3_yes\" \"var9_x\" #> #> $grp_feats$grp3 #> [1] \"var2_c\" \"var7_1\" \"var9_y\" #> #> $grp_feats$var8 #> [1] \"var8\" #> #> #> $removed_feats #> [1] \"var4\" \"var5\" \"var10\" \"var6\" \"var11\""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/preprocess.html","id":"next-step-train-and-evaluate-your-model","dir":"Articles","previous_headings":"Examples","what":"Next step: train and evaluate your model!","title":"Preprocessing data","text":"preprocess data (either using preprocess_data() preprocessing data ), ’re ready train evaluate machine learning models! Please see run_ml() information training models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"the-simplest-way-to-run_ml","dir":"Articles","previous_headings":"","what":"The simplest way to run_ml()","title":"Hyperparameter tuning","text":"mentioned , minimal input dataset (dataset) machine learning model want use (method). run_ml(), default 100 times repeated, 5-fold cross-validation, evaluate hyperparameters 500 total iterations. Say want run L2 regularized logistic regression. : ’ll probably get warning run dataset small. want learn , check introductory vignette training evaluating ML model: vignette(\"introduction\"). default, run_ml() selects hyperparameters depending dataset method used. can see, alpha hyperparameter set 0, specifies L2 regularization. glmnet gives us option run L1 L2 regularization. change alpha 1, run L1-regularized logistic regression. can also tune alpha specifying variety values 0 1. use value 0 1, running elastic net. default hyperparameter lambda adjusts L2 regularization penalty range values 10^-4 10. look 100 repeated cross-validation performance metrics AUC, Accuracy, prAUC tested lambda value, see appropriate dataset better others.","code":"results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Loading required package: ggplot2 #> Loading required package: lattice #> #> Attaching package: 'caret' #> The following object is masked from 'package:mikropml': #> #> compare_models #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 #> 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 #> 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 #> 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 #> 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 #> Recall Detection_Rate Balanced_Accuracy #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839655 0.5854870 #> 0.5789667 0.2839636 0.5855458 #> 0.5805917 0.2847195 0.5919135 #> 0.5057833 0.2478291 0.5886711 #> 0.0607250 0.0292613 0.5142963 #> #> Tuning parameter 'alpha' was held constant at a value of 0 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 0 and lambda = 1. results$trained_model$results #> alpha lambda logLoss AUC prAUC Accuracy Kappa F1 #> 1 0 1e-04 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 2 0 1e-03 0.7113272 0.6123301 0.5725828 0.5853927 0.17080523 0.5730989 #> 3 0 1e-02 0.7112738 0.6123883 0.5726478 0.5854514 0.17092470 0.5731635 #> 4 0 1e-01 0.6819806 0.6210744 0.5793961 0.5918756 0.18369829 0.5779616 #> 5 0 1e+00 0.6803749 0.6278273 0.5827655 0.5896356 0.17756961 0.5408139 #> 6 0 1e+01 0.6909820 0.6271894 0.5814202 0.5218000 0.02920942 0.1875293 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision Recall #> 1 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 2 0.5789667 0.5920074 0.5796685 0.5977166 0.5796685 0.5789667 #> 3 0.5789667 0.5921250 0.5797769 0.5977182 0.5797769 0.5789667 #> 4 0.5805917 0.6032353 0.5880165 0.6026963 0.5880165 0.5805917 #> 5 0.5057833 0.6715588 0.6005149 0.5887829 0.6005149 0.5057833 #> 6 0.0607250 0.9678676 0.7265246 0.5171323 0.7265246 0.0607250 #> Detection_Rate Balanced_Accuracy logLossSD AUCSD prAUCSD AccuracySD #> 1 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 2 0.2839655 0.5854870 0.085315967 0.09115229 0.07296554 0.07628572 #> 3 0.2839636 0.5855458 0.085276565 0.09122242 0.07301412 0.07637123 #> 4 0.2847195 0.5919135 0.048120032 0.09025695 0.07329214 0.07747312 #> 5 0.2478291 0.5886711 0.012189172 0.09111917 0.07505095 0.07771171 #> 6 0.0292613 0.5142963 0.001610008 0.09266875 0.07640896 0.03421597 #> KappaSD F1SD SensitivitySD SpecificitySD Pos_Pred_ValueSD #> 1 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 2 0.15265728 0.09353786 0.13091452 0.11988406 0.08316345 #> 3 0.15281903 0.09350099 0.13073501 0.12002481 0.08329024 #> 4 0.15485134 0.09308733 0.12870031 0.12037225 0.08554483 #> 5 0.15563046 0.10525917 0.13381009 0.11639614 0.09957685 #> 6 0.06527242 0.09664720 0.08010494 0.06371495 0.31899811 #> Neg_Pred_ValueSD PrecisionSD RecallSD Detection_RateSD Balanced_AccuracySD #> 1 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 2 0.08384956 0.08316345 0.13091452 0.06394409 0.07640308 #> 3 0.08385838 0.08329024 0.13073501 0.06384692 0.07648207 #> 4 0.08427362 0.08554483 0.12870031 0.06272897 0.07748791 #> 5 0.07597766 0.09957685 0.13381009 0.06453637 0.07773039 #> 6 0.02292294 0.31899811 0.08010494 0.03803159 0.03184136"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"customizing-hyperparameters","dir":"Articles","previous_headings":"","what":"Customizing hyperparameters","title":"Hyperparameter tuning","text":"example, want change lambda values provide better range test cross-validation step. don’t want use defaults provide named list new values. example: Now let’s run L2 logistic regression new lambda values: time, cover larger different range lambda settings cross-validation. know lambda value best one? answer , need run ML pipeline multiple data splits look mean cross-validation performance lambda across modeling experiments. describe run pipeline multiple data splits vignette(\"parallel\"). train model new lambda range defined . run 3 times different seed, result different splits data training testing sets. can use plot_hp_performance see lambda gives us largest mean AUC value across modeling experiments. can see, get mean maxima 0.03 best lambda value dataset run 3 data splits. fact seeing maxima middle range edges, shows providing large enough range exhaust lambda search build model. recommend user use plot make sure best hyperparameter edges provided list. better understanding global maxima, better run data splits using seeds. picked 3 seeds keep runtime vignette, real-world data recommend using many seeds.","code":"new_hp <- list( alpha = 1, lambda = c(0.00001, 0.0001, 0.001, 0.01, 0.015, 0.02, 0.025, 0.03, 0.04, 0.05, 0.06, 0.1) ) new_hp #> $alpha #> [1] 1 #> #> $lambda #> [1] 0.00001 0.00010 0.00100 0.01000 0.01500 0.02000 0.02500 0.03000 0.04000 #> [10] 0.05000 0.06000 0.10000 results <- run_ml(dat, \"glmnet\", outcome_colname = \"dx\", cv_times = 100, hyperparameters = new_hp, seed = 2019 ) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. results$trained_model #> glmnet #> #> 161 samples #> 10 predictor #> 2 classes: 'cancer', 'normal' #> #> No pre-processing #> Resampling: Cross-Validated (5 fold, repeated 100 times) #> Summary of sample sizes: 128, 129, 129, 129, 129, 130, ... #> Resampling results across tuning parameters: #> #> lambda logLoss AUC prAUC Accuracy Kappa F1 #> 0.00001 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00010 0.7215038 0.6112253 0.5720005 0.5842184 0.1684871 0.5726974 #> 0.00100 0.7209099 0.6112771 0.5719601 0.5845329 0.1691285 0.5730414 #> 0.01000 0.6984432 0.6156112 0.5758977 0.5830960 0.1665062 0.5759265 #> 0.01500 0.6913332 0.6169396 0.5770496 0.5839720 0.1683912 0.5786347 #> 0.02000 0.6870103 0.6177313 0.5779563 0.5833645 0.1673234 0.5796891 #> 0.02500 0.6846387 0.6169757 0.5769305 0.5831907 0.1669901 0.5792840 #> 0.03000 0.6834369 0.6154763 0.5754118 0.5821394 0.1649081 0.5786336 #> 0.04000 0.6833322 0.6124776 0.5724802 0.5786224 0.1578750 0.5735757 #> 0.05000 0.6850454 0.6069059 0.5668928 0.5732197 0.1468699 0.5624480 #> 0.06000 0.6880861 0.5974311 0.5596714 0.5620224 0.1240112 0.5375824 #> 0.10000 0.6944846 0.5123565 0.3034983 0.5120114 0.0110144 0.3852423 #> Sensitivity Specificity Pos_Pred_Value Neg_Pred_Value Precision #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5798500 0.5888162 0.5780748 0.5971698 0.5780748 #> 0.5801167 0.5891912 0.5784544 0.5974307 0.5784544 #> 0.5883667 0.5783456 0.5755460 0.5977390 0.5755460 #> 0.5929750 0.5756471 0.5763123 0.5987220 0.5763123 #> 0.5967167 0.5708824 0.5748385 0.5990649 0.5748385 #> 0.5970250 0.5702721 0.5743474 0.5997928 0.5743474 #> 0.5964500 0.5687721 0.5734044 0.5982451 0.5734044 #> 0.5904500 0.5677353 0.5699817 0.5943308 0.5699817 #> 0.5734833 0.5736176 0.5668523 0.5864448 0.5668523 #> 0.5360333 0.5881250 0.5595918 0.5722851 0.5595918 #> 0.1145917 0.8963456 0.5255752 0.5132665 0.5255752 #> Recall Detection_Rate Balanced_Accuracy #> 0.5798500 0.28441068 0.5843331 #> 0.5798500 0.28441068 0.5843331 #> 0.5801167 0.28453770 0.5846539 #> 0.5883667 0.28860521 0.5833561 #> 0.5929750 0.29084305 0.5843110 #> 0.5967167 0.29264681 0.5837995 #> 0.5970250 0.29278708 0.5836485 #> 0.5964500 0.29248583 0.5826110 #> 0.5904500 0.28951992 0.5790926 #> 0.5734833 0.28119862 0.5735505 #> 0.5360333 0.26270204 0.5620792 #> 0.1145917 0.05585777 0.5054686 #> #> Tuning parameter 'alpha' was held constant at a value of 1 #> AUC was used to select the optimal model using the largest value. #> The final values used for the model were alpha = 1 and lambda = 0.02. results <- lapply(seq(100, 102), function(seed) { run_ml(dat, \"glmnet\", seed = seed, hyperparameters = new_hp) }) #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. #> Using 'dx' as the outcome column. #> Training the model... #> Training complete. models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC)"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"hyperparameter-options","dir":"Articles","previous_headings":"","what":"Hyperparameter options","title":"Hyperparameter tuning","text":"can see default hyperparameters used dataset get_hyperparams_list(). examples built-datasets provide: hyperparameters tuned modeling methods. output similar, won’t go details.","code":"get_hyperparams_list(otu_mini_bin, \"glmnet\") #> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0 get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"regression","dir":"Articles","previous_headings":"Hyperparameter options","what":"Regression","title":"Hyperparameter tuning","text":"mentioned , glmnet uses alpha parameter lambda hyperparameter. alpha 0 L2 regularization (ridge). alpha 1 L1 regularization (lasso). alpha elastic net. can also tune alpha like hyperparameter. Please refer original glmnet documentation information: https://web.stanford.edu/~hastie/glmnet/glmnet_alpha.html default hyperparameters chosen run_ml() fixed glmnet.","code":"#> $lambda #> [1] 1e-04 1e-03 1e-02 1e-01 1e+00 1e+01 #> #> $alpha #> [1] 0"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"random-forest","dir":"Articles","previous_headings":"Hyperparameter options","what":"Random forest","title":"Hyperparameter tuning","text":"run rf parRF, using randomForest package implementation. tuning mtry hyperparameter. number features randomly collected sampled tree node. number needs less number features dataset. Please refer original documentation information: https://cran.r-project.org/web/packages/randomForest/randomForest.pdf default, take square root number features dataset provide range [sqrt_features / 2, sqrt_features, sqrt_features * 2]. example number features 1000: Similar glmnet method, can provide mtry range.","code":"#> $mtry #> [1] 16 32 64"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"decision-tree","dir":"Articles","previous_headings":"Hyperparameter options","what":"Decision tree","title":"Hyperparameter tuning","text":"run rpart2, running rpart package implementation decision tree. tuning maxdepth hyperparameter. maximum depth node final tree. Please refer original documentation information maxdepth: https://cran.r-project.org/web/packages/rpart/rpart.pdf default, provide range less number features dataset. example 1000 features: 10 features:","code":"#> $maxdepth #> [1] 1 2 4 8 16 30 #> $maxdepth #> [1] 1 2 4 8"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"svm-with-radial-basis-kernel","dir":"Articles","previous_headings":"Hyperparameter options","what":"SVM with radial basis kernel","title":"Hyperparameter tuning","text":"run svmRadial method, tuning C sigma hyperparameters. sigma defines far influence single training example reaches C behaves regularization parameter. Please refer great sklearn resource information hyperparameters: https://scikit-learn.org/stable/auto_examples/svm/plot_rbf_parameters.html default, provide 2 separate range values two hyperparameters.","code":"#> $C #> [1] 1e-03 1e-02 1e-01 1e+00 1e+01 1e+02 #> #> $sigma #> [1] 1e-06 1e-05 1e-04 1e-03 1e-02 1e-01"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"xgboost","dir":"Articles","previous_headings":"Hyperparameter options","what":"XGBoost","title":"Hyperparameter tuning","text":"run xgbTree method, tuning nrounds, gamma, eta max_depth, colsample_bytree, min_child_weight subsample hyperparameters. can read hyperparameters : https://xgboost.readthedocs.io/en/latest/parameter.html default, set nrounds, gamma, colsample_bytree min_child_weight fixed values provide range values eta, max_depth subsample. can changed optimized user supplying custom named list hyperparameters run_ml().","code":"#> $nrounds #> [1] 100 #> #> $gamma #> [1] 0 #> #> $eta #> [1] 0.001 0.010 0.100 1.000 #> #> $max_depth #> [1] 1 2 4 8 16 30 #> #> $colsample_bytree #> [1] 0.8 #> #> $min_child_weight #> [1] 1 #> #> $subsample #> [1] 0.4 0.5 0.6 0.7"},{"path":"http://www.schlosslab.org/mikropml/dev/articles/tuning.html","id":"other-ml-methods","dir":"Articles","previous_headings":"","what":"Other ML methods","title":"Hyperparameter tuning","text":"ML methods tested set default hyperparameters , theory may able use methods supported caret run_ml(). Take look available models caret (see list tag). need give run_ml() custom hyperparameters just like examples :","code":"run_ml(otu_mini_bin, \"regLogistic\", hyperparameters = list( cost = 10^seq(-4, 1, 1), epsilon = c(0.01), loss = c(\"L2_primal\") ) )"},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":null,"dir":"","previous_headings":"","what":"Authors","title":"Authors and Citation","text":"Begüm Topçuoğlu. Author. Zena Lapp. Author. Kelly Sovacool. Author, maintainer. Evan Snitkin. Author. Jenna Wiens. Author. Patrick Schloss. Author. Nick Lesniak. Contributor. Courtney Armour. Contributor. Sarah Lucas. Contributor.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/authors.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"Authors and Citation","text":"Topçuoğlu et al., (2021). mikropml: User-Friendly R Package Supervised Machine Learning Pipelines. Journal Open Source Software, 6(61), 3073, https://doi.org/10.21105/joss.03073","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"mikropml-","dir":"","previous_headings":"","what":"User-Friendly R Package for Supervised Machine Learning Pipelines","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"meek-ROPE em el User-Friendly R Package Supervised Machine Learning Pipelines interface build machine learning models classification regression problems. mikropml implements ML pipeline described Topçuoğlu et al. (2020) reasonable default options data preprocessing, hyperparameter tuning, cross-validation, testing, model evaluation, interpretation steps. See website information, documentation, examples.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"installation","dir":"","previous_headings":"","what":"Installation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"can install latest release CRAN: development version GitHub: install terminal using conda mamba:","code":"install.packages('mikropml') # install.packages(\"devtools\") devtools::install_github(\"SchlossLab/mikropml\") mamba install -c conda-forge r-mikropml"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"dependencies","dir":"","previous_headings":"Installation","what":"Dependencies","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Imports: caret, dplyr, e1071, glmnet, kernlab, MLmetrics, randomForest, rlang, rpart, stats, utils, xgboost Suggests: assertthat, doFuture, forcats, foreach, future, future.apply, furrr, ggplot2, knitr, progress, progressr, purrr, rmarkdown, rsample, testthat, tidyr","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"usage","dir":"","previous_headings":"","what":"Usage","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Check introductory vignette quick start tutorial. -depth discussion, read vignettes /take look reference documentation. can watch Riffomonas Project series video tutorials covering mikropml skills related machine learning. also provide Snakemake workflow running mikropml locally HPC. highly recommend running mikropml Snakemake another workflow management system reproducibility scalability ML analyses.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"help--contributing","dir":"","previous_headings":"","what":"Help & Contributing","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"come across bug, open issue include minimal reproducible example. questions, create new post Discussions. ’d like contribute, see guidelines .","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"code-of-conduct","dir":"","previous_headings":"","what":"Code of Conduct","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"Please note mikropml project released Contributor Code Conduct. contributing project, agree abide terms.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"license","dir":"","previous_headings":"","what":"License","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"mikropml package licensed MIT license. Text images included repository, including mikropml logo, licensed CC 4.0 license.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"citation","dir":"","previous_headings":"","what":"Citation","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"cite mikropml publications, use: Topçuoğlu BD, Lapp Z, Sovacool KL, Snitkin E, Wiens J, Schloss PD (2021). “mikropml: User-Friendly R Package Supervised Machine Learning Pipelines.” Journal Open Source Software, 6(61), 3073. doi:10.21105/joss.03073, https://joss.theoj.org/papers/10.21105/joss.03073. BibTeX entry LaTeX users :","code":"@Article{, title = {{mikropml}: User-Friendly R Package for Supervised Machine Learning Pipelines}, author = {Begüm D. Topçuoğlu and Zena Lapp and Kelly L. Sovacool and Evan Snitkin and Jenna Wiens and Patrick D. Schloss}, journal = {Journal of Open Source Software}, year = {2021}, month = {May}, volume = {6}, number = {61}, pages = {3073}, doi = {10.21105/joss.03073}, url = {https://joss.theoj.org/papers/10.21105/joss.03073}, }"},{"path":"http://www.schlosslab.org/mikropml/dev/index.html","id":"why-the-name","dir":"","previous_headings":"","what":"Why the name?","title":"User-Friendly R Package for Supervised Machine Learning Pipelines","text":"word “mikrop” (pronounced “meek-ROPE”) Turkish “microbe”. package originally implemented machine learning pipeline microbiome-based classification problems (see Topçuoğlu et al. 2020). realized methods applicable many fields , stuck name like !","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"issues","dir":"","previous_headings":"","what":"Issues","title":"NA","text":"Resolves # .","code":""},{"path":[]},{"path":"http://www.schlosslab.org/mikropml/dev/pull_request_template.html","id":"checklist","dir":"","previous_headings":"","what":"Checklist","title":"NA","text":"(Strikethrough points applicable.) Write unit tests new functionality bug fixes. roxygen comments vignettes Update NEWS.md includes user-facing changes. check workflow succeeds recent commit. always required PR can merged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"Uses rsample::bootstraps(), rsample::int_pctl(), furrr::future_map()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"","code":"bootstrap_performance( ml_result, outcome_colname, bootstrap_times = 10000, alpha = 0.05 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"ml_result result returned single run_ml() call outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). bootstrap_times number boostraps create (default: 10000) alpha alpha level confidence interval (default 0.05 create 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"data frame estimate (.estimate), lower bound (.lower), upper bound (.upper) performance metric (term).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate a bootstrap confidence interval for the performance on a single train/test split — bootstrap_performance","text":"","code":"bootstrap_performance(otu_mini_bin_results_glmnet, \"dx\", bootstrap_times = 10, alpha = 0.10 ) #> Warning: Recommend at least 1000 non-missing bootstrap resamples for terms: `AUC`, `Accuracy`, `Balanced_Accuracy`, `Detection_Rate`, `F1`, `Kappa`, `Neg_Pred_Value`, `Pos_Pred_Value`, `Precision`, `Recall`, `Sensitivity`, `Specificity`, `cv_metric_AUC`, `logLoss`, `prAUC`. #> # A tibble: 15 × 6 #> term .lower .estimate .upper .alpha .method #> #> 1 AUC 0.496 0.659 0.838 0.1 percentile #> 2 Accuracy 0.510 0.613 0.718 0.1 percentile #> 3 Balanced_Accuracy 0.490 0.611 0.728 0.1 percentile #> 4 Detection_Rate 0.254 0.351 0.464 0.1 percentile #> 5 F1 0.539 0.641 0.752 0.1 percentile #> 6 Kappa -0.0121 0.213 0.421 0.1 percentile #> 7 Neg_Pred_Value 0.301 0.561 0.810 0.1 percentile #> 8 Pos_Pred_Value 0.539 0.654 0.785 0.1 percentile #> 9 Precision 0.539 0.654 0.785 0.1 percentile #> 10 Recall 0.521 0.642 0.807 0.1 percentile #> 11 Sensitivity 0.521 0.642 0.807 0.1 percentile #> 12 Specificity 0.44 0.579 0.661 0.1 percentile #> 13 cv_metric_AUC 0.622 0.622 0.622 0.1 percentile #> 14 logLoss 0.656 0.682 0.702 0.1 percentile #> 15 prAUC 0.468 0.598 0.743 0.1 percentile if (FALSE) { outcome_colname <- \"dx\" run_ml(otu_mini_bin, \"rf\", outcome_colname = \"dx\") %>% bootstrap_performance(outcome_colname, bootstrap_times = 10000, alpha = 0.05 ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":null,"dir":"Reference","previous_headings":"","what":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"Get lower upper bounds empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"lower_bound(x, alpha) upper_bound(x, alpha)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"x vector test statistics, permutation tests bootstraps alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"value lower upper bound confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"lower_bound(): Get lower bound empirical confidence interval upper_bound(): Get upper bound empirical confidence interval","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/bounds.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get the lower and upper bounds for an empirical confidence interval — lower_bound","text":"","code":"if (FALSE) { x <- 1:10000 lower_bound(x, 0.05) upper_bound(x, 0.05) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Calculate fraction positives, .e. baseline precision PRC curve","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"calc_baseline_precision(dataset, outcome_colname = NULL, pos_outcome = NULL)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). pos_outcome positive outcome outcome_colname, e.g. \"cancer\" otu_mini_bin dataset.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"baseline precision based fraction positives","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_baseline_precision.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate the fraction of positives, i.e. baseline precision for a PRC curve — calc_baseline_precision","text":"","code":"# calculate the baseline precision data.frame(y = c(\"a\", \"b\", \"a\", \"b\")) %>% calc_baseline_precision(\"y\", \"a\") #> Using 'y' as the outcome column. #> [1] 0.5 calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = \"cancer\" ) #> Using 'dx' as the outcome column. #> [1] 0.49 # if you're not sure which outcome was used as the 'positive' outcome during # model training, you can access it from the trained model and pass it along: calc_baseline_precision(otu_mini_bin, outcome_colname = \"dx\", pos_outcome = otu_mini_bin_results_glmnet$trained_model$levels[1] ) #> Using 'dx' as the outcome column. #> [1] 0.49"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":null,"dir":"Reference","previous_headings":"","what":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Generic function calculate mean performance curves multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"","code":"calc_mean_perf(sensspec_dat, group_var = specificity, sum_var = sensitivity)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models. group_var variable group (e.g. specificity recall). sum_var variable summarize (e.g. sensitivity precision).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"data frame mean & standard deviation sum_var summarized group_var","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generic function to calculate mean performance curves for multiple models — calc_mean_perf","text":"Courtney Armour Kelly Sovacool","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","title":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","text":"Used bootstrap_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","text":"","code":"calc_perf_bootstrap_split( test_data_split, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","text":"test_data_split single bootstrap test set rsample::bootstraps() trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","text":"long data frame performance metrics rsample::int_pctl()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate performance for a single split from rsample::bootstraps() — calc_perf_bootstrap_split","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":null,"dir":"Reference","previous_headings":"","what":"Get performance metrics for test data — calc_perf_metrics","title":"Get performance metrics for test data — calc_perf_metrics","text":"Get performance metrics test data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"calc_perf_metrics( test_data, trained_model, outcome_colname, perf_metric_function, class_probs )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get performance metrics for test data — calc_perf_metrics","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get performance metrics for test data — calc_perf_metrics","text":"Dataframe performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get performance metrics for test data — calc_perf_metrics","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get performance metrics for test data — calc_perf_metrics","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) calc_perf_metrics(results$test_data, results$trained_model, \"dx\", multiClassSummary, class_probs = TRUE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Combine hyperparameter performance metrics multiple train/test splits generated , instance, looping R using snakemake workflow high-performance computer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"combine_hp_performance(trained_model_lst)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"trained_model_lst List trained models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters params: Hyperparameters tuned. Metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/combine_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Combine hyperparameter performance metrics for multiple train/test splits — combine_hp_performance","text":"","code":"if (FALSE) { results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed, cv_times = 2, kfold = 2) }) models <- lapply(results, function(x) x$trained_model) combine_hp_performance(models) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":null,"dir":"Reference","previous_headings":"","what":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"wrapper permute_p_value().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"compare_models(merged_data, metric, group_name, nperm = 10000)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"table p-values pairs group variable","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/compare_models.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Perform permutation tests to compare the performance metric\nacross all pairs of a group variable. — compare_models","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) compare_models(df, \"AUC\", \"model\", nperm = 10) #> group1 group2 p_value #> 1 glmnet svmRadial 0.7272727 #> 2 rf glmnet 0.2727273 #> 3 rf svmRadial 0.5454545"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Define cross-validation scheme and training parameters — define_cv","title":"Define cross-validation scheme and training parameters — define_cv","text":"Define cross-validation scheme training parameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"define_cv( train_data, outcome_colname, hyperparams_list, perf_metric_function, class_probs, kfold = 5, cv_times = 100, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Define cross-validation scheme and training parameters — define_cv","text":"train_data Dataframe training model. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparams_list Named list lists hyperparameters. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Define cross-validation scheme and training parameters — define_cv","text":"Caret object trainControl controls cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Define cross-validation scheme and training parameters — define_cv","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/define_cv.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Define cross-validation scheme and training parameters — define_cv","text":"","code":"training_inds <- get_partition_indices(otu_small %>% dplyr::pull(\"dx\"), training_frac = 0.8, groups = NULL ) train_data <- otu_small[training_inds, ] test_data <- otu_small[-training_inds, ] cv <- define_cv(train_data, outcome_colname = \"dx\", hyperparams_list = get_hyperparams_list(otu_small, \"glmnet\"), perf_metric_function = caret::multiClassSummary, class_probs = TRUE, kfold = 5 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":null,"dir":"Reference","previous_headings":"","what":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Requires future.apply package","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"","code":"find_permuted_perf_metric( test_data, trained_model, outcome_colname, perf_metric_function, perf_metric_name, class_probs, feat, test_perf_value, nperms = 100, alpha = 0.05, progbar = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"test_data Held test data: dataframe outcome features. trained_model Trained model caret::train(). outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). feat feature group correlated features permute. test_perf_value value true performance metric held-test data. nperms number permutations perform (default: 100). alpha alpha level confidence interval (default: 0.05 obtain 95% confidence interval) progbar optional progress bar (default: NULL)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"vector mean permuted performance mean difference test permuted performance (test minus permuted performance)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/find_permuted_perf_metric.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get permuted performance metric difference for a single feature\n(or group of features) — find_permuted_perf_metric","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":null,"dir":"Reference","previous_headings":"","what":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Get preprocessed dataframe continuous variables","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(features, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"features Dataframe features machine learning method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Named list: processed: Dataframe processed features. removed: Names features removed preprocessing.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_caret_processed_df.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get preprocessed dataframe for continuous variables — get_caret_processed_df","text":"","code":"get_caret_processed_df(mikropml::otu_small[, 2:ncol(otu_small)], c(\"center\", \"scale\")) #> $processed #> Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 #> 1 -0.4198476322 -0.218855527 -0.174296240 -0.59073845 -0.048774220 #> 2 -0.1045750483 1.754032339 -0.718419364 0.03805034 1.537072974 #> 3 -0.7076423302 0.696324396 1.428146361 0.60439092 -0.264559044 #> 4 -0.4936040623 -0.665193276 2.015799335 -0.59289184 -0.675577755 #> 5 1.1116829471 -0.395140184 -0.753787367 -0.58643168 -0.754356341 #> 6 -0.6845030580 0.613808173 -0.174296240 -0.58427829 0.375945115 #> 7 -0.7698291243 -0.496410093 -0.318488868 0.15863997 -0.658451975 #> 8 -0.4241862457 -0.477656406 -0.397386721 -0.55628427 -0.391289813 #> 9 -0.5557908564 1.144537514 1.615868839 -0.35171258 -0.274834512 #> 10 1.4573258257 -0.451401245 -0.693933823 -0.05669866 -0.706404158 #> 11 0.2931311927 -0.721454336 -0.753787367 3.03341063 -0.449517464 #> 12 1.1044519245 0.002437979 -0.473563958 -0.41846755 0.413621830 #> 13 -0.5933921737 -0.297621012 -0.340253793 -0.59289184 -0.655026820 #> 14 -0.8016456236 0.077452727 -0.419151646 -0.59073845 -0.045349064 #> 15 -0.7915221920 0.291244758 -0.269517787 -0.59289184 -0.220032017 #> 16 1.4862499159 -0.683946963 -0.745625520 -0.54551734 -0.744080874 #> 17 -0.3750152923 -0.051947713 0.103206554 1.37745659 0.458148857 #> 18 0.2135899445 0.325001395 0.478651509 -0.34309903 0.560903535 #> 19 -0.5181895390 -0.100707299 -0.073633462 -0.40770062 -0.237157796 #> 20 0.8745054069 -0.676445488 -0.560623658 -0.58212491 -0.154954054 #> 21 2.0184531767 -0.682071594 -0.740184289 -0.58643168 -0.720104782 #> 22 0.5867107089 -0.646439589 -0.560623658 0.09188499 -0.593374013 #> 23 -0.4603413585 -0.397015552 0.386150578 -0.42062094 -0.463218088 #> 24 -0.7553670792 1.401463025 0.829610924 -0.58858507 -0.295385447 #> 25 1.9316809059 0.334378238 -0.228708552 -0.42923448 -0.535146362 #> 26 1.2201482855 -0.108208774 -0.302165174 -0.58858507 0.358819335 #> 27 -0.9158957801 -0.674570119 -0.732022442 -0.53475041 -0.689278379 #> 28 -0.7597056927 -0.595804634 -0.375621796 -0.57566475 -0.730380250 #> 29 -0.5109585165 -0.558297260 -0.432754724 3.84093048 -0.672152599 #> 30 -0.8811868718 -0.385763340 -0.595991661 -0.58212491 -0.192630769 #> 31 0.3437483507 0.902614952 1.376454664 -0.59289184 1.396641581 #> 32 -0.5109585165 0.535042688 -0.484446421 -0.59289184 0.550628067 #> 33 1.2302717171 -0.582677053 0.007985007 -0.40554723 -0.672152599 #> 34 -0.0770971626 0.244360541 -0.313047636 -0.28711099 2.273481498 #> 35 -0.2275024319 2.211622300 1.515206061 -0.57781814 1.269910812 #> 36 0.0284757669 -0.663317907 -0.634080280 -0.57781814 -0.730380250 #> 37 -0.3157209072 -0.290119537 -0.231429168 -0.58643168 -0.233732640 #> 38 -0.1653156379 1.476477772 1.836238704 1.65309003 4.393653017 #> 39 -0.6859492625 -0.134463935 -0.258635324 0.68191283 0.399921206 #> 40 -0.3967083600 -0.126962461 -0.269517787 -0.57135798 0.304016840 #> 41 0.0009978811 -0.485157881 -0.291282711 -0.58858507 -0.463218088 #> 42 -0.4111704051 -0.029443288 -0.400107336 -0.19236199 0.050555301 #> 43 1.4399713715 -0.693323806 -0.734743058 3.42532693 -0.757781497 #> 44 -0.4805882217 -0.593929265 -0.397386721 1.44851834 -0.648176508 #> 45 0.3827958725 -0.421395345 -0.609594739 2.34648041 -0.333062162 #> 46 1.6438862078 -0.592053897 -0.579667967 -0.58427829 -0.726955094 #> 47 -0.5471136293 -0.280742693 0.269164106 1.53680717 -0.202906237 #> 48 1.6164083221 -0.653941063 -0.615035970 -0.58643168 -0.696128691 #> 49 -0.8609400086 -0.078202875 -0.397386721 0.99630722 -0.086450936 #> 50 0.6026189585 0.146841369 -0.345695024 -0.58212491 1.002748649 #> 51 -0.8363545319 -0.635187377 -0.421872261 -0.56705120 -0.593374013 #> 52 -0.1783314785 0.328752132 -0.666727667 -0.58643168 -0.531721206 #> 53 1.6728102981 -0.548920417 -0.639521511 -0.58858507 -0.562547610 #> 54 1.2620882164 -0.458902719 -0.751066751 1.21595262 -0.579673389 #> 55 -0.7828449649 -0.065075294 -0.130766390 1.23963987 0.375945115 #> 56 2.0705165392 -0.605181477 -0.606874124 -0.58858507 -0.733805406 #> 57 -0.6469017407 -0.327626911 -0.666727667 -0.57566475 -0.600224325 #> 58 -0.3663380652 8.732279248 -0.740184289 -0.54551734 -0.730380250 #> 59 -0.4415406999 1.363955651 -0.748346136 -0.10191977 1.746007486 #> 60 -0.4111704051 -0.479531775 -0.242311630 -0.59289184 -0.422116216 #> 61 -0.2694423628 2.967395884 -0.740184289 0.50964193 0.721885863 #> 62 0.6112961856 0.047446828 -0.579667967 -0.52613687 0.564328691 #> 63 -0.2347334545 -0.425146083 -0.479005189 -0.05454527 -0.665302287 #> 64 -0.8334621229 -0.344505229 -0.356577486 -0.45507512 -0.350187942 #> 65 -0.8884178944 -0.550795785 -0.400107336 0.57424351 -0.476918711 #> 66 -0.6049618098 -0.721454336 1.305718658 1.43129125 -0.487194179 #> 67 -0.8970951214 -0.642688851 -0.623197817 -0.58858507 -0.682428067 #> 68 -0.7293353979 0.801345043 -0.130766390 0.47303436 -0.257708732 #> 69 -0.7221043754 -0.721454336 2.736762475 1.05660204 -0.052199376 #> 70 -0.1002364348 -0.717703599 0.679977065 -0.57135798 0.512951352 #> 71 -0.2708885673 -0.584552422 0.783360459 -0.59289184 0.389645738 #> 72 -0.7221043754 0.150592106 1.036377712 1.00276738 0.030004366 #> 73 -0.4979426759 0.486283102 0.116809632 0.01436309 0.314292308 #> 74 -0.5557908564 -0.412018502 -0.527976271 -0.32587194 -0.315936383 #> 75 -0.7061961257 0.306247708 -0.323930099 -0.17944168 0.526651975 #> 76 0.4203971899 -0.558297260 0.269164106 0.31583716 0.074531393 #> 77 -0.6425631272 0.304372339 0.699021375 -0.52829025 0.427322453 #> 78 0.6488975029 -0.053823082 2.739483091 -0.59073845 -0.291960291 #> 79 -0.7380126250 -0.190724996 -0.424592877 -0.16867475 -0.199481081 #> 80 2.5159475292 -0.717703599 -0.710257517 -0.59289184 -0.757781497 #> 81 -0.8710634402 -0.331377648 -0.470843343 -0.55628427 -0.555697298 #> 82 -0.4039393825 1.645260955 -0.138928237 -0.59289184 0.410196674 #> 83 1.0032176086 -0.425146083 -0.405548568 -0.59073845 0.095082329 #> 84 -0.8305697138 -0.548920417 -0.748346136 -0.59289184 -0.319361539 #> 85 -0.8088766461 -0.368885022 2.105579651 -0.57135798 -0.579673389 #> 86 -0.6859492625 -0.550795785 0.410636119 0.67545267 -0.490619335 #> 87 -0.0062331415 0.167470424 0.367106269 -0.59289184 0.869167568 #> 88 -0.6497941497 1.360204913 -0.751066751 -0.59289184 -0.291960291 #> 89 -0.4458793134 0.788217462 0.731668762 -0.30864485 1.211683161 #> 90 -0.1421763657 -0.717703599 0.767036765 -0.59289184 2.119349482 #> 91 -0.7915221920 1.123908458 0.652770909 2.20651030 -0.045349064 #> 92 -0.4502179269 0.116835470 -0.054589152 -0.26342374 3.900430564 #> 93 1.3633225323 -0.593929265 -0.753787367 0.12203240 -0.206331393 #> 94 -0.6743796264 -0.442024401 -0.538858733 2.10314776 -0.679002911 #> 95 -0.2072555688 0.193725586 -0.364739333 -0.49383607 0.554053223 #> 96 -0.3460912020 2.147859765 2.856469562 1.86412189 1.304162371 #> 97 0.2121437400 -0.700825281 -0.742904905 0.42135309 -0.747506030 #> 98 -0.5948383782 0.169345793 0.024308701 -0.36463290 -0.401565281 #> 99 1.5281898468 -0.704576018 -0.699375055 -0.58858507 -0.692703535 #> 100 -0.5688066970 -0.680196225 -0.729301827 -0.58212491 -0.740655718 #> 101 -0.2361796590 -0.179472784 -0.498049499 -0.58427829 -0.631050728 #> 102 2.6518907534 -0.683946963 -0.721139980 -0.53905718 -0.740655718 #> 103 0.8325654761 -0.590178528 -0.473563958 2.55966565 -0.672152599 #> 104 0.3061470334 -0.162594466 0.524901975 0.39981923 1.636402496 #> 105 -0.5644680835 0.915742533 -0.449078418 -0.57997152 0.841766321 #> 106 -0.2390720680 0.345630450 -0.348415640 -0.56274443 0.132759044 #> 107 -0.7394588295 -0.278867325 -0.748346136 0.10049854 0.290316216 #> 108 -0.3648918607 1.302068484 0.802404768 -0.59289184 0.506101040 #> 109 1.5079429836 -0.682071594 -0.650403974 -0.50029623 -0.713254470 #> 110 -0.6035156053 -0.451401245 -0.582388583 -0.59289184 -0.583098545 #> 111 -0.2810119989 1.495231459 0.660932756 -0.59289184 -0.130977963 #> 112 -0.4502179269 -0.719578968 1.033657096 -0.58427829 -0.754356341 #> 113 -0.4458793134 0.508787527 2.353155672 -0.59289184 4.314874431 #> 114 -0.7813987604 0.090580308 -0.304885790 -0.17944168 -0.329637006 #> 115 -0.7365664205 3.171811071 0.228354872 -0.59073845 0.649957589 #> 116 -0.0264800046 -0.078202875 -0.413710414 0.21462801 0.321142620 #> 117 -0.6324396956 -0.205727946 -0.753787367 0.15863997 -0.702979003 #> 118 -0.5557908564 -0.213229420 0.821449078 0.09188499 2.633122871 #> 119 0.2309443987 1.073273503 2.619776003 -0.42062094 0.817790229 #> 120 0.3900268951 -0.674570119 -0.718419364 -0.58858507 -0.737230562 #> 121 -0.9057723485 -0.344505229 -0.661286436 -0.59073845 -0.668727443 #> 122 -0.0264800046 0.013690191 -0.751066751 -0.59289184 -0.761206653 #> 123 -0.7076423302 -0.637062745 -0.468122727 -0.50890978 -0.675577755 #> 124 0.0545074481 -0.650190326 0.443283506 -0.57566475 0.348543867 #> 125 0.3249476920 0.144966000 -0.585109199 -0.58427829 -0.196055925 #> 126 -0.0496192768 2.852998394 0.233796103 -0.58858507 0.944520999 #> 127 -0.3388601794 -0.057573819 0.954759243 -0.42923448 -0.004247193 #> 128 -0.0366034362 -0.286368800 -0.511652577 1.86196850 -0.757781497 #> 129 -0.8522627815 -0.355757441 -0.386504258 -0.32371856 0.194411850 #> 130 -0.2766733854 0.094331045 1.893371632 2.95158195 2.937961748 #> 131 0.5433245735 -0.537668204 -0.712978133 -0.58427829 -0.747506030 #> 132 -0.3764614968 -0.121336354 0.062397319 -0.56274443 -0.360463410 #> 133 0.1340486963 -0.316374699 0.312693956 -0.45722851 -0.052199376 #> 134 -0.5196357436 0.308123076 -0.280400249 -0.56705120 0.598580250 #> 135 0.1499569459 -0.706451387 -0.712978133 -0.57781814 -0.744080874 #> 136 -0.3808001103 1.189546362 0.475930894 -0.59289184 0.214962786 #> 137 -0.6859492625 0.872609053 5.601570724 -0.56705120 -0.672152599 #> 138 0.1210328557 -0.301371749 -0.443637186 -0.59289184 -0.562547610 #> 139 -0.8450317590 -0.192600365 -0.636800895 1.93303025 -0.709829314 #> 140 0.1803272407 0.475030890 0.435121659 1.12120363 1.276761123 #> 141 -0.8464779635 0.321250657 -0.220546705 -0.58643168 -0.538571518 #> 142 -0.8826330763 -0.472030300 0.764316150 3.24444248 0.026579210 #> 143 -0.8537089861 -0.522665255 -0.549741196 1.32792871 -0.357038254 #> 144 -0.7582594882 -0.344505229 -0.664007052 -0.45722851 -0.726955094 #> 145 -0.5832687421 -0.171971309 1.553294680 -0.58212491 -0.374164034 #> 146 -0.6469017407 -0.470154931 -0.644962742 -0.59073845 -0.730380250 #> 147 -0.3460912020 -0.023817182 2.127344576 1.81459400 0.307441996 #> 148 -0.5644680835 -0.408267765 2.886396334 0.15863997 -0.346762786 #> 149 1.1478380599 -0.593929265 -0.601432892 -0.58427829 -0.730380250 #> 150 0.1427259234 3.299336143 2.657864622 -0.56705120 3.835352601 #> 151 -0.5659142880 3.123051485 1.289394964 -0.57781814 0.899993971 #> 152 0.9699549048 0.081203464 -0.285841480 -0.58643168 0.423897298 #> 153 -0.8378007364 0.203102430 0.070559166 -0.58427829 -0.442667152 #> 154 -0.6830568535 -0.653941063 -0.560623658 -0.56274443 -0.668727443 #> 155 -0.3735690877 -0.466404194 -0.590550430 -0.49383607 -0.689278379 #> 156 -0.3460912020 -0.235733845 -0.294003327 2.08161390 -0.682428067 #> 157 4.1935447642 -0.668944013 -0.683051361 2.59842660 -0.716679626 #> 158 0.1687576046 -0.477656406 -0.000176840 -0.57135798 -0.713254470 #> 159 0.9280149739 -0.592053897 2.867352025 -0.58212491 0.584879626 #> 160 1.1001133110 -0.674570119 -0.715698748 -0.48737591 -0.494044491 #> 161 -0.6526865587 -0.693323806 -0.718419364 -0.57566475 -0.750931186 #> 162 -0.0192489821 0.495659946 -0.751066751 -0.59289184 5.606158216 #> 163 -0.2491954996 -0.653941063 -0.536138117 -0.16006120 -0.668727443 #> 164 0.4478750756 -0.250736794 -0.179737471 -0.44215480 -0.500894803 #> 165 0.4088275538 -0.663317907 -0.595991661 -0.56705120 0.310867152 #> 166 -0.9130033711 0.317499920 0.761595534 -0.59289184 -0.449517464 #> 167 -0.8999875305 0.506912158 0.595637981 0.91447854 -0.720104782 #> 168 2.9367930424 -0.721454336 -0.748346136 -0.58643168 -0.754356341 #> 169 3.0119956771 -0.689573069 -0.680330745 -0.59073845 -0.726955094 #> 170 3.9332279519 -0.706451387 -0.740184289 0.67760606 -0.432391684 #> 171 -0.5962845827 0.291244758 -0.196061165 -0.57351136 0.701334928 #> 172 -0.7683829198 -0.554546523 -0.658565820 -0.12776041 -0.552272142 #> 173 -0.1754390695 -0.712077493 -0.734743058 2.77931105 -0.730380250 #> 174 -0.3186133163 -0.166345203 -0.397386721 1.53034702 -0.028223285 #> 175 -0.5890535602 0.373760981 -0.043706690 -0.30649147 -0.518020582 #> 176 -0.3446449975 -0.160719097 2.959852956 -0.57781814 -0.161804366 #> 177 -0.5283129706 -0.288244168 -0.606874124 -0.57566475 0.067681081 #> 178 1.8608168848 -0.036944763 -0.160693162 -0.39262692 -0.329637006 #> 179 0.0501688346 -0.698949912 -0.726581211 0.53978933 -0.750931186 #> 180 -0.8363545319 0.364384137 -0.492608267 -0.33233210 -0.446092308 #> 181 -0.8378007364 0.131838419 -0.296723943 -0.56489782 -0.634475884 #> 182 -0.8233386913 -0.593929265 -0.095398387 -0.58858507 1.266485656 #> 183 -0.7177657618 -0.571424841 -0.737463673 3.51146238 -0.644751352 #> 184 -0.7625981017 0.683196815 -0.405548568 -0.39478030 -0.175504990 #> 185 -0.3301829524 -0.672694750 -0.742904905 -0.59289184 -0.569397921 #> 186 -0.9202343936 -0.383887972 -0.117163312 1.05660204 -0.048774220 #> 187 0.0762005158 -0.006938864 -0.593271045 2.91066761 0.036854678 #> 188 0.5028308471 -0.708326756 -0.742904905 -0.23542972 -0.062474844 #> 189 -0.8652786222 -0.389514078 0.032470547 -0.47230221 -0.055624532 #> 190 -0.7842911694 -0.059449188 -0.356577486 0.82403632 -0.668727443 #> 191 0.7212077286 -0.685822331 -0.753787367 -0.55197750 -0.631050728 #> 192 0.9844169499 -0.713952862 -0.751066751 -0.58427829 -0.754356341 #> 193 0.3061470334 0.120586207 -0.261355940 -0.58427829 0.817790229 #> 194 -0.2810119989 -0.577050947 -0.443637186 0.18017383 -0.661877131 #> 195 -0.5413288112 0.195600955 -0.356577486 -0.58212491 0.677358836 #> 196 1.6858261387 -0.702700649 -0.734743058 -0.59073845 -0.723529938 #> 197 1.1478380599 -0.078202875 3.286326831 -0.57135798 0.852041788 #> 198 5.1046536074 -0.691448437 -0.753787367 -0.48737591 -0.716679626 #> 199 0.9309073830 -0.350131335 -0.590550430 -0.58212491 1.232234096 #> 200 -0.6252086730 0.400016142 -0.424592877 -0.58427829 -0.048774220 #> Otu00006 Otu00007 Otu00008 Otu00009 Otu00010 Otu00011 #> 1 -0.16741683 -0.568745802 -0.0623643594 0.05469266 -0.637876227 0.72598299 #> 2 -0.57321773 -0.642744310 -0.1320452079 -0.40907548 -0.383314722 0.01116897 #> 3 -0.03641025 -0.612472193 -0.2070861217 -0.73691158 2.586569508 -0.77512645 #> 4 -0.58599886 -0.551927960 -0.4697293198 0.13465268 0.025980248 -0.02010414 #> 5 2.72750923 0.191420685 -0.6760918326 1.26208901 1.703091342 1.58822740 #> 6 0.80394909 -0.336659574 -0.0060836741 -0.26514744 -0.348374907 0.55621466 #> 7 2.20028760 -0.716742817 0.0635971744 -0.84485761 -0.682798846 -0.48920084 #> 8 -0.06197251 0.376416954 -0.0221638699 0.61841082 2.381922023 -0.75278851 #> 9 -0.46457812 -0.804195599 0.2940799810 -0.40907548 0.280541753 0.18540489 #> 10 0.68891891 -0.370295259 1.5885357433 -0.72091957 0.495172042 -0.82873750 #> 11 -0.24090833 0.066968649 -0.1963659911 0.09067467 0.500163444 0.38644633 #> 12 -0.35593851 -0.777287051 0.3423205684 0.48247878 0.634931300 -0.48920084 #> 13 -0.49972623 -0.141572599 -0.2178062522 -0.14520740 -0.248546866 1.11019552 #> 14 -0.77452053 -0.622562899 -0.4214887324 -0.64495755 -0.607927815 -0.04690967 #> 15 -0.68824790 -0.582200076 0.8997673563 -0.79688159 -0.892437732 -0.62769606 #> 16 0.91897926 1.180309832 -0.4241687650 -0.06524738 -0.058873587 -0.06478002 #> 17 0.18725954 0.046787238 2.0950619112 -0.13321340 -0.423245938 -0.65003400 #> 18 1.43341977 -0.316478163 0.7791658878 0.44249877 -0.353366309 -0.02903932 #> 19 -0.73298186 -0.693197838 -0.2124461869 0.28657672 0.045945856 -0.55174707 #> 20 -0.11948759 -0.481293021 -0.2365664806 0.54644680 2.327016600 1.20848245 #> 21 5.17190045 0.712773807 -0.6787718653 0.43450277 1.468495445 -0.87788097 #> 22 -0.60517055 1.372033238 0.5004424938 1.02620694 0.040954454 0.29262699 #> 23 -0.26008003 -0.568745802 -0.6787718653 -0.80087960 -0.677807444 0.29709458 #> 24 -0.25368946 0.524413969 -0.6787718653 0.62240882 0.619957094 -0.09605313 #> 25 0.79116796 -0.797468462 0.2779997852 0.79432287 -0.363349113 0.69024229 #> 26 -0.25368946 0.904497213 -0.5126098420 0.24659671 3.609806932 -0.80193198 #> 27 -0.88635543 0.278873467 -0.6760918326 -0.86884562 -0.153710227 -0.87788097 #> 28 -0.88955071 0.077059355 0.1895587082 0.22260871 -0.842523712 -0.87788097 #> 29 2.07567158 -0.518292274 -0.6760918326 0.31056473 0.445258021 -0.81086715 #> 30 -0.80647336 -0.784014188 -0.5903307884 -0.83286360 -0.932368949 -0.80639956 #> 31 1.79768199 -0.797468462 -0.6787718653 -0.82886560 -0.378323320 2.83915193 #> 32 -0.49333566 0.100604335 -0.6787718653 -0.25715144 -0.712747258 -0.54727948 #> 33 -0.79049695 0.917951487 0.3878811232 1.19812099 -0.647859031 0.67683952 #> 34 -0.37511020 1.028949248 -0.6787718653 0.02670665 -0.558013794 -0.87788097 #> 35 -0.15463570 -0.239116087 -0.5822906904 -0.64895555 0.585017279 0.01116897 #> 36 0.92536983 0.743045923 0.9480079437 2.52545738 0.470215032 -0.46239532 #> 37 2.33129419 0.325963426 -0.5849707231 -0.84485761 -0.897429135 1.27549626 #> 38 1.15862546 -0.787377757 -0.6787718653 -0.11722139 0.679853918 1.45419977 #> 39 -0.53806962 -0.373658828 0.0582371091 -0.35710146 -0.737704268 -0.31496493 #> 40 -0.56363188 -0.535110117 -0.5045697441 -0.02926537 0.555068867 -0.24348353 #> 41 -0.11309703 1.207218380 -0.0864846531 0.96623692 1.363676002 0.34177045 #> 42 2.76585263 -0.387113102 0.7014449414 -0.70492757 -0.892437732 0.98063548 #> 43 -0.62753753 -0.797468462 -0.6707317674 6.20761646 1.054209073 0.15859936 #> 44 -0.36552436 0.547958949 -0.6653717021 0.57043481 0.510146248 0.65896917 #> 45 0.01151899 -0.794104894 -0.6466114737 1.17413298 1.608254703 -0.85554303 #> 46 0.17128313 -0.555291528 0.0207166523 1.17813099 -0.233572660 2.34771729 #> 47 -0.75215356 0.036696533 0.9185275847 0.13865068 -0.298460887 0.34623804 #> 48 1.35034242 3.773621166 0.6022837339 -0.57299353 0.150765299 3.36185968 #> 49 -0.81286393 -0.784014188 -0.2526466764 -0.83686161 2.242162765 -0.80193198 #> 50 -0.60836584 0.574867497 -0.4214887324 -0.80087960 -0.148718825 -0.70364505 #> 51 0.16489256 2.014474827 -0.6787718653 0.28257872 2.297068188 -0.56514983 #> 52 0.63140383 0.161148568 0.2860398831 -0.21717142 0.400335403 -0.23454835 #> 53 0.38856234 -0.800832031 -0.6680517347 3.36503763 0.055928660 0.69917746 #> 54 -0.76173940 3.867801085 -0.6787718653 -0.23716143 -0.617910619 -0.87341338 #> 55 -0.54765547 -0.689834269 1.0686094123 -0.25315343 -0.792609691 -0.73045058 #> 56 2.00537536 1.789115735 -0.6787718653 -0.62496754 1.618237507 -0.87341338 #> 57 -0.78730166 -0.296296752 -0.1856458606 0.29857073 0.794656166 -0.46686291 #> 58 0.91258870 -0.800832031 -0.6734118000 -0.88483762 -0.867480722 -0.84660785 #> 59 -0.10990175 -0.565382234 -0.6760918326 0.78232887 0.150765299 -0.77065886 #> 60 -0.80966864 -0.403930944 0.2833598504 -0.08123938 -0.043899381 -0.18540489 #> 61 -0.27925173 -0.659562152 -0.5045697441 -0.58098953 -0.692781650 0.40431668 #> 62 0.74004343 -0.091119071 -0.6573316042 0.29857073 -0.423245938 0.12285866 #> 63 -0.33037625 -0.333296005 -0.4884895482 0.41451276 -0.742695670 -0.39538150 #> 64 -0.46777340 -0.054119818 1.5965758412 -0.61297354 -0.538048186 -0.44005738 #> 65 -0.80008280 -0.777287051 -0.5769306252 -0.73691158 -0.353366309 -0.82873750 #> 66 -0.72659129 0.450415461 1.5670954822 -0.02126937 -0.508099773 0.69470987 #> 67 -0.66588092 -0.696561406 1.1248900976 -0.75290358 -0.498116969 -0.62322847 #> 68 0.06583880 0.362962680 -0.6787718653 0.10666667 -0.218598454 0.82426992 #> 69 0.25755576 -0.575472939 0.0448369460 -0.42506748 -0.687790248 -0.66790435 #> 70 1.16821131 0.188057116 -0.1320452079 -0.08923539 -0.288478082 -0.12732625 #> 71 0.02430012 0.140967157 -0.6707317674 0.50646679 0.709802331 2.57556426 #> 72 0.12335389 -0.461111609 0.6451642560 -0.36109947 -0.273503876 -0.38197874 #> 73 -0.16741683 -0.175208285 -0.1722456974 -0.62896554 -0.558013794 0.16753454 #> 74 0.12335389 -0.040665543 -0.2392465133 0.19862070 0.020988846 -0.68130711 #> 75 -0.48055453 -0.683107132 -0.3116073944 -0.53701152 -0.188650041 -0.02457173 #> 76 -0.48694510 -0.804195599 -0.0302039678 -0.04525737 -0.518082577 0.55621466 #> 77 -0.84162147 -0.558655097 -0.6117710494 -0.80087960 0.205670722 -0.42218703 #> 78 0.86785474 0.053514375 0.1654384145 -0.88083962 2.322025198 -0.86001062 #> 79 -0.62114697 -0.498110863 -0.3089273618 -0.54500752 -0.712747258 -0.15413177 #> 80 -0.90233184 -0.797468462 -0.6760918326 -0.88483762 0.649905506 2.71405948 #> 81 -0.50611679 -0.716742817 -0.6707317674 -0.75290358 -0.852506516 1.21741763 #> 82 -0.08433949 -0.366931691 -0.6787718653 0.05869066 -0.328409299 -0.87788097 #> 83 0.65377080 -0.155026873 -0.6600116368 0.49847079 1.488461053 0.78406163 #> 84 -0.81925449 0.231783507 -0.6787718653 0.63040483 -0.308443691 -0.84660785 #> 85 -0.71381016 -0.753742071 -0.1427653384 -0.71692157 -0.882454928 -0.86894579 #> 86 -0.88316014 0.322599857 -0.6734118000 1.87378319 -0.533056784 1.00744101 #> 87 0.13293973 -0.477929452 -0.6707317674 -0.03326337 1.223916744 2.28070348 #> 88 -0.35274323 -0.400567376 -0.4482890587 -0.66494756 -0.418254536 -0.22114559 #> 89 -0.12587816 -0.141572599 0.5138426570 -0.60097954 -0.458185753 0.30602975 #> 90 1.82643953 -0.575472939 -0.3866483081 -0.34910546 -0.088822000 1.92776406 #> 91 -0.90233184 -0.804195599 -0.5983708863 -0.71692157 -0.707755856 -0.41325185 #> 92 -0.36871964 -0.494747295 -0.0516442289 -0.32111945 -0.702764454 -0.80193198 #> 93 -0.14824514 -0.800832031 0.0930775334 4.84030006 3.445090663 -0.35964080 #> 94 -0.86718373 -0.091119071 1.1329301955 0.40651676 0.305498763 -0.60089053 #> 95 -0.21215079 -0.380385965 0.2377992956 -0.53701152 -0.707755856 0.12732625 #> 96 -0.55724132 -0.464475178 -0.6787718653 -0.87284362 -0.538048186 -0.87788097 #> 97 3.31863652 3.736621913 -0.6734118000 0.94624692 2.671423343 -0.50707119 #> 98 -0.75215356 -0.535110117 -0.6787718653 -0.50102951 -0.013950969 1.64630604 #> 99 0.78477739 -0.804195599 0.2699596873 0.65039483 0.510146248 -0.67237194 #> 100 1.54844994 -0.800832031 -0.6787718653 -0.88483762 -0.667824639 -0.73938575 #> 101 2.03732818 -0.030574838 0.2511994588 -0.60897554 -0.098804804 1.15040381 #> 102 -0.88316014 2.815004136 -0.3330476555 1.66588713 -0.937360351 -0.31049734 #> 103 -0.41664888 2.848639821 -0.6787718653 1.03820094 -0.443211546 -0.15859936 #> 104 -0.39747718 0.262055624 0.0501970112 2.35754133 -0.268512474 -0.13179383 #> 105 -0.44860171 0.191420685 0.2404793283 0.11466267 -0.533056784 2.22262484 #> 106 -0.77771582 -0.730197092 0.8381266057 -0.82486760 -0.942351753 0.84214027 #> 107 -0.39428190 -0.020484132 1.2026110440 -0.52501751 -0.712747258 0.19434006 #> 108 0.83590191 -0.538473686 -0.3384077207 -0.50502751 -0.363349113 -0.66343676 #> 109 -0.28883757 0.066968649 1.6716167550 -0.57699153 -0.657841835 -0.76172369 #> 110 -0.73298186 -0.340023142 0.0475169786 -0.20517742 -0.707755856 -0.41325185 #> 111 -0.47096868 -0.518292274 -0.2794470028 -0.42906549 -0.043899381 -0.25688629 #> 112 -0.89913656 0.194784253 -0.6760918326 -0.46104950 -0.957325959 -0.87788097 #> 113 0.46524913 0.369689817 -0.6787718653 -0.41707148 0.530111856 -0.33283528 #> 114 -0.87357430 -0.582200076 -0.0007236088 -0.64095955 -0.702764454 -0.39091392 #> 115 -0.36232907 -0.363568122 -0.2499666438 -0.07324338 0.270558949 -0.10498831 #> 116 0.08501049 0.921315055 -0.3276875902 -0.61297354 0.125808289 2.32091177 #> 117 1.88395462 0.009787984 2.6230283401 -0.88083962 1.203951135 -0.81980233 #> 118 -0.89594127 1.405668923 1.9905406385 -0.46104950 -0.867480722 0.22561317 #> 119 -0.58599886 0.151057863 -0.6734118000 -0.60897554 1.628220311 0.02010414 #> 120 2.31851306 3.225359496 -0.3357276881 3.15314357 0.365395588 0.14519660 #> 121 -0.19617438 -0.713379249 0.2377992956 -0.79288359 -0.927377547 0.19434006 #> 122 0.04027654 -0.454384472 0.5084825917 0.21861070 0.020988846 -0.05584485 #> 123 -0.83203562 0.053514375 -0.6787718653 0.16663669 -0.882454928 -0.80193198 #> 124 1.19696885 0.201511390 0.0421569133 0.49447279 -0.632884825 0.15413177 #> 125 -0.02682440 -0.111300483 -0.6707317674 -0.08923539 -0.108787608 0.07371520 #> 126 -0.41984416 -0.521655843 -0.1508054363 -0.20917542 -0.113779010 0.12732625 #> 127 -0.31439983 -0.259297498 -0.6626916695 0.65039483 0.844570187 -0.73045058 #> 128 -0.50292151 2.169198979 0.0582371091 -0.09323339 1.193968331 -0.84214027 #> 129 -0.84162147 -0.171844716 -0.2338864480 -0.83686161 -0.822558104 -0.81980233 #> 130 -0.64670923 -0.370295259 -0.6787718653 -0.45705149 -0.682798846 -0.87788097 #> 131 -0.04599609 1.752116482 -0.6760918326 0.94624692 1.533383672 0.28815940 #> 132 0.82631607 -0.138209031 -0.6760918326 -0.44505749 0.160748104 -0.86894579 #> 133 0.43329630 0.235147076 3.7084415570 -0.53701152 -0.563005196 -0.46686291 #> 134 -0.27286116 -0.575472939 -0.0543242615 -0.45705149 -0.672816042 -0.47133049 #> 135 2.29934136 3.295994435 0.5835235055 1.39802105 -0.538048186 -0.72598299 #> 136 -0.49014038 -0.414021650 0.3369605031 -0.55300352 0.440266619 -0.20327524 #> 137 -0.07475364 -0.498110863 -0.1963659911 -0.53701152 -0.752678475 0.19434006 #> 138 -0.53167905 -0.420748787 -0.6787718653 -0.36909547 -0.882454928 0.56068225 #> 139 -0.87037901 -0.696561406 -0.3893283408 -0.35710146 0.919441218 -0.82873750 #> 140 -0.88955071 1.153401284 -0.1052448815 -0.87684162 1.832867796 -0.87788097 #> 141 -0.74256771 -0.646107878 -0.6787718653 0.21461270 -0.832540908 -0.68130711 #> 142 -0.81286393 -0.740287797 -0.1963659911 -0.83286360 -0.947343155 -0.77959404 #> 143 -0.52209321 -0.740287797 -0.4080885692 -0.70492757 -0.762661279 -0.87341338 #> 144 -0.78410638 -0.528382980 -0.0328840004 -0.74490758 -0.777635485 -0.53387672 #> 145 -0.81925449 -0.666289290 -0.6707317674 -0.88483762 -0.907411939 0.97170031 #> 146 -0.89594127 -0.625926467 -0.4992096788 -0.10122939 -0.243555464 -0.35070563 #> 147 1.67945653 -0.800832031 3.4377582610 -0.88483762 -0.927377547 -0.87788097 #> 148 -0.87357430 -0.350113848 -0.6760918326 -0.19318342 -0.847515114 0.23901594 #> 149 -0.14504986 3.423810040 -0.6573316042 -0.82886560 -0.937360351 -0.86894579 #> 150 -0.54765547 -0.686470701 -0.4911695809 -0.88083962 -0.957325959 -0.87788097 #> 151 0.95732265 -0.740287797 -0.6707317674 -0.52501751 -0.677807444 0.73045058 #> 152 0.12974445 0.023242259 0.2538794914 0.43050477 -0.852506516 -0.36410839 #> 153 -0.88316014 -0.760469208 -0.0570042941 -0.69693156 -0.083830598 -0.60089053 #> 154 -0.87676958 0.181329979 -0.6787718653 -0.58098953 -0.907411939 -0.74385334 #> 155 -0.22493192 0.299054878 -0.6760918326 0.60641682 1.154037115 2.12880550 #> 156 1.17460187 -0.185298990 3.1563548344 0.87028490 0.120816887 -0.01116897 #> 157 -0.85440260 -0.800832031 -0.6707317674 -0.87684162 -0.947343155 -0.87788097 #> 158 -0.26966588 -0.235752518 -0.6653717021 -0.02526737 -0.123761814 -0.39091392 #> 159 -0.77452053 -0.740287797 2.1754628902 -0.10122939 -0.822558104 -0.10945590 #> 160 -0.57002245 2.630007867 2.0468213238 2.70936544 -0.797601093 1.57035705 #> 161 -0.85440260 -0.269388203 1.2990922188 -0.24115943 0.001023237 0.19434006 #> 162 -0.75854412 0.164512137 -0.6787718653 -0.76889559 0.979338042 -0.51600637 #> 163 0.34063311 -0.269388203 1.1945709461 -0.40107948 0.020988846 0.41325185 #> 164 1.27046035 2.199471096 0.4656020696 -0.85685161 -0.303452289 -0.74832093 #> 165 -0.10031590 1.190400537 0.2243991325 0.93825092 -0.353366309 -0.50260361 #> 166 -0.89913656 -0.656198584 -0.6653717021 3.16913557 -0.957325959 -0.52047396 #> 167 -0.61156112 -0.639380741 -0.2044060890 -0.73691158 0.110834083 -0.74832093 #> 168 -0.89913656 -0.141572599 1.6823368855 0.02270865 2.371939219 -0.78406163 #> 169 0.02430012 0.282237035 1.0257288901 2.52145938 0.714793733 0.36857598 #> 170 -0.84162147 -0.804195599 -0.6760918326 -0.88483762 -0.952334557 6.31046751 #> 171 -0.58919414 -0.356840985 0.3021200789 -0.34110946 -0.338392103 0.06924761 #> 172 -0.45179699 -0.511565137 -0.0650443920 -0.63296355 -0.617910619 -0.69470987 #> 173 -0.61795169 -0.356840985 -0.4992096788 -0.30112945 -0.717738660 -0.81086715 #> 174 0.44927271 0.803590157 -0.6760918326 0.21861070 0.450249423 0.52940913 #> 175 0.46205385 -0.158390442 -0.6760918326 -0.47304350 -0.637876227 0.72598299 #> 176 0.81673022 0.019878690 -0.6734118000 -0.09723139 0.370386990 0.38644633 #> 177 -0.41345360 -0.659562152 -0.0757645226 -0.40107948 -0.862489320 0.01563656 #> 178 -0.90233184 -0.797468462 -0.6787718653 1.03420294 0.170730908 2.49514768 #> 179 -0.82884034 -0.252570361 4.7054136970 0.72635685 3.634763942 -0.78852921 #> 180 -0.47096868 -0.706652112 -0.6626916695 -0.68493756 -0.927377547 -0.44899256 #> 181 -0.02362912 -0.760469208 -0.3678880797 -0.82886560 -0.872472124 -0.81533474 #> 182 -0.74256771 -0.625926467 0.9506879764 -0.01727137 -0.727721464 0.10945590 #> 183 -0.22812720 1.583938055 -0.1910059258 0.38252875 -0.652850433 -0.01116897 #> 184 -0.72020073 -0.706652112 -0.6358913431 -0.68493756 -0.518082577 -0.54727948 #> 185 -0.25049418 0.938132898 -0.6787718653 0.13065468 -0.782626887 -0.16753454 #> 186 -0.80966864 -0.733560660 -0.2285263827 -0.86884562 -0.912403341 -0.81980233 #> 187 -0.89913656 -0.797468462 -0.6787718653 1.25409301 2.312042394 -0.86894579 #> 188 2.32490362 0.023242259 -0.6171311147 -0.87684162 -0.008959567 -0.83320509 #> 189 -0.89274599 -0.784014188 -0.3678880797 -0.88083962 -0.882454928 -0.84214027 #> 190 -0.31120455 -0.548564391 -0.3518078839 -0.39308348 -0.777635485 0.04690967 #> 191 2.05330460 0.921315055 0.9453279111 -0.26914544 -0.208615649 2.93297127 #> 192 0.66335665 0.070332218 -0.6787718653 0.32655674 -0.368340516 -0.35070563 #> 193 1.15862546 -0.131481894 -0.3062473291 -0.44905549 -0.563005196 0.07371520 #> 194 2.01815649 -0.121391188 -0.3625280144 -0.44505749 0.899475609 -0.36857598 #> 195 -0.59877999 -0.498110863 0.9346077806 -0.28113944 -0.767652681 -0.58302018 #> 196 -0.89913656 -0.457748041 6.7583186948 -0.02926537 0.035963052 -0.68577470 #> 197 -0.21215079 -0.757105640 -0.4429289935 0.58242881 -0.737704268 0.90468649 #> 198 0.46844441 3.948526730 -0.6600116368 1.81381317 0.609974290 -0.86894579 #> 199 2.88088280 -0.797468462 -0.6064109842 -0.01727137 3.969187880 0.98957066 #> 200 -0.20576023 0.147694294 -0.5126098420 -0.88083962 0.210662124 0.80193198 #> Otu00012 Otu00013 Otu00014 Otu00015 Otu00016 #> 1 -0.025998508 1.524303976 1.671766383 1.2574976512 -0.49503122 #> 2 0.413356123 -0.551251533 0.971673864 0.3058058591 -0.50331257 #> 3 -0.678984290 -0.980085316 0.007910136 -0.6658514951 -0.47570808 #> 4 -0.654799631 -0.842858506 -0.542162557 -0.4795062491 -0.50055212 #> 5 -0.674953513 0.517974032 -0.792195600 -0.9653349262 0.34414511 #> 6 -0.267845094 1.215543652 2.385497069 0.4056336694 -0.10856844 #> 7 -0.638676525 0.323569384 -0.737642936 -0.4928166238 -0.39841553 #> 8 -0.058244719 0.294980465 -0.437603285 -0.6059548089 3.78366388 #> 9 -0.038090837 -0.219620075 0.953489643 -0.9453693641 -0.32940431 #> 10 0.183601866 -0.699913911 -0.751281102 -0.8921278653 0.16471596 #> 11 0.425448452 0.392182789 -0.792195600 0.6585307890 -0.50331257 #> 12 -0.211414224 -0.911471911 2.280937796 0.0861846763 1.72712978 #> 13 -0.199321895 -0.534098182 0.485245945 -0.7457137434 -0.49503122 #> 14 -0.610461090 -0.671324993 0.958035698 0.1327709878 -0.12237068 #> 15 -0.501630127 -0.717067263 0.262489234 -0.0136431341 -0.47294763 #> 16 -0.509691680 -0.339693534 -0.769465323 -0.5260925606 -0.19690279 #> 17 -0.404891492 -0.008062075 1.294443792 -0.4795062491 -0.50331257 #> 18 -0.582245655 -0.162442237 1.358088566 1.4970843961 0.02669354 #> 19 -0.457291586 -0.791398452 0.812561928 1.1044283420 -0.37633194 #> 20 -0.594337985 0.643765275 -0.010274085 0.0928398636 1.70504620 #> 21 -0.707199725 0.020526844 -0.792195600 -0.9520245515 -0.47846853 #> 22 -0.030029284 0.312133816 -0.342136123 2.6883629331 0.29997793 #> 23 0.683418144 -0.585558236 0.262489234 0.8981175339 -0.50331257 #> 24 0.687448920 0.981114517 -0.783103489 -0.2066435675 0.39935408 #> 25 0.598771839 -0.231055642 1.771779600 -0.4329199376 -0.36252970 #> 26 -0.654799631 -0.379718020 0.635265770 -0.7390585561 0.90727659 #> 27 -0.767661371 -1.008674235 -0.792195600 -0.9520245515 -0.48674988 #> 28 0.107017114 -0.705631695 -0.701274494 -0.7257481813 -0.49779167 #> 29 0.175540314 -0.448331426 -0.692182383 -0.6725066825 -0.48122898 #> 30 -0.699138172 -0.934343046 0.080647021 -0.8521967411 -0.50331257 #> 31 -0.328306740 0.060551330 1.680858494 -0.9586797389 -0.24383041 #> 32 -0.650768855 0.357876086 -0.792195600 1.2308769018 -0.04507812 #> 33 2.170774647 1.209825868 -0.387596677 -0.2865058157 -0.50331257 #> 34 0.119109444 -1.014392019 -0.792195600 -0.0668846329 -0.30456028 #> 35 -0.142891024 -0.168160021 2.430957622 -0.1800228180 0.33586376 #> 36 -0.529845562 2.467738298 -0.778557434 -0.5726788721 2.28474037 #> 37 -0.618522643 1.204108084 0.894390924 -0.0202983214 -0.20242369 #> 38 -0.723322831 0.500820681 -0.792195600 -0.9120934274 2.25437544 #> 39 -0.308152858 0.923936680 -0.164839966 -0.0469190709 -0.01471319 #> 40 0.687448920 -0.785680668 1.117147634 0.1327709878 -0.50055212 #> 41 1.594373617 1.095470193 -0.687636328 2.3422931905 -0.05888037 #> 42 -0.437137704 -0.762809533 -0.196662353 -0.5527133100 -0.36529014 #> 43 -0.046152390 1.850217651 -0.787649545 0.3723577327 -0.13893337 #> 44 0.542340969 -0.088111048 0.062462800 -0.2931610031 -0.45914539 #> 45 -0.416983822 0.849605491 -0.096649136 -0.8721623032 0.21164358 #> 46 2.731052571 0.180624789 -0.487609894 1.3173943374 -0.50331257 #> 47 1.062311128 0.489385113 0.594351273 0.1727021119 -0.13617292 #> 48 -0.066306272 3.559834998 -0.628537609 -0.9520245515 -0.18586099 #> 49 -0.646738078 -0.871447425 0.553436775 -0.8056104296 -0.18862144 #> 50 -0.130798695 -0.705631695 1.571753166 -0.4595406870 -0.50331257 #> 51 0.006247703 -0.145288886 -0.778557434 -0.3730232514 0.66435713 #> 52 0.489940875 -0.414024723 0.489792000 3.0677086125 0.06533981 #> 53 -0.622553420 0.695225329 -0.687636328 -0.9520245515 -0.50055212 #> 54 3.315515153 -0.997238668 -0.778557434 -0.9387141768 0.70024296 #> 55 -0.570153326 -0.734220614 1.735411158 -0.4528854997 -0.35424835 #> 56 -0.098552484 2.307640352 -0.783103489 0.8714967845 1.32410431 #> 57 -0.683015066 -0.677042776 0.026094358 -0.0202983214 -0.11961023 #> 58 -0.739445936 -1.014392019 -0.783103489 -0.9586797389 -0.48122898 #> 59 0.240032736 1.221261436 0.048824634 -0.3530576893 0.45732350 #> 60 -0.545968668 0.878194409 0.471607779 0.5986341028 -0.23830952 #> 61 -0.678984290 -0.053804345 -0.792195600 -0.2332643169 -0.01747364 #> 62 -0.683015066 -0.791398452 -0.037550417 -0.4196095629 -0.32112297 #> 63 -0.009875402 -0.757091749 -0.733096881 -0.2399195042 -0.13617292 #> 64 -0.578214879 -0.596993804 -0.787649545 -0.9054382400 -0.50331257 #> 65 -0.755569042 -1.014392019 -0.483063838 -0.9387141768 -0.27143490 #> 66 2.138528435 1.753015327 -0.623991553 -0.8721623032 -0.28799759 #> 67 -0.497599350 -0.368282453 -0.483063838 -0.7656793055 0.66435713 #> 68 -0.352491399 -0.528380398 1.198976630 -0.0003327594 0.05429802 #> 69 -0.102583260 -0.396871372 -0.792195600 2.5352936239 -0.49779167 #> 70 -0.421014598 -0.385435804 1.417187285 2.0228441973 -0.48951032 #> 71 -0.489537798 1.158365814 0.357956396 -0.1800228180 -0.50331257 #> 72 -0.574184103 0.003373492 -0.792195600 2.9346048653 -0.12513113 #> 73 -0.545968668 -0.133853318 0.862568536 1.2042561523 -0.28799759 #> 74 -0.203352671 0.071986898 0.467061724 1.5370155202 0.84102583 #> 75 -0.493568574 -0.351129101 2.640076167 0.0262879901 -0.48674988 #> 76 2.344098033 -1.014392019 0.953489643 -0.6192651836 -0.27143490 #> 77 -0.654799631 -0.494073696 -0.778557434 -0.1999883801 -0.48951032 #> 78 2.194959305 -1.014392019 -0.787649545 3.3339161068 -0.50055212 #> 79 -0.489537798 -0.768527317 0.621627604 0.4854959177 0.23648762 #> 80 -0.731384383 2.416278244 -0.787649545 -0.9387141768 -0.50331257 #> 81 -0.719292054 -0.762809533 -0.437603285 0.6452204143 -0.31836252 #> 82 -0.558060997 0.346440519 -0.792195600 -0.9653349262 -0.50331257 #> 83 -0.574184103 0.986832301 -0.210300519 1.8431541387 -0.01747364 #> 84 0.514125534 -0.842858506 -0.587623111 -0.9520245515 -0.50055212 #> 85 -0.650768855 -0.814269587 -0.469425672 -0.1667124433 -0.50331257 #> 86 0.514125534 -1.014392019 -0.792195600 -0.9387141768 -0.06992216 #> 87 -0.392799163 0.552280735 1.153516077 1.2841184006 -0.43706180 #> 88 -0.441168480 -0.471202561 -0.792195600 0.6052892902 -0.41221777 #> 89 -0.231568106 0.134882519 1.435371507 -0.1334365065 -0.50331257 #> 90 0.280340501 3.136718999 0.989858085 -0.1134709444 -0.50331257 #> 91 -0.674953513 0.026244628 -0.792195600 0.8648415971 -0.47294763 #> 92 -0.320245187 0.043397979 0.639811826 2.3223276284 -0.44534315 #> 93 1.646773711 -0.133853318 -0.792195600 0.5387374166 -0.23002817 #> 94 -0.610461090 -0.842858506 0.357956396 -0.6858170572 1.29926027 #> 95 -0.340399070 -0.516944831 2.621891945 -0.4728510618 -0.47294763 #> 96 -0.767661371 -1.014392019 -0.792195600 -0.7190929940 -0.44534315 #> 97 -0.263814317 2.730756352 -0.792195600 -0.6458859330 1.69400440 #> 98 -0.287998976 -0.196748940 1.176246353 -0.2066435675 -0.16929830 #> 99 5.508257532 1.512868408 -0.769465323 -0.8721623032 -0.43154091 #> 100 -0.751538266 -1.014392019 -0.783103489 -0.0003327594 -0.50055212 #> 101 -0.582245655 0.112011384 -0.764919268 0.2459091729 3.51866083 #> 102 -0.203352671 -0.728502830 -0.755827157 -0.9520245515 -0.48122898 #> 103 2.106282224 -0.196748940 -0.701274494 0.5786685407 -0.50331257 #> 104 -0.421014598 0.134882519 -0.792195600 -0.9453693641 1.54494019 #> 105 -0.263814317 0.300698249 2.976484260 0.1660469246 -0.50331257 #> 106 -0.683015066 -0.202466723 0.903483034 -0.6725066825 0.38279139 #> 107 -0.267845094 -0.202466723 -0.251215017 1.0578420305 -0.18034010 #> 108 0.312586712 -0.276797912 -0.787649545 1.0179109063 -0.44810360 #> 109 0.115078667 -0.522662615 -0.751281102 -0.6325755583 -0.50055212 #> 110 -0.646738078 -0.133853318 -0.651267885 -0.6658514951 -0.07268261 #> 111 -0.570153326 -0.516944831 2.126371915 0.3989784821 -0.01195274 #> 112 0.288402054 -0.322540183 -0.792195600 1.1510146535 -0.40393642 #> 113 -0.412953045 -0.665607209 0.685272379 2.0960512583 -0.41773866 #> 114 -0.662861184 -0.762809533 -0.664906051 0.6252548522 -0.26867445 #> 115 -0.433106927 -0.333975750 1.989990256 1.0844627799 -0.28523714 #> 116 -0.392799163 -0.030933210 -0.646721830 0.4056336694 -0.20794458 #> 117 -0.425045375 -0.591276020 -0.792195600 -0.7656793055 0.21716448 #> 118 -0.521784009 -0.282515696 0.271581345 -0.1933331927 0.04049578 #> 119 0.151355655 -0.625582722 2.549155060 1.6434985179 -0.50055212 #> 120 -0.231568106 0.603740788 -0.792195600 -0.8588519285 0.26409210 #> 121 -0.703168948 -0.848576290 -0.133017579 -0.3197817525 -0.50055212 #> 122 0.941387835 1.284157057 0.062462800 1.2109113397 -0.27971624 #> 123 -0.594337985 -1.014392019 -0.410326953 -0.7324033687 -0.49227077 #> 124 -0.493568574 1.186954733 0.307949787 2.1958790686 2.14947840 #> 125 0.933326283 0.409336140 -0.573984945 0.8781519718 -0.46466629 #> 126 -0.421014598 0.746685383 1.939983647 0.2392539855 -0.48122898 #> 127 -0.296060529 -0.728502830 -0.092103081 -0.5460581227 -0.47294763 #> 128 -0.723322831 -0.882882992 -0.724004770 -0.9187486147 -0.45914539 #> 129 0.006247703 -0.968649749 -0.323951902 -0.7856448676 -0.36529014 #> 130 -0.404891492 -0.568404885 2.108187694 -0.8388863664 -0.50331257 #> 131 0.058647797 -0.242491210 -0.351228234 0.7982897235 0.86034897 #> 132 -0.445199257 1.524303976 -0.787649545 0.4389096062 -0.13065203 #> 133 0.264217395 0.129164735 -0.605807332 -0.7923000549 -0.20242369 #> 134 -0.199321895 -0.151006669 3.244701524 0.1527365499 -0.50331257 #> 135 0.393202241 4.720545104 -0.783103489 -0.7324033687 -0.32388342 #> 136 0.123140220 -0.002344291 -0.273945294 0.4189440442 -0.36805059 #> 137 -0.038090837 0.792427653 1.785417766 -0.9453693641 -0.50331257 #> 138 3.795177548 -0.145288886 1.271713515 0.5919789155 -0.50331257 #> 139 -0.723322831 -0.934343046 -0.623991553 -0.8322311791 1.30478117 #> 140 0.824495319 -1.008674235 1.008042307 1.8564645134 -0.49503122 #> 141 0.868833860 -0.213902291 -0.442149340 -0.7324033687 -0.50331257 #> 142 -0.735415160 -0.962931965 -0.037550417 -0.8521967411 -0.45362449 #> 143 -0.723322831 -0.922907479 0.671634213 -0.7590241181 -0.30732073 #> 144 -0.598368761 -0.562687101 -0.696728438 0.1527365499 -0.35424835 #> 145 -0.658830408 -1.002956451 -0.783103489 3.7132617861 -0.41497822 #> 146 -0.638676525 -0.837140722 -0.783103489 -0.7457137434 -0.50331257 #> 147 -0.634645749 -1.008674235 -0.787649545 -0.9653349262 -0.50055212 #> 148 -0.715261278 -0.837140722 0.507976221 -0.8189208043 -0.11408933 #> 149 0.921233953 -0.940060830 -0.423965119 -0.8921278653 -0.50331257 #> 150 -0.106614037 -1.014392019 -0.792195600 -0.9653349262 -0.50331257 #> 151 -0.416983822 -0.408306939 -0.223938685 -0.3131265652 -0.42049911 #> 152 3.017237697 0.180624789 -0.546708613 0.4122888568 -0.41773866 #> 153 -0.566122550 -0.922907479 2.344582571 0.1993228614 -0.50331257 #> 154 -0.344429846 -1.014392019 -0.664906051 -0.9586797389 1.93140297 #> 155 1.134865104 -0.614147155 -0.783103489 1.1310490914 -0.45638494 #> 156 1.219511409 -0.419742507 -0.319405847 -0.9586797389 -0.44534315 #> 157 -0.767661371 1.890242137 -0.783103489 -0.9653349262 -0.49779167 #> 158 4.012839476 2.439149379 -0.351228234 0.1727021119 -0.49779167 #> 159 0.514125534 -0.968649749 -0.787649545 -0.8255759917 0.72232655 #> 160 0.485910099 0.929654463 -0.583077055 -0.4994718112 -0.16377741 #> 161 -0.715261278 1.106905760 -0.792195600 0.6984619132 -0.50331257 #> 162 -0.731384383 0.603740788 -0.792195600 1.6368433306 0.95144377 #> 163 -0.594337985 0.780992085 -0.687636328 0.0129776153 -0.48674988 #> 164 -0.545968668 0.060551330 -0.528524391 1.2907735880 -0.49227077 #> 165 -0.477445468 2.216155812 -0.787649545 -0.6791618698 2.69604719 #> 166 -0.646738078 -1.008674235 -0.792195600 -0.9653349262 -0.49503122 #> 167 -0.529845562 -0.431178074 0.017002247 0.9912901569 -0.45914539 #> 168 0.961541718 -1.002956451 -0.792195600 -0.8987830526 -0.49503122 #> 169 0.308555936 -0.682760560 -0.746735047 -0.8189208043 0.49596977 #> 170 -0.634645749 -1.008674235 -0.419419064 -0.9387141768 -0.02299454 #> 171 -0.469383915 -0.499791479 2.426411566 0.0861846763 -0.38185283 #> 172 0.183601866 -0.871447425 -0.755827157 -0.6991274319 8.63929272 #> 173 -0.191260342 -0.854294073 -0.792195600 -0.9520245515 1.62499319 #> 174 1.155018986 -0.299669047 -0.787649545 0.0395983648 -0.38737373 #> 175 0.227940407 0.981114517 0.021548302 0.7117722879 -0.32112297 #> 176 -0.384737610 0.186342573 -0.774011379 -0.9254038021 -0.50331257 #> 177 -0.541937891 -0.791398452 0.785285596 0.2126332361 -0.50331257 #> 178 1.183234421 0.352158303 -0.701274494 0.5254270419 1.07566395 #> 179 -0.235598882 -0.213902291 -0.792195600 -0.9320589894 -0.50055212 #> 180 -0.751538266 -0.677042776 -0.787649545 0.8714967845 -0.23830952 #> 181 -0.122737142 -0.728502830 -0.628537609 0.0994950510 -0.50055212 #> 182 -0.150952577 -0.048086562 -0.714912660 -0.6791618698 -0.44534315 #> 183 -0.469383915 0.094858033 -0.533070447 0.3257714212 0.23372717 #> 184 -0.654799631 -0.877165208 -0.619445498 -0.2399195042 -0.40669687 #> 185 -0.271875870 0.060551330 -0.787649545 -0.2665402537 -0.50331257 #> 186 -0.715261278 -0.962931965 0.648903936 2.6218110595 -0.48951032 #> 187 1.803973992 0.918218896 -0.655813940 -0.9653349262 3.58767204 #> 188 -0.545968668 0.415053924 -0.792195600 -0.8721623032 2.44484638 #> 189 -0.038090837 -0.940060830 -0.660359996 -0.8455415538 -0.50331257 #> 190 -0.638676525 -0.333975750 0.007910136 0.3856681074 0.21992493 #> 191 0.078801679 2.730756352 -0.678544217 -0.7324033687 -0.48674988 #> 192 -0.416983822 0.094858033 -0.792195600 -0.9586797389 -0.48398943 #> 193 -0.400860716 1.152648031 2.117279805 -0.1667124433 0.36070780 #> 194 4.726286904 -0.191031156 -0.683090272 -0.7190929940 0.57602278 #> 195 -0.154983354 -0.516944831 2.149102192 -0.2598850663 -0.41221777 #> 196 0.631018050 0.317851600 -0.792195600 -0.9653349262 -0.50331257 #> 197 1.195326751 0.826734356 0.821654039 -0.7390585561 -0.50331257 #> 198 -0.719292054 2.136106839 -0.792195600 -0.6458859330 -0.13341247 #> 199 -0.497599350 1.381359381 0.280673455 -0.8056104296 0.18403910 #> 200 -0.283968200 1.124059112 0.703456600 1.6501537053 -0.44258270 #> Otu00017 Otu00018 Otu00019 Otu00020 Otu00021 Otu00022 #> 1 0.47611468 0.399615523 0.55293856 0.554816232 -0.35537010 1.647612103 #> 2 -0.32110972 -0.679309939 0.61541514 -0.360008658 0.15159833 -0.375705829 #> 3 0.49083266 -0.679309939 -0.13846893 -0.529188603 -0.63100342 -0.081618920 #> 4 -0.26714376 0.030253653 0.08644676 -0.266019799 0.74224116 -0.187490207 #> 5 -0.52961456 -0.674449915 -0.64244668 -0.685836701 -0.63100342 -0.367863511 #> 6 3.30687454 -0.008626544 -0.08432256 0.172594874 0.78161735 -0.356100035 #> 7 -0.50263159 -0.518929127 -0.52165862 -0.403870125 -0.63100342 -0.026722697 #> 8 -0.53452056 0.419055622 0.69871725 -0.027914691 -0.60639331 -0.207096001 #> 9 1.29296306 -0.679309939 0.29053693 -0.673304853 -0.63100342 0.141887131 #> 10 -0.52225557 -0.436308709 -0.03017619 0.918239819 -0.52271890 -0.281598018 #> 11 -0.53452056 -0.679309939 -0.35921951 1.005962753 -0.63100342 -0.383548146 #> 12 2.65928302 -0.664729865 -0.21344082 -0.641975234 0.46660784 -0.273755700 #> 13 -0.44375963 -0.650149792 -0.64244668 -0.522922680 -0.62608140 -0.371784670 #> 14 0.94709032 -0.120407110 -0.34255909 -0.479061212 3.60193686 -0.277676859 #> 15 0.68216652 -0.280787922 -0.30923825 -0.585581919 -0.11911297 -0.360021194 #> 16 -0.53452056 2.304745168 -0.35921951 1.087419764 -0.62608140 -0.301203812 #> 17 2.23246135 -0.674449915 -0.23426635 -0.535454527 0.23035070 -0.340415400 #> 18 1.37881799 0.146894244 0.02813529 -0.165765017 0.69302092 -0.163963254 #> 19 0.70914950 0.137174194 0.40299477 -0.159499093 -0.16341118 0.185019877 #> 20 -0.50508458 2.960848490 -0.39670546 -0.234690180 -0.61623735 0.628110819 #> 21 -0.53452056 -0.664729865 -0.63828157 -0.679570777 -0.62115938 -0.379626987 #> 22 -0.53206756 0.224654637 0.28637182 0.673868786 -0.47842069 -0.367863511 #> 23 -0.53452056 0.278114908 0.60291983 2.033574274 -0.63100342 -0.003195744 #> 24 -0.52716157 -0.674449915 -0.64244668 -0.485327136 -0.62115938 -0.379626987 #> 25 -0.35299870 1.157779362 0.69455215 0.254051885 0.41738760 0.185019877 #> 26 2.12943543 0.900198058 -0.44668673 -0.604379690 -0.23231951 -0.352178876 #> 27 -0.53452056 -0.669589890 -0.64244668 -0.685836701 -0.63100342 -0.379626987 #> 28 -0.53452056 -0.679309939 5.46359780 2.321806774 -0.63100342 -0.336494241 #> 29 -0.51489658 -0.674449915 -0.38004504 0.442029602 -0.63100342 -0.293361494 #> 30 1.07709922 -0.679309939 4.20990108 -0.660773005 -0.29630582 -0.367863511 #> 31 -0.53452056 -0.023206617 -0.55081436 -0.585581919 -0.62115938 1.173151890 #> 32 0.40252473 -0.314808094 -0.56330968 -0.441465669 -0.63100342 0.604583867 #> 33 -0.53452056 -0.679309939 0.01980508 -0.071776158 -0.56701712 -0.379626987 #> 34 -0.53452056 -0.679309939 -0.64244668 -0.679570777 1.28366375 0.216389147 #> 35 0.31176380 -0.188447454 -0.18428509 -0.585581919 -0.26677368 -0.383548146 #> 36 -0.51980257 4.146694494 -0.57997010 -0.554252299 -0.63100342 -0.371784670 #> 37 1.22673211 0.389895474 -0.24676167 -0.660773005 -0.02559452 -0.152199778 #> 38 -0.53452056 -0.674449915 -0.63411647 -0.259753876 -0.61131533 -0.375705829 #> 39 -0.53452056 0.176054391 -0.49250288 -0.447731593 -0.53748498 -0.352178876 #> 40 2.04358049 -0.674449915 0.93612826 -0.197094636 0.03346976 -0.261992224 #> 41 0.24553285 0.559996335 -0.24676167 2.240349763 -0.62608140 -0.379626987 #> 42 -0.46093062 -0.329388168 -0.23843146 -0.410136049 1.79063218 -0.332573082 #> 43 -0.46093062 0.219794613 -0.64244668 -0.685836701 -0.62115938 -0.375705829 #> 44 1.26843308 0.195494490 1.00693505 -0.510390832 -0.60639331 0.024252367 #> 45 0.51536265 -0.679309939 -0.57997010 -0.240956104 -0.38982427 -0.379626987 #> 46 -0.50753758 -0.402288537 -0.17178977 -0.190828713 -0.62115938 -0.332573082 #> 47 0.75820946 -0.679309939 -0.54664925 0.078606015 0.89974591 -0.348257717 #> 48 -0.53452056 -0.105827036 0.02813529 3.430875305 -0.58670521 -0.328651923 #> 49 1.34692902 -0.343968241 -0.55081436 -0.610645614 0.80622746 0.024252367 #> 50 3.17195964 2.469986005 -0.22177104 -0.547986375 1.48054469 -0.367863511 #> 51 -0.53206756 -0.679309939 -0.41336588 0.968367210 -0.62608140 -0.265913383 #> 52 0.13514793 -0.207887552 -0.11347830 -0.529188603 0.72747509 -0.363942352 #> 53 -0.36526369 -0.679309939 -0.64244668 -0.598113766 -0.40951236 -0.360021194 #> 54 -0.53452056 -0.664729865 -0.36754972 -0.353742734 -0.55225105 0.094833225 #> 55 2.23491435 -0.368268364 0.18224419 -0.522922680 0.82099353 -0.254149906 #> 56 -0.51244358 0.885617984 -0.64244668 2.722825904 -0.49810879 -0.375705829 #> 57 -0.48055460 -0.431448684 -0.32173356 -0.366274582 0.53059414 -0.312967288 #> 58 -0.51734957 -0.679309939 -0.62995136 -0.679570777 -0.63100342 -0.363942352 #> 59 -0.51980257 -0.363408340 0.80700999 0.003414929 0.45184176 1.631927468 #> 60 0.14005393 1.138339263 -0.05100172 0.028478624 -0.38490224 -0.332573082 #> 61 -0.53452056 -0.679309939 -0.03434129 -0.472795288 -0.62608140 -0.383548146 #> 62 -0.03901494 -0.679309939 -0.55914457 -0.598113766 1.13108102 -0.301203812 #> 63 -0.52225557 0.788417492 -0.36754972 -0.303615343 -0.62608140 -0.363942352 #> 64 -0.53452056 -0.159287306 -0.09681787 1.156344927 -0.24216356 -0.132593984 #> 65 -0.47810160 -0.679309939 1.00276994 -0.616911538 -0.63100342 -0.171805572 #> 66 -0.53452056 -0.674449915 1.28183200 0.636273243 0.37308939 -0.332573082 #> 67 -0.48546060 -0.562669349 -0.35505441 -0.347476810 -0.62608140 -0.246307589 #> 68 -0.53206756 -0.008626544 -0.49250288 -0.052978387 -0.63100342 -0.293361494 #> 69 -0.53452056 -0.669589890 1.39845495 -0.491593060 -0.01575048 -0.258071065 #> 70 3.36819949 1.269559928 -0.62995136 -0.623177462 1.17045721 0.008567732 #> 71 0.32402879 -0.679309939 -0.20511061 -0.479061212 -0.55717307 0.012488891 #> 72 -0.53452056 0.321855129 1.36513411 0.141265254 -0.63100342 0.290891164 #> 73 1.25862108 0.083713924 -0.64244668 -0.134435397 2.44033929 0.118360178 #> 74 0.65273054 -0.679309939 1.11939289 -0.410136049 -0.25692963 -0.297282653 #> 75 2.94383081 -0.679309939 0.50295730 -0.372540506 1.28366375 -0.367863511 #> 76 1.98716153 1.775002486 -0.03017619 -0.397604201 -0.62608140 -0.379626987 #> 77 -0.29903274 -0.679309939 -0.50499820 -0.648241158 2.05149943 0.761430218 #> 78 -0.53452056 0.195494490 -0.64244668 -0.685836701 0.71763104 0.204625671 #> 79 0.99615028 -0.275927897 -0.24676167 -0.554252299 0.07776797 -0.371784670 #> 80 -0.53206756 -0.679309939 6.88389873 -0.679570777 -0.62608140 -0.383548146 #> 81 0.06646398 0.005953530 -0.36754972 -0.629443386 -0.63100342 -0.277676859 #> 82 -0.28186175 -0.674449915 -0.64244668 0.128733407 4.36977254 -0.046328491 #> 83 0.49573866 0.200354514 -0.55914457 -0.491593060 0.13683226 -0.344336558 #> 84 -0.53452056 -0.674449915 -0.64244668 -0.178296865 -0.62608140 7.537192593 #> 85 -0.53206756 -0.664729865 -0.64244668 -0.685836701 -0.63100342 -0.316888447 #> 86 -0.53452056 2.192964602 1.78164465 -0.679570777 -0.63100342 -0.234544113 #> 87 0.40743073 -0.475188906 -0.28008251 -0.422667897 0.31894713 0.377156657 #> 88 -0.53452056 -0.193307479 -0.05100172 -0.090573930 2.66183035 0.702612836 #> 89 -0.24016078 -0.679309939 0.47380156 0.254051885 -0.46857665 1.141782620 #> 90 -0.53452056 -0.679309939 -0.47167736 0.924505743 -0.63100342 0.561451120 #> 91 -0.29412674 -0.679309939 -0.64244668 -0.497858984 -0.62608140 -0.379626987 #> 92 -0.53452056 -0.679309939 0.44048072 -0.504124908 -0.62608140 -0.371784670 #> 93 -0.53452056 -0.679309939 0.27387650 1.782937318 -0.63100342 -0.383548146 #> 94 -0.53452056 2.601206669 1.18603458 -0.259753876 -0.08958083 -0.250228748 #> 95 3.55708035 -0.664729865 1.49008727 -0.598113766 1.48546672 -0.211017160 #> 96 -0.46828961 -0.655009816 -0.64244668 -0.679570777 4.06952910 0.020331208 #> 97 -0.53452056 -0.679309939 -0.45501694 -0.667038929 -0.62608140 -0.383548146 #> 98 0.78519244 -0.455748807 -0.05516682 -0.103105778 -0.63100342 -0.281598018 #> 99 -0.53452056 -0.669589890 3.29774300 0.354306667 -0.62608140 -0.383548146 #> 100 -0.53206756 -0.679309939 -0.52582373 0.147531178 -0.60639331 -0.383548146 #> 101 -0.40451166 1.002258574 -0.63411647 -0.065510234 1.30335184 -0.371784670 #> 102 -0.52225557 -0.679309939 -0.45918204 -0.604379690 -0.63100342 -0.379626987 #> 103 -0.43885363 2.800467678 -0.10514809 0.166328950 -0.62115938 -0.383548146 #> 104 -0.53452056 0.161474318 -0.52165862 -0.178296865 -0.61131533 0.549687644 #> 105 2.59305208 -0.674449915 0.31552756 -0.529188603 0.41246558 0.345787387 #> 106 1.42787796 -0.679309939 1.39012474 -0.673304853 0.20574059 -0.301203812 #> 107 -0.53452056 -0.188447454 0.50712240 -0.272285723 0.61919057 2.274997508 #> 108 -0.25978477 0.681496950 0.22389524 0.222722265 -0.62608140 1.337840559 #> 109 -0.52470857 -0.217607602 2.99785542 2.096233513 -0.60639331 -0.352178876 #> 110 -0.50263159 -0.382848438 -0.41336588 -0.203360560 -0.61623735 -0.269834542 #> 111 -0.53206756 -0.421728635 -0.62578626 -0.416401973 -0.62608140 -0.199253683 #> 112 -0.21072481 -0.669589890 -0.64244668 0.454561450 -0.62608140 -0.383548146 #> 113 -0.53452056 -0.032926667 -0.41336588 0.053542320 2.00227919 -0.316888447 #> 114 -0.40941766 -0.412008586 -0.06349703 -0.491593060 -0.54240700 0.286970005 #> 115 -0.53206756 0.054553776 -0.08848766 -0.052978387 -0.43412248 -0.128672825 #> 116 -0.45111862 1.211239632 0.01147487 0.015946776 0.82591556 -0.336494241 #> 117 -0.53452056 -0.013486568 0.57792920 -0.685836701 -0.39966831 -0.371784670 #> 118 -0.16902384 -0.465468857 0.42798540 0.028478624 0.34847927 0.094833225 #> 119 -0.53452056 -0.679309939 0.72370788 1.739075850 -0.63100342 -0.383548146 #> 120 -0.53452056 0.244094736 -0.21344082 -0.159499093 -0.63100342 -0.383548146 #> 121 -0.52716157 -0.679309939 -0.44252162 -0.679570777 -0.23724154 -0.383548146 #> 122 -0.53452056 -0.679309939 0.23639056 -0.522922680 0.03346976 -0.383548146 #> 123 -0.53452056 4.550076536 -0.48417267 1.544832209 -0.56701712 -0.340415400 #> 124 -0.53206756 -0.421728635 -0.48833778 0.009680852 -0.15356714 -0.352178876 #> 125 -0.48055460 -0.139847208 -0.13846893 -0.215892408 -0.63100342 -0.375705829 #> 126 -0.53452056 -0.309948069 -0.03017619 0.141265254 0.65364473 -0.348257717 #> 127 -0.47319561 -0.596689521 -0.45085183 -0.516656756 1.18522328 -0.156120937 #> 128 -0.49772559 1.687522044 -0.63828157 -0.140701321 -0.63100342 -0.332573082 #> 129 0.10571196 0.919638156 -0.57580499 2.716559980 0.73239711 -0.238465271 #> 130 1.58486984 -0.023206617 0.17391397 -0.660773005 -0.63100342 -0.383548146 #> 131 -0.51489658 0.419055622 -0.64244668 0.084871939 -0.25200761 -0.301203812 #> 132 -0.52470857 -0.669589890 1.18186948 -0.604379690 -0.54732902 -0.379626987 #> 133 -0.53452056 0.030253653 0.86115636 -0.234690180 -0.52764093 -0.285519177 #> 134 3.26762657 -0.650149792 0.57376409 -0.485327136 1.72172385 -0.328651923 #> 135 -0.53452056 0.880757959 1.11106268 2.478454871 -0.59654926 -0.324730765 #> 136 0.11552395 -0.679309939 -0.13430382 -0.547986375 0.70778699 0.118360178 #> 137 -0.53452056 -0.679309939 -0.64244668 -0.667038929 -0.61623735 -0.379626987 #> 138 -0.53206756 -0.460608832 0.26138119 -0.685836701 4.39438266 0.032094685 #> 139 0.17439590 0.380175425 -0.54248415 -0.109371702 -0.62115938 -0.324730765 #> 140 -0.52716157 -0.674449915 -0.63411647 -0.259753876 0.83083758 -0.265913383 #> 141 -0.53452056 0.428775671 0.59042451 -0.009116919 0.05807988 0.141887131 #> 142 -0.37262268 -0.523789152 -0.56330968 -0.673304853 0.61919057 2.714167291 #> 143 -0.53452056 -0.538369226 -0.35921951 -0.109371702 -0.61623735 -0.277676859 #> 144 -0.49527259 0.973098427 -0.53831904 0.786655417 -0.63100342 -0.277676859 #> 145 -0.08807490 -0.528649176 -0.63411647 -0.566784147 3.53302853 -0.352178876 #> 146 -0.51244358 -0.222467626 -0.60079562 -0.435199745 -0.62115938 -0.363942352 #> 147 -0.53452056 -0.679309939 -0.64244668 -0.466529364 -0.62608140 3.682693510 #> 148 0.14741292 -0.081526913 -0.50499820 -0.366274582 -0.62608140 2.231864761 #> 149 -0.53452056 -0.655009816 0.59042451 5.498630194 -0.49810879 -0.383548146 #> 150 -0.53452056 -0.679309939 -0.64244668 -0.554252299 -0.20770940 0.443816357 #> 151 -0.43394764 -0.679309939 -0.39254036 -0.360008658 -0.60147128 -0.261992224 #> 152 -0.48546060 -0.314808094 -0.62162115 0.091137863 1.57898517 -0.352178876 #> 153 -0.53452056 -0.596689521 -0.58413520 -0.591847843 0.34847927 0.130123654 #> 154 -0.52961456 -0.679309939 -0.63828157 4.320636500 0.09745607 -0.191411366 #> 155 -0.53452056 0.214934588 0.20306971 1.024760525 -0.57193914 -0.379626987 #> 156 -0.52470857 0.030253653 -0.63828157 -0.353742734 -0.63100342 -0.328651923 #> 157 -0.53206756 -0.679309939 -0.64244668 -0.685836701 -0.63100342 -0.383548146 #> 158 -0.53452056 -0.091246962 4.23489171 -0.673304853 -0.62608140 -0.211017160 #> 159 -0.53452056 2.523446276 -0.63828157 -0.328679038 0.54043819 1.333919400 #> 160 -0.53452056 1.002258574 0.05312592 1.569895905 -0.63100342 -0.371784670 #> 161 -0.52225557 0.428775671 -0.57997010 0.066074168 -0.63100342 -0.344336558 #> 162 -0.53452056 1.998563618 -0.64244668 0.066074168 -0.63100342 7.666590833 #> 163 -0.53206756 -0.266207848 -0.25925698 2.459657100 -0.63100342 -0.383548146 #> 164 -0.51244358 -0.674449915 -0.62578626 -0.228424256 -0.61623735 -0.371784670 #> 165 -0.51489658 0.351015277 0.32385777 -0.103105778 -0.63100342 -0.375705829 #> 166 -0.53452056 -0.674449915 -0.64244668 -0.648241158 0.11222214 -0.383548146 #> 167 -0.49036659 -0.514069103 -0.63828157 0.279115580 1.49038874 -0.258071065 #> 168 -0.53452056 -0.412008586 0.18224419 -0.159499093 -0.62608140 -0.360021194 #> 169 -0.53206756 -0.679309939 -0.63828157 -0.504124908 -0.63100342 -0.383548146 #> 170 -0.04882693 -0.679309939 -0.63828157 -0.685836701 -0.63100342 -0.261992224 #> 171 3.46877241 -0.407148561 1.34847369 -0.009116919 1.17045721 -0.132593984 #> 172 -0.50753758 1.109179116 -0.31340335 -0.616911538 -0.52764093 -0.167884413 #> 173 -0.53452056 -0.562669349 -0.60912584 2.171424600 -0.62115938 -0.309046129 #> 174 -0.45602462 0.423915646 -0.36754972 0.698932482 -0.63100342 -0.175726731 #> 175 0.17439590 0.039973702 -0.54248415 -0.554252299 0.23527273 -0.258071065 #> 176 0.70914950 -0.679309939 -0.64244668 -0.121903550 2.44526132 -0.375705829 #> 177 0.95444931 -0.271067872 -0.38004504 -0.585581919 -0.06989273 -0.344336558 #> 178 -0.11996387 1.279279977 -0.64244668 -0.685836701 3.24755116 -0.136515143 #> 179 -0.53452056 -0.679309939 -0.19261530 0.435763678 -0.61131533 -0.360021194 #> 180 -0.48546060 -0.518929127 -0.26342209 -0.479061212 -0.63100342 -0.320809606 #> 181 -0.49772559 -0.635569718 -0.56747478 -0.673304853 -0.60639331 2.278918667 #> 182 -0.53206756 1.964543446 -0.63411647 0.391902211 -0.06004869 -0.375705829 #> 183 -0.52716157 -0.169007356 -0.42169609 3.180238349 -0.62608140 -0.383548146 #> 184 -0.32601572 -0.314808094 -0.50499820 -0.610645614 -0.13387904 -0.062013126 #> 185 -0.51489658 3.373950582 -0.27591741 -0.510390832 -0.61131533 -0.383548146 #> 186 -0.51980257 -0.679309939 -0.63411647 -0.641975234 -0.29630582 0.651637772 #> 187 0.38535374 0.783557467 -0.64244668 -0.504124908 1.10154888 -0.371784670 #> 188 -0.53452056 1.993703594 0.05729102 0.084871939 -0.63100342 -0.383548146 #> 189 -0.49281959 -0.353688291 -0.55081436 4.583805304 -0.60639331 3.910120720 #> 190 -0.37262268 -0.339108217 -0.08015745 -0.347476810 -0.62608140 -0.062013126 #> 191 -0.53452056 1.532001256 1.58588470 -0.428933821 -0.57193914 -0.081618920 #> 192 -0.53452056 -0.669589890 -0.27175230 -0.266019799 -0.63100342 -0.379626987 #> 193 3.84898713 -0.518929127 -0.16345956 -0.510390832 0.37308939 -0.348257717 #> 194 -0.52716157 0.715517123 0.39466456 -0.497858984 -0.21755344 -0.379626987 #> 195 3.26026757 0.268394859 -0.03017619 0.153797102 0.67825485 -0.211017160 #> 196 -0.48546060 4.652137053 0.77785425 -0.416401973 -0.63100342 -0.383548146 #> 197 -0.51244358 0.351015277 -0.14679914 -0.685836701 0.41738760 -0.367863511 #> 198 -0.53452056 -0.679309939 -0.63828157 -0.623177462 -0.63100342 -0.383548146 #> 199 1.06483423 -0.674449915 -0.53831904 -0.667038929 -0.18309928 -0.375705829 #> 200 -0.53452056 -0.552949299 0.14059313 -0.002850995 0.27957094 0.196783353 #> Otu00023 Otu00024 Otu00025 Otu00026 Otu00027 Otu00028 #> 1 -0.0069254588 -0.177204415 -0.24303824 -0.22202016 -0.24641906 -0.292554022 #> 2 -0.6642571429 -0.678440995 -0.43616774 -0.29146475 -0.38539990 -0.307394436 #> 3 -0.3747181868 0.177117995 0.04157367 -0.47086329 -0.41259180 -0.168883908 #> 4 -0.3199405465 0.954898895 -0.28369708 0.43770350 -0.36425064 -0.314814643 #> 5 -0.9068438359 -0.695725015 -0.39550890 -0.61553953 -0.06816104 -0.314814643 #> 6 -0.3434166781 0.851194775 0.03649131 -0.45350214 -0.38842122 -0.319761448 #> 7 0.4078195324 -0.669798985 -0.42600303 0.87751927 -0.23131245 -0.295027425 #> 8 -0.0851792307 -0.592020895 -0.35485005 -0.57503018 0.01945732 -0.322234850 #> 9 -0.8990184587 -0.393254665 -0.45141481 -0.62132658 -0.31288816 -0.319761448 #> 10 -0.4060196956 -0.341402605 1.42397434 -0.62132658 -0.40957048 0.214493446 #> 11 0.1965343482 3.962318375 -0.07023815 0.46085170 -0.20412055 -0.322234850 #> 12 1.2451348919 0.324032165 -0.14647348 -0.58660428 0.02852128 -0.319761448 #> 13 0.0713283131 0.488230355 -0.30402650 -0.37248345 -0.39748519 -0.314814643 #> 14 -0.5625272394 -0.280908535 -0.26845001 1.35205733 -0.37935725 -0.322234850 #> 15 -0.6955586517 0.107981915 -0.37009712 -0.26252951 -0.31288816 -0.312341241 #> 16 1.6911813918 -0.713009035 -0.43616774 -0.01368637 -0.32497345 -0.307394436 #> 17 -0.1399568711 0.099339905 0.21437375 -0.25095541 -0.38237857 -0.314814643 #> 18 -0.4138450728 -0.030290245 0.21437375 -0.22780721 -0.39144254 -0.183724322 #> 19 -0.7581616692 -0.021648235 -0.37517948 0.53608334 -0.12556616 -0.307394436 #> 20 0.8538660323 -0.592020895 -0.45141481 -0.54030789 -0.30986683 -0.312341241 #> 21 -0.8911930815 -0.704367025 5.62708227 -0.62132658 -0.41259180 -0.297500827 #> 22 0.7756122604 -0.704367025 0.61587983 -0.32618705 -0.31288816 -0.205984942 #> 23 0.3686926464 -0.721651045 -0.45649716 0.48978694 0.23699254 -0.299974229 #> 24 -0.1243061167 0.203044025 -0.40059125 -0.62132658 0.44848511 -0.314814643 #> 25 1.1434049884 -0.013006225 -0.29386179 -0.62132658 -0.41863444 -0.235665770 #> 26 -0.8285900640 0.168475985 -0.03974402 -0.58660428 0.33367486 -0.089735035 #> 27 -0.8677169499 -0.721651045 -0.14139113 -0.62132658 -0.41561312 1.485822222 #> 28 0.2200104798 -0.678440995 -0.44125010 2.96085712 -0.42467709 4.458851770 #> 29 -0.4216704500 -0.522884815 -0.43616774 -0.10049212 -0.32195212 -0.319761448 #> 30 -0.7816378008 -0.142636375 -0.37517948 -0.58660428 -0.40654915 -0.314814643 #> 31 -0.4920988447 1.680827735 -0.42600303 -0.60396543 -0.40352783 -0.317288045 #> 32 -0.6642571429 1.853667935 -0.31419121 -0.41299279 -0.40957048 -0.210931747 #> 33 1.3546901726 -0.721651045 -0.34976770 -0.59239133 0.49682627 -0.228245563 #> 34 -0.8990184587 -0.410538685 3.72119899 -0.49979854 -0.05909707 -0.260399793 #> 35 -0.2729882833 4.938865505 -0.18204997 -0.52873379 -0.33101609 -0.309867838 #> 36 2.7789088215 -0.661156975 1.47988025 -0.61553953 -0.15275807 -0.314814643 #> 37 -0.5234003535 2.026508135 0.45324446 -0.58081723 0.09801170 -0.314814643 #> 38 -0.9068438359 -0.721651045 0.34143264 -0.59817838 -0.36122932 -0.307394436 #> 39 -0.0069254588 -0.661156975 -0.26845001 -0.43614099 0.49984759 -0.287607218 #> 40 -0.6407810114 0.038845835 -0.25320295 -0.21623311 -0.37935725 -0.314814643 #> 41 1.1825318744 -0.609304915 -0.42092068 -0.61553953 0.26418444 -0.317288045 #> 42 -0.4529719588 0.073413875 -0.42092068 -0.37248345 -0.37935725 5.443265880 #> 43 3.1388761724 -0.721651045 -0.37517948 -0.62132658 -0.34914403 -0.297500827 #> 44 0.4391210411 0.090697895 -0.34976770 -0.59817838 -0.31288816 -0.295027425 #> 45 0.5252001902 -0.410538685 1.46971554 -0.61553953 -0.09535294 -0.317288045 #> 46 1.3077379094 -0.436464715 -0.24303824 0.16571217 -0.37633593 -0.210931747 #> 47 0.5173748130 0.393168245 0.04665602 -0.60396543 0.54818875 -0.317288045 #> 48 1.4877215849 -0.661156975 -0.33960299 -0.62132658 -0.41561312 -0.314814643 #> 49 -0.8442408184 0.151191965 -0.24812059 -0.60396543 -0.41863444 -0.290080620 #> 50 -0.6720825201 0.747490655 -0.18204997 -0.58660428 -0.38842122 -0.267820000 #> 51 -0.3590674325 -0.574736875 -0.44125010 1.11478830 -0.42467709 1.305263855 #> 52 -0.6407810114 0.427736285 -0.21762646 -0.60975248 -0.35518667 -0.302447632 #> 53 1.7459590322 -0.704367025 6.00825892 -0.60975248 0.58746594 -0.223298758 #> 54 1.4877215849 -0.522884815 1.16985657 -0.41877984 -0.36425064 -0.262873195 #> 55 -0.7425109149 0.254896085 -0.17188526 0.50714809 -0.10441691 -0.314814643 #> 56 0.8225645235 -0.713009035 0.03649131 -0.61553953 -0.36727196 -0.314814643 #> 57 -0.3590674325 -0.557452855 -0.45141481 1.07427895 0.25209915 -0.109522253 #> 58 -0.8911930815 -0.669798985 1.25117426 -0.62132658 -0.42467709 0.738854731 #> 59 -0.1008299851 0.445020305 -0.45141481 -0.38984460 0.56027404 -0.312341241 #> 60 0.0165506728 -0.254982505 0.61587983 0.62867613 0.19167270 -0.277713609 #> 61 -0.4294958272 -0.488316775 -0.45649716 -0.28567770 -0.37331461 -0.317288045 #> 62 -0.2338613974 -0.427822705 0.39733855 -0.40720575 -0.17390732 2.002763299 #> 63 1.9259427076 -0.592020895 -0.44633245 0.99904731 -0.42165577 -0.230718965 #> 64 -0.3981943184 -0.713009035 0.88524467 0.14256397 0.11613964 -0.317288045 #> 65 -0.6564317657 -0.531526825 -0.47174423 -0.55188199 8.52145880 0.006727654 #> 66 -0.6955586517 -0.177204415 -0.47174423 -0.62132658 -0.23433377 -0.322234850 #> 67 -0.5625272394 -0.687083005 -0.47174423 2.85669023 0.33367486 -0.322234850 #> 68 -0.3121151693 0.393168245 -0.45649716 0.17728626 -0.39748519 -0.319761448 #> 69 1.1590557428 -0.721651045 0.02124425 1.73400261 0.03758525 -0.309867838 #> 70 0.1808835938 1.940088035 -0.43616774 -0.54030789 -0.38539990 -0.319761448 #> 71 1.0181989533 -0.358686625 1.11395066 -0.61553953 -0.31893080 -0.304921034 #> 72 -0.3355913009 -0.721651045 -0.30910886 1.01640846 -0.16182203 -0.275240206 #> 73 -0.5860033710 -0.038932255 -0.42092068 -0.23359426 -0.26756832 -0.314814643 #> 74 -0.5781779938 -0.177204415 -0.36501477 0.14256397 0.83521439 0.006727654 #> 75 -0.4686227131 0.894404825 0.01107953 -0.30882590 -0.35216535 -0.304921034 #> 76 -0.6486063886 0.531440405 -0.44125010 -0.52294674 -0.36727196 -0.307394436 #> 77 -0.4842734675 0.721564625 -0.47174423 2.76409744 -0.37029328 -0.309867838 #> 78 -0.9068438359 1.015392965 0.94115058 -0.23938131 -0.39446386 -0.292554022 #> 79 -0.4451465816 -0.237698485 -0.26336766 -0.08313097 -0.28569625 -0.314814643 #> 80 0.0791536903 -0.721651045 0.36176206 -0.61553953 -0.42467709 -0.248032781 #> 81 -0.7190347833 -0.687083005 -0.29894415 0.60552794 -0.30986683 -0.322234850 #> 82 0.0087252956 1.145023115 -0.39042654 -0.23938131 -0.11045955 -0.270293402 #> 83 1.9885457251 -0.315476575 -0.33452063 -0.60396543 -0.40654915 -0.257926390 #> 84 0.2747881201 -0.721651045 -0.32943828 2.66571759 2.25221464 -0.314814643 #> 85 -0.8833677043 -0.229056475 -0.46157952 1.49673357 0.05269186 0.911992891 #> 86 -0.9068438359 -0.626588935 -0.45141481 1.59511342 1.12224003 -0.322234850 #> 87 -0.2495121518 5.517880175 -0.38534419 -0.61553953 -0.40352783 -0.309867838 #> 88 -0.2886390377 0.721564625 -0.08040286 -0.22780721 -0.21922716 -0.275240206 #> 89 -0.5234003535 0.133907945 -0.30910886 -0.19308491 -0.41561312 -0.173830713 #> 90 0.0008999184 0.082055885 -0.41075596 0.40876825 -0.42165577 -0.302447632 #> 91 -0.7659870464 -0.393254665 -0.44633245 0.45506465 -0.33705874 -0.302447632 #> 92 -0.7738124236 0.954898895 0.85983289 -0.30882590 -0.41561312 1.837045346 #> 93 0.1417567078 -0.721651045 6.81127108 -0.62132658 -0.14369410 -0.302447632 #> 94 -0.6016541254 -0.341402605 -0.46157952 1.02798256 -0.10743823 -0.149096690 #> 95 0.7286599972 0.254896085 -0.07532051 -0.53452084 -0.30080287 -0.319761448 #> 96 -0.9068438359 0.194402015 -0.46157952 -0.34354820 -0.42467709 -0.322234850 #> 97 1.9181173304 -0.704367025 -0.27353237 -0.62132658 0.98325919 -0.248032781 #> 98 -0.4529719588 0.142549955 0.31093850 0.24094381 -0.35820799 -0.277713609 #> 99 0.7286599972 -0.713009035 -0.07023815 -0.59239133 0.11311831 -0.280187011 #> 100 -0.5234003535 -0.704367025 -0.46666187 -0.60396543 0.06175583 3.006964628 #> 101 0.0243760500 0.514156385 -0.28369708 -0.61553953 3.79913175 -0.322234850 #> 102 5.4160609352 -0.609304915 -0.43108539 -0.61553953 5.83248179 -0.275240206 #> 103 1.1512303656 -0.609304915 -0.44125010 -0.54609494 0.83823571 -0.205984942 #> 104 -0.9068438359 -0.574736875 -0.28369708 0.40298120 -0.42467709 -0.319761448 #> 105 0.1495820850 0.254896085 -0.11597935 -0.59817838 -0.22526980 -0.282660413 #> 106 -0.7972885552 -0.056216275 -0.21254410 -0.59239133 0.43942114 -0.312341241 #> 107 -0.2260360202 -0.229056475 -0.34468534 0.61710203 -0.30080287 0.169972205 #> 108 -0.5468764851 1.335147335 -0.45141481 1.46779833 -0.12254484 -0.309867838 #> 109 1.1121034796 -0.678440995 -0.39550890 -0.59817838 -0.32195212 -0.312341241 #> 110 0.7599615060 -0.479674765 -0.45141481 0.94696386 -0.05305442 -0.309867838 #> 111 -0.6407810114 -0.289550545 1.47479789 0.06154527 -0.40957048 0.058669102 #> 112 -0.5468764851 -0.721651045 -0.25320295 -0.40141870 -0.07722500 -0.314814643 #> 113 -0.8990184587 -0.721651045 -0.24303824 -0.61553953 -0.42165577 -0.314814643 #> 114 -0.6486063886 -0.082142305 -0.30910886 -0.20465901 -0.22829113 -0.319761448 #> 115 -0.4842734675 0.073413875 -0.41583832 -0.62132658 0.20980063 -0.277713609 #> 116 0.1261059534 0.583292465 -0.43108539 -0.60396543 -0.40352783 -0.025426576 #> 117 0.0243760500 -0.514242805 -0.45141481 -0.62132658 -0.39748519 0.763588754 #> 118 -0.0304015904 -0.721651045 -0.27861472 -0.15257556 0.01945732 -0.319761448 #> 119 -0.7033840289 2.389472555 -0.45141481 -0.62132658 -0.38237857 -0.317288045 #> 120 1.8320381813 -0.652514965 -0.20237939 -0.61553953 0.10103302 -0.309867838 #> 121 -0.5547018623 -0.548810845 -0.47174423 -0.44771509 0.03154261 -0.272766804 #> 122 -0.1869091342 -0.254982505 3.03508101 -0.53452084 -0.31893080 -0.250506184 #> 123 -0.2260360202 -0.462390745 -0.46157952 2.06965148 -0.42467709 6.323797094 #> 124 0.1652328394 1.170949145 -0.44125010 -0.60975248 -0.42467709 3.514012096 #> 125 -0.9068438359 -0.531526825 -0.33960299 4.84743529 -0.38842122 -0.299974229 #> 126 -0.6329556342 3.564785915 -0.24812059 -0.52294674 -0.39748519 -0.245559379 #> 127 -0.9068438359 -0.367328635 -0.40059125 0.37983300 -0.36727196 -0.314814643 #> 128 1.6677052603 0.185760005 3.05032807 0.39140710 0.28533370 -0.314814643 #> 129 -0.0851792307 -0.522884815 -0.16680290 5.25252877 0.85032100 -0.280187011 #> 130 -0.6251302570 -0.695725015 0.10764429 -0.60975248 -0.27663229 -0.322234850 #> 131 -0.9068438359 -0.419180695 -0.42600303 -0.51715969 -0.02586252 -0.317288045 #> 132 1.4407693217 -0.592020895 -0.44125010 -0.55188199 1.61169427 -0.285133816 #> 133 0.4547717955 -0.488316775 0.03649131 -0.17572376 -0.21318451 -0.248032781 #> 134 -0.2808136605 0.427736285 0.24486788 -0.45928919 -0.29476022 -0.314814643 #> 135 -0.0695284764 -0.678440995 -0.33452063 -0.59239133 0.91679010 -0.317288045 #> 136 0.3217403832 -0.280908535 -0.39550890 -0.54030789 0.65997768 0.031461677 #> 137 0.4547717955 0.868478795 -0.44125010 0.07890642 -0.36727196 -0.136729678 #> 138 -0.5312257307 0.453662315 -0.47174423 -0.44192804 -0.40957048 1.082657649 #> 139 0.0400268043 -0.133994365 -0.41583832 1.91918820 0.06477715 -0.322234850 #> 140 -0.9068438359 2.795647025 -0.44125010 -0.55188199 -0.41561312 -0.317288045 #> 141 -0.4920988447 -0.583378885 -0.47174423 2.26062412 0.17656609 -0.116942460 #> 142 -0.7894631780 -0.237698485 -0.21762646 -0.42456689 -0.42467709 -0.099628644 #> 143 -0.5155749763 0.038845835 -0.24812059 0.23515676 -0.42467709 -0.015532966 #> 144 0.1417567078 0.142549955 0.09239722 1.66455801 -0.27663229 0.320849745 #> 145 -0.8833677043 -0.315476575 -0.15155584 -0.61553953 -0.40050651 5.809329418 #> 146 -0.3668928096 -0.609304915 -0.44633245 0.68075958 -0.42467709 -0.292554022 #> 147 -0.8990184587 -0.713009035 -0.44125010 -0.60975248 -0.31893080 -0.314814643 #> 148 -0.1869091342 -0.073500295 -0.41075596 1.02798256 0.45452776 -0.223298758 #> 149 -0.1008299851 -0.626588935 -0.39042654 -0.11785327 -0.39748519 -0.299974229 #> 150 0.0322014271 2.372188535 -0.39042654 0.42612940 -0.40352783 -0.322234850 #> 151 -0.2495121518 1.231443215 -0.46157952 -0.60396543 -0.42467709 -0.304921034 #> 152 0.3921687780 1.352431355 -0.20746175 -0.46507624 -0.41259180 -0.280187011 #> 153 -0.8442408184 0.548724425 -0.43108539 0.60552794 -0.34008006 -0.307394436 #> 154 1.2060080059 -0.617946925 -0.36501477 -0.62132658 0.43639982 -0.245559379 #> 155 0.9086436726 -0.531526825 -0.22779117 -0.56924313 0.30648295 0.706700501 #> 156 -0.4686227131 -0.522884815 -0.42092068 -0.61553953 -0.42165577 -0.314814643 #> 157 -0.8911930815 -0.687083005 0.98180942 -0.62132658 -0.33705874 -0.210931747 #> 158 0.9947228218 -0.220414465 0.74293871 0.07311937 -0.41561312 -0.295027425 #> 159 -0.6564317657 -0.125352355 -0.40567361 2.60784710 -0.41561312 -0.277713609 #> 160 -0.6877332745 -0.713009035 -0.34468534 -0.59239133 0.64184975 -0.139203081 #> 161 0.4078195324 -0.669798985 -0.47174423 3.04187582 -0.41561312 -0.314814643 #> 162 -0.8990184587 -0.721651045 -0.14647348 -0.62132658 -0.37633593 -0.285133816 #> 163 1.1121034796 -0.721651045 -0.35993241 0.74441713 -0.29173890 -0.290080620 #> 164 0.9712466902 -0.168562405 -0.32435592 -0.59817838 0.79895852 -0.272766804 #> 165 0.2356612341 -0.566094865 -0.33960299 -0.49979854 5.67839434 -0.297500827 #> 166 -0.3434166781 1.369715375 -0.46157952 -0.60975248 -0.41561312 4.716085608 #> 167 -0.5468764851 0.419094275 -0.46666187 3.73053472 -0.40654915 -0.307394436 #> 168 -0.5155749763 -0.721651045 -0.40567361 -0.59817838 -0.34008006 -0.287607218 #> 169 3.5849226723 -0.704367025 0.95639764 -0.53452084 0.37597337 -0.304921034 #> 170 -0.9068438359 -0.687083005 -0.39042654 -0.62132658 -0.41863444 -0.312341241 #> 171 -0.5390511079 0.617860505 -0.07532051 -0.37827050 -0.37633593 -0.314814643 #> 172 -0.4529719588 -0.626588935 -0.46157952 -0.26252951 2.99243865 -0.077368024 #> 173 -0.8207646868 -0.687083005 -0.40567361 -0.62132658 0.99836580 0.019094666 #> 174 0.4312956639 1.741321805 -0.39042654 -0.51137264 -0.15275807 -0.290080620 #> 175 -0.0695284764 0.107981915 -0.45649716 -0.50558559 -0.29778154 -0.295027425 #> 176 0.4547717955 4.307998775 1.64759798 -0.58660428 -0.37029328 -0.304921034 #> 177 -0.1321314939 -0.220414465 -0.24812059 0.70969483 -0.38842122 -0.319761448 #> 178 -0.9068438359 -0.410538685 -0.45649716 -0.62132658 -0.42165577 -0.299974229 #> 179 0.2982642517 -0.574736875 -0.16680290 -0.06576982 0.68414826 -0.319761448 #> 180 -0.5077495991 0.280822115 -0.44633245 -0.33776115 -0.37029328 0.244174274 #> 181 -0.6877332745 -0.522884815 0.01616189 0.77335237 -0.08931029 -0.302447632 #> 182 -0.5938287482 0.436378295 -0.46157952 1.04534371 -0.20109922 -0.196091333 #> 183 -0.4451465816 -0.367328635 -0.22779117 -0.19308491 -0.30684551 0.273855101 #> 184 -0.7738124236 0.151191965 0.03649131 -0.51137264 -0.36727196 1.483348819 #> 185 3.0997492864 -0.617946925 -0.42092068 -0.56924313 0.18260873 -0.314814643 #> 186 -0.8677169499 0.393168245 -0.47174423 0.21200856 -0.39144254 -0.069947817 #> 187 -0.9068438359 -0.609304915 -0.46157952 -0.61553953 -0.42165577 -0.309867838 #> 188 2.7710834443 -0.721651045 -0.34468534 -0.60396543 -0.08628897 0.773482363 #> 189 -0.8755423271 -0.047574265 -0.43108539 -0.43614099 -0.41863444 0.187286021 #> 190 -0.3355913009 -0.246340495 -0.40567361 1.58353932 -0.11650220 -0.302447632 #> 191 -0.6094795026 -0.479674765 -0.42092068 -0.45350214 -0.41259180 -0.245559379 #> 192 0.1104551991 -0.721651045 0.80900933 -0.59239133 -0.40957048 -0.307394436 #> 193 -0.5077495991 0.609218495 0.12289135 -0.56924313 -0.14671542 -0.297500827 #> 194 3.4518912600 -0.687083005 -0.40567361 1.55460407 0.06175583 -0.260399793 #> 195 -0.4842734675 0.315390155 2.58783373 -0.52873379 0.17958741 -0.282660413 #> 196 2.4658937338 -0.721651045 1.35282136 -0.16414966 -0.42467709 -0.322234850 #> 197 -0.0382269676 -0.669798985 -0.39550890 -0.58660428 -0.40352783 -0.161463701 #> 198 -0.9068438359 -0.721651045 0.15338549 -0.62132658 -0.41561312 -0.297500827 #> 199 -0.8598915727 0.107981915 0.40750326 -0.60396543 -0.27058964 -0.299974229 #> 200 -0.0304015904 0.004277795 -0.14647348 -0.55766903 -0.23131245 -0.317288045 #> Otu00029 Otu00030 Otu00031 Otu00032 Otu00033 #> 1 0.695821495 0.39193166 0.2730666130 1.850227727 -0.352365855 #> 2 -0.252260766 0.44720466 -0.1402887916 -0.493938512 0.152851091 #> 3 0.066720182 -0.59377025 -0.4629076438 -0.357825634 -0.288065517 #> 4 -0.473775313 -0.71352842 1.5937875395 -0.501500339 -0.435037719 #> 5 -0.571241714 0.33665866 -0.5637260352 -0.577118604 0.952012441 #> 6 -0.216818439 -0.52928508 -0.2411071829 0.337862411 0.079364989 #> 7 3.079318020 0.19847615 -0.3520074134 -0.395634767 -0.618752972 #> 8 0.031277854 -0.17001055 -0.3822529308 -0.357825634 -0.444223482 #> 9 -0.730732188 -0.11473754 0.3335576478 -0.070476224 -0.168650602 #> 10 0.137604837 -0.76880143 -0.4830713221 -0.516623992 0.740739900 #> 11 -0.305424257 0.16162748 -0.5939715526 -0.577118604 -0.600381447 #> 12 -0.730732188 -0.54770941 -0.5233986787 0.148816747 0.465167021 #> 13 -0.269981930 -0.62140675 -0.2209435046 0.103445788 -0.453409245 #> 14 -0.526938804 0.54853851 0.1420027042 0.572279035 -0.646310260 #> 15 -0.535799386 -0.33582956 -0.2411071829 0.436166157 -0.655496023 #> 16 -0.340866585 -0.38189040 -0.4729894830 -0.569556778 1.071427356 #> 17 -0.181376111 1.20260239 -0.4427439656 1.071359589 -0.582009922 #> 18 0.279374147 0.65908451 0.0109387955 -0.100723530 0.106922277 #> 19 0.270513565 0.72356969 -0.0797977567 0.466413463 -0.232950941 #> 20 1.431249791 0.85254003 0.4646215565 -0.546871298 0.446795495 #> 21 -0.730732188 -0.76880143 -0.5939715526 -0.569556778 1.787916843 #> 22 2.937548710 -0.28055656 -0.5536441961 -0.456129379 -0.159464840 #> 23 -0.004164473 0.04186930 -0.3217618960 0.141254920 -0.673867548 #> 24 0.146465418 1.07363205 -0.5838897135 0.504222596 0.116108040 #> 25 -0.730732188 0.79726702 -0.1806161481 -0.577118604 -0.021678400 #> 26 -0.730732188 -0.70431626 -0.5637260352 -0.138532663 4.424230724 #> 27 -0.686429278 -0.76880143 -0.5838897135 -0.531747645 1.705244979 #> 28 0.562912767 -0.76880143 -0.5939715526 -0.577118604 -0.490152295 #> 29 0.279374147 -0.52928508 -0.1402887916 -0.357825634 1.098984644 #> 30 -0.721871606 7.25499635 -0.5637260352 0.020265695 -0.692239074 #> 31 -0.128212620 1.34078490 1.6643604135 -0.569556778 -0.012492637 #> 32 1.378086300 -0.06867671 -0.5838897135 2.530792119 -0.627938735 #> 33 0.075580763 -0.43716340 -0.5939715526 -0.577118604 0.428423970 #> 34 -0.243400184 -0.76880143 -0.5838897135 -0.577118604 -0.223765178 #> 35 0.199628910 0.76041836 0.3033121304 -0.441005726 -0.407480431 #> 36 2.388192634 3.49643206 -0.5939715526 -0.509062165 -0.407480431 #> 37 -0.695289860 -0.67667975 -0.4830713221 0.821819312 -0.701424836 #> 38 -0.721871606 -0.03182804 -0.5939715526 -0.577118604 -0.012492637 #> 39 -0.234539602 2.08697046 0.5251125913 -0.350263807 -0.591195684 #> 40 -0.323145421 0.04186930 -0.1402887916 0.065636655 -0.609567210 #> 41 1.316062227 -0.34504173 -0.5233986787 -0.448567553 0.290637530 #> 42 -0.367448331 -0.06867671 -0.2713527003 -0.123409010 -0.692239074 #> 43 -0.721871606 -0.76880143 -0.5738078743 -0.577118604 -0.609567210 #> 44 0.748984986 0.39193166 1.3316597220 -0.478814859 -0.379923143 #> 45 1.989466449 -0.75037709 -0.4931531613 -0.289769194 2.936137175 #> 46 -0.057327965 -0.76880143 -0.4729894830 -0.569556778 2.467663279 #> 47 -0.730732188 -0.73195276 -0.3217618960 -0.297331021 -0.141093314 #> 48 3.495765369 -0.20685922 -0.5435623569 -0.524185818 -0.058421450 #> 49 -0.385169494 -0.72274059 -0.2108616655 -0.229274582 0.492724309 #> 50 -0.624405205 -0.63983108 -0.4124984482 0.489098943 0.042621939 #> 51 -0.588962878 2.18830430 -0.4830713221 -0.561994951 3.110666665 #> 52 -0.137073202 0.12477881 0.6662583392 1.056235936 -0.232950941 #> 53 -0.730732188 -0.76880143 -0.5939715526 -0.561994951 -0.692239074 #> 54 -0.305424257 -0.75037709 -0.5738078743 -0.577118604 -0.398294669 #> 55 -0.535799386 -0.63983108 -0.4225802873 0.050513002 -0.591195684 #> 56 -0.730732188 0.92623737 -0.5536441961 -0.478814859 0.446795495 #> 57 -0.367448331 2.16066779 -0.2511890220 5.563084576 -0.600381447 #> 58 -0.721871606 -0.75037709 -0.5838897135 -0.546871298 0.042621939 #> 59 -0.721871606 -0.23449572 2.7128716834 -0.577118604 1.622573115 #> 60 0.376840547 0.43799250 -0.4024166090 -0.115847183 -0.122721789 #> 61 0.111023091 0.09714230 4.3360477841 -0.055352571 -0.582009922 #> 62 -0.562381132 0.13399097 -0.2209435046 -0.577118604 -0.021678400 #> 63 1.750230739 0.22611265 -0.5133168395 -0.463691206 -0.554452634 #> 64 -0.314284839 0.36429516 2.6422988095 0.254682319 0.079364989 #> 65 -0.721871606 -0.75958926 -0.3923347699 -0.577118604 -0.085978738 #> 66 0.252792401 -0.54770941 -0.5939715526 -0.569556778 -0.333994330 #> 67 -0.358587749 -0.54770941 -0.4024166090 -0.554433125 -0.471780770 #> 68 -0.677568696 0.15241531 0.6965038566 0.012703869 -0.315622805 #> 69 0.642658004 -0.19764705 -0.0596340785 0.156378574 -0.517709583 #> 70 0.155326000 0.24453698 2.8741811096 -0.577118604 -0.499338058 #> 71 0.935057206 -0.48322424 -0.5939715526 0.942808538 -0.389108906 #> 72 -0.491496477 0.21690048 0.1117571868 -0.577118604 -0.343180093 #> 73 -0.730732188 -0.02261587 -0.4729894830 0.186625880 -0.673867548 #> 74 0.048999018 -0.46479990 -0.4225802873 -0.191465449 -0.425851957 #> 75 -0.145933784 1.34078490 -0.3217618960 0.436166157 -0.232950941 #> 76 -0.730732188 1.31314840 4.7393213494 0.141254920 -0.453409245 #> 77 -0.730732188 -0.05025237 4.3864569797 1.404079959 0.079364989 #> 78 -0.730732188 -0.76880143 -0.1302069524 -0.289769194 2.081861248 #> 79 -0.243400184 0.63144801 -0.3520074134 -0.168779969 -0.673867548 #> 80 6.614690190 0.31823432 -0.5939715526 -0.577118604 -0.389108906 #> 81 -0.394030076 -0.05025237 -0.5334805178 -0.342701980 -0.664681786 #> 82 1.759091320 -0.76880143 -0.5939715526 -0.577118604 0.162036853 #> 83 2.007187613 -0.28055656 -0.5334805178 -0.350263807 0.520281597 #> 84 -0.730732188 0.35508299 -0.5939715526 -0.478814859 -0.205393653 #> 85 -0.633265787 -0.08710104 -0.1201251133 -0.577118604 -0.710610599 #> 86 -0.101630874 0.08793014 -0.3419255742 -0.577118604 -0.269693992 #> 87 1.218595826 0.21690048 0.2125755781 1.094045069 -0.131907552 #> 88 -0.721871606 -0.40031473 -0.1906979872 -0.577118604 0.125293803 #> 89 -0.207957857 -0.45558774 -0.5939715526 -0.509062165 -0.425851957 #> 90 -0.730732188 -0.30819306 0.8376496045 -0.577118604 0.667253799 #> 91 -0.730732188 -0.76880143 1.7450151266 -0.093161703 -0.067607213 #> 92 -0.544659968 -0.17001055 -0.1503706307 -0.078038050 -0.582009922 #> 93 0.881893714 -0.76880143 -0.3520074134 -0.577118604 -0.398294669 #> 94 -0.137073202 -0.73195276 -0.1402887916 -0.577118604 -0.554452634 #> 95 -0.624405205 -0.29898089 -0.2612708612 0.383233371 -0.333994330 #> 96 -0.730732188 -0.76880143 -0.5939715526 2.349308281 -0.591195684 #> 97 0.243931819 -0.59377025 -0.5939715526 -0.577118604 2.807536497 #> 98 -0.482635895 0.42878033 1.4223962743 2.530792119 -0.159464840 #> 99 -0.730732188 -0.69510409 -0.5939715526 -0.561994951 -0.600381447 #> 100 -0.730732188 0.40114383 0.1420027042 -0.569556778 -0.600381447 #> 101 -0.704150442 0.91702520 -0.5637260352 -0.561994951 -0.389108906 #> 102 -0.491496477 2.38175981 -0.5939715526 -0.577118604 -0.683053311 #> 103 -0.243400184 -0.30819306 -0.4326621264 -0.569556778 -0.370737381 #> 104 1.316062227 -0.76880143 -0.5939715526 -0.009981611 -0.343180093 #> 105 0.040138436 0.56696284 -0.1201251133 0.156378574 -0.232950941 #> 106 -0.668708114 -0.23449572 -0.4528258047 0.020265695 -0.710610599 #> 107 0.261652983 1.19339022 0.4444578782 -0.138532663 -0.600381447 #> 108 -0.730732188 0.74199402 -0.5838897135 0.564717209 -0.582009922 #> 109 -0.704150442 -0.55692158 -0.4931531613 -0.561994951 -0.040049925 #> 110 -0.261121348 1.46975524 0.3133939695 -0.183903622 -0.288065517 #> 111 -0.367448331 -0.22528355 3.8823650230 -0.055352571 -0.572824159 #> 112 -0.721871606 -0.75958926 -0.5939715526 -0.531747645 -0.710610599 #> 113 -0.128212620 0.83411569 3.5496643316 0.678144607 -0.315622805 #> 114 -0.650986951 -0.10552538 -0.4830713221 -0.546871298 -0.664681786 #> 115 -0.500357059 0.99072254 3.0052450183 0.715953740 0.033436176 #> 116 -0.243400184 -0.56613375 -0.3419255742 -0.259521888 -0.361551618 #> 117 0.917336042 -0.76880143 -0.4427439656 -0.365387460 2.100232773 #> 118 0.616076258 0.43799250 0.7569948914 3.377716696 -0.563638396 #> 119 -0.225679020 -0.76880143 1.0090408698 2.939130754 0.703996850 #> 120 2.512240780 0.53932634 -0.5838897135 -0.546871298 -0.131907552 #> 121 -0.394030076 0.44720466 -0.4830713221 -0.531747645 -0.683053311 #> 122 0.111023091 -0.41873907 1.2409231698 0.950370364 -0.333994330 #> 123 -0.721871606 -0.75037709 -0.2915163786 -0.448567553 -0.683053311 #> 124 0.261652983 0.06029364 -0.3520074134 -0.161218143 -0.609567210 #> 125 -0.721871606 0.94466170 -0.3822529308 0.247120493 -0.012492637 #> 126 0.137604837 -0.75958926 -0.4225802873 -0.569556778 -0.058421450 #> 127 -0.713011024 -0.56613375 0.1117571868 -0.554433125 -0.232950941 #> 128 0.075580763 -0.51086074 -0.5233986787 -0.168779969 3.955756829 #> 129 -0.500357059 -0.56613375 -0.4427439656 -0.463691206 -0.471780770 #> 130 -0.642126369 -0.05946454 -0.5939715526 -0.456129379 -0.333994330 #> 131 2.972991038 -0.66746759 -0.5233986787 0.050513002 1.493972438 #> 132 -0.730732188 0.35508299 -0.4024166090 -0.040228917 0.823411764 #> 133 2.078072268 -0.70431626 0.0109387955 -0.463691206 -0.040049925 #> 134 -0.473775313 -0.54770941 -0.1402887916 0.315176932 -0.517709583 #> 135 2.645149508 -0.53849724 -0.5838897135 -0.561994951 1.319442948 #> 136 0.350258802 -0.45558774 1.1804321350 1.313338040 -0.049235688 #> 137 -0.269981930 -0.20685922 3.0254086966 1.857789554 -0.591195684 #> 138 0.093301927 -0.54770941 -0.4528258047 2.583724905 -0.683053311 #> 139 0.607215676 -0.66746759 -0.2209435046 7.158629984 -0.517709583 #> 140 -0.730732188 0.83411569 2.2087797267 -0.577118604 3.312753443 #> 141 -0.110491456 1.50660391 0.2125755781 0.368109718 -0.600381447 #> 142 -0.305424257 -0.75037709 -0.1705343090 -0.569556778 -0.710610599 #> 143 -0.278842512 -0.06867671 -0.3217618960 0.179064053 -0.683053311 #> 144 -0.571241714 0.50247767 -0.0293885611 2.349308281 -0.582009922 #> 145 1.271759317 -0.29898089 -0.4427439656 -0.365387460 -0.710610599 #> 146 -0.110491456 0.47484117 0.0008569563 0.549593556 0.051807701 #> 147 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 -0.673867548 #> 148 -0.367448331 0.19847615 1.9164063918 0.632773648 -0.710610599 #> 149 -0.642126369 -0.74116493 -0.4326621264 -0.569556778 -0.701424836 #> 150 -0.730732188 4.27025412 -0.5939715526 -0.577118604 -0.701424836 #> 151 -0.402890658 -0.38189040 -0.4629076438 -0.577118604 0.805040239 #> 152 0.740124404 -0.36346606 -0.2511890220 0.050513002 -0.609567210 #> 153 -0.580102296 -0.65825542 0.0109387955 1.162101508 1.025498543 #> 154 -0.704150442 -0.74116493 -0.2209435046 2.825703355 -0.655496023 #> 155 0.004696108 0.90781303 -0.5133168395 -0.448567553 0.005878888 #> 156 0.846451387 -0.07788888 -0.2612708612 -0.561994951 -0.664681786 #> 157 -0.713011024 -0.76880143 -0.5838897135 -0.561994951 -0.710610599 #> 158 -0.367448331 -0.76880143 -0.0797977567 0.156378574 -0.637124498 #> 159 -0.163654947 -0.40031473 2.0676339788 -0.569556778 -0.646310260 #> 160 0.004696108 -0.48322424 -0.5738078743 -0.539309471 -0.370737381 #> 161 1.094547680 -0.48322424 -0.3923347699 -0.433443899 -0.591195684 #> 162 -0.730732188 0.41956816 -0.5939715526 -0.577118604 1.319442948 #> 163 0.181907746 -0.61219458 -0.5637260352 -0.569556778 -0.444223482 #> 164 -0.721871606 -0.25292005 -0.4830713221 -0.501500339 0.465167021 #> 165 -0.030746219 0.01423280 -0.5838897135 -0.554433125 -0.223765178 #> 166 -0.713011024 -0.76880143 0.6662583392 -0.577118604 -0.710610599 #> 167 -0.713011024 4.09522294 1.1602684568 -0.577118604 2.302319551 #> 168 2.388192634 -0.70431626 -0.5939715526 -0.577118604 1.007127017 #> 169 0.270513565 -0.76880143 -0.5738078743 -0.539309471 0.593767698 #> 170 -0.730732188 -0.76880143 0.1016753477 -0.569556778 -0.710610599 #> 171 -0.571241714 -0.61219458 -0.1100432742 0.534469902 -0.600381447 #> 172 -0.287703094 -0.48322424 -0.4225802873 -0.524185818 -0.407480431 #> 173 1.422389209 -0.61219458 -0.5738078743 -0.577118604 2.752421921 #> 174 0.456585784 0.14320314 -0.1705343090 -0.546871298 1.806288368 #> 175 -0.296563675 -0.39110257 -0.0697159176 -0.493938512 -0.627938735 #> 176 0.562912767 1.38684574 -0.5939715526 0.587402689 -0.012492637 #> 177 0.952778369 -0.48322424 -0.1604524698 -0.244398235 -0.683053311 #> 178 -0.721871606 -0.75037709 -0.5838897135 -0.214150929 1.705244979 #> 179 0.217350073 -0.52928508 -0.5435623569 -0.577118604 5.278506651 #> 180 -0.261121348 0.88017653 -0.1604524698 0.557155382 -0.673867548 #> 181 -0.039606801 -0.54770941 -0.1604524698 0.111007614 -0.627938735 #> 182 -0.083909710 -0.64904325 -0.2612708612 -0.577118604 -0.306437042 #> 183 -0.199097275 1.20260239 -0.2108616655 -0.123409010 -0.554452634 #> 184 -0.668708114 -0.30819306 -0.3116800568 1.600687450 -0.572824159 #> 185 0.297095310 2.55679099 -0.5939715526 -0.554433125 -0.627938735 #> 186 -0.713011024 -0.62140675 -0.0293885611 -0.380511113 -0.701424836 #> 187 -0.721871606 -0.75958926 -0.4225802873 -0.085599877 -0.609567210 #> 188 2.990712202 -0.41873907 -0.5939715526 -0.554433125 1.392929049 #> 189 -0.730732188 -0.56613375 -0.4326621264 -0.380511113 -0.710610599 #> 190 0.102162509 -0.25292005 0.0815116694 -0.304892848 -0.609567210 #> 191 -0.668708114 -0.25292005 -0.5133168395 -0.554433125 -0.343180093 #> 192 -0.730732188 -0.32661739 0.6158491435 -0.577118604 -0.205393653 #> 193 0.057859600 -0.63061892 -0.3822529308 0.413480677 -0.278879754 #> 194 -0.509217641 0.14320314 -0.4528258047 -0.577118604 0.162036853 #> 195 -0.668708114 0.11556664 -0.3721710916 0.526908076 -0.692239074 #> 196 -0.730732188 -0.76880143 -0.5838897135 -0.577118604 0.906083628 #> 197 -0.154794365 -0.47401207 2.1079613354 -0.093161703 -0.572824159 #> 198 -0.721871606 -0.67667975 -0.5939715526 -0.577118604 -0.627938735 #> 199 -0.713011024 -0.74116493 -0.4225802873 -0.161218143 -0.232950941 #> 200 -0.730732188 -0.47401207 -0.3217618960 0.511784423 -0.278879754 #> Otu00034 Otu00035 Otu00036 Otu00037 Otu00038 #> 1 -0.1482914828 -0.28857253 -0.337797955 -0.28026882 -0.269009738 #> 2 -0.1507314908 1.32771762 -0.337797955 -0.40104181 -0.269009738 #> 3 -0.1360914431 -0.09645535 -0.309626997 5.43380328 -0.251964926 #> 4 -0.1507314908 -0.24263146 -0.337797955 -0.28781713 -0.254805728 #> 5 0.0469091527 -0.38463111 -0.332163763 -0.55200805 -0.269009738 #> 6 -0.1507314908 -0.31363129 -0.337797955 -0.02362622 -0.269009738 #> 7 -0.1507314908 -0.38880757 3.099058896 -0.19723739 -0.269009738 #> 8 -0.1507314908 -0.25098438 -0.337797955 -0.13685089 -0.266168936 #> 9 -0.0775312524 -0.38880757 -0.337797955 0.32359613 -0.084357613 #> 10 -0.0604511968 -0.30110191 0.811577123 -0.51426649 -0.254805728 #> 11 -0.1507314908 1.31518824 -0.337797955 0.52740055 -0.269009738 #> 12 0.6935112580 -0.25098438 -0.337797955 -0.54445974 -0.266168936 #> 13 -0.1458514749 5.21182571 -0.337797955 -0.55200805 -0.257646530 #> 14 -0.1507314908 -0.31780775 -0.337797955 -0.43878337 -0.269009738 #> 15 -0.1507314908 -0.20921978 0.158010902 -0.40859012 -0.269009738 #> 16 -0.0824112683 -0.36792527 -0.337797955 1.16145875 -0.269009738 #> 17 -0.1507314908 -0.38880757 0.963700295 -0.29536544 0.049160077 #> 18 -0.1507314908 -0.17580810 -0.337797955 0.01411534 -0.200830492 #> 19 -0.1458514749 0.28360254 -0.337797955 -0.43123506 -0.269009738 #> 20 -0.1482914828 -0.36792527 -0.337797955 1.87100007 -0.269009738 #> 21 0.3616701775 -0.38880757 -0.337797955 7.21520489 -0.251964926 #> 22 -0.1214513954 -0.38463111 -0.337797955 0.18772652 -0.232079313 #> 23 -0.1507314908 0.35460236 -0.337797955 -0.25007557 -0.269009738 #> 24 -0.1507314908 -0.38880757 -0.337797955 0.06695353 -0.260487332 #> 25 -0.1360914431 -0.23010208 1.746852922 -0.54445974 0.270742627 #> 26 0.9887522192 -0.38463111 -0.337797955 -0.51426649 -0.260487332 #> 27 13.8524741014 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 28 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.101402425 #> 29 -0.1507314908 0.05807368 -0.337797955 -0.31801038 -0.266168936 #> 30 -0.1458514749 -0.38880757 -0.337797955 -0.46897662 -0.260487332 #> 31 -0.1141313716 1.80383409 -0.320895380 0.42927250 0.301991448 #> 32 -0.1482914828 -0.38045465 -0.332163763 -0.33310700 -0.269009738 #> 33 -0.1507314908 -0.30945483 0.929895146 1.22184525 -0.269009738 #> 34 0.3836302490 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 35 -0.1434114669 -0.38880757 -0.337797955 0.05940521 -0.266168936 #> 36 0.0542291766 -0.38880757 -0.337797955 -0.55200805 -0.254805728 #> 37 -0.1068113478 -0.38880757 -0.337797955 -0.52936311 2.219532746 #> 38 0.0883892878 -0.38463111 -0.337797955 -0.55200805 0.196881777 #> 39 -0.1507314908 -0.31780775 -0.337797955 -0.20478570 -0.226397709 #> 40 -0.1507314908 -0.27604314 -0.337797955 -0.14439921 0.114498521 #> 41 -0.1385314510 -0.38463111 -0.332163763 0.98029927 -0.269009738 #> 42 -0.0848512763 -0.30945483 -0.072990952 -0.01607790 -0.146855255 #> 43 -0.0360511174 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 44 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 45 -0.1019313319 -0.38880757 -0.337797955 -0.46142831 -0.266168936 #> 46 -0.1409714590 -0.38880757 3.262450451 0.53494886 -0.266168936 #> 47 -0.0214110697 -0.38880757 -0.337797955 0.82933303 -0.269009738 #> 48 -0.1312114272 -0.35121943 -0.337797955 2.98060192 -0.266168936 #> 49 -0.1287714193 -0.38880757 2.969472490 -0.52936311 -0.192308086 #> 50 -0.0946113080 -0.38880757 -0.337797955 -0.49162155 -0.269009738 #> 51 -0.1458514749 -0.18833748 -0.337797955 -0.44633168 -0.135492048 #> 52 -0.1458514749 3.57047681 -0.337797955 -0.54445974 0.392897110 #> 53 0.0493491607 -0.38880757 -0.337797955 1.64455071 -0.229238511 #> 54 0.1249894069 -0.38880757 -0.337797955 -0.54445974 -0.149696057 #> 55 -0.1482914828 -0.19251394 -0.337797955 -0.41613843 -0.269009738 #> 56 -0.0311711015 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 57 -0.1507314908 -0.07139659 -0.337797955 -0.43123506 -0.254805728 #> 58 -0.0287310935 -0.37210173 -0.326529572 -0.54445974 -0.269009738 #> 59 -0.1092513557 -0.38880757 -0.337797955 -0.48407324 0.017911256 #> 60 -0.1507314908 -0.11733765 -0.337797955 -0.41613843 -0.269009738 #> 61 -0.1409714590 -0.38880757 -0.337797955 -0.32555869 0.071886493 #> 62 -0.1287714193 -0.28439607 -0.005380653 0.23301639 1.310476131 #> 63 -0.0458111492 -0.38880757 -0.332163763 -0.04627115 -0.007655961 #> 64 -0.1507314908 0.63442520 -0.281456039 0.48965899 -0.226397709 #> 65 -0.1507314908 -0.38880757 -0.337797955 -0.55200805 -0.220716105 #> 66 -0.1409714590 1.92912790 -0.337797955 -0.55200805 -0.090039217 #> 67 -0.1482914828 -0.32198421 -0.337797955 -0.09910934 -0.269009738 #> 68 -0.1507314908 0.04972076 2.293369503 -0.53691142 -0.269009738 #> 69 -0.1507314908 -0.05469075 -0.337797955 -0.42368675 -0.266168936 #> 70 -0.0653312127 0.55507246 -0.337797955 -0.18968908 1.685461984 #> 71 -0.1068113478 -0.38880757 -0.332163763 0.24056470 -0.260487332 #> 72 -0.1482914828 0.44230803 -0.337797955 -0.40104181 -0.226397709 #> 73 -0.1482914828 -0.38880757 -0.337797955 -0.29536544 -0.217875303 #> 74 -0.1482914828 -0.38880757 -0.337797955 -0.25762388 -0.269009738 #> 75 -0.1458514749 -0.34704297 0.011521922 -0.48407324 -0.257646530 #> 76 -0.0897312922 -0.17998456 -0.337797955 -0.55200805 -0.232079313 #> 77 -0.1409714590 -0.25933730 -0.326529572 -0.46897662 0.032115266 #> 78 -0.1482914828 0.07895598 -0.337797955 -0.55200805 -0.246283323 #> 79 -0.1507314908 -0.29692545 -0.337797955 -0.50671818 -0.269009738 #> 80 0.1591495182 -0.38463111 -0.337797955 -0.55200805 -0.269009738 #> 81 -0.1507314908 -0.01292614 0.203084435 -0.53691142 -0.266168936 #> 82 -0.0287310935 -0.36374881 7.662754058 -0.55200805 -0.269009738 #> 83 -0.1190113875 -0.38045465 -0.337797955 2.54279983 -0.195148888 #> 84 -0.1434114669 0.12489705 -0.337797955 2.80699074 -0.266168936 #> 85 0.9009119332 1.03536539 -0.337797955 -0.52936311 -0.269009738 #> 86 -0.1507314908 -0.19669040 -0.337797955 -0.55200805 -0.269009738 #> 87 -0.1507314908 0.47989617 -0.337797955 0.46701406 -0.240601719 #> 88 -0.1141313716 0.53419016 2.304637886 -0.34820363 -0.192308086 #> 89 -0.1507314908 -0.38880757 -0.337797955 -0.29536544 0.398578714 #> 90 -0.0214110697 -0.38880757 -0.337797955 -0.07646440 -0.266168936 #> 91 -0.1434114669 -0.38880757 -0.332163763 -0.46897662 -0.246283323 #> 92 -0.1482914828 1.78712825 -0.337797955 -0.55200805 -0.169581671 #> 93 -0.1507314908 -0.38880757 -0.337797955 -0.39349350 -0.240601719 #> 94 -0.1482914828 -0.32616067 1.284849214 -0.29536544 -0.158218463 #> 95 -0.0824112683 -0.35121943 -0.337797955 -0.25007557 -0.269009738 #> 96 -0.0580111889 -0.38880757 -0.337797955 -0.55200805 -0.266168936 #> 97 0.3909502729 -0.38880757 -0.337797955 -0.52936311 -0.266168936 #> 98 -0.1482914828 1.37365868 -0.337797955 -0.03117453 -0.266168936 #> 99 0.0005490018 -0.35539589 -0.337797955 -0.55200805 -0.269009738 #> 100 0.1786695817 -0.38463111 -0.337797955 -0.55200805 8.500545795 #> 101 -0.0946113080 -0.37210173 -0.247650890 -0.01607790 -0.266168936 #> 102 -0.1434114669 -0.38880757 -0.332163763 -0.42368675 -0.263328134 #> 103 -0.1019313319 -0.38880757 -0.337797955 0.73875328 -0.237760917 #> 104 -0.1482914828 0.41724927 1.160897000 -0.55200805 -0.251964926 #> 105 -0.1263314113 -0.38880757 -0.337797955 -0.52936311 -0.118447236 #> 106 0.5324707336 -0.38463111 0.496062396 -0.55200805 -0.269009738 #> 107 -0.1507314908 1.03954186 -0.337797955 0.11224340 -0.172422473 #> 108 -0.1385314510 -0.38880757 -0.337797955 -0.34820363 -0.095720821 #> 109 -0.1214513954 -0.38045465 -0.337797955 0.74630160 -0.269009738 #> 110 -0.1458514749 -0.38463111 -0.337797955 -0.47652493 -0.266168936 #> 111 -0.1507314908 -0.38463111 -0.337797955 -0.03872284 -0.269009738 #> 112 -0.0165310538 -0.17163164 -0.337797955 0.17262989 -0.263328134 #> 113 0.0200690653 -0.38880757 -0.337797955 -0.45387999 -0.200830492 #> 114 -0.1507314908 -0.32198421 -0.337797955 -0.42368675 -0.075835207 #> 115 -0.1507314908 -0.09645535 -0.337797955 -0.38594519 0.120180125 #> 116 0.1323094308 -0.35539589 -0.332163763 0.55759380 -0.206512096 #> 117 -0.1507314908 -0.30945483 1.476411727 -0.49162155 -0.260487332 #> 118 -0.1434114669 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 119 -0.1507314908 -0.38880757 -0.337797955 0.57269042 -0.269009738 #> 120 -0.1409714590 -0.38045465 -0.332163763 0.88971952 -0.269009738 #> 121 -0.1507314908 -0.38880757 -0.332163763 -0.48407324 -0.269009738 #> 122 -0.1507314908 3.68741770 -0.337797955 -0.55200805 -0.030382377 #> 123 -0.1458514749 -0.38880757 -0.337797955 -0.55200805 -0.269009738 #> 124 -0.1019313319 -0.10063181 -0.337797955 0.85952627 -0.215034501 #> 125 -0.1287714193 -0.29692545 -0.337797955 0.49720730 -0.217875303 #> 126 -0.1092513557 0.78477778 -0.337797955 -0.10665765 0.228130598 #> 127 -0.1434114669 -0.38880757 -0.337797955 0.17262989 0.151428946 #> 128 -0.1360914431 -0.38045465 -0.332163763 -0.37839688 0.012229652 #> 129 -0.1507314908 -0.38880757 -0.337797955 -0.53691142 0.179836966 #> 130 -0.1482914828 0.61354290 -0.337797955 -0.35575194 1.557625898 #> 131 -0.1409714590 -0.38880757 -0.337797955 1.72003383 -0.234920115 #> 132 -0.1190113875 -0.34286651 -0.332163763 0.27830626 -0.269009738 #> 133 -0.1385314510 0.68454273 6.113351379 0.40662756 -0.146855255 #> 134 -0.1507314908 -0.38880757 -0.337797955 -0.43878337 -0.269009738 #> 135 -0.1336514351 -0.37210173 -0.332163763 -0.53691142 -0.260487332 #> 136 -0.1507314908 0.21260271 -0.337797955 -0.35575194 -0.254805728 #> 137 -0.1360914431 -0.38880757 -0.281456039 -0.55200805 -0.269009738 #> 138 -0.1409714590 1.77042241 -0.332163763 0.11224340 -0.124128840 #> 139 -0.1507314908 0.57595476 0.056595454 -0.52181480 -0.254805728 #> 140 -0.0458111492 0.54254308 -0.337797955 -0.55200805 -0.237760917 #> 141 -0.1507314908 0.12489705 -0.337797955 -0.40104181 -0.192308086 #> 142 -0.1482914828 0.18336749 -0.315261189 -0.55200805 -0.183785680 #> 143 -0.1238914034 -0.36374881 -0.337797955 -0.45387999 -0.243442521 #> 144 -0.1482914828 -0.38880757 1.955318009 -0.24252726 0.441190742 #> 145 -0.1312114272 -0.35957235 -0.337797955 -0.55200805 -0.260487332 #> 146 -0.1507314908 -0.10898473 -0.270187656 -0.55200805 0.784927775 #> 147 -0.0580111889 -0.38880757 -0.332163763 -0.55200805 -0.269009738 #> 148 -0.1507314908 -0.36792527 1.521485259 -0.51426649 -0.001974357 #> 149 0.2201497168 -0.33869005 -0.337797955 0.32359613 -0.269009738 #> 150 -0.0677712207 -0.38880757 -0.337797955 0.21791976 0.509369989 #> 151 -0.1507314908 -0.23845500 -0.337797955 -0.49162155 0.023592860 #> 152 -0.1482914828 -0.38463111 -0.337797955 0.77649484 -0.263328134 #> 153 -0.1482914828 -0.38880757 -0.292724422 -0.06136778 0.162792154 #> 154 -0.1385314510 -0.36374881 -0.337797955 -0.55200805 4.418313433 #> 155 0.2665098677 -0.32198421 -0.337797955 1.95403150 0.091772106 #> 156 -0.1482914828 -0.16745518 -0.337797955 0.35378938 -0.254805728 #> 157 0.4812305668 -0.37210173 -0.332163763 -0.55200805 -0.223556907 #> 158 -0.0824112683 2.04606879 -0.337797955 -0.51426649 0.052000879 #> 159 -0.1263314113 -0.10063181 -0.337797955 -0.53691142 -0.263328134 #> 160 -0.1482914828 -0.38880757 0.203084435 4.20342844 -0.260487332 #> 161 -0.1507314908 -0.38880757 0.974968678 0.32359613 -0.269009738 #> 162 -0.0994913239 -0.38880757 -0.337797955 -0.55200805 -0.263328134 #> 163 -0.1507314908 -0.18416102 -0.337797955 0.35378938 -0.269009738 #> 164 0.1079093513 -0.37627819 -0.163138017 0.90481615 -0.266168936 #> 165 -0.1287714193 -0.37627819 -0.337797955 -0.50671818 -0.237760917 #> 166 0.0347091130 0.50495493 -0.337797955 -0.54445974 5.517703777 #> 167 -0.1507314908 0.04136784 -0.337797955 -0.55200805 -0.269009738 #> 168 -0.1482914828 -0.38463111 -0.337797955 -0.55200805 -0.266168936 #> 169 -0.1482914828 -0.38880757 2.535639740 -0.55200805 -0.240601719 #> 170 0.5861509084 -0.38463111 -0.337797955 -0.55200805 0.941171881 #> 171 -0.1507314908 -0.29274899 -0.337797955 -0.50671818 -0.260487332 #> 172 -0.0799712604 -0.22592562 0.005887730 -0.35575194 -0.144014453 #> 173 0.0127490415 -0.33869005 -0.264553465 -0.12175427 -0.257646530 #> 174 -0.1507314908 -0.38463111 -0.208211549 -0.15949583 -0.001974357 #> 175 -0.1458514749 0.56342538 -0.298358614 0.11224340 -0.260487332 #> 176 -0.1312114272 1.81218701 -0.337797955 0.33869275 -0.266168936 #> 177 -0.1507314908 -0.31363129 1.279215022 -0.28781713 -0.269009738 #> 178 -0.0775312524 -0.38463111 -0.337797955 -0.55200805 -0.215034501 #> 179 0.1298694228 -0.33451359 -0.337797955 2.56544476 -0.269009738 #> 180 0.3445901219 -0.33033713 0.890455805 -0.37084856 0.091772106 #> 181 -0.1507314908 2.17136260 0.777771974 -0.43878337 -0.269009738 #> 182 -0.1507314908 5.69629511 -0.337797955 -0.50671818 -0.115606434 #> 183 -0.0994913239 -0.38045465 -0.337797955 -0.53691142 -0.269009738 #> 184 0.0371491210 -0.20086686 -0.095527718 -0.25762388 -0.223556907 #> 185 -0.1507314908 -0.38880757 2.259564353 0.05940521 -0.234920115 #> 186 -0.1385314510 -0.35957235 -0.089893526 -0.54445974 0.375852298 #> 187 -0.1360914431 -0.38880757 -0.337797955 -0.55200805 -0.246283323 #> 188 -0.1092513557 -0.38880757 -0.337797955 1.79551695 -0.266168936 #> 189 -0.1165713795 -0.36792527 0.417183714 -0.52936311 -0.246283323 #> 190 -0.1507314908 -0.35957235 -0.337797955 -0.34065532 -0.269009738 #> 191 -0.0628912048 -0.29692545 -0.337797955 0.72365666 -0.266168936 #> 192 -0.0189710618 -0.38463111 2.693397103 0.36888600 7.210821722 #> 193 -0.1360914431 -0.38880757 -0.337797955 0.26320964 -0.186626482 #> 194 0.0298290971 -0.38880757 -0.337797955 2.06725618 0.515051592 #> 195 -0.1458514749 -0.38880757 -0.337797955 -0.44633168 -0.269009738 #> 196 -0.1312114272 -0.38880757 -0.337797955 2.57299307 -0.269009738 #> 197 -0.1190113875 -0.34704297 2.225759204 -0.52936311 -0.257646530 #> 198 0.4446304476 -0.38880757 -0.332163763 0.83688134 -0.269009738 #> 199 0.0200690653 -0.38880757 -0.337797955 -0.54445974 0.128702531 #> 200 -0.1092513557 7.49217304 -0.337797955 -0.15194752 -0.269009738 #> Otu00039 Otu00040 Otu00041 Otu00042 Otu00043 #> 1 -0.369691676 -0.20704023 0.122728281 0.690525991 0.719828577 #> 2 0.504524822 -0.32139200 -0.630775883 -0.301679743 -0.243967502 #> 3 -0.439414464 0.35201286 0.855588495 -0.293479696 -0.461086399 #> 4 0.064734927 -0.33409775 -0.620453908 0.641325706 -0.127464679 #> 5 0.252450126 -0.85503359 4.860514738 2.211634782 -0.461086399 #> 6 -0.214156225 0.05978056 0.277557904 -0.301679743 0.545074343 #> 7 -0.385781550 -0.81691633 -0.424336386 -0.301679743 0.126723298 #> 8 -0.278515722 0.30118985 -0.661741808 -0.301679743 -0.381652656 #> 9 -0.133706855 -0.33409775 3.467048133 -0.297579720 -0.455790816 #> 10 -0.412598007 -0.46115527 0.071118407 -0.301679743 -0.461086399 #> 11 0.102277967 0.50448189 -0.661741808 -0.301679743 -0.461086399 #> 12 -0.417961299 -0.63903580 0.081440382 -0.301679743 0.312068697 #> 13 0.080824801 0.37742437 0.205304080 -0.010578061 -0.461086399 #> 14 -0.396508133 -0.55009554 0.298201853 4.581448478 -0.095691182 #> 15 -0.289242305 -0.37221501 1.712312408 3.257140824 -0.026848605 #> 16 -0.439414464 0.75859693 -0.651419833 -0.301679743 0.539778760 #> 17 -0.289242305 -0.33409775 0.659470973 -0.301679743 0.269704035 #> 18 -0.251699265 0.17413233 -0.155965040 -0.277079601 -0.005666274 #> 19 -0.058620775 -0.60091855 0.628505049 -0.256579483 -0.164533759 #> 20 1.362651445 1.52094206 -0.372726512 -0.297579720 -0.461086399 #> 21 -0.439414464 4.04938672 -0.661741808 -0.301679743 -0.455790816 #> 22 -0.310695471 -0.85503359 -0.661741808 -0.256579483 -0.249263085 #> 23 -0.407234716 0.79671419 -0.021779367 -0.297579720 0.132018880 #> 24 -0.305332179 1.34306153 1.640058584 -0.236079364 -0.365765907 #> 25 -0.439414464 0.25036685 -0.651419833 -0.301679743 -0.461086399 #> 26 -0.434051173 -0.74068182 0.721402822 -0.289379672 0.010220475 #> 27 -0.439414464 -0.85503359 -0.641097858 -0.231979341 -0.424017319 #> 28 -0.230246100 -0.57550704 -0.558522059 -0.002378014 -0.418721736 #> 29 0.466981782 -0.72797607 -0.290150713 -0.301679743 -0.392243822 #> 30 8.093582148 -0.74068182 -0.455302311 -0.268879554 3.399393499 #> 31 -0.310695471 0.14872083 -0.661741808 -0.297579720 -0.455790816 #> 32 -0.439414464 -0.30868625 -0.661741808 -0.281179625 -0.424017319 #> 33 -0.192703060 1.16518100 -0.630775883 -0.301679743 1.180544285 #> 34 0.139821007 0.84753719 0.174338155 -0.289379672 -0.413426153 #> 35 -0.273152431 -0.10539421 -0.475946260 -0.301679743 -0.085100016 #> 36 -0.332148636 1.02541772 -0.661741808 -0.297579720 -0.413426153 #> 37 0.542067861 -0.63903580 -0.269506763 -0.301679743 -0.053326519 #> 38 -0.439414464 -0.85503359 -0.651419833 -0.301679743 -0.461086399 #> 39 -0.417961299 -0.14351147 1.412975137 -0.301679743 -0.249263085 #> 40 0.247086835 -0.29598050 -0.114677141 -0.297579720 0.184974709 #> 41 0.043281762 0.31389561 -0.434658361 -0.301679743 -0.238671919 #> 42 -0.412598007 0.14872083 -0.279828738 -0.260679507 -0.392243822 #> 43 -0.439414464 -0.85503359 -0.641097858 -0.301679743 -0.429312902 #> 44 -0.203429643 -0.85503359 0.287879879 -0.289379672 -0.344583576 #> 45 -0.428687881 -0.82962208 -0.475946260 -0.301679743 -0.339287993 #> 46 0.129094424 0.37742437 -0.506912185 -0.252479459 -0.461086399 #> 47 -0.428687881 -0.80421058 -0.032101342 -0.297579720 0.290886366 #> 48 0.123731133 -0.05457121 -0.166287015 -0.301679743 -0.461086399 #> 49 -0.230246100 -0.62633005 -0.424336386 -0.301679743 0.820444651 #> 50 -0.417961299 0.16142658 0.019508532 -0.297579720 0.449753851 #> 51 0.450891908 -0.43574377 -0.455302311 -0.297579720 -0.461086399 #> 52 0.214907086 -0.74068182 -0.465624286 4.749549449 -0.302218913 #> 53 -0.434051173 0.17413233 -0.620453908 0.973427626 -0.461086399 #> 54 -0.439414464 1.10165224 -0.661741808 -0.297579720 -0.450495233 #> 55 -0.037167609 -0.37221501 0.225948029 -0.301679743 0.412684771 #> 56 -0.439414464 -0.85503359 -0.661741808 1.563831038 -0.461086399 #> 57 -0.235609391 -0.51197828 -0.434658361 1.157928692 -0.386948239 #> 58 -0.369691676 -0.84232784 -0.641097858 -0.293479696 -0.445199650 #> 59 -0.026441027 1.69882259 2.032293628 -0.293479696 -0.445199650 #> 60 -0.305332179 0.13601508 -0.228218864 -0.277079601 -0.010961856 #> 61 -0.412598007 -0.48656678 2.352274849 -0.293479696 -0.445199650 #> 62 -0.026441027 0.19954384 -0.290150713 -0.289379672 -0.439904067 #> 63 0.096914676 2.25787568 -0.073389241 -0.293479696 -0.445199650 #> 64 1.389467902 -0.32139200 -0.651419833 -0.289379672 0.052585138 #> 65 -0.439414464 -0.85503359 -0.424336386 -0.301679743 5.326985656 #> 66 -0.010351152 1.20329825 0.143372231 -0.301679743 -0.461086399 #> 67 -0.407234716 -0.81691633 -0.506912185 3.232540682 2.599760488 #> 68 -0.396508133 -0.55009554 1.784566232 -0.301679743 -0.455790816 #> 69 -0.316058762 0.40283587 -0.661741808 -0.301679743 0.063176303 #> 70 -0.273152431 -0.20704023 -0.661741808 -0.297579720 -0.455790816 #> 71 1.603999558 0.40283587 -0.114677141 -0.301679743 -0.381652656 #> 72 -0.273152431 0.05978056 -0.661741808 -0.301679743 -0.450495233 #> 73 -0.417961299 0.08519207 1.113637867 -0.301679743 -0.286332165 #> 74 0.048645053 0.26307260 -0.197252939 -0.297579720 0.211452623 #> 75 -0.310695471 -0.24515749 1.268467489 -0.297579720 0.788671154 #> 76 -0.257062557 -0.85503359 -0.114677141 -0.293479696 -0.116873513 #> 77 -0.358965093 -0.56280129 1.361365263 -0.289379672 -0.418721736 #> 78 -0.439414464 -0.43574377 1.144603791 -0.297579720 -0.461086399 #> 79 -0.396508133 -0.39762651 -0.052745291 -0.301679743 0.089654218 #> 80 -0.439414464 -0.81691633 -0.661741808 -0.301679743 -0.461086399 #> 81 -0.423324590 -0.23245173 -0.661741808 -0.301679743 -0.233376336 #> 82 -0.439414464 1.07624073 0.102084331 0.292823692 0.910469559 #> 83 3.760042699 0.92377171 -0.238540839 -0.297579720 -0.365765907 #> 84 2.816103414 3.09645532 -0.661741808 2.219834829 -0.450495233 #> 85 -0.439414464 -0.82962208 0.463353451 -0.100778582 0.274999617 #> 86 -0.439414464 -0.74068182 0.525285300 -0.297579720 -0.074508851 #> 87 0.820959014 -0.72797607 -0.279828738 -0.285279649 -0.402834987 #> 88 -0.273152431 -0.85503359 -0.651419833 -0.289379672 -0.333992410 #> 89 0.359715954 0.94918321 0.504641350 -0.293479696 -0.376357073 #> 90 -0.434051173 1.01271197 -0.661741808 -0.301679743 -0.461086399 #> 91 -0.391144842 -0.47386102 0.287879879 -0.301679743 -0.455790816 #> 92 -0.283879014 -0.84232784 -0.651419833 -0.301679743 -0.392243822 #> 93 -0.181976477 -0.85503359 -0.661741808 -0.297579720 -0.307514496 #> 94 -0.364328385 -0.85503359 -0.661741808 -0.297579720 -0.455790816 #> 95 -0.251699265 -0.34680350 0.463353451 -0.297579720 0.666872748 #> 96 -0.439414464 -0.09268846 0.153694206 -0.301679743 -0.461086399 #> 97 0.912134968 1.03812348 -0.641097858 -0.301679743 -0.439904067 #> 98 0.096914676 -0.51197828 0.834944546 -0.301679743 -0.461086399 #> 99 0.075461510 0.49177614 -0.661741808 -0.301679743 6.846817934 #> 100 -0.439414464 -0.85503359 -0.620453908 -0.289379672 4.109001601 #> 101 -0.294605596 -0.68985881 -0.372726512 -0.293479696 1.127588456 #> 102 -0.160523311 -0.65174155 -0.517234160 -0.244279412 -0.376357073 #> 103 -0.214156225 1.57176506 -0.589487984 -0.174579009 -0.386948239 #> 104 2.767833791 1.35576728 -0.383048487 -0.297579720 -0.450495233 #> 105 -0.407234716 -0.49927253 0.019508532 0.219023266 0.417980354 #> 106 1.051580544 -0.71527031 0.060796432 -0.301679743 2.864539631 #> 107 -0.396508133 -0.05457121 -0.444980336 -0.301679743 0.476231766 #> 108 -0.439414464 2.90586903 -0.661741808 0.145222839 -0.439904067 #> 109 -0.348238510 0.98730047 -0.630775883 -0.297579720 1.350002936 #> 110 0.134457715 -0.58821279 0.029830507 0.719226157 -0.016257439 #> 111 -0.364328385 -0.65174155 -0.661741808 -0.244279412 -0.445199650 #> 112 -0.439414464 4.51949955 0.339489753 -0.301679743 4.956294857 #> 113 -0.198066351 -0.85503359 -0.661741808 1.752432128 -0.455790816 #> 114 -0.171249894 -0.60091855 2.589680270 -0.297579720 -0.286332165 #> 115 -0.348238510 -0.04186545 -0.661741808 -0.301679743 0.089654218 #> 116 -0.181976477 -0.52468403 -0.001135417 -0.108978630 -0.291627748 #> 117 -0.396508133 0.04707481 0.969130219 -0.301679743 -0.461086399 #> 118 -0.439414464 -0.23245173 2.259377075 -0.301679743 -0.461086399 #> 119 0.107641258 -0.85503359 2.042615603 -0.293479696 -0.461086399 #> 120 6.806392213 1.94023187 -0.651419833 -0.297579720 -0.455790816 #> 121 -0.401871424 -0.65174155 1.113637867 0.018122105 -0.206898422 #> 122 0.745872935 -0.71527031 -0.661741808 1.756532152 -0.455790816 #> 123 -0.439414464 -0.85503359 -0.465624286 -0.297579720 -0.455790816 #> 124 0.761962809 0.93647746 -0.661741808 -0.297579720 -0.461086399 #> 125 -0.428687881 0.94918321 -0.558522059 0.624925612 -0.429312902 #> 126 0.037918470 -0.42303802 0.422065552 0.895527176 -0.461086399 #> 127 -0.122980272 -0.84232784 1.825854131 -0.297579720 -0.445199650 #> 128 0.155910881 -0.56280129 -0.661741808 -0.301679743 -0.243967502 #> 129 0.649333689 -0.66444731 -0.537878109 -0.301679743 -0.281036582 #> 130 -0.385781550 0.36471861 -0.166287015 -0.301679743 -0.461086399 #> 131 -0.439414464 -0.85503359 -0.589487984 -0.256579483 -0.450495233 #> 132 0.155910881 -0.33409775 -0.599809959 0.268223550 1.662442324 #> 133 0.155910881 1.68611683 -0.661741808 -0.301679743 -0.455790816 #> 134 -0.326785345 0.12330932 0.463353451 -0.301679743 1.620077661 #> 135 -0.139070146 0.80941994 -0.651419833 -0.301679743 -0.434608484 #> 136 -0.149796729 -0.21974598 2.114869427 -0.281179625 0.073767469 #> 137 -0.353601802 0.46636463 -0.661741808 0.743826299 -0.058622102 #> 138 -0.101527106 -0.39762651 -0.661741808 2.387935801 -0.461086399 #> 139 -0.149796729 -0.21974598 0.277557904 -0.301679743 -0.217489588 #> 140 0.525977987 1.19059250 0.164016180 -0.301679743 -0.461086399 #> 141 -0.332148636 -0.74068182 0.618183074 1.990233502 0.184974709 #> 142 -0.434051173 -0.84232784 -0.641097858 -0.289379672 -0.333992410 #> 143 1.587909684 -0.66444731 -0.465624286 -0.297579720 -0.318105662 #> 144 -0.439414464 -0.21974598 -0.362404537 -0.301679743 0.492118514 #> 145 -0.321422053 -0.85503359 -0.444980336 -0.281179625 1.561826250 #> 146 -0.342875219 -0.76609332 -0.475946260 9.243175419 -0.450495233 #> 147 -0.439414464 -0.85503359 -0.455302311 -0.293479696 -0.461086399 #> 148 -0.434051173 0.40283587 2.909661491 -0.301679743 0.889287228 #> 149 -0.439414464 -0.52468403 -0.403692436 -0.301679743 -0.461086399 #> 150 -0.439414464 0.45365888 0.308523828 -0.297579720 -0.376357073 #> 151 0.032555179 -0.70256456 0.287879879 -0.301679743 -0.461086399 #> 152 -0.004987861 0.96188896 -0.300472688 -0.002378014 -0.461086399 #> 153 -0.358965093 -0.81691633 6.832011934 -0.293479696 -0.461086399 #> 154 -0.412598007 0.31389561 -0.269506763 -0.297579720 0.169087960 #> 155 0.102277967 0.59342215 -0.630775883 -0.100778582 0.121427715 #> 156 -0.439414464 4.15103274 -0.290150713 -0.301679743 -0.461086399 #> 157 -0.439414464 -0.85503359 -0.630775883 -0.301679743 -0.355174742 #> 158 0.107641258 -0.47386102 0.215626055 -0.301679743 -0.386948239 #> 159 -0.031804318 -0.13080572 0.153694206 -0.281179625 -0.318105662 #> 160 1.169572955 -0.77879908 -0.630775883 -0.301679743 -0.429312902 #> 161 -0.332148636 0.22495534 -0.630775883 -0.301679743 -0.461086399 #> 162 -0.417961299 -0.01645395 -0.661741808 -0.297579720 -0.450495233 #> 163 -0.042530901 0.21224959 -0.599809959 -0.301679743 -0.455790816 #> 164 -0.407234716 1.95293763 -0.114677141 -0.281179625 -0.445199650 #> 165 -0.364328385 2.10540665 -0.610131933 -0.301679743 0.592734588 #> 166 -0.439414464 -0.85503359 -0.661741808 -0.301679743 -0.455790816 #> 167 -0.439414464 -0.85503359 -0.434658361 -0.301679743 -0.461086399 #> 168 3.373885719 -0.06727696 -0.661741808 -0.223779293 -0.450495233 #> 169 0.359715954 -0.84232784 -0.589487984 0.124722721 -0.185716091 #> 170 -0.439414464 -0.85503359 -0.661741808 -0.297579720 -0.461086399 #> 171 -0.391144842 -0.28327474 0.525285300 -0.301679743 0.635099251 #> 172 -0.439414464 0.05978056 -0.465624286 -0.240179388 0.862809314 #> 173 -0.417961299 -0.76609332 -0.630775883 -0.301679743 3.341142087 #> 174 0.338262788 -0.15621722 0.680114923 -0.301679743 -0.085100016 #> 175 0.005738722 -0.04186545 1.010418118 -0.277079601 -0.455790816 #> 176 -0.439414464 -0.85503359 -0.661741808 0.501924901 -0.461086399 #> 177 -0.391144842 -0.43574377 -0.032101342 -0.293479696 -0.058622102 #> 178 -0.439414464 1.39388453 -0.145643065 -0.301679743 -0.461086399 #> 179 -0.439414464 0.61883366 -0.661741808 -0.301679743 -0.445199650 #> 180 -0.369691676 -0.49927253 0.164016180 -0.301679743 -0.069213268 #> 181 -0.267789139 -0.39762651 0.081440382 0.961127555 -0.153942593 #> 182 3.111084440 1.03812348 -0.661741808 -0.178679033 -0.439904067 #> 183 -0.198066351 -0.51197828 -0.290150713 -0.301679743 -0.196307256 #> 184 -0.353601802 -0.70256456 2.486460522 -0.293479696 -0.408130570 #> 185 -0.439414464 1.22870976 -0.496590210 -0.281179625 -0.381652656 #> 186 -0.407234716 -0.85503359 -0.661741808 -0.293479696 -0.413426153 #> 187 -0.439414464 -0.85503359 0.607861099 -0.301679743 -0.455790816 #> 188 -0.439414464 3.94774071 -0.661741808 -0.268879554 -0.445199650 #> 189 -0.423324590 -0.84232784 -0.527556135 -0.256579483 -0.333992410 #> 190 -0.321422053 -0.41033226 1.805210182 -0.285279649 -0.397539405 #> 191 0.134457715 -0.62633005 -0.661741808 0.014022081 -0.386948239 #> 192 -0.439414464 1.52094206 -0.661741808 -0.301679743 -0.450495233 #> 193 -0.412598007 -0.09268846 -0.094033191 -0.289379672 0.455049434 #> 194 -0.423324590 0.98730047 -0.527556135 -0.133578772 -0.392243822 #> 195 -0.375054967 -0.15621722 0.236270004 -0.297579720 1.090519376 #> 196 -0.144433437 -0.85503359 -0.661741808 0.104222602 -0.450495233 #> 197 -0.439414464 -0.82962208 -0.001135417 -0.293479696 -0.376357073 #> 198 0.692240021 -0.81691633 -0.661741808 -0.301679743 -0.445199650 #> 199 -0.423324590 -0.75338757 -0.290150713 -0.293479696 -0.191011673 #> 200 0.445528616 0.11060357 0.494319376 -0.301679743 -0.392243822 #> Otu00044 Otu00045 Otu00046 Otu00047 Otu00048 Otu00049 #> 1 -0.611704260 -0.23391339 0.693551357 -0.203512195 -0.253544727 0.60651290 #> 2 -0.622709104 -0.23391339 -0.569110688 -0.208661143 -0.253544727 -0.42970775 #> 3 0.026576699 -0.23391339 -0.584323484 0.342276360 0.007337307 -0.42161228 #> 4 0.092605763 -0.23391339 -0.523472301 -0.208661143 -0.253544727 -0.43780323 #> 5 -0.303568625 -0.14075174 -0.584323484 -0.208661143 -0.194846269 0.42841248 #> 6 -0.259549248 -0.23391339 0.784828131 -0.208661143 -0.253544727 -0.43780323 #> 7 0.829930318 -0.23391339 -0.584323484 -0.033596890 -0.247022676 0.01554331 #> 8 -0.204525028 -0.23391339 0.221954690 -0.208661143 -0.253544727 -0.33256207 #> 9 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.070927303 -0.31637112 #> 10 -0.446631598 -0.23391339 -0.584323484 0.501893767 -0.207890371 -0.42970775 #> 11 0.235668737 -0.23391339 1.895362219 -0.203512195 -0.247022676 -0.43780323 #> 12 -0.622709104 -0.23391339 -0.188790795 -0.208661143 -0.116581659 -0.40542133 #> 13 -0.314573469 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.42161228 #> 14 -0.578689727 -0.18733256 0.298018668 -0.208661143 -0.253544727 -0.43780323 #> 15 0.884954539 -0.23391339 1.180360820 -0.208661143 -0.253544727 -0.40542133 #> 16 -0.611704260 -0.10348707 -0.584323484 -0.193214297 -0.253544727 8.67770035 #> 17 0.004567010 -0.23391339 0.678338561 -0.208661143 -0.207890371 -0.41351681 #> 18 -0.215529872 -0.23391339 0.632700174 -0.203512195 -0.253544727 -0.43780323 #> 19 0.169639672 -0.23391339 -0.386557139 -0.208661143 -0.253544727 0.68746764 #> 20 -0.402612222 0.55174991 -0.584323484 -0.208661143 -0.247022676 -0.43780323 #> 21 -0.600699416 -0.23391339 -0.477833914 -0.208661143 1.142174157 -0.42161228 #> 22 0.488780151 -0.23391339 -0.234429182 -0.203512195 -0.227456524 -0.42970775 #> 23 -0.039452366 -0.23391339 -0.097514021 -0.208661143 -0.247022676 0.50936722 #> 24 6.431395968 -0.23391339 1.119509637 0.316531617 -0.253544727 -0.13017522 #> 25 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.43780323 #> 26 0.279688113 -0.23391339 -0.127939612 -0.203512195 0.626932139 -0.43780323 #> 27 -0.732757545 -0.23391339 -0.584323484 -0.208661143 5.707609757 1.02747754 #> 28 -0.380602533 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 29 -0.633713948 -0.23080800 -0.219216386 0.002445751 -0.253544727 0.03982973 #> 30 -0.545675195 -0.23080800 -0.295280365 -0.203512195 -0.253544727 -0.43780323 #> 31 -0.644718792 -0.23391339 -0.584323484 -0.208661143 -0.207890371 -0.26779828 #> 32 -0.226534716 5.84954278 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 33 0.026576699 -0.23391339 1.073871250 -0.141724811 -0.253544727 0.52555816 #> 34 -0.655723636 -0.23391339 0.982594476 3.756029300 0.920424427 -0.02493406 #> 35 -0.347588001 -0.23080800 -0.264854773 -0.208661143 -0.240500625 0.26650300 #> 36 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.28398922 #> 37 1.677303314 -0.23391339 0.510997808 -0.208661143 -0.097015507 -0.38113491 #> 38 0.829930318 -0.23391339 0.008975549 -0.208661143 -0.233978575 -0.12207975 #> 39 -0.006437834 7.04201198 0.754402540 -0.208661143 -0.253544727 0.12078447 #> 40 0.180644516 -0.23080800 1.256424799 -0.208661143 -0.253544727 -0.41351681 #> 41 -0.138495963 -0.23080800 0.008975549 -0.208661143 -0.247022676 0.48508079 #> 42 -0.292563781 -0.22459723 -0.493046709 -0.193214297 0.274741392 -0.41351681 #> 43 -0.523665507 -0.23391339 -0.584323484 -0.208661143 1.311747479 -0.34065754 #> 44 -0.094476587 -0.14385712 2.153979746 -0.208661143 -0.227456524 -0.36494396 #> 45 0.202654204 -0.23391339 -0.462621118 -0.208661143 1.279137225 0.19364374 #> 46 -0.380602533 -0.23391339 -0.569110688 -0.188065349 -0.194846269 -0.42161228 #> 47 3.206976645 -0.23391339 -0.386557139 0.661511175 0.079079867 -0.37303944 #> 48 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.220934473 -0.43780323 #> 49 -0.380602533 -0.23391339 -0.386557139 -0.208661143 -0.207890371 -0.08969785 #> 50 -0.490650974 -0.23391339 0.100252324 -0.203512195 1.670460276 -0.31637112 #> 51 -0.215529872 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.43780323 #> 52 -0.688738168 -0.23391339 0.997807271 -0.208661143 -0.253544727 -0.43780323 #> 53 -0.721752701 -0.23391339 -0.584323484 -0.208661143 0.046469612 -0.43780323 #> 54 -0.534670351 -0.22770262 -0.188790795 -0.208661143 0.366050104 -0.42161228 #> 55 -0.248544404 -0.23391339 3.918664050 -0.208661143 -0.253544727 -0.43780323 #> 56 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.220934473 -0.42970775 #> 57 -0.127491119 -0.02274697 -0.508259505 -0.208661143 -0.253544727 -0.17065259 #> 58 -0.721752701 -0.23391339 0.176316302 -0.198363246 -0.247022676 -0.34065754 #> 59 -0.325578313 -0.23391339 -0.371344344 -0.203512195 -0.240500625 -0.38923038 #> 60 0.323707489 0.39026971 -0.538685096 -0.208661143 -0.253544727 0.08840257 #> 61 1.226104706 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42161228 #> 62 -0.699743012 -0.23391339 -0.416982731 -0.203512195 0.079079867 0.25031205 #> 63 -0.501655819 2.33734833 -0.477833914 -0.203512195 -0.175280117 -0.42970775 #> 64 -0.567684883 -0.23391339 0.510997808 -0.203512195 -0.240500625 -0.41351681 #> 65 -0.468641286 -0.23080800 -0.219216386 -0.115980068 -0.253544727 2.04750725 #> 66 0.983998136 -0.23391339 -0.082301225 -0.203512195 -0.149191913 -0.07350690 #> 67 -0.446631598 -0.23391339 -0.508259505 -0.018150044 -0.253544727 0.74413596 #> 68 1.435196744 -0.23391339 3.812174480 -0.208661143 -0.253544727 -0.43780323 #> 69 0.873949695 -0.23391339 5.303028460 -0.208661143 -0.227456524 1.06795491 #> 70 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.083971405 -0.42970775 #> 71 0.433755930 -0.18422718 -0.553897892 -0.208661143 -0.240500625 0.54174911 #> 72 1.138065953 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.07350690 #> 73 -0.369597689 -0.23391339 2.473448456 6.943228501 -0.227456524 -0.38923038 #> 74 -0.094476587 1.04550669 -0.386557139 -0.208661143 -0.253544727 -0.20303448 #> 75 -0.347588001 -0.23391339 0.374082647 -0.208661143 -0.253544727 -0.29208470 #> 76 -0.710747857 -0.23391339 -0.158365203 -0.208661143 0.646498291 -0.43780323 #> 77 0.510789839 -0.23080800 -0.553897892 -0.208661143 -0.253544727 -0.43780323 #> 78 -0.732757545 -0.23391339 -0.584323484 -0.208661143 0.033425511 -0.43780323 #> 79 0.048586387 4.98624476 -0.204003591 -0.208661143 -0.253544727 -0.08160238 #> 80 0.323707489 -0.23391339 -0.584323484 -0.208661143 -0.136147812 -0.43780323 #> 81 0.499784995 -0.23391339 0.997807271 -0.208661143 -0.253544727 0.09649805 #> 82 -0.732757545 -0.23391339 -0.584323484 -0.203512195 -0.129625761 -0.42161228 #> 83 0.147629984 -0.23080800 -0.356131548 -0.208661143 -0.240500625 -0.42161228 #> 84 -0.523665507 -0.23391339 -0.584323484 -0.208661143 -0.227456524 -0.30018017 #> 85 5.352921246 -0.19975412 -0.569110688 -0.208661143 -0.175280117 0.06411615 #> 86 -0.457636442 -0.23391339 -0.401769935 -0.208661143 0.248653189 -0.29208470 #> 87 0.081600919 -0.23391339 -0.553897892 -0.208661143 -0.240500625 -0.42970775 #> 88 -0.116486275 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.34875301 #> 89 0.774906098 -0.23391339 1.773659853 -0.208661143 -0.253544727 -0.43780323 #> 90 -0.534670351 -0.22149184 -0.584323484 -0.208661143 0.666064444 -0.43780323 #> 91 -0.380602533 -0.23391339 1.682383079 -0.198363246 -0.253544727 -0.32446659 #> 92 0.499784995 -0.23391339 3.583982544 -0.208661143 -0.253544727 -0.39732586 #> 93 -0.633713948 -0.23391339 -0.538685096 -0.208661143 -0.253544727 -0.35684849 #> 94 -0.457636442 -0.23391339 0.419721034 -0.208661143 -0.253544727 -0.33256207 #> 95 -0.391607378 -0.23391339 0.298018668 -0.208661143 -0.083971405 -0.39732586 #> 96 -0.732757545 -0.23391339 -0.584323484 1.160959192 0.144300375 -0.43780323 #> 97 -0.369597689 -0.23080800 -0.584323484 -0.193214297 0.242131138 0.06411615 #> 98 -0.259549248 -0.23391339 0.434933830 -0.208661143 -0.253544727 -0.38113491 #> 99 -0.677733324 -0.23391339 -0.584323484 -0.208661143 -0.038317049 -0.39732586 #> 100 3.273005710 -0.23391339 -0.477833914 -0.208661143 -0.253544727 4.16042593 #> 101 0.554809216 -0.23391339 -0.553897892 -0.167469554 -0.057883201 1.04366849 #> 102 -0.710747857 0.20084100 -0.508259505 -0.208661143 -0.207890371 -0.42161228 #> 103 -0.435626754 -0.23391339 -0.584323484 -0.208661143 -0.175280117 0.14507089 #> 104 -0.600699416 -0.23080800 -0.584323484 -0.208661143 0.633454190 -0.33256207 #> 105 -0.281558936 -0.23391339 0.008975549 -0.208661143 -0.240500625 -0.36494396 #> 106 -0.479646130 -0.22770262 -0.097514021 -0.208661143 0.509535223 1.65892451 #> 107 0.213659048 -0.23391339 -0.569110688 -0.208661143 -0.253544727 1.18129155 #> 108 0.213659048 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.36494396 #> 109 1.699313003 -0.22459723 1.210786411 -0.208661143 -0.253544727 3.28611475 #> 110 2.260560052 -0.03206314 1.575893509 -0.208661143 -0.240500625 0.03173426 #> 111 1.908405041 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 112 0.686867345 -0.23391339 -0.584323484 0.120871569 -0.253544727 3.50469255 #> 113 0.466770463 -0.23391339 -0.584323484 -0.208661143 -0.233978575 -0.43780323 #> 114 0.653852813 6.28429718 1.560680713 -0.203512195 -0.253544727 -0.33256207 #> 115 -0.149500807 -0.23391339 1.530255122 -0.208661143 -0.247022676 2.12846199 #> 116 -0.314573469 -0.23391339 -0.493046709 -0.146873760 -0.207890371 -0.42970775 #> 117 -0.490650974 -0.23080800 -0.584323484 -0.208661143 -0.207890371 -0.42970775 #> 118 -0.710747857 -0.23080800 -0.584323484 2.715941677 -0.240500625 -0.43780323 #> 119 -0.380602533 -0.23391339 -0.584323484 3.169049157 -0.194846269 -0.41351681 #> 120 -0.600699416 -0.23080800 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> 121 -0.358592845 5.26883512 -0.584323484 -0.208661143 -0.253544727 0.08840257 #> 122 -0.501655819 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.42970775 #> 123 -0.369597689 -0.22149184 -0.584323484 -0.038745838 -0.247022676 -0.43780323 #> 124 -0.402612222 -0.23391339 -0.569110688 -0.208661143 -0.247022676 -0.42970775 #> 125 0.664857657 -0.23391339 -0.508259505 -0.208661143 -0.227456524 -0.42161228 #> 126 -0.490650974 -0.23391339 1.438978347 -0.203512195 -0.201368320 -0.43780323 #> 127 -0.534670351 -0.23080800 -0.401769935 -0.203512195 -0.123103710 -0.34875301 #> 128 -0.644718792 -0.23391339 -0.523472301 -0.208661143 -0.253544727 0.36364869 #> 129 0.015571854 -0.23391339 -0.310493161 1.572875082 -0.253544727 0.71175406 #> 130 -0.094476587 -0.23391339 -0.584323484 -0.203512195 -0.253544727 -0.30827565 #> 131 -0.567684883 0.69770317 -0.584323484 -0.208661143 -0.025272947 -0.43780323 #> 132 -0.039452366 -0.23391339 0.860892110 -0.198363246 -0.253544727 1.01938207 #> 133 0.972993292 -0.23391339 -0.584323484 -0.208661143 -0.240500625 -0.37303944 #> 134 0.400741398 -0.23391339 1.895362219 -0.208661143 -0.253544727 -0.40542133 #> 135 -0.534670351 -0.22770262 -0.432195526 -0.208661143 -0.253544727 -0.10588880 #> 136 0.037581543 -0.23391339 -0.584323484 -0.208661143 -0.253544727 1.36748745 #> 137 -0.578689727 -0.23391339 -0.264854773 -0.208661143 -0.227456524 1.17319607 #> 138 0.928973915 -0.22770262 -0.584323484 -0.208661143 -0.201368320 -0.43780323 #> 139 -0.545675195 -0.11901402 -0.584323484 -0.208661143 -0.247022676 -0.21922543 #> 140 3.262000866 -0.23391339 -0.584323484 -0.203512195 -0.240500625 -0.43780323 #> 141 0.895959383 -0.22149184 -0.386557139 -0.208661143 -0.253544727 0.08840257 #> 142 -0.600699416 -0.23391339 -0.462621118 -0.208661143 -0.253544727 -0.42161228 #> 143 0.125620295 0.74428400 -0.584323484 -0.193214297 -0.240500625 0.82509070 #> 144 -0.468641286 -0.21217567 0.161103507 -0.136575862 -0.253544727 -0.34065754 #> 145 -0.160505651 -0.23391339 -0.584323484 -0.198363246 -0.240500625 -0.33256207 #> 146 -0.589694571 -0.22149184 4.146855986 -0.182916400 -0.253544727 -0.43780323 #> 147 -0.633713948 -0.23391339 -0.584323484 -0.208661143 0.137778324 -0.13017522 #> 148 -0.732757545 -0.23391339 -0.584323484 -0.208661143 -0.247022676 0.81699522 #> 149 -0.567684883 -0.23391339 0.298018668 -0.208661143 0.085601918 -0.42970775 #> 150 -0.732757545 -0.23391339 -0.553897892 -0.208661143 -0.162236015 -0.43780323 #> 151 -0.611704260 -0.23080800 -0.310493161 -0.208661143 -0.253544727 -0.43780323 #> 152 -0.281558936 -0.23391339 -0.584323484 0.980745990 -0.253544727 -0.43780323 #> 153 -0.424621910 -0.23391339 2.777704371 9.152127462 -0.253544727 -0.31637112 #> 154 -0.699743012 -0.23391339 1.515042326 -0.208661143 -0.233978575 0.20983468 #> 155 -0.534670351 -0.23391339 -0.584323484 -0.208661143 -0.207890371 4.74330005 #> 156 -0.490650974 -0.23391339 -0.584323484 -0.208661143 0.020381409 -0.43780323 #> 157 -0.699743012 -0.22770262 -0.584323484 -0.208661143 11.623109885 -0.29208470 #> 158 2.271564896 -0.19975412 3.188449855 -0.208661143 -0.253544727 -0.43780323 #> 159 -0.622709104 -0.23391339 -0.584323484 -0.208661143 -0.175280117 -0.31637112 #> 160 -0.556680039 -0.23080800 -0.401769935 -0.208661143 -0.247022676 -0.43780323 #> 161 -0.567684883 0.65422773 -0.584323484 -0.208661143 -0.253544727 -0.43780323 #> 162 -0.501655819 -0.23391339 0.465359421 -0.208661143 -0.201368320 0.76032691 #> 163 1.369167679 0.46169364 1.241212003 -0.208661143 -0.253544727 -0.30018017 #> 164 -0.446631598 -0.23391339 -0.493046709 -0.198363246 0.222564986 -0.42970775 #> 165 0.400741398 -0.23080800 -0.553897892 -0.208661143 -0.240500625 -0.10588880 #> 166 -0.732757545 -0.23391339 -0.584323484 -0.208661143 1.540019259 -0.26779828 #> 167 -0.545675195 -0.23080800 0.480572217 0.337127411 -0.247022676 -0.39732586 #> 168 0.191649360 -0.23080800 -0.432195526 -0.208661143 -0.253544727 -0.43780323 #> 169 -0.512660663 -0.23391339 -0.432195526 -0.208661143 -0.175280117 0.88985449 #> 170 -0.721752701 -0.23080800 -0.584323484 -0.208661143 0.653020342 -0.36494396 #> 171 0.257678425 -0.23391339 1.362914369 -0.203512195 -0.181802168 -0.40542133 #> 172 -0.501655819 -0.19043795 -0.493046709 -0.208661143 -0.247022676 2.04750725 #> 173 -0.512660663 -0.23391339 -0.553897892 -0.208661143 0.326917799 2.76800443 #> 174 -0.677733324 1.07345519 -0.584323484 -0.208661143 -0.247022676 -0.37303944 #> 175 0.015571854 -0.23391339 -0.112726816 -0.203512195 -0.253544727 -0.43780323 #> 176 -0.358592845 -0.23391339 -0.569110688 -0.208661143 0.366050104 0.11268900 #> 177 0.059591231 0.80639177 -0.280067569 -0.208661143 -0.253544727 -0.43780323 #> 178 1.006007824 -0.23080800 -0.584323484 -0.208661143 0.561711630 -0.43780323 #> 179 -0.732757545 -0.23080800 -0.584323484 -0.208661143 -0.077449354 0.23412110 #> 180 -0.402612222 0.02693925 0.632700174 -0.188065349 -0.253544727 0.32317132 #> 181 -0.270554092 -0.23391339 0.008975549 0.450404281 -0.253544727 0.39603058 #> 182 0.609833436 -0.23391339 0.465359421 -0.208661143 -0.227456524 -0.42161228 #> 183 0.631843124 0.11389013 -0.401769935 -0.208661143 -0.253544727 -0.30018017 #> 184 -0.589694571 -0.22459723 -0.371344344 -0.172618503 0.222564986 -0.35684849 #> 185 -0.457636442 0.65112234 -0.553897892 -0.208661143 -0.253544727 -0.37303944 #> 186 -0.655723636 -0.23391339 -0.477833914 -0.208661143 -0.247022676 -0.32446659 #> 187 0.895959383 -0.23391339 -0.584323484 -0.208661143 0.092123968 -0.30827565 #> 188 -0.248544404 -0.23391339 -0.493046709 -0.208661143 -0.129625761 -0.18684354 #> 189 -0.666728480 -0.23080800 -0.553897892 4.682840053 0.150822426 -0.41351681 #> 190 -0.171510495 1.64484668 1.073871250 -0.110831119 -0.247022676 -0.42970775 #> 191 -0.369597689 -0.23391339 -0.553897892 -0.208661143 2.146569989 -0.30018017 #> 192 3.735209162 -0.22459723 -0.569110688 -0.208661143 -0.240500625 -0.43780323 #> 193 -0.369597689 -0.23080800 0.328444260 -0.208661143 -0.253544727 -0.31637112 #> 194 0.224663892 -0.23391339 -0.356131548 -0.208661143 -0.253544727 -0.32446659 #> 195 -0.204525028 -0.23080800 0.313231464 -0.177767451 -0.247022676 0.43650795 #> 196 -0.490650974 -0.23391339 -0.386557139 -0.208661143 -0.188324219 -0.43780323 #> 197 -0.435626754 -0.23391339 -0.569110688 -0.208661143 -0.142669863 -0.42161228 #> 198 -0.666728480 -0.23391339 -0.553897892 -0.208661143 -0.103537557 -0.22732091 #> 199 -0.303568625 -0.23391339 -0.340918752 -0.208661143 1.983518717 -0.29208470 #> 200 2.876831322 -0.23391339 -0.584323484 -0.208661143 -0.253544727 -0.42970775 #> Otu00050 Otu00051 Otu00052 Otu00053 Otu00054 Otu00055 #> 1 -0.475385806 -0.20991733 0.19735560 -0.082761027 -0.18688626 -0.256009183 #> 2 -0.450642238 -0.20991733 -0.25745566 0.651532741 -0.45315341 -0.418554697 #> 3 0.304036595 -0.16859502 5.36271211 -0.189845534 1.12780781 -0.377918318 #> 4 1.380381816 -0.20991733 -0.25745566 -0.128654387 -0.08703608 -0.405009237 #> 5 -0.549616511 2.09035789 -0.25745566 -0.465205697 -0.53636190 -0.201827346 #> 6 -0.475385806 -0.20991733 -0.25745566 -0.342823403 -0.58628699 -0.283100102 #> 7 -0.524872942 -0.20991733 0.06740953 -0.082761027 -0.33666153 -0.432100156 #> 8 1.652561068 -0.20991733 -0.22496914 -0.388716763 -0.51972020 -0.418554697 #> 9 0.390639084 -0.20991733 -0.25745566 1.095168558 0.76169047 0.136809140 #> 10 -0.475385806 -0.20991733 -0.25745566 -0.373418976 0.26243956 0.096172762 #> 11 3.384610848 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.296645562 #> 12 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.38658662 -0.296645562 #> 13 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.30337814 -0.418554697 #> 14 -0.425898669 0.04490358 -0.25745566 -0.358121189 -0.50307850 -0.350827400 #> 15 0.192690538 -0.20991733 -0.25745566 0.024323481 -0.58628699 -0.296645562 #> 16 -0.203206555 0.84380156 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 17 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.03711098 -0.364372859 #> 18 -0.376411533 -0.20991733 -0.25745566 -0.312227829 0.16258938 0.245172816 #> 19 1.120574349 -0.20303028 -0.25745566 -0.281632255 -0.18688626 -0.405009237 #> 20 -0.524872942 0.91955912 -0.25745566 0.100812415 -0.58628699 -0.201827346 #> 21 -0.512501158 -0.20991733 -0.25745566 -0.465205697 -0.10367777 4.850629026 #> 22 -0.487757590 -0.20303028 -0.25745566 -0.449907910 2.24280151 -0.432100156 #> 23 -0.326924396 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 24 1.256663975 -0.20991733 7.27941672 -0.465205697 -0.51972020 -0.432100156 #> 25 -0.265065475 -0.20991733 -0.25745566 -0.006272093 2.12630963 -0.201827346 #> 26 -0.549616511 -0.20991733 0.58719383 -0.388716763 -0.43651171 0.475445626 #> 27 -0.512501158 -0.20991733 -0.25745566 -0.449907910 -0.58628699 2.547900921 #> 28 0.019485560 -0.20991733 -0.25745566 -0.434610124 -0.40322832 -0.405009237 #> 29 1.442240737 -0.18236913 -0.25745566 -0.449907910 -0.32001983 1.829991571 #> 30 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.405009237 #> 31 -0.549616511 -0.20303028 -0.24662682 -0.465205697 -0.07039438 2.209264435 #> 32 -0.005258008 -0.03774104 5.22193719 1.079870772 -0.10367777 -0.418554697 #> 33 -0.302180828 -0.20991733 -0.25745566 -0.327525616 -0.51972020 0.949536707 #> 34 3.533072258 -0.20991733 -0.25745566 -0.449907910 2.79197752 0.109718221 #> 35 -0.549616511 -0.20991733 -0.25745566 -0.312227829 -0.56964529 -0.323736481 #> 36 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.41987002 -0.418554697 #> 37 -0.549616511 -0.20991733 -0.25745566 -0.419312337 -0.50307850 -0.147645508 #> 38 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 39 -0.512501158 -0.08595040 -0.25745566 0.009025694 -0.58628699 -0.405009237 #> 40 1.937112103 -0.20991733 -0.25745566 -0.465205697 0.11266429 -0.418554697 #> 41 -0.116604066 -0.20991733 -0.25745566 -0.465205697 -0.00382759 3.035537461 #> 42 -0.487757590 -0.18236913 -0.09502307 -0.189845534 0.27908126 -0.120554589 #> 43 0.897882235 -0.20303028 -0.23579798 -0.465205697 2.30936830 2.507264543 #> 44 -0.401155101 -0.20991733 -0.04087887 -0.159249961 -0.12031947 -0.377918318 #> 45 -0.549616511 -0.20991733 -0.25745566 -0.449907910 0.86154066 -0.256009183 #> 46 0.056600912 -0.20991733 -0.25745566 -0.434610124 -0.33666153 -0.432100156 #> 47 -0.500129374 -0.20991733 -0.25745566 -0.388716763 -0.33666153 -0.377918318 #> 48 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.432100156 #> 49 3.124803381 -0.20991733 -0.25745566 -0.465205697 2.22615982 -0.350827400 #> 50 -0.549616511 -0.20991733 -0.25745566 -0.342823403 -0.46979511 -0.323736481 #> 51 -0.549616511 -0.20991733 -0.25745566 -0.251036682 -0.51972020 -0.432100156 #> 52 -0.549616511 -0.20991733 -0.25745566 0.085514628 -0.56964529 -0.418554697 #> 53 -0.524872942 -0.20991733 -0.25745566 -0.465205697 -0.51972020 0.163900059 #> 54 6.564159374 -0.20991733 -0.21414030 -0.465205697 -0.30337814 -0.418554697 #> 55 0.242177675 -0.20991733 -0.25745566 -0.358121189 -0.51972020 -0.337281940 #> 56 -0.537244727 -0.19614323 -0.24662682 -0.312227829 -0.51972020 -0.418554697 #> 57 -0.388783317 0.25840217 -0.25745566 -0.404014550 -0.46979511 -0.405009237 #> 58 -0.549616511 -0.20991733 -0.17082495 -0.449907910 -0.58628699 0.123263681 #> 59 0.254549459 -0.20991733 -0.25745566 -0.465205697 -0.12031947 -0.391463778 #> 60 -0.091860497 2.84104651 -0.25745566 -0.388716763 -0.56964529 0.055536384 #> 61 -0.302180828 -0.20991733 -0.25745566 -0.449907910 -0.46979511 -0.350827400 #> 62 -0.487757590 -0.20991733 -0.25745566 -0.006272093 3.92361292 4.539083459 #> 63 -0.512501158 0.39614321 4.64800869 -0.296930042 -0.58628699 -0.418554697 #> 64 0.613331199 -0.20991733 -0.11668075 0.819808396 0.12930599 -0.432100156 #> 65 0.304036595 -0.20991733 -0.25745566 -0.296930042 -0.56964529 -0.405009237 #> 66 1.454612521 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 67 4.287751091 -0.20991733 -0.25745566 -0.327525616 -0.58628699 -0.432100156 #> 68 0.786536177 -0.20991733 2.70964640 0.223194710 -0.58628699 -0.432100156 #> 69 0.118459833 -0.20991733 -0.25745566 -0.449907910 -0.58628699 -0.418554697 #> 70 -0.537244727 -0.20991733 -0.25745566 -0.465205697 3.05824467 0.367081951 #> 71 -0.549616511 -0.19614323 -0.25745566 -0.465205697 -0.53636190 -0.432100156 #> 72 0.130831617 -0.20991733 -0.25745566 0.391470365 -0.51972020 -0.377918318 #> 73 0.922625803 -0.20991733 -0.25745566 0.116110202 -0.20352796 -0.432100156 #> 74 0.192690538 -0.18925618 -0.25745566 -0.419312337 -0.30337814 -0.432100156 #> 75 -0.524872942 -0.20991733 -0.25745566 -0.052165453 -0.48643681 -0.283100102 #> 76 -0.537244727 -0.20991733 1.99494298 0.529150446 -0.33666153 -0.418554697 #> 77 -0.512501158 -0.20303028 -0.25745566 -0.174547748 -0.58628699 0.055536384 #> 78 -0.351667964 -0.20991733 -0.25745566 1.033977411 -0.56964529 -0.242463724 #> 79 -0.425898669 2.84793356 -0.13833843 -0.419312337 -0.58628699 -0.405009237 #> 80 -0.549616511 -0.20991733 -0.24662682 -0.465205697 -0.28673644 -0.432100156 #> 81 -0.326924396 -0.20991733 -0.25745566 -0.449907910 -0.48643681 -0.432100156 #> 82 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.50307850 -0.174736427 #> 83 -0.549616511 -0.20991733 -0.25745566 -0.404014550 -0.51972020 -0.323736481 #> 84 0.551472278 -0.20991733 -0.25745566 -0.388716763 -0.40322832 -0.323736481 #> 85 1.528843226 -0.18925618 -0.25745566 -0.220441108 -0.43651171 -0.310191021 #> 86 1.256663975 -0.20991733 -0.25745566 -0.449907910 -0.45315341 -0.432100156 #> 87 -0.549616511 -0.20991733 -0.25745566 -0.251036682 0.36228975 0.908900329 #> 88 0.266921243 -0.20991733 -0.25745566 1.095168558 -0.56964529 -0.161190967 #> 89 -0.500129374 -0.20991733 -0.25745566 0.238492497 0.42885653 -0.432100156 #> 90 -0.475385806 -0.20991733 -0.25745566 4.078236988 1.95989266 -0.283100102 #> 91 -0.277437260 -0.18925618 -0.24662682 0.330279217 -0.58628699 -0.432100156 #> 92 -0.351667964 -0.20991733 -0.25745566 1.202253066 -0.56964529 -0.391463778 #> 93 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.377918318 #> 94 -0.166091202 -0.20991733 -0.25745566 -0.465205697 -0.40322832 -0.432100156 #> 95 -0.524872942 -0.20991733 0.77128410 -0.419312337 -0.03711098 -0.310191021 #> 96 -0.376411533 -0.20991733 -0.25745566 1.752973392 4.00682140 -0.350827400 #> 97 -0.537244727 -0.20991733 -0.24662682 -0.465205697 -0.46979511 1.071445842 #> 98 -0.104232281 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.082627303 #> 99 -0.401155101 -0.20991733 -0.25745566 -0.465205697 1.22765799 5.026719999 #> 100 -0.549616511 -0.20991733 -0.25745566 8.912337624 -0.58628699 -0.093463670 #> 101 -0.549616511 -0.20991733 -0.25745566 -0.128654387 -0.53636190 -0.418554697 #> 102 -0.549616511 0.14820935 -0.25745566 -0.358121189 -0.58628699 -0.418554697 #> 103 -0.227950123 -0.20991733 -0.25745566 -0.465205697 1.47728345 0.394172870 #> 104 -0.549616511 -0.20991733 -0.25745566 0.269088070 1.22765799 -0.350827400 #> 105 -0.364039749 -0.20991733 -0.25745566 -0.388716763 0.26243956 -0.174736427 #> 106 -0.524872942 -0.20991733 -0.25745566 -0.404014550 1.76019230 -0.418554697 #> 107 0.007113776 -0.20991733 -0.24662682 -0.067463240 -0.58628699 -0.418554697 #> 108 -0.190834770 -0.20991733 -0.24662682 -0.465205697 0.12930599 -0.432100156 #> 109 1.182433270 -0.20991733 -0.24662682 -0.465205697 -0.23681135 -0.405009237 #> 110 2.036086376 0.46501372 -0.24662682 -0.205143321 -0.12031947 -0.377918318 #> 111 -0.265065475 -0.20991733 -0.25745566 0.590341593 -0.55300359 -0.337281940 #> 112 -0.227950123 -0.20991733 -0.25745566 -0.465205697 -0.20352796 -0.432100156 #> 113 -0.450642238 -0.20991733 -0.24662682 -0.006272093 -0.28673644 -0.432100156 #> 114 -0.116604066 0.05179063 1.34521260 -0.082761027 -0.27009474 -0.418554697 #> 115 -0.339296180 -0.20991733 -0.25745566 0.162003562 -0.15360286 -0.052827292 #> 116 -0.537244727 0.38236910 -0.25745566 -0.174547748 -0.08703608 1.003718545 #> 117 -0.487757590 -0.20991733 -0.25745566 -0.205143321 -0.48643681 -0.174736427 #> 118 -0.549616511 -0.20991733 -0.25745566 1.951844620 -0.35330323 -0.391463778 #> 119 -0.289809044 -0.20991733 -0.25745566 1.538804376 0.06273920 -0.432100156 #> 120 -0.549616511 -0.20303028 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 121 -0.463014022 11.54627967 -0.25745566 -0.205143321 -0.38658662 -0.432100156 #> 122 -0.326924396 -0.20991733 -0.25745566 2.915605190 -0.55300359 -0.432100156 #> 123 -0.463014022 -0.16170797 1.12863581 -0.342823403 -0.48643681 -0.432100156 #> 124 -0.549616511 -0.20991733 -0.25745566 -0.358121189 -0.43651171 0.597354761 #> 125 1.244292191 -0.20991733 -0.25745566 0.146705776 0.94474914 -0.418554697 #> 126 -0.537244727 -0.20991733 -0.25745566 4.185321496 -0.58628699 -0.432100156 #> 127 0.316408380 -0.20303028 -0.25745566 -0.281632255 0.42885653 -0.432100156 #> 128 -0.376411533 -0.20991733 -0.25745566 -0.281632255 -0.58628699 -0.418554697 #> 129 0.588587631 -0.20991733 -0.25745566 -0.388716763 -0.35330323 -0.432100156 #> 130 -0.425898669 -0.20991733 -0.25745566 0.116110202 -0.51972020 -0.432100156 #> 131 -0.463014022 0.92644617 -0.25745566 -0.449907910 -0.43651171 6.354175024 #> 132 -0.537244727 -0.19614323 -0.25745566 -0.465205697 -0.56964529 -0.432100156 #> 133 0.514356926 -0.20991733 -0.25745566 -0.404014550 -0.56964529 0.407718329 #> 134 -0.549616511 -0.20991733 -0.25745566 -0.143952174 -0.51972020 -0.201827346 #> 135 -0.425898669 -0.20991733 -0.25745566 -0.465205697 -0.45315341 -0.364372859 #> 136 0.192690538 -0.20991733 -0.24662682 3.879365760 -0.36994493 -0.432100156 #> 137 -0.388783317 -0.20991733 -0.25745566 0.100812415 1.19437460 -0.405009237 #> 138 1.145317917 -0.20991733 -0.25745566 -0.251036682 0.31236465 -0.134100048 #> 139 0.019485560 -0.08595040 -0.24662682 -0.113356600 -0.56964529 -0.432100156 #> 140 -0.401155101 -0.20991733 -0.17082495 2.686138388 -0.51972020 -0.432100156 #> 141 -0.487757590 -0.20991733 -0.25745566 -0.052165453 0.02945580 -0.405009237 #> 142 -0.500129374 -0.20991733 -0.25745566 0.452661512 0.71176538 -0.432100156 #> 143 -0.425898669 -0.18925618 -0.25745566 0.024323481 -0.08703608 -0.432100156 #> 144 0.167946970 -0.19614323 1.64842011 -0.235738895 1.92660927 -0.432100156 #> 145 -0.537244727 -0.20991733 -0.25745566 -0.220441108 0.34564805 -0.012190913 #> 146 -0.252693691 -0.19614323 -0.25745566 0.054919055 -0.27009474 -0.296645562 #> 147 4.225892170 -0.20303028 -0.25745566 -0.465205697 0.06273920 0.231627356 #> 148 -0.376411533 -0.20991733 3.34854794 0.177301349 -0.10367777 -0.432100156 #> 149 0.761792609 -0.19614323 -0.24662682 -0.327525616 4.95539814 0.488991086 #> 150 -0.549616511 -0.20991733 -0.25745566 -0.220441108 3.50757049 -0.418554697 #> 151 -0.549616511 -0.20991733 -0.25745566 0.100812415 -0.55300359 -0.432100156 #> 152 -0.549616511 -0.20991733 -0.25745566 -0.373418976 -0.22016965 2.317628111 #> 153 -0.537244727 -0.20991733 -0.25745566 0.636234954 0.02945580 0.150354600 #> 154 1.083458997 -0.20991733 -0.25745566 -0.082761027 3.90697122 -0.377918318 #> 155 1.491727874 -0.20991733 -0.25745566 -0.388716763 -0.45315341 1.355900490 #> 156 -0.153719418 -0.20991733 -0.25745566 -0.327525616 -0.03711098 -0.337281940 #> 157 -0.549616511 -0.20991733 -0.15999611 -0.434610124 -0.58628699 3.726355893 #> 158 -0.500129374 -0.20991733 -0.25745566 -0.205143321 -0.13696117 -0.405009237 #> 159 -0.413526885 -0.20991733 -0.25745566 -0.465205697 3.57413728 -0.405009237 #> 160 -0.537244727 -0.20991733 -0.25745566 -0.449907910 -0.58628699 0.651536599 #> 161 -0.549616511 1.87685929 -0.25745566 -0.327525616 -0.58628699 1.667446057 #> 162 -0.425898669 -0.20991733 -0.25745566 2.303693717 -0.20352796 -0.283100102 #> 163 0.205062322 3.83278193 -0.25745566 -0.358121189 -0.58628699 0.001354546 #> 164 -0.500129374 -0.20991733 -0.23579798 -0.266334469 -0.15360286 0.312900113 #> 165 -0.487757590 -0.18236913 -0.23579798 -0.449907910 -0.56964529 -0.391463778 #> 166 -0.537244727 -0.20991733 -0.25745566 1.018679624 -0.15360286 -0.377918318 #> 167 -0.413526885 -0.20991733 -0.25745566 0.452661512 1.84340078 -0.337281940 #> 168 2.852624130 -0.20991733 -0.25745566 -0.434610124 -0.56964529 -0.432100156 #> 169 -0.227950123 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 170 -0.549616511 -0.20991733 -0.25745566 1.079870772 0.24579787 0.326445573 #> 171 -0.524872942 -0.20991733 -0.25745566 -0.296930042 -0.46979511 -0.337281940 #> 172 -0.463014022 -0.20991733 -0.25745566 -0.358121189 -0.56964529 -0.432100156 #> 173 0.130831617 -0.20991733 -0.25745566 -0.465205697 -0.56964529 -0.188281886 #> 174 -0.524872942 -0.16859502 -0.25745566 -0.449907910 -0.50307850 -0.432100156 #> 175 -0.425898669 -0.20991733 0.19735560 0.620937167 -0.48643681 0.190990978 #> 176 -0.500129374 -0.20991733 -0.25745566 -0.434610124 -0.20352796 -0.161190967 #> 177 0.279293027 3.47465525 -0.01922119 -0.342823403 -0.56964529 -0.405009237 #> 178 -0.512501158 -0.19614323 -0.25745566 -0.342823403 0.29572296 0.231627356 #> 179 -0.401155101 -0.20991733 -0.25745566 -0.465205697 -0.30337814 -0.432100156 #> 180 -0.475385806 1.57382902 0.34895936 -0.128654387 -0.03711098 -0.405009237 #> 181 1.095830781 -0.20991733 -0.25745566 0.054919055 0.01281411 -0.256009183 #> 182 1.009228292 -0.20991733 -0.25745566 -0.404014550 -0.36994493 -0.391463778 #> 183 2.679419152 0.31349859 -0.25745566 -0.404014550 -0.55300359 -0.350827400 #> 184 -0.438270453 1.29834696 -0.24662682 1.538804376 -0.33666153 -0.215372805 #> 185 -0.549616511 0.24462807 -0.01922119 -0.358121189 -0.58628699 -0.405009237 #> 186 -0.524872942 -0.20991733 -0.24662682 -0.419312337 -0.33666153 -0.432100156 #> 187 -0.549616511 -0.20303028 3.85750340 1.095168558 -0.38658662 -0.269554643 #> 188 -0.537244727 -0.20991733 -0.23579798 -0.419312337 -0.55300359 0.475445626 #> 189 -0.425898669 -0.20991733 -0.23579798 -0.373418976 2.70876903 0.177445519 #> 190 0.254549459 -0.09972451 3.55429589 0.162003562 -0.33666153 -0.432100156 #> 191 -0.512501158 -0.20991733 -0.25745566 -0.465205697 0.21251447 -0.147645508 #> 192 -0.537244727 -0.20991733 -0.25745566 -0.465205697 0.54534841 -0.432100156 #> 193 -0.450642238 -0.20303028 -0.25745566 -0.358121189 -0.38658662 -0.310191021 #> 194 0.885510450 -0.20991733 -0.25745566 -0.388716763 -0.56964529 -0.432100156 #> 195 -0.104232281 -0.16170797 0.01326533 -0.388716763 -0.32001983 -0.269554643 #> 196 -0.549616511 -0.20991733 -0.25745566 -0.465205697 -0.22016965 -0.256009183 #> 197 -0.512501158 -0.05151515 0.31647284 1.768271179 0.91146575 -0.174736427 #> 198 0.167946970 -0.20991733 -0.25745566 -0.465205697 -0.58628699 -0.147645508 #> 199 -0.537244727 -0.20991733 -0.25745566 -0.434610124 -0.38658662 1.708082436 #> 200 -0.450642238 -0.20991733 -0.25745566 -0.342823403 -0.15360286 2.046718922 #> Otu00056 Otu00057 Otu00058 Otu00059 Otu00060 #> 1 -0.67302626 -0.063085238 0.244028438 -0.04265350 -0.41506494 #> 2 2.49956176 -0.378272648 0.956294184 -0.33573273 -0.41506494 #> 3 -0.80430576 2.658987854 -0.313396928 -0.40900254 -0.40518715 #> 4 0.18029052 -0.340068114 -0.065652321 -0.29386427 -0.41506494 #> 5 -0.80430576 -0.426028317 -0.561141535 -0.39853543 -0.40518715 #> 6 0.77104829 0.786965657 0.151124210 0.66911037 -0.41506494 #> 7 -0.82618568 -0.244556777 -0.545657497 -0.29386427 -0.41506494 #> 8 -0.62926642 -0.426028317 -0.406301156 7.84955171 -0.16812007 #> 9 0.24593027 -0.426028317 -0.483721345 -0.40900254 -0.41506494 #> 10 -0.23542791 -0.406926049 -0.576625573 -0.40900254 2.69644047 #> 11 -0.82618568 -0.406926049 2.798894699 -0.40900254 0.40479204 #> 12 -0.56362667 0.557738450 -0.205008662 0.09341901 0.04919142 #> 13 0.66164870 -0.426028317 1.730496081 -0.40900254 -0.41506494 #> 14 0.04901101 0.529085049 0.213060362 0.69004460 -0.41506494 #> 15 1.82128432 1.407789345 0.832421880 -0.05312061 -0.41506494 #> 16 1.66812490 -0.397374916 -0.158556549 -0.40900254 -0.41506494 #> 17 -0.41046725 0.519533915 -0.220492700 0.21902440 -0.41506494 #> 18 -0.30106766 1.073499667 -0.096620397 0.03061631 -0.38543156 #> 19 -0.69490618 0.147039703 0.569193235 -0.21012735 -0.41506494 #> 20 -0.78242585 -0.359170381 -0.545657497 -0.23106158 -0.41506494 #> 21 -0.82618568 -0.406926049 -0.576625573 -0.40900254 -0.41506494 #> 22 1.88692408 -0.426028317 -0.530173459 2.16590791 -0.41506494 #> 23 0.46472945 -0.426028317 -0.205008662 0.76331441 -0.41506494 #> 24 1.05548722 -0.426028317 -0.375333080 -0.40900254 -0.41506494 #> 25 0.31157002 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 26 -0.32294758 0.357164643 -0.081136359 -0.03218638 1.06660430 #> 27 -0.78242585 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 28 -0.60738651 -0.426028317 -0.607593649 -0.40900254 2.67668488 #> 29 -0.76054593 -0.426028317 -0.437269232 0.75284729 -0.41506494 #> 30 -0.69490618 -0.053534104 -0.189524624 -0.13685754 -0.39530935 #> 31 -0.82618568 -0.426028317 1.482751474 -0.39853543 1.00733753 #> 32 -0.60738651 2.085919835 -0.375333080 -0.40900254 2.59766252 #> 33 -0.62926642 0.252102173 -0.592109611 -0.40900254 -0.31628699 #> 34 -0.82618568 0.242551039 0.770485728 -0.40900254 -0.41506494 #> 35 -0.71678609 8.532935052 0.878873994 -0.19966023 -0.33604258 #> 36 -0.49798692 -0.426028317 -0.607593649 -0.40900254 0.20723614 #> 37 2.23700275 0.280755574 -0.235976738 -0.04265350 -0.41506494 #> 38 -0.76054593 -0.426028317 0.383384780 -0.40900254 0.54308117 #> 39 -0.80430576 -0.426028317 0.615645349 -0.40900254 2.37047324 #> 40 -0.43234717 0.605494118 -0.143072511 0.03061631 0.12821378 #> 41 -0.60738651 -0.292312446 -0.437269232 -0.40900254 -0.41506494 #> 42 0.61788887 -0.416477183 -0.344365004 -0.35666697 -0.40518715 #> 43 -0.80430576 -0.426028317 -0.375333080 -0.40900254 1.60000523 #> 44 1.99632366 -0.063085238 0.042735945 -0.40900254 -0.41506494 #> 45 0.31157002 -0.034431837 -0.514689421 -0.29386427 0.39491424 #> 46 0.02713110 -0.406926049 -0.468237308 -0.40900254 -0.40518715 #> 47 -0.71678609 -0.015329570 -0.313396928 -0.14732465 -0.41506494 #> 48 -0.82618568 -0.387823782 -0.545657497 -0.40900254 -0.41506494 #> 49 -0.65114634 0.137488569 -0.266944814 -0.16825888 -0.41506494 #> 50 -0.54174675 0.634147519 0.305964590 0.28182709 -0.41506494 #> 51 0.37720978 -0.426028317 -0.561141535 4.57334451 -0.40518715 #> 52 -0.47610700 -0.177698842 -0.468237308 -0.25199581 -0.41506494 #> 53 -0.80430576 -0.416477183 -0.592109611 -0.40900254 -0.41506494 #> 54 -0.80430576 -0.426028317 -0.561141535 -0.40900254 -0.40518715 #> 55 -0.38858733 0.739209989 0.058219983 0.08295189 -0.40518715 #> 56 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 57 -0.76054593 -0.416477183 0.135640172 0.40743248 -0.41506494 #> 58 1.20864664 -0.416477183 -0.452753270 -0.40900254 -0.03970874 #> 59 -0.21354799 -0.426028317 0.166608248 0.83658422 -0.40518715 #> 60 -0.10414841 -0.129943173 -0.003716169 0.02014920 -0.41506494 #> 61 0.70540854 -0.426028317 1.157586677 -0.40900254 1.35306035 #> 62 -0.76054593 0.739209989 -0.514689421 -0.40900254 -0.39530935 #> 63 0.44284953 -0.235005644 -0.359849042 -0.39853543 -0.41506494 #> 64 -0.76054593 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 65 -0.82618568 0.318960108 -0.468237308 -0.40900254 0.21711393 #> 66 0.48660936 -0.426028317 5.369244999 -0.40900254 -0.41506494 #> 67 1.29616631 -0.426028317 -0.561141535 0.54350498 0.82953722 #> 68 1.23052655 1.197664405 0.166608248 -0.19966023 2.07413939 #> 69 1.20864664 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 70 0.13653068 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 71 -0.45422709 -0.349619247 -0.530173459 -0.38806831 6.91425892 #> 72 0.13653068 2.534823116 2.195017219 -0.07405484 1.57037184 #> 73 0.50848928 0.242551039 -0.607593649 -0.40900254 -0.41506494 #> 74 4.62191375 0.013323831 0.182092286 0.63770902 3.72373115 #> 75 0.81480812 0.748761123 0.491773045 1.42274270 -0.41506494 #> 76 -0.82618568 -0.426028317 5.431181150 -0.40900254 0.02943583 #> 77 -0.69490618 -0.426028317 0.213060362 1.06686076 -0.40518715 #> 78 -0.56362667 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 79 1.58060523 -0.091738639 0.940810146 1.19246615 -0.41506494 #> 80 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 81 0.59600895 -0.426028317 1.699528005 0.20855728 -0.41506494 #> 82 3.28723879 0.939783796 -0.607593649 -0.39853543 -0.41506494 #> 83 0.83668804 -0.034431837 -0.545657497 -0.25199581 -0.40518715 #> 84 -0.76054593 -0.426028317 -0.390817118 -0.40900254 -0.16812007 #> 85 -0.43234717 -0.426028317 2.427277789 -0.40900254 -0.41506494 #> 86 -0.82618568 -0.139494307 -0.251460776 -0.40900254 -0.40518715 #> 87 -0.06038857 0.051528366 -0.390817118 -0.36713408 -0.41506494 #> 88 1.01172738 -0.426028317 6.546031883 -0.40900254 -0.41506494 #> 89 1.79940441 -0.359170381 0.151124210 -0.31479850 -0.41506494 #> 90 0.13653068 6.603606053 -0.174040587 -0.28339716 -0.41506494 #> 91 -0.23542791 -0.378272648 -0.344365004 2.80440196 0.95794856 #> 92 -0.76054593 -0.426028317 2.009208764 -0.40900254 0.41466983 #> 93 -0.82618568 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 94 -0.80430576 -0.426028317 0.228544400 2.50085561 -0.38543156 #> 95 1.03360730 1.054397400 0.274996514 0.55397210 -0.41506494 #> 96 -0.82618568 -0.426028317 -0.576625573 -0.40900254 -0.41506494 #> 97 -0.78242585 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 98 -0.16978816 -0.426028317 -0.468237308 1.63208501 -0.41506494 #> 99 -0.78242585 -0.406926049 -0.592109611 -0.40900254 -0.41506494 #> 100 2.41204209 -0.397374916 -0.499205383 -0.39853543 -0.37555376 #> 101 1.79940441 -0.177698842 -0.576625573 -0.40900254 -0.41506494 #> 102 -0.80430576 -0.426028317 -0.607593649 -0.36713408 -0.41506494 #> 103 -0.19166808 -0.301863579 -0.421785194 -0.40900254 -0.41506494 #> 104 -0.82618568 1.025743999 0.011767869 -0.40900254 -0.39530935 #> 105 0.18029052 0.509982781 0.027251907 0.47023517 0.07882480 #> 106 0.04901101 0.309408975 -0.235976738 0.03061631 -0.39530935 #> 107 0.20217044 -0.426028317 -0.034684245 -0.40900254 0.33564747 #> 108 0.81480812 -0.426028317 1.838884347 -0.40900254 0.80978163 #> 109 -0.62926642 -0.129943173 -0.251460776 -0.38806831 -0.41506494 #> 110 2.08384333 -0.397374916 -0.205008662 -0.27293004 -0.40518715 #> 111 0.53036920 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 112 0.50848928 -0.426028317 0.259512476 -0.40900254 0.13809157 #> 113 -0.21354799 -0.426028317 0.569193235 -0.38806831 -0.41506494 #> 114 0.35532986 -0.378272648 1.637591853 -0.15779177 1.13574887 #> 115 0.44284953 -0.426028317 1.467267436 -0.40900254 -0.06934212 #> 116 2.01820358 -0.215903376 -0.174040587 -0.40900254 -0.41506494 #> 117 -0.03850865 -0.426028317 -0.607593649 -0.40900254 2.64705149 #> 118 0.18029052 -0.426028317 -0.514689421 -0.40900254 -0.41506494 #> 119 -0.82618568 -0.426028317 -0.050168283 -0.40900254 -0.41506494 #> 120 -0.32294758 -0.387823782 -0.607593649 -0.38806831 -0.34592038 #> 121 -0.34482750 0.414471445 1.002746297 0.35509690 4.63248828 #> 122 0.24593027 -0.416477183 -0.576625573 -0.40900254 -0.41506494 #> 123 -0.82618568 -0.426028317 -0.545657497 -0.39853543 -0.41506494 #> 124 0.02713110 -0.426028317 -0.530173459 -0.40900254 -0.41506494 #> 125 -0.60738651 -0.426028317 0.089188059 3.14981678 2.73595165 #> 126 0.63976878 -0.426028317 1.064682449 -0.40900254 -0.41506494 #> 127 -0.27918775 -0.378272648 -0.545657497 -0.31479850 -0.39530935 #> 128 -0.78242585 -0.426028317 -0.576625573 -0.40900254 -0.06934212 #> 129 -0.80430576 -0.110840906 -0.483721345 0.26089286 -0.41506494 #> 130 -0.47610700 -0.426028317 -0.344365004 -0.40900254 -0.40518715 #> 131 -0.56362667 -0.426028317 -0.390817118 -0.40900254 -0.41506494 #> 132 1.47120565 -0.426028317 -0.421785194 -0.40900254 -0.20763125 #> 133 -0.67302626 -0.426028317 -0.530173459 -0.26246293 -0.41506494 #> 134 0.46472945 0.739209989 1.869852422 1.54834808 -0.40518715 #> 135 -0.82618568 -0.406926049 -0.437269232 -0.39853543 -0.41506494 #> 136 0.85856796 -0.426028317 0.011767869 -0.40900254 -0.41506494 #> 137 -0.16978816 2.085919835 -0.468237308 -0.40900254 1.15550446 #> 138 0.88044788 -0.426028317 -0.220492700 -0.40900254 -0.40518715 #> 139 -0.71678609 -0.416477183 -0.468237308 0.11435324 -0.41506494 #> 140 -0.82618568 -0.426028317 -0.220492700 -0.40900254 -0.41506494 #> 141 -0.65114634 -0.426028317 -0.174040587 1.51694674 -0.03970874 #> 142 -0.56362667 1.617914285 0.693065539 -0.40900254 -0.41506494 #> 143 -0.73866601 -0.005778436 -0.607593649 -0.06358773 -0.41506494 #> 144 -0.58550659 1.149908736 -0.468237308 0.88891980 -0.41506494 #> 145 0.61788887 -0.196801109 -0.607593649 -0.40900254 -0.41506494 #> 146 0.81480812 -0.426028317 -0.592109611 -0.06358773 -0.40518715 #> 147 -0.82618568 -0.426028317 -0.592109611 -0.39853543 -0.41506494 #> 148 -0.73866601 -0.426028317 -0.359849042 -0.40900254 -0.41506494 #> 149 -0.71678609 0.185244237 -0.452753270 -0.40900254 -0.41506494 #> 150 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 151 1.66812490 0.834721326 0.878873994 -0.40900254 -0.41506494 #> 152 1.05548722 -0.168147708 -0.576625573 -0.40900254 -0.41506494 #> 153 -0.67302626 -0.426028317 0.058219983 0.45976806 -0.41506494 #> 154 -0.82618568 -0.426028317 -0.607593649 1.78909174 -0.41506494 #> 155 -0.69490618 -0.426028317 -0.545657497 5.65145742 -0.41506494 #> 156 -0.19166808 0.643698653 -0.483721345 -0.40900254 0.16772496 #> 157 -0.82618568 -0.416477183 -0.607593649 -0.40900254 -0.23726464 #> 158 1.53684540 -0.426028317 2.597602206 -0.40900254 -0.37555376 #> 159 -0.78242585 0.041977232 -0.437269232 -0.40900254 -0.41506494 #> 160 -0.80430576 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 161 -0.65114634 -0.426028317 0.352416704 -0.40900254 -0.41506494 #> 162 -0.32294758 -0.426028317 -0.468237308 -0.40900254 0.28625850 #> 163 0.66164870 -0.378272648 0.816937842 3.22308659 -0.41506494 #> 164 -0.80430576 -0.416477183 -0.576625573 -0.40900254 2.05438380 #> 165 -0.71678609 -0.406926049 -0.576625573 -0.40900254 2.11365057 #> 166 -0.82618568 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 167 0.48660936 3.585447818 -0.328880966 -0.40900254 -0.27677581 #> 168 -0.82618568 -0.426028317 -0.406301156 -0.40900254 -0.41506494 #> 169 -0.80430576 -0.426028317 -0.530173459 -0.38806831 1.61976082 #> 170 -0.82618568 -0.426028317 -0.607593649 -0.40900254 1.05672651 #> 171 -0.47610700 0.701005455 0.646613425 0.81564999 -0.41506494 #> 172 -0.76054593 -0.426028317 -0.437269232 -0.40900254 -0.01995315 #> 173 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.39530935 #> 174 -0.78242585 -0.416477183 -0.421785194 -0.31479850 4.01018720 #> 175 2.43392201 -0.215903376 -0.034684245 -0.40900254 -0.40518715 #> 176 1.07736713 -0.426028317 -0.127588473 -0.39853543 -0.41506494 #> 177 0.20217044 -0.034431837 0.538225159 0.05155054 -0.41506494 #> 178 -0.82618568 -0.426028317 0.182092286 -0.40900254 -0.41506494 #> 179 -0.80430576 -0.426028317 -0.607593649 -0.40900254 -0.41506494 #> 180 -0.25730783 0.844272459 -0.065652321 -0.10545619 -0.41506494 #> 181 -0.67302626 -0.416477183 -0.576625573 0.78424864 -0.41506494 #> 182 0.26781019 -0.426028317 -0.452753270 0.86798557 -0.41506494 #> 183 -0.41046725 -0.263659045 0.027251907 0.54350498 -0.41506494 #> 184 -0.36670742 -0.273210178 -0.174040587 -0.36713408 -0.30640920 #> 185 2.43392201 -0.378272648 -0.561141535 -0.40900254 -0.41506494 #> 186 -0.78242585 -0.416477183 -0.545657497 -0.37760120 -0.41506494 #> 187 0.31157002 0.548187316 -0.607593649 -0.40900254 -0.15824228 #> 188 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.35579817 #> 189 -0.71678609 -0.340068114 -0.514689421 -0.40900254 -0.26689802 #> 190 0.81480812 0.739209989 -0.297912890 -0.25199581 -0.40518715 #> 191 0.00525118 -0.426028317 -0.499205383 -0.40900254 1.41232712 #> 192 1.12112697 -0.426028317 -0.561141535 -0.40900254 -0.41506494 #> 193 1.47120565 1.130806469 0.383384780 0.66911037 -0.05946433 #> 194 -0.56362667 -0.387823782 -0.576625573 0.02014920 0.52332558 #> 195 -0.21354799 0.901579261 0.491773045 0.50163652 -0.39530935 #> 196 -0.82618568 -0.426028317 -0.592109611 -0.40900254 -0.41506494 #> 197 -0.80430576 1.608363152 -0.514689421 -0.38806831 -0.37555376 #> 198 -0.80430576 -0.426028317 -0.530173459 -0.40900254 -0.25702023 #> 199 1.71188474 0.204346505 -0.421785194 -0.19966023 0.06894701 #> 200 3.72483714 -0.426028317 1.869852422 -0.40900254 -0.32616479 #> #> $removed #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get feature importance using the permutation method — get_feature_importance","title":"Get feature importance using the permutation method — get_feature_importance","text":"Calculates feature importance using trained model test data. Requires future.apply package.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"get_feature_importance( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA, corr_thresh = 1, groups = NULL, nperms = 100, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get feature importance using the permutation method — get_feature_importance","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). groups Vector feature names group together permutation. element string feature names separated pipe character (|). NULL (default), correlated features grouped together based corr_thresh. nperms number permutations perform (default: 100). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get feature importance using the permutation method — get_feature_importance","text":"Data frame performance metrics feature (group correlated features; feat) permuted (perf_metric), differences actual test performance metric permuted performance metric (perf_metric_diff; test minus permuted performance), p-value (pvalue: probability obtaining actual performance value null hypothesis). Features larger perf_metric_diff important. performance metric name (perf_metric_name) seed (seed) also returned.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Get feature importance using the permutation method — get_feature_importance","text":"permutation tests, p-value number permutation statistics greater test statistic, divided number permutations. case, permutation statistic model performance (e.g. AUROC) randomizing order observations one feature, test statistic actual performance test data. default perform 100 permutations per feature; increasing increase precision estimating null distribution, also increases runtime. p-value represents probability obtaining actual performance event null hypothesis true, null hypothesis feature important model performance. strongly recommend providing multiple cores speed computation time. See vignette parallel processing details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get feature importance using the permutation method — get_feature_importance","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_feature_importance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get feature importance using the permutation method — get_feature_importance","text":"","code":"if (FALSE) { # If you called `run_ml()` with `feature_importance = FALSE` (the default), # you can use `get_feature_importance()` later as long as you have the # trained model and test data. results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # We strongly recommend providing multiple cores to speed up computation time. # Do this before calling `get_feature_importance()`. doFuture::registerDoFuture() future::plan(future::multicore, workers = 2) # Optionally, you can group features together with a custom grouping feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", groups = c( \"Otu00007\", \"Otu00008\", \"Otu00009\", \"Otu00011\", \"Otu00012\", \"Otu00015\", \"Otu00016\", \"Otu00018\", \"Otu00019\", \"Otu00020\", \"Otu00022\", \"Otu00023\", \"Otu00025\", \"Otu00028\", \"Otu00029\", \"Otu00030\", \"Otu00035\", \"Otu00036\", \"Otu00037\", \"Otu00038\", \"Otu00039\", \"Otu00040\", \"Otu00047\", \"Otu00050\", \"Otu00052\", \"Otu00054\", \"Otu00055\", \"Otu00056\", \"Otu00060\", \"Otu00003|Otu00002|Otu00005|Otu00024|Otu00032|Otu00041|Otu00053\", \"Otu00014|Otu00021|Otu00017|Otu00031|Otu00057\", \"Otu00013|Otu00006\", \"Otu00026|Otu00001|Otu00034|Otu00048\", \"Otu00033|Otu00010\", \"Otu00042|Otu00004\", \"Otu00043|Otu00027|Otu00049\", \"Otu00051|Otu00045\", \"Otu00058|Otu00044\", \"Otu00059|Otu00046\" ) ) # the function can show a progress bar if you have the `progressr` package installed. ## optionally, specify the progress bar format: progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressr to always report progress progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) # You can specify any correlation method supported by `stats::cor`: feat_imp <- get_feature_importance(results$trained_model, results$trained_model$trainingData, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\", corr_method = \"pearson\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Get hyperparameter performance metrics — get_hp_performance","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Get hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(trained_model)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get hyperparameter performance metrics — get_hp_performance","text":"trained_model trained model (e.g. run_ml())","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Named list: dat: Dataframe performance metric group hyperparameters. params: Hyperparameters tuned. metric: Performance metric used.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get hyperparameter performance metrics — get_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get hyperparameter performance metrics — get_hp_performance","text":"","code":"get_hp_performance(otu_mini_bin_results_glmnet$trained_model) #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":null,"dir":"Reference","previous_headings":"","what":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"details see vignette hyperparameter tuning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(dataset, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Named list hyperparameters.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_hyperparams_list.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Set hyperparameters based on ML method and dataset characteristics — get_hyperparams_list","text":"","code":"get_hyperparams_list(otu_mini_bin, \"rf\") #> $mtry #> [1] 2 3 6 #> get_hyperparams_list(otu_small, \"rf\") #> $mtry #> [1] 4 8 16 #> get_hyperparams_list(otu_mini_bin, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #> get_hyperparams_list(otu_small, \"rpart2\") #> $maxdepth #> [1] 1 2 4 8 16 30 #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":null,"dir":"Reference","previous_headings":"","what":"Get outcome type. — get_outcome_type","title":"Get outcome type. — get_outcome_type","text":"outcome numeric, type continuous. Otherwise, outcome type binary two outcomes multiclass two outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(outcomes_vec)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get outcome type. — get_outcome_type","text":"outcomes_vec Vector outcomes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get outcome type. — get_outcome_type","text":"Outcome type (continuous, binary, multiclass).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get outcome type. — get_outcome_type","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_outcome_type.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get outcome type. — get_outcome_type","text":"","code":"get_outcome_type(c(1, 2, 1)) #> [1] \"continuous\" get_outcome_type(c(\"a\", \"b\", \"b\")) #> [1] \"binary\" get_outcome_type(c(\"a\", \"b\", \"c\")) #> [1] \"multiclass\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":null,"dir":"Reference","previous_headings":"","what":"Select indices to partition the data into training & testing sets. — get_partition_indices","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Use function get row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"get_partition_indices( outcomes, training_frac = 0.8, groups = NULL, group_partitions = NULL )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"outcomes vector outcomes training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Vector row indices training set.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"details","dir":"Reference","previous_headings":"","what":"Details","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"groups NULL, uses createDataPartition. Otherwise, uses create_grouped_data_partition(). Set seed prior calling function like data partitions reproducible (recommended).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_partition_indices.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Select indices to partition the data into training & testing sets. — get_partition_indices","text":"","code":"training_inds <- get_partition_indices(otu_mini_bin$dx) train_data <- otu_mini_bin[training_inds, ] test_data <- otu_mini_bin[-training_inds, ]"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric function — get_perf_metric_fn","title":"Get default performance metric function — get_perf_metric_fn","text":"Get default performance metric function","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric function — get_perf_metric_fn","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric function — get_perf_metric_fn","text":"Performance metric function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric function — get_perf_metric_fn","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_fn.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric function — get_perf_metric_fn","text":"","code":"get_perf_metric_fn(\"continuous\") #> function (data, lev = NULL, model = NULL) #> { #> if (is.character(data$obs)) #> data$obs <- factor(data$obs, levels = lev) #> postResample(data[, \"pred\"], data[, \"obs\"]) #> } #> #> get_perf_metric_fn(\"binary\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> get_perf_metric_fn(\"multiclass\") #> function (data, lev = NULL, model = NULL) #> { #> if (!all(levels(data[, \"pred\"]) == levels(data[, \"obs\"]))) #> stop(\"levels of observed and predicted data do not match\") #> has_class_probs <- all(lev %in% colnames(data)) #> if (has_class_probs) { #> lloss <- mnLogLoss(data = data, lev = lev, model = model) #> requireNamespaceQuietStop(\"pROC\") #> requireNamespaceQuietStop(\"MLmetrics\") #> prob_stats <- lapply(levels(data[, \"pred\"]), function(x) { #> obs <- ifelse(data[, \"obs\"] == x, 1, 0) #> prob <- data[, x] #> roc_auc <- try(pROC::roc(obs, data[, x], direction = \"<\", #> quiet = TRUE), silent = TRUE) #> roc_auc <- if (inherits(roc_auc, \"try-error\")) #> NA #> else roc_auc$auc #> pr_auc <- try(MLmetrics::PRAUC(y_pred = data[, x], #> y_true = obs), silent = TRUE) #> if (inherits(pr_auc, \"try-error\")) #> pr_auc <- NA #> res <- c(ROC = roc_auc, AUC = pr_auc) #> return(res) #> }) #> prob_stats <- do.call(\"rbind\", prob_stats) #> prob_stats <- colMeans(prob_stats, na.rm = TRUE) #> } #> CM <- confusionMatrix(data[, \"pred\"], data[, \"obs\"], mode = \"everything\") #> if (length(levels(data[, \"pred\"])) == 2) { #> class_stats <- CM$byClass #> } #> else { #> class_stats <- colMeans(CM$byClass) #> names(class_stats) <- paste(\"Mean\", names(class_stats)) #> } #> overall_stats <- if (has_class_probs) #> c(CM$overall, logLoss = as.numeric(lloss), AUC = unname(prob_stats[\"ROC\"]), #> prAUC = unname(prob_stats[\"AUC\"])) #> else CM$overall #> stats <- c(overall_stats, class_stats) #> stats <- stats[!names(stats) %in% c(\"AccuracyNull\", \"AccuracyLower\", #> \"AccuracyUpper\", \"AccuracyPValue\", \"McnemarPValue\", \"Mean Prevalence\", #> \"Mean Detection Prevalence\")] #> names(stats) <- gsub(\"[[:blank:]]+\", \"_\", names(stats)) #> stat_list <- c(\"Accuracy\", \"Kappa\", \"Mean_F1\", \"Mean_Sensitivity\", #> \"Mean_Specificity\", \"Mean_Pos_Pred_Value\", \"Mean_Neg_Pred_Value\", #> \"Mean_Precision\", \"Mean_Recall\", \"Mean_Detection_Rate\", #> \"Mean_Balanced_Accuracy\") #> if (has_class_probs) #> stat_list <- c(\"logLoss\", \"AUC\", \"prAUC\", stat_list) #> if (length(levels(data[, \"pred\"])) == 2) #> stat_list <- gsub(\"^Mean_\", \"\", stat_list) #> stats <- stats[c(stat_list)] #> return(stats) #> } #> #> "},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":null,"dir":"Reference","previous_headings":"","what":"Get default performance metric name — get_perf_metric_name","title":"Get default performance metric name — get_perf_metric_name","text":"Get default performance metric name cross-validation.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(outcome_type)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get default performance metric name — get_perf_metric_name","text":"outcome_type Type outcome (one : \"continuous\",\"binary\",\"multiclass\").","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get default performance metric name — get_perf_metric_name","text":"Performance metric name.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get default performance metric name — get_perf_metric_name","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_perf_metric_name.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get default performance metric name — get_perf_metric_name","text":"","code":"get_perf_metric_name(\"continuous\") #> [1] \"RMSE\" get_perf_metric_name(\"binary\") #> [1] \"AUC\" get_perf_metric_name(\"multiclass\") #> [1] \"logLoss\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":null,"dir":"Reference","previous_headings":"","what":"Get model performance metrics as a one-row tibble — get_performance_tbl","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Get model performance metrics one-row tibble","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"get_performance_tbl( trained_model, test_data, outcome_colname, perf_metric_function, perf_metric_name, class_probs, method, seed = NA )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". class_probs Whether use class probabilities (TRUE categorical outcomes, FALSE numeric outcomes). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost seed Random seed (default: NA). results reproducible set seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"one-row tibble column cross-validation performance, columns performance metrics test data, plus method, seed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"Kelly Sovacool, sovacool@umich.edu Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_performance_tbl.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Get model performance metrics as a one-row tibble — get_performance_tbl","text":"","code":"if (FALSE) { results <- run_ml(otu_small, \"glmnet\", kfold = 2, cv_times = 2) names(results$trained_model$trainingData)[1] <- \"dx\" get_performance_tbl(results$trained_model, results$test_data, \"dx\", multiClassSummary, \"AUC\", class_probs = TRUE, method = \"glmnet\" ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":null,"dir":"Reference","previous_headings":"","what":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Generate tuning grid tuning hyperparameters","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"get_tuning_grid(hyperparams_list, method)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"hyperparams_list Named list lists hyperparameters. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"tuning grid.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/get_tuning_grid.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Generate the tuning grid for tuning hyperparameters — get_tuning_grid","text":"","code":"ml_method <- \"glmnet\" hparams_list <- get_hyperparams_list(otu_small, ml_method) get_tuning_grid(hparams_list, ml_method) #> lambda alpha #> 1 1e-04 0 #> 2 1e-03 0 #> 3 1e-02 0 #> 4 1e-01 0 #> 5 1e+00 0 #> 6 1e+01 0"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":null,"dir":"Reference","previous_headings":"","what":"Group correlated features — group_correlated_features","title":"Group correlated features — group_correlated_features","text":"Group correlated features","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Group correlated features — group_correlated_features","text":"","code":"group_correlated_features( features, corr_thresh = 1, group_neg_corr = TRUE, corr_method = \"spearman\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Group correlated features — group_correlated_features","text":"features dataframe column feature ML corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). corr_method correlation method. options supported stats::cor: spearman, pearson, kendall. (default: spearman)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Group correlated features — group_correlated_features","text":"vector element group correlated features separated pipes (|)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Group correlated features — group_correlated_features","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/group_correlated_features.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Group correlated features — group_correlated_features","text":"","code":"features <- data.frame( a = 1:3, b = 2:4, c = c(1, 0, 1), d = (5:7), e = c(5, 1, 4), f = c(-1, 0, -1) ) group_correlated_features(features) #> [1] \"a|b|d\" \"c|f\" \"e\""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":null,"dir":"Reference","previous_headings":"","what":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"mikropml implements supervised machine learning pipelines using regression, support vector machines, decision trees, random forest, gradient-boosted trees. main functions preprocess_data() process data prior running machine learning, run_ml() run machine learning.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"authors","dir":"Reference","previous_headings":"","what":"Authors","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Begüm D. Topçuoğlu (ORCID) Zena Lapp (ORCID) Kelly L. Sovacool (ORCID) Evan Snitkin (ORCID) Jenna Wiens (ORCID) Patrick D. Schloss (ORCID)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/mikropml.html","id":"see-vignettes","dir":"Reference","previous_headings":"","what":"See vignettes","title":"mikropml: User-Friendly R Package for Robust Machine Learning Pipelines — mikropml","text":"Introduction Preprocessing data Hyperparameter tuning Parallel processing mikropml paper","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"result running preprocess_data(\"otu_mini_bin\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"","code":"otu_data_preproc"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_data_preproc.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset - preprocessed — otu_data_preproc","text":"object class list length 3.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset — otu_mini_bin","title":"Mini OTU abundance dataset — otu_mini_bin","text":"dataset containing relatives abundances OTUs human stool samples binary outcome, dx. subset otu_small.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset — otu_mini_bin","text":"","code":"otu_mini_bin"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset — otu_mini_bin","text":"data frame dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"Results running pipeline L2 logistic regression otu_mini_bin feature importance grouping","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"","code":"otu_mini_bin_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with L2 logistic regression on otu_mini_bin with feature importance and grouping — otu_mini_bin_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"Results running pipeline random forest otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"","code":"otu_mini_bin_results_rf"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rf.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with random forest on otu_mini_bin — otu_mini_bin_results_rf","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"Results running pipeline rpart2 otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"","code":"otu_mini_bin_results_rpart2"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_rpart2.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with rpart2 on otu_mini_bin — otu_mini_bin_results_rpart2","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"Results running pipeline svmRadial otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"","code":"otu_mini_bin_results_svmRadial"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_svmRadial.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with svmRadial on otu_mini_bin — otu_mini_bin_results_svmRadial","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"Results running pipeline xbgTree otu_mini_bin","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"","code":"otu_mini_bin_results_xgbTree"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_bin_results_xgbTree.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with xbgTree on otu_mini_bin — otu_mini_bin_results_xgbTree","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"","code":"otu_mini_cont_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome — otu_mini_cont_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"Results running pipeline glmnet otu_mini_bin Otu00001 outcome column, using custom train control scheme perform cross-validation","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"","code":"otu_mini_cont_results_nocv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cont_results_nocv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_bin with Otu00001\nas the outcome column,\nusing a custom train control scheme that does not perform cross-validation — otu_mini_cont_results_nocv","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":null,"dir":"Reference","previous_headings":"","what":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"Cross validation train_data_mini grouped features.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"","code":"otu_mini_cv"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_cv.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Cross validation on train_data_mini with grouped features. — otu_mini_cv","text":"object class list length 27.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":null,"dir":"Reference","previous_headings":"","what":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"dataset containing relatives abundances OTUs human stool samples","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"","code":"otu_mini_multi"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Mini OTU abundance dataset with 3 categorical variables — otu_mini_multi","text":"data frame dx column colorectal cancer diagnosis: adenoma, carcinoma, normal. columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":null,"dir":"Reference","previous_headings":"","what":"Groups for otu_mini_multi — otu_mini_multi_group","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"Groups otu_mini_multi","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"","code":"otu_mini_multi_group"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_group.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Groups for otu_mini_multi — otu_mini_multi_group","text":"object class character length 490.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":null,"dir":"Reference","previous_headings":"","what":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"Results running pipeline glmnet otu_mini_multi multiclass outcomes","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"","code":"otu_mini_multi_results_glmnet"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_mini_multi_results_glmnet.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Results from running the pipeline with glmnet on otu_mini_multi for\nmulticlass outcomes — otu_mini_multi_results_glmnet","text":"object class list length 4.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":null,"dir":"Reference","previous_headings":"","what":"Small OTU abundance dataset — otu_small","title":"Small OTU abundance dataset — otu_small","text":"dataset containing relatives abundances 60 OTUs 60 human stool samples. subset data provided extdata/otu_large.csv, used Topçuoğlu et al. 2020.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Small OTU abundance dataset — otu_small","text":"","code":"otu_small"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/otu_small.html","id":"format","dir":"Reference","previous_headings":"","what":"Format","title":"Small OTU abundance dataset — otu_small","text":"data frame 60 rows 61 variables. dx column diagnosis: healthy cancerous (colorectal). columns OTU relative abundances.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculated a permuted p-value comparing two models — permute_p_value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Calculated permuted p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"permute_p_value( merged_data, metric, group_name, group_1, group_2, nperm = 10000 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"merged_data concatenated performance data run_ml metric metric compare, must numeric group_name column group variables compare group_1 name one group compare group_2 name group compare nperm number permutations, default=10000","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"numeric p-value comparing two models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Courtney R Armour, armourc@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/permute_p_value.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculated a permuted p-value comparing two models — permute_p_value","text":"","code":"df <- dplyr::tibble( model = c(\"rf\", \"rf\", \"glmnet\", \"glmnet\", \"svmRadial\", \"svmRadial\"), AUC = c(.2, 0.3, 0.8, 0.9, 0.85, 0.95) ) set.seed(123) permute_p_value(df, \"AUC\", \"model\", \"rf\", \"glmnet\", nperm = 100) #> [1] 0.3663366"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot ROC and PRC curves — plot_mean_roc","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Plot ROC PRC curves","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"plot_mean_roc(dat, ribbon_fill = \"#C6DBEF\", line_color = \"#08306B\") plot_mean_prc( dat, baseline_precision = NULL, ribbon_fill = \"#C7E9C0\", line_color = \"#00441B\" )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot ROC and PRC curves — plot_mean_roc","text":"dat sensitivity, specificity, precision data calculated calc_mean_roc() ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\") baseline_precision baseline precision calc_baseline_precision()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Plot ROC and PRC curves — plot_mean_roc","text":"plot_mean_roc(): Plot mean sensitivity specificity plot_mean_prc(): Plot mean precision recall","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot ROC and PRC curves — plot_mean_roc","text":"Courtney Armour Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_curves.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot ROC and PRC curves — plot_mean_roc","text":"","code":"if (FALSE) { library(dplyr) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # plot ROC & PRC sensspec_dat %>% calc_mean_roc() %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") sensspec_dat %>% calc_mean_prc() %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot hyperparameter performance metrics — plot_hp_performance","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Plot hyperparameter performance metrics","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"plot_hp_performance(dat, param_col, metric_col)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"dat dataframe hyperparameters performance metric (e.g. get_hp_performance() combine_hp_performance()) param_col hyperparameter plotted. must column dat. metric_col performance metric. must column dat.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"ggplot hyperparameter performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_hp_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot hyperparameter performance metrics — plot_hp_performance","text":"","code":"# plot for a single `run_ml()` call hp_metrics <- get_hp_performance(otu_mini_bin_results_glmnet$trained_model) hp_metrics #> $dat #> alpha lambda AUC #> 1 0 1e-04 0.6082552 #> 2 0 1e-03 0.6082552 #> 3 0 1e-02 0.6086458 #> 4 0 1e-01 0.6166789 #> 5 0 1e+00 0.6221737 #> 6 0 1e+01 0.6187408 #> #> $params #> [1] \"lambda\" #> #> $metric #> [1] \"AUC\" #> plot_hp_performance(hp_metrics$dat, lambda, AUC) if (FALSE) { # plot for multiple `run_ml()` calls results <- lapply(seq(100, 102), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) models <- lapply(results, function(x) x$trained_model) hp_metrics <- combine_hp_performance(models) plot_hp_performance(hp_metrics$dat, lambda, AUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":null,"dir":"Reference","previous_headings":"","what":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 required use function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"plot_model_performance(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"ggplot2 plot performance.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/plot_model_performance.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Plot performance metrics for multiple ML runs with different parameters — plot_model_performance","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # plot the performance results p <- plot_model_performance(perf_df) # call `run_ml()` with different ML methods param_grid <- expand.grid( seeds = seq(100, 104), methods = c(\"glmnet\", \"rf\") ) results_mtx <- mapply( function(seed, method) { run_ml(otu_mini_bin, method, seed = seed, kfold = 2) }, param_grid$seeds, param_grid$methods ) # extract and combine the performance results perf_df2 <- dplyr::bind_rows(results_mtx[\"performance\", ]) # plot the performance results p <- plot_model_performance(perf_df2) # you can continue adding layers to customize the plot p + theme_classic() + scale_color_brewer(palette = \"Dark2\") + coord_flip() }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Preprocess data prior to running machine learning — preprocess_data","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Function preprocess data input run_ml().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data( dataset, outcome_colname, method = c(\"center\", \"scale\"), remove_var = \"nzv\", collapse_corr_feats = TRUE, to_numeric = TRUE, group_neg_corr = TRUE, prefilter_threshold = 1 )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Preprocess data prior to running machine learning — preprocess_data","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method Methods preprocess data, described caret::preProcess() (default: c(\"center\",\"scale\"), use NULL normalization). remove_var Whether remove variables near-zero variance ('nzv'; default), zero variance ('zv'), none (NULL). collapse_corr_feats Whether keep one perfectly correlated features. to_numeric Whether change features numeric possible. group_neg_corr Whether group negatively correlated features together (e.g. c(0,1) c(1,0)). prefilter_threshold Remove features non-zero & non-NA values N rows fewer (default: 1). Set -1 keep columns step. step also skipped to_numeric set FALSE.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Named list including: dat_transformed: Preprocessed data. grp_feats: features grouped together, named list features corresponding group. removed_feats: features removed preprocessing (e.g. zero variance near-zero variance features). progressr package installed, progress bar time elapsed estimated time completion can displayed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Preprocess data prior to running machine learning — preprocess_data","text":"See preprocessing vignette details. Note values outcome_colname contain spaces, converted underscores compatibility caret.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Preprocess data prior to running machine learning — preprocess_data","text":"Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/preprocess_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Preprocess data prior to running machine learning — preprocess_data","text":"","code":"preprocess_data(mikropml::otu_small, \"dx\") #> Using 'dx' as the outcome column. #> $dat_transformed #> # A tibble: 200 × 61 #> dx Otu00001 Otu00002 Otu00003 Otu00004 Otu00005 Otu00006 Otu00…¹ Otu00008 #> #> 1 normal -0.420 -0.219 -0.174 -0.591 -0.0488 -0.167 -0.569 -0.0624 #> 2 normal -0.105 1.75 -0.718 0.0381 1.54 -0.573 -0.643 -0.132 #> 3 normal -0.708 0.696 1.43 0.604 -0.265 -0.0364 -0.612 -0.207 #> 4 normal -0.494 -0.665 2.02 -0.593 -0.676 -0.586 -0.552 -0.470 #> 5 normal 1.11 -0.395 -0.754 -0.586 -0.754 2.73 0.191 -0.676 #> 6 normal -0.685 0.614 -0.174 -0.584 0.376 0.804 -0.337 -0.00608 #> 7 cancer -0.770 -0.496 -0.318 0.159 -0.658 2.20 -0.717 0.0636 #> 8 normal -0.424 -0.478 -0.397 -0.556 -0.391 -0.0620 0.376 -0.0222 #> 9 normal -0.556 1.14 1.62 -0.352 -0.275 -0.465 -0.804 0.294 #> 10 cancer 1.46 -0.451 -0.694 -0.0567 -0.706 0.689 -0.370 1.59 #> # … with 190 more rows, 52 more variables: Otu00009 , Otu00010 , #> # Otu00011 , Otu00012 , Otu00013 , Otu00014 , #> # Otu00015 , Otu00016 , Otu00017 , Otu00018 , #> # Otu00019 , Otu00020 , Otu00021 , Otu00022 , #> # Otu00023 , Otu00024 , Otu00025 , Otu00026 , #> # Otu00027 , Otu00028 , Otu00029 , Otu00030 , #> # Otu00031 , Otu00032 , Otu00033 , Otu00034 , … #> #> $grp_feats #> NULL #> #> $removed_feats #> character(0) #> # the function can show a progress bar if you have the progressr package installed ## optionally, specify the progress bar format progressr::handlers(progressr::handler_progress( format = \":message :bar :percent | elapsed: :elapsed | eta: :eta\", clear = FALSE, show_after = 0 )) ## tell progressor to always report progress if (FALSE) { progressr::handlers(global = TRUE) ## run the function and watch the live progress udpates dat_preproc <- preprocess_data(mikropml::otu_small, \"dx\") }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":null,"dir":"Reference","previous_headings":"","what":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Randomize feature order eliminate position-dependent effects","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"randomize_feature_order(dataset, outcome_colname)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"dataset Data frame outcome variable columns features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Dataset feature order randomized.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"Nick Lesniak, nlesniak@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/randomize_feature_order.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Randomize feature order to eliminate any position-dependent effects — randomize_feature_order","text":"","code":"dat <- data.frame( outcome = c(\"1\", \"2\", \"3\"), a = 4:6, b = 7:9, c = 10:12, d = 13:15 ) randomize_feature_order(dat, \"outcome\") #> outcome c b a d #> 1 1 10 7 4 13 #> 2 2 11 8 5 14 #> 3 3 12 9 6 15"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/reexports.html","id":null,"dir":"Reference","previous_headings":"","what":"caret contr.ltfr — reexports","title":"caret contr.ltfr — reexports","text":"objects imported packages. Follow links see documentation. caret contr.ltfr dplyr %>% rlang :=, !!, .data","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":null,"dir":"Reference","previous_headings":"","what":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Removes columns non-zero & non-NA values threshold row(s) fewer.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(dat, threshold = 1)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dat dataframe threshold Number rows. column non-zero & non-NA values threshold row(s) fewer, removed.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"dataframe without singleton columns","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"Kelly Sovacool, sovacool@umich.edu Courtney Armour","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/remove_singleton_columns.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Remove columns appearing in only threshold row(s) or fewer. — remove_singleton_columns","text":"","code":"remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, 0), c = 4:6), threshold = 0) #> $dat #> a b c #> 1 1 0 4 #> 2 2 1 5 #> 3 3 0 6 #> #> $removed_feats #> character(0) #> remove_singleton_columns(data.frame(a = 1:3, b = c(0, 1, NA), c = 4:6)) #> $dat #> a c #> 1 1 4 #> 2 2 5 #> 3 3 6 #> #> $removed_feats #> [1] \"b\" #> remove_singleton_columns(data.frame(a = 1:3, b = c(1, 1, 1), c = 4:6)) #> $dat #> a b c #> 1 1 1 4 #> 2 2 1 5 #> 3 3 1 6 #> #> $removed_feats #> character(0) #>"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":null,"dir":"Reference","previous_headings":"","what":"Replace spaces in all elements of a character vector with underscores — replace_spaces","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Replace spaces elements character vector underscores","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"replace_spaces(x, new_char = \"_\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"x character vector new_char character replace spaces (default: _)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"character vector spaces replaced new_char","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/replace_spaces.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Replace spaces in all elements of a character vector with underscores — replace_spaces","text":"","code":"dat <- data.frame( dx = c(\"outcome 1\", \"outcome 2\", \"outcome 1\"), a = 1:3, b = c(5, 7, 1) ) dat$dx <- replace_spaces(dat$dx) dat #> dx a b #> 1 outcome_1 1 5 #> 2 outcome_2 2 7 #> 3 outcome_1 3 1"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":null,"dir":"Reference","previous_headings":"","what":"Run the machine learning pipeline — run_ml","title":"Run the machine learning pipeline — run_ml","text":"function splits data set train & test set, trains machine learning (ML) models using k-fold cross-validation, evaluates best model held-test set, optionally calculates feature importance using framework outlined Topçuoğlu et al. 2020 (doi:10.1128/mBio.00434-20 ). Required inputs data frame (must contain outcome variable columns features) ML method. See vignette('introduction') details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Run the machine learning pipeline — run_ml","text":"","code":"run_ml( dataset, method, outcome_colname = NULL, hyperparameters = NULL, find_feature_importance = FALSE, calculate_performance = TRUE, kfold = 5, cv_times = 100, cross_val = NULL, training_frac = 0.8, perf_metric_function = NULL, perf_metric_name = NULL, groups = NULL, group_partitions = NULL, corr_thresh = 1, seed = NA, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Run the machine learning pipeline — run_ml","text":"dataset Data frame outcome variable columns features. method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). hyperparameters Dataframe hyperparameters (default NULL; sensible defaults chosen automatically). find_feature_importance Run permutation importance (default: FALSE). TRUE recommended like identify features important predicting outcome, resource-intensive. calculate_performance Whether calculate performance metrics (default: TRUE). might choose skip perform cross-validation model training. kfold Fold number k-fold cross-validation (default: 5). cv_times Number cross-validation partitions create (default: 100). cross_val custom cross-validation scheme caret::trainControl() (default: NULL, uses kfold cross validation repeated cv_times). kfold cv_times ignored user provides custom cross-validation scheme. See caret::trainControl() docs information use . training_frac Fraction data training set (default: 0.8). Rows dataset randomly selected training set, remaining rows used testing set. Alternatively, provide vector integers, used row indices training set. remaining rows used testing set. perf_metric_function Function calculate performance metric used cross-validation test performance. functions provided caret (see caret::defaultSummary()). Defaults: binary classification = twoClassSummary, multi-class classification = multiClassSummary, regression = defaultSummary. perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". groups Vector groups keep together splitting data train test sets. number groups training set larger kfold, groups also kept together cross-validation. Length matches number rows dataset (default: NULL). group_partitions Specify assign groups training testing partitions (default: NULL). groups specifies samples belong group \"\" belong group \"B\", setting group_partitions = list(train = c(\"\", \"B\"), test = c(\"B\")) result samples group \"\" placed training set, samples \"B\" also training set, remaining samples \"B\" testing set. partition sizes close training_frac possible. number groups training set larger kfold, groups also kept together cross-validation. corr_thresh feature importance, group correlations equal corr_thresh (range 0 1; default: 1). seed Random seed (default: NA). results reproducible set seed. ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Run the machine learning pipeline — run_ml","text":"Named list results: trained_model: Output caret::train(), including best model. test_data: Part data used testing. performance: Data frame performance metrics. first column cross-validation performance metric, last two columns ML method used seed (one set), respectively. columns performance metrics calculated test data. contains one row, can easily combine performance data frames multiple calls run_ml() (see vignette(\"parallel\")). feature_importance: feature importances calculated, data frame row feature correlated group. columns performance metric permuted data, difference true performance metric performance metric permuted data (true - permuted), feature name, ML method, performance metric name, seed (provided). AUC RMSE, higher perf_metric_diff , important feature predicting outcome. log loss, lower perf_metric_diff , important feature predicting outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"more-details","dir":"Reference","previous_headings":"","what":"More details","title":"Run the machine learning pipeline — run_ml","text":"details, please see vignettes.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Run the machine learning pipeline — run_ml","text":"Begüm Topçuoğlu, topcuoglu.begum@gmail.com Zena Lapp, zenalapp@umich.edu Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/run_ml.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Run the machine learning pipeline — run_ml","text":"","code":"if (FALSE) { # regression run_ml(otu_small, \"glmnet\", seed = 2019 ) # random forest w/ feature importance run_ml(otu_small, \"rf\", outcome_colname = \"dx\", find_feature_importance = TRUE ) # custom cross validation & hyperparameters run_ml(otu_mini_bin[, 2:11], \"glmnet\", outcome_colname = \"Otu00001\", seed = 2019, hyperparameters = list(lambda = c(1e-04), alpha = 0), cross_val = caret::trainControl(method = \"none\"), calculate_performance = FALSE ) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":null,"dir":"Reference","previous_headings":"","what":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Use functions calculate cumulative sensitivity, specificity, recall, etc. single models, concatenate results together multiple models, compute mean ROC PRC. can plot mean ROC PRC curves visualize results. Note: functions assume binary outcome.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"calc_model_sensspec(trained_model, test_data, outcome_colname = NULL) calc_mean_roc(sensspec_dat) calc_mean_prc(sensspec_dat)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"trained_model Trained model caret::train(). test_data Held test data: dataframe outcome features. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). sensspec_dat data frame created concatenating results calc_model_sensspec() multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"data frame summarized performance","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"functions","dir":"Reference","previous_headings":"","what":"Functions","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"calc_model_sensspec(): Get sensitivity, specificity, precision model. calc_mean_roc(): Calculate mean sensitivity specificity multiple models calc_mean_prc(): Calculate mean precision recall multiple models","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"Courtney Armour Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/sensspec.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Calculate and summarize performance for ROC and PRC plots — calc_model_sensspec","text":"","code":"if (FALSE) { library(dplyr) # get cumulative performance for a single model sensspec_1 <- calc_model_sensspec( otu_mini_bin_results_glmnet$trained_model, otu_mini_bin_results_glmnet$test_data, \"dx\" ) head(sensspec_1) # get performance for multiple models get_sensspec_seed <- function(seed) { ml_result <- run_ml(otu_mini_bin, \"glmnet\", seed = seed) sensspec <- calc_model_sensspec( ml_result$trained_model, ml_result$test_data, \"dx\" ) %>% mutate(seed = seed) return(sensspec) } sensspec_dat <- purrr::map_dfr(seq(100, 102), get_sensspec_seed) # calculate mean sensitivity over specificity roc_dat <- calc_mean_roc(sensspec_dat) head(roc_dat) # calculate mean precision over recall prc_dat <- calc_mean_prc(sensspec_dat) head(prc_dat) # plot ROC & PRC roc_dat %>% plot_mean_roc() baseline_prec <- calc_baseline_precision(otu_mini_bin, \"dx\", \"cancer\") prc_dat %>% plot_mean_prc(baseline_precision = baseline_prec) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":null,"dir":"Reference","previous_headings":"","what":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Get plot layers shared plot_mean_roc plot_mean_prc","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"","code":"shared_ggprotos(ribbon_fill = \"#D9D9D9\", line_color = \"#000000\")"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"ribbon_fill ribbon fill color (default: \"#D9D9D9\") line_color line color (default: \"#000000\")","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"list ggproto objects add ggplot","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/shared_ggprotos.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Get plot layers shared by plot_mean_roc and plot_mean_prc — shared_ggprotos","text":"Kelly Sovacool sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":null,"dir":"Reference","previous_headings":"","what":"Tidy the performance dataframe — tidy_perf_data","title":"Tidy the performance dataframe — tidy_perf_data","text":"Used plot_model_performance().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"tidy_perf_data(performance_df)"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Tidy the performance dataframe — tidy_perf_data","text":"performance_df dataframe performance results multiple calls run_ml()","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Tidy the performance dataframe — tidy_perf_data","text":"Tidy dataframe model performance metrics.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Tidy the performance dataframe — tidy_perf_data","text":"Begüm Topçuoglu, topcuoglu.begum@gmail.com Kelly Sovacool, sovacool@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/tidy_perf_data.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Tidy the performance dataframe — tidy_perf_data","text":"","code":"if (FALSE) { # call `run_ml()` multiple times with different seeds results_lst <- lapply(seq(100, 104), function(seed) { run_ml(otu_small, \"glmnet\", seed = seed) }) # extract and combine the performance results perf_df <- lapply(results_lst, function(result) { result[[\"performance\"]] }) %>% dplyr::bind_rows() # make it pretty! tidy_perf_data(perf_df) }"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":null,"dir":"Reference","previous_headings":"","what":"Train model using caret::train(). — train_model","title":"Train model using caret::train(). — train_model","text":"Train model using caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-usage","dir":"Reference","previous_headings":"","what":"Usage","title":"Train model using caret::train(). — train_model","text":"","code":"train_model( train_data, outcome_colname, method, cv, perf_metric_name, tune_grid, ... )"},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"arguments","dir":"Reference","previous_headings":"","what":"Arguments","title":"Train model using caret::train(). — train_model","text":"train_data Training data. Expected subset full dataset. outcome_colname Column name string outcome variable (default NULL; first column chosen automatically). method ML method. Options: c(\"glmnet\", \"rf\", \"rpart2\", \"svmRadial\", \"xgbTree\"). glmnet: linear, logistic, multiclass regression rf: random forest rpart2: decision tree svmRadial: support vector machine xgbTree: xgboost cv Cross-validation caret scheme define_cv(). perf_metric_name column name output function provided perf_metric_function used performance metric. Defaults: binary classification = \"ROC\", multi-class classification = \"logLoss\", regression = \"RMSE\". tune_grid Tuning grid get_tuning_grid().#' ... additional arguments passed caret::train(), case weights via weights argument ntree rf models. See caret::train() docs details.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"value","dir":"Reference","previous_headings":"","what":"Value","title":"Train model using caret::train(). — train_model","text":"Trained model caret::train().","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"author","dir":"Reference","previous_headings":"","what":"Author","title":"Train model using caret::train(). — train_model","text":"Zena Lapp, zenalapp@umich.edu","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/reference/train_model.html","id":"ref-examples","dir":"Reference","previous_headings":"","what":"Examples","title":"Train model using caret::train(). — train_model","text":"","code":"if (FALSE) { training_data <- otu_mini_bin_results_glmnet$trained_model$trainingData %>% dplyr::rename(dx = .outcome) method <- \"rf\" hyperparameters <- get_hyperparams_list(otu_mini_bin, method) cross_val <- define_cv(training_data, \"dx\", hyperparameters, perf_metric_function = caret::multiClassSummary, class_probs = TRUE, cv_times = 2 ) tune_grid <- get_tuning_grid(hyperparameters, method) rf_model <- train_model( training_data, \"dx\", method, cross_val, \"AUC\", tune_grid, ntree = 1000 ) rf_model$results %>% dplyr::select(mtry, AUC, prAUC) }"},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-150","dir":"Changelog","previous_headings":"","what":"mikropml 1.5.0","title":"mikropml 1.5.0","text":"CRAN release: 2023-01-16 New example showing plot feature importances parallel vignette (#310, @kelly-sovacool). can now use parRF, parallel implementation rf method, default hyperparameters rf set automatically (#306, @kelly-sovacool). calc_model_sensspec() - calculate sensitivity, specificity, precision model. calc_mean_roc() & plot_mean_roc() - calculate & plot specificity mean sensitivity multiple models. calc_mean_prc() & plot_mean_prc() - calculate & plot recall mean precision multiple models.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-140","dir":"Changelog","previous_headings":"","what":"mikropml 1.4.0","title":"mikropml 1.4.0","text":"CRAN release: 2022-10-16 Users can now pass model-specific arguments (e.g. weights) caret::train(), allowing greater flexibility. Improved tests (#298, #300, #303 #kelly-sovacool) Minor documentation improvements.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-130","dir":"Changelog","previous_headings":"","what":"mikropml 1.3.0","title":"mikropml 1.3.0","text":"CRAN release: 2022-05-20 mikropml now requires R version 4.1.0 greater due update randomForest package (#292). New function compare_models() compares performance two models permutation test (#295, @courtneyarmour). Fixed bug cv_times affect reported repeats cross-validation (#291, @kelly-sovacool). Made minor documentation improvements (#293, @kelly-sovacool)","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-122","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.2","title":"mikropml 1.2.2","text":"CRAN release: 2022-02-03 minor patch fixes test failure platforms long doubles. actual package code remains unchanged.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-121","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.1","title":"mikropml 1.2.1","text":"CRAN release: 2022-01-30 using groups parameter, groups kept together cross-validation partitions kfold <= number groups training set. Previously, error thrown condition met. Now, enough groups training set groups kept together CV, groups allowed split across CV partitions. Report p-values permutation feature importance (#288, @kelly-sovacool).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-120","dir":"Changelog","previous_headings":"","what":"mikropml 1.2.0","title":"mikropml 1.2.0","text":"CRAN release: 2021-11-10 Also added new parameter calculate_performance, controls whether performance metrics calculated (default: TRUE). Users may wish skip performance calculations training models cross-validation. New parameter group_partitions added run_ml() allows users control groups go partition train/test split (#281, @kelly-sovacool). default, training_frac fraction 0 1 specifies much dataset used training fraction train/test split. Users can instead give training_frac vector indices correspond rows dataset go training fraction train/test split. gives users direct control exactly observations training fraction desired.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-111","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.1","title":"mikropml 1.1.1","text":"CRAN release: 2021-09-14 Also, group_correlated_features() now user-facing function.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-110","dir":"Changelog","previous_headings":"","what":"mikropml 1.1.0","title":"mikropml 1.1.0","text":"CRAN release: 2021-08-10 default still “spearman”, now can use methods supported stats::cor corr_method parameter: get_feature_importance(corr_method = \"pearson\") now video tutorials covering mikropml skills related machine learning, created @pschloss (#270). Fixed bug preprocess_data() converted outcome column character vector (#273, @kelly-sovacool, @ecmaggioncalda).","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-100","dir":"Changelog","previous_headings":"","what":"mikropml 1.0.0","title":"mikropml 1.0.0","text":"CRAN release: 2021-05-13 mikropml now logo created @NLesniak! Made documentation improvements (#238, #231 @kelly-sovacool; #256 @BTopcuoglu). Remove features appear N=prefilter_threshold fewer rows data. Created function remove_singleton_columns() called preprocess_data() carry . Provide custom groups features permute together permutation importance. groups NULL default; case, correlated features corr_thresh grouped together. preprocess_data() now replaces spaces outcome column underscores (#247, @kelly-sovacool, @JonnyTran). Clarify intro vignette support multi-label outcomes. (#254, @zenalapp) Optional progress bar preprocess_data() get_feature_importance() using progressr package (#257, @kelly-sovacool, @JonnyTran, @FedericoComoglio). mikropml paper soon published JOSS!","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-002","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.2","title":"mikropml 0.0.2","text":"CRAN release: 2020-12-03 Fixed test failure Solaris. Fixed multiple test failures R 3.6.2 due stringsAsFactors behavior. Made minor documentation improvements. Moved rpart Suggests Imports consistency packages used model training.","code":""},{"path":"http://www.schlosslab.org/mikropml/dev/news/index.html","id":"mikropml-001","dir":"Changelog","previous_headings":"","what":"mikropml 0.0.1","title":"mikropml 0.0.1","text":"CRAN release: 2020-11-23 first release version mikropml! 🎉 Added NEWS.md file track changes package. run_ml() preprocess_data() plot_model_performance() plot_hp_performance() glmnet: logistic linear regression rf: random forest rpart2: decision trees svmRadial: support vector machines xgbTree: gradient-boosted trees Introduction Preprocess data Hyperparameter tuning Parallel processing mikropml paper","code":""}] diff --git a/docs/dev/sitemap.xml b/docs/dev/sitemap.xml index cd16e92f..f56cd908 100644 --- a/docs/dev/sitemap.xml +++ b/docs/dev/sitemap.xml @@ -45,6 +45,9 @@ http://www.schlosslab.org/mikropml/dev/pull_request_template.html + + http://www.schlosslab.org/mikropml/dev/reference/bootstrap_performance.html + http://www.schlosslab.org/mikropml/dev/reference/bounds.html @@ -54,6 +57,9 @@ http://www.schlosslab.org/mikropml/dev/reference/calc_mean_perf.html + + http://www.schlosslab.org/mikropml/dev/reference/calc_perf_bootstrap_split.html + http://www.schlosslab.org/mikropml/dev/reference/calc_perf_metrics.html