1 Lancement de Rstudio

  1. Connectez vous à l’interface Rstudio de la plateforme IFB en utilisant l’adresse suivante : lien

  2. Ouvrez un nouveau fichier R script en utilisant le menu File.

2 Description des données

  1. Ouvrez les deux fichiers de données en utilisant la fonction readRDS(). Vérifiez que les objects créés ont les bonnes dimensions.
metaFile <- readRDS("data/metadata.RDS")
dim(metaFile)
[1] 237  13
abonDF <- readRDS("data/microbiota.abundance.log.RDS")
dim(abonDF)
[1] 237 523

Pensez à adapter la localisation des fichiers à votre environnemment et l’architecture de vos dossiers.

  1. Quels types de variables contient le fichier metadata.RDS (fonction str()).
str(metaFile)
'data.frame':   237 obs. of  13 variables:
 $ Age       : num  40 42 29 43 42 32 33 26 52 36 ...
 $ Gender    : Factor w/ 2 levels "female","male": 1 1 1 1 2 2 2 2 2 1 ...
 $ BMI       : num  20 19.9 17.9 25 21.8 ...
 $ status    : Factor w/ 2 levels "healthy","liver": 1 1 1 1 1 1 1 1 1 1 ...
 $ INR       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ Crea      : num  53 46 44 41 79 68 62 83 87 57 ...
 $ Alb       : num  49.4 48.2 47.9 45.4 50.1 52 54.1 47.8 45.6 49.9 ...
 $ TB        : num  10 24 13 10 12 21 19 11 7 11 ...
 $ PT        : num  NA NA NA NA NA NA NA NA NA NA ...
 $ CTP       : num  NA NA NA NA NA NA NA NA NA NA ...
 $ MELD      : num  NA NA NA NA NA NA NA NA NA NA ...
 $ GC        : num  168176 254957 93942 188875 238698 ...
 $ Enterotype: num  1 1 1 1 1 1 1 1 1 1 ...

Les variables sont toutes numériques sauf les variables

  • “Gender” : variable à 2 classes “female” et “male”
  • status : variable à 2 classes “healthy”,“liver”
  1. Déterminez le nombre et la proportion de patients sains et malades dans le jeu de données. Représentez ces distributions à l’aide de graphiques en bâtons (fonctions table() et barplot()).
table(metaFile[,"Gender"])

female   male 
    81    156 
table(metaFile[,"Gender"]) / nrow(metaFile)

   female      male 
0.3417722 0.6582278 
barplot(table(metaFile[,"Gender"]), ylab="Occurrence", xlab="Genre")

  1. Déterminez le nombre et la proportion d’hommes et de femmes dans le jeu de données. Représentez ces distributions à l’aide de graphiques en bâtons (fonctions table() et barplot()).
table(metaFile[,"status"])

healthy   liver 
    114     123 
table(metaFile[,"status"])/nrow(metaFile)

  healthy     liver 
0.4810127 0.5189873 
barplot(table(metaFile[,"status"]), ylab="Occurrence", xlab="Status")

  1. En utilisant la fonction summary(), étudiez la distribution des différentes variables. Que remarquez vous pour les variables INR, Crea, Alb, TB, PT, CTP, MELD et Enterotype.
