Science des données biologiques 2

Réalisé par le service d'Écologie numérique des Milieux aquatiques, Université de Mons (Belgique)

Préambule

Si vous n’avez jamais utilisé de tutoriel “learnr”, familiarisez-vous d’abord avec son interface ici.

Ne vous trompez pas dans votre adresse mail et votre identifiant Github

N’oubliez pas de soumettre votre réponse après chaque exercice

Conformément au RGPD (Règlement Général sur la Protection des Données), nous sommes tenus de vous informer de ce que vos résultats seront collecté afin de suivre votre progression. Les données seront enregistrées au nom de l’utilisateur apparaissant en haut de cette page. Corrigez si nécessaire ! En utilisant ce tutoriel, vous marquez expressément votre accord pour que ces données puissent être collectées par vos enseignants et utilisées pour vous aider et vous évaluer. Après avoir été anonymisées, ces données pourront également servir à des études globales dans un cadre scientifique et/ou éducatif uniquement.

Gestion de projet

Répondez aux questions ci-dessous

Quiz

Analyse de situation

Situation 1

Deux chercheurs distants de plusieurs centaines de kilomètres, collaborent sur un projet commun. Ils ont pour cela décidé d’employer un outil de gestion de version et d’héberger ce projet sur un système d’hébergement web dédié pour cela.

Sur base de l’image ci-dessous et de la situation précisée précédemment, répondez aux questions suivantes.

Quiz

Situation 2

Le chercheur 2 s’intéresse au projet du chercheur 1, travaille dessus et propose des modifications afin l’améliorer.

Quiz

Situation 3

Le chercheur 2 vient d’intégrer le projet que le chercheur 1 réalisait seul. Il doit donc acquérir le dépot pour la première fois sur sa machine avant de pouvoir contribuer à ce projet.

Sur base de l’image ci-dessous et de la situation précisée précédemment, répondez aux questions suivantes.

Quiz

Biométrie d’oursins

Sur base des données qui sont mises à votre disposition reproduisez le graphique ci-dessous

Le jeu des données mis à votre dispositon est urchin_bio qui comprend les variables suivantes : origin, diameter1, diameter2, height, buoyant_weight, weight, solid_parts, integuments, dry_integuments, digestive_tract, dry_digestive_tract, gonads, dry_gonads, skeleton, lantern, test, spines, maturity, sex

# importation des données 
urchin <- data.io::read("urchin_bio", package = "data.io", lang = "FR")
# Reproduisez le graphique ci-dessous
#
#
# importation des données 
urchin <- data.io::read("urchin_bio", package = "data.io", lang = "FR")
# Reproduisez le graphique ci-dessous
# Relisez le chapitre 2 du livre science des données 1
# https://biodatascience-course.sciviews.org/sdd-umons/nuage-de-points.html 
# importation des données 
urchin <- data.io::read("urchin_bio", package = "data.io", lang = "FR")
# Reproduisez le graphique ci-dessous
# VOus pouvez utilisez la fonction chart() couplée à la function geom_point() 
# pour réaliser le graphique demandé
chart() +
  geom_point()
# importation des données 
urchin <- data.io::read("urchin_bio", package = "data.io", lang = "FR")
# Reproduisez le graphique ci-dessous
# VOus pouvez utilisez la fonction chart() couplée à la function geom_point() 
# pour réaliser le graphique demandé
chart(urchin, height ~ weight) +
  geom_point()
# importation des données 
urchin <- data.io::read("urchin_bio", package = "data.io", lang = "FR")
# Reproduisez le graphique ci-dessous
 
chart(urchin, height ~ weight %col=% origin) +
  geom_point()
# TODO

Croissance des dents de cochon d’Inde

Sur base des données qui sont mises à votre disposition reproduisez le graphique ci-dessous

Le jeu des données mis à votre dispositon est ToothGrowth qui comprend les variables suivantes : len, supp, dose

# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x)) 
# reproduisez le graphique 
#
#
# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x)) 
# Relisez le chapitre 2 du livre science des données 1
# http://biodatascience-course.sciviews.org/sdd-umons/boxplot.html  
# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x))
# graphique
chart(data = tooth_growth, len ~ supp) +
  geom_boxplot() 
# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x))
# graphique
chart(data = tooth_growth, len ~ supp %fill=% as.factor(dose)) +
  geom_boxplot()
# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x))
# graphique
chart(data = tooth_growth, len ~ supp %fill=% as.factor(dose)) +
  geom_boxplot() +
  labs(y = "Longueur des dents [mm]", x = "Supplémentation", fill = "Dose")
# imporation des données
tooth_growth <- read("ToothGrowth", package = "datasets")
# fonction pour ajouter le nombre d'observations 
give_n <- function(x)
  c(y = max(x) * 1.1, label = length(x))
# graphique
chart(data = tooth_growth, len ~ supp %fill=% as.factor(dose)) +
  geom_boxplot() +
  stat_summary(fun.data = give_n, geom = "text", hjust = 0.5,
    position = position_dodge(0.75)) +
  labs(y = "Longueur des dents [mm]", x = "Supplémentation", fill = "Dose")
# Vous auriez également pu employer cette solution 
tooth_growth <- read("ToothGrowth", package = "datasets")

tooth_growth$dose <- as.ordered(tooth_growth$dose)
tooth_growth <- labelise(tooth_growth, self = FALSE,
  label = list(
    len = "Longueur des dents",
    supp = "Supplémentation",
    dose = "Dose"
  ),
  units = list(
    len = "mm",
    supp = NA,
    dose = "mg/J"
  )
)
# Réalisation graphique
chart(data = tooth_growth, len ~ supp %fill=% dose) +
  geom_boxplot() +
  stat_summary(fun.data = give_n, geom = "text", hjust = 0.5,
    position = position_dodge(0.75))
# TODO 

Normalité d’une variable

#nom du jeu de données : df
names(df)
[1] "x"
summary(df)
       x          
 Min.   :-94.368  
 1st Qu.:-24.333  
 Median :  7.475  
 Mean   :  9.854  
 3rd Qu.: 36.684  
 Max.   :113.215  

Sur base du jeu de données suivant ci-dessus , répondez à la question ci-dessous

Des snippets sont mis à votre disposition en fin de question

set.seed(43)
df <- tibble::tibble(x = rnorm(n = 60, mean = 10, sd = 50))
 car::qqPlot(df[["x"]], distribution = "norm",
   envelope = 0.99, col = "Black", ylab = "x",cex = .4)
#TODO

Biométrie humaine

Sur base des données qui sont mises à votre disposition reproduisez le graphique ci-dessous

Afin de structurer votre réflexion, voici quelques pistes pour vous guider

  • importer les données

  • calculer une nouvelle variale : \(bmi = \frac{weight}{height^2}\)

Attention, le poids doit être en kg et la taille en mètre.

  • calculer une nouvelle variable qui va séparer la variable bmi avec les personnes en sous poids (inférieur à 18.5), de corpulence normale (18.5 à 25) et en surpoids (supérieur à 25)

  • reproduire le graphique

# importation des données
biometry <- read("biometry", package = "BioDataScience", lang = "FR")
# calcule des nouvelles variables 
#
# reproduction du graphique 
# 
biometry <- read("biometry", package = "BioDataScience", lang = "FR")
# nommer la nouvelle variable bmi
biometry %>.%
  mutate(., bmi = ) -> biometry 
biometry <- read("biometry", package = "BioDataScience", lang = "FR")

biometry %>.%
  mutate(., bmi = weight/(height/100)^2) -> biometry 
biometry <- read("biometry", package = "BioDataScience", lang = "FR")

biometry %>.%
  mutate(., bmi = weight/(height/100)^2) -> biometry 

biometry$bmi_rec <- cut(biometry$bmi, include.lowest=FALSE,  right=FALSE,
                        breaks= c())
biometry <- read("biometry", package = "BioDataScience", lang = "FR")

