1 Domain problem formulation

What is the real-world question? This could be hypothesis-driven or discovery-based.

This should be very high level, providing the big picture behind the study. Often this takes the form of a pre-existing hypothesis (e.g., individuals with a specific genetic mutation are more likely to have a given characteristic) or more open-ended discovery (e.g., identify mutations that are related to a given characteristic).


Why is this question interesting and important? What are the implications of better understanding this data?

Try to incentive this study for those coming from a variety of backgrounds and levels of scientific understanding. Perhaps mention how previous related work made an impact in the field.


Briefly describe any background information necessary to understand this problem.

This should provide readers some intuition for the scientific problem. This section should be a short high-level summary. For additional details, one can refer readers to introductory material, tutorials, and/or review papers.


Briefly describe how this question can be answered in the context of a model or analysis.


Outline the rest of the report/analysis.


2 Data

What is the data under investigation? Provide a brief overview/description of the data.


Describe how your data connects to the domain problem.


2.1 Data Collection

How was the data collected or generated (including details on the experimental design)? Be as transparent as possible so that conclusions made from this data are not misinterpreted down the road.


Describe any limitations when using the data to answer the domain problem of interest.

While the previous section lays out the entire collection process, here it is important to highlight any limitations as these may not be obvious to those from other fields. This includes any personal judgement calls made in the data collection process.


Where is the data stored, and how can it be accessed by others (if applicable)?


2.2 Data Splitting

Decide on the proportion of data in each split.

Decide on the “how” to split the data (e.g., random sampling, stratified sampling, etc.), and explain why this is a reasonable way to split the data.

Here, we refer to splitting data into training, validation, and test portions. Generally, one fits select models (including any necessary tuning procedures) on the training data and assesses prediction accuracy on the validation data to compare models against one another. The test data should only be utilized once after all data analysis is completed.

Note that how the data splitting is performed can greatly affect the results. This is because data often have underlying inherent structures and relationships (e.g., longitudinal information, related individuals, ethnicity, varying hospitals, etc.) that should be preserved when splitting. As a concrete example, if the data under study comes from patients across four hospitals, it is often advisable to perform the data splitting by hospital so that the training set is composed of all patients from hospitals A and B, the validation set is composed of all patients from hospital C, and the test set is composed of all patients from hospital D. By splitting the data in this way, the validation (or test) accuracy is a more accurate evaluation of how the fitted model will perform on a completely new batch of data in the future. Ultimately, the goal of the data splitting scheme is to mimic the process of obtaining new future data.


Split the data into a training, validation, and test set.

data_split <- split_data(X = X, y = y, stratified_by = y,
                         train_prop = params$train_prop, 
                         valid_prop = params$valid_prop, 
                         test_prop = params$test_prop)
Xtrain <- data_split$X$train
Xvalid <- data_split$X$validate
Xtest <- data_split$X$test
ytrain <- data_split$y$train
yvalid <- data_split$y$validate
ytest <- data_split$y$test

Provide summary statistics and/or figures of the three data sets to illustrate how similar (or different) they are.

This step is important as it can highlight any concerns with your chosen splitting rule. For instance, under the classification setting, the distribution of categories should be similar across the three data sets.


2.2.1 Data Splitting Overview

X Data Split

plot_data_split(Xtrain, Xvalid, Xtest, 
                xlab = "X", title = "Overall X Distribution")

Y Data Split

plot_data_split(ytrain, yvalid, ytest, 
                xlab = "y", title = "Overall y Distribution")

2.3 Data Cleaning and Preprocessing

What steps were taken to clean the data? More importantly, why was the data cleaned in this way?

Data cleaning can be very problem and domain dependent. Be sure to specify which approaches are common in the field and why. Where appropriate, highlight any steps that were judgement calls necessary to continue the analysis.

Discuss all inconsistencies, problems, oddities in the data (e.g., missing data, errors in data, outliers, etc.).

Record your preprocessing steps in a way such that if someone else were to reproduce your analysis, they could easily replicate and understand your steps.

It can be helpful to include relevant plots that explain/justify the choices that were made when cleaning the data.

If more than one preprocessing pipeline is reasonable, examine the impacts of these alternative preprocessing pipelines on the final data results.

There are often multiple, standard preprocessing options that should be tested to assess stability of results. Any judgement calls mentioned above should also be compared with alternative choices where possible.

Again, be as transparent as possible. This allows others to make their own educated decisions on how best to preprocess the data.


## DO DATA CLEANING / PRE-PROCESSING HERE 
Xtrain <- log(Xtrain + 1) %>%
  remove_constant_cols(verbose = 1) %>%
  remove_duplicate_cols(verbose = 1) %>%
  filter_cols_by_var(max_p = 1000)
#> Removed 296 features with constant values
#> Removed 5 features that are duplicated
Xvalid <- log(Xvalid + 1)[, colnames(Xtrain)]
Xtest <- log(Xtest + 1)[, colnames(Xtrain)]

2.4 Data Exploration

The main goal of this section is to give the reader a feel for what the data “looks like” at a basic level.

Provide plots that summarize the data and perhaps even plots that convey some smaller findings which ultimately motivate the main findings.

Provide additional plots representing remaining oddities after pre-processing if applicable.

Add summary statistics in accompanying tables (or in figures) for quick comparisons.


2.4.1 Data Overview

#> Number of features: 1000
#> Number of training samples: 649
#> Number of validaiton samples: 216
#> Number of test samples: 218
# summary of types of features in (X, y) data
get_data_types(X = Xtrain, y = ytrain)

Summary Tables

# broad array of summary statistics for features in training (X, y)
tab_ls <- get_data_summary(X = Xtrain, y = ytrain)
for (dtype in names(tab_ls)) {  # grouped by data type
  vthemes::subchunkify(tab_ls[[dtype]], 
                       i = dtype, other_args = "results='asis'")
}

X Distribution

# plot X distribution
plot_data_distribution(data = Xtrain, 
                       xlab = "X", title = "Training X Distribution")

Y Distribution

# plot y distribution
plot_data_distribution(data = ytrain, 
                       xlab = "y", title = "Training y Distribution")

Data Heatmap

# (clustered) heatmap of (X, y) data
plot_data_heatmap(X = Xtrain, y = ytrain, clust_rows = TRUE, clust_cols = TRUE,
                  show_ytext = FALSE, x_text_angle = TRUE)

Feature Correlation

# (clustered) correlation heatmap
plot_cor_heatmap(X = Xtrain, cor_type = "pearson", clust = TRUE,
                 x_text_angle = TRUE) +
  ggplot2::labs(x = "Features", y = "Features", fill = "Cor.")

Feature Pair Plots

# feature pair plot (for a subset of features)
keep_features <- sort(
  sample(1:ncol(Xtrain), min(ncol(Xtrain), 6), replace = FALSE)
)
plot_pairs(data = Xtrain, columns = keep_features, 
           color = ytrain, color_label = "y")

Marginal Associations

# marginal association plots (for a subset of features)
caret::featurePlot(x = Xtrain[, keep_features],
                   y = ytrain,
                   plot = if (is.factor(ytrain)) "box" else "scatter",
                   scales = list(x = list(relation = "free"), 
                                 y = list(relation = "free")))

PCA

# pca plot
plot_pca(X = Xtrain, npcs = 3, color = ytrain, color_label = "y",
         center = TRUE, scale = FALSE)$plot

3 Prediction Modeling

Discuss the prediction methods under consideration, and explain why these methods were chosen.

There are an overwhelming number of methods available, but at least one should be a common approach acting as a baseline. This may not be optimal for the problem setting, but serves as a helpful comparison. Any “go-to” methods in this scientific domain should also be considered. Discuss why these are favored. For instance, is there a natural structure in the data that is better utilized in one approach vs another? Conversely, mention if there are approaches that are typically avoided in these problems. The limitations discussed previously can also help to guide these modeling decisions.

Furthermore, think back to the big picture. If interpretability is important, methods favoring sparser, simpler models may be preferred (e.g., sparse regression or tree-based procedures). If prediction is the sole goal, more complex models may be appropriate.

If computing time is a burden and rules out methods with high potential, this should be highlighted for future reference as scalability and/or computing resources improve.


Discuss the accuracy metrics under consideration, and explain why these metrics were chosen.

These accuracy metrics should clearly support the main goal of the study. There are often multiple ways to quantify accuracy (e.g., RMSE, \(R^2\), correlation, AUROC, AUPRC, classification accuracy). Often, comparing across several metrics provides an additional stability check and a more holistic picture of the model performance.


3.1 Prediction check

Carry out the prediction pipeline, outlined above.

  1. Fit prediction methods on training data. (Note: this includes any parameter tuning which may require further data splitting (e.g., k-fold cross-validation) within the training data.)
  2. Evaluate prediction methods on validation data.
  3. Compare results, and filter out poor models.


## IF USING TIDYMODELS BACKEND, CHOOSE METHODS AND TRAINING CONTROLS HERE
cv_options <- list(nfolds = 5,
                   foldids = NULL,
                   metric = "accuracy")

model_list <- list(
  rand_forest = list(.tune_params = list(mtry = round(seq(sqrt(ncol(Xtrain)),
                                                          ncol(Xtrain) / 3,
                                                          length.out = 3))),
                     engine = list(engine = "ranger",
                                   importance = "impurity")),
  boost_tree = list(engine = "xgboost")
)
# fit/train models
fit_results <- fit_models(Xtrain = Xtrain, ytrain = ytrain,
                          model_list = model_list, cv_options = cv_options,
                          use = params$modeling_pkg)
#> [00:59:38] WARNING: amalgamation/../src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.

# make prediction on validation set
pred_results <- predict_models(fit_list = fit_results, Xtest = Xvalid)

# evaluate predictions on validation set
eval_results <- evaluate_models(pred_df = pred_results, ytest = yvalid)

# collect feature importance metrics from model fits
imp_results <- interpret_models(fit_list = fit_results)

Fit Summary

rand_forest

#> Fitting time taken: 2.71834721565247 min
#> 
#> =====================================================
#> ================ Tuned Model Summary ================
#> =====================================================
#> 
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: rand_forest()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> .y ~ .
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> Ranger result
#> 
#> Call:
#>  ranger::ranger(x = maybe_data_frame(x), y = y, mtry = min_cols(~182,      x), importance = ~"impurity", num.threads = 1, verbose = FALSE,      seed = sample.int(10^5, 1), probability = TRUE) 
#> 
#> Type:                             Probability estimation 
#> Number of trees:                  500 
#> Sample size:                      649 
#> Number of independent variables:  1000 
#> Mtry:                             182 
#> Target node size:                 10 
#> Variable importance mode:         impurity 
#> Splitrule:                        gini 
#> OOB prediction error (Brier s.):  0.1597182 
#> 
#> 
#> ======================================================
#> ==== Summary of CV Fit for Tuning Hyperparameters ====
#> ======================================================
#> 
#> # Tuning results
#> # 5-fold cross-validation 
#> # A tibble: 5 × 4
#>   splits            id    .metrics         .notes          
#>   <list>            <chr> <list>           <list>          
#> 1 <split [519/130]> Fold1 <tibble [6 × 5]> <tibble [0 × 1]>
#> 2 <split [519/130]> Fold2 <tibble [6 × 5]> <tibble [0 × 1]>
#> 3 <split [519/130]> Fold3 <tibble [6 × 5]> <tibble [0 × 1]>
#> 4 <split [519/130]> Fold4 <tibble [6 × 5]> <tibble [0 × 1]>
#> 5 <split [520/129]> Fold5 <tibble [6 × 5]> <tibble [0 × 1]>
#> 
#> # Metrics Summary
#> # A tibble: 6 × 9
#>    mtry .metric   Mean      SD Fold1 Fold2 Fold3 Fold4 Fold5
#>   <dbl> <chr>    <dbl>   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1    32 accuracy 0.815 0.0343  0.823 0.808 0.854 0.762 0.829
#> 2   182 accuracy 0.823 0.0455  0.769 0.823 0.892 0.8   0.829
#> 3   333 accuracy 0.823 0.0380  0.792 0.815 0.885 0.792 0.829
#> 4    32 roc_auc  0.959 0.00477 0.957 0.966 0.959 0.960 0.953
#> 5   182 roc_auc  0.962 0.00688 0.956 0.969 0.964 0.967 0.953
#> 6   333 roc_auc  0.958 0.00851 0.945 0.967 0.961 0.962 0.954

boost_tree

#> Fitting time taken: 0.123900850613912 min
#> 
#> =====================================================
#> =================== Model Summary ===================
#> =====================================================
#> 
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: boost_tree()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> .y ~ .
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> ##### xgb.Booster
#> raw: 137.4 Kb 
#> call:
#>   xgboost::xgb.train(params = list(eta = 0.3, max_depth = 6, gamma = 0, 
#>     colsample_bytree = 1, colsample_bynode = 1, min_child_weight = 1, 
#>     subsample = 1, objective = "multi:softprob"), data = x$data, 
#>     nrounds = 15, watchlist = x$watchlist, verbose = 0, num_class = 5L, 
#>     nthread = 1)
#> params (as set within xgb.train):
#>   eta = "0.3", max_depth = "6", gamma = "0", colsample_bytree = "1", colsample_bynode = "1", min_child_weight = "1", subsample = "1", objective = "multi:softprob", num_class = "5", nthread = "1", validate_parameters = "TRUE"
#> xgb.attributes:
#>   niter
#> callbacks:
#>   cb.evaluation.log()
#> # of features: 1000 
#> niter: 15
#> nfeatures : 1000 
#> evaluation_log:
#>     iter training_mlogloss
#>        1          1.046141
#>        2          0.749682
#> ---                       
#>       14          0.045483
#>       15          0.038782

