ORU PACA - Exercice 2

Packages:

library(broom)
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
library(kableExtra)
## 
## Attachement du package : 'kableExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
## 
##     group_rows
library(readxl)
library(stringr)

L’objectif est d’identifier les facteurs associés à la durée de passage aux urgences (DPU) à partir des données transmises dans le cadre d’un travail de thèse en médecine d’urgence.

Importation des données

library(readxl)
library(dplyr)
library(stringr)

DATA <- read_excel("DATA_CAS_USAGE_RPU.xlsx", sheet = 2)

Préparation des variables utiles pour la DPU

Les variables tranche d’âge, CCMU et mode de sortie ont été sélectionnées car elles constituent des indicateurs disponibles dans les données et potentiellement associés à la variabilité de la durée de passage aux urgences (DPU).

dpu_data <- DATA %>%
  filter(!is.na(DPU), DPU > 0) %>%
  mutate(
    AGE_MIN = as.integer(str_extract(AGE_CAT, "^\\d+")),
    tranche_age = case_when(
      is.na(AGE_MIN) ~ "Inconnu",
      AGE_MIN < 18 ~ "< 18 ans",
      AGE_MIN >= 18 & AGE_MIN < 45 ~ "18–44 ans",
      AGE_MIN >= 45 & AGE_MIN < 65 ~ "45–64 ans",
      AGE_MIN >= 65 & AGE_MIN < 75 ~ "65–74 ans",
      AGE_MIN >= 75 ~ "≥ 75 ans"
    ),
    CCMU = suppressWarnings(as.integer(CCMU)),
    sortie = `Mode de sortie`
  )

Analyses descriptives

Cette étape consiste à calculer la moyenne et la médiane de la durée de passage aux urgences (DPU) selon trois variables explicatives :

  • Tranche d’âge, afin d’observer l’évolution de la DPU entre groupes de patients ;

  • CCMU, pour voir si la gravité influence la durée de passage ;

  • Mode de sortie, afin de comparer les durées selon l’orientation (domicile, hospitalisation, transfert).

Les résultats sont présentés sous forme de trois tableaux distincts, permettant une première lecture descriptive avant les tests statistiques.

# 1) Moyenne et médiane par tranche d'âge
age_summary <- dpu_data %>%
  group_by(tranche_age) %>%
  summarise(
    n = n(),
    dpu_moy = round(mean(DPU), 1),
    dpu_med = round(median(DPU), 1),
    .groups = "drop"
  )

# 2) Moyenne et médiane par CCMU
ccmu_summary <- dpu_data %>%
  group_by(CCMU) %>%
  summarise(
    n = n(),
    dpu_moy = round(mean(DPU), 1),
    dpu_med = round(median(DPU), 1),
    .groups = "drop"
  )

# 3) Moyenne et médiane par mode de sortie
sortie_summary <- dpu_data %>%
  group_by(sortie) %>%
  summarise(
    n = n(),
    dpu_moy = round(mean(DPU), 1),
    dpu_med = round(median(DPU), 1),
    .groups = "drop"
  )

# Affichage avec kable (3 tableaux consécutifs)
kable(age_summary,
      caption = "Durée de passage moyenne et médiane selon la tranche d'âge",
      col.names = c("Tranche d'âge", "n", "Moyenne DPU", "Médiane DPU")) %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Durée de passage moyenne et médiane selon la tranche d’âge
Tranche d’âge n Moyenne DPU Médiane DPU
18–44 ans 16884 282.1 223
45–64 ans 10700 287.6 230
65–74 ans 4744 281.4 221
< 18 ans 10100 273.9 213
≥ 75 ans 8120 275.9 215
kable(ccmu_summary,
      caption = "Durée de passage moyenne et médiane selon la gravité (CCMU)",
      col.names = c("CCMU", "n", "Moyenne DPU", "Médiane DPU")) %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Durée de passage moyenne et médiane selon la gravité (CCMU)
