Plusieurs données sont importées.
Et tout d’abord plusieurs géométries : - geom2011 : Les
communes selon la géographie en vigueur au 1er janvier 2011. -
geom_new : L’ensemble des communes françaises, avec les
géométries au 1er janvier de l’année la plus récente choisie et
caractérisées par les données à la géométrie 2011 agrégées ainsi -
geomfus2011 : Les communes qui ont participé à la création
de communes nouvelles (appelées communes fusionnantes ou parfois
communes historiques). - geomCN_new : Les communes
nouvelles, avec les géométries au 1er janvier de l’année la plus récente
choisie et caractérisées par les données à la géométrie 2011 agrégées
ainsi. - dep : Les départements.
Les données sont ensuite importées depuis le fichier
refdata_budgets.Rdata, comportant les données de la base
DAC ainsi que les données budgétaires. Elles ont été mises en formes à
l’aide du script “CN_budgets_data_prep_2011-2022”
NB : Sauf mention contraire, les variables en valeur absolues faisant référence à un montant financier sont exprimées en milliers d’euros
# Import des géométries
geom2011 <- st_read("Archives/data_prep 2011-2022(01)/data/geom.gpkg", layer = "geom2011", quiet = TRUE)
geom_new <- st_read("Archives/data_prep 2011-2022(01)/data/geom.gpkg", layer = "geom_new", quiet = TRUE)
geomfus2011 <- st_read("Archives/data_prep 2011-2022(01)/data/geom.gpkg", layer = "geomfus2011", quiet = TRUE)
geomCN_new <- st_read("Archives/data_prep 2011-2022(01)/data/geom.gpkg", layer = "geomCN_new", quiet = TRUE)
dep <- st_read("Archives/data_prep 2011-2022(01)/data/geom.gpkg", layer = "dep", quiet = TRUE)
# Import des données
load("data/refdata_budgets_2011-2022.Rdata") # Pour charger les données des budgets adjointes à la base DAC
# On supprime une bonne partie des NA liées aux données des communes nouvelles en mentionnant NC (Non concerné)
df2011$ComDLG[is.na(df2011$ComDLG)] <- "NC"
df2011$FusDate[is.na(df2011$FusDate)] <- "NC"
df2011$FusPhas[is.na(df2011$FusPhas)] <- "NC"
df_new$ComDLG[is.na(df_new$ComDLG)] <- "NC"
df_new$FusDate[is.na(df_new$FusDate)] <- "NC"
df_new$FusPhas[is.na(df_new$FusPhas)] <- "NC"
Com_voisines <- read.table("sorties/Nombre de communes limitrophes fusionnantes.txt", sep="\t", colClasses = c("character", "numeric"), head = TRUE, stringsAsFactors = TRUE)
df2011 <- merge(df2011, Com_voisines, by = "CODGEO", all.x = TRUE)
df2011$Nbr_voisinage_Cfus[is.na(df2011$Nbr_voisinage_Cfus)] <- 0
# Si on veut intégrer l'idée de proximité des communes nouvelles
df2011$COM_NOUV_voisinage <- ifelse(df2011$COM_NOUV == "NON" & df2011$Nbr_voisinage_Cfus >= 1, "NON_mais_voisine", df2011$COM_NOUV)
table(df2011$COM_NOUV_voisinage)
##
## NON NON_mais_voisine OUI
## 28761 4911 2536
Création de deux fonctions permettant de supprimer des valeurs trop extrêmes.
# Création d'une fonction pour détecter les valeurs extrêmes (conseil relecteur RERU)
# Par valeur extrême, nous désignons les observations dont la valeur est supérieure à trois fois la plage interquartile au-dessus du troisième quartile ou inférieure de plus de trois fois la plage interquartile en-dessous du premier quartile.
# Alors, la fonction renvoi "vrai"
# Source : https://stacklima.com/comment-supprimer-les-valeurs-aberrantes-de-plusieurs-colonnes-dans-r-dataframe/
# NB : On a juste mis 3 fois la plage interquartile à la place de 1,5 fois
# create detect outlier function
detect_outlier <- function(x, y) {
# calculate first quantile
Quantile1 <- quantile(x, probs=.25, na.rm = TRUE)
# calculate third quantile
Quantile3 <- quantile(x, probs=.75, na.rm = TRUE)
# calculate inter quartile range
IQR = Quantile3-Quantile1
# return true or false
x > Quantile3 + (IQR*y) | x < Quantile1 - (IQR*y)
}
# NB : Pour visualiser la fonction toute seule
# detect_outlier(nom_data_frame[[nom_colonne]])
# detect_outlier(df_comparaison[['evol_prct']])
# Utilisation possible
# df_comparaison$evolprct[detect_outlier(df_comparaison$evolprct) == TRUE] <- NA
# On crée une fonction qui enlève les individus dont une valeur est extrême
# NB : PAS TESTÉE DEPUIS QUE LE NOMBRE D'ÉCART-TYPES (y) A ÉTÉ RAJOUTÉ
# Ne sera pas utilisée car pas utile dans la boucle
remove_outlier <- function(dataframe,
columns=names(dataframe), y) {
# for loop to traverse in columns vector
for (col in columns) {
# remove observation if it satisfies outlier function
dataframe <- dataframe[!detect_outlier(dataframe[[col]], y), ]
test_df_comparaison$evolprct <- dataframe[!detect_outlier(dataframe[[col]], y), ]
}
# return dataframe
print("Remove outliers")
print(dataframe)
}
datafus2011 <- subset(df2011, COM_NOUV == "OUI")# Désigne les données concernant les communes ayant participé à la création d'une commune nouvelle, appelées ici communes fusionnantes
dataCN_new <- subset(df_new, COM_NOUV == "OUI")
dataNfus2011 <- subset(df2011, COM_NOUV == "NON") # Les communes, à la géométrie 2011, qui n'ont pas participé à la création d'une commune nouvelle
testEdC <- subset (df2011, CODGEO_new == "61324" | CODGEO_new =="73150" | CODGEO_new == "73006")
testEdCSavoie <- subset (df2011, CODGEO_new =="73150" | CODGEO_new == "73006")
testNormandie <- subset (df2011, REG == "23" | REG == "25")
test49 <- subset (df2011, CODE_DEPT == "49" )
testOuest <- subset (df2011, REG == "23" | REG == "25"| REG == "53"| REG == "52") # Normandies, Bretagne, Pays-de-la-Loire
# On liste les variables qu'on veut comparer
# vartests <- c("prod", "charge", "res1", "recinv", "depinv", "res2", "dette", "annu")
# nomsvartests <- c("Total des produits de fonctionnement (A)",
# "Total des charges de fonctionnement (B)",
# "Résultat comptable (A-B = R)",
# "Total des ressources d'investissement (C)",
# "Total des emplois d'investissement (D)",
# "Résultat d'ensemble (R-E)",
# "Encours total de la dette au 31 décembre N",
# "Annuité de la dette")
# Premières variables étudiées (cf. les résultats dans le Markdown archivé CN_budgets_analyse_Serveur_date)
# vartests <- c("dgf", "charge", "perso", "subv", "equip", "remb", "dette", "annu", "bth", "bfb", "pth", "pfb")
# # Si on veut définir nous-mêmes les noms
# nomsvartests <- c("Dotation globale de fonctionnement", "Total des charges de fonctionnement", "Fonctionnement : charges de personnel", "Fonctionnement : subventions versées", "Investissement : dépenses d'équipement", "Remboursement d'emprunts et dettes", "Encours total de la dette au 31 décembre N", "Annuité de la dette", "Base de taxe d'habitation (y compris THLV),", "Base de taxe foncière sur les propriétés bâties", "Produit de la taxe d'habitation (y compris THLV)", "Produit de la taxe foncière sur les propriétés bâties")
# Variables axées sur la péréquation (objectif communiquation ASRDLF 2022)
# vartests_brutes <- c("dgf", "fctva", "DSU_tot", "DSR_bourg_centre_global", "DSR_cible_global", "DNP_tot", "DSR_pereq_global", "charge", "perso", "subv", "depinv", "equip", "dette", "annu")
# Variables budgétaires et un peu de péréquation (exploration décembre 2022)
vartests_brutes <- c("dgf", "charge", "perso", "subv", "depinv", "equip", "remb", "dette", "annu", "bth", "bfb", "pth", "pfb", "DSR_cible_global", "DSR_pereq_global")
# Variables uniquement budgétaires (exploration janvier 2023)
vartests_brutes <- c("dgf", "achat", "charge", "perso", "subv", "depinv", "equip", "remb", "dette", "annu", "bth", "bfb", "pth", "pfb", "DNP_tot", "DSR_pereq_global")
# On liste ces mêmes variables mais rapportées au nombre d'habitant. Attention, ne fonctionne que pour les variables budgétaires (pas pour les critères de répartition)
vartests_hab <- paste0("f", vartests_brutes)
vartests_hab <- paste0("f", c("dgf", "achat", "charge", "perso", "subv", "depinv", "equip", "remb", "dette", "annu", "bth", "bfb", "pth", "pfb"))
# On choisit finalement de sélectionner les variables mais mises en pourcentage des dépenses totales (cf. les variables créées plus haut)
vartests <- paste0(vartests_brutes, "_prct")
Brouillon de quelques tests pour vérifier les données.
On liste ici le nombre de variables manquantes par colonne
# Démarche détaillée pour df2011
# Liste les lignes et colonnes où il y a une valeur NA
# which(is.na(df2011), arr.ind = TRUE)
valeursNA <- which(is.na(df2011), arr.ind = TRUE)
# Nombre de valeurs NA par colonnes
colonnesNA <- as.data.frame(table(valeursNA[,2]))
# On modifie le format du numéro de colonnes
colonnesNA$Var1 <- as.numeric(as.character(colonnesNA$Var1))
# On remplace le numéro de colonne par l'identifiant de la variable
colonnesNA$Var1 <- colnames(df2011[,colonnesNA$Var1])
# Pour lisibilité du tableau
colnames(colonnesNA) <- c("Nom de la variable", "Nombre de valeurs manquantes")
kable(colonnesNA, caption = "Nombre de valeurs NA par colonnes dans df2011")
| Nom de la variable | Nombre de valeurs manquantes |
|---|---|
| C09_ACT1564_Agr | 3 |
| C09_ACT1564_ArtCom | 3 |
| C09_ACT1564_Cadr | 3 |
| C09_ACT1564_ProfInt | 3 |
| C09_ACT1564_Empl | 3 |
| C09_ACT1564_Ouvr | 3 |
| C09_ACTOCC_IN | 55 |
| C09_ACTOCC_OUT | 55 |
| C09_ACTOCC | 55 |
| P11_FoyFisc | 104 |
| P11_Rev_Fisc | 104 |
| P11_IMP_NET | 129 |
| P11_FoyFisc_Imp | 961 |
| P09_CHOM1564_RT | 8 |
| P09_ETUD1564_RT | 8 |
| P09_RETR1564_RT | 7 |
| C09_ACT1564_Agr_RT | 11 |
| C09_ACT1564_ArtCom_RT | 11 |
| C09_ACT1564_Cadr_RT | 11 |
| C09_ACT1564_ProfInt_RT | 11 |
| C09_ACT1564_Empl_RT | 11 |
| C09_ACT1564_Ouvr_RT | 11 |
| C09_EMPLT_AGRI_RT | 37 |
| C09_EMPLT_INDUS_RT | 37 |
| C09_EMPLT_CONST_RT | 37 |
| C09_EMPLT_CTS_RT | 34 |
| C09_EMPLT_APESAS_RT | 37 |
| P09_POP0014Y_RT | 6 |
| P09_POP1529Y_RT | 6 |
| P09_POP3044Y_RT | 6 |
| P09_POP4559Y_RT | 6 |
| P09_POP6074Y_RT | 6 |
| P09_POP75PY_RT | 6 |
| C09_ACTOCC_IN_RT | 55 |
| C09_ACTOCC_OUT_RT | 55 |
| C09_EMP_CONC_RT | 55 |
| P11_Rev_Fisc_RT | 104 |
| P11_IMP_NET_RT | 129 |
| P11_FoyFisc_Imp_RT | 961 |
| fimpo2 | 1 |
| fperso | 2 |
| fsubv | 1 |
| frecinv | 2 |
| ffctva | 4 |
| fdepinv | 2 |
| fequip | 3 |
| fremb | 6 |
| fdette | 6 |
| fannu | 6 |
| fbth | 6 |
| fbfb | 5 |
| fpth | 6 |
| fpfb | 5 |
| prod_prct | 1 |
| impo1_prct | 1 |
| impo2_prct | 1 |
| dgf_prct | 1 |
| charge_prct | 1 |
| perso_prct | 1 |
| achat_prct | 1 |
| subv_prct | 1 |
| res1_prct | 1 |
| recinv_prct | 1 |
| fctva_prct | 1 |
| depinv_prct | 1 |
| equip_prct | 1 |
| remb_prct | 1 |
| res2_prct | 1 |
| dette_prct | 1 |
| annu_prct | 1 |
| fdr_prct | 1 |
| DSU_tot_prct | 1 |
| DNP_princip_prct | 1 |
| DNP_sortie_prct | 1 |
| DNP_major_prct | 1 |
| DNP_tot_prct | 1 |
| DSR_cible_global_prct | 1 |
# Même démarche pour df_new
valeursNA <- which(is.na(df_new), arr.ind = TRUE)
colonnesNA <- as.data.frame(table(valeursNA[,2]))
colonnesNA$Var1 <- as.numeric(as.character(colonnesNA$Var1))
colonnesNA$Var1 <- colnames(df_new[,colonnesNA$Var1])
colnames(colonnesNA) <- c("Nom de la variable", "Nombre de valeurs manquantes")
kable(colonnesNA, caption = "Nombre de valeurs NA par colonnes dans df_new")
| Nom de la variable | Nombre de valeurs manquantes |
|---|---|
| C09_ACT1564_Agr | 3 |
| C09_ACT1564_ArtCom | 3 |
| C09_ACT1564_Cadr | 3 |
| C09_ACT1564_ProfInt | 3 |
| C09_ACT1564_Empl | 3 |
| C09_ACT1564_Ouvr | 3 |
| C09_ACTOCC_IN | 55 |
| C09_ACTOCC_OUT | 55 |
| C09_ACTOCC | 55 |
| P11_FoyFisc | 104 |
| P11_Rev_Fisc | 104 |
| P11_IMP_NET | 129 |
| P11_FoyFisc_Imp | 955 |
| FusDate_ChefLieu | 33672 |
| FusPhas_ChefLieu | 33672 |
| NbrComFus | 33672 |
| P09_CHOM1564_RT | 8 |
| P09_ETUD1564_RT | 8 |
| P09_RETR1564_RT | 7 |
| C09_ACT1564_Agr_RT | 11 |
| C09_ACT1564_ArtCom_RT | 11 |
| C09_ACT1564_Cadr_RT | 11 |
| C09_ACT1564_ProfInt_RT | 11 |
| C09_ACT1564_Empl_RT | 11 |
| C09_ACT1564_Ouvr_RT | 11 |
| C09_EMPLT_AGRI_RT | 36 |
| C09_EMPLT_INDUS_RT | 36 |
| C09_EMPLT_CONST_RT | 36 |
| C09_EMPLT_CTS_RT | 33 |
| C09_EMPLT_APESAS_RT | 36 |
| P09_POP0014Y_RT | 6 |
| P09_POP1529Y_RT | 6 |
| P09_POP3044Y_RT | 6 |
| P09_POP4559Y_RT | 6 |
| P09_POP6074Y_RT | 6 |
| P09_POP75PY_RT | 6 |
| C09_ACTOCC_IN_RT | 55 |
| C09_ACTOCC_OUT_RT | 55 |
| C09_EMP_CONC_RT | 55 |
| P11_Rev_Fisc_RT | 104 |
| P11_IMP_NET_RT | 129 |
| P11_FoyFisc_Imp_RT | 955 |
| ChefLieu | 33672 |
| fimpo2 | 1 |
| fperso | 2 |
| fsubv | 1 |
| frecinv | 2 |
| ffctva | 4 |
| fdepinv | 2 |
| fequip | 3 |
| fremb | 6 |
| fdette | 6 |
| fannu | 6 |
| fbth | 6 |
| fbfb | 5 |
| fpth | 6 |
| fpfb | 5 |
| pop_legale_budgets_2022 | 1 |
| nomsst1_2022 | 1 |
| nomsst2_2022 | 1 |
| prod_2022 | 1 |
| impo1_2022 | 1 |
| impo2_2022 | 1 |
| dgf_2022 | 1 |
| charge_2022 | 1 |
| perso_2022 | 1 |
| achat_2022 | 1 |
| subv_2022 | 1 |
| res1_2022 | 1 |
| recinv_2022 | 1 |
| fctva_2022 | 1 |
| depinv_2022 | 1 |
| equip_2022 | 1 |
| remb_2022 | 1 |
| res2_2022 | 1 |
| dette_2022 | 1 |
| annu_2022 | 1 |
| fdr_2022 | 1 |
| bth_2022 | 1 |
| bfb_2022 | 1 |
| bfnb_2022 | 1 |
| pth_2022 | 1 |
| pfb_2022 | 1 |
| pfnb_2022 | 1 |
| tth_2022 | 1 |
| fprod_2022 | 1 |
| fimpo1_2022 | 1 |
| fimpo2_2022 | 1 |
| fdgf_2022 | 1 |
| fcharge_2022 | 1 |
| fperso_2022 | 2 |
| fachat_2022 | 1 |
| fsubv_2022 | 3 |
| fres1_2022 | 1 |
| frecinv_2022 | 5 |
| ffctva_2022 | 7 |
| fdepinv_2022 | 5 |
| fequip_2022 | 5 |
| fremb_2022 | 7 |
| fres2_2022 | 1 |
| fdette_2022 | 7 |
| fannu_2022 | 7 |
| ffdr_2022 | 1 |
| fbth_2022 | 7 |
| fbfb_2022 | 5 |
| fbfnb_2022 | 1 |
| fpth_2022 | 7 |
| fpfb_2022 | 5 |
| strateCN_2022 | 1 |
| densite_2022 | 1 |
| depenses_tot_2022 | 1 |
| prod_prct | 1 |
| prod_prct_2022 | 1 |
| impo1_prct | 1 |
| impo1_prct_2022 | 1 |
| impo2_prct | 1 |
| impo2_prct_2022 | 1 |
| dgf_prct | 1 |
| dgf_prct_2022 | 1 |
| charge_prct | 1 |
| charge_prct_2022 | 1 |
| perso_prct | 1 |
| perso_prct_2022 | 1 |
| achat_prct | 1 |
| achat_prct_2022 | 1 |
| subv_prct | 1 |
| subv_prct_2022 | 1 |
| res1_prct | 1 |
| res1_prct_2022 | 1 |
| recinv_prct | 1 |
| recinv_prct_2022 | 1 |
| fctva_prct | 1 |
| fctva_prct_2022 | 1 |
| depinv_prct | 1 |
| depinv_prct_2022 | 1 |
| equip_prct | 1 |
| equip_prct_2022 | 1 |
| remb_prct | 1 |
| remb_prct_2022 | 1 |
| res2_prct | 1 |
| res2_prct_2022 | 1 |
| dette_prct | 1 |
| dette_prct_2022 | 1 |
| annu_prct | 1 |
| annu_prct_2022 | 1 |
| fdr_prct | 1 |
| fdr_prct_2022 | 1 |
| bth_prct_2022 | 1 |
| bfb_prct_2022 | 1 |
| bfnb_prct_2022 | 1 |
| pth_prct_2022 | 1 |
| pfb_prct_2022 | 1 |
| pfnb_prct_2022 | 1 |
| tth_prct_2022 | 1 |
| DSU_tot_prct | 1 |
| DNP_princip_prct | 1 |
| DNP_sortie_prct | 1 |
| DNP_major_prct | 1 |
| DNP_tot_prct | 1 |
| DSR_cible_global_prct | 1 |
| Consolid_CN17_18_19_PerimN_prct_2022 | 1 |
| NonBaisseCN_prct_2022 | 1 |
| DSU_tot_prct_2022 | 1 |
| DNP_princip_prct_2022 | 1 |
| DNP_major_prct_2022 | 1 |
| DNP_tot_prct_2022 | 1 |
| DSR_cible_refCN_prct_2022 | 1 |
| DSR_cible_global_prct_2022 | 1 |
rm(valeursNA, colonnesNA)
Conclusion : Le nombre de valeurs manquantes est limité et statistiquement négligeable.
# Si on veut sélectionner les variables numériques concernant les budgets
# variables_budgets <- target$recoding[which(target$SOURCE == "toutes tables budgets" & target$type_variable == "stock")]
# Pour sélectionner certaines variables spécifiquement
variables_budgets <- c("fctva_prct", "dgf_prct", "DSU_tot_prct", "DNP_tot_prct", "DSR_pereq_global_prct")
variables_budgets <- c("fctva", "dgf", "DSU_tot", "DNP_tot", "DSR_pereq_global")
variables_budgets <- vartests
# On sélectionne les variables de pourcentages concernant les budgets
# variables_budgets <- colnames(datafus2011[which(str_detect(colnames(datafus2011), "_prct") == TRUE)])
# Ou, pour sélectionner directement les colonnes dans le dataframe
# tmp <- datafus2011[which(str_detect(colnames(datafus2011), "_prct") == TRUE)]
# Juste pour les communes fusionnées
tmp <- na.omit(datafus2011 [, variables_budgets])
tmp2 <- cor(tmp, method = "pearson")
res1 <- cor.mtest(tmp, conf.level = .99)
col <- c("#a50026","#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695")
# NB : autre fonction "corrplot" dans package arm, donc si difficultés, utiliser le code suivant :
# detach("package:arm", unload = TRUE)
corrplot(tmp2, p.mat = res1$p, sig.level = .2, order = "hclust",
tl.cex = 0.8, tl.col = "black")
corrplot(tmp2, method="color", order = "hclust", # cl.lim = c(-1,1), # cl.lim pose problème donc supprimé
col = col,
tl.col = rgb(0,0,0),
number.cex = 0.4,
addCoef.col = rgb(0,0,0, alpha =0.6),
addgrid.col = "white",
title = "Analyse des corrélations",
tl.cex=0.8,
cl.cex = 0.6,
mar=c(0,0,4,0))
# corrplot (tmp2, p.mat = p_mat)
# Communes n'ayant pas fusionné
tmpnfus <- na.omit(dataNfus2011[, variables_budgets])
tmp2nfus <- cor(tmpnfus, method = "pearson")
res1 <- cor.mtest(tmpnfus, method = "pearson")
corrplot(tmp2nfus, p.mat = res1$p, sig.level = .2, order = "hclust",
tl.cex = 0.8, tl.col = "black")
col <- c("#a50026","#d73027","#f46d43","#fdae61","#fee090","#e0f3f8","#abd9e9","#74add1","#4575b4","#313695")
corrplot(tmp2nfus, method="color", order = "hclust", # cl.lim = c(-1,1), # cl.lim pose problème donc supprimé
col = col,
tl.col = rgb(0,0,0),
number.cex = 0.4,
addCoef.col = rgb(0,0,0, alpha =0.6),
addgrid.col = "white",
title = "Analyse des corrélations",
tl.cex=0.8,
cl.cex = 0.6,
mar=c(0,0,4,0))
# Autre manière de voir les corrélations, mais pas adaptée ici, cf. https://rzine.fr/docs/20200526_glecampion_initiation_aux_correlations/index.html
# library(correlation)
# library(see)
# library(ggraph)
# cor <- correlation (tmp)
# plot(cor)
# À noter par exemple que les DSU et DSR ne sont pas dissociées que cela. Puisque 118 communes perçoivent les deux en 2011
# test <- subset (df2011, df2011$DSU_tot > 0 & df2011$DSR_pereq_global > 0)
# test <- test[, c("LIBGEO", "DSU_tot", "DSR_pereq_global")]
rm(tmp, tmp2, res1, col, variables_budgets, tmp2nfus, tmpnfus)
On observe, sans surprise, que les variables budgétaires sont fréquemment corrélées entre elles.
Trois types de population légale existent :
Population municipale : population, sans double compte, des personnes résidant habituellement dans une commune.
Population comptée à part : « certaines personnes dont la résidence habituelle est dans une autre commune mais qui gardent un lien de résidence avec la commune. Elle comprend, par exemple, les élèves ou étudiants majeurs qui logent pour leurs études dans une autre commune mais dont la résidence familiale est située sur le territoire de la commune ou les personnes résidant dans une maison de retraite située dans une autre commune mais qui ont conservé une résidence familiale sur le territoire de la commune. » (https://www.insee.fr/fr/information/2553979).
Population totale : population municipale et population comptée à part.
La population utilisée pour le calcul de la DGF est basée sur la population totale mais en y ajoutant les logements occasionnels :
résidences secondaires pour lesquelles il est estimé qu’elles sont « en moyenne occupées par 2 personnes pendant 6 mois de l’année » (https://www.cnis.fr/wp-content/uploads/2018/01/DC_2010_populations_legales_calcul_DGF.pdf) ;
les emplacements pour places de caravanes dans les aires d’accueil des gens du voyage. Donc « Il ne s’agit pas d’une population effectivement recensée mais d’un nombre (exprimé en « habitants ») qui sert de base au calcul de la dotation. La « population DGF 2009 » était supérieure d’environ 5 millions à la population municipale (respectivement 68 968 367 « habitants » et 63 600 690 habitants).
Qu’en est-il dans notre base de données ?
colnames(df2011)
## [1] "CODGEO" "LIBGEO" "CODE_DEPT"
## [4] "CATAEU2010" "REG" "ARR"
## [7] "CV" "UU2010" "AU2010"
## [10] "ZE2010" "EPCI" "P09_ACT1564"
## [13] "P09_CHOM1564" "P09_ETUD1564" "P09_RETR1564"
## [16] "C09_ACT1564_Agr" "C09_ACT1564_ArtCom" "C09_ACT1564_Cadr"
## [19] "C09_ACT1564_ProfInt" "C09_ACT1564_Empl" "C09_ACT1564_Ouvr"
## [22] "P09_EMPLT" "C09_EMPLT_AGRI" "C09_EMPLT_INDUS"
## [25] "C09_EMPLT_CONST" "C09_EMPLT_CTS" "C09_EMPLT_APESAS"
## [28] "P09_ACTOCC" "P09_POP" "P09_POP0014"
## [31] "P09_POP1529" "P09_POP3044" "P09_POP4559"
## [34] "P09_POP6074" "P09_POP75P" "C09_ACTOCC_IN"
## [37] "C09_ACTOCC_OUT" "C09_ACTOCC" "P11_POT_FIN"
## [40] "P11_DGF" "P11_FoyFisc" "P11_Rev_Fisc"
## [43] "P11_IMP_NET" "P11_FoyFisc_Imp" "superficie"
## [46] "ZAU_POL" "ZAU_RUR" "ZAU_MAR_SP"
## [49] "ZAU_MAR" "ZAU_PERI" "ZAU_AU"
## [52] "FUSION" "ChefLieu" "ComDLG"
## [55] "FusDate" "FusPhas" "COM_NOUV"
## [58] "CODGEO_new" "LIBGEO_new" "P09_CHOM1564_RT"
## [61] "P09_ETUD1564_RT" "P09_RETR1564_RT" "C09_ACT1564_Agr_RT"
## [64] "C09_ACT1564_ArtCom_RT" "C09_ACT1564_Cadr_RT" "C09_ACT1564_ProfInt_RT"
## [67] "C09_ACT1564_Empl_RT" "C09_ACT1564_Ouvr_RT" "C09_EMPLT_AGRI_RT"
## [70] "C09_EMPLT_INDUS_RT" "C09_EMPLT_CONST_RT" "C09_EMPLT_CTS_RT"
## [73] "C09_EMPLT_APESAS_RT" "P09_POP0014Y_RT" "P09_POP1529Y_RT"
## [76] "P09_POP3044Y_RT" "P09_POP4559Y_RT" "P09_POP6074Y_RT"
## [79] "P09_POP75PY_RT" "C09_ACTOCC_IN_RT" "C09_ACTOCC_OUT_RT"
## [82] "C09_EMP_CONC_RT" "P11_POT_FIN_RT" "P11_DGF_RT"
## [85] "P11_Rev_Fisc_RT" "P11_IMP_NET_RT" "P11_FoyFisc_Imp_RT"
## [88] "pop_legale_budgets" "nomsst1" "nomsst2"
## [91] "prod" "impo1" "impo2"
## [94] "dgf" "charge" "perso"
## [97] "achat" "subv" "res1"
## [100] "recinv"
## [ reached getOption("max.print") -- omitted 95 entries ]
summary(df2011$Pop_INSEE)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 197 432 1747 1060 2233818
summary(df2011$Pop_DGF)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 221 470 1832 1123 2314749
summary(df2011$pop_legale_budgets)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 0 197 432 1746 1060 2233818
df2011$diff_pop <- df2011$Pop_DGF - df2011$Pop_INSEE
quantile(df2011$diff_pop, probs = seq(0, 1, 0.05))
## 0% 5% 10% 15% 20% 25% 30% 35% 40% 45% 50% 55% 60%
## 0 1 3 4 6 7 9 11 13 16 19 23 27
## 65% 70% 75% 80% 85% 90% 95% 100%
## 32 39 48 60 78 107 186 80931
tapply(df2011$diff_pop, INDEX = df2011$COM_NOUV, quantile)
## $NON
## 0% 25% 50% 75% 100%
## 0 7 19 48 80931
##
## $OUI
## 0% 25% 50% 75% 100%
## 0 10 22 46 11488
# Pour avoir un graphique
p <- ggplot(data = df2011, aes(x = Pop_INSEE, y = diff_pop, colour = COM_NOUV, shape = COM_NOUV)) +
# On trace la ligne
geom_point() +
# Changer le titre de l'axe des abscisses
xlab("Population INSEE") +
# Changer le titre de l'axe des ordonnees
ylab("Différence Pop_DGF - Pop_INSEE") +
# Ajouter un titre
ggtitle("Différence des calculs de population selon le statut des communes\nPopDGF-PopINSEE") +
# Changer le titre de la legende et les couleurs
scale_colour_manual(name = "CN", values = c("#00BA38", "#619CFF")) +
# On doit egalement changer le nom pour les formes
scale_shape_discrete(name = "CN") +
scale_x_continuous(trans = 'log10') + # Échelle logarithmique
scale_y_continuous(trans = 'log10') + # Échelle logarithmique
geom_smooth()
print (p + facet_wrap(~ COM_NOUV)) # Présentation en vignettes
## Warning in scale_x_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## Warning in scale_y_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## Warning in scale_x_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## Warning in scale_y_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## Warning: Removed 887 rows containing non-finite outside the scale range
## (`stat_smooth()`).
# En pourcentage de la population INSEE
df2011$diff_pop_prct <- 100 * (df2011$Pop_DGF - df2011$Pop_INSEE)/df2011$Pop_INSEE
quantile(df2011$diff_pop_prct, probs = seq(0, 1, 0.05), na.rm = TRUE)
## 0% 5% 10% 15% 20% 25%
## 0.0000000 0.1858140 0.4385965 0.7133346 1.0094578 1.3629449
## 30% 35% 40% 45% 50% 55%
## 1.7647059 2.2375120 2.7896883 3.4151690 4.1666667 5.0359712
## 60% 65% 70% 75% 80% 85%
## 6.1137212 7.3868689 8.9788249 11.1111111 14.1304348 18.5915418
## 90% 95% 100%
## 25.7668712 42.6458534 1185.2941176
tapply(df2011$diff_pop_prct, INDEX = df2011$COM_NOUV, quantile, na.rm = TRUE)
## $NON
## 0% 25% 50% 75% 100%
## 0.000000 1.319960 4.098361 11.011619 1158.823529
##
## $OUI
## 0% 25% 50% 75% 100%
## 0.000000 1.918566 5.055254 12.500000 1185.294118
# Pour avoir un graphique
p <- ggplot(data = df2011, aes(x = Pop_INSEE, y = diff_pop_prct, colour = COM_NOUV, shape = COM_NOUV)) +
# On trace la ligne
geom_point() +
# Changer le titre de l'axe des abscisses
xlab("Population INSEE") +
# Changer le titre de l'axe des ordonnees
ylab("Différence Pop_DGF - Pop_INSEE") +
# Ajouter un titre
ggtitle("Différence des calculs de population selon le statut des communes\n(PopDGF-PopINSEE)/PopINSEE") +
# Changer le titre de la legende et les couleurs
scale_colour_manual(name = "CN", values = c("#00BA38", "#619CFF")) +
# On doit egalement changer le nom pour les formes
scale_shape_discrete(name = "CN") +
scale_x_continuous(trans = 'log10') + # Échelle logarithmique
scale_y_continuous(trans = 'log10') + # Échelle logarithmique
geom_smooth()
print (p + facet_wrap(~ COM_NOUV)) # Présentation en vignettes
## Warning in scale_x_continuous(trans = "log10"): log-10 transformation introduced infinite values.
## log-10 transformation introduced infinite values.
## Warning in scale_x_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## Warning in scale_y_continuous(trans = "log10"): log-10 transformation
## introduced infinite values.
## `geom_smooth()` using method = 'gam' and formula = 'y ~ s(x, bs = "cs")'
## Warning: Removed 887 rows containing non-finite outside the scale range
## (`stat_smooth()`).
## Warning: Removed 6 rows containing missing values or values outside the scale range
## (`geom_point()`).
rm(p)
On n’observe pas de différence sensible entre les communes nouvelles et les autres du point de vue de cette différence. En revanche il y a une différence parfois très importante entre la population DGF et la population INSEE.
Pour les communes de plus de 3500 habitants, une comptabilité fonctionnelle existe, mais elle ne représente qu’un nombre trop restreint des communes fusionnantes pour que son analyse puisse être représentative.
# Évaluation du nombre de communes fusionnantes ayant une population inférieure à 3500 habitants
summary(datafus2011$P09_POP)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 7.0 200.0 408.5 967.0 933.2 52403.0
table(datafus2011$P09_POP < 3500)
##
## FALSE TRUE
## 108 2428
100*sum(datafus2011$P09_POP < 3500)/nrow(datafus2011)
## [1] 95.74132
summary(dataCN_new$P09_POP)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 77 882 1633 3116 3402 116578
table(dataCN_new$P09_POP < 3500)
##
## FALSE TRUE
## 192 595
100*sum(dataCN_new$P09_POP < 3500)/nrow(dataCN_new)
## [1] 75.60356
L’objectif est, ici, d’observer pour un certain nombre de variables (qu’on sélectionne au début), les différences qui peuvent exister d’une part entre les communes fusionnantes et les non fusionnantes pour différentes variables dans les budgets 2011.
Certaines strates sont parfois retirées de l’analyse statistiques, car elles ne permettaient pas une comparaison statistiquement significative du fait de faibles effectif. Les strates concernées comportent les communes nouvelles dont la population est comprise entre 20 000 et 50 000 habitants (seulement sept communes : Beaupréau-en-Mauges, Chemillé-en-Anjou, Sèvremoine, Le Chesnay-Rocquencourt, Saint-Germain-en-Laye, Montaigu-Vendée et Les Sables-d’Olonne) et celles appartenant aux strates supérieures à 50 000 habitants (trois communes nouvelles seulement : Évry-Courcouronnes, Cherbourg-en-Cotentin et Annecy).
valeursstrateCN <- levels(df2011$strateCN)
# Création du df pour les résultats
comparaisons_budgets <- data.frame()
# Si besoin de test hors boucle
# i <- "dgf_prct"
for (i in vartests) {
# Pour pouvoir utiliser le nom désigné plus haut pour la variable
# num_variable <- which(vartests == i) # Pour obtenir la position de i dans vartests
# nom_variable <- nomsvartests[num_variable] # Pour obtenir le nom correspondant
# Pour obtenir la description officielle de la variable
num_variable <- which(target$recoding == substr(i, start = 1, stop = nchar(i)-5))[1] # On rajoute un [1] car pour les critères de contribution le nom peut se trouver à plusieurs endroits, ce qui perturbe beaucoup de choses
nom_variable <- target[num_variable, "DESCRIPTION"]
# Pour chaque variable on observe les moyenne et médiane des strates croisées avec la fusion, puis pour l'ensemble des communes françaises.
moy_i <- round(tapply(df2011[,i], df2011$strateCN, mean, na.rm = TRUE),3)
moyFr <- round(mean(df2011[,i], na.rm = TRUE),3)
med_i <- round(tapply(df2011[,i], df2011$strateCN, median, na.rm = TRUE), 3)
medFr <- round(median(df2011[,i], na.rm = TRUE), 3)
resultats <- c(i, nom_variable, moy_i, moyFr, med_i, medFr)
comparaisons_budgets <- rbind (comparaisons_budgets, resultats, stringsAsFactors = FALSE)
}
rm (i, moy_i, moyFr, med_i, medFr, num_variable, nom_variable, resultats)
colnames(comparaisons_budgets) <- c("Variable", "Description", paste0("Moyenne ", valeursstrateCN), "Moyenne française", paste0("Médiane ", valeursstrateCN), "Médiane française")
kable(comparaisons_budgets)
| Variable | Description | Moyenne communes de moins de 250 hab_NON | Moyenne communes de moins de 250 hab_OUI | Moyenne communes de 250 à 500 hab_NON | Moyenne communes de 250 à 500 hab_OUI | Moyenne communes de 500 à 2 000 hab_NON | Moyenne communes de 500 à 2 000 hab_OUI | Moyenne communes de 2 000 à 3 500 hab_NON | Moyenne communes de 2 000 à 3 500 hab_OUI | Moyenne communes de 3 500 à 5 000 hab_NON | Moyenne communes de 3 500 à 5 000 hab_OUI | Moyenne communes de 5 000 à 10 000 hab_NON | Moyenne communes de 5 000 à 10 000 hab_OUI | Moyenne communes de 10 000 à 20 000 hab_NON | Moyenne communes de 10 000 à 20 000 hab_OUI | Moyenne communes de 20 000 à 50 000 hab_NON | Moyenne communes de 20 000 à 50 000 hab_OUI | Moyenne communes de 50 000 à 100 000 hab_NON | Moyenne communes de 50 000 à 100 000 hab_OUI | Moyenne communes de plus de 100 000 hab_NON | Moyenne française | Médiane communes de moins de 250 hab_NON | Médiane communes de moins de 250 hab_OUI | Médiane communes de 250 à 500 hab_NON | Médiane communes de 250 à 500 hab_OUI | Médiane communes de 500 à 2 000 hab_NON | Médiane communes de 500 à 2 000 hab_OUI | Médiane communes de 2 000 à 3 500 hab_NON | Médiane communes de 2 000 à 3 500 hab_OUI | Médiane communes de 3 500 à 5 000 hab_NON | Médiane communes de 3 500 à 5 000 hab_OUI | Médiane communes de 5 000 à 10 000 hab_NON | Médiane communes de 5 000 à 10 000 hab_OUI | Médiane communes de 10 000 à 20 000 hab_NON | Médiane communes de 10 000 à 20 000 hab_OUI | Médiane communes de 20 000 à 50 000 hab_NON | Médiane communes de 20 000 à 50 000 hab_OUI | Médiane communes de 50 000 à 100 000 hab_NON | Médiane communes de 50 000 à 100 000 hab_OUI | Médiane communes de plus de 100 000 hab_NON | Médiane française |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| dgf_prct | Produits de fonctionnement : Dotation globale de fonctionnement | 25.234 | 27.821 | 23.691 | 26.068 | 21.636 | 23.448 | 19.123 | 20.2 | 17.117 | 18.697 | 16.053 | 16.49 | 15.976 | 17.385 | 16.605 | 16.432 | 15.625 | 14.897 | 15.714 | 22.838 | 23.599 | 26.027 | 22.561 | 24.849 | 20.791 | 22.797 | 18.46 | 20.017 | 16.391 | 17.426 | 15.096 | 16.993 | 15.212 | 14.334 | 15.648 | 14.833 | 15.221 | 14.897 | 15.005 | 21.359 |
| achat_prct | Charges de fonctionnement : Achats et charges externes | 20.866 | 20.021 | 19.849 | 19.672 | 19.501 | 18.504 | 19.365 | 18.48 | 18.603 | 17.311 | 18.086 | 16.781 | 16.986 | 15.381 | 16.687 | 18.432 | 14.965 | 19.217 | 14.07 | 19.821 | 19.705 | 18.668 | 19.104 | 18.791 | 19.13 | 18.368 | 18.957 | 18.244 | 18.395 | 17.032 | 17.642 | 16.29 | 16.581 | 15.223 | 16.137 | 18.908 | 14.171 | 19.217 | 13.311 | 18.998 |
| charge_prct | Total des charges de fonctionnement (B) | 63.635 | 65.95 | 64.06 | 65.435 | 63.648 | 63.738 | 64.36 | 62.828 | 67.773 | 63.759 | 69.491 | 66.688 | 71.962 | 66.957 | 73.228 | 73.257 | 70.502 | 71.401 | 70.482 | 64.325 | 65.606 | 68.18 | 66.08 | 68.275 | 65.393 | 65.192 | 65.322 | 62.826 | 69.31 | 65.317 | 70.434 | 67.775 | 72.595 | 65.877 | 73.598 | 73.609 | 69.97 | 71.401 | 70.148 | 66.337 |
| perso_prct | Charges de fonctionnement : Charges de personnel | 16.077 | 17.047 | 21.164 | 20.232 | 25.188 | 24.082 | 29.085 | 26.646 | 31.419 | 27.753 | 34.078 | 30.35 | 37.439 | 34.708 | 39.322 | 37.656 | 37.335 | 40.53 | 35.753 | 22.285 | 14.663 | 15.696 | 20.457 | 19.595 | 25.05 | 24.11 | 29.039 | 26.708 | 31.249 | 28.226 | 34.082 | 30.884 | 37.134 | 35.497 | 38.907 | 37.738 | 38.043 | 40.53 | 36.26 | 21.85 |
| subv_prct | Charges de fonctionnement : Subventions versées | 2.303 | 2.74 | 2.388 | 3.043 | 2.717 | 3.327 | 3.597 | 4.532 | 4.088 | 5.04 | 4.952 | 5.578 | 5.763 | 5.167 | 6.358 | 5.81 | 7.241 | 4.394 | 9.232 | 2.792 | 1.179 | 1.427 | 1.357 | 1.561 | 1.748 | 2.02 | 2.748 | 3.611 | 3.439 | 4.174 | 4.25 | 4.73 | 5.308 | 4.761 | 5.867 | 3.924 | 6.313 | 4.394 | 8.436 | 1.678 |
| depinv_prct | Total des emplois d’investissements (D) | 36.365 | 34.05 | 35.94 | 34.565 | 36.352 | 36.262 | 35.64 | 37.172 | 32.227 | 36.241 | 30.509 | 33.312 | 28.038 | 33.043 | 26.772 | 26.743 | 29.498 | 28.599 | 29.518 | 35.675 | 34.394 | 31.82 | 33.92 | 31.725 | 34.607 | 34.808 | 34.678 | 37.174 | 30.69 | 34.683 | 29.566 | 32.225 | 27.405 | 34.123 | 26.402 | 26.391 | 30.03 | 28.599 | 29.852 | 33.663 |
| equip_prct | Emplois d’investissement : Dépenses d’équipement | 29.71 | 27.103 | 28.741 | 27.3 | 28.591 | 27.367 | 27.781 | 28.008 | 24.079 | 25.906 | 22.671 | 23.369 | 19.647 | 21.459 | 17.8 | 18.419 | 19.328 | 20.068 | 17.183 | 28.303 | 26.725 | 23.505 | 25.613 | 24.303 | 26.233 | 25.578 | 26.453 | 28.154 | 22.459 | 24.381 | 21.7 | 22.041 | 19.049 | 19.22 | 17.685 | 17.317 | 18.053 | 20.068 | 17.126 | 25.433 |
| remb_prct | Emplois d’investissement : Remboursement d’emprunts et dettes assimilées | 5.105 | 5.245 | 5.792 | 5.743 | 6.159 | 6.506 | 5.994 | 6.764 | 5.708 | 7.155 | 5.555 | 6.471 | 5.195 | 5.264 | 5.444 | 6.863 | 5.713 | 3.463 | 5.638 | 5.695 | 3.503 | 3.723 | 4.389 | 4.616 | 5.031 | 5.366 | 5.34 | 5.808 | 5.128 | 5.685 | 5.164 | 6.26 | 4.905 | 5.126 | 5.037 | 5.042 | 5.601 | 3.463 | 5.711 | 4.572 |
| dette_prct | Encours total de la dette au 31 décembre N | 41.214 | 42.263 | 49.023 | 52.497 | 59.372 | 61.949 | 64.497 | 66.208 | 62.456 | 64.019 | 62.004 | 70.017 | 56.601 | 60.275 | 58.382 | 49.71 | 65.821 | 43.681 | 56.624 | 51.806 | 27.38 | 32.944 | 39.675 | 43.822 | 52.445 | 55.587 | 60.707 | 59.65 | 59.595 | 61.564 | 60.563 | 66.091 | 54.406 | 54.04 | 59.035 | 46.78 | 62.987 | 43.681 | 51.538 | 44.305 |
| annu_prct | Annuité de la dette | 6.645 | 6.807 | 7.65 | 7.717 | 8.429 | 8.861 | 8.453 | 9.167 | 8.033 | 9.398 | 7.859 | 9.063 | 7.206 | 7.299 | 7.462 | 8.326 | 7.783 | 4.923 | 7.348 | 7.65 | 4.721 | 5.089 | 6.051 | 6.31 | 7.268 | 7.661 | 7.908 | 8.216 | 7.586 | 8.276 | 7.548 | 8.706 | 6.971 | 7.183 | 7.178 | 6.485 | 7.77 | 4.923 | 7.683 | 6.424 |
| bth_prct | Base de Taxe d’habitation (y compris THLV) | 98.577 | 116.867 | 113.056 | 118.39 | 111.734 | 101.967 | 105.316 | 88.515 | 97.779 | 76.463 | Inf | 74.297 | 80.982 | 77.074 | 76.992 | 115.598 | 69.68 | 73.999 | 71.199 | Inf | 88.772 | 101.449 | 104.027 | 109.844 | 102.958 | 94.856 | 97.16 | 84.948 | 88.079 | 68.081 | 83.227 | 76.305 | 76.286 | 71.368 | 70.124 | 112.255 | 63.092 | 73.999 | 66.372 | 96.726 |
| bfb_prct | Base de Taxe foncière sur les propriétés bâties | 69.081 | 93.31 | 79.169 | 87.954 | 84.688 | 79.353 | 87.661 | 81.1 | 82.932 | 73.178 | Inf | 74.345 | 74.656 | 70.161 | 73.734 | 97.196 | 71.071 | 74.709 | 72.9 | Inf | 60.84 | 69.812 | 72.05 | 75.394 | 75.786 | 72.735 | 79.913 | 75.335 | 78.412 | 69.16 | 75.213 | 69.93 | 71.925 | 65.138 | 69.775 | 91.303 | 61.401 | 74.709 | 67.748 | 70.989 |
| pth_prct | Produit de Taxe d’habitation (y compris THLV) | 11.408 | 11.365 | 13.59 | 12.629 | 14.282 | 13.16 | 14.567 | 12.374 | 14.377 | 11.758 | Inf | 11.364 | 13.35 | 12.289 | 14.525 | 18.025 | 12.875 | 12.752 | 13.981 | Inf | 9.863 | 10.211 | 12.415 | 11.926 | 13.221 | 12.602 | 13.944 | 12.012 | 13.561 | 10.995 | 12.771 | 11.176 | 12.434 | 12.425 | 13.752 | 15.391 | 12.403 | 12.752 | 13.586 | 12.099 |
| pfb_prct | Produit de Taxe foncière sur les propriétés bâties | 7.01 | 11.07 | 9.584 | 11.628 | 12.161 | 12.459 | 14.847 | 14.379 | 15.145 | 13.706 | Inf | 14.112 | 16.3 | 15.121 | 16.739 | 11.583 | 14.939 | 14.005 | 16.257 | Inf | 5.888 | 6.821 | 8.616 | 9.531 | 11.154 | 11.275 | 13.929 | 13.205 | 14.49 | 12.579 | 15.658 | 14.571 | 15.985 | 14.363 | 16.171 | 11.574 | 14.864 | 14.005 | 15.101 | 9.441 |
| DNP_tot_prct | Dotation nationale de péréquation - DNP totale | 1.454 | 1.611 | 1.797 | 2.236 | 1.812 | 2.079 | 1.515 | 1.285 | 1.19 | 0.999 | 1.053 | 0.768 | 0.733 | 0.953 | 0.629 | 0.209 | 0.561 | 0 | 0.442 | 1.625 | 0.371 | 0.188 | 1.126 | 1.469 | 1.3 | 1.475 | 1.016 | 0.791 | 0.721 | 0.187 | 0.609 | 0 | 0.31 | 0.584 | 0.347 | 0 | 0.331 | 0 | 0.341 | 0.9 |
| DSR_pereq_global_prct | Dotation de solidarité rurale - Péréquation - Montant global réparti (après garantie CN) | 2.975 | 3.444 | 2.66 | 3.025 | 1.946 | 2.089 | 1.232 | 1.254 | 0.953 | 0.972 | Inf | 0.785 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | Inf | 2.721 | 3.14 | 2.483 | 2.825 | 1.844 | 2.019 | 1.186 | 1.185 | 0.941 | 0.821 | 0.763 | 0.724 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 2.07 |
On observe une faible différence, pour les budgets 2011, entre les communes ayant fusionné et les autres.
# SÉLECTION DES DONNÉES
# On enlève les communes dont la population légale est supérieure à la commune nouvelle la plus peuplée
df_temp <- subset(df2011, df2011$P09_POP <= max(dataCN_new$P09_POP))
# df_temp <- df2011
# Si on veut uniquement les communes qui touchent une commune fusionnante
# df_temp <- subset(df2011, df2011$P09_POP <= max(dataCN_new$P09_POP) & df2011$Nbr_voisinage_Cfus >= 1 )
# SÉLECTION DES VARIABLES DE CATÉGORISATION
# Si on reste sur COM_NOUV OUI/NON
labels_COM_NOUV <- c("Communes non fusionnantes", "Communes fusionnantes")
# couleurs <- c("darkblue", "red4")
couleurs <- c("#2b83ba", "red4")
# Si on a gardé toutes les non-voisines et qu'on veut différencier les graphiques
df_temp$COM_NOUV <- df_temp$COM_NOUV_voisinage
labels_COM_NOUV <- c("Communes non fusionnantes", "Communes non fusionnantes\nmais voisines de communes\nfusionnantes", "Communes fusionnantes")
# "Communes non fusionnantes" seulement signifie communes non fusionnantes ne touchant pas de commune fusionnante
# couleurs <- c("darkblue", "lightblue", "red4")
couleurs <- c("#2b83ba", "#fdae61", "red4")
# Création du df pour les résultats
variables_testees <- data.frame()
# Si besoin de test hors boucle
i <- vartests[1] # DGF
i <- vartests[4] # Charges de personnel
i <- vartests[7] # Dépenses d'équipement
i <- vartests[9] # Dette
for (i in vartests) {
# Pour obtenir la description officielle de la variable
# num_variable <- which(target$recoding == i)
# nom_variable <- target[num_variable, "DESCRIPTION"]
# # Si on veut utiliser les noms modifiés
# num_variable <- which(vartests == i) # Pour obtenir la position de i dans vartests
# nom_variable <- nomsvartests[num_variable] # Pour obtenir le nom correspondant
# Pour obtenir le nom de la variable concernée dans le cas des variables en pourcentage
num_variable <- which(target$recoding == substr(i, start = 1, stop = nchar(i)-5))[1]
nom_variable <- paste0(target[num_variable, "DESCRIPTION"], "\nen pourcentage du total des dépenses")
nom_variable_court <- paste0(target[num_variable, "DESCRIPTION"], "en pourcentage du total des dépenses")
# On sélectionne ici, pour les communes à la géométrie la plus récente, les valeurs constituées par l'agrégation des variables à la date de 2011.
df_graph <- df_temp[, c(i, "COM_NOUV", "pop_legale_budgets", "densite")]
# Réalisation d'un graphique avec les deux types de communes en une seule fois
graph <- ggplot(df_graph, aes(x = densite)) +
geom_point(aes(y = df_graph[, i], color = COM_NOUV, shape = COM_NOUV)) +
geom_smooth(formula = y ~ x,
aes(y = df_graph[, i],
color = COM_NOUV), method = loess, se = TRUE) + # method = lm pour une ligne de régression, "loess" pour une régression locale(beaucoup plus longue), donnent des résultats très différents ; se = intervale de confiance (TRUE/FALSE)
scale_color_manual(values=couleurs,name = "Communes", labels = labels_COM_NOUV) +
scale_shape_manual(values = c(15, 16, 17), name = "Communes", labels = labels_COM_NOUV) +
xlab("Densité (hab/km², 2011)") +
ylab(nom_variable) +
theme(legend.position = "right") +
ggtitle(paste0("Variable étudiée :\n", nom_variable))
# print (graph)
# Pour repérer les valeurs extrêmes, en se basant sur les quartiles et l'intervalle inter-quartile
upper.limit <- quantile(df_graph[, i], na.rm = TRUE)[4] + 2*IQR(df_graph[, i], na.rm = TRUE)
# lower.limit <- quantile(df_graph[, i], na.rm = TRUE)[2] - 2*IQR(df_graph[, i], na.rm = TRUE)
print(graph + scale_x_continuous(trans = 'log10') # Échelle des abscisses en log de 10
+ coord_cartesian(ylim=c(0, upper.limit)) # Suppression des valeurs extrêmes
+ facet_wrap(~ COM_NOUV)) # Présentation en vignettes
# Réalisation du boxplot
# On enlève les valeurs infinies
df_temp[, i][which(df_temp[, i] == Inf)] <- NA
df_temp[, i][which(df_temp[, i] == -Inf)] <- NA
boxplot <- ggplot(df_temp, aes(x = COM_NOUV, y = df_temp[, i], color = COM_NOUV)) +
geom_boxplot(varwidth = TRUE) +
scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
scale_x_discrete(labels = labels_COM_NOUV) +
# ggtitle(paste0("Comparaison :\n", nom_variable))+
theme(axis.text.x = element_text(angle = 45, hjust = 1)) +
# ggtitle(paste0("Pourcentage du total des dépenses en 2011 :\n", nom_variable)) +
ylab(paste0(nom_variable, " en 2011")) +
# xlab("La commmune est une commune fusionnante") +
xlab(" ") +
guides(color = "none")
print (boxplot)
tapply(df_temp[,i], INDEX = df_temp$COM_NOUV_voisinage, mean, na.rm = TRUE)
tapply(df_temp[,i], INDEX = df_temp$COM_NOUV_voisinage, median, na.rm = TRUE)
# Possibilité de vérifier la fiabilité des données avec le test de Kruskal-Wallis
## https://www.datanovia.com/en/fr/lessons/test-de-kruskal-wallis-dans-r/
res.kruskal <- df_temp %>% kruskal_test(df_temp[, i] ~ COM_NOUV)
print(as.data.frame(res.kruskal))
boxplot <- ggplot(df_temp, aes(x = CATAEU2010, y = df_temp[, i], color = COM_NOUV)) +
geom_boxplot(varwidth = FALSE) +
scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
ylab(paste0("Pourcentage du total des dépenses en 2011")) +
xlab("Code ZAU") +
ggtitle(paste0("Pourcentage du total des dépenses en 2011 :\n", nom_variable))
print (boxplot)
res.kruskal2 <- df_temp %>% kruskal_test(df_temp[, i] ~ CATAEU2010)
print(as.data.frame(res.kruskal2))
# On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
upper.limit <- quantile(df_temp[, i], na.rm = TRUE)[4] + 4*IQR(df_temp[, i], na.rm = TRUE)
lower.limit <- quantile(df_temp[, i], na.rm = TRUE)[2] - 4*IQR(df_temp[, i], na.rm = TRUE)
# print (boxplot + coord_cartesian(ylim=c(lower.limit, upper.limit)))
# Réalisation d'un graphique par strates
# On enlève les strates les plus élevées pour simplifier le graphique
df_temp2 <- subset(df_temp, df_temp$nomsst1 != "communes de plus de 100 000 hab" &
df_temp$nomsst1 != "communes de 50 000 à 100 000 hab" &
df_temp$nomsst1 != "communes de 20 000 à 50 000 hab")
# On modifie éventuellement le graphique pour le rendre plus lisible si valeurs extrêmes
upper.limit <- quantile(df_temp2[, i], na.rm = TRUE)[4] + 4*IQR(df_temp2[, i], na.rm = TRUE)
lower.limit <- quantile(df_temp2[, i], na.rm = TRUE)[2] - 4*IQR(df_temp2[, i], na.rm = TRUE)
boxplot <- ggplot(df_temp2, aes(x = nomsst1, y = df_temp2[, i], fill = COM_NOUV, color = COM_NOUV)) +
geom_boxplot(width = 1.5, varwidth = TRUE) +
scale_color_manual(values=couleurs , labels = labels_COM_NOUV) +
scale_fill_manual(values = c("white", "white", "white"), labels = labels_COM_NOUV) +
labs(fill = " ", color = " ") +
ylab(paste0("Pourcentage du total des dépenses en 2011")) +
xlab("Strate démographique") +
ggtitle(paste0("Pourcentage du total des dépenses en 2011 :\n", nom_variable))+
# coord_cartesian(ylim=c(lower.limit, upper.limit)) +
theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 10), legend.position = "right")
print (boxplot)
res.kruskal3 <- df_temp2 %>% kruskal_test(df_temp2[, i] ~ COM_NOUV)
print(as.data.frame(res.kruskal3))
# On peut avoir les valeurs des moyennes en utilisant la fonction tapply
moys <- round(tapply(df_temp[, i], df_temp$FUSION, mean, na.rm = TRUE), 2)
print(paste("\n\nMOYENNES POUR LA VARIABLE", nom_variable, "\n"))
print(moys)
meds <- round(tapply(df_temp[, i], df_temp$FUSION, median, na.rm = TRUE), 2)
print(paste("MÉDIANES POUR LA VARIABLE", nom_variable, "\n"))
print(meds)
sd <- round(tapply(df_temp[, i], df_temp$FUSION, sd, na.rm = TRUE), 2)
print(paste("ÉCART-TYPE POUR LA VARIABLE", nom_variable, "\n"))
print(sd)
resultats <- c(i, nom_variable_court, moys, meds, sd, res.kruskal$p)
variables_testees <- rbind (variables_testees, resultats, stringsAsFactors = FALSE)
}
.y. n statistic df p method 1 df_temp[, i] 36178 153.3737 2 4.96e-34
Kruskal-Wallis
.y. n statistic df p method 1 df_temp[, i] 36178 2120.829 8 0
Kruskal-Wallis
.y. n statistic df p method 1 df_temp2[, i] 35781 145.0536 2 3.18e-32
Kruskal-Wallis [1] “POUR LA VARIABLE Produits de fonctionnement :
Dotation globale de fonctionnementpourcentage du total des dépenses ”
NON OUI 22.68 25.02 [1] “MÉDIANES POUR LA VARIABLE Produits de
fonctionnement : Dotation globale de fonctionnementpourcentage du total
des dépenses ” NON OUI 21.21 23.43 [1] “ÉCART-TYPE POUR LA VARIABLE
Produits de fonctionnement : Dotation globale de
fonctionnementpourcentage du total des dépenses ” NON OUI 11.03 11.93
.y. n statistic df p method 1 df_temp[, i] 36178 61.09472 2 5.41e-14
Kruskal-Wallis
.y. n statistic df p method 1 df_temp[, i] 36178 144.8086 8 2.37e-27
Kruskal-Wallis
.y. n statistic df p method 1 df_temp2[, i] 35781 64.9716 2 7.79e-15
Kruskal-Wallis [1] “POUR LA VARIABLE Charges de fonctionnement : Achats
et charges externespourcentage du total des dépenses ” NON OUI 19.87
19.20 [1] “MÉDIANES POUR LA VARIABLE Charges de fonctionnement : Achats
et charges externespourcentage du total des dépenses ” NON OUI 19.05
18.38 [1] “ÉCART-TYPE POUR LA VARIABLE Charges de fonctionnement :
Achats et charges externespourcentage du total des dépenses ” NON OUI
7.72 7.75
.y. n statistic df p method 1 df_temp[, i] 36178 14.92225 2 0.000575
Kruskal-Wallis
.y. n statistic df p method 1 df_temp[, i] 36178 169.3624 8 1.75e-32
Kruskal-Wallis
.y. n statistic df p method 1 df_temp2[, i] 35781 13.52242 2 0.00116
Kruskal-Wallis [1] “POUR LA VARIABLE Total des charges de fonctionnement
(B)pourcentage du total des dépenses ” NON OUI 64.28 64.89 [1] “MÉDIANES
POUR LA VARIABLE Total des charges de fonctionnement (B)pourcentage du
total des dépenses ” NON OUI 66.32 66.46 [1] “ÉCART-TYPE POUR LA
VARIABLE Total des charges de fonctionnement (B)pourcentage du total des
dépenses ” NON OUI 17.32 16.81
.y. n statistic df p method 1 df_temp[, i] 36178 23.14402 2 9.43e-06
Kruskal-Wallis
.y. n statistic df p method 1 df_temp[, i] 36178 3547.247 8 0
Kruskal-Wallis
.y. n statistic df p method 1 df_temp2[, i] 35781 15.57717 2 0.000414
Kruskal-Wallis [1] “POUR LA VARIABLE Charges de fonctionnement : Charges
de personnelpourcentage du total des dépenses ” NON OUI 22.35 21.33 [1]
“MÉDIANES POUR LA VARIABLE Charges de fonctionnement : Charges de
personnelpourcentage du total des dépenses ” NON OUI 21.89 20.96 [1]
“ÉCART-TYPE POUR LA VARIABLE Charges de fonctionnement : Charges de
personnelpourcentage du total des dépenses ” NON OUI 10.72 9.85