Shrinkage-mean-based Diagonal Quadratic Discriminant Analysis (SmDQDA) from Tong, Chen, and Zhao (2012)

Description

Given a set of training data, this function builds the Shrinkage-mean-based Diagonal Quadratic Discriminant Analysis (SmDQDA) classifier from Tong, Chen, and Zhao (2012). The SmDQDA classifier incorporates a Lindley-type shrunken mean estimator into the DQDA classifier from Dudoit et al. (2002). For more about the DQDA classifier, see dqda.

The SmDQDA classifier is a modification to QDA, where the off-diagonal elements of the pooled sample covariance matrix are set to zero.

Usage

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
smdqda(x, ...)

## Default S3 method:
smdqda(x, y, prior = NULL, ...)

## S3 method for class 'formula'
smdqda(formula, data, prior = NULL, ...)

## S3 method for class 'smdqda'
predict(object, newdata, ...)

Arguments

x

matrix containing the training data. The rows are the sample observations, and the columns are the features.

...

additional arguments

y

vector of class labels for each training observation

prior

vector with prior probabilities for each class. If NULL (default), then equal probabilities are used. See details.

formula

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

data frame from which variables specified in formula are preferentially to be taken.

object

trained SmDQDA object

newdata

matrix of observations to predict. Each row corresponds to a new observation.

Details

The DQDA classifier is a modification to the well-known QDA classifier, where the off-diagonal elements of each class 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 probabilties should be nonnegative and sum to one.

Value

smdqda object that contains the trained SmDQDA classifier

list predicted class memberships of each row in newdata

References

Tong, T., Chen, L., and Zhao, H. (2012), "Improved Mean Estimation and Its Application to Diagonal Discriminant Analysis," Bioinformatics, 28, 4, 531-537. http://bioinformatics.oxfordjournals.org/content/28/4/531.long

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.

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.

Examples

1
2
3
4
5
6
7
8
n <- nrow(iris)
train <- sample(seq_len(n), n / 2)
smdqda_out <- smdqda(Species ~ ., data = iris[train, ])
predicted <- predict(smdqda_out, iris[-train, -5])$class

smdqda_out2 <- smdqda(x = iris[train, -5], y = iris[train, 5])
predicted2 <- predict(smdqda_out2, iris[-train, -5])$class
all.equal(predicted, predicted2)

Want to suggest features or report bugs for rdrr.io? Use the GitHub issue tracker.