biometry %>.%
  mutate(., bmi = weight/(height/100)^2) -> biometry 

biometry$bmi_rec <- cut(biometry$bmi, include.lowest=FALSE,  right=FALSE,
                        breaks=c(0, 18.5, 25, 60))
biometry <- read("biometry", package = "BioDataScience", lang = "FR")

biometry %>.%
  mutate(., bmi = weight/(height/100)^2) -> biometry 

biometry$bmi_rec <- cut(biometry$bmi, include.lowest=FALSE,  right=FALSE,
                        breaks=c(0, 18.5, 25, 60))

chart(biometry, height ~ weight %col=% bmi_rec) + 
  geom_point()
biometry <- read("biometry", package = "BioDataScience", lang = "FR")

biometry %>.%
  mutate(., bmi = weight/(height/100)^2) -> biometry 

biometry$bmi_rec <- cut(biometry$bmi, include.lowest=FALSE,  right=FALSE,
                        breaks=c(0, 18.5, 25, 60))

chart(biometry, height ~ weight %col=% bmi_rec | gender) + 
  geom_point()
#TODO

Cette question n’est pas évidente, n’oubliez pas que vous pouvez quitter le learnR afin de chercher vos réponses sur internet, dans le livre en ligne ou encore utiliser les chunk, les snippets,…

Rendement des pommes de terre en Belgique

Des scientifiques belges s’intéressent aux rendements de deux variétés de pomme de terre : la bintje et la fontane. Après 110 jours, il réalise des prélèvements sur différentes parcelles en Belgique qu’ils quantifient en tonnes par hectare.

Reproduisez le tableau ci-dessous, le jeu de données mis à votre disposition se nomme pdt et les variables sont les suivantes : rendement, variete. La fonction de mise en forme du tableau est kable() du package knitr

Variété Rendement moyen [t/ha] Nombre de parcelles
bintje 34.70195 18
fontane 38.41439 28
set.seed(42)
pdt <- tibble(
  rendement = c(rnorm(n = 18, mean = 33.6, sd = 4), rnorm(n = 28, mean = 39.5, sd = 4)), 
  variete = c(rep("bintje", times = 18), rep("fontane", times = 28)))
summary(pdt)
#
#
pdt %>.%
  group_by(., ) %>.%
  summarise(., ) %>.%
  knitr::kable(., )
pdt %>.%
  group_by(., ) %>.%
  summarise(., mean = mean(), count = sum(!is.na())) %>.%
  knitr::kable(., col.names = c())
pdt %>.%
  group_by(., variete) %>.%
  summarise(., mean = mean(), count = sum(!is.na())) %>.%
  knitr::kable(., col.names = c())
pdt %>.%
  group_by(., variete) %>.%
  summarise(., mean = mean(rendement), count = sum(!is.na(rendement))) %>.%
  knitr::kable(., col.names = c("Variété" ,"Rendement moyen [t/ha]", "Nombre de parcelles"))
# TODO

Cette exercice s’inspire des observations relayé sur le site du sillon Belge de l’article consulté le 3 septembre 2019 suivant : https://www.sillonbelge.be/4731/article/2019-08-28/bintje-et-fontane-apres-110-115-jours-faute-de-casser-la-baraque-ces-deux

Association wallone de l’élevage

L’association wallone de l’élevage dispose de plusieurs centres d’insémination. Ils ont un recensement des différents taureaux reproducteurs. Reproduisez le graphique ci-dessous. Ce dernier ne montre que les individus compris entre 20 et 55 mois. vous avez à votre disposition le jeu de données beef qui comprend les variables suivantes : variety, name, age, height, weight

beef <- read(file = system.file("extdata", "belgianblue.xlsx", package = "BioDataScience2"), type = "xlsx")
summary(beef)
# reproduisez le graphique suivant
# 
# 
# il existe de nombreuses manière d'obtenir ce graphique 
# la fonction dont vous avez besoin est la fonction filter()
# structure de la réponse
beef %>.%
  filter(.,) %>.%
  chart(.,) +
  geom_point() +
  labs()
