Programmer plus vite avec R : faire appel au langage C et au calcul

Transcription

Programmer plus vite avec R : faire appel au langage C et au calcul
Programmer plus vite avec R : faire appel au
langage C et au calcul parallèle
Version très préliminaire...
Thibault Laurent1
1
Toulouse School of Economics, 21 allées de Brienne, 31000 Toulouse, France
thibault. laurent@ univ-tlse1. fr
Résumé. Afin d’optimiser le temps de calcul sous R, nous montrons à travers plusieurs exemples de programmation avancée, l’intérêt à faire appel au langage C et au
calcul parallèle. Dans le premier exemple, nous estimons des frontières de production non
paramétriques et des scores d’efficacité. Nous montrons qu’en utilisant du langage C pour
programmer les boucles for, les temps de calcul peuvent être plus de 1000 fois plus rapides. Dans un second exemple, nous calculons dans T = 12 réseaux sociaux (1 réseau
social par année), des mesures de centralité betweeness et closeness. Nous montrons qu’en
parallélisant le code pour chaque année, le temps de calcul est presque T fois plus rapide.
Mots-clés. Temps de calcul, calcul parallèle, statistique, économétrie, réseau social,
langage C, logiciel R.
Abstract. To optimize the computation time in R, we show several examples of advanced programming and the interest to use the programming language C and parallel
computing. In the first example, we estimate nonparametric production frontiers and efficiency score. We show that using language C to program loops for, the computation time
can be more than 1000 times faster. In a second example, we compute in T = 12 social
networks (a social network per year), measures of centrality betweenness and closeness.
We show that when we parallelize the code for each year, the computation time is almost
T times faster.
Keywords. computation time, programming language C, R software, statistic, econometrics, social network, parallel computing.
1
Introduction
Le logiciel R (R development core team (2013)) est devenu ces dernières années un
logiciel incontournable dans le traitement statistique des données. Au 1er mars 2013,
on pouvait recenser 4379 packages téléchargeables sur le site du CRAN 1 . Parfois, on
1. http://cran.r-project.org/
1
retrouve plusieurs fonctions qui traitent le même problème statistique. Par exemple, pour
estimer des modèles additifs généralisés (GAM), la même fonction gam est programmée
différemment dans les packages gam (Hastie, 2011) et mgcv (Wood, 2006). Par ailleurs,
même si la technologie est en constante évolution, le volume des données n’a cessé de
croı̂tre. Aussi, dans certains cas, pour choisir une fonction plutôt qu’une autre, le temps
de calcul peut être un critère de sélection décisif.
R est un logiciel qui utilise son propre langage et pour programmer efficacement, il est
d’abord essentiel de maı̂triser un certain nombre de concepts, comme la programmation
orientée objet (Genolini, 2010). Il existe également sous R un certain nombres de raccourcis, comme la fonction apply qui permet d’éviter de recourir à des boucles alors que dans
d’autres logiciels comme Matlab (The MathWorks, Inc., 2007), l’usage de boucles est la
plupart du temps indispensable. Une fois le code R optimisé, le gain en temps de calcul
peut déjà être important.
Afin d’améliorer encore les performences en temps de calcul, nous proposons ici de
mesurer les gains en temps de calcul obtenus, en utilisant des outils avancés de la programmations sous R, à savoir l’usage du langage C et le calcul parallèle. Nous montrerons
un premier exemple d’utilisation du langage C dans le cadre d’un problème d’estimation
de frontières de production non paramétriques et de scores d’efficacité. Esnuite, nous
montrerons un exemple d’utilisation du calcul parallèle dans pour calculer des mesures de
centralité dans des réseaux sociaux.
Références
R development core team (2013). R : a language and environment for statistical computing.
R foundation for statistical computing, Vienne, Autriche. ISBN 3-900051-07-0.
Genolini, C. (2010). Petit traité de programmation orienté objet sous R : Programmation,
construction de packages, bonnes pratiques. De Boeck Supérieur.
Hastie, T. (2011). gam : generalized additive models. R package version 1.06.2.
The MathWorks, Inc. (2007). MATLAB – The language of technical computing, Version 7.5. The MathWorks, Inc., Natick, Massachusetts.
Wood, S. N. (2006). Generalized additive models : an introduction with R. Chapman and
Hall/CRC.
2