{vip} package provides variant importance with model agonistic methods like permutation. The permutation method for glmnet model needs additional argument newx for predict.glmnet().
The second question is which metric should be selected for poison regression.
library(poissonreg)
#> Loading required package: parsnip
library(tidyverse)
#> Warning: package 'tibble' was built under R version 4.0.3
library(tidymodels)
#> -- Attaching packages --------------------------------- tidymodels 0.1.1.9000 --
#> √ broom 0.7.2 √ rsample 0.0.8.9000
#> √ dials 0.0.9.9000 √ tune 0.1.1.9000
#> √ infer 0.5.3 √ workflows 0.2.1.9000
#> √ modeldata 0.1.0 √ yardstick 0.0.7
#> √ recipes 0.1.14
#> Warning: package 'broom' was built under R version 4.0.3
#> Warning: package 'modeldata' was built under R version 4.0.3
#> Warning: package 'recipes' was built under R version 4.0.3
#> -- Conflicts ----------------------------------------- tidymodels_conflicts() --
#> x scales::discard() masks purrr::discard()
#> x dplyr::filter() masks stats::filter()
#> x recipes::fixed() masks stringr::fixed()
#> x dplyr::lag() masks stats::lag()
#> x yardstick::spec() masks readr::spec()
#> x recipes::step() masks stats::step()
library(vip)
#>
#> Attaching package: 'vip'
#> The following object is masked from 'package:utils':
#>
#> vi
## vi with permute method for model with glmnet engine needs additional argument "newx" for predict.glmnet
glmnet_fit <- poisson_reg() %>%
set_engine("glmnet") %>%
fit(count ~ (.) ^ 2, data = seniors)
glmnet_fit %>%
vi(
method = "permute",
train = seniors,
target = count,
metric = "rsquared",
pred_wrapper = predict,
nsim = 10
)
#> Error in predict.glmnet(object, newdata = train_x): You need to supply a value for 'newx'
## vi with model method works
glmnet_fit %>%
vi(method = "model")
#> # A tibble: 6 x 3
#> Variable Importance Sign
#> <chr> <dbl> <chr>
#> 1 marijuanayes:cigaretteyes 2.78 POS
#> 2 marijuanayes:alcoholyes 2.42 POS
#> 3 cigaretteyes:alcoholyes 2.03 POS
#> 4 alcoholyes 0.492 POS
#> 5 cigaretteyes -1.85 NEG
#> 6 marijuanayes -4.68 NEG
## glm engine works
glm_fit <- poisson_reg() %>%
set_engine("glm") %>%
fit(count ~ (.) ^ 2, data = seniors)
glm_fit %>%
vi(
method = "permute",
train = seniors,
target = "count",
metric = "rsquared",
pred_wrapper = predict,
nsim = 10
)
#> # A tibble: 3 x 3
#> Variable Importance StDev
#> <chr> <dbl> <dbl>
#> 1 alcohol 0.453 0.214
#> 2 cigarette 0.249 0.253
#> 3 marijuana 0.247 0.163
Created on 2020-11-03 by the reprex package (v0.3.0)