mardi 17 juillet 2012

Analyse discriminante linéaire - Comparaisons

L’analyse discriminante est à la fois une méthode prédictive et descriptive. Dans le premiers cas, on se réfère souvent à l’analyse discriminante linéaire. On cherche à produire un système de classement qui permet d’affecter un groupe à un individu selon ses caractéristiques (les valeurs prises par les variables indépendantes). Dans le second cas, on parle d’analyse factorielle discriminante. L’objectif est de produire un système de représentation synthétique où l’on distinguerait au mieux les groupes, en fournissant les éléments d’interprétation permettant de comprendre ce qui les réunit ou les différencie. Les finalités ne sont donc pas intrinsèquement identiques même si, en creusant en peu, on se rend compte que les deux approches se rejoignent. Certaines références bibliographiques entretiennent d’ailleurs la confusion en les présentant dans un cadre unique.

Tanagra opère clairement la distinction en proposant les deux méthodes dans des composants différents : LINEAR DISCRIMINANT ANALYSIS (onglet SPV LEARNING) pour la prédiction, CANONICAL DISCRIMINANT ANALYSIS (onglet FACTORIAL ANALYSIS) pour la description. Il en est de même pour SAS avec respectivement les procédures DISCRIM et CANDISC. D’autres en revanche les associent. C’est le cas des logiciels SPSS et R, mélangeant des résultats de teneur différente. Pour les spécialistes qui savent distinguer les éléments importants selon le contexte, cet amalgame n’est pas un problème. Pour les néophytes, c’est un peu plus problématique. On peut être perturbé par des informations qui ne semblent pas en rapport direct avec les finalités de l’étude.

Dans ce tutoriel, nous détaillons  dans un premier temps les sorties de Tanagra 1.4.45 concernant l’analyse discriminante linéaire. Dans un second temps, nous les mettrons en parallèle avec les résultats fournis par les logiciels R 2.15.1, SAS 9.3 et SPSS 12.0.1. L’objectif est de discerner les informations importantes pour l’analyse prédictive c.-à-d. obtenir un système simple d’affectation des individus aux classes, avoir des indications sur le rôle (interprétation) et la pertinence (significativité) des variables, et disposer d’un mécanisme de sélection de variables.

Mots clés : analyse discriminante linéaire, analyse discriminante prédictive, sélection de variables, logiciel sas, stepdisc, discrim, candisc, logiciel R, package xlsx, package MASS, lda, package klaR, greedy.wilks, matrice de confusion, taux d'erreur en resubstitution, proc discrim, proc stepdisc
Composants : LINEAR DISCRIMINANT ANALYSIS, CANONICAL DISCRIMINANT ANALYSIS, STEPDISC
Lien : fr_Tanagra_LDA_Comparisons.pdf
Données : alcohol
Références :
Wikipedia - "Analyse discriminante linéaire"

mardi 10 juillet 2012

La compilation sous R

De temps en temps, des informaticiens me tombent dessus en m’assénant que R est bien beau, mais que ça reste un langage interprété, donc notoirement lent. Invariablement je réponds que c’est indéniable, mais que nos programmes représentent la plupart du temps un enchaînement d’appels de fonctions qui, elles, sont compilées (depuis la version 2.14 tout du moins). De fait, les temps de traitements sont très peu grevés par les caractéristiques de l’interpréteur. Avec un peu d’expérience, on se rend compte que R est surtout mal à l’aise lorsque nous implémentons explicitement des boucles (ex. la boucle for). Il faut donc les éviter autant que possible.

J’en étais resté à cette idée lorsque j’ai découvert le package « compiler » de Luke Tierney, inclus dans la distribution standard de R 2.14 . Il serait possible de compiler très simplement un bloc d’instructions intégré dans une fonction. Dans certaines configurations, que l’on s’attachera à déterminer justement, le « byte code » qui en découle se révèlerait nettement plus performant que le code natif passé à la moulinette de l’interpréteur.

Dans ce tutoriel, nous programmons deux traitements classiques de l’analyse de données, (1) avec et (2) sans l’utilisation des boucles : le centrage réduction des variables d’un data frame et le calcul d’une matrice de corrélation par produit matriciel. Dans un premier temps, nous mesurons les temps d’exécution respectifs des versions interprétées. Dans un second temps, nous les compilons avec la fonction « cmpfun » du package compiler, puis nous les évaluons de nouveau.

Nous constatons que le gain en vitesse d’exécution de la version compilée est particulièrement spectaculaire pour les versions avec boucles, il est négligeable en revanche pour les secondes variantes.

Mots clés : package compiler, cmpfun, byte code, package rbenchmark, benchmark
Lien : fr_Tanagra_R_compiler_package.pdf
Programme : compilation_r.zip
Références :
Luke Tierney, "A Byte Code Compiler for R", Department of Statistics and Actuarial Science, University of Iowa, March 30, 2012.
Package 'compiler' - "Byte Code Compiler"