Étude Cas-témoin réalisée chez 449 femmes: Analyse et interprétation
Description
Les données suivantes sont issues d’une enquête cas-témoins dont le but était d’évaluer l’existence d’un risque plus élevé de survenue d’un infarctus du myocarde chez les femmes qui utilisent ou ont utilisé des contraceptifs oraux. L’étude a été menée auprès de 149 femmes ayant eu un infarctus du myocarde (cas) et 300 femmes n’en ayant pas eu (témoins). Le facteur d’exposition principal est la prise de contraceptifs oraux, les autres facteurs recueillis sont : l’âge, le poids, la taille, la consommation de tabac, l’hypertension artérielle, les antécédents familiaux de maladies cardio-vasculaires.
L’analyse a été faite avec le logiciel R version 4.6.0 2026. Dédié aux usagers de R, ce document a été rédigé en vue d’une découverte approfondie des différentes manières de l’usage des codes aussi simples et rapides pour une analyse équipée et fiable. Les interprétations sont l’objet d’aide aux débutants en analyse de données pour une compréhension rapide et classique des données en R.
Chargement de chaque paquet
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.2.0
## ✔ forcats 1.0.1 ✔ stringr 1.6.0
## ✔ ggplot2 4.0.3 ✔ tibble 3.3.1
## ✔ lubridate 1.9.5 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
##
## Attaching package: 'mice'
##
## The following object is masked from 'package:stats':
##
## filter
##
## The following objects are masked from 'package:base':
##
## cbind, rbind
##
## Attaching package: 'questionr'
##
## The following object is masked from 'package:ggstats':
##
## ggsurvey
Importation de la base de donnée infarctus
Transformation des points (.) en NA.
La base de données utilisée est particulière et comporte des données manquantes remplacées par des points. Le logiciel R considère donc les points comme des données. Ce qui nous pousse à préciser à R de considérer et transformer ces points en NA (son language de considération des données manquantes).
Visualisation de la base
Il faut donc visualiser la base pour vérifier si les modifications concernant les <<NA>> sont appliquées à la base.
Structuration de la base de donnée
## tibble [449 × 10] (S3: tbl_df/tbl/data.frame)
## $ NUMERO : num [1:449] 1 2 3 4 5 6 7 8 9 10 ...
## $ INFARCT: num [1:449] 0 0 0 0 0 0 0 0 0 0 ...
## $ CO : num [1:449] 0 0 0 0 0 0 0 0 0 0 ...
## $ TABAC : num [1:449] 0 0 0 0 0 0 0 0 0 0 ...
## $ AGE : num [1:449] 47 17 35 82 50 31 60 30 44 38 ...
## $ POIDS : chr [1:449] "48" NA "53" "78" ...
## $ TAILLE : num [1:449] 173 162 163 157 172 184 169 174 164 167 ...
## $ IMC : chr [1:449] "16.037956237792969" NA "19.94805908203125" "31.644285202026367" ...
## $ ATCD : chr [1:449] "0" "0" "0" "0" ...
## $ HTA : num [1:449] 0 0 0 0 0 0 0 0 0 0 ...
Recodage de la base
- Recoding INFARCTUS_M$INFARCT
INFARCTUS_M$INFARCT <- as.character(INFARCTUS_M$INFARCT)
INFARCTUS_M$INFARCT[INFARCTUS_M$INFARCT == "0"] <- "Témoins"
INFARCTUS_M$INFARCT[INFARCTUS_M$INFARCT == "1"] <- "Cas"- Recoding INFARCTUS_M$CO
INFARCTUS_M$CO <- as.character(INFARCTUS_M$CO)
INFARCTUS_M$CO[INFARCTUS_M$CO == "0"] <- "Jamais"
INFARCTUS_M$CO[INFARCTUS_M$CO == "1"] <- "Oui"- Recoding INFARCTUS_M$TABAC
INFARCTUS_M$TABAC <- as.character(INFARCTUS_M$TABAC)
INFARCTUS_M$TABAC[INFARCTUS_M$TABAC == "0"] <- "Non"
INFARCTUS_M$TABAC[INFARCTUS_M$TABAC == "1"] <- "Fumeuse actuelle"
INFARCTUS_M$TABAC[INFARCTUS_M$TABAC == "2"] <- "Ancienne fumeuse"- Recoding INFARCTUS_M$HTA
INFARCTUS_M$HTA <- as.character(INFARCTUS_M$HTA)
INFARCTUS_M$HTA[INFARCTUS_M$HTA == "0"] <- "Non"
INFARCTUS_M$HTA[INFARCTUS_M$HTA == "1"] <- "Oui"- Recoding INFARCTUS_M$ATCD
- Recoding INFARCTUS_M$POIDS
- Recoding INFARCTUS_M$IMC
- Reordering INFARCTUS_M$INFARCT
- Reordering INFARCTUS_M$TABAC
Tranformation des variables qualitatives (“charactere”) en des facteurs
## tibble [449 × 10] (S3: tbl_df/tbl/data.frame)
## $ NUMERO : num [1:449] 1 2 3 4 5 6 7 8 9 10 ...
## $ INFARCT: Factor w/ 2 levels "Témoins","Cas": 1 1 1 1 1 1 1 1 1 1 ...
## $ CO : Factor w/ 2 levels "Jamais","Oui": 1 1 1 1 1 1 1 1 1 1 ...
## $ TABAC : Factor w/ 3 levels "Non","Ancienne fumeuse",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ AGE : num [1:449] 47 17 35 82 50 31 60 30 44 38 ...
## $ POIDS : num [1:449] 48 NA 53 78 52 47 60 75 68 NA ...
## $ TAILLE : num [1:449] 173 162 163 157 172 184 169 174 164 167 ...
## $ IMC : num [1:449] 16 NA 19.9 31.6 17.6 ...
## $ ATCD : Factor w/ 2 levels "Non","Oui": 1 1 1 1 NA 1 1 1 1 1 ...
## $ HTA : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
Recherche des valeurs manquantes
## NUMERO INFARCT CO TABAC
## Min. : 1 Témoins:300 Jamais:249 Non :215
## 1st Qu.:113 Cas :149 Oui :200 Ancienne fumeuse: 99
## Median :225 Fumeuse actuelle:135
## Mean :225
## 3rd Qu.:337
## Max. :449
##
## AGE POIDS TAILLE IMC ATCD
## Min. : 15.00 Min. : 33.00 Min. :138.0 Min. :11.36 Non:389
## 1st Qu.: 33.00 1st Qu.: 51.00 1st Qu.:160.0 1st Qu.:18.67 Oui: 53
## Median : 44.00 Median : 64.00 Median :166.0 Median :23.18 NAs: 7
## Mean : 45.62 Mean : 66.07 Mean :165.2 Mean :24.38
## 3rd Qu.: 56.00 3rd Qu.: 79.00 3rd Qu.:171.0 3rd Qu.:29.17
## Max. :100.00 Max. :128.00 Max. :184.0 Max. :47.78
## NAs :12 NAs :12
## HTA
## Non:290
## Oui:159
##
##
##
##
##
Imputation des données manquantes
##
## iter imp variable
## 1 1 POIDS IMC ATCD
## 1 2 POIDS IMC ATCD
## 1 3 POIDS IMC ATCD
## 1 4 POIDS IMC ATCD
## 1 5 POIDS IMC ATCD
## 2 1 POIDS IMC ATCD
## 2 2 POIDS IMC ATCD
## 2 3 POIDS IMC ATCD
## 2 4 POIDS IMC ATCD
## 2 5 POIDS IMC ATCD
## 3 1 POIDS IMC ATCD
## 3 2 POIDS IMC ATCD
## 3 3 POIDS IMC ATCD
## 3 4 POIDS IMC ATCD
## 3 5 POIDS IMC ATCD
## 4 1 POIDS IMC ATCD
## 4 2 POIDS IMC ATCD
## 4 3 POIDS IMC ATCD
## 4 4 POIDS IMC ATCD
## 4 5 POIDS IMC ATCD
## 5 1 POIDS IMC ATCD
## 5 2 POIDS IMC ATCD
## 5 3 POIDS IMC ATCD
## 5 4 POIDS IMC ATCD
## 5 5 POIDS IMC ATCD
Actualiser la base de données
Structure enfin de la base
## 'data.frame': 449 obs. of 10 variables:
## $ NUMERO : num 1 2 3 4 5 6 7 8 9 10 ...
## $ INFARCT: Factor w/ 2 levels "Témoins","Cas": 1 1 1 1 1 1 1 1 1 1 ...
## $ CO : Factor w/ 2 levels "Jamais","Oui": 1 1 1 1 1 1 1 1 1 1 ...
## $ TABAC : Factor w/ 3 levels "Non","Ancienne fumeuse",..: 1 1 1 1 1 1 1 1 1 1 ...
## $ AGE : num 47 17 35 82 50 31 60 30 44 38 ...
## $ POIDS : num 48 34 53 78 52 ...
## $ TAILLE : num 173 162 163 157 172 184 169 174 164 167 ...
## $ IMC : num 16 12.6 19.9 31.6 17.6 ...
## $ ATCD : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
## $ HTA : Factor w/ 2 levels "Non","Oui": 1 1 1 1 1 1 1 1 1 1 ...
Mettre ou arrondir les valeurs de la variable POIDS et IMC à deux chiffres àprès la virgule
Etiquettage de chaque variable
var_label(INFARCTUS_M) <- list(
NUMERO = "Numéro",
INFARCT = "Infarctus du myocarde",
CO = "Prise de contraceptifs oraux",
TABAC = "Consommation de tabac",
AGE = "Age (en année)",
POIDS = "Poids (Kg)",
TAILLE = "Taille (Cm)",
ATCD = "Antécédents familiaux de maladie cardio-vasculaire",
HTA = "Hypertension artérielle",
IMC = "Indice de masse corporelle")Vérification de la distribution
- Test de shapiro wilk et vérification graphique de la normalité
##
## Shapiro-Wilk normality test
##
## data: INFARCTUS_M$AGE
## W = 0.97955, p-value = 5.89e-06
##
## Shapiro-Wilk normality test
##
## data: INFARCTUS_M$POIDS
## W = 0.96476, p-value = 6.605e-09
##
## Shapiro-Wilk normality test
##
## data: INFARCTUS_M$TAILLE
## W = 0.99012, p-value = 0.00413
##
## Shapiro-Wilk normality test
##
## data: INFARCTUS_M$IMC
## W = 0.95469, p-value = 1.639e-10
Statistique descriptive
## Setting theme "language: fr"
TBL <- tbl_summary(INFARCTUS_M,include = -NUMERO,
statistic = list(all_categorical() ~ "{n} ({p})"),
digits=list(
all_categorical()~ c(0,1)
)) %>%
modify_header(label="**Variables**")%>%
modify_caption("**Tableau 1:** Description des variables en étude ") %>%
bold_labels()%>%
as_flex_table()
TBLVariables | N = 4491 |
|---|---|
Infarctus du myocarde | |
Témoins | 300 (66,8) |
Cas | 149 (33,2) |
Prise de contraceptifs oraux | |
Jamais | 249 (55,5) |
Oui | 200 (44,5) |
Consommation de tabac | |
Non | 215 (47,9) |
Ancienne fumeuse | 99 (22,0) |
Fumeuse actuelle | 135 (30,1) |
Age (en année) | 44 (33 – 56) |
Poids (Kg) | 64 (51 – 79) |
Taille (Cm) | 166 (160 – 171) |
Indice de masse corporelle | 23 (19 – 29) |
Antécédents familiaux de maladie cardio-vasculaire | |
Non | 395 (88,0) |
Oui | 54 (12,0) |
Hypertension artérielle | |
Non | 290 (64,6) |
Oui | 159 (35,4) |
1n (%); Médiane (Q1 – Q3) | |
- Description des variables qualitatives
TBL1 <- tbl_summary(INFARCTUS_M,include = c(INFARCT,CO,TABAC,ATCD,
HTA),
statistic = list(all_categorical() ~ "{n} ({p})"),
digits=list(
all_categorical()~ c(0,1)
)) %>%
modify_header(label="**Variables**")%>%
bold_labels()%>%
modify_caption("**Tableau 2:** Répartition des variables qualitatives")Répartition des variables qualitatives (une présentation avec le paquet gt)
- Transformer le tableau en format data frame et gérer les NA
# Transformer le tableau en format data frame et gérer les NA
TBL1_df <- TBL1$table_body %>%
select(label, stat_0) %>%
separate(stat_0, into = c("Effectif", "Pourcentage"),
sep = "\\(", extra = "drop", fill = "right") %>%
mutate(
Pourcentage = gsub("\\)", "", Pourcentage),
Effectif = ifelse(is.na(Effectif), " ", Effectif),
Pourcentage = ifelse(is.na(Pourcentage), " ", Pourcentage)
)
## Ajout de l'effectif total
n_total <- nrow(INFARCTUS_M)
# Reformater le tableau avec gt
gt_TBL1 <- TBL1_df %>%
bind_rows(tibble(
label = "Total",
Effectif = as.character(n_total),
Pourcentage = "100,0"
)) %>%
gt() %>%
cols_label(
label = "Variables",
Effectif = "Fréquence absolue",
Pourcentage = "Fréquence relative (%)"
) %>%
fmt_number(columns = "Pourcentage", decimals = 1) %>%
tab_options(
table.font.size = px(14),
column_labels.font.weight = "bold"
)
# Affichage du tableau
gt_TBL1| Variables | Fréquence absolue | Fréquence relative (%) |
|---|---|---|
| Infarctus du myocarde | ||
| Témoins | 300 | 66,8 |
| Cas | 149 | 33,2 |
| Prise de contraceptifs oraux | ||
| Jamais | 249 | 55,5 |
| Oui | 200 | 44,5 |
| Consommation de tabac | ||
| Non | 215 | 47,9 |
| Ancienne fumeuse | 99 | 22,0 |
| Fumeuse actuelle | 135 | 30,1 |
| Antécédents familiaux de maladie cardio-vasculaire | ||
| Non | 395 | 88,0 |
| Oui | 54 | 12,0 |
| Hypertension artérielle | ||
| Non | 290 | 64,6 |
| Oui | 159 | 35,4 |
| Total | 449 | 100,0 |
- Description graphique des variables
ggplot(INFARCTUS_M) +
aes(x = "", y = AGE) +
geom_boxplot(fill = "#4271C6") +
stat_summary(fun = mean, geom = "point", shape = 20, size = 4, color = "red") +
labs(
x = "Échantillon",
y = "Âge des femmes en années",
title = "Boxplot de l'âge des femmes incluses dans l'étude (n=449)"
) +
theme_bw() +
theme(
plot.title = element_text(size = 16L, face = "bold.italic", hjust = 0.5),
axis.title.y = element_text(size = 14L, face = "bold.italic"),
axis.title.x = element_text(size = 14L, face = "bold.italic"),
axis.text.x = element_text(angle = 4L)
)ggplot(INFARCTUS_M) +
aes(x = "", y = POIDS) +
geom_boxplot(fill = "#3664B7") +
stat_summary(fun = mean, geom = "point", shape = 20, size = 4, color = "red") +
labs(
x = "Échantillon ",
y = "Poids des femmes en Kg",
title = "Boxpplot du poids des femmes (n=449)"
) +
theme_bw() +
theme(
plot.title = element_text(size = 16L,
face = "bold.italic",
hjust = 0.5),
axis.title.y = element_text(size = 14L,
face = "bold.italic"),
axis.title.x = element_text(size = 14L,
face = "bold.italic")
)ggplot(INFARCTUS_M) +
aes(x = "", y = TAILLE) +
geom_boxplot(fill = "#456FB9") +
stat_summary(fun = mean, geom = "point", shape = 20, size = 4, color = "red") +
labs(
x = "Échantillon ",
y = "Taille des femmes en cm",
title = "Boxplot de la taille des femmes (n= 449)"
) +
theme_bw() +
theme(
plot.title = element_text(size = 16L,
face = "bold.italic",
hjust = 0.5),
axis.title.y = element_text(size = 14L,
face = "bold.italic"),
axis.title.x = element_text(size = 14L,
face = "bold.italic")
)Analyse bivariée
tbl_summary(INFARCTUS_M,include = -NUMERO,
statistic = list(all_categorical() ~ "{n} ({p})"
),
digits=list(
all_categorical()~ c(0,1),
all_continuous() ~ 1
),by=INFARCT)%>%
add_overall(last=T,col_label= "**Total** N= {N}")%>%
add_p()%>%
bold_p()%>%
bold_labels() %>%
modify_header(
list(
label ~ "**Variables**",
all_stat_cols() ~ "**_{level}_** (n={n}, {style_percent(p)}%)",
stat_0 ~ "**TOTAL** (N={N})",p.value~"**Test de comparaison** (p-valeur)"
)
) %>%
modify_footnote(everything() ~ NA) %>%
modify_spanning_header(all_stat_cols() ~ "**Infarctus du myocarde**")%>%
modify_caption("Tableau 3: Facteurs associés à l'infarctus de myocarde chez les femmes (analyse bivariée)"
)%>%
as_flex_table()## Warning: The `update` argument of `modify_header()` is deprecated as of gtsummary 2.0.0.
## ℹ Use `modify_header(...)` input instead. Dynamic dots allow for syntax like
## `modify_header(!!!list(...))`.
## ℹ The deprecated feature was likely used in the gtsummary package.
## Please report the issue at <https://github.com/ddsjoberg/gtsummary/issues>.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
| Infarctus du myocarde |
| ||
|---|---|---|---|---|
Variables | **Témoins** (n=300, 67%) | **Cas** (n=149, 33%) | TOTAL (N=449) | Test de comparaison (p-valeur) |
Prise de contraceptifs oraux | <0,001 | |||
Jamais | 212 (70,7) | 37 (24,8) | 249 (55,5) | |
Oui | 88 (29,3) | 112 (75,2) | 200 (44,5) | |
Consommation de tabac | <0,001 | |||
Non | 181 (60,3) | 34 (22,8) | 215 (47,9) | |
Ancienne fumeuse | 44 (14,7) | 55 (36,9) | 99 (22,0) | |
Fumeuse actuelle | 75 (25,0) | 60 (40,3) | 135 (30,1) | |
Age (en année) | 43,5 (31,5 – 55,5) | 46,0 (36,0 – 56,0) | 44,0 (33,0 – 56,0) | 0,2 |
Poids (Kg) | 61,0 (50,0 – 74,3) | 69,0 (58,0 – 83,0) | 64,0 (51,0 – 79,0) | <0,001 |
Taille (Cm) | 166,0 (159,5 – 170,0) | 164,0 (160,0 – 171,0) | 166,0 (160,0 – 171,0) | 0,4 |
Indice de masse corporelle | 21,7 (18,1 – 28,4) | 25,5 (20,9 – 31,6) | 23,2 (18,7 – 29,2) | <0,001 |
Antécédents familiaux de maladie cardio-vasculaire | 0,12 | |||
Non | 269 (89,7) | 126 (84,6) | 395 (88,0) | |
Oui | 31 (10,3) | 23 (15,4) | 54 (12,0) | |
Hypertension artérielle | 0,019 | |||
Non | 205 (68,3) | 85 (57,0) | 290 (64,6) | |
Oui | 95 (31,7) | 64 (43,0) | 159 (35,4) | |
Autre méthode pour la préparation de l’analyse multivariée
tbl_uvregression(
data = INFARCTUS_M,
include = -NUMERO,
y = INFARCT,
method = glm,
method.args = list(family = binomial),
exponentiate = TRUE,
add_estimate_to_reference_rows = TRUE
) %>%
add_global_p() %>%
bold_p() %>%
modify_header(label="**Variables**",p.value= "**p**") %>%
as_flex_table()Variables | N | OR | 95% IC | p |
|---|---|---|---|---|
Prise de contraceptifs oraux | 449 | <0,001 | ||
Jamais | 1,00 | — | ||
Oui | 7,29 | 4,70 – 11,5 | ||
Consommation de tabac | 449 | <0,001 | ||
Non | 1,00 | — | ||
Ancienne fumeuse | 6,65 | 3,91 – 11,5 | ||
Fumeuse actuelle | 4,26 | 2,60 – 7,08 | ||
Age (en année) | 449 | 1,01 | 1,00 – 1,02 | 0,2 |
Poids (Kg) | 449 | 1,02 | 1,01 – 1,03 | <0,001 |
Taille (Cm) | 449 | 0,99 | 0,97 – 1,02 | 0,5 |
Indice de masse corporelle | 449 | 1,06 | 1,03 – 1,09 | <0,001 |
Antécédents familiaux de maladie cardio-vasculaire | 449 | 0,12 | ||
Non | 1,00 | — | ||
Oui | 1,58 | 0,88 – 2,82 | ||
Hypertension artérielle | 449 | 0,019 | ||
Non | 1,00 | — | ||
Oui | 1,62 | 1,08 – 2,44 | ||
Abréviations: IC = intervalle de confiance, OR = rapport de cotes | ||||
Une application avec epitools pour croiser la variable explicative principale (CO) avec l’événement (INFARCT)
##
## Témoins Cas
## Jamais 212 37
## Oui 88 112
## $data
##
## Témoins Cas Total
## Jamais 212 37 249
## Oui 88 112 200
## Total 300 149 449
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Jamais 1.000000 NA NA
## Oui 7.238001 4.664499 11.44983
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Jamais NA NA NA
## Oui 0 1.688545e-20 3.532887e-20
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
##
## Témoins Cas
## Non 181 34
## Ancienne fumeuse 44 55
## Fumeuse actuelle 75 60
## $data
##
## Témoins Cas Total
## Non 181 34 215
## Ancienne fumeuse 44 55 99
## Fumeuse actuelle 75 60 135
## Total 300 149 449
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Non 1.000000 NA NA
## Ancienne fumeuse 6.590283 3.864550 11.439918
## Fumeuse actuelle 4.231345 2.580375 7.041255
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Non NA NA NA
## Ancienne fumeuse 1.610267e-12 2.434653e-12 3.859372e-13
## Fumeuse actuelle 6.727606e-09 7.085207e-09 4.040132e-09
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Corrélation entre les variables
ggplot(INFARCTUS_M) +
aes(x = AGE, y = TAILLE) +
geom_point(size = 2.15, colour = "#112446") +
labs(x = "Âge des femmes en années",
y = "Taille en cm", title = "Relation entre l'âge et la taille ") +
theme_classic() +
theme(plot.title = element_text(size = 15L,
face = "bold", hjust = 0.5), axis.title.y = element_text(size = 13L, face = "bold.italic", hjust = 1),
axis.title.x = element_text(size = 13L, face = "bold.italic", hjust = 1))## [1] -0.06836811
ggplot(INFARCTUS_M) +
aes(x = AGE, y = POIDS) +
geom_point(size = 2.2, colour = "#112446") +
labs(x = "Âge des femmes",
y = "Poids en kg", title = "Relation entre l'âge et le poids chez les femmes ") +
theme_classic() +
theme(plot.title = element_text(size = 15L, face = "bold", hjust = 0.5), axis.title.y = element_text(size = 13L,
face = "bold.italic", hjust = 1), axis.title.x = element_text(size = 13L, face = "bold.italic",
hjust = 1))## [1] 0.1095422
Analyse multivariée
## Le modèle
mod = glm(
INFARCT ~ CO+AGE+TABAC+HTA+POIDS+ATCD+TAILLE,
family = binomial,data = INFARCTUS_M
)
mod##
## Call: glm(formula = INFARCT ~ CO + AGE + TABAC + HTA + POIDS + ATCD +
## TAILLE, family = binomial, data = INFARCTUS_M)
##
## Coefficients:
## (Intercept) COOui AGE
## -5.12233 2.54818 0.05019
## TABACAncienne fumeuse TABACFumeuse actuelle HTAOui
## 2.47154 2.14310 0.49447
## POIDS ATCDOui TAILLE
## 0.02130 0.49028 -0.01372
##
## Degrees of Freedom: 448 Total (i.e. Null); 440 Residual
## Null Deviance: 570.7
## Residual Deviance: 379.5 AIC: 397.5
tbl_regression(mod,
exponentiate = T,
add_estimate_to_reference_rows = TRUE
)%>%
bold_labels() %>%
bold_p()%>%
italicize_levels()%>%
modify_header(label="**Variables**",p.value= "**p**")%>%
modify_footnote(everything() ~ NA)%>%
remove_abbreviation(abbreviation = NULL)%>%
modify_caption("Tableau 4: Facteurs associés à l'infarctus de myocarde chez les femmes (analyse multivariée)" )%>%
as_flex_table()Variables | OR | 95% IC | p |
|---|---|---|---|
Prise de contraceptifs oraux | |||
Jamais | 1,00 | — | |
Oui | 12,8 | 7,30 – 23,3 | <0,001 |
Age (en année) | 1,05 | 1,03 – 1,07 | <0,001 |
Consommation de tabac | |||
Non | 1,00 | — | |
Ancienne fumeuse | 11,8 | 5,67 – 25,9 | <0,001 |
Fumeuse actuelle | 8,53 | 4,51 – 16,8 | <0,001 |
Hypertension artérielle | |||
Non | 1,00 | — | |
Oui | 1,64 | 0,91 – 2,97 | 0,10 |
Poids (Kg) | 1,02 | 1,01 – 1,04 | 0,004 |
Antécédents familiaux de maladie cardio-vasculaire | |||
Non | 1,00 | — | |
Oui | 1,63 | 0,78 – 3,42 | 0,2 |
Taille (Cm) | 0,99 | 0,96 – 1,02 | 0,4 |
- Graphiques
Plus d’information après discrétisation en classe d’âge
# Création de la variable classe d'âge
INFARCTUS_M <- mutate(INFARCTUS_M,
CLASSE_AGE=
case_when(AGE >= 15 & AGE <= 49 ~ "15-49",
AGE >= 50 & AGE <= 100 ~ "50-100"
)
)
### Transformation de la nature de la variable CLASSE_AGE en facteur et labellisation
INFARCTUS_M$CLASSE_AGE = as.factor(INFARCTUS_M$CLASSE_AGE)
var_label(INFARCTUS_M) <- list(
NUMERO = "Numéro",
INFARCT = "Infarctus du myocarde",
CO = "Prise de contraceptifs oraux",
TABAC = "Consommation de tabac",
AGE = "Age (en année)",
POIDS = "Poids (Kg)",
TAILLE = "Taille (Cm)",
ATCD = "Antécédents familiaux de maladie cardio-vasculaire",
HTA = "Hypertension artérielle",
IMC = "Indice de masse corporelle",
CLASSE_AGE = "Classe d'âge")Analyse bivariée tenant compte de la classe d’âge
tbl_summary(INFARCTUS_M,include = -c(NUMERO,AGE),
statistic = list(all_categorical() ~ "{n} ({p})"
),
digits=list(
all_categorical()~ c(0,1),
all_continuous() ~ 1
),by=INFARCT)%>%
add_overall(last=T,col_label= "**Total** N= {N}")%>%
add_p()%>%
bold_p()%>%
bold_labels() %>%
modify_header(
list(
label ~ "**Variables**",
all_stat_cols() ~ "**_{level}_** (n={n}, {style_percent(p)}%)",
stat_0 ~ "**TOTAL** (N={N})",p.value~"**Test de comparaison** (p-valeur)"
)
) %>%
modify_footnote(everything() ~ NA) %>%
modify_spanning_header(all_stat_cols() ~ "**Infarctus du myocarde**")%>%
modify_caption("Tableau 5: Facteurs associés à l'infarctus de myocarde chez les femmes (analyse bivariée)"
)%>%
as_flex_table()
| Infarctus du myocarde |
| ||
|---|---|---|---|---|
Variables | **Témoins** (n=300, 67%) | **Cas** (n=149, 33%) | TOTAL (N=449) | Test de comparaison (p-valeur) |
Prise de contraceptifs oraux | <0,001 | |||
Jamais | 212 (70,7) | 37 (24,8) | 249 (55,5) | |
Oui | 88 (29,3) | 112 (75,2) | 200 (44,5) | |
Consommation de tabac | <0,001 | |||
Non | 181 (60,3) | 34 (22,8) | 215 (47,9) | |
Ancienne fumeuse | 44 (14,7) | 55 (36,9) | 99 (22,0) | |
Fumeuse actuelle | 75 (25,0) | 60 (40,3) | 135 (30,1) | |
Poids (Kg) | 61,0 (50,0 – 74,3) | 69,0 (58,0 – 83,0) | 64,0 (51,0 – 79,0) | <0,001 |
Taille (Cm) | 166,0 (159,5 – 170,0) | 164,0 (160,0 – 171,0) | 166,0 (160,0 – 171,0) | 0,4 |
Indice de masse corporelle | 21,7 (18,1 – 28,4) | 25,5 (20,9 – 31,6) | 23,2 (18,7 – 29,2) | <0,001 |
Antécédents familiaux de maladie cardio-vasculaire | 0,12 | |||
Non | 269 (89,7) | 126 (84,6) | 395 (88,0) | |
Oui | 31 (10,3) | 23 (15,4) | 54 (12,0) | |
Hypertension artérielle | 0,019 | |||
Non | 205 (68,3) | 85 (57,0) | 290 (64,6) | |
Oui | 95 (31,7) | 64 (43,0) | 159 (35,4) | |
Classe d'âge | 0,7 | |||
15-49 | 186 (62,0) | 95 (63,8) | 281 (62,6) | |
50-100 | 114 (38,0) | 54 (36,2) | 168 (37,4) | |
Autre méthode pour la préparation de l’analyse multivariée (2)
tbl_uvregression(
data = INFARCTUS_M,
include = -c(NUMERO,AGE),
y = INFARCT,
method = glm,
method.args = list(family = binomial),
exponentiate = TRUE,
add_estimate_to_reference_rows = TRUE
) %>%
add_global_p() %>%
bold_p() %>%
modify_header(label="**Variables**",p.value= "**p**") %>%
as_flex_table()Variables | N | OR | 95% IC | p |
|---|---|---|---|---|
Prise de contraceptifs oraux | 449 | <0,001 | ||
Jamais | 1,00 | — | ||
Oui | 7,29 | 4,70 – 11,5 | ||
Consommation de tabac | 449 | <0,001 | ||
Non | 1,00 | — | ||
Ancienne fumeuse | 6,65 | 3,91 – 11,5 | ||
Fumeuse actuelle | 4,26 | 2,60 – 7,08 | ||
Poids (Kg) | 449 | 1,02 | 1,01 – 1,03 | <0,001 |
Taille (Cm) | 449 | 0,99 | 0,97 – 1,02 | 0,5 |
Indice de masse corporelle | 449 | 1,06 | 1,03 – 1,09 | <0,001 |
Antécédents familiaux de maladie cardio-vasculaire | 449 | 0,12 | ||
Non | 1,00 | — | ||
Oui | 1,58 | 0,88 – 2,82 | ||
Hypertension artérielle | 449 | 0,019 | ||
Non | 1,00 | — | ||
Oui | 1,62 | 1,08 – 2,44 | ||
Classe d'âge | 449 | 0,7 | ||
15-49 | 1,00 | — | ||
50-100 | 0,93 | 0,62 – 1,39 | ||
Abréviations: IC = intervalle de confiance, OR = rapport de cotes | ||||
Relation entre les variables
## CLASSE_AGE - POIDS
ggplot(INFARCTUS_M) +
aes(x = CLASSE_AGE, y = POIDS, fill = CLASSE_AGE) +
geom_boxplot() +
stat_summary(fun = mean, geom = "point", shape = 20, size = 4, color = "red")+
scale_fill_hue(direction = 1) +
labs(x = "Classe d'âge ", y = "Poids (Kg)", title = "Distibution du poids des femmes selon la classe d'âge") +
theme_classic() +
theme(plot.title = element_text(size = 16L, face = "bold", hjust = 0.5), axis.title.y = element_text(size = 13L,
face = "bold.italic", hjust = 1), axis.title.x = element_text(size = 13L, face = "bold.italic", hjust = 1),
axis.text.y = element_text(size = 14L), axis.text.x = element_text(size = 14L))## CLASSE_AGE - TAILLE
ggplot(INFARCTUS_M) +
aes(x = CLASSE_AGE, y = TAILLE, fill = CLASSE_AGE) +
geom_boxplot() +
stat_summary(fun = mean, geom = "point", shape = 20, size = 4, color = "red")+
scale_fill_hue(direction = 1) +
labs(x = "Classe d'âge ", y = "Taille (Cm)", title = "Distibution de la taille des femmes selon la classe d'âge") +
theme_classic() +
theme(plot.title = element_text(size = 16L, face = "bold", hjust = 0.5), axis.title.y = element_text(size = 13L,
face = "bold.italic", hjust = 1), axis.title.x = element_text(size = 13L, face = "bold.italic", hjust = 1),
axis.text.y = element_text(size = 14L), axis.text.x = element_text(size = 14L))Analyse multivariée tenant compte la classe d’âge
mod1 = glm(
INFARCT ~ CO+TABAC+HTA+POIDS+ATCD+TAILLE+CLASSE_AGE,
family = binomial,data = INFARCTUS_M
)
mod1##
## Call: glm(formula = INFARCT ~ CO + TABAC + HTA + POIDS + ATCD + TAILLE +
## CLASSE_AGE, family = binomial, data = INFARCTUS_M)
##
## Coefficients:
## (Intercept) COOui TABACAncienne fumeuse
## -1.70116 2.23966 1.98996
## TABACFumeuse actuelle HTAOui POIDS
## 1.88715 0.83821 0.02150
## ATCDOui TAILLE CLASSE_AGE50-100
## 0.38682 -0.02037 0.66824
##
## Degrees of Freedom: 448 Total (i.e. Null); 440 Residual
## Null Deviance: 570.7
## Residual Deviance: 400.5 AIC: 418.5
tbl_regression(mod1,
exponentiate = T,
add_estimate_to_reference_rows = TRUE
)%>%
bold_labels() %>%
bold_p()%>%
italicize_levels()%>%
modify_header(label="**Variables**",p.value= "**p**")%>%
modify_footnote(everything() ~ NA)%>%
remove_abbreviation(abbreviation = NULL)%>%
modify_caption("**Tableau 6: Facteurs associés à l'infarctus de myocarde chez les femmes (analyse multivariée)**" )%>%
as_flex_table()Variables | OR | 95% IC | p |
|---|---|---|---|
Prise de contraceptifs oraux | |||
Jamais | 1,00 | — | |
Oui | 9,39 | 5,60 – 16,2 | <0,001 |
Consommation de tabac | |||
Non | 1,00 | — | |
Ancienne fumeuse | 7,32 | 3,75 – 14,7 | <0,001 |
Fumeuse actuelle | 6,60 | 3,62 – 12,4 | <0,001 |
Hypertension artérielle | |||
Non | 1,00 | — | |
Oui | 2,31 | 1,32 – 4,10 | 0,004 |
Poids (Kg) | 1,02 | 1,01 – 1,04 | 0,003 |
Antécédents familiaux de maladie cardio-vasculaire | |||
Non | 1,00 | — | |
Oui | 1,47 | 0,72 – 2,98 | 0,3 |
Taille (Cm) | 0,98 | 0,95 – 1,01 | 0,2 |
Classe d'âge | |||
15-49 | 1,00 | — | |
50-100 | 1,95 | 1,09 – 3,54 | 0,025 |