# Libraries
library(sf)
library(cartography)
# Import données enrichies
hop <- st_read(dsn = "data/geom.gpkg", layer = "hop", quiet = TRUE)
com_insee <- st_read(dsn = "data/geom.gpkg", layer = "com_insee", quiet = TRUE)
com_dist <- st_read(dsn = "data/geom.gpkg", layer = "com_dist", quiet = TRUE)
com_cap <- st_read(dsn = "data/geom.gpkg", layer = "com_cap", quiet = TRUE)
# Jointures noms de régions
com_cap <- merge(com_cap, com_insee[,c("INSEE_COM", "NOM_REG"), drop = T],
all.x = TRUE, by = "INSEE_COM")
com_dist <- merge(com_dist, com_insee[,c("INSEE_COM", "NOM_REG"), drop = T],
by = "INSEE_COM", all.x = TRUE)
# Retirer la Corse (no data)
com_dist <- com_dist[com_dist$NOM_REG != "CORSE",]
com_cap <- com_cap[com_cap$NOM_REG != "CORSE",]
# Import couches pour modèle carto
study_area <- st_read(dsn = "data/geom.gpkg", layer = "study_area", quiet = TRUE)
border <- st_read(dsn = "data/geom.gpkg", layer = "border", quiet = TRUE)
dep <- st_read(dsn = "data/geom.gpkg", layer = "dep", quiet = TRUE)
country <- st_read(dsn = "data/geom.gpkg", layer = "country", quiet = TRUE)
# Dimension des cartes à l'export
sizes <- getFigDim(x = dep, width = 3000, mar = c(0,0,1.2,0), res = 400)
# Modèle carto
layChir <- function(title = ""){
par(mar = c(0,0,1.2,0))
ghostLayer(study_area)
layoutLayer(title = title, col = "white", coltitle = "black", bg = "lightblue",
scale = FALSE)
plot(country$geom, col = "#d4d4d4", border = "white", lwd = 1, add = TRUE)
plot(st_geometry(study_area) + c(5000, -5000), col= "#707070", border = NA, add = TRUE)
plot(st_geometry(study_area), col = "white", border = NA, add = TRUE)
layoutLayer(title = title, author = "Réalisation : Ronan Ysebaert, Timothée Giraud, Nicolas Lambert (RIATE), Hugues Pécout (FR-CIST),\nSophie Baudet-Michel (Géographie-cités), Benoit Conti (ENPC), Charlène Le Neindre (IRDES), 2021",
col = "white", coltitle = "black",
sources = "Sources : INSEE, IGN, DREES, (c) OSM et contributeurs, Natural Earth, 2021", scale = 50)
}# 1 - Type hôpitaux (public / privé) les plus proche
com_dist$DIST_TYPE_2000 <- ifelse(com_dist$DIST1_PUB_2000 < com_dist$DIST1_PRIV_2000,
"Public", "Privé")
# Si moins de 5 minutes d'écart, peu de différences
com_dist$DIST_TYPE_2000 <- ifelse(abs(com_dist$DIST1_PUB_2000 - com_dist$DIST1_PRIV_2000) < 5,
"Peu de différences", com_dist$DIST_TYPE_2000)
com_dist$DIST_TYPE_2018 <- ifelse(com_dist$DIST1_PUB_2018 < com_dist$DIST1_PRIV_2018,
"Public", "Privé")
com_dist$DIST_TYPE_2018 <- ifelse(abs(com_dist$DIST1_PUB_2018 - com_dist$DIST1_PRIV_2018) < 5,
"Peu de différences", com_dist$DIST_TYPE_2018)
# 2 - Différence entre le premier et le second hôpital le plus proche
com_dist$D1_D2_ALL_2018 <- com_dist$DIST2_ALL_2018 - com_dist$DIST1_ALL_2018
com_dist$D1_D2_ALL_2000 <- com_dist$DIST2_ALL_2000 - com_dist$DIST1_ALL_2000
com_dist$D1_D2_PUB_2018 <- com_dist$DIST2_PUB_2018 - com_dist$DIST1_PUB_2018
com_dist$D1_D2_PUB_2000 <- com_dist$DIST2_PUB_2000 - com_dist$DIST1_PUB_2000
com_dist$D1_D2_PRIV_2018 <- com_dist$DIST2_PRIV_2018 - com_dist$DIST1_PRIV_2018
com_dist$D1_D2_PRIV_2000 <- com_dist$DIST2_PRIV_2000 - com_dist$DIST1_PRIV_2000
# 3 - Evolutions 2000-2018
com_dist$DIST1_ALL_EVOL <- com_dist$DIST1_ALL_2018 - com_dist$DIST1_ALL_2000
com_dist$DIST2_ALL_EVOL <- com_dist$DIST2_ALL_2018 - com_dist$DIST2_ALL_2000
com_dist$DIST1_PUB_EVOL <- com_dist$DIST1_PUB_2018 - com_dist$DIST1_PUB_2000
com_dist$DIST2_PUB_EVOL <- com_dist$DIST2_PUB_2018 - com_dist$DIST2_PUB_2000
com_dist$DIST1_PRIV_EVOL <- com_dist$DIST1_PRIV_2018 - com_dist$DIST1_PRIV_2000
com_dist$DIST2_PRIV_EVOL <- com_dist$DIST2_PRIV_2018 - com_dist$DIST2_PRIV_2000
com_dist$D1_D2_ALL_EVOL <- com_dist$D1_D2_ALL_2018 - com_dist$D1_D2_ALL_2000
com_dist$D1_D2_PUB_EVOL <- com_dist$D1_D2_PUB_2018 - com_dist$D1_D2_PUB_2000
com_dist$D1_D2_PRIV_EVOL <- com_dist$D1_D2_PRIV_2018 - com_dist$D1_D2_PRIV_2000Création d’une fonction f pour obtenir des résumés statistiques sur des variables (min, 1er décile, 1er quartile, moyenne, médiane, 2e quartile, 9e décile, maximum).
# Fonction
f <- function(x){
c(min = min(x, na.rm = TRUE),
quantile(x, probs = 0.1, na.rm = TRUE),
quantile(x, probs = 0.25, na.rm = TRUE),
Moy = mean(x, na.rm = TRUE) ,
Med = median(x, na.rm = TRUE),
quantile(x, probs = 0.75, na.rm = TRUE),
quantile(x, probs = 0.9, na.rm = TRUE),
Max = max(x, na.rm = TRUE))
}On applique la fonction f aux indicateurs de distance pour 2000.
La codification des indicateurs obéit à la logique suivante : - DIST1/2 : Premier-second hôpital le plus proche. - D1_D2 : Différence entre le premier et le second hôpital le plus proche. - ALL-PUB-PRIV : Toute structure confondue, hôpitaux publics, hôpitaux privés. - 2000-2018 : année de référence.
L’unité de mesure est la minute. Le résumé statistique porte sur les valeurs observées sur l’ensemble des communes de France métropolitaine, hors Corse.
df <- com_dist[,c("DIST1_ALL_2000", "DIST2_ALL_2000", "DIST1_PUB_2000",
"DIST2_PUB_2000", "DIST1_PRIV_2000", "DIST2_PRIV_2000",
"D1_D2_ALL_2000", "D1_D2_PUB_2000", "D1_D2_PRIV_2000"),
drop = T]
df <- t(sapply(df, f))
knitr::kable(df, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| DIST1_ALL_2000 | 0.2 | 8.5 | 13.3 | 21.2 | 19.9 | 27.7 | 35.4 | 137.7 |
| DIST2_ALL_2000 | 1.0 | 12.3 | 18.4 | 27.3 | 26.1 | 34.7 | 43.1 | 149.8 |
| DIST1_PUB_2000 | 0.2 | 10.2 | 15.4 | 24.1 | 22.5 | 30.9 | 39.7 | 137.7 |
| DIST2_PUB_2000 | 1.8 | 20.9 | 27.3 | 36.5 | 34.9 | 43.9 | 53.8 | 153.3 |
| DIST1_PRIV_2000 | 0.2 | 10.3 | 16.3 | 26.4 | 24.8 | 34.6 | 44.4 | 149.8 |
| DIST2_PRIV_2000 | 1.4 | 16.2 | 24.1 | 35.2 | 33.7 | 44.3 | 55.6 | 159.4 |
| D1_D2_ALL_2000 | 0.0 | 0.3 | 0.8 | 6.1 | 2.3 | 7.7 | 18.4 | 84.6 |
| D1_D2_PUB_2000 | 0.0 | 1.1 | 3.8 | 12.4 | 10.0 | 18.5 | 26.9 | 84.6 |
| D1_D2_PRIV_2000 | 0.0 | 0.4 | 1.3 | 8.8 | 4.1 | 13.3 | 24.7 | 77.4 |
df <- com_dist[,c("DIST1_ALL_2018", "DIST2_ALL_2018", "DIST1_PUB_2018",
"DIST2_PUB_2018", "DIST1_PRIV_2018", "DIST2_PRIV_2018",
"D1_D2_ALL_2018", "D1_D2_PUB_2018", "D1_D2_PRIV_2018"),
drop = T]
df <- t(sapply(df, f))
knitr::kable(df, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| DIST1_ALL_2018 | 0.2 | 9.4 | 14.8 | 23.5 | 22.1 | 30.6 | 39.1 | 149.9 |
| DIST2_ALL_2018 | 1.0 | 13.9 | 20.9 | 30.6 | 29.5 | 38.7 | 48.2 | 153.3 |
| DIST1_PUB_2018 | 0.2 | 11.0 | 16.7 | 26.2 | 24.6 | 33.8 | 43.2 | 153.3 |
| DIST2_PUB_2018 | 1.8 | 23.1 | 30.1 | 40.0 | 38.5 | 48.0 | 58.9 | 166.9 |
| DIST1_PRIV_2018 | 0.2 | 11.7 | 18.5 | 30.4 | 28.2 | 39.2 | 51.5 | 149.9 |
| DIST2_PRIV_2018 | 1.1 | 19.1 | 28.5 | 41.5 | 39.8 | 51.7 | 64.9 | 166.2 |
| D1_D2_ALL_2018 | 0.0 | 0.4 | 1.0 | 7.1 | 3.2 | 9.8 | 20.8 | 84.6 |
| D1_D2_PUB_2018 | 0.0 | 1.5 | 4.5 | 13.8 | 11.5 | 20.3 | 29.4 | 84.6 |
| D1_D2_PRIV_2018 | 0.0 | 0.5 | 1.8 | 11.1 | 6.1 | 17.4 | 28.5 | 97.6 |
df <- com_dist[,c("DIST1_ALL_EVOL", "DIST2_ALL_EVOL", "DIST1_PUB_EVOL",
"DIST2_PUB_EVOL", "DIST1_PRIV_EVOL", "DIST2_PRIV_EVOL",
"D1_D2_ALL_EVOL", "D1_D2_PUB_EVOL", "D1_D2_PRIV_EVOL"),
drop = T]
df <- t(sapply(df, f))
knitr::kable(df, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| DIST1_ALL_EVOL | -36.4 | 0.0 | 0 | 2.3 | 0.0 | 0.9 | 8.1 | 57.7 |
| DIST2_ALL_EVOL | -28.0 | 0.0 | 0 | 3.4 | 0.2 | 3.4 | 12.3 | 55.4 |
| DIST1_PUB_EVOL | -41.4 | 0.0 | 0 | 2.2 | 0.0 | 0.0 | 9.8 | 59.0 |
| DIST2_PUB_EVOL | -47.0 | 0.0 | 0 | 3.5 | 0.0 | 5.2 | 15.9 | 58.0 |
| DIST1_PRIV_EVOL | -13.5 | 0.0 | 0 | 4.0 | 0.0 | 2.6 | 15.8 | 107.8 |
| DIST2_PRIV_EVOL | -28.2 | 0.0 | 0 | 6.3 | 1.2 | 8.2 | 21.8 | 94.7 |
| D1_D2_ALL_EVOL | -44.7 | -3.8 | 0 | 1.0 | 0.0 | 1.6 | 8.6 | 55.4 |
| D1_D2_PUB_EVOL | -53.3 | -5.5 | 0 | 1.4 | 0.0 | 2.4 | 12.6 | 53.3 |
| D1_D2_PRIV_EVOL | -64.3 | -5.9 | 0 | 2.3 | 0.0 | 4.2 | 16.7 | 79.4 |
Résultats ventilés par région. Part des communes plus proches d’une structure privé, publique ou indifférenciée (moins de 5 minutes d’écart entre les deux structures).
df <- com_dist[,c("DIST1_ALL_2018", "DIST1_ALL_2000", "DIST_TYPE_2018",
"DIST_TYPE_2000", "NOM_REG"), drop = TRUE]
# Nombre de communes par catégories
tmp1 <- table(df$NOM_REG, df$DIST_TYPE_2000)
FRANCE <- apply(tmp1, 2, sum)
tmp1 <- rbind(tmp1, FRANCE)
tmp1 <- prop.table(tmp1, 1) * 100
tmp2 <- table(df$NOM_REG, df$DIST_TYPE_2018)
FRANCE <- apply(tmp1, 2, sum)
tmp2 <- rbind(tmp2, FRANCE)
tmp2 <- prop.table(tmp2, 1) * 100
tmp <- cbind(tmp1, tmp2)
colnames(tmp) <- c("INF_5MN_2000", "PRIV_2000", "PUB_2000", "INF_5MN_2000", "PRIV_2000", "PUB_2000" )
knitr::kable(tmp, digits = 1) | INF_5MN_2000 | PRIV_2000 | PUB_2000 | INF_5MN_2000 | PRIV_2000 | PUB_2000 | |
|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 57.2 | 14.2 | 28.6 | 58.7 | 8.9 | 32.4 |
| BOURGOGNE-FRANCHE-COMTE | 61.8 | 5.7 | 32.5 | 65.3 | 10.5 | 24.2 |
| BRETAGNE | 66.2 | 8.5 | 25.3 | 63.2 | 5.4 | 31.4 |
| CENTRE-VAL DE LOIRE | 55.3 | 19.5 | 25.2 | 44.9 | 23.1 | 32.0 |
| GRAND EST | 57.6 | 13.0 | 29.4 | 52.7 | 16.2 | 31.2 |
| HAUTS-DE-FRANCE | 61.6 | 18.7 | 19.7 | 60.6 | 12.7 | 26.7 |
| ILE-DE-FRANCE | 72.2 | 13.3 | 14.5 | 69.8 | 11.2 | 19.0 |
| NORMANDIE | 70.2 | 11.2 | 18.6 | 50.3 | 16.2 | 33.5 |
| NOUVELLE-AQUITAINE | 62.6 | 12.5 | 24.9 | 58.4 | 12.9 | 28.7 |
| OCCITANIE | 49.4 | 27.6 | 23.0 | 44.4 | 17.8 | 37.8 |
| PAYS DE LA LOIRE | 61.2 | 11.1 | 27.7 | 55.1 | 16.2 | 28.7 |
| PROVENCE-ALPES-COTE D’AZUR | 58.7 | 21.6 | 19.6 | 71.2 | 8.1 | 20.7 |
| FRANCE | 59.9 | 15.0 | 25.1 | 61.1 | 14.8 | 24.2 |
# En 2000
coln <- c("2000", "Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max")
regStats <- do.call(data.frame, aggregate(x = df[,c("DIST1_ALL_2000")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
regStats2 <- data.frame(t(f(df[,c("DIST1_ALL_2000")])))
regStats2$`2000` <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "2000")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | 2000 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0.5 | 8.4 | 13.3 | 21.6 | 20.3 | 28.4 | 36.5 | 73.8 |
| BOURGOGNE-FRANCHE-COMTE | 0.7 | 10.1 | 15.4 | 23.1 | 22.5 | 30.1 | 36.8 | 57.7 |
| BRETAGNE | 0.4 | 8.5 | 12.8 | 19.6 | 18.4 | 24.9 | 30.4 | 137.7 |
| CENTRE-VAL DE LOIRE | 0.5 | 10.1 | 15.1 | 21.6 | 21.4 | 27.9 | 33.0 | 45.5 |
| GRAND EST | 0.2 | 9.1 | 13.8 | 21.4 | 20.3 | 28.4 | 35.3 | 56.1 |
| HAUTS-DE-FRANCE | 0.5 | 7.2 | 11.3 | 17.0 | 16.5 | 22.0 | 27.9 | 42.0 |
| ILE-DE-FRANCE | 0.4 | 3.4 | 6.6 | 12.1 | 11.5 | 16.7 | 21.4 | 36.0 |
| NORMANDIE | 0.4 | 7.9 | 12.0 | 18.2 | 17.2 | 23.5 | 29.6 | 46.1 |
| NOUVELLE-AQUITAINE | 0.3 | 10.1 | 15.6 | 23.1 | 22.2 | 29.7 | 36.8 | 78.2 |
| OCCITANIE | 0.4 | 10.1 | 15.6 | 24.8 | 23.4 | 32.5 | 41.5 | 71.6 |
| PAYS DE LA LOIRE | 0.5 | 8.5 | 13.6 | 19.5 | 19.2 | 24.9 | 30.5 | 62.6 |
| PROVENCE-ALPES-COTE D’AZUR | 0.2 | 8.0 | 12.9 | 27.2 | 21.3 | 37.8 | 54.8 | 108.5 |
| FRANCE | 0.2 | 8.5 | 13.3 | 21.2 | 19.9 | 27.7 | 35.4 | 137.7 |
# En 2018
regStats <- do.call(data.frame, aggregate(x = df[,c("DIST1_ALL_2018")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
colnames(regStats)[1] <- "2018"
regStats2 <- data.frame(t(f(df[,c("DIST1_ALL_2018")])))
regStats2$`2018` <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "2018")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | 2018 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0.5 | 9.4 | 14.9 | 24.6 | 22.8 | 31.7 | 42.5 | 84.7 |
| BOURGOGNE-FRANCHE-COMTE | 0.7 | 12.4 | 18.7 | 28.6 | 27.3 | 36.8 | 46.1 | 74.0 |
| BRETAGNE | 0.7 | 10.2 | 14.5 | 21.6 | 20.9 | 27.0 | 32.1 | 149.9 |
| CENTRE-VAL DE LOIRE | 0.7 | 10.6 | 16.3 | 23.1 | 23.2 | 29.7 | 35.6 | 51.8 |
| GRAND EST | 0.2 | 9.9 | 15.0 | 23.2 | 21.9 | 30.6 | 38.2 | 68.4 |
| HAUTS-DE-FRANCE | 0.4 | 7.7 | 12.2 | 18.7 | 17.9 | 24.4 | 30.8 | 45.8 |
| ILE-DE-FRANCE | 0.4 | 4.2 | 7.3 | 12.9 | 12.1 | 17.4 | 22.6 | 36.9 |
| NORMANDIE | 0.5 | 8.8 | 13.2 | 19.8 | 19.0 | 25.7 | 31.7 | 46.1 |
| NOUVELLE-AQUITAINE | 0.3 | 11.2 | 17.1 | 25.3 | 24.3 | 32.8 | 40.9 | 78.2 |
| OCCITANIE | 0.9 | 11.0 | 17.0 | 26.5 | 25.3 | 34.8 | 43.2 | 71.8 |
| PAYS DE LA LOIRE | 0.8 | 10.2 | 15.1 | 21.6 | 21.7 | 27.7 | 33.0 | 62.6 |
| PROVENCE-ALPES-COTE D’AZUR | 0.2 | 8.9 | 14.4 | 29.4 | 23.4 | 40.5 | 59.4 | 111.1 |
| FRANCE | 0.2 | 9.4 | 14.8 | 23.5 | 22.1 | 30.6 | 39.1 | 149.9 |
png(file = "fig/04_TIME_ALL_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Temps d'accès à l'hôpital le plus proche - 2018")
choroLayer(x = com_dist, var = "DIST1_ALL_2018",
breaks = c(0, 15, 30, 45, 60 ,max(com_dist$DIST1_ALL_2018, na.rm = TRUE)),
col = carto.pal(pal1 = "brown.pal", n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route\n(source : OSRM)",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2018,]), add = TRUE, pch = 21, cex = 0.2,
bg = "red", col = NA)
dev.off()
png(file = "fig/05_TIME_PRIV_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Temps d'accès à l'hôpital le plus proche (structure privée) - 2018")
choroLayer(x = com_dist, var = "DIST1_PRIV_2018",
breaks = c(0, 15, 30, 45, 60, max(com_dist$DIST1_PRIV_2018, na.rm = TRUE)),
col = carto.pal(pal1 = "brown.pal", n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route\n(source : OSRM)",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2018 & (hop$stjr == 2 |hop$stjr == 3),]),
add = TRUE, pch = 21, cex = 0.2, bg = "red", col = NA)
dev.off()
png(file = "fig/06_TIME_PUB_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Temps d'accès à l'hôpital le plus proche (structure publique) - 2018")
choroLayer(x = com_dist, var = "DIST1_PUB_2018",
breaks = c(0, 15, 30, 45, 60, max(com_dist$DIST1_PUB_2018, na.rm = TRUE)),
col = carto.pal(pal1 = "brown.pal", n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route\n(source : OSRM)",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2018 & hop$stjr == 1,]),
add = TRUE, pch = 21, cex = 0.2, bg = "red", col = NA)
dev.off()


# Sélection uniquement dans les grandes aires urbaines
aurb <- com_insee[com_insee$CATAEU2010 %in% c("111", "112", "120"),]
aurbdist <- st_set_geometry(com_dist, NULL)
aurb <- merge(aurb, aurbdist, by = "INSEE_COM", all.x = TRUE)
png(file = "fig/04_TIME_ALL_2018_AURB.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Temps d'accès à l'hôpital le plus proche - 2018 (Aires urbaines")
choroLayer(x = aurb, var = "DIST1_ALL_2018",
breaks = c(0, 15, 30, 45, 60 ,max(com_dist$DIST1_ALL_2018, na.rm = TRUE)),
col = carto.pal(pal1 = "brown.pal", n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route\n(source : OSRM)",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2018,]), add = TRUE, pch = 21, cex = 0.2,
bg = "red", col = NA)
dev.off()
png(file = "fig/07_PROX_PRIVPUB_2000.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Proximité aux structures privées ou publiques (2000)")
typoLayer(x = com_dist, var = "DIST_TYPE_2000",
col = c("indianred1", "skyblue3", "lightgrey"),
legend.values.order = c("Public", "Privé", "Peu de différences"),
border = NA, lwd = .2, legend.pos = "topleft",
legend.title.txt = "Type de structure\nla plus proche par la route",
add = TRUE)
plot(st_geometry(hop[hop$year == 2000 & hop$stjr == 1,]),
add = TRUE, pch = 21, cex = .7, bg = "red3", col = "white")
plot(st_geometry(hop[hop$year == 2000 & (hop$stjr == 2 |hop$stjr == 3),]),
add = TRUE, pch = 21, cex = .7, bg = "blue3", col = "white")
plot(st_geometry(border), col = "#b59a82", lwd = 1, add = TRUE)
dev.off()
# En 2018
png(file = "fig/08_PROX_PRIVPUB_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Proximité aux structures privées ou publiques (2018)")
typoLayer(x = com_dist, var = "DIST_TYPE_2018",
col = c("indianred1", "skyblue3", "lightgrey"),
legend.values.order = c("Public", "Privé", "Peu de différences"),
border = NA, lwd = .2, legend.pos = "topleft",
legend.title.txt = "Type de structure\nla plus proche par la route",
add = TRUE)
plot(st_geometry(hop[hop$year == 2018 & hop$stjr == 1,]),
add = TRUE, pch = 21, cex = .7, bg = "red3", col = "white")
plot(st_geometry(hop[hop$year == 2018 & (hop$stjr == 2 |hop$stjr == 3),]),
add = TRUE, pch = 21, cex = .7, bg = "blue3", col = "white")
plot(st_geometry(border), col = "#b59a82", lwd = 1, add = TRUE)
dev.off()

cols <- c("#197230", "#5A9C50", "#B2D6A3", "lightgrey", "#FCE581",
"#FCC661", "#FCA842", "#FE8019", "#FD4A00", "#F80000")
# Tout hôpitaux
png(file = "fig/09_EVOL_ACCESS_ALL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Evolution du temps d'accès 2000-2018 à l'hôpital le plus proche")
choroLayer(x = com_dist, var = "DIST1_ALL_EVOL",
breaks = c(min(com_dist$DIST1_ALL_EVOL, na.rm = TRUE),
-10, -5, -1, 1, 5, 10, 20, 30,
max(com_dist$DIST1_ALL_EVOL, na.rm = TRUE)),
col = cols, border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route 2018 - 2000",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2000,]), add = TRUE, pch = 21, cex = .7,
bg = "red3", col = "white")
plot(st_geometry(hop[hop$year == 2018,]), add = TRUE, pch = 21, cex = .7,
bg = "green3", col = "white")
dev.off()
# Hôpitaux publics
png(file = "fig/10_EVOL_ACCESS_PUB.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Evolution du temps d'accès 2000-2018 à l'hôpital le plus proche (public)")
choroLayer(x = com_dist, var = "DIST1_PUB_EVOL",
breaks = c(min(com_dist$DIST1_PUB_EVOL, na.rm = TRUE),
-10, -5, -1, 1, 5, 10, 20, 30,
max(com_dist$DIST1_PUB_EVOL, na.rm = TRUE)),
col = cols, border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route 2018 - 2000",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2000 & hop$stjr == 1,]),
add = TRUE, pch = 21, cex = .7, bg = "red3", col = "white")
plot(st_geometry(hop[hop$year == 2018 & hop$stjr == 1,]),
add = TRUE, pch = 21, cex = .7, bg = "green3", col = "white")
dev.off()
# Hôpitaux privés
png(file = "fig/11_EVOL_ACCESS_PRIV.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Evolution du temps d'accès 2000-2018 à l'hôpital le plus proche (privé)")
choroLayer(x = com_dist, var = "DIST1_PRIV_EVOL",
breaks = c(min(com_dist$DIST1_PRIV_EVOL, na.rm = TRUE),
-10, -5, -1, 1, 5, 10, 20, 30,
max(com_dist$DIST1_PRIV_EVOL, na.rm = TRUE)),
col = cols, border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route 2018 - 2000",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
plot(st_geometry(hop[hop$year == 2000 & (hop$stjr == 2 |hop$stjr == 3),]),
add = TRUE, pch = 21, cex = .7, bg = "red3", col = "white")
plot(st_geometry(hop[hop$year == 2018 & (hop$stjr == 2 |hop$stjr == 3),]),
add = TRUE, pch = 21, cex = .7, bg = "green3", col = "white")
dev.off()


# En 2000 et 2018
png(file = "fig/12_HOP1_HOP2_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Différence de temps d'accès entre le premier et le second hôpital le plus proche (2018)")
choroLayer(x = com_dist, var = "D1_D2_ALL_2018",
method = "quantile", nclass = 5,
col = carto.pal(pal1 = "purple.pal" , n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Ecart d'accès (minutes par la route)\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/13_HOP1_HOP2_2000.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Différence de temps d'accès entre le premier et le second hôpital le plus proche (2000)")
choroLayer(x = com_dist, var = "D1_D2_ALL_2000",
method = "quantile", nclass = 5,
col = carto.pal(pal1 = "purple.pal" , n1 = 5), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Ecart d'accès (minutes par la route)\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
# Différence observée
cols <- c("#197230", "#5A9C50", "#B2D6A3", "lightgrey", "#FCE581",
"#FCC661", "#FCA842", "#FE8019", "#FD4A00", "#F80000")
png(file = "fig/14_HOP1_HOP2_DIFF.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Gain et perte de temps d'accès entre le premier et le second hôpital le plus proche (2000-2018)")
choroLayer(x = com_dist, var = "D1_D2_ALL_EVOL",
breaks = c(min(com_dist$D1_D2_ALL_EVOL, na.rm = TRUE),
-10, -5, -1, 1, 5, 10, 20, 30,
max(com_dist$D1_D2_ALL_EVOL, na.rm = TRUE)),
col = cols, border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Temps d'accès par la route 2018 - 2000",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()


Nous utilisons ici les indicateurs contenus dans les couches hop (à l’échelle de l’hôpital) et com_cap (lits et places disponibles en fonction des temps d’accès à l’échelle de la commune)
On applique la fonction f aux indicateurs capacités hospitalière.
La codification des indicateurs obéit à la logique suivante : - LIT/PLACE : Nombre de lits d’hospitalisation à temps complet et places d’hospitalisation à temps partiel. - 15MN/30MN/45MN/60MN : Places-lits disponibles à moins de 15mn, 30mn, 45mn et 60 mn en voiture (distance de chef-lieux à chef-lieux). - ALL-PUB-PRIV : Toute structure confondue, hôpitaux publics, hôpitaux privés. - 2000-2018 : année de référence.
L’unité de mesure est le lit / la place. Le résumé statistique porte sur les valeurs observées sur l’ensemble des communes de France métropolitaine, hors Corse.
df <- st_set_geometry(com_cap, NULL)
df <- com_cap[,c("LIT_ALL_2000", "LIT_PUB_2000", "LIT_PRIV_2000",
"LIT_15MN_ALL_2000", "LIT_15MN_PUB_2000", "LIT_15MN_PRIV_2000",
"LIT_30MN_ALL_2000", "LIT_30MN_PUB_2000", "LIT_30MN_PRIV_2000",
"LIT_45MN_ALL_2000", "LIT_45MN_PUB_2000", "LIT_45MN_PRIV_2000",
"LIT_60MN_ALL_2000", "LIT_60MN_PUB_2000", "LIT_60MN_PRIV_2000",
"PLACE_ALL_2000", "PLACE_PUB_2000", "PLACE_PRIV_2000",
"PLACE_15MN_ALL_2000", "PLACE_15MN_PUB_2000", "PLACE_15MN_PRIV_2000",
"PLACE_30MN_ALL_2000", "PLACE_30MN_PUB_2000", "PLACE_30MN_PRIV_2000",
"PLACE_45MN_ALL_2000", "PLACE_45MN_PUB_2000", "PLACE_45MN_PRIV_2000",
"PLACE_60MN_ALL_2000", "PLACE_60MN_PUB_2000", "PLACE_60MN_PRIV_2000"),
drop = T]
df <- t(sapply(df, f))
knitr::kable(df, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| LIT_ALL_2000 | 0 | 0 | 0 | 2.5 | 0.0 | 0 | 0.0 | 1642 |
| LIT_PUB_2000 | 0 | 0 | 0 | 1.2 | 0.0 | 0 | 0.0 | 940 |
| LIT_PRIV_2000 | 0 | 0 | 0 | 1.4 | 0.0 | 0 | 0.0 | 774 |
| LIT_15MN_ALL_2000 | 0 | 0 | 0 | 57.4 | 0.0 | 33 | 142.0 | 3172 |
| LIT_15MN_PUB_2000 | 0 | 0 | 0 | 26.5 | 0.0 | 0 | 75.0 | 1244 |
| LIT_15MN_PRIV_2000 | 0 | 0 | 0 | 30.9 | 0.0 | 0 | 79.0 | 2449 |
| LIT_30MN_ALL_2000 | 0 | 0 | 28 | 313.2 | 123.0 | 317 | 773.0 | 9667 |
| LIT_30MN_PUB_2000 | 0 | 0 | 0 | 144.1 | 63.0 | 141 | 390.3 | 3307 |
| LIT_30MN_PRIV_2000 | 0 | 0 | 0 | 169.1 | 58.0 | 176 | 419.0 | 6556 |
| LIT_45MN_ALL_2000 | 0 | 78 | 200 | 800.3 | 417.0 | 928 | 1596.0 | 12789 |
| LIT_45MN_PUB_2000 | 0 | 41 | 99 | 365.4 | 198.0 | 475 | 786.0 | 4465 |
| LIT_45MN_PRIV_2000 | 0 | 0 | 87 | 434.9 | 223.0 | 471 | 868.0 | 8367 |
| LIT_60MN_ALL_2000 | 0 | 261 | 510 | 1524.8 | 1016.5 | 1764 | 2741.0 | 13918 |
| LIT_60MN_PUB_2000 | 0 | 124 | 233 | 695.3 | 513.0 | 885 | 1310.0 | 5113 |
| LIT_60MN_PRIV_2000 | 0 | 117 | 259 | 829.5 | 520.0 | 909 | 1470.0 | 8914 |
| PLACE_ALL_2000 | 0 | 0 | 0 | 0.2 | 0.0 | 0 | 0.0 | 143 |
| PLACE_PUB_2000 | 0 | 0 | 0 | 0.0 | 0.0 | 0 | 0.0 | 20 |
| PLACE_PRIV_2000 | 0 | 0 | 0 | 0.2 | 0.0 | 0 | 0.0 | 123 |
| PLACE_15MN_ALL_2000 | 0 | 0 | 0 | 4.2 | 0.0 | 0 | 11.0 | 300 |
| PLACE_15MN_PUB_2000 | 0 | 0 | 0 | 0.6 | 0.0 | 0 | 2.0 | 37 |
| PLACE_15MN_PRIV_2000 | 0 | 0 | 0 | 3.5 | 0.0 | 0 | 9.0 | 284 |
| PLACE_30MN_ALL_2000 | 0 | 0 | 0 | 23.1 | 6.0 | 23 | 53.0 | 895 |
| PLACE_30MN_PUB_2000 | 0 | 0 | 0 | 3.5 | 0.0 | 4 | 10.0 | 103 |
| PLACE_30MN_PRIV_2000 | 0 | 0 | 0 | 19.6 | 5.0 | 19 | 44.0 | 798 |
| PLACE_45MN_ALL_2000 | 0 | 2 | 9 | 59.4 | 28.0 | 62 | 113.0 | 1226 |
| PLACE_45MN_PUB_2000 | 0 | 0 | 0 | 8.9 | 5.0 | 11 | 20.0 | 139 |
| PLACE_45MN_PRIV_2000 | 0 | 0 | 7 | 50.4 | 23.0 | 51 | 99.0 | 1096 |
| PLACE_60MN_ALL_2000 | 0 | 11 | 32 | 113.5 | 66.0 | 119 | 201.0 | 1335 |
| PLACE_60MN_PUB_2000 | 0 | 0 | 4 | 17.2 | 11.0 | 21 | 35.0 | 175 |
| PLACE_60MN_PRIV_2000 | 0 | 9 | 25 | 96.3 | 55.0 | 99 | 174.0 | 1160 |
df2 <- com_cap[,c("LIT_ALL_2018", "LIT_PUB_2018", "LIT_PRIV_2018",
"LIT_15MN_ALL_2018", "LIT_15MN_PUB_2018", "LIT_15MN_PRIV_2018",
"LIT_30MN_ALL_2018", "LIT_30MN_PUB_2018", "LIT_30MN_PRIV_2018",
"LIT_45MN_ALL_2018", "LIT_45MN_PUB_2018", "LIT_45MN_PRIV_2018",
"LIT_60MN_ALL_2018", "LIT_60MN_PUB_2018", "LIT_60MN_PRIV_2018",
"PLACE_ALL_2018", "PLACE_PUB_2018", "PLACE_PRIV_2018",
"PLACE_15MN_ALL_2018", "PLACE_15MN_PUB_2018", "PLACE_15MN_PRIV_2018",
"PLACE_30MN_ALL_2018", "PLACE_30MN_PUB_2018", "PLACE_30MN_PRIV_2018",
"PLACE_45MN_ALL_2018", "PLACE_45MN_PUB_2018", "PLACE_45MN_PRIV_2018",
"PLACE_60MN_ALL_2018", "PLACE_60MN_PUB_2018", "PLACE_60MN_PRIV_2018"),
drop = T]
df2 <- t(sapply(df2, f))
knitr::kable(df2, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| LIT_ALL_2018 | 0 | 0 | 0 | 1.7 | 0 | 0 | 0.0 | 3975 |
| LIT_PUB_2018 | 0 | 0 | 0 | 0.8 | 0 | 0 | 0.0 | 2089 |
| LIT_PRIV_2018 | 0 | 0 | 0 | 0.8 | 0 | 0 | 0.0 | 2089 |
| LIT_15MN_ALL_2018 | 0 | 0 | 0 | 35.5 | 0 | 0 | 93.0 | 5404 |
| LIT_15MN_PUB_2018 | 0 | 0 | 0 | 16.5 | 0 | 0 | 45.0 | 2895 |
| LIT_15MN_PRIV_2018 | 0 | 0 | 0 | 19.0 | 0 | 0 | 54.0 | 2836 |
| LIT_30MN_ALL_2018 | 0 | 0 | 0 | 209.9 | 60 | 190 | 520.0 | 8734 |
| LIT_30MN_PUB_2018 | 0 | 0 | 0 | 97.5 | 34 | 88 | 256.0 | 4081 |
| LIT_30MN_PRIV_2018 | 0 | 0 | 0 | 112.3 | 24 | 102 | 290.0 | 4770 |
| LIT_45MN_ALL_2018 | 0 | 26 | 99 | 546.4 | 241 | 595 | 1126.0 | 10152 |
| LIT_45MN_PUB_2018 | 0 | 8 | 51 | 253.4 | 114 | 293 | 513.0 | 4580 |
| LIT_45MN_PRIV_2018 | 0 | 0 | 36 | 293.1 | 126 | 322 | 607.3 | 5600 |
| LIT_60MN_ALL_2018 | 0 | 123 | 277 | 1051.2 | 631 | 1143 | 1940.0 | 10723 |
| LIT_60MN_PUB_2018 | 0 | 65 | 129 | 487.1 | 303 | 550 | 907.0 | 4850 |
| LIT_60MN_PRIV_2018 | 0 | 37 | 141 | 564.1 | 336 | 586 | 1169.0 | 5873 |
| PLACE_ALL_2018 | 0 | 0 | 0 | 0.5 | 0 | 0 | 0.0 | 910 |
| PLACE_PUB_2018 | 0 | 0 | 0 | 0.2 | 0 | 0 | 0.0 | 233 |
| PLACE_PRIV_2018 | 0 | 0 | 0 | 0.2 | 0 | 0 | 0.0 | 233 |
| PLACE_15MN_ALL_2018 | 0 | 0 | 0 | 11.0 | 0 | 0 | 32.0 | 1419 |
| PLACE_15MN_PUB_2018 | 0 | 0 | 0 | 3.3 | 0 | 0 | 11.0 | 334 |
| PLACE_15MN_PRIV_2018 | 0 | 0 | 0 | 7.7 | 0 | 0 | 24.0 | 1097 |
| PLACE_30MN_ALL_2018 | 0 | 0 | 0 | 63.1 | 20 | 63 | 144.3 | 2482 |
| PLACE_30MN_PUB_2018 | 0 | 0 | 0 | 18.1 | 9 | 21 | 43.0 | 543 |
| PLACE_30MN_PRIV_2018 | 0 | 0 | 0 | 45.1 | 10 | 42 | 106.0 | 1941 |
| PLACE_45MN_ALL_2018 | 0 | 8 | 33 | 163.5 | 82 | 175 | 307.0 | 3045 |
| PLACE_45MN_PUB_2018 | 0 | 4 | 12 | 46.3 | 28 | 55 | 86.0 | 665 |
| PLACE_45MN_PRIV_2018 | 0 | 0 | 17 | 117.2 | 53 | 121 | 230.0 | 2390 |
| PLACE_60MN_ALL_2018 | 0 | 39 | 90 | 314.1 | 186 | 322 | 601.0 | 3302 |
| PLACE_60MN_PUB_2018 | 0 | 15 | 30 | 88.7 | 61 | 98 | 158.0 | 753 |
| PLACE_60MN_PRIV_2018 | 0 | 20 | 55 | 225.4 | 122 | 225 | 462.0 | 2551 |
df3 <- df2 - df
row.names(df3) <- gsub("2018", "EVOL", row.names(df3))
knitr::kable(df3, digits = 1) | min | 10% | 25% | Moy | Med | 75% | 90% | Max | |
|---|---|---|---|---|---|---|---|---|
| LIT_ALL_EVOL | 0 | 0 | 0 | -0.8 | 0.0 | 0 | 0.0 | 2333 |
| LIT_PUB_EVOL | 0 | 0 | 0 | -0.4 | 0.0 | 0 | 0.0 | 1149 |
| LIT_PRIV_EVOL | 0 | 0 | 0 | -0.6 | 0.0 | 0 | 0.0 | 1315 |
| LIT_15MN_ALL_EVOL | 0 | 0 | 0 | -21.9 | 0.0 | -33 | -49.0 | 2232 |
| LIT_15MN_PUB_EVOL | 0 | 0 | 0 | -10.1 | 0.0 | 0 | -30.0 | 1651 |
| LIT_15MN_PRIV_EVOL | 0 | 0 | 0 | -11.9 | 0.0 | 0 | -25.0 | 387 |
| LIT_30MN_ALL_EVOL | 0 | 0 | -28 | -103.4 | -63.0 | -127 | -253.0 | -933 |
| LIT_30MN_PUB_EVOL | 0 | 0 | 0 | -46.6 | -29.0 | -53 | -134.3 | 774 |
| LIT_30MN_PRIV_EVOL | 0 | 0 | 0 | -56.8 | -34.0 | -74 | -129.0 | -1786 |
| LIT_45MN_ALL_EVOL | 0 | -52 | -101 | -253.8 | -176.0 | -333 | -470.0 | -2637 |
| LIT_45MN_PUB_EVOL | 0 | -33 | -48 | -112.0 | -84.0 | -182 | -273.0 | 115 |
| LIT_45MN_PRIV_EVOL | 0 | 0 | -51 | -141.8 | -97.0 | -149 | -260.7 | -2767 |
| LIT_60MN_ALL_EVOL | 0 | -138 | -233 | -473.6 | -385.5 | -621 | -801.0 | -3195 |
| LIT_60MN_PUB_EVOL | 0 | -59 | -104 | -208.3 | -210.0 | -335 | -403.0 | -263 |
| LIT_60MN_PRIV_EVOL | 0 | -80 | -118 | -265.4 | -184.0 | -323 | -301.0 | -3041 |
| PLACE_ALL_EVOL | 0 | 0 | 0 | 0.3 | 0.0 | 0 | 0.0 | 767 |
| PLACE_PUB_EVOL | 0 | 0 | 0 | 0.1 | 0.0 | 0 | 0.0 | 213 |
| PLACE_PRIV_EVOL | 0 | 0 | 0 | 0.0 | 0.0 | 0 | 0.0 | 110 |
| PLACE_15MN_ALL_EVOL | 0 | 0 | 0 | 6.8 | 0.0 | 0 | 21.0 | 1119 |
| PLACE_15MN_PUB_EVOL | 0 | 0 | 0 | 2.6 | 0.0 | 0 | 9.0 | 297 |
| PLACE_15MN_PRIV_EVOL | 0 | 0 | 0 | 4.2 | 0.0 | 0 | 15.0 | 813 |
| PLACE_30MN_ALL_EVOL | 0 | 0 | 0 | 40.0 | 14.0 | 40 | 91.3 | 1587 |
| PLACE_30MN_PUB_EVOL | 0 | 0 | 0 | 14.6 | 9.0 | 17 | 33.0 | 440 |
| PLACE_30MN_PRIV_EVOL | 0 | 0 | 0 | 25.4 | 5.0 | 23 | 62.0 | 1143 |
| PLACE_45MN_ALL_EVOL | 0 | 6 | 24 | 104.2 | 54.0 | 113 | 194.0 | 1819 |
| PLACE_45MN_PUB_EVOL | 0 | 4 | 12 | 37.4 | 23.0 | 44 | 66.0 | 526 |
| PLACE_45MN_PRIV_EVOL | 0 | 0 | 10 | 66.8 | 30.0 | 70 | 131.0 | 1294 |
| PLACE_60MN_ALL_EVOL | 0 | 28 | 58 | 200.5 | 120.0 | 203 | 400.0 | 1967 |
| PLACE_60MN_PUB_EVOL | 0 | 15 | 26 | 71.5 | 50.0 | 77 | 123.0 | 578 |
| PLACE_60MN_PRIV_EVOL | 0 | 11 | 30 | 129.1 | 67.0 | 126 | 288.0 | 1391 |
On considère ici l’ensemble du jeu de données afin d’évaluer l’évolution du nombre de structures, de lits et de places par région. Les régions sont ordonnées en fonction de l’évolution relative de ces indicateurs. Les régions représentées à gauche de ces graphiques en bâton sont celles qui ont relativement le plus perdu.
hop00 <- hop[hop$year == 2000,]
hop18 <- hop[hop$year == 2018,]
# Combine measures
df1 <- aggregate(data = hop00, fi ~ NOM_REG , length)
df2 <- aggregate(data = hop00, cbind(PLACE,LIT) ~ NOM_REG, sum)
df3 <- aggregate(data = hop18, fi ~ NOM_REG , length)
df4 <- aggregate(data = hop18, cbind(PLACE,LIT) ~ NOM_REG, sum)
df5 <- df1[1]
df5$CS <- c("0","0","1","1","0","0","0","0","0","0","1","0")
df <- Reduce(function(x, y) merge(x, y, by = "NOM_REG"), list(df1, df2, df3, df4, df5))
colnames(df) <- c("NOM_REG", "N_2000", "PLACE_2000", "LIT_2000", "N_2018", "PLACE_2018", "LIT_2018", "CS")
# Diff
df$N_REL <- df$N_2018 / df$N_2000 * 100
df$PLACE_REL <- df$PLACE_2018 / df$PLACE_2000 * 100
df$LIT_REL <- df$LIT_2018 / df$LIT_2000 * 100
# Plots
par(mar = c(7,4,2,4))
library(stringr)
svg("fig/01_REG_HOP.svg", width = 10, height = 8)
x <- barplot(t(as.matrix(df[, c("N_2000","N_2018")])),
beside = TRUE,
names.arg = str_wrap(df$NOM_REG, width = 15),
legend.text = c("2000", "2018"),
col = c("#4aa5fa","#0d4880"),
las = 2,
cex.names = 0.7,
cex.axis = 0.7,
border = NA,
xpd = FALSE,
ylim = c(0,200),
ylab = "Nombre d'établissements avec des lits en chirurgie")
dev.off()
svg("fig/02_REG_LIT.svg", width = 10, height = 8)
x <- barplot(t(as.matrix(df[, c("LIT_2000","LIT_2018")])),
beside = TRUE,
names.arg = str_wrap(df$NOM_REG, width = 15),
legend.text = c("2000", "2018"),
col = c("#4aa5fa","#0d4880"),
las = 2,
cex.names = 0.7,
cex.axis = 0.7,
border = NA,
xpd = FALSE,
ylim = c(0,11000),
ylab = "Nombre de lits")
dev.off()
svg("fig/03_REG_PLACE.svg", width = 10, height = 8)
x <- barplot(t(as.matrix(df[, c("PLACE_2000","PLACE_2018")])),
beside = TRUE,
names.arg = str_wrap(df$NOM_REG, width = 15),
legend.text = c("2000", "2018"),
col = c("#4aa5fa","#0d4880"),
las = 2,
cex.names = 0.7,
cex.axis = 0.7,
border = NA,
xpd = FALSE,
ylim = c(0,4000),
ylab = "Nombre de places à temps partiel")
dev.off()
Ces résumés statistiques présentent la situation des communes de chaque région.
df <- st_set_geometry(com_cap, NULL)
# En 2000
coln <- c("LIT_30MN_ALL_2000", "Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max")
regStats <- do.call(data.frame, aggregate(x = df[,c("LIT_30MN_ALL_2000")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
regStats2 <- data.frame(t(f(df[,c("LIT_30MN_ALL_2000")])))
regStats2$LIT_30MN_ALL_2000 <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "LIT_30MN_ALL_2000")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | LIT_30MN_ALL_2000 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0 | 0.0 | 16 | 240.4 | 119.0 | 267.0 | 664.0 | 1605 |
| BOURGOGNE-FRANCHE-COMTE | 0 | 0.0 | 0 | 168.3 | 71.0 | 213.0 | 567.0 | 1222 |
| BRETAGNE | 0 | 0.0 | 60 | 269.1 | 170.0 | 344.0 | 770.0 | 1161 |
| CENTRE-VAL DE LOIRE | 0 | 0.0 | 33 | 175.4 | 90.0 | 277.0 | 435.0 | 1316 |
| GRAND EST | 0 | 0.0 | 24 | 301.9 | 117.0 | 364.0 | 982.0 | 2029 |
| HAUTS-DE-FRANCE | 0 | 30.0 | 93 | 402.0 | 224.0 | 463.2 | 875.2 | 3092 |
| ILE-DE-FRANCE | 0 | 141.5 | 296 | 2071.6 | 852.5 | 3333.0 | 6200.0 | 9667 |
| NORMANDIE | 0 | 0.0 | 76 | 280.9 | 156.0 | 277.0 | 940.0 | 1412 |
| NOUVELLE-AQUITAINE | 0 | 0.0 | 0 | 183.7 | 84.0 | 243.0 | 384.0 | 2776 |
| OCCITANIE | 0 | 0.0 | 0 | 182.3 | 45.0 | 195.0 | 390.0 | 2308 |
| PAYS DE LA LOIRE | 0 | 0.0 | 52 | 274.0 | 99.0 | 287.0 | 807.0 | 1519 |
| PROVENCE-ALPES-COTE D’AZUR | 0 | 0.0 | 0 | 218.3 | 83.0 | 282.5 | 723.0 | 1774 |
| FRANCE | 0 | 0.0 | 28 | 313.2 | 123.0 | 317.0 | 773.0 | 9667 |
# En 2018
regStats <- do.call(data.frame, aggregate(x = df[,c("LIT_30MN_ALL_2018")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
colnames(regStats)[1] <- "LIT_30MN_ALL_2018"
regStats2 <- data.frame(t(f(df[,c("LIT_30MN_ALL_2018")])))
regStats2$LIT_30MN_ALL_2018 <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "LIT_30MN_ALL_2018")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | LIT_30MN_ALL_2018 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0 | 0 | 0 | 186.1 | 61 | 174.0 | 623.0 | 2200 |
| BOURGOGNE-FRANCHE-COMTE | 0 | 0 | 0 | 91.3 | 42 | 124.0 | 284.0 | 570 |
| BRETAGNE | 0 | 0 | 26 | 171.7 | 98 | 218.0 | 496.0 | 873 |
| CENTRE-VAL DE LOIRE | 0 | 0 | 0 | 101.7 | 44 | 153.0 | 211.0 | 757 |
| GRAND EST | 0 | 0 | 0 | 182.4 | 57 | 255.0 | 549.9 | 1456 |
| HAUTS-DE-FRANCE | 0 | 0 | 17 | 258.7 | 147 | 311.0 | 588.0 | 2048 |
| ILE-DE-FRANCE | 0 | 60 | 128 | 1496.4 | 423 | 1557.2 | 6699.5 | 8734 |
| NORMANDIE | 0 | 0 | 19 | 182.1 | 75 | 174.0 | 650.0 | 1079 |
| NOUVELLE-AQUITAINE | 0 | 0 | 0 | 112.8 | 26 | 148.0 | 284.0 | 1792 |
| OCCITANIE | 0 | 0 | 0 | 128.0 | 23 | 101.0 | 350.0 | 1723 |
| PAYS DE LA LOIRE | 0 | 0 | 20 | 174.9 | 63 | 223.0 | 501.8 | 1101 |
| PROVENCE-ALPES-COTE D’AZUR | 0 | 0 | 0 | 217.8 | 30 | 186.0 | 652.4 | 2665 |
| FRANCE | 0 | 0 | 0 | 209.9 | 60 | 190.0 | 520.0 | 8734 |
# En 2000
coln <- c("PLACE_30MN_ALL_2000", "Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max")
regStats <- do.call(data.frame, aggregate(x = df[,c("PLACE_30MN_ALL_2000")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
regStats2 <- data.frame(t(f(df[,c("PLACE_30MN_ALL_2000")])))
regStats2$PLACE_30MN_ALL_2000 <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "PLACE_30MN_ALL_2000")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | PLACE_30MN_ALL_2000 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0 | 0 | 0 | 16.1 | 5 | 23.0 | 49.0 | 116 |
| BOURGOGNE-FRANCHE-COMTE | 0 | 0 | 0 | 10.3 | 3 | 13.0 | 28.0 | 109 |
| BRETAGNE | 0 | 0 | 2 | 19.0 | 12 | 28.0 | 54.0 | 80 |
| CENTRE-VAL DE LOIRE | 0 | 0 | 0 | 12.6 | 6 | 17.0 | 28.0 | 89 |
| GRAND EST | 0 | 0 | 0 | 14.1 | 4 | 26.0 | 45.0 | 84 |
| HAUTS-DE-FRANCE | 0 | 0 | 5 | 29.1 | 16 | 35.0 | 70.3 | 251 |
| ILE-DE-FRANCE | 0 | 8 | 18 | 195.8 | 91 | 318.0 | 586.0 | 895 |
| NORMANDIE | 0 | 0 | 2 | 18.1 | 11 | 20.0 | 44.0 | 118 |
| NOUVELLE-AQUITAINE | 0 | 0 | 0 | 11.9 | 4 | 18.0 | 32.0 | 125 |
| OCCITANIE | 0 | 0 | 0 | 13.8 | 2 | 18.0 | 36.0 | 172 |
| PAYS DE LA LOIRE | 0 | 0 | 0 | 29.5 | 9 | 24.0 | 102.0 | 204 |
| PROVENCE-ALPES-COTE D’AZUR | 0 | 0 | 0 | 23.2 | 4 | 29.5 | 78.0 | 214 |
| FRANCE | 0 | 0 | 0 | 23.1 | 6 | 23.0 | 53.0 | 895 |
# En 2018
regStats <- do.call(data.frame, aggregate(x = df[,c("PLACE_30MN_ALL_2018")],
by = list(df$NOM_REG),
FUN = f))
colnames(regStats) <- coln
colnames(regStats)[1] <- "PLACE_30MN_ALL_2018"
regStats2 <- data.frame(t(f(df[,c("PLACE_30MN_ALL_2018")])))
regStats2$PLACE_30MN_ALL_2018 <- "FRANCE"
colnames(regStats2) <- c("Min", "10%", "25%", "Moy", "Med", "75%", "90%", "Max", "PLACE_30MN_ALL_2018")
regStats <- rbind(regStats, regStats2)
knitr::kable(regStats, digits = 1, row.names = FALSE) | PLACE_30MN_ALL_2018 | Min | 10% | 25% | Moy | Med | 75% | 90% | Max |
|---|---|---|---|---|---|---|---|---|
| AUVERGNE-RHONE-ALPES | 0 | 0 | 0 | 53.4 | 18.0 | 62.0 | 124.0 | 715 |
| BOURGOGNE-FRANCHE-COMTE | 0 | 0 | 0 | 28.3 | 10.0 | 44.0 | 87.0 | 204 |
| BRETAGNE | 0 | 0 | 5 | 54.2 | 33.0 | 84.0 | 133.0 | 243 |
| CENTRE-VAL DE LOIRE | 0 | 0 | 0 | 31.1 | 20.0 | 39.0 | 73.0 | 211 |
| GRAND EST | 0 | 0 | 0 | 43.5 | 15.0 | 71.0 | 148.0 | 269 |
| HAUTS-DE-FRANCE | 0 | 0 | 11 | 90.4 | 54.0 | 106.0 | 224.0 | 788 |
| ILE-DE-FRANCE | 0 | 29 | 57 | 465.0 | 180.5 | 549.2 | 1891.0 | 2482 |
| NORMANDIE | 0 | 0 | 12 | 54.1 | 30.0 | 53.0 | 172.0 | 292 |
| NOUVELLE-AQUITAINE | 0 | 0 | 0 | 33.7 | 8.0 | 45.0 | 86.0 | 541 |
| OCCITANIE | 0 | 0 | 0 | 34.6 | 10.0 | 37.0 | 89.0 | 421 |
| PAYS DE LA LOIRE | 0 | 0 | 5 | 58.8 | 23.0 | 82.0 | 160.0 | 385 |
| PROVENCE-ALPES-COTE D’AZUR | 0 | 0 | 0 | 72.6 | 16.0 | 70.0 | 233.0 | 857 |
| FRANCE | 0 | 0 | 0 | 63.1 | 20.0 | 63.0 | 144.3 | 2482 |
png(file = "fig/15_LIT15MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de lits accessibles dans un voisinage de 15 minutes, 2018")
choroLayer(x = com_cap, var = "LIT_15MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, 4096, max(com_cap$LIT_15MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 8), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Lits accessibles depuis le chef-lieu de chaque commune\nà moins de 15 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/16_LIT30MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de lits accessibles dans un voisinage de 30 minutes, 2018")
choroLayer(x = com_cap, var = "LIT_30MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, 4096, max(com_cap$LIT_30MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 8), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Lits accessibles depuis le chef-lieu de chaque commune\nà moins de 30 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/17_LIT45MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de lits accessibles dans un voisinage de 45 minutes, 2018")
choroLayer(x = com_cap, var = "LIT_45MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, 4096, max(com_cap$LIT_45MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 8), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Lits accessibles depuis le chef-lieu de chaque commune\nà moins de 45 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/18_LIT60MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de lits accessibles dans un voisinage de 60 minutes, 2018")
choroLayer(x = com_cap, var = "LIT_60MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, 4096, max(com_cap$LIT_60MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 8), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Lits accessibles depuis le chef-lieu de chaque commune\nà moins de 60 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()



# Calculs évolution (indice 100)
com_cap$LIT_15MN_ALL_EVOL <- com_cap$LIT_15MN_ALL_2018 / com_cap$LIT_15MN_ALL_2000 * 100
com_cap$LIT_30MN_ALL_EVOL <- com_cap$LIT_30MN_ALL_2018 / com_cap$LIT_30MN_ALL_2000 * 100
com_cap$LIT_45MN_ALL_EVOL <- com_cap$LIT_45MN_ALL_2018 / com_cap$LIT_45MN_ALL_2000 * 100
com_cap$LIT_60MN_ALL_EVOL <- com_cap$LIT_60MN_ALL_2018 / com_cap$LIT_60MN_ALL_2000 * 100
png(file = "fig/19_LIT15MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de lits disponibles (2000 = indice 100) dans un voisinage de 15 minutes")
choroLayer(x = com_cap, var = "LIT_15MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, max(com_cap$LIT_15MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 3), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de lits (2018) / Nombre de lits (2000) * 100\nVoisinage de 15mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/20_LIT30MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de lits disponibles (2000 = indice 100) dans un voisinage de 30 minutes")
choroLayer(x = com_cap, var = "LIT_30MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, max(com_cap$LIT_30MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 3), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de lits (2018) / Nombre de lits (2000) * 100\nVoisinage de 30mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/21_LIT45MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de lits disponibles (2000 = indice 100) dans un voisinage de 45 minutes")
choroLayer(x = com_cap, var = "LIT_45MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, max(com_cap$LIT_45MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 3), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de lits (2018) / Nombre de lits (2000) * 100\nVoisinage de 45mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/22_LIT60MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de lits disponibles (2000 = indice 100) dans un voisinage de 60 minutes")
choroLayer(x = com_cap, var = "LIT_60MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, max(com_cap$LIT_60MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 3), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de lits (2018) / Nombre de lits (2000) * 100\nVoisinage de 60mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()



png(file = "fig/23_PLACE15MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de places accessibles dans un voisinage de 15 minutes, 2018")
choroLayer(x = com_cap, var = "PLACE_15MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, max(com_cap$PLACE_15MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 7), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Places accessibles depuis le chef-lieu de chaque commune\nà moins de 15 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/24_PLACE30MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de places accessibles dans un voisinage de 30 minutes, 2018")
choroLayer(x = com_cap, var = "PLACE_30MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, max(com_cap$PLACE_30MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 7), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Places accessibles depuis le chef-lieu de chaque commune\nà moins de 30 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/25_PLACE45MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de places accessibles dans un voisinage de 45 minutes, 2018")
choroLayer(x = com_cap, var = "PLACE_45MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, max(com_cap$PLACE_45MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 7), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Places accessibles depuis le chef-lieu de chaque commune\nà moins de 45 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/26_PLACE60MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Nombre de places accessibles dans un voisinage de 60 minutes, 2018")
choroLayer(x = com_cap, var = "PLACE_60MN_ALL_2018",
breaks = c(0, 1, 4, 16, 64, 256, 1024, max(com_cap$PLACE_60MN_ALL_2018)),
col = carto.pal(pal1 = "sand.pal" , n1 = 7), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Places accessibles depuis le chef-lieu de chaque commune\nà moins de 60 minutes par la route\nQuantiles",
add = TRUE)
plot(st_geometry(border), col = "white", lwd = 1, add = TRUE)
dev.off()



# Calculs évolution (indice 100)
com_cap$PLACE_15MN_ALL_EVOL <- com_cap$PLACE_15MN_ALL_2018 / com_cap$PLACE_15MN_ALL_2000 * 100
com_cap$PLACE_30MN_ALL_EVOL <- com_cap$PLACE_30MN_ALL_2018 / com_cap$PLACE_30MN_ALL_2000 * 100
com_cap$PLACE_45MN_ALL_EVOL <- com_cap$PLACE_45MN_ALL_2018 / com_cap$PLACE_45MN_ALL_2000 * 100
com_cap$PLACE_60MN_ALL_EVOL <- com_cap$PLACE_60MN_ALL_2018 / com_cap$PLACE_60MN_ALL_2000 * 100
png(file = "fig/27_PLACE15MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de places disponibles (2000 = indice 100) dans un voisinage de 15 minutes")
choroLayer(x = com_cap, var = "PLACE_15MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, 400, max(com_cap$PLACE_15MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de places (2018) / Nombre de places (2000) * 100\nVoisinage de 15mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/28_PLACE30MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de places disponibles (2000 = indice 100) dans un voisinage de 30 minutes")
choroLayer(x = com_cap, var = "PLACE_30MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, 400, max(com_cap$PLACE_30MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de places (2018) / Nombre de places (2000) * 100\nVoisinage de 30mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/29_PLACE45MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de places disponibles (2000 = indice 100) dans un voisinage de 45 minutes")
choroLayer(x = com_cap, var = "PLACE_45MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, 400, max(com_cap$PLACE_45MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de places (2018) / Nombre de places (2000) * 100\nVoisinage de 45mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/30_PLACE60MN_EVOL.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Évolution 2000-2018 du nombre de places disponibles (2000 = indice 100) dans un voisinage de 60 minutes")
choroLayer(x = com_cap, var = "PLACE_60MN_ALL_EVOL",
breaks = c(0, 1, 50, 80, 100, 125, 200, 400, max(com_cap$PLACE_60MN_ALL_EVOL, na.rm = TRUE)),
col = carto.pal(pal1 = "orange.pal" , n1 = 4, pal2 = "green.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de places (2018) / Nombre de places (2000) * 100\nVoisinage de 60mn",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()



Nombre de lits d’hôpitaux supplémentaires accessibles à + 45 minutes.
# Calculs évolution (indice 100)
com_cap$LIT_1545MN_2018 <- com_cap$LIT_45MN_ALL_2018 - com_cap$LIT_15MN_ALL_2018
com_cap$PLACE_1545MN_2018 <- com_cap$PLACE_45MN_ALL_2018 - com_cap$PLACE_15MN_ALL_2018
png(file = "fig/31_LIT_4515MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Écart entre le nombre lits disponibles à 45 minutes en voiture et ceux disponibles à 15 minutes (2018)")
choroLayer(x = com_cap, var = "LIT_1545MN_2018",
method = "quantile", nclass = 8,
col = carto.pal(pal1 = "red.pal" , n1 = 4, pal2 = "blue.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de lits à 45 minutes - Nombre de lits à 15 minutes",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()
png(file = "fig/32_PLACE_4515MN_2018.png", width = sizes[1], height = sizes[2], res = 400)
layChir(title = "Écart entre le nombre places disponibles à 45 minutes en voiture et celles disponibles à 15 minutes (2018)")
choroLayer(x = com_cap, var = "PLACE_1545MN_2018",
method = "quantile", nclass = 8,
col = carto.pal(pal1 = "red.pal" , n1 = 4, pal2 = "blue.pal", n2 = 4), border = NA,
legend.pos = "topleft", legend.values.rnd = 0,
legend.title.txt = "Nombre de places à 45 minutes - Nombre de places à 15 minutes",
add = TRUE)
plot(st_geometry(border), col = "black", lwd = 1, add = TRUE)
dev.off()

Idée (à affiner) : 1 - Analyses de corrélations 2 à 2 pour voir les facteurs socio-éco qui introduisent des effets significatifs sur les temps d’accès et capa 1 - une typo pour caractériser les distances aux hôpitaux : introduire choix, évolution, distance en 2018 2 - Croiser avec indicateurs socio-éco (zonages = chi2, taux de chômage = analyse de variance
Voilà le truc nul qui avait été réalisé au début.
# Ce bout de code ne fonctionne plus avec la mise à jour des données...
# Pas mis à jour car pas d'intérêt majeur...
com$PERTE <- cut(com$T01_ALL_DIF,
breaks = c(min(com$T01_ALL_DIF),1,5,10,20,30,max(com$T01_ALL_DIF)),
labels = c("0-1 minute",
"1-5 minutes",
"5-10 minutes",
"10-20 minutes",
"20-30 minutes",
"30 minutes et plus"),
include.lowest = TRUE)
df <- aggregate(data = com, cbind(POP_TOT_16, POP_65_16, CHOM_16, DIP_A_16) ~ PERTE , sum)
tmp <- apply(df[,c(2:5)], 2, sum)
tmp$PERTE <- "TOTAL"
tmp <- as.data.frame(tmp)
df <- rbind(df, tmp)
df$POP_TOT_16_PERC <- df[,c("POP_TOT_16")] / df[7,"POP_TOT_16"] * 100
df$POP_65_16_PERC <- df[,c("POP_65_16")] / df[7,"POP_65_16"] * 100
df$CHOM_16_PERC <- df[,c("CHOM_16")] / df[7,"CHOM_16"] * 100
df$DIP_A_16_PERC <- df[,c("DIP_A_16")] / df[7,"DIP_A_16"] * 100
knitr::kable(df, row.names = F, digits = 1)Accessibilité aux soins de chirurgie