summary(metaFile)
      Age           Gender         BMI            status         INR             Crea             Alb              TB               PT             CTP              MELD             GC           Enterotype   
 Min.   :18.00   female: 81   Min.   :15.94   healthy:114   Min.   :0.920   Min.   : 30.00   Min.   :15.20   Min.   :  5.00   Min.   :11.00   Min.   : 5.000   Min.   :-6.10   Min.   : 59985   Min.   :1.000  
 1st Qu.:38.00   male  :156   1st Qu.:20.31   liver  :123   1st Qu.:1.145   1st Qu.: 53.00   1st Qu.:32.75   1st Qu.: 12.00   1st Qu.:13.45   1st Qu.: 6.000   1st Qu.: 4.15   1st Qu.:127420   1st Qu.:1.000  
 Median :45.00                Median :21.97                 Median :1.280   Median : 63.00   Median :43.40   Median : 16.00   Median :14.70   Median : 7.000   Median : 7.40   Median :159838   Median :1.000  
 Mean   :46.45                Mean   :22.28                 Mean   :1.350   Mean   : 65.27   Mean   :40.50   Mean   : 41.51   Mean   :15.63   Mean   : 7.691   Mean   : 8.30   Mean   :163524   Mean   :1.541  
 3rd Qu.:54.00                3rd Qu.:23.94                 3rd Qu.:1.465   3rd Qu.: 76.00   3rd Qu.:48.70   3rd Qu.: 30.00   3rd Qu.:17.05   3rd Qu.: 9.000   3rd Qu.:11.95   3rd Qu.:193856   3rd Qu.:2.000  
 Max.   :78.00                Max.   :35.16                 Max.   :2.350   Max.   :163.00   Max.   :57.60   Max.   :597.00   Max.   :27.00   Max.   :14.000   Max.   :23.40   Max.   :308606   Max.   :3.000  
                                                            NA's   :114     NA's   :3        NA's   :3       NA's   :3        NA's   :114     NA's   :114      NA's   :114                      NA's   :56     
  1. Identifiez les individus qui ont des NA pour la variable Crea (fonctions which() et is.na()). Quel est le statut clinique de ces patients ? Quel est le genre de ces individus ?
ind.na <- which(is.na(metaFile[,"Crea"]))
ind.na
[1] 56 73 74
metaFile[ind.na,"status"]
[1] healthy healthy healthy
Levels: healthy liver
metaFile[ind.na, "Gender"]
[1] female female female
Levels: female male

Trois individus (56, 73, 74) ont des valeurs NA pour la variable Crea. Ces trois individus sont des patients contrôles de sexe féminin.

  1. Est-ce que ces individus ont des NA pour les autres variables ?
metaFile[ind.na,]
    Age Gender   BMI  status INR Crea Alb TB PT CTP MELD     GC Enterotype
H52  32 female 20.32 healthy  NA   NA  NA NA NA  NA   NA 209020          1
H80  50 female 19.53 healthy  NA   NA  NA NA NA  NA   NA 195091          1
H81  50 female 20.55 healthy  NA   NA  NA NA NA  NA   NA 252289          1

On observe que ces trois individus contrôles ont aussi des NA pour INR, Crea, Alb, TB, PT, CTP, MELD.

  1. Suppimez ces individus des deux data.frames qui contiennent les deux jeux de données
metaFile2 = metaFile[-ind.na,]
abonDF2 <- abonDF[-ind.na,]
dim(metaFile2) ; dim(abonDF2)
[1] 234  13
[1] 234 523
  1. Déterminez la moyenne et l’écart-type de chaque variable quantitative (fonctions apply(), mean() et sd()).
var.sel <- c( "Age", "BMI", "INR", "Crea", "Alb", "TB", "PT", "CTP", "MELD", "GC")
round(apply(metaFile2[, var.sel],2,mean, na.rm=T),3)
       Age        BMI        INR       Crea        Alb         TB         PT        CTP       MELD         GC 
    46.483     22.308      1.350     65.269     40.502     41.509     15.625      7.691      8.300 162815.295 
round(apply(metaFile2[, var.sel],2,sd, na.rm=T),3)
      Age       BMI       INR      Crea       Alb        TB        PT       CTP      MELD        GC 
   10.971     2.578     0.282    17.471     9.613    85.947     3.196     2.188     5.903 49482.070 

La fonction round() permet d’arrondir les valeurs à 3 chiffres après la virugle.

3 Comparaison des patients malades et sains

3.1 Mise en place de tests de comparaison de deux moyennes

On cherche à savoir si les patients et les individus contrôles présentent des caractéristiques différentes. Pour cela, on se pose les questions suivantes ?

  • Est-ce que l’âge des patients est significativement différent de celui des contrôles sains ?
  • Est-ce que l’indice de masse corporel des patients est significativement différent de celui des contrôles sains ?
  • Le taux de créatinine des patients est-il significativement différent de celui des contrôles sains ?
  • Le nombre de gènes différentiellement exprimés chez les patients est-il significativement différent de celui chez les contrôles sains ?

Créez deux data.frames qui contiennent pour le premier les métadonnées pour les patients sains et pour le second les métadonnées pour les patients malades.

