Rstudio
Connectez vous à l’interface Rstudio
de la plateforme IFB en utilisant l’adresse suivante : lien
Ouvrez un nouveau fichier R script
en utilisant le menu File
.
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.
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
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")
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")
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
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.
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
.
metaFile2 = metaFile[-ind.na,]
abonDF2 <- abonDF[-ind.na,]
dim(metaFile2) ; dim(abonDF2)
[1] 234 13
[1] 234 523
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.
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 ?
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 :
boxplot()
).by()
, means()
et sd()
).qnorm()
et var()
).t.test()
)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é.
Définissez les variables aléatoires sur lesquelles vous allez travailler pour répondre à cette question.
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 |
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.
table()
).Effectuez le test du chi2 sur cette table de contingence (fonction chisq.test()
).
Comparez les effectifs théoriques et observés pour finaliser votre conclusion au test (argument $expected
de la fonction chisq.test()
).
On se demande si la composition de l’entérotype à une influence sur l’indice de masse corporelle des individus.
Représentez la distribution de l’indice de masse corporelle pour les individus en fonction de leur entérotype (fonction boxplot()
).
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é :
Testez la normalité de \(X\) dans les 3 échantillons. (fonction by()
, shapiro.test()
)
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()
).
metadata
microbiota.abundance