{"word_count": 521, "character_count": 4015}
L'objectif du TD est double : manipuler des matrices pour cartographier des indicateurs calculés à partir des marges (cf cours 3) ; mettre en œuvre avec R les méthodes de flux dominants, de flux majeurs et les modèles gravitaires. Ce TD reprend en partie une séance donnée avec Claude Grasland dans le cadre du groupe elementR (cf ce billet). Outre Claude Grasland, les scripts utilisés pour ce TD doivent beaucoup à Timothée Giraud (cf le blog R Géomatique), Nicolas Lambert (cf le blog néocarto) et Malika Madelin.Packages utilisés : reshape2, maptools, rCarto, RColorBrewer.Les données utilisées sont les migrations entre les dix régions tchécoslovaques en 1965 (téléchargement).Manipulations de baseDeux manipulations sont nécessaires pour travailler sur les matrices : passer d'une matrice carrée à un format origine - destination - flux et réaliser l'opération inverse. De plus, pour cartographier des flux, il est nécessaire d'avoir un fond de carte au format .shp (avec des codes pour les unités spatiales similaires aux codes utilisées dans les fichiers de données pour permettre la jointure), de calculer les coordonnées des centroïdes et enfin les distances entre ces centroïdes. L'exemple ci-dessous détaille les étapes :library(reshape2)#passage data.frame type matrice en objet matrix#importation de la matricetab &#60;- read.table("matrice.csv", ... ,stringsAsFactors=FALSE)#passage d'un objet data.frame à un objet matrixmat &#60;- as.matrix(tab[,-1])row.names(mat) &#60;- tab[,1]#passage d'une matrice au format origine - destination - fluxtabflow &#60;- melt(mat)names(tabflow) &#60;- c("i","j","Fij")head(tabflow)#passage d'une liste i-j-Fij au format matricetempo &#60;- melt(tabflow,&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; id.vars=c("i","j"),&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; measure.vars="Fij")tempo2 &#60;- dcast(tempo, i~j)matflow2 &#60;- as.matrix(tempo2[,-1])rownames(matflow2) &#60;- tempo2[,1]library(maptools)#import d'un shapefdc &#60;- readShapeSpatial("carte.shp")#calcul des centroidescentres &#60;- cbind(fdc@data[,"CODE"], as.data.frame(coordinates(fdc)))colnames(centres) &#60;- c("CODE","X","Y")head(centres)#calcul de la distance#2 étapes : passer en format long et coller les xi, yi, xj, xj#appliquer la formule dij = round(sqrt((xi-xj)**2 + (yi-yj)**2)/1000, 1)Déroulement du TDLes scripts détaillant toutes les étapes sont disponibles ici.Opérations élémentaires sur les matrices importer le fichier matmig_1961_1965.csv et le tranformer en objet matrice (Fij) calculer la transposée (Fji) calculer le volume et le solde des échanges à l'aide de la fonction apply, calculer les sommes marginales (arrivée, départ, volume, solde, asymétrie) importer le fichier tch10.shp cartographier différents indicateurs à l'aide du package rCarto (somme des départs, volume et asymétrie migratoire) cartographier les flux d'émigrationVoici deux exemples de cartes à produire.Flux dominants et flux majeurs à l'aide des fonctions apply, sum, max et de l'argument which.max, déterminer les flux dominants à l'aide des foncions apply et rank, déterminer les flux majeurs (x premiers flux de i vers j) repérer les flux supérieurs à 2% du volume total des flux et les cartographierModèles gravitaires calculer les marges de la matrice de flux et les centroïdes des dix régions passer la matrice en format i - j - Fij et coller masses et coordonnées importer le fichier attributaire tchpop_1965_1990.csv et coller les éléments utiles au tableau i j Fij le tableau final comprendra les éléments suivants : i j Fij Fji Fi Fj Xi Yi Xj Yj Dij POPi POPj tester un modèle gravitaire prenant en compte masses et distance de type glm(Fij~log(POPi)+log(POPj)+log(Dij), data=mydata, family=poisson) étudier les paramètres - summary(model) -, analyser la variance puis calculer et cartographier les résidus mêmes étapes avec un modèle à double contrainte (origine et destination) - glm(Fij~i+j+log(Dij), data=mydata, family=poisson)