ENSAI TD2 – Manipulation de matrices et cartographie de flux avec R

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 base

Deux 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 matrice
tab <- read.table("matrice.csv", ... ,stringsAsFactors=FALSE)

#passage d'un objet data.frame à un objet matrix
mat <- as.matrix(tab[,-1])
row.names(mat) <- tab[,1]

#passage d'une matrice au format origine - destination - flux
tabflow <- melt(mat)
names(tabflow) <- c("i","j","Fij")
head(tabflow)

#passage d'une liste i-j-Fij au format matrice
tempo <- melt(tabflow,
             id.vars=c("i","j"),
             measure.vars="Fij")
tempo2 <- dcast(tempo, i~j)
matflow2 <- as.matrix(tempo2[,-1])
rownames(matflow2) <- tempo2[,1]

library(maptools)

#import d'un shape
fdc <- readShapeSpatial("carte.shp")

#calcul des centroides
centres <- cbind(fdc@data[,"CODE"], as.data.frame(coordinates(fdc)))
colnames(centres) <- 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 TD

Les 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’émigration

Voici deux exemples de cartes à produire.

solde

echanges

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 cartographier

Modè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)

Une réflexion au sujet de « ENSAI TD2 – Manipulation de matrices et cartographie de flux avec R »

  1. Bonjour, merci beaucoup pour ce tutoriel je vais pratiquer avec ce que vous proposez, il est très utile pour ceux qui nous sommes débutants sur R
    Bien cordialement

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *