Valid XHTML     Valid CSS2    

Statistiques élémentaires avec le logiciel R

-- Session de formation continue pour l'université d'Angers --

Exercices du module 1

 

Table des matières cliquable

  1. Types de variables et dictionnaire des données

  2. Calculs simples et manipulations élémentaires en R

  3. Lecture de fichiers avec R et Rcmdr

  4. Moyennes et médianes avec R et Rcmdr

  5. Comptages et pourcentages avec R et Rcmdr

  6. Documentations et système d'aide

 

Il est possible d'afficher toutes les solutions via ?solutions=1 et de les masquer via ?solutions=0.

 

1. Types de variables et dictionnaire des données

On dispose des données suivantes :


     NUM SEXE AGE PROF ETUD REGI USAG
     M001 1 62  1 2 2 3
     M002 0 60  9 3 4 1
     M003 1 31  9 4 4 1
     M004 1 27  8 4 1 1
     M005 0 22  8 4 1 2
     M006 1 70  4 1 1 1
     M007 1 19  8 4 4 2
     M008 1 53  6 2 2 3
     M009 0 62 16 4 2 2
     M010 1 63 16 0 1 0
     M011 0 65 16 0 1 0
     M012 1 11 12 2 4 2
     M013 0 78 16 3 4 1
     M014 0 20  8 4 4 2
     

Quel est le type de chaque variable ? En faire un fichier Excel "propre et utilisable pour une analyse statistique".

Solution :  

Il n'est sans doute pas possible de répondre à la question posée sans plus de renseignements. Comme nous l'avons dit dans le cours, les données doivent correspondre à un projet de recherche, clairement énoncé, ce qui n'est pas le cas ici. On pourra admettre qu'il s'agit ici de décrire la partie signalétique des personnes d'une enquête linguistique nommée ELF...

En toute rigueur, on ne peut pas constuire le dictionnaire des données car trouver la signification de chaque variable (chaque colonne) relève plus de la magie que de la science. Par exemple, la variable NUM correspond-elle juste à un identifiant pour repérer anonymement la ligne -- auquel cas on n'a aucun calcul statistique à faire -- où est-ce une variable qualitative dont on ne connait pas les modalités ? Pour la variable SEXE comment savoir à quoi correspondent les codes 0 et 1 ? Sauf à appliquer un argument féministe du genre «les hommes sont nuls» donc le codage est 0= homme, 1=femme, rien ne permet de savoir si c'est le cas ou non. Pour la variable AGE il semble bien, au vu des valeurs, qu'il s'agisse d'une variable quantitative dont l'unité est l'année, mais il vaudrait mieux en être sûr(e). Après-tout, qu'est-ce qui prouve que ce ne sont pas des semaines de travail effectuées après l'age légal de la retraite ?

Si, avec joie et délices (!), on découvre la page ELF, on est en mesure de remplir partiellement le dictionnaire des données. On pourra se convaincre que le fichier Excel associé, accessible ici, ne permet d'exploiter que les quatre colonnes NUM, SEXE, AGE, ETUD (sachant que NUM n'est pas une variable statistique).

Remarque : utiliser le terme dictionnaire des variables est tout aussi acceptable que celui de dictionnaire des données.

 

2. Calculs simples et manipulations élémentaires en R

Pour s'entrainer à comprendre les commandes de R, ou pour vérifier un calcul, on a parfois besoin de valeurs simples, comme «les nombres de 1 à 10», «les 50 valeurs définies par 20 codes 'H' et 30 codes 'F'». Comment fait-on pour générer ces valeurs en R ? Est-ce possible avec Rcmdr ?

Solution :  

R dispose de tant de fonctions que ce qui est demandé est un jeu d'enfants. La preuve :


     ## QUELQUES CALCULS VITE FAITS EN R
     
     # les nombres de 1 à 10
     
     seq(from=1,to=10)
     
     # 50 valeurs : 20 codes 'H' puis 30 codes 'F'
     
     c( rep('H',20), rep('F',30) )
     

