ORU PACA - Exercice 2
Packages:
##
## 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
##
## Attachement du package : 'kableExtra'
## L'objet suivant est masqué depuis 'package:dplyr':
##
## group_rows
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
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)
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)
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)
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-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)
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)
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.