Module 3 - Analyse statistique avec R - Séance 1

DUBii 2019

Hugo Varet, Frédéric Guyon, Olivier Kirsh et Jacques van Helden

2020-02-17

R en quelques mots

Langage de programmation qui permet de :

  • manipuler des données : importer, transformer, exporter
  • faire des analyses statistiques plus ou moins complexes : description, exploration, modélisation…
  • créer des (jolies) figures

Disponible sur Windows, MacOS, Linux

Historique :

  • 1993 : début du projet R
  • 2000 : sortie de R 1.0.0
  • 2018 : R 3.5.1

Avantages et inconvénients

Avantages :

  • Souplesse d’utilisation pour réaliser des analyses statistiques
  • R est libre et gratuit, même s’il existe maintenant des versions payantes de RStudio (shiny et/ou server)
  • Reproductibilité des analyses en écrivant/sauvegardant les commandes R dans des scripts
  • Très largement utilisé par la communauté
  • Très largement enrichi par la communauté : système de packages

Inconvénients :

Analyse de données vs langage de programmation

  • Lire un tableau : read.table()
  • Fusionner deux tableau : merge()
  • Sélectionner des colonnes : mydata[ , c("col1","col2")]
  • Calculer une moyenne : mean(x)
  • Exporter un tableau de données : write.table()
  • Régression linéaire : lm(y ~ x)
  • Tester une hypothèse : t.test()
  • Dessiner un histogramme : hist()
  • Convertir des données : as.data.frame()
  • Tracer une courbe : plot()
  • Réaliser une ACP : prcomp()

Un script R ne doit pas être une boîte noire !

Modes d’utilisation (liste non exhaustive)

  • Localement via le terminal : pas très convivial
  • Localement via RStudio : utilisation classique
  • Sur un serveur distant via le terminal et une connexion ssh : cluster de calculs de l’IFB
  • Sur un serveur via un nagivateur pour accéder à RStudio server : cf slide suivante

Se connecter au serveur ou ouvrir RStudio

Les travaux pratiques seront réalisés sur le serveur RStudio sur IFB core cluster.

https://rstudio.cluster.france-bioinformatique.fr/

Identifiez-vous avec votre login du cluster IFB core. Ceci vous permettra d’accéder à votre dossier personnel à partir de l’interface de RStudio.

Définir et créer son dossier de travail pour ce TP

Définir une variable qui indique le chemin du dossier de travail

S’il n’existe pas encore, créer le dossier de travail. (Commande Unix équivalente: “mkdir -p ~/intro_R”)

Alternative : créer le répertoire intro_R en utilisant les fonctionnalités de RStudio

Explorer son dossier de travail

Aller dans ce dossier de travail. (Commande Unix équivalente: “cd ~/intro_R”)

Alternative : cliquer sur “Session/Set Working Directory/Choose Directory”

Où suis-je ? (Commande Unix équivalente: “pwd”)

Qu’y a-t-il par ici ? (Commande Unix équivalente: “ls”)

R vu comme une calculatrice

Notion de variable/objet

Les types de données élémentaires

  • les nombres (réels par défaut): numeric, double
  • les nombres entiers: integer
  • les caractères: character

Les types de données

  • les booléens: boolean
  • les facteurs: factor

très fréquent en R : on verra plus tard

Les types de données : les vecteurs

  • tout est vecteur
  • vecteur: ensemble de valeurs du même type et indexées
  • listes: ensemble de valeurs de types différents et indexées

Les types de données : les tableaux de données

  • type de données typique de l’analyse de données
  • data.frame: tableaux dont les colonnes sont de même types

Manipulation des vecteurs

  • indiçage des vecteurs: []
  • vecteur d’indices
  • vecteur de booléens=on prend ou pas sous condition

Manipulation des vecteurs

  • accés aux éléments de vecteur par le nom

Listes

Une liste combine plusieurs sous-structures désignées par des noms ou des indices. Les sous-structures peuvent être de différents types (vecteurs, tableaux à deux dimensions, ou objets plus complexes).

