diff --git a/models/files/glmnet.R b/models/files/glmnet.R index a912aa9a..44afea7a 100644 --- a/models/files/glmnet.R +++ b/models/files/glmnet.R @@ -122,7 +122,7 @@ modelInfo <- list(label = "glmnet", if(length(lambda) > 1) stop("Only one value of lambda is allowed right now") if(!is.null(x$lambdaOpt)) { lambda <- x$lambdaOpt - } else stop("must supply a vaue of lambda") + } else stop("must supply a value of lambda") } allVar <- if(is.list(x$beta)) rownames(x$beta[[1]]) else rownames(x$beta) out <- unlist(predict(x, s = lambda, type = "nonzero")) @@ -138,14 +138,14 @@ modelInfo <- list(label = "glmnet", if(length(lambda) > 1) stop("Only one value of lambda is allowed right now") if(!is.null(object$lambdaOpt)) { lambda <- object$lambdaOpt - } else stop("must supply a vaue of lambda") + } else stop("must supply a value of lambda") } beta <- predict(object, s = lambda, type = "coef") if(is.list(beta)) { out <- do.call("cbind", lapply(beta, function(x) x[,1])) out <- as.data.frame(out) } else out <- data.frame(Overall = beta[,1]) - out <- out[rownames(out) != "(Intercept)",,drop = FALSE] + out <- abs(out[rownames(out) != "(Intercept)",,drop = FALSE]) out }, levels = function(x) if(any(names(x) == "obsLevels")) x$obsLevels else NULL, diff --git a/pkg/caret/inst/models/models.RData b/pkg/caret/inst/models/models.RData deleted file mode 100644 index 990bfcee..00000000 Binary files a/pkg/caret/inst/models/models.RData and /dev/null differ diff --git a/pkg/caret/tests/testthat/test_varImp.R b/pkg/caret/tests/testthat/test_varImp.R new file mode 100644 index 00000000..ef3a3525 --- /dev/null +++ b/pkg/caret/tests/testthat/test_varImp.R @@ -0,0 +1,25 @@ +library(caret) + +context('Testing varImp') + +test_that('glmnet varImp returns non-negative values', { + skip_on_cran() + skip_if_not_installed('glmnet') + set.seed(1) + dat <- SLC14_1(200) + + reg <- train(y ~ ., data = dat, + method = "glmnet", + tuneGrid = data.frame(lambda = .1, alpha = .5), + trControl = trainControl(method = "none")) + + # this checks that some coefficients are negative + coefs <- predict(reg$finalModel, s=0.1, type="coef") + expect_less_than(0, sum(0 > coefs)) + # now check that all elements of varImp are nonnegative, + # in spite of negative coefficients + vis <- varImp(reg, s=0.1, scale=F)$importance + expect_equal(0, sum(0 > vis)) +}) + +