Prediction Results

Confusion Tables

boost_tree Confusion Matrix on Validation Set
Truth
Prediction Basal Her2 LumA LumB Normal
Basal 37 0 0 0 3
Her2 1 14 2 0 3
LumA 0 1 108 14 0
LumB 0 1 1 28 0
Normal 0 0 1 0 2
rand_forest Confusion Matrix on Validation Set
Truth
Prediction Basal Her2 LumA LumB Normal
Basal 38 0 0 0 3
Her2 0 13 1 0 1
LumA 0 1 109 16 2
LumB 0 2 2 26 0
Normal 0 0 0 0 2

ROC Plot

PR Plot

3.2 Stability check

Taking the prediction methods that pass the prediction check, perform a stability analysis.

One way to assess a model’s stability is to assess changes in model’s validation accuracy based on appropriate data perturbations of the training data. However, this stability analysis is heavily dependent on the problem at hand and should be tailored to assess the stability of metrics that are relevant to the domain problem.

  1. Specify and justify the appropriate data perturbation(s).

    As when determining an appropriate splitting rule, the perturbation scheme should incorporate any known data structure. For instance, if using a bootstrap approach with structured data, stratified sampling may be more appropriate to better mimic the process of obtaining a new batch of data in the future.

  2. Re-fit the prediction methods on these perturbed data sets.
  3. Evaluate prediction methods on validation data.
  4. Assess stability across the data perturbations as well as across the various methods.
  5. Filter out poor models where necessary and interpret stability results.

    Methods with highly variable accuracy should be discarded. In addition, take note if any set of perturbations resulted in uniformly poor accuracy across methods. This could indicate an underlying issue with the perturbation scheme.


n_reps <- params$n_data_perturbations

# p <- progressr::progressor(steps = n_reps)
# future::plan(multisession, workers = min(n_reps, parallel::detectCores() - 1))
bootstrap_model_results <- future.apply::future_replicate(
  n = n_reps,
  expr = {
    bootstrap <- sample(1:nrow(Xtrain), nrow(Xtrain), replace = TRUE)
    Xtrain_b <- Xtrain[bootstrap, ]
    ytrain_b <- ytrain[bootstrap]
    
    # fit/train models on bootstrap data
    fit_results_b <- fit_models(Xtrain = Xtrain_b, ytrain = ytrain_b,
                                model_list = model_list, cv_options = cv_options,
                                use = params$modeling_pkg)

    # make prediction on validation set
    pred_results_b <- predict_models(fit_list = fit_results_b, Xtest = Xvalid)

    # evaluate predictions on validation set
    eval_results_b <- evaluate_models(pred_df = pred_results_b, ytest = yvalid)
    
    # collect feature importance metrics from model fits
    imp_results_b <- interpret_models(fit_list = fit_results_b)
    
    return(list(# fit = fit_results_b,  # uncomment if need bootstrap fits; can be memory intensive
                predictions = pred_results_b,
                eval_metrics = eval_results_b,
                importances = imp_results_b))
  },
  simplify = FALSE
)
#> [01:02:12] WARNING: amalgamation/../src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.
#> [01:04:23] WARNING: amalgamation/../src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.

bootstrap_model_errs <- purrr::map_dfr(bootstrap_model_results,
                                       ~.x$eval_metrics$metrics,
                                       .id = "bootstrap_id")
bootstrap_model_preds <- purrr::map(bootstrap_model_results, "predictions")
bootstrap_model_imps <- purrr::map_dfr(bootstrap_model_results, "importances",
                                       .id = "bootstrap_id")

# summarize bootstrap model error metrics
bootstrap_model_errs_summary <- bootstrap_model_errs %>%
  tidyr::pivot_longer(cols = c(-bootstrap_id, -metric), 
                      names_to = "Method", values_to = "Value") %>%
  dplyr::rename(Metric = metric) %>%
  dplyr::group_by(Method, Metric) %>%
  dplyr::summarise(Mean = mean(Value), SD = sd(Value), .groups = "drop") %>%
  tidyr::pivot_longer(cols = c(Mean, SD), 
                      values_to = "Value", names_to = "Statistic") %>%
  tidyr::pivot_wider(names_from = "Method", values_from = "Value") %>%
  dplyr::arrange(Metric, Statistic)

Table

# table of accuracy metrics
vthemes::pretty_table(
  bootstrap_model_errs_summary, 
  digits = 2, sigfig = FALSE, rownames = FALSE,
  caption = "Validation Prediction Accuracies Over Bootstrapped Training Fits", 
  html_options = list(
    extensions = "RowGroup",
    options = list(
      dom = "t",
      pageLength = nrow(bootstrap_model_errs_summary),
      scrollY = "500px",
      rowGroup = list(dataSrc = 0),
      columnDefs = list(list(className = "dt-center", targets = "_all"),
                        list(visible = FALSE, targets = 0),
                        list(title = "Metric", targets = 1))
    )
  )
)

Plot

# boxplots
bootstrap_model_errs %>%
  tidyr::pivot_longer(cols = c(-bootstrap_id, -metric), 
                      names_to = "Method", values_to = "Value") %>%
  plot_boxplot(x_str = "Method", y_str = "Value") +
  ggplot2::facet_wrap(~ metric) +
  ggplot2::labs(title = "Validation Prediction Accuracies Over Bootstrapped Training Fits")

3.3 Interpretability

For the models that pass the prediction and stability checks, extract the important features in the predictive models that are stable across both data and model perturbations. Determining the importance of a feature can be method dependent.


Full Model (without stability)

Table

vthemes::pretty_table(imp_results, digits = 2, sigfig = FALSE,
                      caption = "Variable Importances")

Plots

plot_feature_importance(imp_results,
                        use_rankings = FALSE,
                        use_facets = TRUE,
                        interactive = FALSE)

plot_feature_importance_pair(imp_results,
                             use_rankings = TRUE,
                             interactive = FALSE)

Bootstrapped Model (with stability)

Table

bootstrap_model_imps_summary <- bootstrap_model_imps %>%
  dplyr::group_by(Method, Variable) %>%
  dplyr::summarise(`Mean Importance` = mean(Importance),
                   `Median Importance` = median(Importance),
                   `SD Importance` = sd(Importance),
                   `Min Importance` = min(Importance),
                   `Max Importance` = max(Importance), 
                   .groups = "keep")
vthemes::pretty_table(
  bootstrap_model_imps_summary, 
  digits = 2, sigfig = F, 
  caption = "Summary of variable importances across bootstrapped models"
)

Plots

plot_feature_importance_stability(bootstrap_model_imps,
                                  use_rankings = FALSE,
                                  use_facets = TRUE,
                                  interactive = FALSE)

4 Main Results

Interpret and summarize the prediction and stability results.


Evaluate pipeline on test data.

Careful! Remember that test data should only be touched once. These results should not be used to make post-analysis modeling decisions. This is “double-dipping” and not an accurate measurement of out-of-sample accuracy.

Xtrain_final <- dplyr::bind_rows(Xtrain, Xvalid)
ytrain_final <- c(ytrain, yvalid)

# fit/train models
fit_results_final <- fit_models(Xtrain = Xtrain_final, ytrain = ytrain_final,
                                model_list = model_list, cv_options = cv_options,
                                use = params$modeling_pkg)
#> [01:09:12] WARNING: amalgamation/../src/learner.cc:1115: Starting in XGBoost 1.3.0, the default evaluation metric used with the objective 'multi:softprob' was changed from 'merror' to 'mlogloss'. Explicitly set eval_metric if you'd like to restore the old behavior.

# make prediction on test set
pred_results_final <- predict_models(fit_list = fit_results_final, Xtest = Xtest)

# evaluate predictions on test set
eval_results_final <- evaluate_models(pred_df = pred_results_final, ytest = ytest)

# collect feature importance metrics from model fits
imp_results_final <- interpret_models(fit_list = fit_results_final)

Summarize test set prediction and/or interpretability results.


Fit Summary

rand_forest

#> Fitting time taken: 4.57439311742783 min
#> 
#> =====================================================
#> ================ Tuned Model Summary ================
#> =====================================================
#> 
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: rand_forest()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> .y ~ .
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> Ranger result
#> 
#> Call:
#>  ranger::ranger(x = maybe_data_frame(x), y = y, mtry = min_cols(~333,      x), importance = ~"impurity", num.threads = 1, verbose = FALSE,      seed = sample.int(10^5, 1), probability = TRUE) 
#> 
#> Type:                             Probability estimation 
#> Number of trees:                  500 
#> Sample size:                      865 
#> Number of independent variables:  1000 
#> Mtry:                             333 
#> Target node size:                 10 
#> Variable importance mode:         impurity 
#> Splitrule:                        gini 
#> OOB prediction error (Brier s.):  0.1390541 
#> 
#> 
#> ======================================================
#> ==== Summary of CV Fit for Tuning Hyperparameters ====
#> ======================================================
#> 
#> # Tuning results
#> # 5-fold cross-validation 
#> # A tibble: 5 × 4
#>   splits            id    .metrics         .notes          
#>   <list>            <chr> <list>           <list>          
#> 1 <split [692/173]> Fold1 <tibble [6 × 5]> <tibble [0 × 1]>
#> 2 <split [692/173]> Fold2 <tibble [6 × 5]> <tibble [0 × 1]>
#> 3 <split [692/173]> Fold3 <tibble [6 × 5]> <tibble [0 × 1]>
#> 4 <split [692/173]> Fold4 <tibble [6 × 5]> <tibble [0 × 1]>
#> 5 <split [692/173]> Fold5 <tibble [6 × 5]> <tibble [0 × 1]>
#> 
#> # Metrics Summary
#> # A tibble: 6 × 9
#>    mtry .metric   Mean     SD Fold1 Fold2 Fold3 Fold4 Fold5
#>   <dbl> <chr>    <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1    32 accuracy 0.827 0.0142 0.832 0.815 0.809 0.844 0.832
#> 2   182 accuracy 0.846 0.0113 0.850 0.838 0.850 0.861 0.832
#> 3   333 accuracy 0.847 0.0176 0.850 0.832 0.867 0.861 0.827
#> 4    32 roc_auc  0.967 0.0126 0.969 0.978 0.979 0.953 0.954
#> 5   182 roc_auc  0.969 0.0151 0.975 0.982 0.981 0.951 0.953
#> 6   333 roc_auc  0.967 0.0169 0.973 0.981 0.982 0.946 0.951

boost_tree

#> Fitting time taken: 0.160102486610413 min
#> 
#> =====================================================
#> =================== Model Summary ===================
#> =====================================================
#> 
#> ══ Workflow [trained] ══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
#> Preprocessor: Formula
#> Model: boost_tree()
#> 
#> ── Preprocessor ────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> .y ~ .
#> 
#> ── Model ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#> ##### xgb.Booster
#> raw: 155.1 Kb 
#> call:
#>   xgboost::xgb.train(params = list(eta = 0.3, max_depth = 6, gamma = 0, 
#>     colsample_bytree = 1, colsample_bynode = 1, min_child_weight = 1, 
#>     subsample = 1, objective = "multi:softprob"), data = x$data, 
#>     nrounds = 15, watchlist = x$watchlist, verbose = 0, num_class = 5L, 
#>     nthread = 1)
#> params (as set within xgb.train):
#>   eta = "0.3", max_depth = "6", gamma = "0", colsample_bytree = "1", colsample_bynode = "1", min_child_weight = "1", subsample = "1", objective = "multi:softprob", num_class = "5", nthread = "1", validate_parameters = "TRUE"
#> xgb.attributes:
#>   niter
#> callbacks:
#>   cb.evaluation.log()
#> # of features: 1000 
#> niter: 15
#> nfeatures : 1000 
#> evaluation_log:
#>     iter training_mlogloss
#>        1          1.050810
#>        2          0.747666
#> ---                       
#>       14          0.045500
#>       15          0.038370

Prediction Results

Confusion Tables

boost_tree Confusion Matrix on Test Set
Truth
Prediction Basal Her2 LumA LumB Normal
Basal 37 1 0 1 2
Her2 1 13 0 1 1
LumA 0 1 110 17 4
LumB 0 2 3 23 0
Normal 0 0 0 0 1
rand_forest Confusion Matrix on Test Set
Truth
Prediction Basal Her2 LumA LumB Normal
Basal 37 1 0 0 2
Her2 1 13 0 0 1
LumA 0 1 110 15 4
LumB 0 2 3 27 0
Normal 0 0 0 0 1

ROC Plot

PR Plot

5 Post hoc analysis

Move beyond the global prediction accuracy metrics and dive deeper into individual-level predictions for the validation and/or test set, i.e., provide a more “local” analysis.

Examine any points that had poor predictions.

As mentioned in the stability analysis, check for any commonalities among perturbations, or specific observations, that resulted in poor accuracy metrics across procedures.

Examine differences between prediction methods.

Are there certain methods that may not be overall the most accurate, but outperform others on the more “challenging” validation/test observations? Conversely, are some procedures very effective across the majority of observations, but some outlying behavior effects overall results?


pred_results_final %>%
  dplyr::mutate(.id = rep(1:nrow(Xtest), length.out = dplyr::n())) %>%
  tidyr::pivot_wider(id_cols = .id, 
                     names_from = "method", values_from = "predictions") %>%
  dplyr::mutate(`True Responses` = ytest) %>%
  plot_pairs(columns = 2:(length(unique(pred_results_final$method)) + 2),
             title = "Comparison of model test predictions")

6 Conclusions

Reiterate main findings, note any caveats, and clearly translate findings/analysis back to the domain problem context.


