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 )