En d'autres termes, la fonction de R nommée seq() et la fonction rep() répondent simplement et rapidement à la question (le lien sous chacune de ces fonctions mène à la page d'aide associée). On aurait pu faire encore plus simple pour les nombres de 1 à 10 car R a une notation pour cela, le symbole deux-points. Donc on aurait pu se contenter de 1:10 au lieu de seq(from=1,to=10) qui avait déjà comme abbréviation autorisée seq(1,10). Décidemment, R est plein de surprises !

Par contre ici Rcmdr ne peut rien de plus pour nous : il est orienté analyse de variables, pas génération de variables. On peut taper le code R précédent dans la fenêtre centrale et cliquer sur le bouton Soumettre mais cela ne fait pas une grosse différence.

 

3. Lecture de fichiers avec R et Rcmdr

Comment fait-on pour lire des données dans un fichier ? Peut-on lire des fichiers sur Internet avec R et Rcmdr  ?

On pourra se limiter au fichier elfSimple.xls qu'on téléchargera ou qu'on lira directement sur Internet.

Comment fait-on ensuite pour connaitre le nombre de lignes, de colonnes, pour voir les données ?

Solution :  

R ne sait pas lire les fichiers Excel sans un petit coup de pouce : il faut utiliser la fonction read.xls() du package gdata. Bien sûr, si vous essayez d'écrire directement


     elf <- read.xls("http://forge.info.univ-angers.fr/~gh/wstat/Ortho/elfSimple.xls")
     

cela ne marchera pas, parce qu'il faut charger le package gdata avant de pouvoir vous en servir. Donc vous allez essayer de réaliser


     library("gdata")
     

mais cela ne marchera pas mieux (pour cette fois), parce qu'il faut installer un package avant de pouvoir le charger. Rassurez-vous : au bout d'un moment ces manipulations deviennent habituelles. Donc on recommence ! D'abord on installe le package gdata avec Rstudio. On pourrait aussi écrire


     install.packages("gdata")
     

Du coup, on peut écrire :


     library("gdata")
     

En ensuite la commande suivante fonctionne :


     elf <- read.xls("http://forge.info.univ-angers.fr/~gh/wstat/Ortho/elfSimple.xls")
     

Dans le panneau en haut et à droite de Rstudio, dans l'onglet Environment, il y a écrit elf  98 obs. of 3 variables, ce qui signifie qu'on a lu un tableau et qu'il contient 98 lignes et 3 colonnes. On aurait aussi pu taper en console dim(elf) ou même nrow(elf) et ncol(elf) pour avoir respectivement ces deux dimensions, juste le nombre de lignes ou de colonnes. Ensuite, avec head(elf), tail(elf), View(elf) on aurait pu afficher respectivement le début ou la fin des données ou visualiser les données dans le panneau en haut et à gauche :


     ## LECTURE ET AFFICHAGE DE DONNEES AVEC R
     
     > elf <- read.xls("http://forge.info.univ-angers.fr/~gh/wstat/Ortho/elfSimple.xls")
     trying URL 'http://forge.info.univ-angers.fr/~gh/wstat/Ortho/elfSimple.xls'
     Content type 'application/vnd.ms-excel' length 21504 bytes (21 KB)
     downloaded 21 KB
     
     > dim(elf)
     [1] 98  3
     
     > nrow(elf)
     [1] 98
     
     > ncol(elf)
     [1] 3
     
     > head(elf)
       X1 X62 X2
     1  0  60  3
     2  1  31  4
     3  1  27  4
     4  0  22  4
     5  1  70  1
     6  1  19  4
     
     > tail(elf)
        X1 X62 X2
     93  0  12  2
     94  1  31  4
     95  1  17  3
     96  1  39  2
     97  0  62  3
     98  1  48  4
     
     
     

Avec Rcmdr, c'est un peu plus simple en manipulation car il n'y a qu'à cliquer ! Il y a une différence, toutefois : le fichier elfSimple.xls doit être présent physiquement sur votre ordinateur (pas de lecture sur Internet). Il faut donc d'abord télécharger le fichier depuis votre navigateur puis le recopier dans votre répertoire de travail avant d'y accéder avec Rcmdr.

