Fonctions et analyses factorielles discriminantes Fichier

Transcription

Fonctions et analyses factorielles discriminantes Fichier
Ecole Doctorale MNHN Module Analyse des Données avec R
Michel Baylac, UMR 7205, UMS 2700 plate-forme Morphométrie
[email protected]
4
Discrimination
fonctions discriminantes
analyses factorielles discriminantes
MANOVA
classements validations croisées
D2 de Mahalanobis
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Buts :
1. maximiser la séparation entre deux ou plusieurs groupes définis a priori,
(niveaux ou modalités d'un facteur) : discrimination sensu stricto
2. prédir l'appartenance à des groupes prédéfinis d'individus indéterminés :
prédiction
L'existence de groupes permet de partitionner la dispersion totale
en :
T
- une dispersion inter-groupe (B comme Between)
- des dispersions intra-groupe (k si k groupes)
- une dispersion intra-groupe totale (Wt pour Within) : Wt =
W1 + W2 + .... Wk
B
W1
Au total on a donc (en termes de dispersions) :
T = B + Wt
avec Wt = W1 + W2 + .... Wk
W2
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Fonction discriminante versus analyse factorielle discriminante
Dans le cas de deux groupes, on parle de fonction discriminante, fonction décrivant
l'axe unique séparant les deux groupes et qui passe par leurs deux centroïdes.
T
B
W1
B
W2
W1
W2
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Fonctions discriminantes multiples
Avec plus de deux groupes, il existe plusieurs fonctions discriminantes « optimales »
pour chacuns des couples considérés. L'analyse discriminante multi-groupes utilise
ces différentes directions pour estimer les taux de classements.
Question : combien y-a-t'il
de fonctions discriminantes
entre k groupes ?
G2
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Fonction discriminante versus analyse factorielle discriminante
CV2
Une autre approche, appelée analyse factorielle
discriminante, correspond à une décomposition
canonique (on parle également d'analyse des
variables canoniques ou canonical variates
analysis) :
- fournit k-1 axes principaux décrivant la dispersion B
dans l'espace discriminant où la variabilité intra est
normée
- analyse factorielle comme l'ACP. Elle peut être vue
comme une double ACP (cf. Campell & Atchley,
1981. Syst. Zool. 30(3): 268-280)
- les distances entre centroïdes dans l'espace
discriminant sont appelées D2 ou distances de
Mahalanobis
CV1
G2
G2
G2
G2
D2
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Fonction discriminante versus analyse factorielle discriminante
Fonctions discriminantes et analyse factorielle
discriminante maximisent le rapport entre les deux
matrices
CV2
CV1
G2
G2
B / WT encore noté B * WT-1, où WT-1 désigne la
matrice inverse de WT
WT est la matrice des covariances intra-groupes totale
Ce ratio correspond donc à une normalisation (scaling)
qui rend sphérique (ou hyper-sphérique) la variabilité
au sein de WT
C'est ce qui est représenté sur la figure en haut à droite.
T = B + WT
Avec
WT = W1 +W2 + .... Wk
(suppose que les W1 soient
égales)
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Pourquoi normaliser la variance intra-groupe totale ?
l'axe discriminant passe par les centres de gravité des
deux nuages
Sans normalisation cet axe n'est optimal que lorsque
les distributions sont sphériques ou lorsque leur
directions de variabilité principale sont
perpendiculaires à l'axe discriminant ce qui est
un cas particulier :
Y
G2
X
Y
G2
X
Dans le cas contraire (cas général),
les projections des individus sur cet
axe seront recouvrantes, comme ici
où l'axe discriminant est oblique par
rapport à l'axe principal de chacuns
des deux nuages intra-groupes.
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
introduction
Pourquoi normaliser les variances intra-groupes ? (suite)
Y
Après normalisation de la variance Wt, la
direction passant par les centres de gravité
correspond à celle qui discrimine
complètement les deux groupes
Cette procédure a 2 conséquences :
- la normalisation s'opère à partir de la
matrice Wt (ici = W1 + W2). Si W1 et W2
diffèrent la solution ne sera pas
optimale pour les deux groupes.
- Les variables qui résultent de ce processus
de normalisation ne sont plus les
variables initiales
- l'espace discriminant diffère de l'espace
des variables intiales :
interprétations ?
G2
X
G2
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
approche prédictive, validation croisée
but de l'approche prédictive : assigner un
ensemble d'objets indeterminés à une série de
groupes prédéfinis
on
calcule
l'ensemble
des
fonctions
discriminantes multiples à partir d'échantillons
déterminés appartenant aux k groupes (ici les 4
groupes du haut)
on
applique
ces
fonctions
aux
objets
indeterminés (groupe noir) pour calculer
l'appartenance la plus vraisemblable de ces
objets aux groupes prédéfinis.
1
2
3
?
4
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
approche prédictive, validation croisée
Estimation de la qualité de la discrimination
2 possibilités :
resubstitution : les mêmes objets servent au
calcul des règles et des classements des objets
dans les différentes classes.
Echantillon d'apprentissage
Calcul de la règle
d'affectation
Resubstitution est biaisée car s'applique aux
mêmes objets : ne devrait pas être utilisée.
validation : on divise les données en 2 (ou +)
ensembles :
- un échantillon dit d'apprentissage qui sert
à calculer les règles
- un échantillon test qui va servir à estimer
les classements
Matrice de confusion
Echantillon test
De / vers
Groupe 1
Groupe 2
Groupe 3
Groupe 4
Groupe 1
Xx
X
X
X
Groupe 2
X
Xx
X
X
ici validation simple, dite “2-fold CV”. Il existe d'autres procédures comme les k-folds
Groupe 3
X
X
Xx
X
Groupe 4
X
X
X
Xx
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
Tests et discrimination, MANOVA
Test : Ho = absence de différences entre les groupes (sur l'ensemble des variables)
paramètres :lambda de Wilks, trace de Pillai etc. Transformés en F.
Le test est appelé MANOVA :
- extension multivariée de l'analyse de variance univariée ou ANOVA
- R ne renvoie pas de test : test avec manova() de MASS
- MANOVA permet de tester Ho et l'existence d'interactions :
- interaction(s) significative(s) traduisent l'hétérogénéité des réponses
d'un facteur en fonction d'un autre.
- avec crabs, on testera simultanément :
- effets sexe et espèce + interaction sexe-espèce
- interaction = différence de dimorphisme sexuel entre espèces ou de
dimorphisme spécifique entre sexes
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
tests et analyse de variance multivariée MANOVA
Effets
interaction
> summary( manova(as.matrix(crabs[,4:8]) ~ crabs$sex + crabs$sp + crabs$sex*crabs$sp))
> summary(mm)
Df Pillai approx F num
crabs$sex
1
0.770 128.754
crabs$sp
1
0.880 280.559
crabs$sex:crabs$sp
1
0.228
11.373
Residuals
196
Signif. Codes: 0 `***' 0.001 `**' 0.01 `*'
Df den Df
5
192
5
192
5
192
Pr(>F)
< 2.2e-16 ***
< 2.2e-16 ***
1.269e-09 ***
0.05 `.' 0.1 ` ' 1
# essayer avec summary(manova(as.matrix(crab) ~ crabs$sex * crabs$sp))
les facteurs sexe et espèce se révèlent hautement significatifs, tout comme le
terme d'interaction. Dans un tel cas, il conviendrait alors d'analyser
chaque facteur séparemment et, comme ici, d'effectuer une analyse
discriminante en fonction du sexe et une autre en fonction des couleurs
ou espèces.
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
tests et analyse de variance multivariée MANOVA
Les facteurs sex et sp de crabs ont la particularité d'être emboités
(chaque espèce inclut les deux sexes).
Le traitement doit en tenir compte :
# avec les données non transformées
summary(manova(as.matrix(crab) ~ crabs$sp/crabs$sex))
Df Pillai approx F num Df den Df
Pr(>F)
crabs$sp
1 0.87961 280.559
5
192 < 2.2e-16 ***
crabs$sp:crabs$sex
2 0.94426
34.524
10
386 < 2.2e-16 ***
Residuals
196
--Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
# refaire avec crabl
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
implémentation dans R : lda() et predict()
Dans R, une fonction unique (lda() de la bibliothèque MASS) réalise les deux types d'analyses
en fonction du nombre de groupes(k) :
Si k = 2 elle réalise une fonction discriminante de Fisher. Les projections sur cette fonction
discriminante sont obtenues par une commande predict().
Si k > 2, elle combine une analyse factorielle discriminante - un appel à predict() renvoie alors
les projections des objets sur les k-1 axes canoniques- et une analyse discriminante
multiple qui fournit une estimation des taux de classements (matrice de confusion).
predict() renvoie également les probabilités a posteriori d'appartenance des objets aux
différents groupes.
L'appel à lda() varie selon le type des données :
dataframes = lda(factor ~ data, data) data contient les données numériques
et le facteur
matrices = lda(matrix, factor) données et facteurs séparés
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
implémentation dans R : lda() et CV
Enfin, lorsque le paramètre CV est égal à TRUE, la fonction lda() fournit un
estimateur des affectations aux classes qui est moins biaisé que celui de
l'estimation directe. lda() effectue une validation croisée de type
« jackknife » : en enlevant séquentiellement chacun des objets, en calculant
la fonction sur les individus restants et en l'appliquant à l'individu éliminé.
Un autre type de validation croisée consiste à diviser l'échantillon en deux (2fold CV), un échantillon d'apprentissage et un échantillon test : c'est la
procédure indiquée sur la diapo précedente. Enfin, il existe également une
procédure k-fold qui divise l'échantillon en k sous-échantillons qui se
valident séquentiellement.
Ces deux dernières procédures ne sont pas disponibles directement et doivent
être programmées par l'utilisateur. L'exemple des iris dans l'aide de lda()
indique la marche à suivre pour effectuer une validation de type 2-folds.
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire classique et prédictive
Toujours avec le jeu de données des crabes et en utilisant la fonction lda()
on va effectuer une analyse factorielle discriminante des 4 groupes de
crabes, ce qui revient à tenter de discriminer deux facteurs à deux
niveaux chacuns : sexe (M et F) et couleur (O et B).
> library(MASS)
> data(crabs)
> groupe <- gl(4,50,labels = c("BM","BF","OM","OF"))
> z <- lda(as.matrix(log(crabs[,4:8])), groupe)
> plot(z, cex = 1.0, col =as.numeric(groupe))
L'affichage de z fournit plusieurs renseignements, dont les % de variance
des axes canoniques, les moyennes des groupes et les vecteurs
canoniques
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire et interprétation
Interprétation des axes canoniques : peut être problématique car on n'est plus dans l'espace
des variables initiales
> ?lda # extrait :
# "scaling: a matrix which transforms observations to discriminant functions, normalized so that
within groups covariance matrix is spherical.
corrélations entre les projections sur le ou les axes dicriminants et les variables d'origine
cor() ?
Exemple :
# projections sur les axes canoniques (+ probabilités a posteriori d'appartenance aux classes :
voir ?predict.lda)
> zp <- predict(z, crabs[,4:8])
analysez les sorties de zp
pourquoi utilise-t'on predict() et non pas predict.lda() ?
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire et interprétation
•
Calculez les corrélations entre les les variables initiales et les projections
> cor(crabs[,4:8], zp$x)
comparer ces valeurs avec par exemple les corrélations entre les vecteurs propres 2 et 3
de l'ACP et ces mêmes variables initiales ou encore avec les moyennes par groupes
(lda() renvoie un tableau $means qui les contient on n'a donc pas besoin de les
recalculer)
affichez z$means
calculez et affichez les corrélations pour les composantes 2-3 de l'ACP : comment ?
Comme le rappelle Krzanowski, 1988 (Principles of multivariate statistics: a user's
perspective. Clarendon Press) : les différences entre groupes tirées d'une
analyse discriminante peuvent provenir soit des différences réelles entre les
groupes, soit des différences de variabilité intra-groupes (W1 et W2
différentes) : l'interprétation des résultats en analyse discriminante doit être
opérée avec prudence
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire classique et prédictive
On s'intéresse maintenant à la valeur classifiante de l'analyse
On calcule le pourcentage de bien classés par resubstitution. Ce n'est pas conseillé, en
raison du biais qu'il y a à utiliser le même jeu de données pour calculer les paramètres
du modèle et les matrices de confusion. Les affectations ont déjà été calculées par
predict()
> table(groupe, zp$class) # Question : pourquoi zp$class ?
Quel est le pourcentage de classement correct ?
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire classique et prédictive
Estimons maintenant ces pourcentages par validation croisée. ATTENTION : le fait d'inclure
le paramètre CV=TRUE modifie les résultats de lda(), dont la "list" renvoie alors un
composant $class qui peut être utilisé directement avec table() sans passer par un
appel à predict() :
> zc <- lda(as.matrix(crabs[,4:8]),groupes, CV = TRUE)
> table(groupe, zc$class)
Conclusions ?
A ce stade, l'étude des probabilités a posteriori d'appartenance peut être instructive.
Quelles sont ces probabilités pour les individus mal classés ? Il peut être utile de
vérifier si ces individus mal classés ne le sont pas simplement à cause d'erreurs
de mesure (par exemple).
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
application
Les résultats précedents suggèrent une forte hétérogénéité de la variabilité à l'intérieur des
deux espèces. Pour l'examiner, vous allez effectuer deux analyses discriminantes
séparées, une par espèce. Il vous faudra :
1. créer deux nouveaux data.frames, à partir de crabs, un pour les bleus, un pour les
oranges
2. effectuer sur chacun d'eux une analyse discriminante sur les sexes
3. projeter les individus correspondants et interpréter les graphes
4. comparer l'expression de ce dimorphisme sexuel pour ces deux espèces.
> library(MASS)
> data(crabs)
> bc <- crabs[crabs$sp=="B",]
> bc.lda <- lda(log(as.matrix(bc[,4:8])),bc$sex)
> plot(bc.lda)
# le graphe (pourquoi des histogrammes ?)
> oc <- crabs[crabs$sp=="O",] # On refait la même chose pour les oranges
> oc.lda <- lda(log(as.matrix(oc[,4:8])),oc$sex)
> plot(oc.lda)
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
synthèse
# Maintenant on examine les poids des variables sur l'unique vecteur discriminant d'abord pour
les bleus
# puis pour les oranges. Ces poids sont dans le vecteur (ou la matrice) appelée scaling de la liste
renvoyée par lda()
# quels sont les autres composantes de cette liste ?
> bc.lda$scaling
> oc.lda$scaling
# comparer. Que pouvez-vous conclure ?
Puis en étudiant les corrélations variables / axes canoniques, ce que font les deux instructions
suivantes, pour les bleus puis pour les oranges
> cor(bc[,4:8],bcp$x)
> cor(oc[,4:8],ocp$x)
# interprétez, comparez, comparez avec les poids des vecteurs. Comparez avec les résultats
obtenus sur l'analyse globale Conclusions ?
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
Exemple : iris
A VOUS ... Vous allez analyser le fichier iris de MASS. Chargez le à l'aide de la fonction
data(). Que contient ce fichier ?
> data(iris)
Combien d'axes factoriels ? et combien faut-il conserver ?
Calculez les corrélations avec les variables d'origine. Interprétez.
Effectuez ensuite une analyse discriminante avec validation croisée et calculez la matrice de
confusion et le pourcentage d'individus bien classé. Projetez les groupes dans le plan
des deux premiers axes canoniques.
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
synthèse
> p <- prcomp(iris[,1:4])
> groupe = gl(3,50)
> pairs(p$x,col = as.numeric(groupe))
> cor(iris[,1:4],p$x)
0.0 0.5 1.0
-0.4
0.0 0.2
0.4
1
2
3
4
-1.0
Importance of components
PC1
PC2
PC3
PC4
Standard deviation
2.056 0.4926 0.2797 0.15439
Proportion of Variance 0.925 0.0531 0.0171 0.00521
Cumulative Proportion 0.925 0.9777 0.9948 1.00000
-3
-1
0
PC1
0.0
1.0
Corrélations composantes / variables d'origine
-1.0
PC2
0.5
Sepal.Length
Sepal.Width
0.0 0.2 0.4
-0.5
PC3
0.0
PC1
-0.4
PC4
-3
-1
0
1
2
3
4
-0.5
0.0
0.5
PC2
PC3
0.8974018 -0.3906044 -0.19656672
-0.3987485 -0.8252287
PC4
0.05882002
0.38363030 -0.11324764
Petal.Length
0.9978739
0.0483806
0.01207737 -0.04196487
Petal.Width
0.9665475
0.0487816
0.20026170
0.15264831
MNHN Ecole doctorale Module Statistiques multivariables sous R
R : Discrimination linéaire
synthèse
> z <- lda(as.matrix(iris[,1:4]),groupe)
> zp <- predict(z,iris[,1:4])
> plots(zp$x,col = as.numeric(groupe)
> zc <- lda(iris[,1:4],groupe,CV=TRUE)
> table(iris[,5],zc$class)
Combien y-a-t'il d'axes discriminants ?
Pourquoi ?
1
2
3
50
0
0
versicolor
0 48
2
virginica
0
1 49
-1
0
Matrice de confusion avec validation croisée
(lignes = affectations d'origine)
-2
zp$x[, 2]
1
2
setosa
% mal classés = 100* (2+1)/150 = 2.0 %
-10
-5
0
zp$x[, 1]
5