La projection de Fisher avec la fonction LDA()
avec R
L'essentiel de cette page !
La projection de Fisher, possible avec la fonction LDA qui fait entres autres des Analyse discriminante linéaire (LDA), on peut réduire le nombre de dimensions d'un jeu de données comme l'ACP mais en maximisant la distance entre les catégories qui doivent donc être connues à l'avance.
Voici un jeu de données
#Simulation d'un jeu de données à 3 catégories et 5 variables
# Glycémie
x_a <- rnorm(100,1,0.2);x_b <- rnorm(120,1.1,0.23);x_c <- rnorm(80,1,0.3);x <- c(x_a,x_b,x_c)
# Calcémie
y_a <- runif(100,2.2,2.6) ;y_b <- rnorm(120,2.3,0.5) ;y_c <- rpois(80,22)/10 ;y <- c(y_a,y_b,y_c)
# Protéine C-Réactive 6 mg/L
z_a <- rnorm(40,6,2) ;z_a <- c(z_a,rnorm(40,20,15));z_a <- c(z_a,rnorm(20,3,4));z_b <- rnorm(120,5.5,0.5) ;z_c <- rpois(80,50);z <- abs(c(z_a,z_b,z_c))
# TSH 0.4 à 4 mUI/l
w_a <- rnorm(50,2,1) ;w_a <- c(w_a,rnorm(50,2,1.1));w_a <- sort(w_a);w_b <- sort(abs(rnorm(120,1,2)));w_c <- rev(sort(abs(rnorm(80,2,1))));w <- abs(c(w_a,w_b,w_c))
# HDL 0.4 à 0.5
v_a <- rpois(100,50)/100;v_b <- sort(rpois(120,50)/100);v_c <- sort(rpois(80,50)/100)+0.2;v <- c(v_a,v_b,v_c)
# Catégories
categories<-c(rep("A",100),rep("B",120),rep("C",80))
# Compilation dans un tableau data.frame
compilation <- data.frame(categories,x,y,z,w,v);colnames(compilation) <- c("Catégories","Glycémie","Calcémie","Protéine C-Réactive","TSH","HDL");
head(compilation)
Voici son analyse LDA
library("MASS")
sang.lda <- lda(Catégories~. ,data=compilation)
D1 <- sang.lda$scaling[,1] # vecteur 1
D2 <- sang.lda$scaling[,2] # vecteur 2
# Calcul de projeté des individus sur D1 et D2
xy <- as.matrix(compilation[,-1])%*%as.matrix(cbind(D1,D2))
color <- categories ;color[color=="A"] <- "black"
color[color=="B"] <- "red";color[color=="C"] <- "green"
plot(xy,col=color,pch=16 )