% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/smoten_impl.R
\name{smoten}
\alias{smoten}
\title{SMOTEN Algorithm}
\usage{
smoten(df, var, k = 5, over_ratio = 1)
}
\arguments{
\item{df}{data.frame or tibble. Must have 1 factor variable used as the
outcome and remaining categorical (factor or character) variables.}

\item{var}{Character, name of variable containing factor variable.}

\item{k}{An integer. Number of nearest neighbor that are used
to generate the new examples of the minority class.}

\item{over_ratio}{A numeric value for the ratio of the
minority-to-majority frequencies. The default value (1) means
that all other levels are sampled up to have the same
frequency as the most occurring level. A value of 0.5 would mean
that the minority levels will have (at most) (approximately)
half as many rows as the majority level.

A named numeric vector can be used instead to give different levels
different targets, for example \code{c(a = 1, b = 0.5)}. The names must be
levels of the outcome and the values are ratios of the majority level,
exactly as in the single-number case. Levels that are not named are left
untouched, as are rows with a missing outcome. Because a vector of targets
is not a single value, supplying one means this argument can no longer be
tuned. See \code{vignette("ratio", package = "themis")} for more details.}
}
\value{
A data.frame or tibble, depending on type of \code{df}.
}
\description{
SMOTEN generates new examples of the minority class using nearest neighbors
of these cases, for data sets where all predictors are categorical.
}
\details{
SMOTEN is a variant of SMOTE designed for data sets where all predictors are
categorical (nominal). Since standard SMOTE relies on interpolation in
continuous space, it cannot be applied to categorical features directly.
SMOTEN instead uses the Value Difference Metric (VDM) to measure the distance
between observations. For each minority class example, new synthetic examples
are generated by taking the most common value of each predictor among its
nearest neighbors. The number of new examples generated is controlled by
\code{over_ratio}.

All columns other than \code{var} must be categorical (factor or character) with
no missing data.
}
\examples{
df <- data.frame(
  x = factor(sample(letters[1:3], 100, replace = TRUE)),
  y = factor(sample(letters[1:2], 100, replace = TRUE)),
  class = factor(c(rep("minority", 20), rep("majority", 80)))
)

res <- smoten(df, var = "class")

res <- smoten(df, var = "class", k = 10)

res <- smoten(df, var = "class", over_ratio = 0.8)
}
\references{
Chawla, N. V., Bowyer, K. W., Hall, L. O., and Kegelmeyer,
W. P. (2002). Smote: Synthetic minority over-sampling technique.
Journal of Artificial Intelligence Research, 16:321-357.
}
\seealso{
\code{\link[=step_smoten]{step_smoten()}} for step function of this method

Other Direct Implementations:
\code{\link[=adasyn]{adasyn()}},
\code{\link[=bsmote]{bsmote()}},
\code{\link[=cluster_centroids]{cluster_centroids()}},
\code{\link[=cnn]{cnn()}},
\code{\link[=enn]{enn()}},
\code{\link[=instance_hardness]{instance_hardness()}},
\code{\link[=kmeans_smote]{kmeans_smote()}},
\code{\link[=ncl]{ncl()}},
\code{\link[=nearmiss]{nearmiss()}},
\code{\link[=oss]{oss()}},
\code{\link[=rose]{rose()}},
\code{\link[=smogn]{smogn()}},
\code{\link[=smote]{smote()}},
\code{\link[=smotenc]{smotenc()}},
\code{\link[=svmsmote]{svmsmote()}},
\code{\link[=tomek]{tomek()}}
}
\concept{Direct Implementations}
