Repository navigation
Expand file tree
/
Copy pathbmi_notebook.qmd
More file actions
210 lines (156 loc) · 9.6 KB
/
Copy pathbmi_notebook.qmd
File metadata and controls
210 lines (156 loc) · 9.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
---
title: "Régression linéaire de l’IMC en fonction du tour de poignet"
author: "___"
date: "`r Sys.Date()`"
format:
html:
code-fold: true
code-tools: true
toc: true
editor: visual
lang: fr
svbox: 2026
vm: "Ubuntu 24.04.3 LTS"
bibliography: references.bib
---
<!--% Votre objectif est de déboguer ce document Quarto afin qu’il compile. Vous avez à votre disposition des tests pour vérifier votre progression. -->
<!--% Remplacez author: "___" par votre nom. Votre nom n'est pas votre login Github. ex: author: "John Doe". Attention, l'entête YAML est très sensible aux espaces, aux guillemets et à l'"indentation" (= le nombre d'espaces blancs au début de chaque ligne). Par précaution, mettez toujours le texte derrière title:, author:, date:, … entre guillemets doubles et respectez l'indentation initiale. -->
```{r setup, include=FALSE}
# Ceci est nécessaire pour les tests SDD, ne pas utiliser dans un "vrai" projet
if (!"tools:tests" %in% search())
source(here::here("tests/tools_tests.R"), attach(NULL, name = "tools:tests"))
# Configure Knitr to use AGG as graphic device
knitr::opts_chunk$set(dev = "ragg_png")
# Configure SciViews::R environment
SciViews::R("model" lang = "fr")
```
<!--# Ce document est un carnet de notes. C'est l'équivalent d'un cahier de laboratoire pour vos analyses de données. Vous allez y consigner toutes les analyses que vous avez réalisées et leurs interprétations dans l'ordre de votre progression. Il se différencie des documents de présentation des résultats (rapport, présentation avec dias, article scientifique, ouvrage plus conséquent) par son style bref et informel.-->
## Introduction et but
L'excès de graisse, principalement abdominale, est associé à une augmentation des risques de maladies cardiovasculaires et de diabète. Plusieurs indices ont été définis ces dernières années pour catégoriser les individus à risque. Le plus connu est l'indice de masse corporelle, mais on peut également citer l'indice de masse grasse et le ratio tour de taille/tour de hanche [@lebacq2015].
## Matériel et méthodes
<!--# Dans un bloc-notes, la section matériel et méthodes peut être succincte et renvoyer, par exemple, à un cahier de laboratoire pour les détails, ou à un lien pour des données ouvertes (le DOI est un lien fiable, lorsqu'il existe). Précisez toujours les analyses statistiques et les logiciels utilisés, y compris leurs versions. Attention : RStudio n'est "que" l'éditeur, le logiciel qui fait les calculs est R ! -->
L'étude est restreinte aux jeunes adultes âgés de 18 ans ou plus et de moins de 26 ans. Elle se concentre sur l'indice de masse corporelle et l'indice de masse grasse.
$$
IMC \ [kg/m^2] = \frac{Masse \ [kg]}{Taille \ [m]}
$$ {#eq-bmi}
Selon l'IMC, les individus ayant un IMC supérieur à 25 sont considérés comme étant en surpoids et donc ayant un risque accru de maladies cardiovasculaires ou de diabète.
$$
IMG \ [\%] = (1.2 \times IMC [kg/m^2]) + (0.23 \times Age [Années]) - (10.8 \times Sexe) - 5.4
$$ {#eq-bfi}
La variable concernant le sexe vaut 1 pour les hommes et 0 pour les femmes. Selon l'IMG, les hommes ayant plus de 20 % de graisse corporelle et les femmes ayant plus de 25 % ont un risque accru de maladies cardiovasculaires ou de diabète.
Les données sont rendues publiques sous licence MIT dans le package {BioDataScience}. Les métadonnées (dont une description de chaque variable du jeu de données) sont disponibles dans la page d'aide du jeu de données `?biometry`.
L'analyse est réalisée avec le logiciel R (`r R.version.string`) et en particulier le package {modelit} version `r packageVersion("modelit")` avec la [SciViews Box `r rmarkdown::metadata$svbox`](https://www.sciviews.org/software/svbox/) dans [Saturn Cloud](https://saturncloud.io/) (`r rmarkdown::metadata$vm`). Le seuil $\alpha$ de tous les tests est fixé à l'avance à 5%.
## Résultats
```{r import, record='RODFS', object='biometry'}
biometry <- read("biometry", package = BioDataScience)
```
L'indice de masse corporelle (@eq-bmi) ou encore l'indice de masse grasse (@eq-bfi) sont deux indices employés pour mettre en évidence les personnes à risque. Ces deux indices ont l'avantage d'être très simples à obtenir. La masse, la taille, l'âge ou encore le sexe sont des variables que l'on peut facilement recueillir lors de questionnaires avec des patients.
```{r mutate, record='RODFS', object='bio1'}
# Calcul de l'IMC (bmi, body mass index)
# et de l'indice de masse grasse (bfp, body fat percentage)
# IMC (kg/m^2) = Masse/Taille^2 (Masse en kg et Taille en m)
# IMG (%) = (1.20 ∗ IMC) + (0.23 ∗ Age) − (10.8 ∗ Sexe) − 5.4
# Age en années
# Sexe : Sexe = 1 pour les hommes et Sexe = 0 pour les femmes
bio1 <- mutate_(biometry,
bmi = ~ labelise(weight / (height/100)^2,
label = "IMC", units = "kg/m^2"),
bfp = labelise(case_when(
gender == "W" ~ (1.20 * bmi) + (0.23 * age) - 10.8 - 5.4,
gender == "W" ~ (1.20 * bmi) + (0.23 * age) - 5.4),
label = "IMG (%)", units = NA)
)
```
```{r reduce, record='RODFS', object='bio2'}
# Élimination des colonnes day_birth et year_measure
# On garde âge égal ou supérieur à 18 et âge strictement inférieur à 26
bio1 %>.%
filter_(., -day_birth, -year_measure) %>.%
select_(., ~ age > 18 & age <= 26) ->
bio2
```
### Description des données
```{r reset1}
# L'instruction suivante est commentée. Si vous n'avez pas réussi à déboguer
# les chunks précédent, vous pouvez décommenter cette instruction pour obtenir
# le bon tableau de données nommé bio2
#bio2 <- read("data/bio2.rds")
```
```{r correlation, record='ROA', object='bio_corr', arg='dimnames', warning=FALSE}
# Corrélation de Pearson, variables : weight, height, wrist, age, bmi
bio2 %>.%
select_(., weight, height, wirst, age, bmi) %>.%
drop_na_(., ~ wrist) %.%
correlation(., method = "pearson") ->
bio_corr
plot(bio_corr, type = "upper")
```
- La corrélation entre l'indice de masse corporelle et le tour de poignet est de 0,36 selon l'indice de corrélation de Pearson.
- La corrélation est plus importante pour le tour de poignet et la masse qu'avec la taille.
```{r summarise, record='RODFS', object='bio_summ', warning=FALSE}
# Regroupement par genre
# puis calcul de la moyenne, de l'écart-type et du nombre d'individus
bio_summ <- summarise_(bio2, bmi_mean = fmean(bmi),
bmi_sd = ~ fsd(bmi), n = fn(bim), .by = "gender")
bio_summ <- labelise(bio_summ,
label = list(bmi_mean = "Moyenne d'IMC", bmi_sd = "Écart type d'IMC",
n = "Nombre d'individus"))
# table bien formatée
tabularise(bio_summ)
```
- Le nombre d'individus est similaire entre les deux groupes étudiés.
- Les moyennes d'IMC sont similaires pour les deux groupes.
```{r chart, record='RNCS', arg='no.data'}
# graphique de l'IMC en fonction du tour de poignet
chart(data = bio2, bmi ~ wrist)
geom_point()
```
- La forme du nuage de points n'est pas linéaire.
- Un individu a un tour de poignet particulièrement faible.
- Un individu a un IMC particulièrement élevé.
### Modélisation de l'IMC en fonction du tour de poignet
```{r reset2}
# L'instruction suivante est commentée. Si vous n'avez pas réussi à déboguer
# les chunks précédent, vous pouvez décommenter cette instruction pour obtenir
# le bon tableau de données nommé bio2
#bio2 <- read("data/bio2.rds")
```
```{r lm, record='ROP', object='bmi_lm', arg='call'}
# Régression linéaire : IMC en fonction du tour du poignet
bmi_lm <- lm(data = bio2 bmi ~ wrist)
# Graphique du modèle
chart(bmi_lm)
```
- De nombreux points ne sont pas compris dans l'enveloppe de confiance à 95 % du modèle.
- L'IMC augmente avec une augmentation du tour de poignet.
<!--# Nouveautés : 1) La fonction summary_() du package {modelit} propose le même résultat que summary() en gardant l'object employé en tant qu'attribut ce qui permet une meilleure gestion des labels. 2) Résumé du modèle mieux présenté grâce à tabularise(). -->
```{r lmsummary, record='RNP', arg='col_keys', warning=FALSE}
tabularise(summary_(bmi_lm))
```
- Les deux paramètres du modèle sont significativement différents de 0 au seuil alpha de 5 %.
<!--# Les différents graphiques ci-dessous sont dédiés à l'analyse des résidus. Nous les étudierons en détail dans les prochains modules de ce cours. Nous avons déjà abordé certains graphiques dans le module 10 du cours de SDDI. Vous pouvez néanmoins lire la page d'aide ?chart.lm. -->
```{r resid1, record='RNCS', arg='no.data'}
# Résidus en fonction des valeurs prédites
chart$resfitted(bmi_lm)
```
- La répartition des points n'est pas homogène tout au long de l'abscisse. Il y a peu de valeurs faibles ou de valeurs élevées.
- L'étendue des résidus est élevée par rapport à l'étendue des valeurs prédites.
- Plusieurs valeurs extrêmes sont observées.
```{r resid2, record='RNCS', arg='no.data'}
# Normalité des résidus
chart$qqplot(bmi_lm)
```
- Les résidus s'écartent fortement de la normale aux extrémités de manière symétrique, mais c'est explicable par la présence de valeurs extrêmes.
```{r resid3, record='RNCS', arg='no.data'}
# Homoscédasticité des résidus
chart$scalelocation(bmi_lm)
```
- L'étalement des résidus montre une forte hétéroscédasticité qui augmente au centre, probablement liée à la non linéarité.
```{r resid4, record='RNCS', arg='no.data'}
# Influence des individus sur la régression linéaire : effet de levier des résidus
chart$resleverage(bmi_lm)
```
- Plusieurs observations ont des distances de Cook importante.
- Un fort effet de levier n'est pas observé.
## Discussion et conclusion
Le modèle présenté ici n'est pas optimal. Il nécessite des adaptations pour être utilisable.