Geographical Movement
is critically important.
This is because much change in the world is due to geographical movement.
The movement of ideas, people, disease, money, energy, material, etc.
W. Tobler
Quelques pointeurs :
Tobler s’intéresse très tôt à ces questions et propose de résumer une matrice OD spatialisée à l’aide d’un champ de vecteurs.
Il propose par exemple de calculer les vecteurs suivants en chacun des lieux:
\[\vec{c_i} = \frac{1}{n-1}\sum_{j\neq i}\frac{1}{dist(i,j)}\frac{M_{ij}-M_{ji}}{M_{ij}+M_{ji}}(\vec{x_j}-\vec{x_i})\]
Il cherche a construire et représenter le champ vectoriel (le vent) qui permettrait d’expliquer au mieux les mouvements observés. La métaphore physique est déjà utilisée.
Premiers travaux (données ponctuelles + ODs)
Ces travaux s’articulent et se formalisent au travers de l’introduction de deux objets :
La disymétrie entre deux flux \(M_{ij}\) et \(M_{ji}\) est proportionelle à la différence d’attractivité entre \(i\) et \(j\) modulé par la distance entre \(i\) et \(j\).
\[M_{ij}-M_{ji}\propto\frac{(A_i-A_j)}{dist(i,j)}\]
\[\color{blue}{D}.\color{red}{A}=\color{green}{\Delta}\] avec :
Solution unique à un facteur additif près.
Même modèle, même hypothèses mais les déplacements ne peuvent se faire qu’entre nœuds voisins positionnés sur une grille régulière :
On obtient pour chaque noeuds 4 équations reliant les flux aux attractivités :
Qui une fois combinées lient les \(\color{green}{\Delta}\) aux attractivités :
et forment un système d’équation linéaire avec des liens fort avec la physique (équation de poisson).
Rmq : Manque juste les équations au bord du domaine qui encoderont le fait que le système est clos (pas de fuites)
Pour utiliser cette approche il suffit d’affecter un \(\color{green}{\Delta}\) à chaque nœuds de la grille.
Solution proposée par Tobler avec des données spatiales zonales affectation uniforme (ou pondéré) des \(\color{green}{\Delta}\) :
En résumé :
# chargement des données
data("dollars")
# calcul des deltas (balance)
delta = rowSums(dollars$OD)-colSums(dollars$OD)
dollars$polygones$delta=delta
# un jolie petit cadre
vintage_frame(dollars$polygones)
# affichage des contours
plot(st_geometry(dollars$polygones),add=TRUE)
# affichage des balances +/-
plus_minus_map(dollars$polygones,"delta")
pot.dollars = compute_poisson_potential(dollars$polygones,
varname = "delta",
method = "jacobi",
nb_it=1000)
pot.dollars = compute_poisson_potential(dollars$polygones,cellsize = 5000)
## Classes 'sf' and 'data.frame': 1614 obs. of 10 variables:
## $ grid_in :sfc_POLYGON of length 1614; first list element: List of 1
## ..$ : num [1:5, 1:2] 33.4 34.5 34.5 33.4 33.4 ...
## ..- attr(*, "class")= chr [1:3] "XY" "POLYGON" "sfg"
## $ i : num 1 1 2 2 2 2 3 3 3 3 ...
## $ j : num 31 32 29 30 31 32 29 30 31 32 ...
## $ attractivity: num 281 281 277 277 280 ...
## $ residuals : num 0.24 0.203 0.194 0.234 0.2 ...
## $ b : num 2.66 2.66 2.66 2.66 2.66 ...
## $ dx : num 0 0 0 1.49 1.35 ...
## $ dy : num 0 0 0 0 -1.88 ...
## $ x : num 33.9 35 31.9 32.9 33.9 ...
## $ y : num 4.51 4.51 5.52 5.52 5.52 ...
## - attr(*, "sf_column")= chr "grid_in"
## - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA
## ..- attr(*, "names")= chr [1:9] "i" "j" "attractivity" "residuals" ...
Pour finir de filer la métaphore
et faire une carte de mouvements en mouvement
il est possible d’utiliser les droplets
Confession, j’ai longtemps admirer earth.nullschool.net :
Recette :