From e84218d160be5affc820bc33c24ddb8cbffffdc2 Mon Sep 17 00:00:00 2001 From: fawda123 Date: Tue, 29 Sep 2015 13:38:03 -0500 Subject: [PATCH] default method for olden, y-axis labels for garson and olden now identical --- DESCRIPTION | 2 +- NAMESPACE | 1 + R/NeuralNetTools_gar.R | 8 +- R/NeuralNetTools_old.R | 418 ++++-------------- README.Rmd | 2 +- README.html | 2 +- README.md | 2 +- .../figure-html/unnamed-chunk-6-1.png | Bin 15585 -> 15198 bytes .../figure-html/unnamed-chunk-7-1.png | Bin 6513 -> 4349 bytes .../figure-html/unnamed-chunk-8-1.png | Bin 5828 -> 4255 bytes .../figure-html/unnamed-chunk-9-1.png | Bin 10464 -> 10636 bytes man/olden.Rd | 49 +- 12 files changed, 130 insertions(+), 354 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 06952d7..0457a85 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: NeuralNetTools Type: Package Title: Visualization and Analysis Tools for Neural Networks -Version: 1.3.15.9000 +Version: 1.3.16.9000 Date: 2015-09-29 Author: Marcus W. Beck [aut, cre] Maintainer: Marcus W. Beck diff --git a/NAMESPACE b/NAMESPACE index b9533e0..7902b23 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -16,6 +16,7 @@ S3method(neuralweights,mlp) S3method(neuralweights,nn) S3method(neuralweights,nnet) S3method(neuralweights,numeric) +S3method(olden,default) S3method(olden,mlp) S3method(olden,nn) S3method(olden,nnet) diff --git a/R/NeuralNetTools_gar.R b/R/NeuralNetTools_gar.R index 145133b..9d86262 100644 --- a/R/NeuralNetTools_gar.R +++ b/R/NeuralNetTools_gar.R @@ -112,7 +112,7 @@ garson.default <- function(mod_in, x_names, y_names, bar_plot = TRUE, x_lab = NU if(!is.null(y_lab)){ y_names <- y_lab } else { - y_names <- 'Relative importance' + y_names <- 'Importance' } # the default method works with weight list @@ -160,11 +160,11 @@ garson.default <- function(mod_in, x_names, y_names, bar_plot = TRUE, x_lab = NU to_plo$x_names <- factor(x_names[order(rel_imp)], levels = x_names[order(rel_imp)]) out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = rel_imp, fill = rel_imp, colour = rel_imp)) + - geom_bar(stat = 'identity') + + geom_bar(stat = 'identity', position = 'identity') + scale_x_discrete(element_blank()) + scale_y_continuous(y_names) + - theme(legend.title = element_blank()) + - theme_bw() + theme_bw() + + theme(legend.position = 'none') return(out_plo) diff --git a/R/NeuralNetTools_old.R b/R/NeuralNetTools_old.R index 0316368..763f465 100644 --- a/R/NeuralNetTools_old.R +++ b/R/NeuralNetTools_old.R @@ -2,9 +2,15 @@ #' #' Relative importance of input variables in neural networks as the sum of the product of raw input-hidden, hidden-output connection weights, proposed by Olden et al. 2004. #' -#' @param mod_in input object for which an organized model list is desired. The input can be an object of class \code{numeric}, \code{nnet}, \code{mlp}, or \code{nn} +#' @param mod_in input model object or a list of model weights as returned from \code{\link{neuralweights}} if using the default method +#' @param x_names chr string of input variable names, obtained from the model object +#' @param y_names chr string of response variable names, obtained from the model object #' @param out_var chr string indicating the response variable in the neural network object to be evaluated. Only one input is allowed for models with more than one response. Names must be of the form \code{'Y1'}, \code{'Y2'}, etc. if using numeric values as weight inputs for \code{mod_in}. -#' @param ... arguments passed to other methods +#' @param bar_plot logical indicating if a \code{ggplot} object is returned (default \code{T}), otherwise numeric values are returned +#' @param x_lab chr string of alternative names to be used for explanatory variables in the figure, default is taken from \code{mod_in} +#' @param y_lab chr string of alternative names to be used for response variable in the figure, default is taken from \code{out_var} +#' @param skip_wts vector from \code{\link{neuralskips}} for \code{\link[nnet]{nnet}} models with skip-layer connections +#' @param ... arguments passed to or from other methods #' #' @details #' This method is similar to Garson's algorithm (Garson 1991, modified by Goh 1995) in that the connection weights between layers of a neural network form the basis for determining variable importance. However, Olden et al. 2004 describe a connection weights algorithm that consistently out-performed Garson's algorithm in representing the true variable importance in simulated datasets. This `Olden' method calculates variable importance as the product of the raw input-hidden and hidden-output connection weights between each input and output neuron and sums the product across all hidden neurons. An advantage of this approach is the relative contributions of each connection weight are maintained in terms of both magnitude and sign as compared to Garson's algorithm which only considers the absolute magnitude. For example, connection weights that change sign (e.g., positive to negative) between the input-hidden to hidden-output layers would have a cancelling effect whereas Garson's algorithm may provide misleading results based on the absolute magnitude. An additional advantage is that Olden's algorithm is capable of evaluating neural networks with multiple hidden layers wheras Garson's was developed for networks with a single hidden layer. @@ -36,7 +42,7 @@ #' wts_in <- c(13.12, 1.49, 0.16, -0.11, -0.19, -0.16, 0.56, -0.52, 0.81) #' struct <- c(2, 2, 1) #two inputs, two hidden, one output #' -#' olden(wts_in, 'Y1', struct) +#' olden(wts_in, struct) #' #' ## using nnet #' @@ -47,7 +53,7 @@ #' #' mod <- nnet(Y1 ~ X1 + X2 + X3, data = neuraldat, size = 5) #' -#' olden(mod, 'Y1') +#' olden(mod) #' #' ## View the difference for a model w/ skip layers #' @@ -55,7 +61,7 @@ #' #' mod <- nnet(Y1 ~ X1 + X2 + X3, data = neuraldat, size = 5, skip = TRUE) #' -#' olden(mod, 'Y1') +#' olden(mod) #' #' ## using RSNNS, no bias layers #' @@ -65,7 +71,7 @@ #' y <- neuraldat[, 'Y1'] #' mod <- mlp(x, y, size = 5) #' -#' olden(mod, 'Y1') +#' olden(mod) #' #' ## using neuralnet #' @@ -73,7 +79,7 @@ #' #' mod <- neuralnet(Y1 ~ X1 + X2 + X3, data = neuraldat, hidden = 5) #' -#' olden(mod, 'Y1') +#' olden(mod) #' #' ## using caret #' @@ -82,7 +88,7 @@ #' #' mod <- train(Y1 ~ X1 + X2 + X3, method = 'nnet', data = neuraldat, linout = TRUE) #' -#' olden(mod, 'Y1') +#' olden(mod) #' #' } #' @@ -92,38 +98,23 @@ #' y <- neuraldat[, 'Y1'] #' mod <- mlp(x, y, size = c(5, 7, 6), linOut = TRUE) #' -#' olden(mod, 'Y1') -olden <- function(mod_in, out_var, ...) UseMethod('olden') - +#' olden(mod) +olden <- function(mod_in, ...) UseMethod('olden') + #' @rdname olden #' -#' @param bar_plot logical indicating if a \code{ggplot} object is returned (default \code{T}), otherwise numeric values are returned -#' @param struct numeric vector equal in length to the number of layers in the network. Each number indicates the number of nodes in each layer starting with the input and ending with the output. An arbitrary number of hidden layers can be included. -#' @param x_lab chr string of alternative names to be used for explanatory variables in the figure, default is taken from \code{mod_in} -#' @param y_lab chr string of alternative names to be used for response variable in the figure, default is taken from \code{out_var} -#' @param wts_only logical passed to \code{\link{neuralweights}}, default \code{FALSE} -#' #' @export #' -#' @method olden numeric -olden.numeric <- function(mod_in, out_var, struct, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...){ +#' @method olden default +olden.default <- function(mod_in, x_names, y_names, out_var = NULL, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, skip_wts = NULL, ...){ - # get model weights - best_wts <- neuralweights(mod_in, struct = struct) - struct <- best_wts$struct - best_wts <- best_wts$wts + # get index value for response variable to measure + if(is.null(out_var)) out_var <- y_names[1] - # weights only if TRUE - if(wts_only) return(best_wts) + # stop if out_var is not a named variable + if(!out_var %in% y_names) stop('out_var not a named response variable') + else out_ind <- grep(out_var, y_names) - #get variable names from mod_in object - #change to user input if supplied - x_names <- paste0(rep('X', struct[1]), seq(1:struct[1])) - y_names <- paste0(rep('Y', struct[3]), seq(1:struct[3])) - - # get index value for response variable to measure - out_ind <- as.numeric(gsub('^[A-Z]', '', out_var)) - #change variables names to user sub if(!is.null(x_lab)){ if(length(x_names) != length(x_lab)) stop('x_lab length not equal to number of input variables') @@ -135,14 +126,17 @@ olden.numeric <- function(mod_in, out_var, struct, bar_plot = TRUE, x_lab = NULL y_names <- 'Importance' } + # the default method works with weight list + wts_in <- mod_in + # organize hidden layer weights for matrix mult - inp_hid <- best_wts[grep('hidden', names(best_wts))] + inp_hid <- wts_in[grep('hidden', names(wts_in))] split_vals <- substr(names(inp_hid), 1, 8) inp_hid <- split(inp_hid, split_vals) inp_hid <- lapply(inp_hid, function(x) t(do.call('rbind', x))[-1, ]) # final layer weights for output - hid_out <- best_wts[[grep(paste('out', out_ind), names(best_wts))]][-1] + hid_out <- wts_in[[grep(paste('out', out_ind), names(wts_in))]][-1] # matrix multiplication of output layer with connecting hidden layer max_i <- length(inp_hid) @@ -163,50 +157,69 @@ olden.numeric <- function(mod_in, out_var, struct, bar_plot = TRUE, x_lab = NULL } + # add skip_wts + if(!is.null(skip_wts)) sum_in <- unlist(skip_wts) + sum_in + if(!bar_plot){ out <- data.frame(importance) row.names(out) <- x_names return(out) } - + to_plo <- data.frame(importance, x_names)[order(importance), , drop = FALSE] to_plo$x_names <- factor(x_names[order(importance)], levels = x_names[order(importance)]) out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = importance, fill = importance, colour = importance)) + - geom_bar(stat = 'identity') + + geom_bar(stat = 'identity', position = 'identity') + scale_x_discrete(element_blank()) + scale_y_continuous(y_names) + - theme(legend.title = element_blank()) + theme_bw() + + theme(legend.position = 'none') + return(out_plo) + } - + #' @rdname olden +#' +#' @param struct numeric vector equal in length to the number of layers in the network. Each number indicates the number of nodes in each layer starting with the input and ending with the output. An arbitrary number of hidden layers can be included. #' #' @export #' -#' @method olden nnet -olden.nnet <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...){ +#' @method olden numeric +olden.numeric <- function(mod_in, struct, ...){ + + #get variable names from mod_in object + x_names <- paste0(rep('X', struct[1]), seq(1:struct[1])) + y_names <- paste0(rep('Y', struct[3]), seq(1:struct[3])) # get model weights - best_wts <- neuralweights(mod_in) - struct <- best_wts$struct - best_wts <- best_wts$wts + wts_in <- neuralweights(mod_in, struct = struct) + struct <- wts_in$struct + wts_in <- wts_in$wts + + olden.default(wts_in, x_names, y_names, ...) + +} + +#' @rdname olden +#' +#' @export +#' +#' @method olden nnet +olden.nnet <- function(mod_in, ...){ # check for skip layers - chk <- grepl('skip-layer', capture.output(mod_in)) - if(any(chk)){ - skip_wts <- neuralskips(mod_in) - } - - # weights only if TRUE - if(wts_only) return(best_wts) + skip_wts <- try(neuralskips(mod_in), silent = TRUE) + if(inherits(skip_wts, 'try-error')) skip_wts <- NULL # get variable names from mod_in object - # separate methdos if nnet called with formula + # separate methods if nnet called with formula if(is.null(mod_in$call$formula)){ - x_names <- colnames(eval(mod_in$call$x)) + x_names <- + colnames(eval(mod_in$call$x)) y_names <- colnames(eval(mod_in$call$y)) } else{ @@ -218,67 +231,12 @@ olden.nnet <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = N else y_names <- as.character(forms)[2] } - # get index value for response variable to measure - out_ind <- grep(out_var, y_names) - - #change variables names to user sub - if(!is.null(x_lab)){ - if(length(x_names) != length(x_lab)) stop('x_lab length not equal to number of input variables') - else x_names <- x_lab - } - if(!is.null(y_lab)){ - y_names <- y_lab - } else { - y_names <- 'Importance' - } - - # organize hidden layer weights for matrix mult - inp_hid <- best_wts[grep('hidden', names(best_wts))] - split_vals <- substr(names(inp_hid), 1, 8) - inp_hid <- split(inp_hid, split_vals) - inp_hid <- lapply(inp_hid, function(x) t(do.call('rbind', x))[-1, ]) - - # final layer weights for output - hid_out <- best_wts[[grep(paste('out', out_ind), names(best_wts))]][-1] - - # matrix multiplication of output layer with connecting hidden layer - max_i <- length(inp_hid) - sum_in <- inp_hid[[max_i]] %*% matrix(hid_out) - - # recursive matrix multiplication for all remaining hidden layers - # only for multiple hidden layers - if(max_i != 1){ - - for(i in (max_i - 1):1) sum_in <- as.matrix(inp_hid[[i]]) %*% sum_in - - # final contribution vector for all inputs - importance <- sum_in - - } else { - - importance <- sum_in - - } - - # add skip_wts - if(any(chk)) sum_in <- unlist(skip_wts) + sum_in - - if(!bar_plot){ - out <- data.frame(importance) - row.names(out) <- x_names - return(out) - } - - to_plo <- data.frame(importance, x_names)[order(importance), , drop = FALSE] - to_plo$x_names <- factor(x_names[order(importance)], levels = x_names[order(importance)]) - out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = importance, fill = importance, - colour = importance)) + - geom_bar(stat = 'identity') + - scale_x_discrete(element_blank()) + - scale_y_continuous(y_names) + - theme(legend.title = element_blank()) + # get model weights + wts_in <- neuralweights(mod_in) + struct <- wts_in$struct + wts_in <- wts_in$wts - return(out_plo) + olden.default(wts_in, x_names, y_names, skip_wts = skip_wts, ...) } @@ -287,80 +245,19 @@ olden.nnet <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = N #' @export #' #' @method olden mlp -olden.mlp <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...){ - - # get model weights - best_wts <- neuralweights(mod_in) - struct <- best_wts$struct - best_wts <- best_wts$wts - - # weights only if TRUE - if(wts_only) return(best_wts) +olden.mlp <- function(mod_in, ...){ - #get variable names from mod_in object - #change to user input if supplied + # get variable names from mod_in object all_names <- mod_in$snnsObject$getUnitDefinitions() x_names <- all_names[grep('Input', all_names$unitName), 'unitName'] y_names <- all_names[grep('Output', all_names$unitName), 'unitName'] - # get index value for response variable to measure - out_ind <- grep(out_var, y_names) - - #change variables names to user sub - if(!is.null(x_lab)){ - if(length(x_names) != length(x_lab)) stop('x_lab length not equal to number of input variables') - else x_names <- x_lab - } - if(!is.null(y_lab)){ - y_names <- y_lab - } else { - y_names <- 'Importance' - } - - # organize hidden layer weights for matrix mult - inp_hid <- best_wts[grep('hidden', names(best_wts))] - split_vals <- substr(names(inp_hid), 1, 8) - inp_hid <- split(inp_hid, split_vals) - inp_hid <- lapply(inp_hid, function(x) t(do.call('rbind', x))[-1, ]) - - # final layer weights for output - hid_out <- best_wts[[grep(paste('out', out_ind), names(best_wts))]][-1] - - # matrix multiplication of output layer with connecting hidden layer - max_i <- length(inp_hid) - sum_in <- inp_hid[[max_i]] %*% matrix(hid_out) - - # recursive matrix multiplication for all remaining hidden layers - # only for multiple hidden layers - if(max_i != 1){ - - for(i in (max_i - 1):1) sum_in <- as.matrix(inp_hid[[i]]) %*% sum_in - - # final contribution vector for all inputs - importance <- sum_in - - } else { - - importance <- sum_in - - } - - if(!bar_plot){ - out <- data.frame(importance) - row.names(out) <- x_names - return(out) - } - - to_plo <- data.frame(importance, x_names)[order(importance), , drop = FALSE] - to_plo$x_names <- factor(x_names[order(importance)], levels = x_names[order(importance)]) - out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = importance, fill = importance, - colour = importance)) + - geom_bar(stat = 'identity') + - scale_x_discrete(element_blank()) + - scale_y_continuous(y_names) + - theme(legend.title = element_blank()) + # get model weights + wts_in <- neuralweights(mod_in) + struct <- wts_in$struct + wts_in <- wts_in$wts - return(out_plo) + olden.default(wts_in, x_names, y_names, ...) } @@ -369,79 +266,18 @@ olden.mlp <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NU #' @export #' #' @method olden nn -olden.nn <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...){ - - # get model weights - best_wts <- neuralweights(mod_in) - struct <- best_wts$struct - best_wts <- best_wts$wts +olden.nn <- function(mod_in, ...){ - # weights only if TRUE - if(wts_only) return(best_wts) - - #get variable names from mod_in object - #change to user input if supplied + # get variable names from mod_in object x_names <- mod_in$model.list$variables y_names <- mod_in$model.list$response - # get index value for response variable to measure - out_ind <- grep(out_var, y_names) - - #change variables names to user sub - if(!is.null(x_lab)){ - if(length(x_names) != length(x_lab)) stop('x_lab length not equal to number of input variables') - else x_names <- x_lab - } - if(!is.null(y_lab)){ - y_names <- y_lab - } else { - y_names <- 'Importance' - } - - # organize hidden layer weights for matrix mult - inp_hid <- best_wts[grep('hidden', names(best_wts))] - split_vals <- substr(names(inp_hid), 1, 8) - inp_hid <- split(inp_hid, split_vals) - inp_hid <- lapply(inp_hid, function(x) t(do.call('rbind', x))[-1, ]) - - # final layer weights for output - hid_out <- best_wts[[grep(paste('out', out_ind), names(best_wts))]][-1] - - # matrix multiplication of output layer with connecting hidden layer - max_i <- length(inp_hid) - sum_in <- inp_hid[[max_i]] %*% matrix(hid_out) - - # recursive matrix multiplication for all remaining hidden layers - # only for multiple hidden layers - if(max_i != 1){ - - for(i in (max_i - 1):1) sum_in <- as.matrix(inp_hid[[i]]) %*% sum_in - - # final contribution vector for all inputs - importance <- sum_in - - } else { - - importance <- sum_in - - } - - if(!bar_plot){ - out <- data.frame(importance) - row.names(out) <- x_names - return(out) - } + # get model weights + wts_in <- neuralweights(mod_in) + struct <- wts_in$struct + wts_in <- wts_in$wts - to_plo <- data.frame(importance, x_names)[order(importance), , drop = FALSE] - to_plo$x_names <- factor(x_names[order(importance)], levels = x_names[order(importance)]) - out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = importance, fill = importance, - colour = importance)) + - geom_bar(stat = 'identity') + - scale_x_discrete(element_blank()) + - scale_y_continuous(y_names) + - theme(legend.title = element_blank()) - - return(out_plo) + olden.default(wts_in, x_names, y_names, ...) } @@ -450,86 +286,22 @@ olden.nn <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NUL #' @export #' #' @method olden train -olden.train <- function(mod_in, out_var, bar_plot = TRUE, x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...){ +olden.train <- function(mod_in, ...){ + + # check for skip layers + skip_wts <- try(neuralskips(mod_in), silent = TRUE) + if(inherits(skip_wts, 'try-error')) skip_wts <- NULL + # get variable names from mod_in object y_names <- strsplit(as.character(mod_in$terms[[2]]), ' + ', fixed = TRUE)[[1]] mod_in <- mod_in$finalModel x_names <- mod_in$xNames # get model weights - best_wts <- neuralweights(mod_in) - struct <- best_wts$struct - best_wts <- best_wts$wts - - # check for skip layers - chk <- grepl('skip-layer', capture.output(mod_in)) - if(any(chk)){ - skip_wts <- neuralskips(mod_in) - } - - # weights only if TRUE - if(wts_only) return(best_wts) - - # get index value for response variable to measure - out_ind <- grep(out_var, y_names) - - #change variables names to user sub - if(!is.null(x_lab)){ - if(length(x_names) != length(x_lab)) stop('x_lab length not equal to number of input variables') - else x_names <- x_lab - } - if(!is.null(y_lab)){ - y_names <- y_lab - } else { - y_names <- 'Importance' - } - - # organize hidden layer weights for matrix mult - inp_hid <- best_wts[grep('hidden', names(best_wts))] - split_vals <- substr(names(inp_hid), 1, 8) - inp_hid <- split(inp_hid, split_vals) - inp_hid <- lapply(inp_hid, function(x) t(do.call('rbind', x))[-1, ]) - - # final layer weights for output - hid_out <- best_wts[[grep(paste('out', out_ind), names(best_wts))]][-1] - - # matrix multiplication of output layer with connecting hidden layer - max_i <- length(inp_hid) - sum_in <- inp_hid[[max_i]] %*% matrix(hid_out) - - # recursive matrix multiplication for all remaining hidden layers - # only for multiple hidden layers - if(max_i != 1){ - - for(i in (max_i - 1):1) sum_in <- as.matrix(inp_hid[[i]]) %*% sum_in - - # final contribution vector for all inputs - importance <- sum_in - - } else { - - importance <- sum_in - - } - - # add skip_wts - if(any(chk)) sum_in <- skip_wts + sum_in + wts_in <- neuralweights(mod_in) + struct <- wts_in$struct + wts_in <- wts_in$wts - if(!bar_plot){ - out <- data.frame(importance) - # row.names(out) <- x_names - return(out) - } - - to_plo <- data.frame(importance, x_names)[order(importance), , drop = FALSE] - to_plo$x_names <- factor(x_names[order(importance)], levels = x_names[order(importance)]) - out_plo <- ggplot2::ggplot(to_plo, aes(x = x_names, y = importance, fill = importance, - colour = importance)) + - geom_bar(stat = 'identity') + - scale_x_discrete(element_blank()) + - scale_y_continuous(y_names) + - theme(legend.title = element_blank()) - - return(out_plo) + olden.default(wts_in, x_names, y_names, skip_wts = skip_wts, ...) } diff --git a/README.Rmd b/README.Rmd index 9a66dfd..7a4e9c2 100644 --- a/README.Rmd +++ b/README.Rmd @@ -86,7 +86,7 @@ The `olden` function is an alternative and more flexible approach to evaluate va ```{r, results = 'hide', fig.height = 3, warning = FALSE, fig.width = 9} # importance of each variable -olden(mod, 'Y1') +olden(mod) ``` The `lekprofile` function performs a simple sensitivity analysis for neural networks. The Lek profile method is fairly generic and can be extended to any statistical model in R with a predict method. However, it is one of few methods to evaluate sensitivity in neural networks. The function begins by predicting the response variable across the range of values for a given explanatory variable. All other explanatory variables are held constant at set values (e.g., minimum, 20th percentile, maximum) that are indicated in the plot legend. The final result is a set of predictions for the response that are evaluated across the range of values for one explanatory variable, while holding all other explanatory variables constant. This is repeated for each explanatory variable to describe the fitted response values returned by the model. diff --git a/README.html b/README.html index 7b27408..6baed7d 100644 --- a/README.html +++ b/README.html @@ -108,7 +108,7 @@

Functions

The olden function is an alternative and more flexible approach to evaluate variable importance. The function calculates iportance as the product of the raw input-hidden and hidden-output connection weights between each input and output neuron and sums the product across all hidden neurons. An advantage of this approach is the relative contributions of each connection weight are maintained in terms of both magnitude and sign as compared to Garson’s algorithm which only considers the absolute magnitude. For example, connection weights that change sign (e.g., positive to negative) between the input-hidden to hidden-output layers would have a cancelling effect whereas Garson’s algorithm may provide misleading results based on the absolute magnitude. An additional advantage is that Olden’s algorithm is capable of evaluating neural networks with multiple hidden layers and response variables. The importance values assigned to each variable are in units that are based directly on the summed product of the connection weights. The actual values should only be interpreted based on relative sign and magnitude between explanatory variables. Comparisons between different models should not be made.

# importance of each variable
-olden(mod, 'Y1')
+olden(mod)

The lekprofile function performs a simple sensitivity analysis for neural networks. The Lek profile method is fairly generic and can be extended to any statistical model in R with a predict method. However, it is one of few methods to evaluate sensitivity in neural networks. The function begins by predicting the response variable across the range of values for a given explanatory variable. All other explanatory variables are held constant at set values (e.g., minimum, 20th percentile, maximum) that are indicated in the plot legend. The final result is a set of predictions for the response that are evaluated across the range of values for one explanatory variable, while holding all other explanatory variables constant. This is repeated for each explanatory variable to describe the fitted response values returned by the model.

# sensitivity analysis
diff --git a/README.md b/README.md
index cc86761..58cccdb 100644
--- a/README.md
+++ b/README.md
@@ -82,7 +82,7 @@ The `olden` function is an alternative and more flexible approach to evaluate va
 
 ```r
 # importance of each variable
-olden(mod, 'Y1')
+olden(mod)
 ```
 
 ![](README_files/figure-html/unnamed-chunk-8-1.png) 
diff --git a/README_files/figure-html/unnamed-chunk-6-1.png b/README_files/figure-html/unnamed-chunk-6-1.png
index 0a8938bac53ff200fb9eb8f46855adaf9e58b4f3..189dbf89855e5e7ed71ac846749a32b25b5f5cd6 100644
GIT binary patch
literal 15198
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

diff --git a/README_files/figure-html/unnamed-chunk-8-1.png b/README_files/figure-html/unnamed-chunk-8-1.png
index fd6e51e165a4cd09cf1db487088dd3b7ffa289a7..8161276860520c49d9a1d6161066672e79c9e379 100644
GIT binary patch
literal 4255
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

literal 5828
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

diff --git a/README_files/figure-html/unnamed-chunk-9-1.png b/README_files/figure-html/unnamed-chunk-9-1.png
index 59fbff461ff8d667ee202da2ea3bf438a85a32ee..d38a6a2348c5aeb3c74824c02edd2739a10250ab 100644
GIT binary patch
literal 10636
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
Sqyf+70lHc@HD6svNB%D@m}pr5

diff --git a/man/olden.Rd b/man/olden.Rd
index 28378c2..5b9324c 100644
--- a/man/olden.Rd
+++ b/man/olden.Rd
@@ -2,6 +2,7 @@
 % Please edit documentation in R/NeuralNetTools_old.R
 \name{olden}
 \alias{olden}
+\alias{olden.default}
 \alias{olden.mlp}
 \alias{olden.nn}
 \alias{olden.nnet}
@@ -9,31 +10,31 @@
 \alias{olden.train}
 \title{Variable importance using connection weights}
 \usage{
-olden(mod_in, out_var, ...)
+olden(mod_in, ...)
 
-\method{olden}{numeric}(mod_in, out_var, struct, bar_plot = TRUE,
-  x_lab = NULL, y_lab = NULL, wts_only = FALSE, ...)
+\method{olden}{default}(mod_in, x_names, y_names, out_var = NULL,
+  bar_plot = TRUE, x_lab = NULL, y_lab = NULL, skip_wts = NULL, ...)
 
-\method{olden}{nnet}(mod_in, out_var, bar_plot = TRUE, x_lab = NULL,
-  y_lab = NULL, wts_only = FALSE, ...)
+\method{olden}{numeric}(mod_in, struct, ...)
 
-\method{olden}{mlp}(mod_in, out_var, bar_plot = TRUE, x_lab = NULL,
-  y_lab = NULL, wts_only = FALSE, ...)
+\method{olden}{nnet}(mod_in, ...)
 
-\method{olden}{nn}(mod_in, out_var, bar_plot = TRUE, x_lab = NULL,
-  y_lab = NULL, wts_only = FALSE, ...)
+\method{olden}{mlp}(mod_in, ...)
 
-\method{olden}{train}(mod_in, out_var, bar_plot = TRUE, x_lab = NULL,
-  y_lab = NULL, wts_only = FALSE, ...)
+\method{olden}{nn}(mod_in, ...)
+
+\method{olden}{train}(mod_in, ...)
 }
 \arguments{
-\item{mod_in}{input object for which an organized model list is desired.  The input can be an object of class \code{numeric}, \code{nnet}, \code{mlp}, or \code{nn}}
+\item{mod_in}{input model object or a list of model weights as returned from \code{\link{neuralweights}} if using the default method}
 
-\item{out_var}{chr string indicating the response variable in the neural network object to be evaluated.  Only one input is allowed for models with more than one response.  Names must be of the form \code{'Y1'}, \code{'Y2'}, etc. if using numeric values as weight inputs for \code{mod_in}.}
+\item{...}{arguments passed to or from other methods}
 
-\item{...}{arguments passed to other methods}
+\item{x_names}{chr string of input variable names, obtained from the model object}
 
-\item{struct}{numeric vector equal in length to the number of layers in the network.  Each number indicates the number of nodes in each layer starting with the input and ending with the output.  An arbitrary number of hidden layers can be included.}
+\item{y_names}{chr string of response variable names, obtained from the model object}
+
+\item{out_var}{chr string indicating the response variable in the neural network object to be evaluated.  Only one input is allowed for models with more than one response.  Names must be of the form \code{'Y1'}, \code{'Y2'}, etc. if using numeric values as weight inputs for \code{mod_in}.}
 
 \item{bar_plot}{logical indicating if a \code{ggplot} object is returned (default \code{T}), otherwise numeric values are returned}
 
@@ -41,7 +42,9 @@ olden(mod_in, out_var, ...)
 
 \item{y_lab}{chr string of alternative names to be used for response variable in the figure, default is taken from \code{out_var}}
 
-\item{wts_only}{logical passed to \code{\link{neuralweights}}, default \code{FALSE}}
+\item{skip_wts}{vector from \code{\link{neuralskips}} for \code{\link[nnet]{nnet}} models with skip-layer connections}
+
+\item{struct}{numeric vector equal in length to the number of layers in the network.  Each number indicates the number of nodes in each layer starting with the input and ending with the output.  An arbitrary number of hidden layers can be included.}
 }
 \value{
 A \code{\link[ggplot2]{ggplot}} object for plotting if \code{bar_plot = FALSE}, otherwise a \code{data.frame} of relative importance values for each input variable.
@@ -62,7 +65,7 @@ The Olden function also works with networks that have skip layers by adding the
 wts_in <- c(13.12, 1.49, 0.16, -0.11, -0.19, -0.16, 0.56, -0.52, 0.81)
 struct <- c(2, 2, 1) #two inputs, two hidden, one output
 
-olden(wts_in, 'Y1', struct)
+olden(wts_in, struct)
 
 ## using nnet
 
@@ -73,7 +76,7 @@ set.seed(123)
 
 mod <- nnet(Y1 ~ X1 + X2 + X3, data = neuraldat, size = 5)
 
-olden(mod, 'Y1')
+olden(mod)
 
 ## View the difference for a model w/ skip layers
 
@@ -81,7 +84,7 @@ set.seed(123)
 
 mod <- nnet(Y1 ~ X1 + X2 + X3, data = neuraldat, size = 5, skip = TRUE)
 
-olden(mod, 'Y1')
+olden(mod)
 
 ## using RSNNS, no bias layers
 
@@ -91,7 +94,7 @@ x <- neuraldat[, c('X1', 'X2', 'X3')]
 y <- neuraldat[, 'Y1']
 mod <- mlp(x, y, size = 5)
 
-olden(mod, 'Y1')
+olden(mod)
 
 ## using neuralnet
 
@@ -99,7 +102,7 @@ library(neuralnet)
 
 mod <- neuralnet(Y1 ~ X1 + X2 + X3, data = neuraldat, hidden = 5)
 
-olden(mod, 'Y1')
+olden(mod)
 
 ## using caret
 
@@ -108,7 +111,7 @@ library(caret)
 
 mod <- train(Y1 ~ X1 + X2 + X3, method = 'nnet', data = neuraldat, linout = TRUE)
 
-olden(mod, 'Y1')
+olden(mod)
 
 }
 
@@ -118,7 +121,7 @@ x <- neuraldat[, c('X1', 'X2', 'X3')]
 y <- neuraldat[, 'Y1']
 mod <- mlp(x, y, size = c(5, 7, 6), linOut = TRUE)
 
-olden(mod, 'Y1')
+olden(mod)
 }
 \references{
 Garson, G.D. 1991. Interpreting neural network connection weights. Artificial Intelligence Expert. 6(4):46-51.