Création d’une liste

Accés aux éléments éléments de liste par le nom

Data frame

  • data.frame = tableau à deux dimensions
  • data.frame = liste de vecteur colonne
  • ou bien

Les fonctions de base

  • +,-,*,\,**
  • cos,sin,log,log10,exp
  • les fonctions sont toutes vectorielles

Télécharger un fichier

La commande download() permet de télécharger un fichier à partir d’un serveur, et dir.create() permet de créer un nouveau dossier dans l’espace de travail:

Chargement des données

Charger le contenu du fichier “expression.txt” dans une variable nommée “exprs”.

Question : à quoi servent les options header et sep ?

Réponse : appelez à l’aide (diapo suivante)

Afficher l’aide d’une fonction

Notation alternative

Affichage de l’objet “exprs”

La fonction print() imprime l’ensemble des valeurs d’une variable.

Quand on travaille avec un tableau de données omiques comportant des milliers de lignes, ce n’est pas forcément très utile d’afficher toutes les valeurs d’une table de données.

                id    WT1   WT2    KO1   KO2
1  ENSG00000034510 235960 94264 202381 91336
2  ENSG00000064201    116    71     64    56
3  ENSG00000065717    118   174    124   182
4  ENSG00000099958    450   655    301   472
5  ENSG00000104164   4736  5019   4845  4934
6  ENSG00000104783   9002  8623   7720  7142
7  ENSG00000105229   1295  2744   1113  2887
8  ENSG00000105723   3353  7449   3589  7202
9  ENSG00000116199   2044  4525   2604  4902
10 ENSG00000118939   7022  2526   6269  3068
11 ENSG00000119285  15783 17359  18591 20077
12 ENSG00000121680   3133  2775   2045  2796
13 ENSG00000125384   1380  3079    869  2419
14 ENSG00000129562  12089  7958  10708  7683
15 ENSG00000129932   1744  2247   1513  3104
16 ENSG00000134198    122    66     44    16
17 ENSG00000135452    635   427    662   291
18 ENSG00000140416     83   246    136   267
19 ENSG00000147274  16013 17642  15055 18804
20 ENSG00000148090    552  1062    615  1082
21 ENSG00000148248  62324 33973  56862 37710
22 ENSG00000157036   1225  1475   1275  1373
23 ENSG00000157869   1201  1034   1025   858
24 ENSG00000159433     31   788     30   675
25 ENSG00000161692    695  1825    746  1851
26 ENSG00000167005  26866 23111  24888 22661
27 ENSG00000168517    273   112    190    77
28 ENSG00000169570    202   181    207   209
29 ENSG00000172216   3515  1981   3204  3174
30 ENSG00000175221   1988  4788   2115  5306
31 ENSG00000183161   2238   974   2089   996
32 ENSG00000185324   1236  2163   1048  2024
33 ENSG00000188985   3415  1703   3587  2096
34 ENSG00000196867    209   189    293   192
35 ENSG00000197081  14741 36309  14941 29645
36 ENSG00000198586   1216  4545   1660  3932
37 ENSG00000214121   4044  2575   3019  2506
38 ENSG00000225630   1405  8135   1569  7866
39 ENSG00000226742    158    94    153   178
40 ENSG00000238241     90    43    122   143
41 ENSG00000248751    518   718    411   597
42 ENSG00000250202    261   163    177   191
43 ENSG00000251106     94   114     63    86
44 ENSG00000253991     77    78    134    92
45 ENSG00000254470   3025  3707   2558  4066
46 ENSG00000262814  15470 11450  11656 13821
47 ENSG00000267228   3801  2465   2787  2301
48 ENSG00000267699   1488  1086   1374   939
49 ENSG00000269293    424   162    310   120
50 ENSG00000279329     55    76     58    70

Affichage des premières lignes de l’objet

               id    WT1   WT2    KO1   KO2