LS0tCnRpdGxlOiAiUENTIERvY3VtZW50YXRpb24iCmF1dGhvcjogIiIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJUIgJWQsICVZJylgIgpoZWFkZXItaW5jbHVkZXM6CiAgICAtIFx1c2VwYWNrYWdle2Zsb2F0fQogICAgLSBcdXNlcGFja2FnZXthbXNtYXRofQogICAgLSBcdXNlcGFja2FnZXtnZW5zeW1ifQogICAgLSBcdXNlcGFja2FnZXt0Y29sb3Jib3h9Cm91dHB1dDoKICB2ZG9jczo6dmVyaWRpY2FsOgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCiAgcGRmX2RvY3VtZW50OgogICAgbnVtYmVyX3NlY3Rpb25zOiB0cnVlCnBhcmFtczoKICAjIyBJTlBVVCBQQVJBTUVURVJTIEhFUkUgT1IgVVNJTkcgIktuaXQgd2l0aCBQYXJhbWV0ZXJzLi4uIiBJTiBBQk9WRSBLTklUIE1FTlUKICBYX2ZpbGVwYXRoOgogICAgbGFiZWw6ICJYIERhdGEiCiAgICAjIHNwZWNpZnkgZmlsZSBwYXRoIGZvciBYIGRhdGEKICAgIHZhbHVlOiBkYXRhL3RjZ2FfYnJjYV9hcnJheV9kYXRhLnJkcyAgCiAgICBpbnB1dDogZmlsZSAKICB5X2ZpbGVwYXRoOgogICAgbGFiZWw6ICJ5IGRhdGEiCiAgICAjIHNwZWNpZnkgZmlsZSBwYXRoIGZvciB5IGRhdGEKICAgIHZhbHVlOiBkYXRhL3RjZ2FfYnJjYV9zdWJ0eXBlcy5yZHMgIAogICAgaW5wdXQ6IGZpbGUKICB0cmFpbl9wcm9wOgogICAgbGFiZWw6ICJUcmFpbmluZyBkYXRhIHByb3BvcnRpb24iCiAgICAjIHNwZWNpZnkgcHJvcG9ydGlvbiBvZiBkYXRhIHRvIHB1dCBpbiB0cmFpbmluZyBzZXQKICAgIHZhbHVlOiAwLjYgIAogICAgaW5wdXQ6IG51bWVyaWMKICB2YWxpZF9wcm9wOgogICAgbGFiZWw6ICJWYWxpZGF0aW9uIGRhdGEgcHJvcG9ydGlvbiIKICAgICMgc3BlY2lmeSBwcm9wb3J0aW9uIG9mIGRhdGEgdG8gcHV0IGluIHZhbGlkYXRpb24gc2V0CiAgICB2YWx1ZTogMC4yICAKICAgIGlucHV0OiBudW1lcmljCiAgdGVzdF9wcm9wOgogICAgbGFiZWw6ICJUZXN0IGRhdGEgcHJvcG9ydGlvbiIKICAgICMgc3BlY2lmeSBwcm9wb3J0aW9uIG9mIGRhdGEgdG8gcHV0IGluIHRlc3Qgc2V0CiAgICB2YWx1ZTogMC4yICAKICAgIGlucHV0OiBudW1lcmljCiAgbW9kZWxpbmdfcGtnOgogICAgbGFiZWw6ICJNb2RlbGluZyBQYWNrYWdlIgogICAgIyBzcGVjaWZ5IHdoaWNoIG1vZGVsaW5nIHBhY2thZ2UgdG8gdXNlCiAgICB2YWx1ZTogInRpZHltb2RlbHMiICAKICAgIGlucHV0OiBzZWxlY3QKICAgIGNob2ljZXM6IFsiY2FyZXQiLCAiaDJvIiwgInRpZHltb2RlbHMiXQogIG5fZGF0YV9wZXJ0dXJiYXRpb25zOgogICAgbGFiZWw6ICJOdW1iZXIgb2YgZGF0YSBwZXJ0dXJiYXRpb25zIChlLmcuLCBib290c3RyYXAgc2FtcGxlcykiCiAgICAjIHNwZWNpZnkgbnVtYmVyIG9mIGRhdGEgcGVydHVyYmF0aW9uczsgbm90ZTogaW5jcmVhc2UgZm9yIGJldHRlciBtZWFzdXJlIAogICAgIyBvZiBzdGFiaWxpdHksIGJ1dCBhdCB0aGUgY29zdCBvZiBoaWdoZXIgY29tcHV0YXRpb25hbCBsb2FkCiAgICB2YWx1ZTogMiAgCiAgICBpbnB1dDogbnVtZXJpYwogIHNlZWQ6CiAgICBsYWJlbDogIlJhbmRvbSBTZWVkIgogICAgIyBzcGVjaWZ5IHJhbmRvbSBzZWVkCiAgICB2YWx1ZTogMTIzNDUKICAgIGlucHV0OiBudW1lcmljCi0tLQoKPCEtLSBJTlNUUlVDVElPTlM6IFRoaXMgUm1hcmtkb3duIGZhY2lsaXRhdGVzIGJlYXV0aWZ1bCBkb2N1bWVudGF0aW9uIGZvciBQQ1Mtc3R5bGUgYW5hbHlzZXMuIEFmdGVyIGlucHV0dGluZyBpbiB0aGUgcmVxdWlyZWQgZGF0YSBhbmQgcGFyYW1ldGVycyBhYm92ZSwgcGxlYXNlIGdvIHRocm91Z2ggYW5kIHByb3ZpZGUgcmVzcG9uc2VzIHRvIGFsbCBxdWVzdGlvbnMgaW4gdGhlIG5vdGVib29rIGJlbG93LiBSZXNwb25zZXMgc2hvdWxkIGJlIHR5cGVkIGluIGFsbCBjaHVua3Mgd2l0aCB0aGUgaGVhZGVyIGBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRWAuIC0tPgoKYGBge3Igc2V0dXAsIGVjaG8gPSBGQUxTRSwgbWVzc2FnZSA9IEZBTFNFLCB3YXJuaW5nID0gRkFMU0UsIHJlc3VsdHMgPSAiaGlkZSJ9CmxpYnJhcnkodmRvY3MpCgojIHNldCB1cCBrbml0ciBvcHRpb25zIGZvciB2ZG9jcwp2ZG9jc19rbml0cl9zZXR1cCgpCgojIHNldCBzZWVkCnNldC5zZWVkKHBhcmFtcyRzZWVkKQoKIyB2YWxpZGF0ZSBpbnB1dHMKdmFsaWRhdGVfZGF0YV9zcGxpdChwYXJhbXMkdHJhaW5fcHJvcCwgcGFyYW1zJHZhbGlkX3Byb3AsIHBhcmFtcyR0ZXN0X3Byb3ApCgojIGxvYWQgZGF0YSBpbgpYIDwtIGxvYWRfZmlsZShwYXJhbXMkWF9maWxlcGF0aCkKeSA8LSBsb2FkX2ZpbGUocGFyYW1zJHlfZmlsZXBhdGgpCnZhbGlkYXRlX2RhdGEoWCwgeSkKYGBgCgpgYGB7ciBsb2FkLXNhdmVkLXJlc3BvbnNlcywgZXZhbCA9IGtuaXRyOjppc19odG1sX291dHB1dCgpLCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiYXNpcyIsIGNhY2hlID0gRkFMU0V9CmxvYWRfc2F2ZWRfcmVzcG9uc2VzKCkKYGBgCgojIERvbWFpbiBwcm9ibGVtIGZvcm11bGF0aW9uCgpXaGF0IGlzIHRoZSByZWFsLXdvcmxkIHF1ZXN0aW9uPyBUaGlzIGNvdWxkIGJlIGh5cG90aGVzaXMtZHJpdmVuIG9yIGRpc2NvdmVyeS1iYXNlZC4KCmBgYHthc2lzLCBoZWxwID0gVFJVRX0KVGhpcyBzaG91bGQgYmUgdmVyeSBoaWdoIGxldmVsLCBwcm92aWRpbmcgdGhlIGJpZyBwaWN0dXJlIGJlaGluZCB0aGUgc3R1ZHkuIE9mdGVuIHRoaXMgdGFrZXMgdGhlIGZvcm0gb2YgYSBwcmUtZXhpc3RpbmcgaHlwb3RoZXNpcyAoZS5nLiwgaW5kaXZpZHVhbHMgd2l0aCBhIHNwZWNpZmljIGdlbmV0aWMgbXV0YXRpb24gYXJlIG1vcmUgbGlrZWx5IHRvIGhhdmUgYSBnaXZlbiBjaGFyYWN0ZXJpc3RpYykgb3IgbW9yZSBvcGVuLWVuZGVkIGRpc2NvdmVyeSAoZS5nLiwgaWRlbnRpZnkgbXV0YXRpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gYSBnaXZlbiBjaGFyYWN0ZXJpc3RpYykuCmBgYAoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgpXaHkgaXMgdGhpcyBxdWVzdGlvbiBpbnRlcmVzdGluZyBhbmQgaW1wb3J0YW50PyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIGJldHRlciB1bmRlcnN0YW5kaW5nIHRoaXMgZGF0YT8KCmBgYHthc2lzLCBoZWxwID0gVFJVRX0KVHJ5IHRvIGluY2VudGl2ZSB0aGlzIHN0dWR5IGZvciB0aG9zZSBjb21pbmcgZnJvbSBhIHZhcmlldHkgb2YgYmFja2dyb3VuZHMgYW5kIGxldmVscyBvZiBzY2llbnRpZmljIHVuZGVyc3RhbmRpbmcuIFBlcmhhcHMgbWVudGlvbiBob3cgcHJldmlvdXMgcmVsYXRlZCB3b3JrIG1hZGUgYW4gaW1wYWN0IGluIHRoZSBmaWVsZC4KYGBgCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCkJyaWVmbHkgZGVzY3JpYmUgYW55IGJhY2tncm91bmQgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIHVuZGVyc3RhbmQgdGhpcyBwcm9ibGVtLgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpUaGlzIHNob3VsZCBwcm92aWRlIHJlYWRlcnMgc29tZSBpbnR1aXRpb24gZm9yIHRoZSBzY2llbnRpZmljIHByb2JsZW0uIFRoaXMgc2VjdGlvbiBzaG91bGQgYmUgYSBzaG9ydCBoaWdoLWxldmVsIHN1bW1hcnkuIEZvciBhZGRpdGlvbmFsIGRldGFpbHMsIG9uZSBjYW4gcmVmZXIgcmVhZGVycyB0byBpbnRyb2R1Y3RvcnkgbWF0ZXJpYWwsIHR1dG9yaWFscywgYW5kL29yIHJldmlldyBwYXBlcnMuCmBgYAoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgpCcmllZmx5IGRlc2NyaWJlIGhvdyB0aGlzIHF1ZXN0aW9uIGNhbiBiZSBhbnN3ZXJlZCBpbiB0aGUgY29udGV4dCBvZiBhIG1vZGVsIG9yIGFuYWx5c2lzLgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgpPdXRsaW5lIHRoZSByZXN0IG9mIHRoZSByZXBvcnQvYW5hbHlzaXMuCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCiMgRGF0YQoKV2hhdCBpcyB0aGUgZGF0YSB1bmRlciBpbnZlc3RpZ2F0aW9uPyBQcm92aWRlIGEgYnJpZWYgb3ZlcnZpZXcvZGVzY3JpcHRpb24gb2YgdGhlIGRhdGEuCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCkRlc2NyaWJlIGhvdyB5b3VyIGRhdGEgY29ubmVjdHMgdG8gdGhlIGRvbWFpbiBwcm9ibGVtLgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgojIyBEYXRhIENvbGxlY3Rpb24KCkhvdyB3YXMgdGhlIGRhdGEgY29sbGVjdGVkIG9yIGdlbmVyYXRlZCAoaW5jbHVkaW5nIGRldGFpbHMgb24gdGhlIGV4cGVyaW1lbnRhbCBkZXNpZ24pPyBCZSBhcyB0cmFuc3BhcmVudCBhcyBwb3NzaWJsZSBzbyB0aGF0IGNvbmNsdXNpb25zIG1hZGUgZnJvbSB0aGlzIGRhdGEgYXJlIG5vdCBtaXNpbnRlcnByZXRlZCBkb3duIHRoZSByb2FkLgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgpEZXNjcmliZSBhbnkgbGltaXRhdGlvbnMgd2hlbiB1c2luZyB0aGUgZGF0YSB0byBhbnN3ZXIgdGhlIGRvbWFpbiBwcm9ibGVtIG9mIGludGVyZXN0LgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpXaGlsZSB0aGUgcHJldmlvdXMgc2VjdGlvbiBsYXlzIG91dCB0aGUgZW50aXJlIGNvbGxlY3Rpb24gcHJvY2VzcywgaGVyZSBpdCBpcyBpbXBvcnRhbnQgdG8gaGlnaGxpZ2h0IGFueSBsaW1pdGF0aW9ucyBhcyB0aGVzZSBtYXkgbm90IGJlIG9idmlvdXMgdG8gdGhvc2UgZnJvbSBvdGhlciBmaWVsZHMuIFRoaXMgaW5jbHVkZXMgYW55IHBlcnNvbmFsIGp1ZGdlbWVudCBjYWxscyBtYWRlIGluIHRoZSBkYXRhIGNvbGxlY3Rpb24gcHJvY2Vzcy4KYGBgCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCldoZXJlIGlzIHRoZSBkYXRhIHN0b3JlZCwgYW5kIGhvdyBjYW4gaXQgYmUgYWNjZXNzZWQgYnkgb3RoZXJzIChpZiBhcHBsaWNhYmxlKT8KCmBgYHthc2lzLCBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRX0KCmBgYAoKIyMgRGF0YSBTcGxpdHRpbmcKCkRlY2lkZSBvbiB0aGUgcHJvcG9ydGlvbiBvZiBkYXRhIGluIGVhY2ggc3BsaXQuCgpEZWNpZGUgb24gdGhlICJob3ciIHRvIHNwbGl0IHRoZSBkYXRhIChlLmcuLCByYW5kb20gc2FtcGxpbmcsIHN0cmF0aWZpZWQgc2FtcGxpbmcsIGV0Yy4pLCBhbmQgZXhwbGFpbiB3aHkgdGhpcyBpcyBhIHJlYXNvbmFibGUgd2F5IHRvIHNwbGl0IHRoZSBkYXRhLgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpIZXJlLCB3ZSByZWZlciB0byBzcGxpdHRpbmcgZGF0YSBpbnRvIHRyYWluaW5nLCB2YWxpZGF0aW9uLCBhbmQgdGVzdCBwb3J0aW9ucy4gR2VuZXJhbGx5LCBvbmUgZml0cyBzZWxlY3QgbW9kZWxzIChpbmNsdWRpbmcgYW55IG5lY2Vzc2FyeSB0dW5pbmcgcHJvY2VkdXJlcykgb24gdGhlIHRyYWluaW5nIGRhdGEgYW5kIGFzc2Vzc2VzIHByZWRpY3Rpb24gYWNjdXJhY3kgb24gdGhlIHZhbGlkYXRpb24gZGF0YSB0byBjb21wYXJlIG1vZGVscyBhZ2FpbnN0IG9uZSBhbm90aGVyLiAqKlRoZSB0ZXN0IGRhdGEgc2hvdWxkIG9ubHkgYmUgdXRpbGl6ZWQgb25jZSBhZnRlciBhbGwgZGF0YSBhbmFseXNpcyBpcyBjb21wbGV0ZWQuKioKCk5vdGUgdGhhdCAqaG93KiB0aGUgZGF0YSBzcGxpdHRpbmcgaXMgcGVyZm9ybWVkIGNhbiBncmVhdGx5IGFmZmVjdCB0aGUgcmVzdWx0cy4gVGhpcyBpcyBiZWNhdXNlIGRhdGEgb2Z0ZW4gaGF2ZSB1bmRlcmx5aW5nIGluaGVyZW50IHN0cnVjdHVyZXMgYW5kIHJlbGF0aW9uc2hpcHMgKGUuZy4sIGxvbmdpdHVkaW5hbCBpbmZvcm1hdGlvbiwgcmVsYXRlZCBpbmRpdmlkdWFscywgZXRobmljaXR5LCB2YXJ5aW5nIGhvc3BpdGFscywgZXRjLikgdGhhdCBzaG91bGQgYmUgcHJlc2VydmVkIHdoZW4gc3BsaXR0aW5nLiBBcyBhIGNvbmNyZXRlIGV4YW1wbGUsIGlmIHRoZSBkYXRhIHVuZGVyIHN0dWR5IGNvbWVzIGZyb20gcGF0aWVudHMgYWNyb3NzIGZvdXIgaG9zcGl0YWxzLCBpdCBpcyBvZnRlbiBhZHZpc2FibGUgdG8gcGVyZm9ybSB0aGUgZGF0YSBzcGxpdHRpbmcgYnkgaG9zcGl0YWwgc28gdGhhdCB0aGUgdHJhaW5pbmcgc2V0IGlzIGNvbXBvc2VkIG9mIGFsbCBwYXRpZW50cyBmcm9tIGhvc3BpdGFscyBBIGFuZCBCLCB0aGUgdmFsaWRhdGlvbiBzZXQgaXMgY29tcG9zZWQgb2YgYWxsIHBhdGllbnRzIGZyb20gaG9zcGl0YWwgQywgYW5kIHRoZSB0ZXN0IHNldCBpcyBjb21wb3NlZCBvZiBhbGwgcGF0aWVudHMgZnJvbSBob3NwaXRhbCBELiBCeSBzcGxpdHRpbmcgdGhlIGRhdGEgaW4gdGhpcyB3YXksIHRoZSB2YWxpZGF0aW9uIChvciB0ZXN0KSBhY2N1cmFjeSBpcyBhIG1vcmUgYWNjdXJhdGUgZXZhbHVhdGlvbiBvZiBob3cgdGhlIGZpdHRlZCBtb2RlbCB3aWxsIHBlcmZvcm0gb24gYSBjb21wbGV0ZWx5IG5ldyBiYXRjaCBvZiBkYXRhIGluIHRoZSBmdXR1cmUuIFVsdGltYXRlbHksIHRoZSBnb2FsIG9mIHRoZSBkYXRhIHNwbGl0dGluZyBzY2hlbWUgaXMgdG8gbWltaWMgdGhlIHByb2Nlc3Mgb2Ygb2J0YWluaW5nIG5ldyAqKmZ1dHVyZSBkYXRhKiouCmBgYAoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgpTcGxpdCB0aGUgZGF0YSBpbnRvIGEgdHJhaW5pbmcsIHZhbGlkYXRpb24sIGFuZCB0ZXN0IHNldC4KCmBgYHtyIHNwbGl0LWRhdGF9CmRhdGFfc3BsaXQgPC0gc3BsaXRfZGF0YShYID0gWCwgeSA9IHksIHN0cmF0aWZpZWRfYnkgPSB5LAogICAgICAgICAgICAgICAgICAgICAgICAgdHJhaW5fcHJvcCA9IHBhcmFtcyR0cmFpbl9wcm9wLCAKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkX3Byb3AgPSBwYXJhbXMkdmFsaWRfcHJvcCwgCiAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3Byb3AgPSBwYXJhbXMkdGVzdF9wcm9wKQpYdHJhaW4gPC0gZGF0YV9zcGxpdCRYJHRyYWluClh2YWxpZCA8LSBkYXRhX3NwbGl0JFgkdmFsaWRhdGUKWHRlc3QgPC0gZGF0YV9zcGxpdCRYJHRlc3QKeXRyYWluIDwtIGRhdGFfc3BsaXQkeSR0cmFpbgp5dmFsaWQgPC0gZGF0YV9zcGxpdCR5JHZhbGlkYXRlCnl0ZXN0IDwtIGRhdGFfc3BsaXQkeSR0ZXN0CmBgYAoKUHJvdmlkZSBzdW1tYXJ5IHN0YXRpc3RpY3MgYW5kL29yIGZpZ3VyZXMgb2YgdGhlIHRocmVlIGRhdGEgc2V0cyB0byBpbGx1c3RyYXRlIGhvdyBzaW1pbGFyIChvciBkaWZmZXJlbnQpIHRoZXkgYXJlLgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpUaGlzIHN0ZXAgaXMgaW1wb3J0YW50IGFzIGl0IGNhbiBoaWdobGlnaHQgYW55IGNvbmNlcm5zIHdpdGggeW91ciBjaG9zZW4gc3BsaXR0aW5nIHJ1bGUuIEZvciBpbnN0YW5jZSwgdW5kZXIgdGhlIGNsYXNzaWZpY2F0aW9uIHNldHRpbmcsIHRoZSBkaXN0cmlidXRpb24gb2YgY2F0ZWdvcmllcyBzaG91bGQgYmUgc2ltaWxhciBhY3Jvc3MgdGhlIHRocmVlIGRhdGEgc2V0cy4KYGBgCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCiMjIyBEYXRhIFNwbGl0dGluZyBPdmVydmlldyB7LnRhYnNldCAudGFic2V0LXZtb2Rlcm59CgojIyMjIFggRGF0YSBTcGxpdCB7LnVubnVtYmVyZWR9CgpgYGB7ciBYLWRhdGEtc3BsaXQsIGFkZF9uZXdfbGluZSA9IFRSVUV9CnBsb3RfZGF0YV9zcGxpdChYdHJhaW4sIFh2YWxpZCwgWHRlc3QsIAogICAgICAgICAgICAgICAgeGxhYiA9ICJYIiwgdGl0bGUgPSAiT3ZlcmFsbCBYIERpc3RyaWJ1dGlvbiIpCmBgYAoKIyMjIyBZIERhdGEgU3BsaXQgey51bm51bWJlcmVkfQoKYGBge3IgeS1kYXRhLXNwbGl0LCBhZGRfbmV3X2xpbmUgPSBUUlVFfQpwbG90X2RhdGFfc3BsaXQoeXRyYWluLCB5dmFsaWQsIHl0ZXN0LCAKICAgICAgICAgICAgICAgIHhsYWIgPSAieSIsIHRpdGxlID0gIk92ZXJhbGwgeSBEaXN0cmlidXRpb24iKQpgYGAKCiMjIERhdGEgQ2xlYW5pbmcgYW5kIFByZXByb2Nlc3NpbmcKCldoYXQgc3RlcHMgd2VyZSB0YWtlbiB0byBjbGVhbiB0aGUgZGF0YT8gTW9yZSBpbXBvcnRhbnRseSwgd2h5IHdhcyB0aGUgZGF0YSBjbGVhbmVkIGluIHRoaXMgd2F5PwoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpEYXRhIGNsZWFuaW5nIGNhbiBiZSB2ZXJ5IHByb2JsZW0gYW5kIGRvbWFpbiBkZXBlbmRlbnQuIEJlIHN1cmUgdG8gc3BlY2lmeSB3aGljaCBhcHByb2FjaGVzIGFyZSBjb21tb24gaW4gdGhlIGZpZWxkIGFuZCB3aHkuIFdoZXJlIGFwcHJvcHJpYXRlLCBoaWdobGlnaHQgYW55IHN0ZXBzIHRoYXQgd2VyZSBqdWRnZW1lbnQgY2FsbHMgbmVjZXNzYXJ5IHRvIGNvbnRpbnVlIHRoZSBhbmFseXNpcy4gCmBgYAoKRGlzY3VzcyBhbGwgaW5jb25zaXN0ZW5jaWVzLCBwcm9ibGVtcywgb2RkaXRpZXMgaW4gdGhlIGRhdGEgKGUuZy4sIG1pc3NpbmcgZGF0YSwgZXJyb3JzIGluIGRhdGEsIG91dGxpZXJzLCBldGMuKS4KClJlY29yZCB5b3VyIHByZXByb2Nlc3Npbmcgc3RlcHMgaW4gYSB3YXkgc3VjaCB0aGF0IGlmIHNvbWVvbmUgZWxzZSB3ZXJlIHRvIHJlcHJvZHVjZSB5b3VyIGFuYWx5c2lzLCB0aGV5IGNvdWxkIGVhc2lseSByZXBsaWNhdGUgYW5kIHVuZGVyc3RhbmQgeW91ciBzdGVwcy4KCkl0IGNhbiBiZSBoZWxwZnVsIHRvIGluY2x1ZGUgcmVsZXZhbnQgcGxvdHMgdGhhdCBleHBsYWluL2p1c3RpZnkgdGhlIGNob2ljZXMgdGhhdCB3ZXJlIG1hZGUgd2hlbiBjbGVhbmluZyB0aGUgZGF0YS4KCklmIG1vcmUgdGhhbiBvbmUgcHJlcHJvY2Vzc2luZyBwaXBlbGluZSBpcyByZWFzb25hYmxlLCBleGFtaW5lIHRoZSBpbXBhY3RzIG9mIHRoZXNlIGFsdGVybmF0aXZlIHByZXByb2Nlc3NpbmcgcGlwZWxpbmVzIG9uIHRoZSBmaW5hbCBkYXRhIHJlc3VsdHMuCgpgYGB7YXNpcywgaGVscCA9IFRSVUV9ClRoZXJlIGFyZSBvZnRlbiBtdWx0aXBsZSwgc3RhbmRhcmQgcHJlcHJvY2Vzc2luZyBvcHRpb25zIHRoYXQgc2hvdWxkIGJlIHRlc3RlZCB0byBhc3Nlc3Mgc3RhYmlsaXR5IG9mIHJlc3VsdHMuIEFueSBqdWRnZW1lbnQgY2FsbHMgbWVudGlvbmVkIGFib3ZlIHNob3VsZCBhbHNvIGJlIGNvbXBhcmVkIHdpdGggYWx0ZXJuYXRpdmUgY2hvaWNlcyB3aGVyZSBwb3NzaWJsZS4KYGBgCgpBZ2FpbiwgYmUgYXMgdHJhbnNwYXJlbnQgYXMgcG9zc2libGUuIFRoaXMgYWxsb3dzIG90aGVycyB0byBtYWtlIHRoZWlyIG93biBlZHVjYXRlZCBkZWNpc2lvbnMgb24gaG93IGJlc3QgdG8gcHJlcHJvY2VzcyB0aGUgZGF0YS4KCmBgYHthc2lzLCBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRX0KR2l2ZW4gdGhpcyBleGFtcGxlIFRDR0EgQlJDQSBkYXRhIHNldCwgd2UgZmlyc3QgcHJlcHJvY2VzcyB0aGUgZGF0YSBieSByZW1vdmluZyBjb25zdGFudCBvciBkdXBsaWNhdGVkIGNvbHVtbnMuIFRoZW4gc2luY2UgdGhlIGFycmF5IGRhdGEgaXMgaGlnaGx5IHJpZ2h0IHNrZXdlZCwgd2Ugd2lsbCBsb2ctdHJhbnNmb3JtIChpLmUuLCBsb2coeCArIDEpKSB0aGUgZGF0YS4gRmluYWxseSwgdG8ga2VlcCB0aGlzIGV4YW1wbGUgdGVtcGxhdGUgcmVsYXRpdmVseSBxdWljayB0byBydW4sIHdlIHdpbGwgb25seSBrZWVwIHRoZSAxMDAwIGZlYXR1cmVzIHdpdGggdGhlIGhpZ2hlc3QgdmFyaWFuY2UuCmBgYAoKYGBge3IgcHJlcHJvY2Vzcy1kYXRhfQojIyBETyBEQVRBIENMRUFOSU5HIC8gUFJFLVBST0NFU1NJTkcgSEVSRSAKWHRyYWluIDwtIGxvZyhYdHJhaW4gKyAxKSAlPiUKICByZW1vdmVfY29uc3RhbnRfY29scyh2ZXJib3NlID0gMSkgJT4lCiAgcmVtb3ZlX2R1cGxpY2F0ZV9jb2xzKHZlcmJvc2UgPSAxKSAlPiUKICBmaWx0ZXJfY29sc19ieV92YXIobWF4X3AgPSAxMDAwKQpYdmFsaWQgPC0gbG9nKFh2YWxpZCArIDEpWywgY29sbmFtZXMoWHRyYWluKV0KWHRlc3QgPC0gbG9nKFh0ZXN0ICsgMSlbLCBjb2xuYW1lcyhYdHJhaW4pXQpgYGAKCgojIyBEYXRhIEV4cGxvcmF0aW9uCgpUaGUgbWFpbiBnb2FsIG9mIHRoaXMgc2VjdGlvbiBpcyB0byBnaXZlIHRoZSByZWFkZXIgYSBmZWVsIGZvciB3aGF0IHRoZSBkYXRhICJsb29rcyBsaWtlIiBhdCBhIGJhc2ljIGxldmVsLgoKUHJvdmlkZSBwbG90cyB0aGF0IHN1bW1hcml6ZSB0aGUgZGF0YSBhbmQgcGVyaGFwcyBldmVuIHBsb3RzIHRoYXQgY29udmV5IHNvbWUgc21hbGxlciBmaW5kaW5ncyB3aGljaCB1bHRpbWF0ZWx5IG1vdGl2YXRlIHRoZSBtYWluIGZpbmRpbmdzLgoKUHJvdmlkZSBhZGRpdGlvbmFsIHBsb3RzIHJlcHJlc2VudGluZyByZW1haW5pbmcgb2RkaXRpZXMgYWZ0ZXIgcHJlLXByb2Nlc3NpbmcgaWYgYXBwbGljYWJsZS4KCkFkZCBzdW1tYXJ5IHN0YXRpc3RpY3MgaW4gYWNjb21wYW55aW5nIHRhYmxlcyAob3IgaW4gZmlndXJlcykgZm9yIHF1aWNrIGNvbXBhcmlzb25zLgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgojIyMgRGF0YSBPdmVydmlldyB7LnRhYnNldCAudGFic2V0LXZtb2Rlcm59CgpgYGB7ciBkYXRhLWRpbXMsIGVjaG8gPSBGQUxTRX0KIyBzdW1tYXJ5IG9mIGRhdGEgZGltZW5zaW9ucwpnZXRfZGF0YV9kaW1lbnNpb25zKFh0cmFpbiA9IFh0cmFpbiwgWHZhbGlkID0gWHZhbGlkLCBYdGVzdCA9IFh0ZXN0KQpgYGAKCmBgYHtyIGRhdGEtdHlwZXMsIHJlc3VsdHM9ImFzaXMiLCBhZGRfbmV3X2xpbmUgPSBUUlVFfQojIHN1bW1hcnkgb2YgdHlwZXMgb2YgZmVhdHVyZXMgaW4gKFgsIHkpIGRhdGEKZ2V0X2RhdGFfdHlwZXMoWCA9IFh0cmFpbiwgeSA9IHl0cmFpbikKYGBgCgojIyMjIFN1bW1hcnkgVGFibGVzIHsudW5udW1iZXJlZH0KCmBgYHtyIGRhdGEtc3VtbWFyeS10YWJsZSwgcmVzdWx0cz0iYXNpcyIsIGFkZF9uZXdfbGluZSA9IFRSVUV9CiMgYnJvYWQgYXJyYXkgb2Ygc3VtbWFyeSBzdGF0aXN0aWNzIGZvciBmZWF0dXJlcyBpbiB0cmFpbmluZyAoWCwgeSkKdGFiX2xzIDwtIGdldF9kYXRhX3N1bW1hcnkoWCA9IFh0cmFpbiwgeSA9IHl0cmFpbikKZm9yIChkdHlwZSBpbiBuYW1lcyh0YWJfbHMpKSB7ICAjIGdyb3VwZWQgYnkgZGF0YSB0eXBlCiAgdnRoZW1lczo6c3ViY2h1bmtpZnkodGFiX2xzW1tkdHlwZV1dLCAKICAgICAgICAgICAgICAgICAgICAgICBpID0gZHR5cGUsIG90aGVyX2FyZ3MgPSAicmVzdWx0cz0nYXNpcyciKQp9CmBgYAoKIyMjIyBYIERpc3RyaWJ1dGlvbiB7LnVubnVtYmVyZWR9CgpgYGB7ciB4LWRpc3QtcGxvdCwgYWRkX25ld19saW5lID0gVFJVRX0KIyBwbG90IFggZGlzdHJpYnV0aW9uCnBsb3RfZGF0YV9kaXN0cmlidXRpb24oZGF0YSA9IFh0cmFpbiwgCiAgICAgICAgICAgICAgICAgICAgICAgeGxhYiA9ICJYIiwgdGl0bGUgPSAiVHJhaW5pbmcgWCBEaXN0cmlidXRpb24iKQpgYGAKCiMjIyMgWSBEaXN0cmlidXRpb24gey51bm51bWJlcmVkfQoKYGBge3IgeS1kaXN0LXBsb3QsIGFkZF9uZXdfbGluZSA9IFRSVUV9CiMgcGxvdCB5IGRpc3RyaWJ1dGlvbgpwbG90X2RhdGFfZGlzdHJpYnV0aW9uKGRhdGEgPSB5dHJhaW4sIAogICAgICAgICAgICAgICAgICAgICAgIHhsYWIgPSAieSIsIHRpdGxlID0gIlRyYWluaW5nIHkgRGlzdHJpYnV0aW9uIikKYGBgCgojIyMjIERhdGEgSGVhdG1hcCB7LnVubnVtYmVyZWR9CgpgYGB7ciBkYXRhLWhlYXRtYXAsIGFkZF9uZXdfbGluZSA9IFRSVUV9CiMgKGNsdXN0ZXJlZCkgaGVhdG1hcCBvZiAoWCwgeSkgZGF0YQpwbG90X2RhdGFfaGVhdG1hcChYID0gWHRyYWluLCB5ID0geXRyYWluLCBjbHVzdF9yb3dzID0gVFJVRSwgY2x1c3RfY29scyA9IFRSVUUsCiAgICAgICAgICAgICAgICAgIHNob3dfeXRleHQgPSBGQUxTRSwgeF90ZXh0X2FuZ2xlID0gVFJVRSkKYGBgCgojIyMjIEZlYXR1cmUgQ29ycmVsYXRpb24gey51bm51bWJlcmVkfQoKYGBge3IgZmVhdHVyZS1jb3ItaGVhdG1hcCwgYWRkX25ld19saW5lID0gVFJVRX0KIyAoY2x1c3RlcmVkKSBjb3JyZWxhdGlvbiBoZWF0bWFwCnBsb3RfY29yX2hlYXRtYXAoWCA9IFh0cmFpbiwgY29yX3R5cGUgPSAicGVhcnNvbiIsIGNsdXN0ID0gVFJVRSwKICAgICAgICAgICAgICAgICB4X3RleHRfYW5nbGUgPSBUUlVFKSArCiAgZ2dwbG90Mjo6bGFicyh4ID0gIkZlYXR1cmVzIiwgeSA9ICJGZWF0dXJlcyIsIGZpbGwgPSAiQ29yLiIpCmBgYAoKIyMjIyBGZWF0dXJlIFBhaXIgUGxvdHMgey51bm51bWJlcmVkfQoKYGBge3IgZmVhdHVyZS1wYWlyLXBsb3QsIGFkZF9uZXdfbGluZSA9IFRSVUV9CiMgZmVhdHVyZSBwYWlyIHBsb3QgKGZvciBhIHN1YnNldCBvZiBmZWF0dXJlcykKa2VlcF9mZWF0dXJlcyA8LSBzb3J0KAogIHNhbXBsZSgxOm5jb2woWHRyYWluKSwgbWluKG5jb2woWHRyYWluKSwgNiksIHJlcGxhY2UgPSBGQUxTRSkKKQpwbG90X3BhaXJzKGRhdGEgPSBYdHJhaW4sIGNvbHVtbnMgPSBrZWVwX2ZlYXR1cmVzLCAKICAgICAgICAgICBjb2xvciA9IHl0cmFpbiwgY29sb3JfbGFiZWwgPSAieSIpCmBgYAoKIyMjIyBNYXJnaW5hbCBBc3NvY2lhdGlvbnMgey51bm51bWJlcmVkfQoKYGBge3IgbWFyZ2luYWwtYXNzb2MtcGxvdCwgYWRkX25ld19saW5lID0gVFJVRX0KIyBtYXJnaW5hbCBhc3NvY2lhdGlvbiBwbG90cyAoZm9yIGEgc3Vic2V0IG9mIGZlYXR1cmVzKQpjYXJldDo6ZmVhdHVyZVBsb3QoeCA9IFh0cmFpblssIGtlZXBfZmVhdHVyZXNdLAogICAgICAgICAgICAgICAgICAgeSA9IHl0cmFpbiwKICAgICAgICAgICAgICAgICAgIHBsb3QgPSBpZiAoaXMuZmFjdG9yKHl0cmFpbikpICJib3giIGVsc2UgInNjYXR0ZXIiLAogICAgICAgICAgICAgICAgICAgc2NhbGVzID0gbGlzdCh4ID0gbGlzdChyZWxhdGlvbiA9ICJmcmVlIiksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB5ID0gbGlzdChyZWxhdGlvbiA9ICJmcmVlIikpKQpgYGAKCiMjIyMgUENBIHsudW5udW1iZXJlZH0KCmBgYHtyIHBjYS1wbG90LCBhZGRfbmV3X2xpbmUgPSBUUlVFfQojIHBjYSBwbG90CnBsb3RfcGNhKFggPSBYdHJhaW4sIG5wY3MgPSAzLCBjb2xvciA9IHl0cmFpbiwgY29sb3JfbGFiZWwgPSAieSIsCiAgICAgICAgIGNlbnRlciA9IFRSVUUsIHNjYWxlID0gRkFMU0UpJHBsb3QKYGBgCgojIFByZWRpY3Rpb24gTW9kZWxpbmcKCkRpc2N1c3MgdGhlIHByZWRpY3Rpb24gbWV0aG9kcyB1bmRlciBjb25zaWRlcmF0aW9uLCBhbmQgZXhwbGFpbiB3aHkgdGhlc2UgbWV0aG9kcyB3ZXJlIGNob3Nlbi4KCmBgYHthc2lzLCBoZWxwID0gVFJVRX0KVGhlcmUgYXJlIGFuIG92ZXJ3aGVsbWluZyBudW1iZXIgb2YgbWV0aG9kcyBhdmFpbGFibGUsIGJ1dCBhdCBsZWFzdCBvbmUgc2hvdWxkIGJlIGEgY29tbW9uIGFwcHJvYWNoIGFjdGluZyBhcyBhIGJhc2VsaW5lLiBUaGlzIG1heSBub3QgYmUgb3B0aW1hbCBmb3IgdGhlIHByb2JsZW0gc2V0dGluZywgYnV0IHNlcnZlcyBhcyBhIGhlbHBmdWwgY29tcGFyaXNvbi4gQW55ICJnby10byIgbWV0aG9kcyBpbiB0aGlzIHNjaWVudGlmaWMgZG9tYWluIHNob3VsZCBhbHNvIGJlIGNvbnNpZGVyZWQuIERpc2N1c3Mgd2h5IHRoZXNlIGFyZSBmYXZvcmVkLiBGb3IgaW5zdGFuY2UsIGlzIHRoZXJlIGEgbmF0dXJhbCBzdHJ1Y3R1cmUgaW4gdGhlIGRhdGEgdGhhdCBpcyBiZXR0ZXIgdXRpbGl6ZWQgaW4gb25lIGFwcHJvYWNoIHZzIGFub3RoZXI/IENvbnZlcnNlbHksIG1lbnRpb24gaWYgdGhlcmUgYXJlIGFwcHJvYWNoZXMgdGhhdCBhcmUgdHlwaWNhbGx5IGF2b2lkZWQgaW4gdGhlc2UgcHJvYmxlbXMuIFRoZSBsaW1pdGF0aW9ucyBkaXNjdXNzZWQgcHJldmlvdXNseSBjYW4gYWxzbyBoZWxwIHRvIGd1aWRlIHRoZXNlIG1vZGVsaW5nIGRlY2lzaW9ucy4KCkZ1cnRoZXJtb3JlLCB0aGluayBiYWNrIHRvIHRoZSBiaWcgcGljdHVyZS4gSWYgaW50ZXJwcmV0YWJpbGl0eSBpcyBpbXBvcnRhbnQsIG1ldGhvZHMgZmF2b3Jpbmcgc3BhcnNlciwgc2ltcGxlciBtb2RlbHMgbWF5IGJlIHByZWZlcnJlZCAoZS5nLiwgc3BhcnNlIHJlZ3Jlc3Npb24gb3IgdHJlZS1iYXNlZCBwcm9jZWR1cmVzKS4gSWYgcHJlZGljdGlvbiBpcyB0aGUgc29sZSBnb2FsLCBtb3JlIGNvbXBsZXggbW9kZWxzIG1heSBiZSBhcHByb3ByaWF0ZS4KCklmIGNvbXB1dGluZyB0aW1lIGlzIGEgYnVyZGVuIGFuZCBydWxlcyBvdXQgbWV0aG9kcyB3aXRoIGhpZ2ggcG90ZW50aWFsLCB0aGlzIHNob3VsZCBiZSBoaWdobGlnaHRlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZSBhcyBzY2FsYWJpbGl0eSBhbmQvb3IgY29tcHV0aW5nIHJlc291cmNlcyBpbXByb3ZlLgpgYGAKCmBgYHthc2lzLCBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRX0KCmBgYAoKRGlzY3VzcyB0aGUgYWNjdXJhY3kgbWV0cmljcyB1bmRlciBjb25zaWRlcmF0aW9uLCBhbmQgZXhwbGFpbiB3aHkgdGhlc2UgbWV0cmljcyB3ZXJlIGNob3Nlbi4KCmBgYHthc2lzLCBoZWxwID0gVFJVRX0KVGhlc2UgYWNjdXJhY3kgbWV0cmljcyBzaG91bGQgY2xlYXJseSBzdXBwb3J0IHRoZSBtYWluIGdvYWwgb2YgdGhlIHN0dWR5LiBUaGVyZSBhcmUgb2Z0ZW4gbXVsdGlwbGUgd2F5cyB0byBxdWFudGlmeSBhY2N1cmFjeSAoZS5nLiwgUk1TRSwgJFJeMiQsIGNvcnJlbGF0aW9uLCBBVVJPQywgQVVQUkMsIGNsYXNzaWZpY2F0aW9uIGFjY3VyYWN5KS4gT2Z0ZW4sIGNvbXBhcmluZyBhY3Jvc3Mgc2V2ZXJhbCBtZXRyaWNzIHByb3ZpZGVzIGFuIGFkZGl0aW9uYWwgc3RhYmlsaXR5IGNoZWNrIGFuZCBhIG1vcmUgaG9saXN0aWMgcGljdHVyZSBvZiB0aGUgbW9kZWwgcGVyZm9ybWFuY2UuCmBgYAoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgoKIyMgUHJlZGljdGlvbiBjaGVjayB7LnRhYnNldCAudGFic2V0LXZtb2Rlcm59CgpDYXJyeSBvdXQgdGhlIHByZWRpY3Rpb24gcGlwZWxpbmUsIG91dGxpbmVkIGFib3ZlLgoKMS4gRml0IHByZWRpY3Rpb24gbWV0aG9kcyBvbiB0cmFpbmluZyBkYXRhLiAoTm90ZTogdGhpcyBpbmNsdWRlcyBhbnkgcGFyYW1ldGVyIHR1bmluZyB3aGljaCBtYXkgcmVxdWlyZSBmdXJ0aGVyIGRhdGEgc3BsaXR0aW5nIChlLmcuLCBrLWZvbGQgY3Jvc3MtdmFsaWRhdGlvbikgKip3aXRoaW4gdGhlIHRyYWluaW5nIGRhdGEqKi4pCjIuIEV2YWx1YXRlIHByZWRpY3Rpb24gbWV0aG9kcyBvbiB2YWxpZGF0aW9uIGRhdGEuCjMuIENvbXBhcmUgcmVzdWx0cywgYW5kIGZpbHRlciBvdXQgcG9vciBtb2RlbHMuCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCmBgYHtyIGNhcmV0LWZpdC1wYXJhbXMsIGV2YWwgPSBwYXJhbXMkbW9kZWxpbmdfcGtnID09ICJjYXJldCIsIGVjaG8gPSBwYXJhbXMkbW9kZWxpbmdfcGtnID09ICJjYXJldCIsIGNhY2hlID0gRkFMU0V9CiMjIElGIFVTSU5HIENBUkVUIE1PREVMSU5HIEJBQ0tFTkQsIENIT09TRSBNRVRIT0RTIEFORCBUUkFJTklORyBDT05UUk9MUyBIRVJFCmN2X29wdGlvbnMgPC0gbGlzdChuZm9sZHMgPSA1LCAKICAgICAgICAgICAgICAgICAgIGZvbGRpZHMgPSBOVUxMLAogICAgICAgICAgICAgICAgICAgbWV0cmljID0gIkFjY3VyYWN5IikKCm1vZGVsX2xpc3QgPC0gbGlzdCgKICByYW5nZXIgPSBsaXN0KC50dW5lX3BhcmFtcyA9IGxpc3QobXRyeSA9IHJvdW5kKHNlcShzcXJ0KG5jb2woWHRyYWluKSksIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5jb2woWHRyYWluKSAvIDMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLm91dCA9IDMpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BsaXRydWxlID0gImdpbmkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaW4ubm9kZS5zaXplID0gMSksCiAgICAgICAgICAgICAgICBpbXBvcnRhbmNlID0gImltcHVyaXR5IiwKICAgICAgICAgICAgICAgIG51bS50aHJlYWRzID0gMSksCiAgeGdiVHJlZSA9IGxpc3QobnRocmVhZCA9IDEpCikKYGBgCgpgYGB7ciBoMm8tZml0LXBhcmFtcywgZXZhbCA9IHBhcmFtcyRtb2RlbGluZ19wa2cgPT0gImgybyIsIGVjaG8gPSBwYXJhbXMkbW9kZWxpbmdfcGtnID09ICJoMm8iLCBjYWNoZSA9IEZBTFNFfQojIyBJRiBVU0lORyBIMk8gTU9ERUxJTkcgQkFDS0VORCwgQ0hPT1NFIE1FVEhPRFMgQU5EIFRSQUlOSU5HIENPTlRST0xTIEhFUkUKY3Zfb3B0aW9ucyA8LSBsaXN0KG5mb2xkcyA9IDUsCiAgICAgICAgICAgICAgICAgICBmb2xkaWRzID0gTlVMTCwKICAgICAgICAgICAgICAgICAgIG1ldHJpYyA9ICJhY2N1cmFjeSIpCgptb2RlbF9saXN0IDwtIGxpc3QoCiAgcmFuZG9tRm9yZXN0ID0gbGlzdCgudHVuZV9wYXJhbXMgPSBsaXN0KG10cmllcyA9IHJvdW5kKHNlcShzcXJ0KG5jb2woWHRyYWluKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuY29sKFh0cmFpbikgLyAzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoLm91dCA9IDMpKSksCiAgICAgICAgICAgICAgICAgICAgICBudHJlZXMgPSA1MDApLAogIHhnYm9vc3QgPSBsaXN0KCkKKQoKIyBpbml0aWFsaXplIGgybyBjbHVzdGVyCmgybzo6aDJvLmluaXQobnRocmVhZHMgPSAtMSkKYGBgCgpgYGB7ciB0aWR5bW9kZWxzLWZpdC1wYXJhbXMsIGV2YWwgPSBwYXJhbXMkbW9kZWxpbmdfcGtnID09ICJ0aWR5bW9kZWxzIiwgZWNobyA9IHBhcmFtcyRtb2RlbGluZ19wa2cgPT0gInRpZHltb2RlbHMiLCBjYWNoZSA9IEZBTFNFfQojIyBJRiBVU0lORyBUSURZTU9ERUxTIEJBQ0tFTkQsIENIT09TRSBNRVRIT0RTIEFORCBUUkFJTklORyBDT05UUk9MUyBIRVJFCmN2X29wdGlvbnMgPC0gbGlzdChuZm9sZHMgPSA1LAogICAgICAgICAgICAgICAgICAgZm9sZGlkcyA9IE5VTEwsCiAgICAgICAgICAgICAgICAgICBtZXRyaWMgPSAiYWNjdXJhY3kiKQoKbW9kZWxfbGlzdCA8LSBsaXN0KAogIHJhbmRfZm9yZXN0ID0gbGlzdCgudHVuZV9wYXJhbXMgPSBsaXN0KG10cnkgPSByb3VuZChzZXEoc3FydChuY29sKFh0cmFpbikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmNvbChYdHJhaW4pIC8gMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC5vdXQgPSAzKSkpLAogICAgICAgICAgICAgICAgICAgICBlbmdpbmUgPSBsaXN0KGVuZ2luZSA9ICJyYW5nZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcG9ydGFuY2UgPSAiaW1wdXJpdHkiKSksCiAgYm9vc3RfdHJlZSA9IGxpc3QoZW5naW5lID0gInhnYm9vc3QiKQopCmBgYAoKYGBge3IgZml0LW1vZGVsc30KIyBmaXQvdHJhaW4gbW9kZWxzCmZpdF9yZXN1bHRzIDwtIGZpdF9tb2RlbHMoWHRyYWluID0gWHRyYWluLCB5dHJhaW4gPSB5dHJhaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbGlzdCA9IG1vZGVsX2xpc3QsIGN2X29wdGlvbnMgPSBjdl9vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9IHBhcmFtcyRtb2RlbGluZ19wa2cpCgojIG1ha2UgcHJlZGljdGlvbiBvbiB2YWxpZGF0aW9uIHNldApwcmVkX3Jlc3VsdHMgPC0gcHJlZGljdF9tb2RlbHMoZml0X2xpc3QgPSBmaXRfcmVzdWx0cywgWHRlc3QgPSBYdmFsaWQpCgojIGV2YWx1YXRlIHByZWRpY3Rpb25zIG9uIHZhbGlkYXRpb24gc2V0CmV2YWxfcmVzdWx0cyA8LSBldmFsdWF0ZV9tb2RlbHMocHJlZF9kZiA9IHByZWRfcmVzdWx0cywgeXRlc3QgPSB5dmFsaWQpCgojIGNvbGxlY3QgZmVhdHVyZSBpbXBvcnRhbmNlIG1ldHJpY3MgZnJvbSBtb2RlbCBmaXRzCmltcF9yZXN1bHRzIDwtIGludGVycHJldF9tb2RlbHMoZml0X2xpc3QgPSBmaXRfcmVzdWx0cykKYGBgCgoKIyMjIEZpdCBTdW1tYXJ5IHsudW5udW1iZXJlZCAudGFic2V0IC50YWJzZXQtcGlsbHN9CgpgYGB7ciBmaXQtc3VtbWFyeSwgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImFzaXMifQojIHByaW50IG91dCBmaXQgb3V0cHV0IHN1bW1hcnkKcHJpbnRfZml0X3Jlc3VsdHMoZml0X3Jlc3VsdHMpCmBgYAoKIyMjIFByZWRpY3Rpb24gUmVzdWx0cyB7LnVubnVtYmVyZWR9CgpgYGB7ciBwcmVkaWN0aW9uLXJlc3VsdHMsIGVjaG8gPSBGQUxTRSwgcmVzdWx0cyA9ICJhc2lzIn0KIyBkaXNwbGF5IHByZWRpY3Rpb24gbWV0cmljcywgY29uZnVzaW9uIG1hdHJpY2VzLCBhbmQgcm9jL3ByIHBsb3RzIGlmIGFwcGxpY2FibGUKcHJpbnRfZXZhbF9yZXN1bHRzKGV2YWxfcmVzdWx0cywgZGlnaXRzID0gMiwgc2lnZmlnID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICBodG1sX29wdGlvbnMgPSBsaXN0KAogICAgICAgICAgICAgICAgICAgICBvcHRpb25zID0gbGlzdChkb20gPSAidCIsIHBhZ2VMZW5ndGggPSBucm93KGV2YWxfcmVzdWx0cykpCiAgICAgICAgICAgICAgICAgICApKQpgYGAKCiMjIFN0YWJpbGl0eSBjaGVjayB7LnRhYnNldCAudGFic2V0LXZtb2Rlcm59CgpUYWtpbmcgdGhlIHByZWRpY3Rpb24gbWV0aG9kcyB0aGF0IHBhc3MgdGhlIHByZWRpY3Rpb24gY2hlY2ssIHBlcmZvcm0gYSBzdGFiaWxpdHkgYW5hbHlzaXMuCgpgYGB7YXNpcywgaGVscCA9IFRSVUV9Ck9uZSB3YXkgdG8gYXNzZXNzIGEgbW9kZWwncyBzdGFiaWxpdHkgaXMgdG8gYXNzZXNzIGNoYW5nZXMgaW4gbW9kZWwncyB2YWxpZGF0aW9uIGFjY3VyYWN5IGJhc2VkIG9uIGFwcHJvcHJpYXRlIGRhdGEgcGVydHVyYmF0aW9ucyBvZiB0aGUgdHJhaW5pbmcgZGF0YS4gSG93ZXZlciwgdGhpcyBzdGFiaWxpdHkgYW5hbHlzaXMgaXMgaGVhdmlseSBkZXBlbmRlbnQgb24gdGhlIHByb2JsZW0gYXQgaGFuZCBhbmQgc2hvdWxkIGJlIHRhaWxvcmVkIHRvIGFzc2VzcyB0aGUgc3RhYmlsaXR5IG9mIG1ldHJpY3MgdGhhdCBhcmUgcmVsZXZhbnQgdG8gdGhlIGRvbWFpbiBwcm9ibGVtLgpgYGAKCjEuIFNwZWNpZnkgYW5kIGp1c3RpZnkgdGhlIGFwcHJvcHJpYXRlIGRhdGEgcGVydHVyYmF0aW9uKHMpLgpgYGB7YXNpcywgaGVscCA9IFRSVUV9CkFzIHdoZW4gZGV0ZXJtaW5pbmcgYW4gYXBwcm9wcmlhdGUgc3BsaXR0aW5nIHJ1bGUsIHRoZSBwZXJ0dXJiYXRpb24gc2NoZW1lIHNob3VsZCBpbmNvcnBvcmF0ZSBhbnkga25vd24gZGF0YSBzdHJ1Y3R1cmUuIEZvciBpbnN0YW5jZSwgaWYgdXNpbmcgYSBib290c3RyYXAgYXBwcm9hY2ggd2l0aCBzdHJ1Y3R1cmVkIGRhdGEsIHN0cmF0aWZpZWQgc2FtcGxpbmcgbWF5IGJlIG1vcmUgYXBwcm9wcmlhdGUgdG8gYmV0dGVyIG1pbWljIHRoZSBwcm9jZXNzIG9mIG9idGFpbmluZyBhIG5ldyBiYXRjaCBvZiBkYXRhIGluIHRoZSBmdXR1cmUuCmBgYAoKMi4gUmUtZml0IHRoZSBwcmVkaWN0aW9uIG1ldGhvZHMgb24gdGhlc2UgcGVydHVyYmVkIGRhdGEgc2V0cy4KMy4gRXZhbHVhdGUgcHJlZGljdGlvbiBtZXRob2RzIG9uIHZhbGlkYXRpb24gZGF0YS4KNC4gQXNzZXNzIHN0YWJpbGl0eSBhY3Jvc3MgdGhlIGRhdGEgcGVydHVyYmF0aW9ucyBhcyB3ZWxsIGFzIGFjcm9zcyB0aGUgdmFyaW91cyBtZXRob2RzLgo1LiBGaWx0ZXIgb3V0IHBvb3IgbW9kZWxzIHdoZXJlIG5lY2Vzc2FyeSBhbmQgaW50ZXJwcmV0IHN0YWJpbGl0eSByZXN1bHRzLgpgYGB7YXNpcywgaGVscCA9IFRSVUV9Ck1ldGhvZHMgd2l0aCBoaWdobHkgdmFyaWFibGUgYWNjdXJhY3kgc2hvdWxkIGJlIGRpc2NhcmRlZC4gSW4gYWRkaXRpb24sIHRha2Ugbm90ZSBpZiBhbnkgc2V0IG9mIHBlcnR1cmJhdGlvbnMgcmVzdWx0ZWQgaW4gdW5pZm9ybWx5IHBvb3IgYWNjdXJhY3kgYWNyb3NzIG1ldGhvZHMuIFRoaXMgY291bGQgaW5kaWNhdGUgYW4gdW5kZXJseWluZyBpc3N1ZSB3aXRoIHRoZSBwZXJ0dXJiYXRpb24gc2NoZW1lLgpgYGAKCmBgYHthc2lzLCBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRX0KCmBgYAoKCmBgYHtyIHN0YWJpbGl0eS1jaGVja30Kbl9yZXBzIDwtIHBhcmFtcyRuX2RhdGFfcGVydHVyYmF0aW9ucwoKIyBwIDwtIHByb2dyZXNzcjo6cHJvZ3Jlc3NvcihzdGVwcyA9IG5fcmVwcykKIyBmdXR1cmU6OnBsYW4obXVsdGlzZXNzaW9uLCB3b3JrZXJzID0gbWluKG5fcmVwcywgcGFyYWxsZWw6OmRldGVjdENvcmVzKCkgLSAxKSkKYm9vdHN0cmFwX21vZGVsX3Jlc3VsdHMgPC0gZnV0dXJlLmFwcGx5OjpmdXR1cmVfcmVwbGljYXRlKAogIG4gPSBuX3JlcHMsCiAgZXhwciA9IHsKICAgIGJvb3RzdHJhcCA8LSBzYW1wbGUoMTpucm93KFh0cmFpbiksIG5yb3coWHRyYWluKSwgcmVwbGFjZSA9IFRSVUUpCiAgICBYdHJhaW5fYiA8LSBYdHJhaW5bYm9vdHN0cmFwLCBdCiAgICB5dHJhaW5fYiA8LSB5dHJhaW5bYm9vdHN0cmFwXQogICAgCiAgICAjIGZpdC90cmFpbiBtb2RlbHMgb24gYm9vdHN0cmFwIGRhdGEKICAgIGZpdF9yZXN1bHRzX2IgPC0gZml0X21vZGVscyhYdHJhaW4gPSBYdHJhaW5fYiwgeXRyYWluID0geXRyYWluX2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZWxfbGlzdCA9IG1vZGVsX2xpc3QsIGN2X29wdGlvbnMgPSBjdl9vcHRpb25zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9IHBhcmFtcyRtb2RlbGluZ19wa2cpCgogICAgIyBtYWtlIHByZWRpY3Rpb24gb24gdmFsaWRhdGlvbiBzZXQKICAgIHByZWRfcmVzdWx0c19iIDwtIHByZWRpY3RfbW9kZWxzKGZpdF9saXN0ID0gZml0X3Jlc3VsdHNfYiwgWHRlc3QgPSBYdmFsaWQpCgogICAgIyBldmFsdWF0ZSBwcmVkaWN0aW9ucyBvbiB2YWxpZGF0aW9uIHNldAogICAgZXZhbF9yZXN1bHRzX2IgPC0gZXZhbHVhdGVfbW9kZWxzKHByZWRfZGYgPSBwcmVkX3Jlc3VsdHNfYiwgeXRlc3QgPSB5dmFsaWQpCiAgICAKICAgICMgY29sbGVjdCBmZWF0dXJlIGltcG9ydGFuY2UgbWV0cmljcyBmcm9tIG1vZGVsIGZpdHMKICAgIGltcF9yZXN1bHRzX2IgPC0gaW50ZXJwcmV0X21vZGVscyhmaXRfbGlzdCA9IGZpdF9yZXN1bHRzX2IpCiAgICAKICAgIHJldHVybihsaXN0KCMgZml0ID0gZml0X3Jlc3VsdHNfYiwgICMgdW5jb21tZW50IGlmIG5lZWQgYm9vdHN0cmFwIGZpdHM7IGNhbiBiZSBtZW1vcnkgaW50ZW5zaXZlCiAgICAgICAgICAgICAgICBwcmVkaWN0aW9ucyA9IHByZWRfcmVzdWx0c19iLAogICAgICAgICAgICAgICAgZXZhbF9tZXRyaWNzID0gZXZhbF9yZXN1bHRzX2IsCiAgICAgICAgICAgICAgICBpbXBvcnRhbmNlcyA9IGltcF9yZXN1bHRzX2IpKQogIH0sCiAgc2ltcGxpZnkgPSBGQUxTRQopCgpib290c3RyYXBfbW9kZWxfZXJycyA8LSBwdXJycjo6bWFwX2Rmcihib290c3RyYXBfbW9kZWxfcmVzdWx0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfi54JGV2YWxfbWV0cmljcyRtZXRyaWNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaWQgPSAiYm9vdHN0cmFwX2lkIikKYm9vdHN0cmFwX21vZGVsX3ByZWRzIDwtIHB1cnJyOjptYXAoYm9vdHN0cmFwX21vZGVsX3Jlc3VsdHMsICJwcmVkaWN0aW9ucyIpCmJvb3RzdHJhcF9tb2RlbF9pbXBzIDwtIHB1cnJyOjptYXBfZGZyKGJvb3RzdHJhcF9tb2RlbF9yZXN1bHRzLCAiaW1wb3J0YW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuaWQgPSAiYm9vdHN0cmFwX2lkIikKCiMgc3VtbWFyaXplIGJvb3RzdHJhcCBtb2RlbCBlcnJvciBtZXRyaWNzCmJvb3RzdHJhcF9tb2RlbF9lcnJzX3N1bW1hcnkgPC0gYm9vdHN0cmFwX21vZGVsX2VycnMgJT4lCiAgdGlkeXI6OnBpdm90X2xvbmdlcihjb2xzID0gYygtYm9vdHN0cmFwX2lkLCAtbWV0cmljKSwgCiAgICAgICAgICAgICAgICAgICAgICBuYW1lc190byA9ICJNZXRob2QiLCB2YWx1ZXNfdG8gPSAiVmFsdWUiKSAlPiUKICBkcGx5cjo6cmVuYW1lKE1ldHJpYyA9IG1ldHJpYykgJT4lCiAgZHBseXI6Omdyb3VwX2J5KE1ldGhvZCwgTWV0cmljKSAlPiUKICBkcGx5cjo6c3VtbWFyaXNlKE1lYW4gPSBtZWFuKFZhbHVlKSwgU0QgPSBzZChWYWx1ZSksIC5ncm91cHMgPSAiZHJvcCIpICU+JQogIHRpZHlyOjpwaXZvdF9sb25nZXIoY29scyA9IGMoTWVhbiwgU0QpLCAKICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc190byA9ICJWYWx1ZSIsIG5hbWVzX3RvID0gIlN0YXRpc3RpYyIpICU+JQogIHRpZHlyOjpwaXZvdF93aWRlcihuYW1lc19mcm9tID0gIk1ldGhvZCIsIHZhbHVlc19mcm9tID0gIlZhbHVlIikgJT4lCiAgZHBseXI6OmFycmFuZ2UoTWV0cmljLCBTdGF0aXN0aWMpCmBgYAoKIyMjIFRhYmxlIHsudW5udW1iZXJlZH0KCmBgYHtyIHN0YWJpbGl0eS1jaGVjay10YWJsZSwgcmVzdWx0cyA9ICJhc2lzIn0KIyB0YWJsZSBvZiBhY2N1cmFjeSBtZXRyaWNzCnZ0aGVtZXM6OnByZXR0eV90YWJsZSgKICBib290c3RyYXBfbW9kZWxfZXJyc19zdW1tYXJ5LCAKICBkaWdpdHMgPSAyLCBzaWdmaWcgPSBGQUxTRSwgcm93bmFtZXMgPSBGQUxTRSwKICBjYXB0aW9uID0gIlZhbGlkYXRpb24gUHJlZGljdGlvbiBBY2N1cmFjaWVzIE92ZXIgQm9vdHN0cmFwcGVkIFRyYWluaW5nIEZpdHMiLCAKICBodG1sX29wdGlvbnMgPSBsaXN0KAogICAgZXh0ZW5zaW9ucyA9ICJSb3dHcm91cCIsCiAgICBvcHRpb25zID0gbGlzdCgKICAgICAgZG9tID0gInQiLAogICAgICBwYWdlTGVuZ3RoID0gbnJvdyhib290c3RyYXBfbW9kZWxfZXJyc19zdW1tYXJ5KSwKICAgICAgc2Nyb2xsWSA9ICI1MDBweCIsCiAgICAgIHJvd0dyb3VwID0gbGlzdChkYXRhU3JjID0gMCksCiAgICAgIGNvbHVtbkRlZnMgPSBsaXN0KGxpc3QoY2xhc3NOYW1lID0gImR0LWNlbnRlciIsIHRhcmdldHMgPSAiX2FsbCIpLAogICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHZpc2libGUgPSBGQUxTRSwgdGFyZ2V0cyA9IDApLAogICAgICAgICAgICAgICAgICAgICAgICBsaXN0KHRpdGxlID0gIk1ldHJpYyIsIHRhcmdldHMgPSAxKSkKICAgICkKICApCikKYGBgCgojIyMgUGxvdCB7LnVubnVtYmVyZWR9CgpgYGB7ciBzdGFiaWxpdHktY2hlY2stYm94cGxvdH0KIyBib3hwbG90cwpib290c3RyYXBfbW9kZWxfZXJycyAlPiUKICB0aWR5cjo6cGl2b3RfbG9uZ2VyKGNvbHMgPSBjKC1ib290c3RyYXBfaWQsIC1tZXRyaWMpLCAKICAgICAgICAgICAgICAgICAgICAgIG5hbWVzX3RvID0gIk1ldGhvZCIsIHZhbHVlc190byA9ICJWYWx1ZSIpICU+JQogIHBsb3RfYm94cGxvdCh4X3N0ciA9ICJNZXRob2QiLCB5X3N0ciA9ICJWYWx1ZSIpICsKICBnZ3Bsb3QyOjpmYWNldF93cmFwKH4gbWV0cmljKSArCiAgZ2dwbG90Mjo6bGFicyh0aXRsZSA9ICJWYWxpZGF0aW9uIFByZWRpY3Rpb24gQWNjdXJhY2llcyBPdmVyIEJvb3RzdHJhcHBlZCBUcmFpbmluZyBGaXRzIikKYGBgCgojIyBJbnRlcnByZXRhYmlsaXR5IHsudGFic2V0IC50YWJzZXQtdm1vZGVybn0KCkZvciB0aGUgbW9kZWxzIHRoYXQgcGFzcyB0aGUgcHJlZGljdGlvbiBhbmQgc3RhYmlsaXR5IGNoZWNrcywgZXh0cmFjdCB0aGUgaW1wb3J0YW50IGZlYXR1cmVzIGluIHRoZSBwcmVkaWN0aXZlIG1vZGVscyB0aGF0IGFyZSBzdGFibGUgYWNyb3NzIGJvdGggZGF0YSBhbmQgbW9kZWwgcGVydHVyYmF0aW9ucy4gRGV0ZXJtaW5pbmcgdGhlIGltcG9ydGFuY2Ugb2YgYSBmZWF0dXJlIGNhbiBiZSBtZXRob2QgZGVwZW5kZW50LgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgojIyMgRnVsbCBNb2RlbCAod2l0aG91dCBzdGFiaWxpdHkpIHsudW5udW1iZXJlZCAudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIFRhYmxlIHsudW5udW1iZXJlZH0KCmBgYHtyIGludGVycHJldGFiaWxpdHktdGFibGUsIGFkZF9uZXdfbGluZSA9IFRSVUUsIHJlc3VsdHMgPSAiYXNpcyJ9CnZ0aGVtZXM6OnByZXR0eV90YWJsZShpbXBfcmVzdWx0cywgZGlnaXRzID0gMiwgc2lnZmlnID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICBjYXB0aW9uID0gIlZhcmlhYmxlIEltcG9ydGFuY2VzIikKYGBgCgojIyMjIFBsb3RzIHsudW5udW1iZXJlZH0KCmBgYHtyIGludGVycHJldGFiaWxpdHktcGxvdCwgYWRkX25ld19saW5lID0gVFJVRX0KcGxvdF9mZWF0dXJlX2ltcG9ydGFuY2UoaW1wX3Jlc3VsdHMsCiAgICAgICAgICAgICAgICAgICAgICAgIHVzZV9yYW5raW5ncyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgICB1c2VfZmFjZXRzID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJhY3RpdmUgPSBGQUxTRSkKYGBgCgpgYGB7ciBpbnRlcnByZXRhYmlsaXR5LXBhaXItcGxvdCwgYWRkX25ld19saW5lID0gVFJVRX0KcGxvdF9mZWF0dXJlX2ltcG9ydGFuY2VfcGFpcihpbXBfcmVzdWx0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfcmFua2luZ3MgPSBUUlVFLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gRkFMU0UpCmBgYAoKIyMjIEJvb3RzdHJhcHBlZCBNb2RlbCAod2l0aCBzdGFiaWxpdHkpIHsudW5udW1iZXJlZCAudGFic2V0IC50YWJzZXQtcGlsbHN9CgojIyMjIFRhYmxlIHsudW5udW1iZXJlZH0KCmBgYHtyIGJvb3QtaW50ZXJwcmV0YWJpbGl0eS10YWJsZSwgYWRkX25ld19saW5lID0gVFJVRSwgcmVzdWx0cyA9ICJhc2lzIn0KYm9vdHN0cmFwX21vZGVsX2ltcHNfc3VtbWFyeSA8LSBib290c3RyYXBfbW9kZWxfaW1wcyAlPiUKICBkcGx5cjo6Z3JvdXBfYnkoTWV0aG9kLCBWYXJpYWJsZSkgJT4lCiAgZHBseXI6OnN1bW1hcmlzZShgTWVhbiBJbXBvcnRhbmNlYCA9IG1lYW4oSW1wb3J0YW5jZSksCiAgICAgICAgICAgICAgICAgICBgTWVkaWFuIEltcG9ydGFuY2VgID0gbWVkaWFuKEltcG9ydGFuY2UpLAogICAgICAgICAgICAgICAgICAgYFNEIEltcG9ydGFuY2VgID0gc2QoSW1wb3J0YW5jZSksCiAgICAgICAgICAgICAgICAgICBgTWluIEltcG9ydGFuY2VgID0gbWluKEltcG9ydGFuY2UpLAogICAgICAgICAgICAgICAgICAgYE1heCBJbXBvcnRhbmNlYCA9IG1heChJbXBvcnRhbmNlKSwgCiAgICAgICAgICAgICAgICAgICAuZ3JvdXBzID0gImtlZXAiKQp2dGhlbWVzOjpwcmV0dHlfdGFibGUoCiAgYm9vdHN0cmFwX21vZGVsX2ltcHNfc3VtbWFyeSwgCiAgZGlnaXRzID0gMiwgc2lnZmlnID0gRiwgCiAgY2FwdGlvbiA9ICJTdW1tYXJ5IG9mIHZhcmlhYmxlIGltcG9ydGFuY2VzIGFjcm9zcyBib290c3RyYXBwZWQgbW9kZWxzIgopCmBgYAoKIyMjIyBQbG90cyB7LnVubnVtYmVyZWR9CgpgYGB7ciBib290LWludGVycHJldGFiaWxpdHktcGxvdCwgYWRkX25ld19saW5lID0gVFJVRX0KcGxvdF9mZWF0dXJlX2ltcG9ydGFuY2Vfc3RhYmlsaXR5KGJvb3RzdHJhcF9tb2RlbF9pbXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlX3JhbmtpbmdzID0gRkFMU0UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VfZmFjZXRzID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludGVyYWN0aXZlID0gRkFMU0UpCmBgYAoKIyBNYWluIFJlc3VsdHMKCiMjIHsudW5udW1iZXJlZCAudGFic2V0IC50YWJzZXQtdm1vZGVybn0KCkludGVycHJldCBhbmQgc3VtbWFyaXplIHRoZSBwcmVkaWN0aW9uIGFuZCBzdGFiaWxpdHkgcmVzdWx0cy4KCmBgYHthc2lzLCBpbnRlcmFjdGl2ZV90ZXh0ID0gVFJVRX0KCmBgYAoKRXZhbHVhdGUgcGlwZWxpbmUgb24gdGVzdCBkYXRhLgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpDYXJlZnVsISBSZW1lbWJlciB0aGF0ICoqdGVzdCBkYXRhIHNob3VsZCBvbmx5IGJlIHRvdWNoZWQgb25jZSoqLiBUaGVzZSByZXN1bHRzIHNob3VsZCBub3QgYmUgdXNlZCB0byBtYWtlIHBvc3QtYW5hbHlzaXMgbW9kZWxpbmcgZGVjaXNpb25zLiBUaGlzIGlzICJkb3VibGUtZGlwcGluZyIgYW5kIG5vdCBhbiBhY2N1cmF0ZSBtZWFzdXJlbWVudCBvZiBvdXQtb2Ytc2FtcGxlIGFjY3VyYWN5LgpgYGAKCmBgYHtyIGZpbmFsLWZpdHN9Clh0cmFpbl9maW5hbCA8LSBkcGx5cjo6YmluZF9yb3dzKFh0cmFpbiwgWHZhbGlkKQp5dHJhaW5fZmluYWwgPC0gYyh5dHJhaW4sIHl2YWxpZCkKCiMgZml0L3RyYWluIG1vZGVscwpmaXRfcmVzdWx0c19maW5hbCA8LSBmaXRfbW9kZWxzKFh0cmFpbiA9IFh0cmFpbl9maW5hbCwgeXRyYWluID0geXRyYWluX2ZpbmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsX2xpc3QgPSBtb2RlbF9saXN0LCBjdl9vcHRpb25zID0gY3Zfb3B0aW9ucywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSBwYXJhbXMkbW9kZWxpbmdfcGtnKQoKIyBtYWtlIHByZWRpY3Rpb24gb24gdGVzdCBzZXQKcHJlZF9yZXN1bHRzX2ZpbmFsIDwtIHByZWRpY3RfbW9kZWxzKGZpdF9saXN0ID0gZml0X3Jlc3VsdHNfZmluYWwsIFh0ZXN0ID0gWHRlc3QpCgojIGV2YWx1YXRlIHByZWRpY3Rpb25zIG9uIHRlc3Qgc2V0CmV2YWxfcmVzdWx0c19maW5hbCA8LSBldmFsdWF0ZV9tb2RlbHMocHJlZF9kZiA9IHByZWRfcmVzdWx0c19maW5hbCwgeXRlc3QgPSB5dGVzdCkKCiMgY29sbGVjdCBmZWF0dXJlIGltcG9ydGFuY2UgbWV0cmljcyBmcm9tIG1vZGVsIGZpdHMKaW1wX3Jlc3VsdHNfZmluYWwgPC0gaW50ZXJwcmV0X21vZGVscyhmaXRfbGlzdCA9IGZpdF9yZXN1bHRzX2ZpbmFsKQpgYGAKClN1bW1hcml6ZSB0ZXN0IHNldCBwcmVkaWN0aW9uIGFuZC9vciBpbnRlcnByZXRhYmlsaXR5IHJlc3VsdHMuCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCgojIyMgRml0IFN1bW1hcnkgey51bm51bWJlcmVkIC50YWJzZXQgLnRhYnNldC1waWxsc30KCmBgYHtyIGZpbmFsLWZpdC1zdW1tYXJ5LCBlY2hvID0gRkFMU0UsIHJlc3VsdHMgPSAiYXNpcyJ9CiMgcHJpbnQgb3V0IGZpdCBvdXRwdXQgc3VtbWFyeQpwcmludF9maXRfcmVzdWx0cyhmaXRfcmVzdWx0c19maW5hbCkKYGBgCgojIyMgUHJlZGljdGlvbiBSZXN1bHRzIHsudW5udW1iZXJlZH0KCmBgYHtyIGZpbmFsLXByZWRpY3Rpb24tcmVzdWx0cywgZWNobyA9IEZBTFNFLCByZXN1bHRzID0gImFzaXMifQojIGRpc3BsYXkgcHJlZGljdGlvbiBtZXRyaWNzLCBjb25mdXNpb24gbWF0cmljZXMsIGFuZCByb2MvcHIgcGxvdHMgaWYgYXBwbGljYWJsZQpwcmludF9ldmFsX3Jlc3VsdHMoZXZhbF9yZXN1bHRzX2ZpbmFsLCB0ZXN0X3NldCA9IFRSVUUsIGRpZ2l0cyA9IDIsIHNpZ2ZpZyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgaHRtbF9vcHRpb25zID0gbGlzdCgKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyA9IGxpc3QoZG9tID0gInQiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZUxlbmd0aCA9IG5yb3coZXZhbF9yZXN1bHRzX2ZpbmFsKSkKICAgICAgICAgICAgICAgICAgICkpCmBgYAoKIyBQb3N0IGhvYyBhbmFseXNpcwoKTW92ZSBiZXlvbmQgdGhlIGdsb2JhbCBwcmVkaWN0aW9uIGFjY3VyYWN5IG1ldHJpY3MgYW5kIGRpdmUgZGVlcGVyIGludG8gaW5kaXZpZHVhbC1sZXZlbCBwcmVkaWN0aW9ucyBmb3IgdGhlIHZhbGlkYXRpb24gYW5kL29yIHRlc3Qgc2V0LCBpLmUuLCBwcm92aWRlIGEgbW9yZSAibG9jYWwiIGFuYWx5c2lzLgoKRXhhbWluZSBhbnkgcG9pbnRzIHRoYXQgaGFkIHBvb3IgcHJlZGljdGlvbnMuCgpgYGB7YXNpcywgaGVscCA9IFRSVUV9CkFzIG1lbnRpb25lZCBpbiB0aGUgc3RhYmlsaXR5IGFuYWx5c2lzLCBjaGVjayBmb3IgYW55IGNvbW1vbmFsaXRpZXMgYW1vbmcgcGVydHVyYmF0aW9ucywgb3Igc3BlY2lmaWMgb2JzZXJ2YXRpb25zLCB0aGF0IHJlc3VsdGVkIGluIHBvb3IgYWNjdXJhY3kgbWV0cmljcyBhY3Jvc3MgcHJvY2VkdXJlcy4KYGBgCgpFeGFtaW5lIGRpZmZlcmVuY2VzIGJldHdlZW4gcHJlZGljdGlvbiBtZXRob2RzLgoKYGBge2FzaXMsIGhlbHAgPSBUUlVFfQpBcmUgdGhlcmUgY2VydGFpbiBtZXRob2RzIHRoYXQgbWF5IG5vdCBiZSBvdmVyYWxsIHRoZSBtb3N0IGFjY3VyYXRlLCBidXQgb3V0cGVyZm9ybSBvdGhlcnMgb24gdGhlIG1vcmUgImNoYWxsZW5naW5nIiB2YWxpZGF0aW9uL3Rlc3Qgb2JzZXJ2YXRpb25zPyBDb252ZXJzZWx5LCBhcmUgc29tZSBwcm9jZWR1cmVzIHZlcnkgZWZmZWN0aXZlIGFjcm9zcyB0aGUgbWFqb3JpdHkgb2Ygb2JzZXJ2YXRpb25zLCBidXQgc29tZSBvdXRseWluZyBiZWhhdmlvciBlZmZlY3RzIG92ZXJhbGwgcmVzdWx0cz8KYGBgCgpgYGB7YXNpcywgaW50ZXJhY3RpdmVfdGV4dCA9IFRSVUV9CgpgYGAKCmBgYHtyIHBvc3Rob2MtcGFpci1wbG90fQpwcmVkX3Jlc3VsdHNfZmluYWwgJT4lCiAgZHBseXI6Om11dGF0ZSguaWQgPSByZXAoMTpucm93KFh0ZXN0KSwgbGVuZ3RoLm91dCA9IGRwbHlyOjpuKCkpKSAlPiUKICB0aWR5cjo6cGl2b3Rfd2lkZXIoaWRfY29scyA9IC5pZCwgCiAgICAgICAgICAgICAgICAgICAgIG5hbWVzX2Zyb20gPSAibWV0aG9kIiwgdmFsdWVzX2Zyb20gPSAicHJlZGljdGlvbnMiKSAlPiUKICBkcGx5cjo6bXV0YXRlKGBUcnVlIFJlc3BvbnNlc2AgPSB5dGVzdCkgJT4lCiAgcGxvdF9wYWlycyhjb2x1bW5zID0gMjoobGVuZ3RoKHVuaXF1ZShwcmVkX3Jlc3VsdHNfZmluYWwkbWV0aG9kKSkgKyAyKSwKICAgICAgICAgICAgIHRpdGxlID0gIkNvbXBhcmlzb24gb2YgbW9kZWwgdGVzdCBwcmVkaWN0aW9ucyIpCmBgYAoKIyBDb25jbHVzaW9ucwoKUmVpdGVyYXRlIG1haW4gZmluZGluZ3MsIG5vdGUgYW55IGNhdmVhdHMsIGFuZCBjbGVhcmx5IHRyYW5zbGF0ZSBmaW5kaW5ncy9hbmFseXNpcyBiYWNrIHRvIHRoZSBkb21haW4gcHJvYmxlbSBjb250ZXh0LgoKYGBge2FzaXMsIGludGVyYWN0aXZlX3RleHQgPSBUUlVFfQoKYGBgCgo=