File: step_impute_linear.Rd

package info (click to toggle)
r-cran-recipes 0.1.15%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 2,496 kB
  • sloc: sh: 37; makefile: 2
file content (115 lines) | stat: -rw-r--r-- 4,317 bytes parent folder | download
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}