CCMU n Moyenne DPU Médiane DPU
1 3238 271.8 211
2 26878 282.2 224
3 9250 284.0 222
4 558 286.1 233
5 85 303.6 243
NA 10539 275.6 214
kable(sortie_summary,
      caption = "Durée de passage moyenne et médiane selon le mode de sortie",
      col.names = c("Mode de sortie", "n", "Moyenne DPU", "Médiane DPU")) %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Durée de passage moyenne et médiane selon le mode de sortie
Mode de sortie n Moyenne DPU Médiane DPU
Domicile 39177 280.1 221.0
Décès 1 289.0 289.0
Mutation 9872 281.8 223.0
Transfert 1276 273.2 217.0
NA 222 355.2 278.5
library(ggplot2)

ggplot(dpu_data, aes(x = as.factor(CCMU), y = DPU)) +
  geom_boxplot(fill = "steelblue", alpha = 0.6) +
  labs(title = "Distribution de la DPU selon la gravité (CCMU)",
       x = "CCMU", y = "Durée de passage (minutes)") +
  theme_minimal(base_size = 13)

Visuellement, la DPU semble légèrement plus élevée chez les patients avec CCMU plus grave, mais les différences entre les groupes ne sont pas très nettes.

Test statistique

Pour confirmer si cette tendance est réellement significative, il faudra appliquer un test statistique (comme le Kruskal–Wallis).

Le test Kruskal–Wallis est l’option la plus adaptée ici, car :

La DPU est une variable quantitative continue avec une distribution très étalée et non normale.

CCMU est une variable catégorielle ordinale (1 à 5).

On compare plusieurs groupes (> 2), donc un test non paramétrique est nécessaire.

kruskal.test(DPU ~ as.factor(CCMU), data = dpu_data)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  DPU by as.factor(CCMU)
## Kruskal-Wallis chi-squared = 9.8124, df = 4, p-value = 0.04371

La DPU diffère légèrement selon les niveaux de gravité (CCMU) (Kruskal–Wallis, p = 0,044).

Visuellement, les CCMU plus élevés tendent à avoir une DPU légèrement plus longue.

Conclusion

La gravité est un facteur associé à la DPU, mais l’effet observé reste modéré.

# Test DPU selon tranche d'âge
test_age <- kruskal.test(DPU ~ tranche_age, data = dpu_data)

# Test DPU selon mode de sortie
test_sortie <- kruskal.test(DPU ~ sortie, data = dpu_data)

# Résumé des p-values
p_values <- data.frame(
  Facteur = c("Gravité (CCMU)", "Tranche d'âge", "Mode de sortie"),
  p_value = c(0.04371, test_age$p.value, test_sortie$p.value)
)

library(kableExtra)
kable(p_values,
      caption = "Résumé des p-values pour les facteurs associés à la DPU",
      col.names = c("Facteur", "p-value"),
      digits = 5) %>%
  kable_styling(bootstrap_options = c("striped","hover"), full_width = FALSE)
Résumé des p-values pour les facteurs associés à la DPU
Facteur p-value
Gravité (CCMU) 0.04371
Tranche d’âge 0.00000
Mode de sortie 0.80802

Parmi les facteurs étudiés, l’âge est celui qui influence le plus la DPU, suivi de la gravité (CCMU) dont l’effet est présent mais modéré. Le mode de sortie ne semble pas être associé à une variation de la durée de passage dans ces données.

Comme la DPU est continue (en minutes), on peut utiliser un modèle linéaire (lm). Et comme la DPU est souvent asymétrique, on peut log-transformer la variable pour avoir des résidus plus proches de la normalité.

# Modèle multivarié (log-transformation de DPU)
modele <- lm(log(DPU) ~ tranche_age + as.factor(CCMU), data = dpu_data)

