#Discriminant Analysis example
library(rattle)
library(heplots)
data(wine)
attach(wine)
#check classes for each variable
lapply(wine, class)
$Type
[1] "factor"
$Alcohol
[1] "numeric"
$Malic
[1] "numeric"
$Ash
[1] "numeric"
$Alcalinity
[1] "numeric"
$Magnesium
[1] "integer"
$Phenols
[1] "numeric"
$Flavanoids
[1] "numeric"
$Nonflavanoids
[1] "numeric"
$Proanthocyanins
[1] "numeric"
$Color
[1] "numeric"
$Hue
[1] "numeric"
$Dilution
[1] "numeric"
$Proline
[1] "integer"
#check assumption for lda
boxM(wine[,2:14],Type)
Box's M-test for Homogeneity of Covariance Matrices
data: wine[, 2:14]
Chi-Sq (approx.) = 684.2, df = 182, p-value < 2.2e-16
#random partition
## 75% of the sample size
smp_size = floor(0.75 * nrow(wine))
## set the seed to make your partition reproducible
set.seed(1337)
train_ind = sample(seq_len(nrow(wine)), size = smp_size)
train = wine[train_ind, ]
test = wine[-train_ind, ]
#quadratic discriminant analysis
library(MASS)
wine.qda = qda(Type ~ ., data = train)
predicted.qda = predict(wine.qda, newdata = test)
table(test$Type, predicted.qda$class, dnn = c('Actual Group','Predicted Group'))
Predicted Group
Actual Group 1 2 3
1 9 0 0
2 1 22 0
3 0 0 13
# Model accuracy
mean(predicted.qda$class == test$Type)
[1] 0.9777778
# Partition plots
library(klaR)
partimat(wine[,2:5],Type,data=test,method="qda",main="Partition Plots")

LS0tCnRpdGxlOiAiRGlzY3JpbWluYW50IEFuYWx5c2lzIgphdXRob3I6ICJtYXRoIGV0IGFsIgpkYXRlOiAiMTIvMjUvMjAxOCIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI0Rpc2NyaW1pbmFudCBBbmFseXNpcyBleGFtcGxlCmxpYnJhcnkocmF0dGxlKQpsaWJyYXJ5KGhlcGxvdHMpCmRhdGEod2luZSkKYXR0YWNoKHdpbmUpCgojY2hlY2sgY2xhc3NlcyBmb3IgZWFjaCB2YXJpYWJsZQpsYXBwbHkod2luZSwgY2xhc3MpCmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI2NoZWNrIGFzc3VtcHRpb24gZm9yIGxkYQpib3hNKHdpbmVbLDI6MTRdLFR5cGUpCmBgYAoKYGBge3IgZGVmYXVsdCwgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KI3JhbmRvbSBwYXJ0aXRpb24KIyMgNzUlIG9mIHRoZSBzYW1wbGUgc2l6ZQpzbXBfc2l6ZSA9IGZsb29yKDAuNzUgKiBucm93KHdpbmUpKQoKIyMgc2V0IHRoZSBzZWVkIHRvIG1ha2UgeW91ciBwYXJ0aXRpb24gcmVwcm9kdWNpYmxlCnNldC5zZWVkKDEzMzcpCnRyYWluX2luZCA9IHNhbXBsZShzZXFfbGVuKG5yb3cod2luZSkpLCBzaXplID0gc21wX3NpemUpCgp0cmFpbiA9IHdpbmVbdHJhaW5faW5kLCBdCnRlc3QgPSB3aW5lWy10cmFpbl9pbmQsIF0KCiNxdWFkcmF0aWMgZGlzY3JpbWluYW50IGFuYWx5c2lzCmxpYnJhcnkoTUFTUykKd2luZS5xZGEgPSBxZGEoVHlwZSB+IC4sIGRhdGEgPSB0cmFpbikKCnByZWRpY3RlZC5xZGEgPSBwcmVkaWN0KHdpbmUucWRhLCBuZXdkYXRhID0gdGVzdCkKCnRhYmxlKHRlc3QkVHlwZSwgcHJlZGljdGVkLnFkYSRjbGFzcywgZG5uID0gYygnQWN0dWFsIEdyb3VwJywnUHJlZGljdGVkIEdyb3VwJykpCmBgYAoKYGBge3IgbWVzc2FnZT1GQUxTRSwgd2FybmluZz1GQUxTRX0KIyBNb2RlbCBhY2N1cmFjeQptZWFuKHByZWRpY3RlZC5xZGEkY2xhc3MgPT0gdGVzdCRUeXBlKQpgYGAKCmBgYHtyIG1lc3NhZ2U9RkFMU0UsIHdhcm5pbmc9RkFMU0V9CiMgUGFydGl0aW9uIHBsb3RzCmxpYnJhcnkoa2xhUikKcGFydGltYXQod2luZVssMjo1XSxUeXBlLGRhdGE9dGVzdCxtZXRob2Q9InFkYSIsbWFpbj0iUGFydGl0aW9uIFBsb3RzIikgCmBgYAoK