#'@title Normalize Design
#'
#'@description Normalizes the numeric columns in the design to -1 to 1. This is important to do if your model has interaction or polynomial terms,
#'as these terms can introduce multi-collinearity and standardizing the numeric columns can reduce this problem.
#'
#'@param design The design matrix.
#'@param augmented Default `NULL`. If augmenting an existing design, this should be the pre-existing design. The column types must match design
#'
#'@return Normalized design matrix
#'@export
#'@examples
#'#Normalize a design
#'if(skpr:::run_documentation()) {
#'cand_set = expand.grid(temp = c(100,300,500),
#' altitude = c(10000,20000),
#' offset = seq(-10,-5,by=1),
#' type = c("A","B", "C"))
#'design = gen_design(cand_set, ~., 24)
#'
#'#Un-normalized design
#'design
#'}
#'if(skpr:::run_documentation()) {
#'#Normalized design
#'normalize_design(design)
#'}
normalize_design = function(design, augmented = NULL) {
if (!is.null(augmented)) {
all_equal_classes = all(identical(
lapply(design, class),
unlist(lapply(augmented, class))
))
if (!all_equal_classes) {
stop(
"Design to be augmented and new design must have identical column classes"
)
}
for (column in 1:ncol(design)) {
if (is.numeric(design[, column])) {
midvalue = mean(c(
max(c(design[, column], augmented[, column])),
min(c(design[, column], augmented[, column]))
))
design[, column] = (design[, column] - midvalue) /
(max(c(design[, column], augmented[, column])) - midvalue)
}
}
} else {
for (column in 1:ncol(design)) {
if (is.numeric(design[, column])) {
midvalue = mean(c(max(design[, column]), min(design[, column])))
design[, column] = (design[, column] - midvalue) /
(max(design[, column]) - midvalue)
}
}
}
return(design)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.