pscl::zeroinfl()
uses maximum likelihood estimation to fit a model for
count data that has separate model terms for predicting the counts and for
predicting the probability of a zero count.
Details
For this engine, there is a single mode: regression
Translation from parsnip to the underlying model call (regression)
The poissonreg extension package is required to fit this model.
library(poissonreg)
poisson_reg() %>%
set_engine("zeroinfl") %>%
translate()
Preprocessing and special formulas for zero-inflated Poisson models
Factor/categorical predictors need to be converted to numeric values
(e.g., dummy or indicator variables) for this engine. When using the
formula method via fit()
, parsnip will
convert factor columns to indicators.
Specifying the statistical model details
For this particular model, a special formula is used to specify which
columns affect the counts and which affect the model for the probability
of zero counts. These sets of terms are separated by a bar. For example,
y ~ x | z
. This type of formula is not used by the base R
infrastructure (e.g. model.matrix()
)
When fitting a parsnip model with this engine directly, the formula method is required and the formula is just passed through. For example:
library(tidymodels)
tidymodels_prefer()
data("bioChemists", package = "pscl")
poisson_reg() %>%
set_engine("zeroinfl") %>%
fit(art ~ fem + mar | ment, data = bioChemists)
## parsnip model object
##
##
## Call:
## pscl::zeroinfl(formula = art ~ fem + mar | ment, data = data)
##
## Count model coefficients (poisson with log link):
## (Intercept) femWomen marMarried
## 0.82840 -0.21365 0.02576
##
## Zero-inflation model coefficients (binomial with logit link):
## (Intercept) ment
## -0.363 -0.166
However, when using a workflow, the best approach is to avoid using
workflows::add_formula()
and use
workflows::add_variables()
in
conjunction with a model formula:
data("bioChemists", package = "pscl")
spec <-
poisson_reg() %>%
set_engine("zeroinfl")
workflow() %>%
add_variables(outcomes = c(art), predictors = c(fem, mar, ment)) %>%
add_model(spec, formula = art ~ fem + mar | ment) %>%
fit(data = bioChemists) %>%
extract_fit_engine()
##
## Call:
## pscl::zeroinfl(formula = art ~ fem + mar | ment, data = data)
##
## Count model coefficients (poisson with log link):
## (Intercept) femWomen marMarried
## 0.82840 -0.21365 0.02576
##
## Zero-inflation model coefficients (binomial with logit link):
## (Intercept) ment
## -0.363 -0.166
The reason for this is that
workflows::add_formula()
will try to
create the model matrix and either fail or create dummy variables
prematurely.
Case weights
This model can utilize case weights during model fitting. To use them,
see the documentation in case_weights and the examples
on tidymodels.org
.
The fit()
and fit_xy()
arguments have arguments called
case_weights
that expect vectors of case weights.