# Générer une base simulée en français
set.seed(123)
hypertension_data <- data.frame(
  Age = sample(18:80, 100, replace = TRUE),  # Âge
  Sexe = sample(c("Homme", "Femme"), 100, replace = TRUE),  # Sexe
  IMC = round(runif(100, 18, 40), 1),  # Indice de masse corporelle
  Pression_Systolique = round(rnorm(100, 130, 15)),  # Tension systolique
  Pression_Diastolique = round(rnorm(100, 85, 10)),  # Tension diastolique
  Fumeur = sample(c("Oui", "Non"), 100, replace = TRUE),  # Fumeur
  Diabète = sample(c("Oui", "Non"), 100, replace = TRUE),  # Diabète
  Activité_Physique = sample(c("Oui", "Non"), 100, replace = TRUE)  # Activité physique
)

attach(hypertension_data)
# Aperçu des données

head(hypertension_data)
##   Age  Sexe  IMC Pression_Systolique Pression_Diastolique Fumeur Diabète
## 1  48 Femme 39.2                  95                   82    Oui     Oui
## 2  32 Femme 31.2                 139                   71    Oui     Non
## 3  68 Homme 29.3                 129                   76    Oui     Non
## 4  31 Femme 26.9                  94                   85    Non     Oui
## 5  20 Femme 37.4                 130                   81    Oui     Oui
## 6  59 Homme 26.0                 129                   71    Oui     Oui
##   Activité_Physique
## 1               Non
## 2               Oui
## 3               Oui
## 4               Non
## 5               Non
## 6               Non
# Ajouter une colonne pour indiquer si la pression artérielle est élevée
hypertension_data$PAE <- ifelse(hypertension_data$Pression_Systolique >= 140 | hypertension_data$Pression_Diastolique >= 90, "Oui", "Non")

# Ajouter une colonne pour l'état nutritionnel
hypertension_data$Etat_Nutritionnel <- cut(
  hypertension_data$IMC,
  breaks = c(-Inf, 18.5, 25, 30, 35, 40, Inf),
  labels = c("Insuffisance pondérale", "Poids normal", "Surpoids",
             "Obésité classe I", "Obésité classe II", "Obésité classe III"),
  right = FALSE
)

library(dplyr)
## 
## Attachement du package : 'dplyr'
## Les objets suivants sont masqués depuis 'package:stats':
## 
##     filter, lag
## Les objets suivants sont masqués depuis 'package:base':
## 
##     intersect, setdiff, setequal, union
# Conversion des variables caractères en facteurs
hypertension_data <- hypertension_data %>%
  mutate_if(is.character, as.factor)

# Vérification des types de colonnes
glimpse(hypertension_data)
## Rows: 100
## Columns: 10
## $ Age                  <int> 48, 32, 68, 31, 20, 59, 67, 71, 60, 54, 69, 31, 7…
## $ Sexe                 <fct> Femme, Femme, Homme, Femme, Femme, Homme, Homme, …
## $ IMC                  <dbl> 39.2, 31.2, 29.3, 26.9, 37.4, 26.0, 24.3, 21.8, 2…
## $ Pression_Systolique  <dbl> 95, 139, 129, 94, 130, 129, 106, 143, 119, 146, 1…
## $ Pression_Diastolique <dbl> 82, 71, 76, 85, 81, 71, 82, 76, 92, 94, 82, 67, 9…
## $ Fumeur               <fct> Oui, Oui, Oui, Non, Oui, Oui, Oui, Non, Non, Oui,…
## $ Diabète              <fct> Oui, Non, Non, Oui, Oui, Oui, Oui, Oui, Oui, Oui,…
## $ Activité_Physique    <fct> Non, Oui, Oui, Non, Non, Non, Oui, Oui, Non, Non,…
## $ PAE                  <fct> Non, Non, Non, Non, Non, Non, Non, Oui, Oui, Oui,…
## $ Etat_Nutritionnel    <fct> Obésité classe II, Obésité classe I, Surpoids, Su…
# Description des variables univariées

library(gtsummary)
theme_gtsummary_language("fr",decimal.mark = ",",big.mark = " ")
## Setting theme "language: fr"
(t1<-hypertension_data %>%
  tbl_summary(
    sort = all_categorical()~"frequency",
    include = -c(IMC,Pression_Systolique,Pression_Diastolique),
    statistic = list(all_categorical()~ "{n}({p}%)",
                     all_continuous() ~ "{mean} ({sd})"),
    digits =list(all_categorical() ~ c(0,1),
                 all_continuous()~1),
  )%>%
  bold_labels())
Caractéristique N = 1001
Age 48,1 (17,2)
Sexe
    Femme 55(55,0%)
    Homme 45(45,0%)
Fumeur
    Oui 52(52,0%)
    Non 48(48,0%)
Diabète
    Oui 55(55,0%)
    Non 45(45,0%)
Activité_Physique
    Non 51(51,0%)
    Oui 49(49,0%)
PAE
    Oui 56(56,0%)
    Non 44(44,0%)
Etat_Nutritionnel
    Poids normal 32(32,0%)
    Surpoids 22(22,0%)
    Obésité classe I 22(22,0%)
    Obésité classe II 22(22,0%)
    Insuffisance pondérale 2(2,0%)
    Obésité classe III 0(0,0%)
1 Moyenne (ET); n(%)
#Statistique Inférentielle

##Vérification des conditions d'utilisation des tests

