Mathématiques Finances Economie : Logiciels statistiques
Cours 1
Table des matières cliquable
1. Qu'est-ce qu'une analyse statistique ?
2. Les divers types de données
1. Qu'est-ce qu'une analyse statistique ?
Une étude statistique, c'est d'abord l'étude de données en vue de la résolution d'un problème, qu'il s'agisse de synthétiser de nombreux chiffres, de modéliser en vue d'expliquer ou de prédire des phénomènes. Le point de départ est bien sûr des données, qu'il s'agisse de l'ensemble de la population ou seulement d'un échantillon. Après une vérification élémentaire des données (ce qui oblige à connaitre et comprendre, au moins globalement, les codes et les unités utilisées) à l'aide d'indicateurs comme le minimum et le maximum ou la liste des valeurs distinctes, il faut souvent suivre un plan d'étude statistique défini à l'avance.
Si on ne s'intéresse qu'à la description des données, des tableaux résumés et des graphiques bien choisis doivent être accompagnés d'une rédaction soignée, précise, qui sépare les résultats objectifs («5 % de chomeurs en plus») des commentaires subjectifs («ce qui est très peu») et des hypothèses d'interprétation («sans doute à cause du fort taux de renouvellement des contrats de maintenance»). Par contre, dans le cas de statistiques inférentielles, un test ne devra être utilisé qu'après avoir montré que ses conditions d'applications sont vérifiées, il faudra préciser la probabilité critique (p-value) utilisée, etc. En cas de modélisation, il faudra justifier le choix des variables, détailler les coefficients du modèle, donner leur p-value...
La rédaction pour un article de vulgarisation ou de recherche est en général tout aussi exigeante que la rédaction d'un simple rapport d'étude statistique. Par contre elle est plus subtile par ce que plus concise et plus orientée vers un public ciblé. Le choix des adjectifs, des qualificatifs y est très important.
La réalisation et la rédaction d'une analyse statistique mettent en jeux deux domaines de compétence :
le calcul statistique avec ses méthodes, ses modèles, ses termes techniques et ses formules, leurs conditions d'applications, l'utilisation des logiciels ad hoc, les conclusions mathématiques licites auxquelles elles aboutissent ;
l'écriture du rapport d'analyse via la présentation du protocole et des données (voire des hypothèses sous-jacentes), la mise en forme de tout ou partie des résultats et la rédaction des conclusions, interprétations et commentaires pour les spécialistes du domaine, pour l'équipe de recherche ou pour le grand public.
Une analyse statistique ne se réduit donc pas à une suite de calculs, même justes et justifiés. La rédaction est un art difficile. Elle est souvent bâclée par les [pseudo]scientifiques qui confondent phrases, littérature, verbiage et production littéraire. Or, la qualité d'un article de recherche, d'un rapport d'expérimentation transparait au fil des paragraphes. Le choix des termes employés renforce chez le lecteur ou le correcteur la conviction que le travail fait a été bien fait, que les méthodes statistiques sont maitrisées, que le passage des chiffres (comme m = 12.3 jours) aux lettres ("une durée moyenne aussi faible qu'à l'habitude") est le fruit d'un mûre réflexion...
2. Les divers types de données
On distingue traditionnellement les variables à codes (ou QL) des variables à unités (ou QT). Pour les premières, seuls les comptages simples ou croisés sont autorisés. Pour les secondes, en fonction de la sommabilité des unités, on effectue soit des calculs simples de médiane, quartile, quantile ou des calculs plus compliqués de moyennes, écart-types, coefficient de variation... Enfin, des variables textuelles (ou QX) comme des listes de mots ou de phrases sont également envisageables mais demandent en général des pré-traitements linguistiques.
L'usage veut qu'on nomme QUANTITATIVE une variable à unités et QUALITATIVE une variable à code, avec des qualificatifs comme semi-quantitative, quantitative continue, quantitative discrète, quantitative-intervalle, quantitative rapport, qualitative nominale, qualitative ordinale... Pour plus de détails, consulter ma page sur les variables statistiques.
Attention aux données : un pays comme RDA, une unité comme le franc indiquent que les données datent. Il n'est peut-être pas conseillé de les utiliser pour une description actuelle...
Certains logiciels détectent les QT et les QL par le type des données lues : une variable numérique est alors forcément QT et une variable caractère est QL. Si ce n'est pas le bon type, il faut utiliser des ordres comme LABEL, des fonctions comme as.factor()... Par contre à notre connaissance aucun logiciel ne demande de spécifier les unités, sans doute parce que souvent les gens ne les connaissent pas et parce que certains calculs utilisent d'autres unités : la moyenne d'un poids exprimé en kg est aussi en kg alors que sa variance est en kg au carré (!) et son coefficient de variation en %. Ce serait pourtant bien utile, pour éviter d'additionner des moyennes et des variances, pour ne pas calculer des moyennes de codes numériques, etc. Excel, qui n'est pas un logiciel de statistiques, ne connait rien : ni QT, ni QL et ne teste rien !
3. Les formats de fichiers
On peut utiliser de simples fichiers textes, bien cadrés ou seulement délimités par des virgules ou des points virgules mais rien n'interdit d'avoir saisi et géré les données avec un tableur ou un autre logiciel. Il faut en général avoir visualisé (c'est-à-dire parcouru sans avoir édité) le fichier des données avant de lancer une commande de lecture ou d'import, car la première ligne de données est parfois une ligne de données et d'autres fois la liste des variables. De même la première colonne de données est parfois un identifiant et d'autres fois non. On a alors intérêt à créer un identifiant basé sur le numéro des lignes si on doit trier les données...
Les logiciels statistiques ont en général une extension dédiée, parfois propriétaire, comme les extensions .sav pour SPSS, .sasb7dat pour SAS, .sta pour STATISTICA, .Rdata pour R. Une conséquence pratique est qu'il est parfois impossible d'ouvrir un jeu de données sans avoir le logiciel, ce qui pose souci en cas de logiciel payant...
Par contre, pratiquement tous les logiciels statistiques savent lire des fichiers textes, des fichiers Excel, des fichier Dbase et savoir importer et exporter vers ces formats en plus des formats propriétaires est très utile, voire quasi obligatoire.
Dans le cas de fichier-textes, nous conseillons de mettre comme extension .dat tout fichier de données dont la première ligne n'est pas la liste des variables, et de mettre comme extension .dar tout fichier de données dont la première ligne donne le nom des variables et dont la première colonne est un identifiant de ligne. Voici ce que cela donne en pratique :
Un exemple de fichier .dat
7069 3786 12578 8037 13556 9664 10386 206 2436 586 2006 30 1217 471 997 51 3066 290 10439 1413 7214 112 3788 330 2422 1999 17183 57 1127 600 408 241 22986 22183 21023 56 30025 6544 13114 3447 17465 19840 72977 2364 39919 17327 17487 2346 ...Un exemple de fichier .dar
VIN BELGIQUE NEDERLAND RFA ITALIE UK SUISSE USA CANADA CHMP 7069 3786 12578 8037 13556 9664 10386 206 MOS1 2436 586 2006 30 1217 471 997 51 MOS2 3066 290 10439 1413 7214 112 3788 330 ALSA 2422 1999 17183 57 1127 600 408 241 GIRO 22986 22183 21023 56 30025 6544 13114 3447 BOJO 17465 19840 72977 2364 39919 17327 17487 2346 ...Un exemple de fichier avec identifiant explicite
IDEN VIN BELGIQUE NEDERLAND RFA ITALIE UK SUISSE USA CANADA V0001 CHMP 7069 3786 12578 8037 13556 9664 10386 206 V0002 MOS1 2436 586 2006 30 1217 471 997 51 V0003 MOS2 3066 290 10439 1413 7214 112 3788 330 V0004 ALSA 2422 1999 17183 57 1127 600 408 241 V0005 GIRO 22986 22183 21023 56 30025 6544 13114 3447 V0006 BOJO 17465 19840 72977 2364 39919 17327 17487 2346 ...Un exemple de fichier .csv (le séparateur est le point-virgule)
IDEN ; VIN ; BELGIQUE ; NEDERLAND ; RFA ; ITALIE ; UK ; SUISSE ; USA ; CANADA V0001 ; CHMP ; 7069 ; 3786 ; 12578 ; 8037 ; 13556 ; 9664 ; 10386 ; 206 V0002 ; MOS1 ; 2436 ; 586 ; 2006 ; 30 ; 1217 ; 471 ; 997 ; 51 V0003 ; MOS2 ; 3066 ; 290 ; 10439 ; 1413 ; 7214 ; 112 ; 3788 ; 330 V0004 ; ALSA ; 2422 ; 1999 ; 17183 ; 57 ; 1127 ; 600 ; 408 ; 241 V0005 ; GIRO ; 22986 ; 22183 ; 21023 ; 56 ; 30025 ; 6544 ; 13114 ; 3447 V0006 ; BOJO ; 17465 ; 19840 ; 72977 ; 2364 ; 39919 ; 17327 ; 17487 ; 2346 ...4. Utilisation élémentaire de R
R s'utilise principalement en ligne de commande (au clavier ou par redirection) mais il existe aussi des interfaces avec des menus et des boutons. Nous utiliserons la ligne de commande afin de ne pas dépendre du système d'exploitation. Ecrire x <- calcul effectue le calcul et stocke le résultat dans la variable x. Les variables peuvent être des scalaires (une seule valeur), un vecteur (plusieurs valeurs de même type), une matrice (plusieurs vecteurs de même dimension et de même type ), une liste (ensemble de diverses variables nommées), un cadre de données ou data frame (plusieurs vecteurs de même dimension et mais pouvant être de type différent).
Tout ce qui suit le symbole dièse (#) est un commentaire et est ignoré par R, ce qui est bien pratique pour expliquer et se relire.
De nombreuses fonctions s'appliquent tout autant à un scalaire qu'à un vecteur qu'à une matrice (via apply) et même à une liste (via lapply). On peut construire des vecteurs avec l'opérateur de séquence : (le symbole deux points) et la fonction collect qui s'écrit c(). Voici quelques exemples à copier/coller :
x <- 5.8 y <- 1:10 z <- y**1/2 print(x) round(x) round(z) c( mean(z), sd(z) ) troisval <- c(1,12,24) attention <- c(1,2,"a") plot( y, z) plot( y, z, pch=19, col="red", main="un essai" ) fausseQT <- c(0,0,1,0,1,0) mean(fausseQT) # stupide ! vraieQL <- as.factor( fausseQT ) levels(vraieQL) <- c("oui","non") mean( vraieQL ) # ah, quand même ! table( vraieQL ) # cela se nomme <<tri à plat>>Pour apprendre R, il suffit donc de s'entrainer à utiiser les différentes commandes, comprendre comment fonctionne le système d'aide, lire les programmes des autres... Les liens fournis à la fin de notre page tuteur R devraient constituer un bon point de départ. Sous R, l'aide s'obtient avec la fonction help() qui affiche en ligne des explications, avec example() qui montre l'utilisation standard de la fonction, ainsi que help.start() et help.search() qui utilisent le navigateur web par défaut pour afficher l'aide :
>help(mean) mean package:base R Documentation Arithmetic Mean Description: Generic function for the (trimmed) arithmetic mean. Usage: mean(x, ...) ## Default S3 method: mean(x, trim = 0, na.rm = FALSE, ...) Arguments: x: An R object. Currently there are methods for numeric/logical vectors and date, date-time and time interval objects, and for data frames all of whose columns have a method. Complex vectors are allowed for 'trim = 0', only. trim: the fraction (0 to 0.5) of observations to be trimmed from each end of 'x' before the mean is computed. Values of trim outside that range are taken as the nearest endpoint. na.rm: a logical value indicating whether 'NA' values should be stripped before the computation proceeds. ...: further arguments passed to or from other methods. Value: For a data frame, a named vector with the appropriate method being applied column by column. If 'trim' is zero (the default), the arithmetic mean of the values in 'x' is computed, as a numeric or complex vector of length one. If 'x' is not logical (coerced to numeric), numeric (including integer) or complex, 'NA' is returned, with a warning. If 'trim' is non-zero, a symmetrically trimmed mean is computed with a fraction of 'trim' observations deleted from each end before the mean is computed. References: Becker, R. A., Chambers, J. M. and Wilks, A. R. (1988) _The New S Language_. Wadsworth & Brooks/Cole. See Also: 'weighted.mean', 'mean.POSIXct', 'colMeans' for row and column means. Examples: x <- c(0:10, 50) xm <- mean(x) c(xm, mean(x, trim = 0.10)) mean(USArrests, trim = 0.2) > example(mean) mean> x <- c(0:10, 50) mean> xm <- mean(x) mean> c(xm, mean(x, trim = 0.10)) [1] 8.75 5.50 mean> mean(USArrests, trim = 0.2) Murder Assault UrbanPop Rape 7.42 167.60 66.20 20.16Si on tape le début d'une fonction, la touche TABulation complète soit avec les noms de fonctions possibles, soit avec les paramètres si on a mis la parenthèse, comme ci-dessous :
>plotTOUCHE_TABULATION (sans parenthèse) plot plot.design plot.mlm plot.spec.coherency plot.ts plot.xy plot.default plot.ecdf plot.new plot.spec.phase plot.TukeyHSD plot.density plot.lm plot.spec plot.stepfun plot.window > plot(TOUCHE-TABULATION (juste après la parenthèse ouvrante qui suit le "t de plot) ...= cex.points= cook.levels= label.pos= mar.multi= range.bars= xval= absVal= ci= data= labels= max.mfrow= separator= xy.labels= add= ci.col= density= labels.id= mgp= set.pars= xy.lines= add.smooth= ci.lty= dLeaf= leaflab= nc= sub= y= angle= ci.type= do.points= legend.text= nodePar= sub.caption= yax.flip= ann= col= edgePar= levels= oma= subset= yaxt= ask= col.01line= edge.root= log= oma.multi= type= ylab= asp= col.hor= formula= lty= panel= verbose= ylim= axes= col.intervals= frame.plot= lty.intervals= panel.first= verticals= zero.line= border= col.points= freq= lty.predicted= panel.last= which= caption= col.predicted= grid= lty.separator= par.fit= x= center= col.range= hang= lwd= pch= xaxt= cex.caption= col.separator= horiz= main= plot.type= xlab= cex.id= col.vert= id.n= main2= predicted.values= xlim= cex.main= conf= intervals= mar= qqline= xpd=5. Lecture de données en R
R dispose de nombreuses fonctions pour lire les fichiers :
read.csv read.dcf read.delim2 read.fortran read.fwf read.table read.csv2 read.delim read.DIF read.ftable read.socket read.table.url read.xls # dans le package gdataNous conseillons surtout d'utiliser read.table et read.xls dans un premier temps ; pour nos fichiers avec l'extension .dar, nous avons créé la fonction lit.dar() dans statgh.r.
Si vous avez un accès à Internet, R peut lire les fichiers à distance, comme sur ces exemples avec notre dossier VINS :
urldata <- "http://forge.info.univ-angers.fr/~gh/Datasets/vins.dar" vinsdata <- read.table(urldata,head=TRUE,row.names=1) source("http://www.info.univ-angers.fr/~gh/statgh.r") vins <- lit.dar("http://www.info.univ-angers.fr/~gh/Datasets/vins.dar")
Retour à la page principale de (gH)