1 ENSG00000034510 235960 94264 202381 91336
2 ENSG00000064201    116    71     64    56
3 ENSG00000065717    118   174    124   182
4 ENSG00000099958    450   655    301   472
5 ENSG00000104164   4736  5019   4845  4934
6 ENSG00000104783   9002  8623   7720  7142

Un peu plus de lignes

                id    WT1   WT2    KO1   KO2
1  ENSG00000034510 235960 94264 202381 91336
2  ENSG00000064201    116    71     64    56
3  ENSG00000065717    118   174    124   182
4  ENSG00000099958    450   655    301   472
5  ENSG00000104164   4736  5019   4845  4934
6  ENSG00000104783   9002  8623   7720  7142
7  ENSG00000105229   1295  2744   1113  2887
8  ENSG00000105723   3353  7449   3589  7202
9  ENSG00000116199   2044  4525   2604  4902
10 ENSG00000118939   7022  2526   6269  3068
11 ENSG00000119285  15783 17359  18591 20077
12 ENSG00000121680   3133  2775   2045  2796
13 ENSG00000125384   1380  3079    869  2419
14 ENSG00000129562  12089  7958  10708  7683
15 ENSG00000129932   1744  2247   1513  3104

Caractéristiques d’un tableau

Dimensions

Noms des lignes et colonnes

Résumé rapide des données par colonne

               id          WT1              WT2               KO1                KO2         
 ENSG00000034510: 1   Min.   :    31   Min.   :   43.0   Min.   :    30.0   Min.   :   16.0  
 ENSG00000064201: 1   1st Qu.:   264   1st Qu.:  203.2   1st Qu.:   228.5   1st Qu.:  223.5  
 ENSG00000065717: 1   Median :  1338   Median : 1903.0   Median :  1324.5   Median : 2060.0  
 ENSG00000099958: 1   Mean   :  9358   Mean   : 6498.6   Mean   :  8356.0   Mean   : 6489.5  
 ENSG00000104164: 1   3rd Qu.:  3730   3rd Qu.: 4727.2   3rd Qu.:  3491.2   3rd Qu.: 4926.0  
 ENSG00000104783: 1   Max.   :235960   Max.   :94264.0   Max.   :202381.0   Max.   :91336.0  
 (Other)        :44                                                                          

Sélection de colonnes d’un tableau

Valeurs stockées dans la colonne nommée “WT1”

Notation alternative

Sélection de plusieurs colonnes.

Sélection de colonnes par leur indice

Histogramme des valeurs d’expression pour WT1

Exercice : améliorer ce graphique en modifiant la couleur de l’histogramme, en ajoutant un titre et des noms aux axes des abscisses et ordonnées.

Histogramme avec quelques options esthétiques

Histogramme avec quelques options esthétiques

Remarques

  • La distribution sur l’abcsisse est déséquilibrée: les valeurs les plus réfquentes sont “collées au mur” (concentrées sur la gauche) du fait d’une valeur aberrante (1 gène avec un très grand nombre de reads).
  • L’histogramme n’est pas représentatif car pour ce tutoriel nous avons séletionné un tout petit nombre de gènes (\(n = 50\)). Nous traiterons un jeu de données complet à titre d’exercice.

Histogramme du logarithme de ces valeurs

Boîtes à moustaches

Boîtes à moustaches horizontales

Pourquoi les boîtes à moustaches apparaissent-elles décalées ?

Remarque : le décalage entre boîtes nous indique que les librairies de comptage ne sont pas normalisées. Les méthodes de normalisation seront vues dans un cours ultérieur.

Nuages de points : expressions KO1 vs WT1

Exercice : améliorer ce graphique selon vos envies !

Personnalisation des paramètres graphiques

Sélection de lignes d’un tableau

Sélection des lignes 4 et 11 du tableau des expressions

Indices des lignes correspondant aux IDs ENSG00000253991 et ENSG00000099958

Afficher les lignes correspondantes

Sélection de lignes et colonnes

On peut sélectionner à la fois des lignes et des colonnes en combinant les méthodes vues ci-dessus.

                id   WT1   WT2   KO1   KO2
