Thesis Title Institut de la Francophonie pour l’Informatique Mémoire de fin d’études Implémentation d’une copule mutilvariée Réalisé par PHAM Van Trung Superviseur Gildas MAZO Projet Mistis Cent[.]
Institut de la Francophonie pour l’Informatique ´moire de fin d’e ´tudes Me Impl´ ementation d’une copule mutilvari´ ee R´ealis´e par : Superviseur : PHAM Van Trung Gildas MAZO Projet Mistis Centre de recherche INRIA Grenoble Rhˆone-Alpes 29 novembre 2013 Remerciements Je tiens ` a exprimer ma profonde gratitude `a Gildas Mazo, mon directeur de stage Il ´etait toujours prˆet ` a m’avoir donn´e des aides pour que j’aie pu comprendre bien des connaissances statistiques n´ecessaires Ses commentaires utiles et ses judicieux conseils m’ont souvent ´et´e d’un grand recours pour mener `a bien les objectifs de mon stage Je tiens ´egalement ` a remercier les membres de l’´equipe MISTIS Grˆace `a leur soutien, j’ai pu m’int´egrer facilement ` a l’´equipe Je voudrais adresser mes sinc`eres remerciements aux professeurs de l’IFI Leurs cours m’ont permis d’approfondir mes connaissances sur des langages de programmation tels que R et C++ Enfin, je tiens ` a remercier ma famille, mes amis et notamment ma copine Truong Hong Van qui m’ont support´e ces six mois de stage Leurs encouragements m’ont permis d’ˆetre toujours motiv´e et d’avoir pu remplir mon rˆole i R´ esum´ e L’objectif de ce m´emoire de fin d’´etudes est d’impl´ementer une copule multivari´ee associ´ee ` a un Cumulative Distribution Network (CDN) CDN est une fonction de r´epartition d’un grand nombre de variables qui se factorise en produit de fonctions de r´epartition bivari´ees Ce mod`ele permet de d´ecrire la d´ependance entre plusieurs variables al´eatoires via un graphe o` u les arrˆetes repr´esentent les fonctions reliant les variables La fonction de vraisemblance est calcul´ee grˆ ace `a un algorithme de message-passing L’inf´erence dans le CDN est alors mise en oeuvre via la maximisation de la vraisemblance en utilisant une m´ethode d’optimisation Toutefois, l’impl´ementation d´elicate de ce mod`ele peut freiner l’utilisateur dans la pratique Nous nous proposons de l’impl´ementer et de le rendre disponible sous la forme d’un paquet R R est un logiciel de statistique tr`es r´epandu et de plus en plus utilis´e Avec ce paquet, il est tr`es facile de construire le graphe et de choisir des familles de copule param´etriques ainsi que de mod´eliser des donn´ees avec un CDN Il permet aussi de calculer la vraisemblance selon l’algorithme de message-passing et de faire l’inf´erence En outre, la vitesse de l’algorithme est augment´ee grˆace `a l’´ecriture d’une partie du code en C++ Mots-cl´ es : Cumulative Distribution Network, copule, vraisemblance, fonction de r´epartition multivari´ee ii Abstract The goal of the thesis aims at implementing a multivariate copula associated with a Cumulative Distribution Network (CDN) CDN is a high-dimensional cumulative distribution function (CDF) defined as a product of bivariate CDFs This model accounts for dependencies between random variables via a graph where the edges represent the functions linking the variables The likelihood function is computed thanks to a messagepassing algorithm The inference in CDN is performed by optimizing the likelihood function However, the implementation of this model is not available for users in practice Hence, we propose to implement it and make it available as an R package R is a statistical software widely spread in pratice Using this package, the users can build easily the graph, choose parametric copula families and generate data with a CDN It allows to compute the likelihood function according to a message-passing algorithm and perform inference in CDN Moreover, the speed of the algorithm has been increased by integrating C++ codes Keywords : Cumulative Distribution Network, copula, likelihood, multivariate distribution function iii Table des mati` eres Remerciements i R´ esum´ e ii Abstract iii Table des figures vi Liste des tableaux viii Contexte du stage 1 Introduction 1.1 Statistique th´eorique 1.1.1 Mod`ele statistique 1.1.2 Estimation des param`etres d’un mod`ele statistique 1.1.3 Copules 1.1.4 Cumulative distribution networks 1.1.5 La copule associ´ee au CDN 1.2 Environnement de programmation 1.2.1 R 1.2.2 Structure d’un paquet R 1.2.3 Rcpp - Interface entre R et C++ 3 9 10 Algorithme de gradient-derivative-product 11 2.1 Initialisation de l’algorithme 11 2.2 Propagation des messages 12 2.3 Calcul de la fonction de vraisemblance et son gradient 13 Impl´ ementation 3.1 Structure du paquet 3.1.1 Code source 3.1.2 Documentation 3.1.3 Tests et tutoriels 3.2 Fonctions du paquet 3.2.1 Cr´eation d’un objet CDN 3.2.2 Impl´ementation de l’algorithme 3.2.3 Estimation des param`etres iv de message-passing 17 17 18 18 19 19 20 22 26 Contents Exp´ erimentations 4.1 Pr´ecision num´erique de l’algorithme de message-passing 4.2 Simulation des donn´ees 4.3 Temps d’ex´ecution 4.4 Application avec un jeu de donn´ees r´eelles v 28 28 30 33 36 Conclusions et perspectives 40 Bibliographie 41 A mpAlgo 43 A.1 Initialisation de l’algorithme de message-passing 43 A.2 Propagation des messages 44 A.3 Calcul de la densit´e et du gradient 47 B cdnOptim 48 B.1 Calcul de la fonction de vraisemblance et son gradient 48 B.2 M´ethode de Broyden-Fletcher-Goldfarb-Shanno bfgs 49 B.3 Limited-memory BFGS with bounds lbfgsb 50 C rCdn, pCdn et dCdn 51 C.1 G´en´eration al´eatoire des observations rCdn 51 C.2 Calcul de la fonction de r´epartition pCdn 52 C.3 Calcul de la densit´e de plusieurs observations dCdn 52 Table des figures 1.1 Exemple d’un CDN ` a trois variables 1.2 Exemple d’un CDN ` a sept variables 2.1 Exemple d’un arbre de variables 15 2.2 Propagation des messages dans le CDN 16 3.1 Composants principaux du paquet CDN 17 3.2 Code source du paquet CDN 18 3.3 Documentation du paquet 19 3.4 Tests et d´emo 19 3.5 Diagramme des fonctions du paquet 20 3.6 Cr´eation d’un objet CDN 21 3.7 Exemple de transformation d’un graphe des variables en graphe CDN 22 3.8 Exemple de simplification du graphe 23 3.9 Algorithme de message-passing 23 3.10 Calculation de la fonction de r´epartition normale et ses gradients 24 3.11 Appel des libraries/fonctions dans C/C++ 25 3.12 Comparaison entre cdnOptim et optim 27 4.0 Pr´ecision de l’algorithme de message passing avec mod`eles existants 31 4.1 Pr´ecision de l’algorithme de message passing avec le mod`ele normal 32 vi List of Tables 4.2 vii Temps d’ex´ecution du calcul direct et de la fonction mpAlgo (en millisecondes) 35 4.3 ´ Plan de sites aux Etats Unis o` u les pr´ecipitations sont utilis´ees pour notre mod`ele 38 4.4 R´esultats de mod`eles mutivari´es 39 Liste des tableaux 3.1 Matrice binaire extraite du graphe CDN 22 3.2 Comparaison entre le temps du calcul via fonction R et celui du calcul direct en C++ 25 4.1 Probabilit´e de l’´ev´enement (X1 ≤ x01 , X2 ≤ x02 , X3 ≤ x03 , X4 ≤ x04 , X5 ≤ x05 ) dans les donn´ees simul´ees et F (x0 ) = F (x01 , x02 , x03 , x04 , x05 ) 32 4.2 R´esultats de l’estimation des param`etres 34 4.3 Temps d’ex´ecution du calcul direct (en rouge) et de la fonction mpAlgo (en bleu) (en milisecondes) 35 4.4 Comparaison entre le temps d’ex´ecution de la fonction optim et cdnOptim (en secondes) 36 4.5 Erreur quadratique moyenne selon deux mod`eles 37 viii Contexte du stage Probl´ ematique Les copules [1, 2] jouent un rˆ ole de plus en plus important dans la construction de distributions en grande dimension et la description de la d´ependance entre les variables al´eatoires L’une des difficult´es de la construction d’une copule mutilvari´ee r´eside dans l’inf´erence de mod`eles param´etriques Une copule multivari´ee associ´ee `a un Cumulative Distribution Network (CDN) [3] a ´et´e propos´ee L’int´erˆet de ce mod`ele est la capacit´e de faire l’inf´erence via un algorithme de message-pasing [4] L’estimation des param`etres est alors mise en oeuvre par la maximisation de la vraisemblance Toutefois, le code pour utiliser le CDN ainsi que l’algorithme de message-passing n’est pas disponible Cela peut freiner l’utilisateur dans la pratique C’est la raison pour laquelle nous nous proposons d’impl´ementer cet algorithme dans mon stage Objectif de stage L’objectif de mon stage est d’impl´ementer l’inf´erence de cette copule multivari´ee et de la rendre disponible sous la forme d’un paquet R [5] Ce paquet qui s’appelle CDN est disponible pour l’utilisation Je l’ai pr´esent´e dans une communication orale et un poster en juin 2013 ` a Lyon lors des deuxi`emes rencontres R [6] Je pr´evois de le soumettre sur le d´epˆ ot des paquets R (http://cran.r-project.org/) en d´ecembre 2013 apr`es la publication de [3] Environnement de stage Mon stage est r´ealis´e au centre de recherche INRIA Grenoble Rhˆone-Alpes dans le cadre du projet MISTIS sous la direction de Mazo Gildas Cette ´equipe a pour domaine d’expertise la mod´elisation de ph´enom`enes al´eatoires complexes en grande dimension Chapitre Introduction s’´ecrit : F (x1 , x2 , x3 , x4 , x5 , x6 , x7 ) =φ1 (x1 , x5 )φ2 (x2 , x3 ) (1.27) φ3 (x3 , x4 )φ4 (x3 , x5 )φ5 (x5 , x6 )φ6 (x5 , x7 ) Figure 1.2: Exemple d’un CDN `a sept variables 1.1.5 La copule associ´ ee au CDN Consid´erons φs comme une fonction param´etrique, on a : φs = φs (xα , xβ ; θs ) o` u θs est un param`etre inconnu, α, β sont les voisins de s Nous prenons la fonction φs en fonction d’une copule : 1/nβ α , xβ φs (xα , xβ ; θs ) = Cs (x1/n α ; θs ) (1.28) o` u Cs est une copule ` a choisir ; nα et nβ sont respectivement les nombres de voisins des variables α et β Comme Cs est une copule, xα , xβ ∈ [0, 1] La fonction de r´epartition s’´ecrit alors : F (x|θ) = Y 1/nβ s s α Cs (x1/n ; θs ), x1/n = (x1/n , xβ s s α ) (1.29) s∈S o` u x = (x1 , , xn ) avec n est le nombre de variables, θ = (θs )s∈S On note que F est aussi une copule : F (x|θ) = F (x1 , , xn |θ) = C(x1 , , xn |θ) Cette copule multivari´ee montre la d´ependance entre toutes les variables x1 , , xn Dans notre paquet, nous avons impl´ement´e le mod`ele (1.29) avec les familles de copule de Gumbel, Frank, FGM, AMH, Joe, Gauss (voir section 1.1.3) Pour la simulation des donn´ees de la fonction de r´epartition C(x1 , , xd |θ), on utilise le lemme de Liebscher [11] : Chapitre Introduction (s) (s) – Pour toutes les fonctions s ∈ S, il faut g´en´erer (Uα , Uβ ) ∼ Cs o` u α, β sont des variables de voisin de s n o (s) nα – Il est n´ecessaire de calculer Uα = maxs∈N (α) (Uα ) , α = 1, , d La fonction de r´epartition du vecteur (U1 , U2 , , Ud ) est C(x1 , , xd |θ) 1.2 1.2.1 Environnement de programmation R R [5] est un langage de programmation pour le d´eveloppement des appilcations dans le traitement des donn´ees et l’analyse statistique Il est d´evelopp´e par GNU R est de plus en plus important et connu grˆace `a ses avantages Premi`erement, R est open source C’est libre ` a utiliser et `a d´evelopper Deuxi`emement, il permet de faire de la programmation de haut niveau orient´e Troisi`emement, la programmation sous R est disponible sur plusieurs syst`emes d’op´eration populaires comme Unix, Windows et MacOS Quatri`emement, R est associ´e `a plusieurs langages de programmation tels que C/C++, Fortan En effet, il permet d’appeler directement le code dans C/C++, Fortan Derni`erement, R s’´etend facilement via des paquets ´ecrits par les d´eveloppeurs En outre, il existe le d´epˆ ot CRAN pourque les d´eveloppeurs puissent d´eposer leurs paquets 1.2.2 Structure d’un paquet R Normalement, un paquet R se compose des parties suivantes [12] : – Un fichier Description qui d´ecrit le paquet, l’auteur et la licence – Le r´epertoire man/ contient les fichiers de la documentation – Le r´epertoire R/ est le lieu pour d´eposer le code source en R – Le r´epertoire data/ fourni les donn´ees disponibles dans le paquet – Le r´epertoire src/ contient le code source en C/C++, Fortan – Le r´epertoire tests/ se compose des fichiers R qui sert `a v´erifier les fonctions fournies par le paquet – Le r´epertoire exec/ comprend les fichiers ex´ecutables (en Java ou Perl) – Le r´epertoire demo/ montre quelques programmes d’exemples – Le r´epertoire vignettes/ donne quelques exemples et renseignements pour l’utilisation du paquet Chapitre Introduction 1.2.3 10 Rcpp - Interface entre R et C++ Les fonctionnalit´es de R peuvent ˆetre ´etendues avec du code dans un langage compil´e comme C++ La vitesse des programmes dans C++ est meilleure que celle dans R car R est un langage de programmation interpr´et´e De plus, il donne beaucoup de bonnes librairies aux d´eveloppeurs Rcpp [13] est un paquet de R qui propose une int´egration de C++ tr`es simple d’utilisation Il fournit une interface efficace pour l’acc`es, l’extension et la modification des objets de R en C++ Il peut aussi faciliter l’´echange des donn´ees entre R et C++ et la gestion des erreurs En outre, avec Rcpp, le code peut devenir plus propre et avec moins de bugs C’est la raison pour laquelle Rcpp est utilis´e pour construire notre paquet Chapitre Algorithme de gradient-derivative-product Comme mentionn´e dans la section 1.1.4, il faut calculer la densit´e de probabilit´e (1.23) Q f (x) = ∂x [F (x)] avec F (x) = s∈S φs (xs ) pour faire l’inf´erence dans un CDN Toutefois, c’est difficile si le nombre de variables est tr`es grand L’algorithme de gradient-derivativeproduct (GDP) [4] qui a pour but de calculer la vraisemblance en tirant profit de la structure d’arbre d’un CDN nous permet de le faire L’id´ee de cet algorithme est de s´eparer la d´erivation multiple en une chaˆıne des d´eriv´ees locales sous forme de messages En effet, on constate qu’une variable n’apparait que dans ses fonctions de voisin Au lieu de d´eriver la fonction de repartition par rapport `a toutes les variables, il est n´ecessaire de calculer les d´eriv´ees locales et les mettre sous forme des messages Grˆace `a un processus de propagation des messages, la fonction de vraisemblance est finalement obtenue : hQ i µ (x|θ) o` u µ sont des fonctions de messages qu’on va d´efinir f (x|θ) = ∂xα s→α s∈N (α) dans la section apr`es, α est un noeud de variable arbitraire qu’on appelle la racine Le probl`eme est comment choisir la racine α et calculer les messages Cet algorithme GDP se compose des trois ´etapes principales suivantes : Initialisation de l’algorithme, Propagation des messages, et , Calcul de la fonction de vraisemblance et son gradient 2.1 Initialisation de l’algorithme Les messages entre des noeuds de variable et de fonction sont repr´esent´es par les fonctions µs→α , µα→s , λs→α , λα→s o` u s est un noeud de fonction et α est un noeud de variable s 11 ... est la famille de copule de Gumbel – (1.15) est la famille de copule de Farlie-Gumbel-Morgenstern (FGM) – (1.16) est la famille de copule de Frank – (1.17) est la famille de copule de Ali-Mikhail-Haq... d´evelopp´ees L’avantage de ces m´ethodes est leur impl´ementation pratique C’est la raison pour laquelle je les utilis´ees dans mon impl´emetation 1.1.3 Copules Les copules [1, 2] ont pour objectif de mod´eliser... al´eatoires L’une des difficult´es de la construction d’une copule mutilvari´ee r´eside dans l’inf´erence de mod`eles param´etriques Une copule multivari´ee associ´ee `a un Cumulative Distribution