R, l'application universelle de statistiques

Cette page explique le minimum à connaître sur un système GNU/Linux (ligne de commande, système de fichiers...)

L

E logiciel R est un logiciel libre d'analyse statistique de données, et consacré à la sortie, notamment LATEX. Cette page est écrite pour une prise en main rapide pour la personne qui a un besoin urgent.

Pour utiliser R comme outil de conversion, voir annexe.

1. Prise en main

Pour disposer de R sur un système UNIX, il faut installer le paquet r-base, qui installera les paquets complémentaires.

1.1 En mode console

help.start() lance la documentation dans le navigateur de l'environnement graphique. Sur un système Linux, la documentation html se trouve à l'adresse (ou similaire): /usr/share/R/doc/html/ ou /usr/share/R/doc/manual/.

R dans une console lance l'application en mode interactif. Apparaît l'invite >, la ligne suivant est la réponse:

> 2+2
[1] 4
> sum(3,2,4)
[1] 9
> max(3,5,4)
[1] 5

Cela peut être utile pour tester une fonction, effectuer un calcul ou réaliser une tâche simple (importation d'un fichier pour l'exporter dans une autre format), mais est peu pratique pour des tâches complexes ou répétitives.

Une autre façon d'utiliser R est d'éditer un fichier de commandes (un script) dans un éditeur de fichier (notepad++, crimson, gedit, kedit, kwrite, pluma...) et le lancer dans une console. Il faut veiller à ce que le script soit lancé à son adresse réelle: en UNIX, si le script essai.r est sauvegardé à l'adresse /home/toto/R/script/, il sera lancé dans une console par:

Rscript /home/toto/R/script/essai.r

Il faut évidemment que les éventuels fichiers de données appelés par le script et que toutes les bibliothèques nécessaires soient présentes sur le système et correctement libellés.

1.2 Interface graphique

Plusieurs interfaces graphiques existent pour R, comme RGui sur Windows, ou Rcmdr. Le paquet sous GNU/Linux (56Mo) est r-cran-rcmdr pour Debian. Il est possible que l'installation place l'application dans le menu graphique du bureau.

Pour la première fois, il est peut-être nécessaire de lancer R dans une console en mode super-utilisateur:

#En mode superutilisateur:
su + mot de passe
R

Une fois dans R, frapper la commande suivante et [Enter]:

> library(Rcmdr)

Les librairies que Rcmdr semble nécessiter seront demandées. Soit vous en disposez dans un répertoire particulier, auquel cas vous pouvez fournir le nom du répertoire dans une boîte de dialogue, soit elles seront téléchargées et installée avec les droit de superutilisateur. (gdl refuse d'être installé (X11 not found but required, configure aborted) et est téléchargé à chaque fois que l'on ouvre Rcmdr)

Rcmdr présente deux fenêtres: celle du haut permet la saisie de commande ou de calcul, le bouton Soumettre interprète la partie surlignée à la souris et en donne la solution dans la fenêtre du bas.

Il y a encore rstudio (entre 65 et 117Mo, Affero GPL).

2. Valeurs, variables et opérateurs

## permet un commentaire à droite du double # (ne sera pas pris en compte dans la lecture du script).
; sépare deux opérations ou commandes sur une même ligne.

2.1 Opérateurs basiques

L'assignation d'une valeur à une variable se fait par <- :

x <- 5 affecte la valeur numérique 5 à la variable x
ch <- "Eggs" affecte la chaîne Eggs à la variable ch

Mais x=5 et x="eggs" fonctionnent tout aussi bien.

+, -, *, / s'organisent entre eux comme appris à l'école. Pour changer l'ordre de préséance entre les opérateurs, il faut utiliser les parenthèses: 3*5-7/4 n'égale pas 3*(5-7)/4

paste("n","a") donne la chaîne na (contrairement à beaucoup de langage qui utillisent +)

letters[n] donne la nième minuscule de l'alphabet
LETTERS[n] donne la nième majuscule de l'alphabet

^ est l'opérateur exposant: 7^3 donne 343

x %/% y division entière de x par y: 43 %/% 17 donne 2
x %% y opération modulo, reste de la division entière de x par y: 43 %% 17 égale 9

min(x,y,z) retourne la valeur minimale entre deux ou plusieurs valeurs
max(x,y,z) retourne la valeur maximale entre deux et plusieurs valeurs