10 ENSG00000118939  7022  2526  6269  3068
11 ENSG00000119285 15783 17359 18591 20077
12 ENSG00000121680  3133  2775  2045  2796
13 ENSG00000125384  1380  3079   869  2419
14 ENSG00000129562 12089  7958 10708  7683
15 ENSG00000129932  1744  2247  1513  3104

On peut également désigner les lignes ou les colonnes par leur nom.

Calculs sur des colonnes

Calcul de moyennes par ligne (rowMeans) pour un sous-ensemble donné des colonnes (WT1 et WT2).

Ajout de colonnes avec les expressions moyennes des WT et des KO.

Fold-change KO vs WT

Moyenne de tous les échantillons

MA-plot: log2FC vs intensité

\(M\) est le logarithme en base 2 du rapport d’expression.

\[M = log_{2} (\text{FC}) = log_{2} \left( \frac{\text{KO}}{\text{WT}} \right) = log_2 (\text{KO}) - log_2(\text{WT})\]

\(A\) (average intensity) est la moyenne des logarithmes des valeurs d’expression.

\[A = \frac{1}{2} log_2 (\text{KO} \cdot \text{WT}) = \frac{1}{2} \left( log_2 (\text{KO}) + log_2(\text{WT}) \right)\]

MA-plot : log2FC vs intensité

Charger les annotations des gènes

Combien de gènes par chromosome ?

Question : combien de gènes sur le chromosome 8 ? Et sur le X ?

Diagramme en bâtons – gènes par chromosomes

Sélectionner les données du chromosome 8

1ere étape: fusionner les deux tableaux exprs et annot

2eme étape: sous-ensemble des lignes pour lesquelles chr vaut 8

Exporter exprs8 dans un fichier

Les graphiques en R

  • Fonction générique pour le graphisme : plot

Les graphiques en R

  • Exemple

Les graphiques en R

Autres fonctions graphiques de haut-niveau :

  • histograms: hist()
  • bar plot with vertical or horizontal bars: barplot()
  • contour plots or level plots: contour()
  • images: image()
  • surfaces: persp()
  • 3D: plot3d()

Les graphiques en R

Les graphiques en R

Fonctions graphiques de bas niveau : permettent d’ajouter des éléments à un graphique déjà ouvert.

  • des points: points()
  • un titre: title()
  • une légende: legend()
  • des droites: abline()
  • des lignes: lines

Les graphiques en R: ajout d’éléments

Les fonctions en R

  • ma_fonction: nom de la fonction (variable comme les autres)
  • valeur1, valeur2: arguments de la fonction
  • valeur_retour: la dernière ligne donne la valeur retournée par la fonction
  • exemple simple:

Les fonctions en R

  • les arguments ont un nom et peuvent avoir une valeur par défaut
  • à l’appel de la fonction:
    • les arguments sont dans l’ordre
    • dans le désordre si ils sont nommés
    • peuvent être absents, si valeur par défaut
  • exemple simple:

Pourquoi documenter son code ?

Quel que soit le langage de programmation utilisé, il est crucial de documenter son code.

  • pour le rendre compréhensible pour d’autres personnes,
  • pour s’y retrouver quand on devra le modifier quelques mois plus tard.

Comment documenter son code ?

En R, le caractère # marque le début d’un commentaire. Le texte qui suit est ignoré, jusqu’à la fin de la ligne.

  • Avant un bloc de code, annoncer à quoi il sert.
  • Vous pouvez également ajouter un commentaire en fin de ligne (par exemple pour décrire les variables)

Take home messages

  • Tout est faisable avec R

  • Définir et comprendre l’opération mathématique/statistique avant de chercher la fonction R correspondante

  • R est un langage :

    • plusieurs types et structures de données
    • énormément de commandes à connaître
    • Google est votre ami
  • Une infinité de :

    • ressources en ligne
    • tutoriels pour des analyses spécifiques (e.g. DESeq2 pour le RNA-Seq)