summary(modele)
## 
## Call:
## lm(formula = log(DPU) ~ tranche_age + as.factor(CCMU), data = dpu_data)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -5.2711 -0.4678  0.1842  0.6623  3.1523 
## 
## Coefficients:
##                      Estimate Std. Error t value Pr(>|t|)    
## (Intercept)           5.12152    0.02070 247.387  < 2e-16 ***
## tranche_age≥ 75 ans   0.01192    0.01754   0.680  0.49665    
## tranche_age18–44 ans  0.07638    0.01519   5.028 4.98e-07 ***
## tranche_age45–64 ans  0.09717    0.01648   5.897 3.74e-09 ***
## tranche_age65–74 ans  0.06420    0.02077   3.091  0.00200 ** 
## as.factor(CCMU)2      0.05245    0.01979   2.650  0.00804 ** 
## as.factor(CCMU)3      0.04422    0.02210   2.001  0.04543 *  
## as.factor(CCMU)4      0.04222    0.04887   0.864  0.38768    
## as.factor(CCMU)5      0.18413    0.11667   1.578  0.11452    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 1.06 on 40000 degrees of freedom
##   (10539 observations effacées parce que manquantes)
## Multiple R-squared:  0.001549,   Adjusted R-squared:  0.001349 
## F-statistic: 7.757 on 8 and 40000 DF,  p-value: 1.876e-10

La DPU est significativement influencée par l’âge (surtout pour les 18–74 ans) et par les CCMU 2–3, mais ces variables expliquent une part très limitée de la variabilité globale (R² ≈ 0,15 %). Cela signifie que d’autres facteurs sont probablement les déterminants majeurs des durées de passage.

# Extraire les coefficients du modèle et calculer le % de variation
modele_summary <- broom::tidy(modele) %>%
  mutate(
    pct_change = round((exp(estimate) - 1) * 100, 1)  # % variation
  ) %>%
  select(term, estimate, std.error, statistic, p.value, pct_change)

# Créer un tableau clair
kable(modele_summary,
      caption = "Effet des facteurs sur la DPU (modèle linéaire sur log(DPU))",
      col.names = c("Facteur", "Estimate (log)", "Erreur Std", "t-value", "p-value", "% variation DPU"),
      digits = c(NA, 3, 3, 2, 5, 1)) %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  column_spec(6, bold = TRUE)
Effet des facteurs sur la DPU (modèle linéaire sur log(DPU))
Facteur Estimate (log) Erreur Std t-value p-value % variation DPU
(Intercept) 5.122 0.021 247.39 0.00000 16659.0
tranche_age≥ 75 ans 0.012 0.018 0.68 0.49665 1.2
tranche_age18–44 ans 0.076 0.015 5.03 0.00000 7.9
tranche_age45–64 ans 0.097 0.016 5.90 0.00000 10.2
tranche_age65–74 ans 0.064 0.021 3.09 0.00200 6.6
as.factor(CCMU)2 0.052 0.020 2.65 0.00804 5.4
as.factor(CCMU)3 0.044 0.022 2.00 0.04543 4.5
as.factor(CCMU)4 0.042 0.049 0.86 0.38768 4.3
as.factor(CCMU)5 0.184 0.117 1.58 0.11452 20.2

La DPU est significativement plus longue chez les patients 18–74 ans, avec une augmentation de +6 % à +10 % par rapport aux < 18 ans.

Les niveaux CCMU 2 et 3 sont associés à une augmentation de la DPU d’environ +5 % par rapport à CCMU 1.

Les ≥ 75 ans et les CCMU 4–5 ne montrent pas de différence significative.

Le modèle reste globalement peu explicatif (R² ≈ 0,15 %), ce qui suggère que d’autres facteurs organisationnels ou contextuels influencent aussi la DPU.

Synthèse

Les principaux facteurs associés à une DPU plus longue sont l’âge (18–74 ans) et, dans une moindre mesure, la gravité CCMU (niveaux 2–3). Ces résultats confirment que la complexité des patients joue un rôle dans la durée de passage, mais qu’elle n’explique pas à elle seule toute la variabilité observée.