abs(n) valeur absolue (abrogation du signe)

2.2 Booléens et opérateurs logiques

TRUE et FALSE sont les valeurs «booléennes» VRAI et FAUX.

Ces valeurs sont générées par les opérateurs suivants:

x == y retourne TRUE si x et y sont égaux ; FALSE sinon
x != y retourne TRUE si x et y sont différents ; FALSE sinon
x < y retourne TRUE si x est strictement inférieur à y ; FALSE sinon
x > y retourne TRUE si x est strictement supérieur à y ; FALSE sinon
x <= y retourne TRUE si x est inférieur ou égal à y ; FALSE sinon
x >= y retourne TRUE si x est supérieur ou égal à y ; FALSE sinon

x & y ou x && y: «ET logique»: retourne TRUE si x et y sont vrai ; FALSE sinon
x | y ou x || y: «OU logique»: retourne TRUE si x ou y sont vrai ; FALSE sinon
xor(x, y): «OU exclusif» un seul TRUE donne TRUE ; deux TRUE donnent FALSE
! x inversion logique

Ces deux classes d'opérateurs permettent des compositions, parfois avec des parenthèses:

(3 > 2) | (2 == 3)

2.3 Types de données

Numériques: integer (entiers négatif, nul ou positif), double (non entiers) ou numeric (l'un ou l'autre)
Chaînes: character, comme "cinq", "", "43"
Booléenne: logical, comme TRUE, FALSE et NA
Facteur: factor???

class() permet de connaître le type d'une variable.

Attention! Dans le cas d'un vecteur contenant au moins une chaîne de caractères, tout nombre est considéré comme une chaîne

> a <- c(1,2,3,4,5)
> class(a)
[1] "integer"
> a[5] <- "cinq"
> class(a)
[1] "caracter"
> a[1]/3
Error in a[1]/3 : argument non numérique pour un opérateur binaire

2.4 Vecteurs

liste <- c(5,6,4,8,2) affecte le vecteur (5,6,4,8,2) à la variable liste ; c() pour «combine»
scan() permet l'introduction de valeurs

is.vector(var) retourne TRUE si var est un vecteur, FALSE sinon.

Il est possible de générer une séquence de nombre de x à y inclus avec l'expression x:y:

> s <- 13:19
> s
[1]  13 14 15 16 17 18 19

Une opération sur un vecteur s'applique sur chacun de ses éléments:

> carres <- c(1, 4, 9, 16)
> carres/6
[1] 0.1666667 0.6666667 1.5000000 2.6666667