### Test de normalité: Age ~ PAE

library(car)
## Le chargement a nécessité le package : carData
## 
## Attachement du package : 'car'
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     recode
library(RcmdrMisc)
## Le chargement a nécessité le package : sandwich
normalityTest(Age ~ PAE, test="shapiro.test", data=hypertension_data)
## 
##  --------
##  PAE = Non 
## 
##  Shapiro-Wilk normality test
## 
## data:  Age
## W = 0.95091, p-value = 0.05946
## 
##  --------
##  PAE = Oui 
## 
##  Shapiro-Wilk normality test
## 
## data:  Age
## W = 0.94843, p-value = 0.0181
## 
##  --------
## 
##  p-values adjusted by the Holm method:
##     unadjusted adjusted
## Non 0.059461   0.059461
## Oui 0.018097   0.036195
# calcul des tests statistiques

(t2<-  hypertension_data %>%
  tbl_summary(
    sort = all_categorical()~"frequency",
    include = -c(IMC,Pression_Systolique,Pression_Diastolique),
    statistic = list(all_categorical()~ "{n}({p}%)",
                     all_continuous() ~ "{mean} ({sd})"),
    digits =list(all_categorical() ~ c(0,1),
                 all_continuous()~1),
    by=PAE) %>%
  bold_labels()%>%
  add_overall(last=T, col_label="**Effectif total** N = {N} ")%>%
  add_p(
    test = all_continuous() ~ "wilcox.test",
    pvalue_fun = scales::label_pvalue(accuracy = .001)
  )%>%
    modify_header(
      list(
        label ~ "",
        all_stat_cols(stat_0 = FALSE) ~ "_{level}_ (n={n}, {style_percent(p)}%)",
        stat_0 ~ "Total (n={N})",
        p.value ~ "**P-valeur**"
      )
    ) %>%
    modify_footnote(everything() ~ NA) %>%
    modify_spanning_header(all_stat_cols() ~ "**Pression artérielle élevée**"))
## 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 every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Pression artérielle élevée
P-valeur
Non (n=44, 44%) Oui (n=56, 56%) Total (n=100)
Age 46,2 (17,2) 49,6 (17,3) 48,1 (17,2) 0.329
Sexe


0.124
    Femme 28(63,6%) 27(48,2%) 55(55,0%)
    Homme 16(36,4%) 29(51,8%) 45(45,0%)
Fumeur


0.208
    Oui 26(59,1%) 26(46,4%) 52(52,0%)
    Non 18(40,9%) 30(53,6%) 48(48,0%)
Diabète


0.373
    Oui 22(50,0%) 33(58,9%) 55(55,0%)
    Non 22(50,0%) 23(41,1%) 45(45,0%)
Activité_Physique


0.821
    Non 23(52,3%) 28(50,0%) 51(51,0%)
    Oui 21(47,7%) 28(50,0%) 49(49,0%)
Etat_Nutritionnel


0.340
    Poids normal 12(27,3%) 20(35,7%) 32(32,0%)
    Surpoids 7(15,9%) 15(26,8%) 22(22,0%)
    Obésité classe I 11(25,0%) 11(19,6%) 22(22,0%)
    Obésité classe II 13(29,5%) 9(16,1%) 22(22,0%)
    Insuffisance pondérale 1(2,3%) 1(1,8%) 2(2,0%)
    Obésité classe III 0(0,0%) 0(0,0%) 0(0,0%)
# Combinaison des tableaux
  
tbl_merge(
  list(t1, t2),
  tab_spanner = c("**Analyse descriptive**", "**Modèles bivariés**")
)
Caractéristique
Analyse descriptive
Modèles bivariés
N = 1001 Non (n=44, 44%) Oui (n=56, 56%) Total (n=100) P-valeur
Age 48,1 (17,2) 46,2 (17,2) 49,6 (17,3) 48,1 (17,2) 0.329
Sexe



0.124
    Femme 55(55,0%) 28(63,6%) 27(48,2%) 55(55,0%)
    Homme 45(45,0%) 16(36,4%) 29(51,8%) 45(45,0%)
Fumeur



0.208
    Oui 52(52,0%) 26(59,1%) 26(46,4%) 52(52,0%)
    Non 48(48,0%) 18(40,9%) 30(53,6%) 48(48,0%)
Diabète



0.373
    Oui 55(55,0%) 22(50,0%) 33(58,9%) 55(55,0%)
    Non 45(45,0%) 22(50,0%) 23(41,1%) 45(45,0%)
Activité_Physique



0.821
    Non 51(51,0%) 23(52,3%) 28(50,0%) 51(51,0%)
    Oui 49(49,0%) 21(47,7%) 28(50,0%) 49(49,0%)
PAE




    Oui 56(56,0%)



    Non 44(44,0%)



Etat_Nutritionnel



0.340
    Poids normal 32(32,0%) 12(27,3%) 20(35,7%) 32(32,0%)
    Surpoids 22(22,0%) 7(15,9%) 15(26,8%) 22(22,0%)
    Obésité classe I 22(22,0%) 11(25,0%) 11(19,6%) 22(22,0%)
    Obésité classe II 22(22,0%) 13(29,5%) 9(16,1%) 22(22,0%)
    Insuffisance pondérale 2(2,0%) 1(2,3%) 1(1,8%) 2(2,0%)
    Obésité classe III 0(0,0%) 0(0,0%) 0(0,0%) 0(0,0%)
1 Moyenne (ET); n(%)