Dans l'interface de Rcmdr, il faut utiliser le menu Données/Importer des données pour lire les données Excel comme ci-dessous :


               non su

Rcmdr demande alors un nom de dataset c'est-à-dire le nom d'une variable pour les données. On peut par exemple saisir elf et si (cela arrive sur certains ordinateurs) Rcmdr demande de choisir une "table" dans une petite fenêtre qui apparait, il faut choisir la table elf.xls.

Pour connaitre le nom des variables de ce jeu de données, il est ensuite possible d'utiliser le menu Données, sous-menu Jeu de données actif, sous-sous-menu Variables du jeu de données actif mais il faut reconnaitre que taper directement et "Soumettre" names(elf) est beaucoup plus court à écrire ! On peut aussi cliquer sur le bouton Visualiser pour voir les données dans une fenêtre séparée...

Au passage, voyez-vous quelle erreur de lecture a été commise ? Ce fichier ne contenait pas d'information sur les colonnes en ligne 1 donc R a utilisé la ligne 1 pour nommer incorrectement les colonnes X1, X62, X2. Il aurait écrire fallu head=FALSE comme paramètre supplémentaire pour lire les 99 lignes... Donc attention aux lectures.

Remarque : il est possible que l'installation du package gdata réussisse mais que la fonction read.xls() de ce package ne fonctionne pas car elle utilise le langage PERL qui n'est peut-être pas installé sur votre ordinateur (il l'est sur les ordinateurs de la faculté). Dans ce cas, vous pouvez essayer d'installer le package readxl puis utiliser la fonction read.xl() comme suit :


     ## LECTURE ET AFFICHAGE DE DONNEES EXCEL AVEC R, package readxl
     
     > library(readxl)
     
     > simple2 <- read_xls("elfSimple.xls")
     
     > simple2
     
     # A tibble: 98 x 3
          `1`  `62`   `2`
        <dbl> <dbl> <dbl>
      1     0    60     3
      2     1    31     4
      3     1    27     4
      4     0    22     4
      5     1    70     1
      6     1    19     4
      7     1    53     2
      8     0    62     4
      9     1    63     0
     10     0    65     0
     # ... with 88 more rows
     
     > simple3 <- data.frame(simple2)
     
     > dim(simple3)
     
     [1] 98  3
     

Si aucun de ces packages ne fonctionne, au pire, le plus simple est de télécharger l'archive ZIP de toutes les données de la formation et de passer par un read.table() du fichier .CSV des données :


     > simple <- read.csv("elfSimple.csv")
     
     > head(simple)
     
       X1 X62 X2
     1  0  60  3
     2  1  31  4
     3  1  27  4
     4  0  22  4
     5  1  70  1
     6  1  19  4
     

... mais rien ne résoud le problème ici des noms de colonnes non renseignées...

 

4. Moyennes et médianes avec R et Rcmdr

On voudrait -- sans préjuger de la pertinence de ces calculs ni du nombre de décimales à afficher -- connaitre la moyenne et la médiane de la variable AGE pour les données ELF.

Cette fois-ci, on utilisera le fichier elf_fcAngers.xls.

Comment fait-on avec R et Rcmdr  ?

Solution :  

Une fois les données elf chargées, calculer la moyenne et la médiane se calcule via l'appel direct des fonctions correspondantes en R :


     ## MOYENNES ET MEDIANES AVEC R
     
     # chargement du package gdata et lecture des données sur Internet
     
       library("gdata")
       elf <- read.xls("http://forge.info.univ-angers.fr/~gh/wstat/FcAngers/elf_fcAngers.xls")
     
     # calcul de la moyenne de la variable AGE, données elf
     
     > print( mean(elf$AGE) )
     
       35.82828
     
     # calcul de la médiane
     
     > print( median(elf$AGE) )
     
       29
     

Avec Rcmdr, si elf est le jeu de données actif, il faut utiliser le menu Statistiques, sous-menu Résumés, sous-sous-menu Statistiques descriptives. Ensuite, on clique sur la variable AGE dans la liste de sélection et on valide via le bouton OK.

On trouve les résultats demandés parmi les informations affichées. Il aurait été possible de n'afficher que la moyenne et la médiane (explications non fournies à ce niveau).

 

5. Comptages et pourcentages avec R et Rcmdr

On voudrait disposer des comptages et des pourcentages du nombre d'hommes et de femmes pour la variable SEXE pour les données ELF.

Comment fait-on avec R et Rcmdr  ?

Remarque : on ne se préoccupera pas pour l'instant de la présentation des résultats ni du nombre de décimales.

Solution :  

Il est très simple de calculer directement avec R le comptage des valeurs de la variable SEXE car la fonction table() est prévue pour cela :


     # comptage des valeurs de la variable SEXE, données elf
     
     > print( table(elf$SEXE) )
     
      0  1
     35 64
     

Malheureusement ce n'est pas très informatif car on ne sait pas à quoi correspondent les valeurs 0 et 1.

R ne calcule pas directement les pourcentages mais seulement les fréquences (valeurs entre 0 et 1) via prop.table(). Il suffit donc de multiplier par 100 :


     # pourcentages des valeurs de la variable SEXE, données elf
     
     > print( 100*prop.table(table(elf$SEXE)) )
     
            0        1
     35.35354 64.64646
     

On ne peut pas effectuer le calcul de comptage avec Rcmdr car Rcmdr reconnait les variables qualitatives uniquement quand il y a des valeurs caractères. Nous fournissons donc le fichier elfOrthoQL.xls où les variables SEXE et ETUD sont correctement codées. Pour ces données, il faut utiliser Statistiques, sous-menu Résumés, sous-sous-menu Distributions de fréquences. Ensuite, on clique sur la variable SEXE dans la liste de sélection et on valide via le bouton OK. On obtient alors directement les comptages (counts en anglais) et les pourcentages (percentages en anglais).

Avec ces données elf_fcAngersQL le comptage via table() fonctionne tout aussi bien :


     > elfQL <- read.xls("elf_fcAngersQL.xls") # ATTENTION : données locales
     > print( table(elfQL$SEXE) )
     
      F  H
     64 35
     

 

6. Documentations et système d'aide

Comment apprendre à utiliser le logiciel R ?

Où et comment obtenir de l'aide et de la documentation pour le logiciel R ?

Solution :  

Le site officiel de R a une rubrique manuals avec des manuels en anglais. Heureusement, ces documents sont traduits dans plusieurs langues et chaque pays contribue à la documentation générale dans la section Contributed Documentation. De plus, il y a aujourd'hui (2016) de nombreux ouvrages généraux et aussi spécialisés sur R, notamment chez Springer avec les séries Use R! et Pratique R. Voir par exemple nos pages livres sur R et ouvrages pour R.

A l'intérieur de R, en mode interactif, on utilise la fonction help(f) pour avoir de l'aide sur la fonction f et example(f) pour voir des exemples d'utilisation. Ainsi help(median) montre les paramètres de la fonction median() tandis que example(lm) montre la fonction lm() en action. L'aide par défaut s'affiche dans une fenêtre surgissante, mais si on tape help.start() tout appel de l'aide s'affiche dans le navigateur. Avec Rstudio, l'aide est affichée dans un panneau spécial et on peut naviguer dans les pages d'aides vues dans la session.

On trouve aussi des vidéos sur YouTube notamment qui montrent comment utiliser le logiciel R. Il faut chercher R software et non pas seulement R. Des sites comme R Site Search et R seek sont également utiles. Nous conseillons à la solution de la question S1q13 d'autres sites français et anglais dont les sites français duclert et larmarange.

Comme R est très complet et très riche en fonctions, on apprend en général R au fur et à mesure de ses besoins. Comme chaque package a ses propres fonctions, il n'est pas possible de connaitre R entièrement. On estime généralement qu'en connaissant une petite centaine de fonctions générales, on arrive à réaliser la plupart des opérations courantes en R.

Dans une session R, en plus de help() et ? (un point d'interrogation), on peut aussi utiliser apropos() et ?? (deux points d'interrogation).

 

 

       retour au plan de cours  

 

 

retour gH    Retour à la page principale de   (gH)