(le [1] indique que la valeur suivante est la première d'une série)

Il est possible d'additionner, multiplier... les vecteurs entre eux:

> n <- c(1, 2, 3, 4)
> p <- c(4, 3, 2, 1)
> n^2*p
[1]  4 12 18 16

Mais dans ce cas, les vecteurs doivent être de même longueur.

Il est possible d'accéder à une valeur particulière d'un vecteur:

> carres <- c(1, 4, 9, 16, 25, 36, 49)
> carres[7]
[1]  49

Attention! le premier élément d'un vecteur est désigné par l'indice [1], contrairement à la grande majorité des langages informatiques, où un vecteur commence à l'indice [0].

NA («not available») est une valeur qui rend le résultat de tout calcul NA.

min(v1) donne la valeur minimale d'un vecteur
min(v1,v2) donne la valeur minimale parmi deux (ou plusieurs) vecteurs

max(v1) donne la valeur maximale d'un vecteur
max(v1,v2) donne la valeur maximale parmi deux (ou plusieurs) vecteurs

seq(debut, fin, by=pas) fabrique un vecteur des nombres entre debut et fin avec une distance de pas:

> seq(1, 2.99, by=0.2)
[1] 1.0 1.2 1.4 1.6 1.8 2.0 2.2 2.4 2.6 2.8

rep(qqch,n) répète n fois une valeur ou un vecteur:

> rep(2:4,3)
[1] 2 3 4 2 3 4 2 3 4

Il est possible de répéter chaque élément un à un:

> rep(2:4,each=3)
[1] 2 2 2 3 3 3 4 4 4

sort(vect) trie les valeurs du vecteur vect:

> sort(c(5,0,6,4,8,3,2,9,1,7))
 [1] 0 1 2 3 4 5 6 7 8 9

sample(vect,n) retourne un vecteur de n valeurs au hasard choisies dans le vecteur vect (tirage sans remise: n ne peut dépasser la longueur du vecteur):

> sample(0:6,3)
 [1] 5 1 2

sample(vect,n,replace=TRUE) permet un tirage avec remise et donc un nombre plus grand que la longueur du vecteur (rep=T est un équivalent):

> sample(c("P","F"),5,rep=T)
[1] "F" "P" "P" "F" "P"

Note: les deux réponses ci-dessus sont susceptibles d'être différentes à chaque «tirage».

2.4 Matrices

Les matrices sont des tableaux à deux dimensions. Elle sont importantes dans les distributions bivariées, ou les enquêtes individus/variables.

matrix() fabrique une matrice (la première valeur donne la valeur de remplissage, la seconde le nombre de lignes et la troisièmme le nombre de colonnes. Il est possible de remplir la matrice, par une variable (ou un vecteur défini en première position)

> x=c(1,0,91,8,47,4)
> m <- matrix(x,2,3)
> m
     [,1] [,2] [,3]
[1,]    1   91   47
[2,]    0    8    4

L'accès à une donnée se fait au moyen de ses coordonnées:

> m[1, 2]
[1] 91

Pour une matrice ne contenant qu'une seule valeur à chaque endroit, il suffit de l'indiquer en première position:

> m <- matrix(0,2,3)
     [,1] [,2] [,3]
[1,]    0    0    0
[2,]    0    0    0

Pour initialiser une matrice de chaînes:

> matrix("", 2, 3)
     [,1] [,2] [,3]
[1,]   ""   ""   ""
[2,]   ""   ""   ""

Puisque 0:5 défini un vecteur des nombres de 0 à 5 (inclus), il est possible de définir une matrice de premiers nombres impairs:

> matrix(0:5*2+1, 2, 3)
     [,1] [,2] [,3]
[1,]    1    5    9
[2,]    3    7   11

Comme les vecteurs, deux matrices de mêmes dimensions peuvent s'additionner et se soustraire. Elles peuvent également se multiplier et se diviser dans certains cas. En général, vous le savez quand vous en avez besoin.

det() retourne le déterminant d'une matrice, nécessairement carrée.

3. Fonctions

db=read("monfichier.rds") ou readRDS(file="monfichier.rds") ouvre une base de données du format R et la stocke dans la variable db.

save("monfichier.rds") ou saveRDS(file="monfichier.rds") sauvegarde une base de données du format R.

Pour lire d'autres formats (tableau Excel, SPSS, STAT, SAS...), voir annexe. La chaîne est le chemin et le fichier ("/chemin/fichier" sous Unix et "D:\chemin\fichier" sous Windows.

var=c() fabrique une variable vecteur
length() retourne" le nombre d'éléments d'un vecteur

min() retourne la valeur minimale d'un vecteur numérique
max() retourne la valeur maximale d'un vecteur numérique
sum() retourne la somme des éléments d'un vecteur

mean() retourne la moyenne des éléments d'un vecteur (leur somme divisée par leur nombre)
mean(x, na.rm=TRUE) permet le calcul en écartant les NA («NA remove»)

var() retourne la variance de la distribution représentée par un vecteur numérique(la variance est une mesure de dispersion d'une distribution ; il s'agit de la somme des différences au carré de chaque valeur à la moyenne, divisée par le nombre d'observations)

sd() retourne l'écart-type d'une distribution représentée par un vecteur numérique (l'écart-type équivaut à la racine carrée de la variance)

Fonctions mathématiques

floor() arrondissement par défaut
ceiling() arrondissement par excès

round(reel) arrondissement au nombre entier le plus proche.
round(reel, n) arrondissement à n décimales

Note: un .5 final est tantôt arrondit par défaut, tantôt par excès, vers le nombre entier pair:

> round(2.5)
2
> round(3.5)
4

exp(n) retourne la valeur de e (environ 2.718282) exposant n
log(n) retourne le logarithme népérien du nombre n

cos(n) retourne la valeur du cosinus d'un angle exprimé en radian
sin(n) retourne la valeur du sinus d'un angle exprimé en radian
tan(n) retourne la valeur de la tangente d'un angle exprimé en radian

À suivre...

names()
str()
order()
start()/end()
array
data.frame
factor
list
time-series
vector


Annexes

La programmation moderne fait appel à des fonctions qui ne sont pas écrites dans le programme principal (R en l'occurrence), mais dans des compléments souvent développés indépendamment, qui ont pour nom «bibliothèques» («library» en anglais). Par exemple, l'ouverture d'un fichier au format R utilise une fonction interne à l'application, mais l'ouverture d'un fichier d'autres format (DBF, SAV...) se fera par une fonction appartenant à une bibliothèque.

La page cran.r-project.org/web/packages liste les 15 000 bibliothèques disponibles, avec un lien vers un fichier de présentation.

Installation de bibliothèques

Certaines sont automatiquement installées avec R, mais les plus nombreuses doivent être expressément installées. En Linux, l'installation peut parfois être faite, comme pour toute autre application, par son nom de paquetage. Mais si vous disposez d'une connexion Internet, le plus simple est d'utiliser la ligne de commande R, qui télécharge et installe elle-même la bibliothèque. Pour une bibliothèque imaginaire ImhO (Attention! les majuscules ne sont pas facultatives)

> install.packages("ImhO")

...ce qui devrait directement se faire en Windows (pas essayé). En Linux, R tentera d'installer la bibliothèque dans /usr/local/lib/R/site-library, ce qui ne peut se faire sans les droits d'administrateur:

'lib = "/usr/local/lib/R/site-library"' ne peut être ouvert en écriture
Would you like to use a personal library instead? (yes/No/cancel) yes

R vous demandera alors si vous voulez créer un répertoire qui vous appartienne en tant que simple utilisateur:

Would you like to create a personal library
‘~/R/x86_64-pc-linux-gnu-library/3.5’
to install packages into? (yes/No/cancel) yes

L'installation n'est qu'à faire une fois (évidemment, si vous changez de système d'exploitation, il faudra tout réinstaller).

Utilisation de bibliothèques

Pour utiliser une bibliothèque installée, à chaque session ou en début de script:

library(ImhO)

Internet regorge de pages plus ou moins bien faites sur l'utilisation des fonctions des bibliothèques. Pour trouver de la documentation sur la bibliothèque (imaginaire) ImhO, saisir r stat imho dans le moteur de recherche DuckDuckGo.

Importation, exportation

Trois lignes sont nécessaires. La première importe la bibliothèque, à ne faire qu'une fois par session ou script. La seconde assigne les données à une variable, appelée ici db. La troisième sera la sauvegarde de la base de données en format universel csv («comma separated values», mais ici, les valeurs seront séparées par des tabulations: sep="\t"):

write.table(db, file="votre_base.csv", row.names=TRUE, col.names=TRUE, sep="\t")

ou en format natif de R: RDS

save("monfichier.rds")

Bibliothèque foreign

library(foreign)

Pour importer une base de données de type .spss (SPSS .sav), .dbf (dBaseII, dBaseIII, dBaseIV et Clipper), .dta (Stata), .arff (Weka), Minitab, S, SAS, Systat

La bibliothèque foreign permet l'importation de plusieurs type de bases de données. L'extension est normalement installée par défaut avec R, sous le nom de paquetage r-cran-foreign pour le système Linux/Debian.

Format .dta de STATA

db=read.dta("chemin/ma_base.dta")

Format .arff de Weka

db=read.dta("chemin/ma_base.dta")

Format .sav de SPSS/PSPP

db=read.spss("chemin/ma_base.sav")

Format .dbf de dBaseII, III et IV

db=read.dbf("chemin/ma_base.dbf")

Bibliothèque openxlsx

library(openxlsx)

Format .xlsx de Windows Excel (2007)

db=read.xlsx("chemin/votre_feuille.xlsx")

Pour exporter la base de données:

write.table(db, file="votre_base.csv", row.names=TRUE, col.names=TRUE, sep="\t")

Bibliothèque RODBC

library(RODBC)

À préciser! Pour les fichiers DBase, Oracle, xlsx d'Excel, SQL et .mdb d'Access (à partir de 2007?), cela devrait être la librairie RODBC (read-only! librarie r-cran-rodbc installée), mais la documentation semble lacunaire, il semble manquer l'indication du driver spécifique au format de fichier:

library(RODBC)
db=odbcConnect("chemin/fichier.xlsx")