Given a set of training data, this function builds the Shrinkage-based Diagonal Linear Discriminant Analysis (SDLDA) classifier, which is based on the DLDA classifier, often attributed to Dudoit et al. (2002). The DLDA classifier belongs to the family of Naive Bayes classifiers, where the distributions of each class are assumed to be multivariate normal and to share a common covariance matrix. To improve the estimation of the pooled variances, Pang et al. (2009) proposed the SDLDA classifier which uses a shrinkage-based estimators of the pooled covariance matrix.
The SDLDA classifier is a modification to LDA, where the off-diagonal elements of the pooled sample covariance matrix are set to zero. To improve the estimation of the pooled variances, we use a shrinkage method from Pang et al. (2009).
sdlda(x, ...)# S3 method for default
sdlda(x, y, prior = NULL, num_alphas = 101, ...)
# S3 method for formula
sdlda(formula, data, prior = NULL, num_alphas = 101, ...)
# S3 method for sdlda
predict(object, newdata, ...)
matrix containing the training data. The rows are the sample observations, and the columns are the features.
additional arguments
vector of class labels for each training observation
vector with prior probabilities for each class. If NULL (default), then equal probabilities are used. See details.
the number of values used to find the optimal amount of shrinkage
A formula of the form groups ~ x1 + x2 + ...
That is,
the response is the grouping factor and the right hand side specifies the
(non-factor) discriminators.
data frame from which variables specified in formula
are
preferentially to be taken.
trained SDLDA object
matrix of observations to predict. Each row corresponds to a new observation.
sdlda
object that contains the trained SDLDA classifier
list predicted class memberships of each row in newdata
The DLDA classifier is a modification to the well-known LDA classifier, where the off-diagonal elements of the pooled covariance matrix are assumed to be zero -- the features are assumed to be uncorrelated. Under multivariate normality, the assumption uncorrelated features is equivalent to the assumption of independent features. The feature-independence assumption is a notable attribute of the Naive Bayes classifier family. The benefit of these classifiers is that they are fast and have much fewer parameters to estimate, especially when the number of features is quite large.
The matrix of training observations are given in x
. The rows of
x
contain the sample observations, and the columns contain the
features for each training observation.
The vector of class labels given in y
are coerced to a factor
.
The length of y
should match the number of rows in x
.
An error is thrown if a given class has less than 2 observations because the variance for each feature within a class cannot be estimated with less than 2 observations.
The vector, prior
, contains the a priori class membership for
each class. If prior
is NULL (default), the class membership
probabilities are estimated as the sample proportion of observations
belonging to each class. Otherwise, prior
should be a vector with the
same length as the number of classes in y
. The prior
probabilities should be nonnegative and sum to one.
Dudoit, S., Fridlyand, J., & Speed, T. P. (2002). "Comparison of Discrimination Methods for the Classification of Tumors Using Gene Expression Data," Journal of the American Statistical Association, 97, 457, 77-87.
Pang, H., Tong, T., & Zhao, H. (2009). "Shrinkage-based Diagonal Discriminant Analysis and Its Applications in High-Dimensional Data," Biometrics, 65, 4, 1021-1029.
Dudoit, S., Fridlyand, J., & Speed, T. P. (2002). "Comparison of Discrimination Methods for the Classification of Tumors Using Gene Expression Data," Journal of the American Statistical Association, 97, 457, 77-87.
Pang, H., Tong, T., & Zhao, H. (2009). "Shrinkage-based Diagonal Discriminant Analysis and Its Applications in High-Dimensional Data," Biometrics, 65, 4, 1021-1029.
# NOT RUN {
n <- nrow(iris)
train <- sample(seq_len(n), n / 2)
sdlda_out <- sdlda(Species ~ ., data = iris[train, ])
predicted <- predict(sdlda_out, iris[-train, -5])$class
sdlda_out2 <- sdlda(x = iris[train, -5], y = iris[train, 5])
predicted2 <- predict(sdlda_out2, iris[-train, -5])$class
all.equal(predicted, predicted2)
# }
Run the code above in your browser using DataLab