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