Cette page présente des méthodes pour recalculer les moyennes et les effectifs après un changement de géographie. Ces solutions sont valables pour une base individuelle ou agrégée selon une ou plusieurs variables. Elles s’appliquent aussi, par extension, pour une base communale.
Je pars d’une base individuelle sur les trajets domicile-travail et les émissions de CO2 en géographie géographie 2019 (variable COM19), que je souhaite passer en géographie 2020.
# Librairies utilisées dans cet exemple
library(dplyr)
library(gescodgeo)
# Déplacements domicile-travail dans quelques communes
data
#> # A tibble: 6 × 5
#> PRENOM COM19 IPONDI DIST CO2_HEBDO
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 Pierre 14001 4 13.6 13953
#> 2 Paul 14712 2 15.7 16325
#> 3 Jacques 21183 2 9.82 12183
#> 4 Livia 21507 4 16.2 16156
#> 5 Estelle 21183 2 12.2 12676
#> 6 Louise 21507 2 13.5 7801Ces individus n’ont pas la même pondération (variable IPONDI). La variable DIST représente la distance domicile-travail en km. La variable CO2_HEBDO représente les émissions de gaz à effet de serre occasionés par les trajets domicile-travail pour une semaine moyenne, exprimés en équivalent CO2.
Je commence par changer la géographie, passant de 2019 à 2020.
# Change la géographie des communes
new <- data %>%
change_cog(cog_from = 2019, cog_to = 2020, from = COM19, to = "COM20")
# Nouvelle base
new
#> # A tibble: 7 × 6
#> PRENOM COM19 COM20 IPONDI DIST CO2_HEBDO
#> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 Pierre 14001 14001 4 13.6 13953
#> 2 Paul 14712 14666 2 15.7 16325
#> 3 Paul 14712 14712 2 15.7 16325
#> 4 Jacques 21183 21183 2 9.82 12183
#> 5 Livia 21507 21183 4 16.2 16156
#> 6 Estelle 21183 21183 2 12.2 12676
#> 7 Louise 21507 21183 2 13.5 7801On remarque ci-dessus que Paul apparait deux fois dans la nouvelle base, pour tenir compte de la scission de la commune 14712. À cause de cette duplication, les moyennes et les effectifs totaux ne sont pas respectés après le changement de géographie.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 13.9 13650. 16
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 14.1 13948. 18Utiliser une pondération issue de la table de passage
Pour rétablir des agrégats cohérents, il suffirait de diviser par deux la pondération des individus vivant dans les communes 14666 et 14712 en géographie 2020. Cette approximation est souvent suffisante. Cependant, afin d’être plus précis, je souhaite tenir compte du poids relatif des communes scindées d’après leur population finale.
# Table de passage entre 2019 et 2020
cog_transition(2019, 2020)
#> # A tibble: 8 × 7
#> COM_INI COM_FIN POP_INI POP_FIN NB_COM_INI NB_COM_FIN SPLIT_RATIO
#> <chr> <chr> <int> <dbl> <int> <int> <dbl>
#> 1 14712 14666 5428 1918 1 2 0.353
#> 2 14712 14712 5428 3510 1 2 0.647
#> 3 21183 21183 896 1037 2 1 1
#> 4 21213 21452 807 2664 2 1 1
#> 5 21452 21452 1857 2664 2 1 1
#> 6 21507 21183 141 1037 2 1 1
#> 7 45287 45307 97 1109 2 1 1
#> 8 45307 45307 1012 1109 2 1 1La fonction change_cog() permet d’ajouter un ratio qui
donne directement une clé de répartition (variable SPLIT_RATIO).
# Change la géographie des communes et ajoute la colonne SPLIT_RATIO
new <- data %>%
change_cog(cog_from = 2019, cog_to = 2020, from = COM19, to = "COM20",
split_ratio = TRUE)
# Utilise SPLIT_RATIO pour corriger la pondération des communes scindées
new <- new %>% mutate(IPONDI = SPLIT_RATIO * IPONDI)
# Nouvelle base
new
#> # A tibble: 7 × 7
#> PRENOM COM19 COM20 IPONDI DIST CO2_HEBDO SPLIT_RATIO
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#> 1 Pierre 14001 14001 4 13.6 13953 1
#> 2 Paul 14712 14666 0.707 15.7 16325 0.353
#> 3 Paul 14712 14712 1.29 15.7 16325 0.647
#> 4 Jacques 21183 21183 2 9.82 12183 1
#> 5 Livia 21507 21183 4 16.2 16156 1
#> 6 Estelle 21183 21183 2 12.2 12676 1
#> 7 Louise 21507 21183 2 13.5 7801 1On peut vérifier que les agrégats sont corrects après le changement de géographie et le recalcul des variables.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 13.9 13650. 16
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 13.9 13650. 16Ne pas dupliquer les lignes en cas de scission
Selon les analyses statistiques, on peut avoir besoin, ou pas, de refléter l’exhaustivité du territoire dans la géographie finale, en faisant aparaître toutes les communes qui ont défusionné.
L’alternative présentée ici correspond à une approche dans laquelle on considère qu’il n’est pas utile de rendre visible ces communes issues d’une scission. On perd en précision, mais cela rend plus simple le recalcul des variables numériques après un changement de géographie.
L’argument one_to_one de la fonction
change_cog() permet de ne garder qu’une seule commmune en
cas de scission. Le code est celui de la commune initiale s’il est
présent dans l’une des communes issues de la scission, sinon il
correspond à celui de la commune fille qui est la plus peuplée. Cette
option permet d’éviter que des lignes soient dupliquées en cas de
scission. La base finale contient donc le même nombre de ligne que la
base initiale.
# Change la géographie de 2019 à 2020 avec une nouvelle variable COM20
new <- data %>%
change_cog(cog_from = 2019,
cog_to = 2020,
from = COM19,
to = "COM20",
one_to_one = TRUE)
new
#> # A tibble: 6 × 6
#> PRENOM COM19 COM20 IPONDI DIST CO2_HEBDO
#> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 Pierre 14001 14001 4 13.6 13953
#> 2 Paul 14712 14712 2 15.7 16325
#> 3 Jacques 21183 21183 2 9.82 12183
#> 4 Livia 21507 21183 4 16.2 16156
#> 5 Estelle 21183 21183 2 12.2 12676
#> 6 Louise 21507 21183 2 13.5 7801On peut vérifier que les agrégats sont bien respectés :
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 13.9 13650. 16
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
CO2_HEBDO = weighted.mean(CO2_HEBDO, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST CO2_HEBDO IPONDI
#> <dbl> <dbl> <dbl>
#> 1 13.9 13650. 16Cas d’une base bilocalisée
Dans cette exemple, je pars d’une base sur les trajets domicile-travail contenant une ligne par commune de départ et d’arrivée. Ces communes sont renseignées en géographie 2019 (variable RESID_19 et TRAV_19). Je souhaite les passer en géographie 2020.
# Déplacements domicile-travail dans quelques communes
data
#> # A tibble: 6 × 5
#> RESID_19 TRAV_19 IPONDI DIST DUREE
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 14712 14712 12063. 18.0 18.1
#> 2 14001 14712 2266. 23.7 21.2
#> 3 21183 21001 385. 20.7 22.4
#> 4 21507 21507 125 20.9 23.2
#> 5 45287 45001 101 40.4 40.3
#> 6 45307 45307 418. 31.3 29.9Je commence par changer la géographie de cette base, passant de 2019 à 2020.
# Change la géographie des communes
new <- data %>%
change_cog(cog_from = 2019, cog_to = 2020, from = RESID_19, to = "RESID_20") %>%
change_cog(cog_from = 2019, cog_to = 2020, from = TRAV_19, to = "TRAV_20")
new
#> # A tibble: 10 × 7
#> RESID_19 RESID_20 TRAV_19 TRAV_20 IPONDI DIST DUREE
#> <chr> <chr> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 14712 14666 14712 14666 12063. 18.0 18.1
#> 2 14712 14666 14712 14712 12063. 18.0 18.1
#> 3 14712 14712 14712 14666 12063. 18.0 18.1
#> 4 14712 14712 14712 14712 12063. 18.0 18.1
#> 5 14001 14001 14712 14666 2266. 23.7 21.2
#> 6 14001 14001 14712 14712 2266. 23.7 21.2
#> 7 21183 21183 21001 21001 385. 20.7 22.4
#> 8 21507 21183 21507 21183 125 20.9 23.2
#> 9 45287 45307 45001 45001 101 40.4 40.3
#> 10 45307 45307 45307 45307 418. 31.3 29.9Je souhaite revenir à une ligne par lieu de résidence et de travail
selon la géographie 2020. Je pourrais le faire directement avec la
fonction summarise() de dplyr.
# Agrège les moyennes DIST et DUREE et l'effectif IPONDI dans la nouvelle géographie
new <- new %>%
group_by(RESID_20, TRAV_20) %>%
summarise(DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI),
.groups = "drop")
new
#> # A tibble: 10 × 5
#> RESID_20 TRAV_20 DIST DUREE IPONDI
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 14001 14666 23.7 21.2 2266.
#> 2 14001 14712 23.7 21.2 2266.
#> 3 14666 14666 18.0 18.1 12063.
#> 4 14666 14712 18.0 18.1 12063.
#> 5 14712 14666 18.0 18.1 12063.
#> 6 14712 14712 18.0 18.1 12063.
#> 7 21183 21001 20.7 22.4 385.
#> 8 21183 21183 20.9 23.2 125
#> 9 45307 45001 40.4 40.3 101
#> 10 45307 45307 31.3 29.9 418.Toutefois, la transformation que j’ai effectuée ne respecte pas les agrégats (effectif total, durée moyenne et durée totale), car les communes scindées ont été dupliquées.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 18.7 18.5 53813.Pour rétablir des agrégats cohérents, je pondère les lignes selon le
poids relatif des communes scindées, en comparant leurs populations
légales. Je peux m’appuyer pour cela sur la variable SPLIT_RATIO,
ajoutée par la fonction change_cog().
# Change la géographie de la commune de résidence
new <- data %>% change_cog(cog_from = 2019, cog_to = 2020,
from = RESID_19, to = "RESID_20",
split_ratio = TRUE)
# Modifie la pondération en utilisant une clé de répartition
new <- new %>% mutate(IPONDI = SPLIT_RATIO * IPONDI)
# Change la géographie de la commune de travail
new <- new %>% change_cog(cog_from = 2019, cog_to = 2020,
from = TRAV_19, to = "TRAV_20",
split_ratio = TRUE)
#> Warning: Variable(s) ecrasee(s) : SPLIT_RATIO
# Modifie à nouveau la pondération en utilisant une clé de répartition
new <- new %>% mutate(IPONDI = SPLIT_RATIO * IPONDI)Les pondérations sont maintenant corrigées pour les scissions. Afin
de n’avoir qu’une seule ligne par commune de départ et d’arrivée, la
base est agrégée avec les fonctions group_by() et
summarise() de dplyr.
# Agrège les moyennes DIST et DUREE et l'effectif IPONDI dans la nouvelle géographie
new <- new %>%
group_by(RESID_20, TRAV_20) %>%
summarise(DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI),
.groups = "drop")
new
#> # A tibble: 10 × 5
#> RESID_20 TRAV_20 DIST DUREE IPONDI
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 14001 14666 23.7 21.2 801.
#> 2 14001 14712 23.7 21.2 1465.
#> 3 14666 14666 18.0 18.1 1506.
#> 4 14666 14712 18.0 18.1 2756.
#> 5 14712 14666 18.0 18.1 2756.
#> 6 14712 14712 18.0 18.1 5044.
#> 7 21183 21001 20.7 22.4 385.
#> 8 21183 21183 20.9 23.2 125
#> 9 45307 45001 40.4 40.3 101
#> 10 45307 45307 31.3 29.9 418.Je vérifie que les agrégats sont bien respectés.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.Utiliser une fonction dédiée
Quand une base contient une seule ligne par commune, la fonction
adapt_to_change() permet de recalculer les moyennes et le
effectifs pour tenir compte du changement de géographie. Il est aussi
possible de déterminer des catégories majoritaires pour les communes
fusionnées en utilisant l’argument cat_cols. C’est
notamment utile pour transposer un zonage dans une autre géographie.
La fonction adapt_to_change() s’applique aussi à une
base semi-agrégée, en précisant les différentes variables identifiantes
avec l’argument id_cols. Toutefois, si la base est trop
complexe, il est souvant plus facile de revenir aux méthodes présentées
plus ci-dessus.
Dans cet exemple, les communes sont renseignées en géographie 2019 (variable COM19). Je souhaite les passer en géographie 2020.
# Déplacements domicile-travail dans quelques communes
data
#> # A tibble: 6 × 4
#> COM19 IPONDI DIST DUREE
#> <chr> <dbl> <dbl> <dbl>
#> 1 14001 12063. 18.0 18.1
#> 2 14712 2266. 23.7 21.2
#> 3 21183 385. 20.7 22.4
#> 4 21507 125 20.9 23.2
#> 5 45287 101 40.4 40.3
#> 6 45307 418. 31.3 29.9Je commence par changer la géographie, passant de 2019 à 2020.
# Change la géographie des communes
new <- data %>%
change_cog(cog_from = 2019, cog_to = 2020, from = COM19, to = "COM20") Je souhaite maintenant adapter la pondération (variable IPONDI), les distances moyennes (DIST) et les durées moyennes (DUREE) pour tenir compte du nouveau découpage des communes.
Dans la fonction adapt_to_change(), je mentionne la
géographie initiale, la géographie finale, ainsi que les variables que
je souhaite recalculer. Je précise également que la variable IPONDI
correspond au poids de mes observations dans la base initiale. Cette
pondération est prise en compte pour recalculer les moyennes dans les
fusions.
# Adapte les variables aux changements de géographie
new <- new %>% adapt_to_change(
# Géographie initiale et géographie finale
from = COM19,
to = COM20,
# Moyennes et sommes à recalculer
mean_cols = c(DIST, DUREE),
sum_cols = IPONDI,
# Pondération dans la base initiale
weight_from = IPONDI
)
new
#> # A tibble: 5 × 5
#> COM19 COM20 IPONDI DIST DUREE
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 21183 21183 510. 20.7 22.6
#> 2 45287 45307 519. 33.1 31.9
#> 3 14001 14001 12063. 18.0 18.1
#> 4 14712 14666 1133. 23.7 21.2
#> 5 14712 14712 1133. 23.7 21.2Je vérifie que mes agrégats sont bien respectés.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.Utiliser une pondération issue de la table de passage
Avec la scission de la commune 14712, les effectifs ont implicitement été répartis entre les deux communes filles 14712 et 14666, qui présentent un nombre de navetteurs identique. Pourtant, dans la table de passage, on voit que la commune 14712 est dotée d’une population finale plus importante que la commune 14666.
cog_transition(2019, 2020)
#> # A tibble: 8 × 7
#> COM_INI COM_FIN POP_INI POP_FIN NB_COM_INI NB_COM_FIN SPLIT_RATIO
#> <chr> <chr> <int> <dbl> <int> <int> <dbl>
#> 1 14712 14666 5428 1918 1 2 0.353
#> 2 14712 14712 5428 3510 1 2 0.647
#> 3 21183 21183 896 1037 2 1 1
#> 4 21213 21452 807 2664 2 1 1
#> 5 21452 21452 1857 2664 2 1 1
#> 6 21507 21183 141 1037 2 1 1
#> 7 45287 45307 97 1109 2 1 1
#> 8 45307 45307 1012 1109 2 1 1On peut utiliser cette clé de répartition pour attribuer plus
finement les effectifs après la scission. D’abord, j’indique que je
souhaite conserver les informations issues de la table de passage dans
la fonction change_cog(). Ensuite, j’utilise la population
finale pour pondérer les observations après transformation dans la
fonction adapt_to_change().
# Change la géographie et ajoute les informations de la table de passage
new <- data %>% change_cog(
cog_from = 2019, cog_to = 2020,
from = COM19, to = "COM20",
infos = TRUE
)
new
#> # A tibble: 7 × 9
#> COM19 COM20 IPONDI DIST DUREE POP_INI POP_FIN NB_COM_INI NB_COM_FIN
#> <chr> <chr> <dbl> <dbl> <dbl> <int> <dbl> <int> <int>
#> 1 14001 14001 12063. 18.0 18.1 NA NA NA NA
#> 2 14712 14666 2266. 23.7 21.2 5428 1918 1 2
#> 3 14712 14712 2266. 23.7 21.2 5428 3510 1 2
#> 4 21183 21183 385. 20.7 22.4 896 1037 2 1
#> 5 21507 21183 125 20.9 23.2 141 1037 2 1
#> 6 45287 45307 101 40.4 40.3 97 1109 2 1
#> 7 45307 45307 418. 31.3 29.9 1012 1109 2 1
# Recalcule les variables avec une pondération initiale et une pondération finale
new <- new %>% adapt_to_change(
from = COM19, to = COM20,
mean_cols = c(DIST, DUREE), sum_cols = IPONDI,
weight_from = IPONDI, weight_to = POP_FIN
)
new
#> # A tibble: 5 × 9
#> COM19 COM20 IPONDI DIST DUREE POP_INI POP_FIN NB_COM_INI NB_COM_FIN
#> <chr> <chr> <dbl> <dbl> <dbl> <int> <dbl> <int> <int>
#> 1 21183 21183 510. 20.7 22.6 896 1037 2 1
#> 2 45287 45307 519. 33.1 31.9 97 1109 2 1
#> 3 14712 14666 801. 23.7 21.2 5428 1918 1 2
#> 4 14712 14712 1465. 23.7 21.2 5428 3510 1 2
#> 5 14001 14001 12063. 18.0 18.1 NA NA NA NAComme précédemment, je vérifie que mes agrégats sont bien respectés.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 19.5 19.2 15358.Cas d’une base semi-agrégée avec plusieurs variables identifiantes
Je pars maintenant d’une base sur les trajets domicile-travail contenant une ligne par commune et par mode de transport. Le cas pourrait s’étendre à toute forme de base semi-agrégée, par exemple contenant une ligne par commune, mode de transport, sexe et catégorie socio- professionnelle.
# Base semi-agrégée par commune et par mode de transport
data
#> # A tibble: 6 × 5
#> COM19 MODTRANS IPONDI DIST DUREE
#> <chr> <chr> <dbl> <dbl> <dbl>
#> 1 14712 voiture 12062 18.0 18.1
#> 2 14712 vélo 266 7.67 10.2
#> 3 14001 voiture 384 20.7 22.4
#> 4 14001 vélo 52 8.90 13.2
#> 5 45287 voiture 101 40.4 40.3
#> 6 45307 voiture 418 31.3 29.9
# Change la géographie et ajoute les informations de la table de passage
new <- data %>% change_cog(
cog_from = 2019, cog_to = 2020,
from = COM19, to = "COM20",
infos = TRUE
)
new
#> # A tibble: 8 × 10
#> COM19 COM20 MODTRANS IPONDI DIST DUREE POP_INI POP_FIN NB_COM_INI NB_COM_FIN
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <int> <dbl> <int> <int>
#> 1 14712 14666 voiture 12062 18.0 18.1 5428 1918 1 2
#> 2 14712 14712 voiture 12062 18.0 18.1 5428 3510 1 2
#> 3 14712 14666 vélo 266 7.67 10.2 5428 1918 1 2
#> 4 14712 14712 vélo 266 7.67 10.2 5428 3510 1 2
#> 5 14001 14001 voiture 384 20.7 22.4 NA NA NA NA
#> 6 14001 14001 vélo 52 8.90 13.2 NA NA NA NA
#> 7 45287 45307 voiture 101 40.4 40.3 97 1109 2 1
#> 8 45307 45307 voiture 418 31.3 29.9 1012 1109 2 1Pour recalculer les variables, je précise qu’il faut ajouter la colonne identifiante MODTRANS.
# Recalcule les variables avec une pondération initiale et une pondération finale
new <- new %>% adapt_to_change(
from = COM19, to = COM20,
id_cols = MODTRANS,
mean_cols = c(DIST, DUREE), sum_cols = IPONDI,
weight_from = IPONDI, weight_to = POP_FIN
)
new
#> # A tibble: 7 × 10
#> COM19 COM20 MODTRANS IPONDI DIST DUREE POP_INI POP_FIN NB_COM_INI NB_COM_FIN
#> <chr> <chr> <chr> <dbl> <dbl> <dbl> <int> <dbl> <int> <int>
#> 1 45287 45307 voiture 519 33.1 31.9 97 1109 2 1
#> 2 14712 14666 voiture 4262. 18.0 18.1 5428 1918 1 2
#> 3 14712 14712 voiture 7800. 18.0 18.1 5428 3510 1 2
#> 4 14712 14666 vélo 94.0 7.67 10.2 5428 1918 1 2
#> 5 14712 14712 vélo 172. 7.67 10.2 5428 3510 1 2
#> 6 14001 14001 voiture 384 20.7 22.4 NA NA NA NA
#> 7 14001 14001 vélo 52 8.90 13.2 NA NA NA NAJe vérifie que mes agrégats sont bien respectés.
# Avant le changement de géographie
data %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 18.4 18.6 13283
# Après le changement de géographie
new %>% summarise(
DIST = weighted.mean(DIST, IPONDI),
DUREE = weighted.mean(DUREE, IPONDI),
IPONDI = sum(IPONDI)
)
#> # A tibble: 1 × 3
#> DIST DUREE IPONDI
#> <dbl> <dbl> <dbl>
#> 1 18.4 18.6 13283Remarque : si j’ai plusieurs autres colonnes identifiantes, je les ajoute de la même façon.
# Si j'ai initialement une ligne par COM19, MODTRANS, SEXE et CS1
new <- new %>% adapt_to_change(
from = COM19, to = COM20,
id_cols = c("MODTRANS", "SEXE", "CS1"),
mean_cols = c(DIST, DUREE), sum_cols = IPONDI,
weight_from = IPONDI, weight_to = POP_FIN
)