Pour chacunes des questions précédentes, effectuez les étapes suivantes :

  1. Identifiez la variable aléatoire étudiée.
  2. Identifiez le test que vous allez réaliser.
  3. Représentez, sur le même graphique, la distribution de la variable aléatoire chez les individus sains et les patients malades en utilisant des boîtes à moustaches (fonction boxplot()).
  4. Calculez la moyenne et l’écart-type de la variable chez les individus sains et malades (fonctions by(), means() et sd()).
  5. Calculez l’intervalle de confiance à 95% de l’espérance de la variable aléatoire pour les individus sains et les individus malades (fonctions qnorm() et var()).
  6. Effectuez le test statistique pour répondre à la question. Posez les hypothèses et concluez au test. (fonctions t.test())

3.2 Mise en place de tests de chi2 d’homogénéité

Ensuite, on se demande si la maladie cirrhose touche autant les hommes que les femmes. Pour répondre à cette question, vous allez réaliser un test du Chi2 d’homogénéité.

  1. Définissez les variables aléatoires sur lesquelles vous allez travailler pour répondre à cette question.

  2. Déterminez la table de contigence qui renvoie le nombre de femmes et d’hommes chez les individus sains et les patients malades (fonction table()).

Status female male
healthy 42 72
liver 39 84
  1. Réalisez le test du chi2 à partir de cett table de contigence. (fonction chisq.test()). Avant de conclure pensez à vérifier les conditions de validité du test qui sont que tous les effectifs théoriques doivent être supérieurs à 5 (argument $expected de la fonction chisq.test()).

Pour finir nous cherchons à savoir si la distribution des enterotypes est différent chez les individus sains et les patients malades. Pour répondre à cette question, vous allez réaliser un test de chi2.

  1. Identifiez les variables aléatoires que vous allez utiliser pour répondre à cette question.
  2. Déterminez la table de contingence (fonction table()).
  3. Effectuez le test du chi2 sur cette table de contingence (fonction chisq.test()).

  4. Comparez les effectifs théoriques et observés pour finaliser votre conclusion au test (argument $expected de la fonction chisq.test()).

4 Etude des différents entérotypes

On se demande si la composition de l’entérotype à une influence sur l’indice de masse corporelle des individus.

  1. Représentez la distribution de l’indice de masse corporelle pour les individus en fonction de leur entérotype (fonction boxplot()).

  2. Définissez la variable aléatoire et les échantillons

Pour répondre à la question, il faut effectuer un test de comparaison de 3 moyennes en utilisant un test ANOVA.
Ce test a deux conditions de validité :

  • Il faut que la variable aléatoire \(X\) suive une loi normale dans les trois échantillons.
  • Il faut que la variable aléatoire \(X\) ait la même variance dans les trois échantillons (Homoscédaticité de \(X\)).
  1. Testez la normalité de \(X\) dans les 3 échantillons. (fonction by(), shapiro.test())

  2. Testez l’homoscédaticité de \(X\) (foncion bartlett.test()).

Les résultats que vous avez obtenus vous permettent de conclure que les conditions de validité du test ANOVA ne sont pas vérifiées. Pour répondre à la question, vous allez donc utiliser un test non paramétrique : le test de Kruskall-Wallis (fonction kruskal.test()).

5 Analyse en composante principale

5.1 Jeu de données metadata

  1. Réalisez une ACP sur ce jeu de données
  1. Quel pourcentage de la variance expliquée est représentée dans le premier plan factoriel ?
  2. Proposez une représentation graphique des individus avec les individus malades d’une couleur et les individus sains d’une autre.
  3. Pouvez-vous donner une interprétation de ce graphique ? Vous pouvez pour cela vous aider du cercle des corrélations.

5.2 Jeu de données microbiota.abundance

  1. Réalisez une ACP centrée réduite sur ce jeu de données.
  1. Quel pourcentage de la variance expliquée est représentée dans le premier plan factoriel ?
  2. Proposez une représentation graphique des individus avec les individus malades d’une couleur et les individus sains d’une autre.
  3. Proposez une représentation graphique des individus avec les enterotypes de trois couleurs différentes. Que constatez-vous ?