beef %>.%
  filter(.,) %>.%
  chart(., weight ~ age %col=% variety) +
  geom_point() 
beef %>.%
  filter(.,) %>.%
  chart(., weight ~ age %col=% variety) +
  geom_point() +
  labs(y = "Masse [kg]", x = "Age [mois]", color = "Variété")
beef %>.%
  filter(., age >= 20 & age <= 55) %>.%
  chart(., weight ~ age %col=% variety) +
  geom_point() +
  labs(y = "Masse [kg]", x = "Age [mois]", color = "Variété")
# TODO

Test de Student

set.seed(43)
weight <- tibble::tibble(weight = c(rnorm(n = 15, mean = 100, sd = 5), 
                      rnorm(n = 15, mean = 102, sd = 5)), 
           area = rep(c("a", "b"), each = 15))
weight$area <- as.factor(weight$area)

Vous avez à votre disposition le jeu de données weight dont voici quelques informations :

# nom du jeu de données : weight
# nom des variables du jeu de données
names(weight)
[1] "weight" "area"  
# résumé des variables
summary(weight)
     weight       area  
 Min.   : 90.47   a:15  
 1st Qu.: 97.71   b:15  
 Median :100.00         
 Mean   :100.33         
 3rd Qu.:102.71         
 Max.   :112.32         

Réalisez un test de Student bilatéral avec un seuil \(\alpha\) de 0.05 et de variance inégale.

# résumé du jeu de données
summary(weight)
#
#
t.test(data = weight, weight ~ area,
  alternative = "two.sided", conf.level = 0.95, var.equal = FALSE)
Quiz

Choix d’un test statistique

Diversité de poissons dans les cours d’eau wallons

Des scientifiques réalisent des pêches sur 100 stations d’intérêts afin d’étudier la diversité des poissons dans les cours d’eau de wallonie. Ils s’intéressent tout particulièrement à l’espèce Barbus barbus L. 1758. A la suite de leurs recensements, ils souhaitent connaitre le nombre de stations dans les zones A,C,D dont la densité relative en barbeau est supérieure à 12.5 % par rapport à l’ensemble des poissons pêchés.

Ils mettent à votre disposition un jeu de données qui se nomme density avec deux variables les zones (area) et la densité relative (densi) de barbeau commun par rapport à l’ensemble des poissons pêchés.

#nom du jeu de données : density
names(density)
[1] "area"  "densi"
summary(density)
 area       densi       
 A:20   Min.   : 8.094  
 B:20   1st Qu.:10.676  
 C:20   Median :11.876  
 D:20   Mean   :11.862  
 E:20   3rd Qu.:12.882  
        Max.   :16.617  

Vous devez retirer les zones (area) B et E et ne garder que les valeurs de densité strictement supérieures à 12.5.

set.seed(43)
set.seed(43)
rep(c("A", "B", "C", "D", "E"), each = 20) -> t
tt <- c(rnorm(n = 20, mean = 10, sd = 1),
        rnorm(n = 20, mean = 12, sd = 1),
        rnorm(n = 20, mean = 11, sd = 1),
        rnorm(n = 20, mean = 12, sd = 1),
        rnorm(n = 20, mean = 14, sd = 1))
density <- tibble::tibble(area = as.factor(t) , densi = tt)

density %>.%
  dplyr::filter(., area %in% c("A", "C", "D") & densi > 12.5) %>.%
  nrow(.)-> t111
density %>.%
  dplyr::filter(., area %in% c("A", "C", "D") & densi > 12.5) %>.%
  nrow(.)

Conclusion

Vous venez de terminer votre séance d’exercice.

Laissez nous vos impressions sur cet outil pédagogique ou expérimentez encore dans la zone ci-dessous. Rappelez-vous que pour placer un commentaire dans une zone de code R, vous devez utiliser un dièse (#) devant vos phrases.

# Ajout de commentaires 
# ...
# Not yet...

Guyliann Engels & Philippe Grosjean