DU Bii - module 3: R and stats


Session 3: practical on statistics for omics data

Thursday 4th of March, 2021 Claire Vandiedonck

teachers: Claire Vandiedonck & Antoine Bridier-Nahmias; helpers: Anne Badel, Clémence Réda, Olivier Sand, Jacques van Helden

Content of this tutorial:

  1. Test statisqtique de comparaison de moyennes: impact de la différence entre les moyennes et de la variance
  2. Effets des tests multiples sur les taux de faux positifs

=> About this jupyter notebook

This a jupyter notebook in R, meaning that the commands you will enter or run in Code cells are directly understood by the server in the R language.
You could run the same commands in a Terminal or in RStudio.

In this tutorial, you will run one cell at a time.

Do not hesitate to try other commands by adding other cells.

0. Before going further


Check your your working directory, and sit it to another path if needed:

I. Test statistique de comparaison de moyennes: impact de la différence entre les moyennes et de la variance


I.A. Deux populations avec une moyenne différente mais une même variance

Nous allons d'abord tirer deux échantillons de deux populations présentant des moyennes différentes et une même variance.

A titre d'exemple dans ce parctical nous prendrons la "taille des humains debout" comme trait d'intérêt. En France en 2001, les données de l'INSEE indiquaient une taille moyenne de 1.62 pour les femmes et de 1.74 m pour les hommes. Dans l'ensemble de la population, l'écacrt-type était d'environ 7 cm.

Tip: utiliser la fonction rnorm()

Tip: utiliser les fonctions summary() et boxplot

Tip: utiliser la fonction t.test()

Tip: utilisez la fonction str() pour voir comment extraire cette pvalue du test

Illustrons à présent cette différence à l'aide du paquet dabestR https://github.com/ACCLAB/dabestr

Tip: utilisez la fonction requireNamespace), install.packages(), library() et sessionInfo()

Pour cela vous devez d'abord générer un dataframe:

- Rassemblez les données des deux échantillons dans un dataframe avec deux colonnes `height` et `grp` pour le groupe.

Tip: utilisez la fonction data.frame() sur un vecteur concanténant les taille des deux échantillons avec la fonction c() et un vecteur répétant les valeurs 1 et 2 100 fois dans le bon ordre avec la fonction rep() et son argument each=

- Affichez les premières, dernières lignes du dataframe et sa structure. Comptez également le nombre d'obersvations appartenant au groupe 1 ou 2.

Tip: utilisez les fonctions head() , tail(), str() et table().

- Faites de Grander-Latman estimation plot:

Tip: utilisez les fonctions dabest() , unpaired_mean_diff(), et plot().

I.B. Impact de la taille des échantillons, de la différence des moyennes ou de la variance

Nous allons à présent étudier l'impact de la différence entre les moyennes des populations de départ ou celui de la variance sur la puissance de détecter une différence.

=> Comment a varié la significativité?

Les paramètres de la distribution de la taille des humains varient aussi entre les populations dans le monde.

=> La différence, même importante entre les moyennes des populations, est-elle encore détectable?

=> Détectez-vous quand même une différence statistiquement significative?

Conclusion: La puissance du test augmente avec: - la taille des échantillons - la différence entre les moyennes des populations - une petite variance

II. Effet des tests multiples sur le taux de faux positifs


Dans les jeux de données omiques, on effectue autant de tests que de "features".

Nous n'allons pas générer dans ce practical de multiples features mais nous allons prendre notre trait de la taille et tester par simulation l'impact des tests multiples sur les faux positifs.

Nous repartons du dataframe généré ci-dessus.

Tip: Utilisez la fonction for() pour faire répéter votre code 1000 fois. Dans la boucle, générez un vecteur avec les valeurs perumutées pour le groupe et effectuez le test pour récupérer les valeurs p et de statsitique

Tip: Utilisez la fonction qnorm() pour retrouver la valeur seuil d'une loi normale au risque alpha = 5%

=> Ce résultat était-il attendu?

=> Quelle est la distribution des pvalues sous HO?

Conclusion: Sous HO: - on obtient environ une proportion alpha de valeurs significatives -> si 10000 tests ont été effectués, cela fait envriron 500 différences significatives! Il faut donc corriger pour les tests multiples pour éviter un taux de faux positifs trop élevé. - la distribution des pvalues est une distribution uniforme entre 0 et 1.




About jupyter notebooks:
- To add a new cell, click on the "+" icon in the toolbar above your notebook
- You can "click and drag" to move a cell up or down
- You choose the type of cell in the toolbar above your notebook:
- 'Code' to enter command lines to be executed
- 'Markdown' cells to add text, that can be formatted with some characters
- To execute a 'Code' cell, press SHIFT+ENTER or click on the "play" icon
- To display a 'Markdown' cell, press SHIFT+ENTER or click on the "play" icon
- To modify a 'Markdown'cell, double-click on it

To make nice html reports with markdown: html visualization tool 1 or html visualization tool 2, to draw nice tables, and the Ultimate guide.
Further reading on JupyterLab notebooks: Jupyter Lab documentation.