1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115
|
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/impute_lm.R
\name{step_impute_linear}
\alias{step_impute_linear}
\alias{tidy.step_impute_linear}
\title{Imputation of numeric variables via a linear model.}
\usage{
step_impute_linear(
recipe,
...,
role = NA,
trained = FALSE,
impute_with = imp_vars(all_predictors()),
models = NULL,
skip = FALSE,
id = rand_id("impute_linear")
)
\method{tidy}{step_impute_linear}(x, ...)
}
\arguments{
\item{recipe}{A recipe object. The step will be added to the
sequence of operations for this recipe.}
\item{...}{One or more selector functions to choose variables. For
\code{step_impute_linear}, this indicates the variables to be imputed; these variables
\strong{must} be of type \code{numeric}. When used with \code{imp_vars}, the dots indicates
which variables are used to predict the missing data in each variable. See
\code{\link[=selections]{selections()}} for more details. For the \code{tidy} method, these are not
currently used.}
\item{role}{Not used by this step since no new variables are created.}
\item{trained}{A logical to indicate if the quantities for
preprocessing have been estimated.}
\item{impute_with}{A call to \code{imp_vars} to specify which variables are used
to impute the variables that can include specific variable names separated
by commas or different selectors (see \code{\link[=selections]{selections()}}). If a column is
included in both lists to be imputed and to be an imputation predictor, it
will be removed from the latter and not used to impute itself.}
\item{models}{The \code{\link[=lm]{lm()}} objects are stored here once the linear models
have been trained by \code{\link[=prep.recipe]{prep.recipe()}}.}
\item{skip}{A logical. Should the step be skipped when the
recipe is baked by \code{\link[=bake.recipe]{bake.recipe()}}? While all operations are baked
when \code{\link[=prep.recipe]{prep.recipe()}} is run, some operations may not be able to be
conducted on new data (e.g. processing the outcome variable(s)).
Care should be taken when using \code{skip = TRUE} as it may affect
the computations for subsequent operations}
\item{id}{A character string that is unique to this step to identify it.}
\item{x}{A \code{step_impute_linear} object.}
}
\value{
An updated version of \code{recipe} with the new step added to the
sequence of existing steps (if any). For the \code{tidy} method, a tibble with
columns \code{terms} (the selectors or variables selected) and \code{model} (the
bagged tree object).
}
\description{
\code{step_impute_linear} creates a \emph{specification} of a recipe step that will
create linear regression models to impute missing data.
}
\details{
For each variable requiring imputation, a linear model is fit
where the outcome is the variable of interest and the predictors are any
other variables listed in the \code{impute_with} formula. Note that if a variable
that is to be imputed is also in \code{impute_with}, this variable will be ignored.
The variable(s) to be imputed must be of type \code{numeric}. The imputed values
will keep the same type as their original data (i.e, model predictions are
coerced to integer as needed).
Since this is a linear regression, the imputation model only uses complete
cases for the training set predictors.
}
\examples{
data(ames, package = "modeldata")
set.seed(393)
ames_missing <- ames
ames_missing$Longitude[sample(1:nrow(ames), 200)] <- NA
imputed_ames <-
recipe(Sale_Price ~ ., data = ames_missing) \%>\%
step_impute_linear(
Longitude,
impute_with = imp_vars(Latitude, Neighborhood, MS_Zoning, Alley)
) \%>\%
prep(ames_missing)
imputed <-
bake(imputed_ames, new_data = ames_missing) \%>\%
dplyr::rename(imputed = Longitude) \%>\%
bind_cols(ames \%>\% dplyr::select(original = Longitude)) \%>\%
bind_cols(ames_missing \%>\% dplyr::select(Longitude)) \%>\%
dplyr::filter(is.na(Longitude))
library(ggplot2)
ggplot(imputed, aes(x = original, y = imputed)) +
geom_abline(col = "green") +
geom_point(alpha = .3) +
coord_equal() +
labs(title = "Imputed Values")
}
\references{
Kuhn, M. and Johnson, K. (2013).
\emph{Feature Engineering and Selection}
\url{https://bookdown.org/max/FES/handling-missing-data.html}
}
\concept{imputation}
\concept{preprocessing}
\keyword{datagen}
|