Vous êtes sur la page 1sur 20

TP3: Notion de voisinage

NGOULOU NGOUBILI Irch Defluviaire

2023-12-13

Contents
0.1 Chargement des packages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
0.2 Difference entre deux matrices de voisinage quelconque . . . . . . . . . . . . . . . . . . . . . . 1
0.3 Visualisation des variables relatives au jeu de données Columbus . . . . . . . . . . . . . . . . 3
0.4 Spécification et codification de la structure de voisinage . . . . . . . . . . . . . . . . . . . . . 4
0.5 Analyse descriptive des variables contenues des nc . . . . . . . . . . . . . . . . . . . . . . . . 5
0.6 Matrice de voisinage basée sur la contiguïté et le graphe correspondant . . . . . . . . . . . . . 7
0.7 Graphes de voisinage fondés sur les voisins les plus proches voisins . . . . . . . . . . . . . . . 11
0.8 Matrice de voisinage basée sur un seuil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
0.9 Matrice de voisinage de type Delaunay . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17

0.1 Chargement des packages


# Chargement des packages necessaires
library(spdep)
library(classInt)
library(sp)
library(sf)
library(RColorBrewer)
library(GeoXp)
library(dplyr)
library(tmap)
# Chargement et transformation de la base columbus
columbus = sf::st_read(system.file("shapes/columbus.shp", package="spData")[1])

## Reading layer `columbus' from data source


## `C:\Users\Irch Defluviaire\AppData\Local\R\win-library\4.3\spData\shapes\columbus.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 49 features and 20 fields
## Geometry type: POLYGON
## Dimension: XY
## Bounding box: xmin: 5.874907 ymin: 10.78863 xmax: 11.28742 ymax: 14.74245
## CRS: NA
columbus = as(columbus, "Spatial")

0.2 Difference entre deux matrices de voisinage quelconque


Pour le jeu de données columbus, vérifions si la matrice de voisinage basée sur la contiguité (QUEEN et
ROOK) possède la même structure de voisinage que celle contenue dans l’objet col.gal.nb chargée depuis le
package spdep.

1
# Matrice de voisinage chargée depuis le package spdep
col.gal.nb <- read.gal(system.file("etc/weights/columbus.gal",package = "spdep")[1])

# Matrice de voisinage basée sur la contiguité.


columbus.nb <- poly2nb(columbus, queen = F) # ROOK
queen <- poly2nb(columbus) # QUEEN

# Recupérer les coordonnées adaptées de Columbus


coord = coordinates(columbus)

# Graphe de voisinage de QUEEN et de spdep differensié


par( mar = c(0.9, 0.9, 0.9, 0.9))
plot(columbus,border = "black")
plot(diffnb(queen,col.gal.nb), coord, add=T)
text(coord[,1], coord[,2], labels = columbus$POLYID)

1
2
3
4
8 6
7 5
131211 9 10
14
19 16 15 17
18 22
24 25 26
20 23
21 27
31 30 29 28 33 32
36 34 37 38 35
43 40 41
39 44
46 42
45 48
49 47

# Graphe de voisinage de QUEEN et celle de spdep combiné


par( mar = c(0.9, 0.9, 0.9, 0.9))
plot(columbus, border="grey")
plot(queen, coord, add=T, col="blue")
plot(col.gal.nb, coord, col="red", add=T)
legend("bottomleft", legend =c("QUEEN", "col.gal.nb"),fill = c("blue","red"))

2
QUEEN
col.gal.nb

0.2.1 Analyse du graphe de voisinage de type QUEEN

summary(queen)

## Neighbour list object:


## Number of regions: 49
## Number of nonzero links: 236
## Percentage nonzero weights: 9.829238
## Average number of links: 4.816327
## Link number distribution:
##
## 2 3 4 5 6 7 8 9 10
## 5 9 12 5 9 3 4 1 1
## 5 least connected regions:
## 1 6 42 46 47 with 2 links
## 1 most connected region:
## 20 with 10 links

0.3 Visualisation des variables relatives au jeu de données Columbus


Nous utilisons la fonction classIntervals() du package classInt pour produire la carte des quartiers de
Columbus selon les valeurs de la variable revenu(INC) par exemple(quatre classes).
library(classInt)
col.pal <- brewer.pal(7, name = "Greens")
classes <- classIntervals(columbus@data$INC , n=4, style="equal")

3
par( mar = c(0.9, 0.9, 0.9, 0.9))
plot(columbus, col=findColours(classes,col.pal))
legend("bottomleft", legend = c("[4.47-11.12[","[11.12-17.77[", "[17.77-24.42[","[24.42-31.07["), fill =

[4.47−11.12[
[11.12−17.77[
[17.77−24.42[
[24.42−31.07[

0.4 Spécification et codification de la structure de voisinage


Le package spdep permet de définir les relations de voisinage entre objets spatiaux. Pour analyser ces
relations notre étude se base sur les données nc chargée depuis le package spData.
# Chargement et transformation du jeu de données nc
if (requireNamespace("sf", quietly = TRUE)) {
library(sp)
nc <- st_read(system.file("shapes/sids.shp", package="spData")[1])
nc <- as(nc, "Spatial")
}

## Reading layer `sids' from data source


## `C:\Users\Irch Defluviaire\AppData\Local\R\win-library\4.3\spData\shapes\sids.shp'
## using driver `ESRI Shapefile'
## Simple feature collection with 100 features and 22 fields
## Geometry type: MULTIPOLYGON
## Dimension: XY
## Bounding box: xmin: -84.32385 ymin: 33.88199 xmax: -75.45698 ymax: 36.58965
## CRS: NA
# Recupération des references de nc
ref = coordinates(nc)

4
0.5 Analyse descriptive des variables contenues des nc
library(knitr)
library(dplyr)
new_df = select(nc@data,"AREA","BIR74","SID74","NWBIR74","BIR79","SID79","NWBIR79")
kable(summary(new_df))

AREA BIR74 SID74 NWBIR74 BIR79 SID79 NWBIR79


Min. :0.0420 Min. : 248 Min. : 0.00 Min. : 1.0 Min. : 319 Min. : 0.00 Min. : 3.0
1st 1st Qu.: 1st Qu.: 1st Qu.: 1st Qu.: 1st Qu.: 1st Qu.:
Qu.:0.0910 1077 2.00 190.0 1336 2.00 250.5
Median Median : Median : Median : Median : Median : Median :
:0.1205 2180 4.00 697.5 2636 5.00 874.5
Mean Mean : Mean : 6.67 Mean Mean : Mean : 8.36 Mean :
:0.1263 3300 :1051.0 4224 1352.8
3rd 3rd Qu.: 3rd Qu.: 3rd 3rd Qu.: 3rd 3rd Qu.:
Qu.:0.1542 3936 8.25 Qu.:1168.5 4889 Qu.:10.25 1406.8
Max. Max. Max. :44.00 Max. Max. Max. :57.00 Max.
:0.2410 :21588 :8027.0 :30757 :11631.0

0.5.1 Description des variables et extraction des variables d’analyse

library(GGally)

## Le chargement a nécessité le package : ggplot2


## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggcorr(new_df, label = TRUE)

5
NWBIR79

SID79 0.9

BIR79 0.9 0.9


1.0

0.5
NWBIR74 0.9 0.8 1
0.0

−0.5
SID74 0.9 0.8 0.8 0.9 −1.0

BIR74 0.9 0.9 1 0.9 0.9

AREA 0.3 0.4 0.4 0.3 0.3 0.3

sf_use_s2(FALSE)

## Spherical geometry (s2) switched off


plot(nc, axes=TRUE)
text(ref,label=nc$FIPSNO,cex=0.5)

6
37

3700937005 37171 37169 37157 3703337145 37181


37185 371313709137073 37029
37053
37077 37083 37139
37189 37193 37197 37143
37067 37081 37041
36

37011
37121 37027 37135
37001 37063 37069 37015
37003 37059 3712737065
3711537199 37097 37057 37183 37117 371873717737055
3711137023 37151 37037 37195
37021 37035 37159 37147 37013 37095
37173 37087 37109 37105 37101 37079
37075 37089 3716137045 37025 3712337125 37085 37191
37099 37149 3707137119 37167
37107 37049
37039 37113 37175 37137
35

37043 371793700737153 3709337051 37163 37061 37103


37165 37031
37133
37155 37017
37141
37047 37129
34

37019
33

−84 −82 −80 −78 −76

0.6 Matrice de voisinage basée sur la contiguïté et le graphe correspondant


Le voisinage au sens de la contiguïté est souvent utilisé pour étudier des données démographiques et sociales,
pour lesquelles être d’un côté ou de l’autre d’une frontière administrative peut avoir plus d’importance qu’être
situé à une certaine distance l’une de l’autre. Dans la littérature on trouve plusieurs type de contiguité.
• contiguïté ROOK;
• contiguïté QUEEN;
#Le fichier en entrée est un fichier SpatialPolygons
#Extraction de la liste des voisins au sens QUEEN (par défaut)
nc.nb <- poly2nb(nc)
nc.nb2 = poly2nb(nc, queen = F)
# On représente graphiquement la matrice de voisinage
par( mar = c(1,1,1,1))
plot(nc,border = "black",axes=TRUE)
plot(nc.nb,ref, add=TRUE, col="red")
plot(nc.nb2,ref, add=TRUE, col="blue")
legend("bottomleft", legend=c("Matrice de type QUEEN","Matrice de type ROOK"), fill=c("red","blue"), bty

7
38
37
36
35
34

Type de matice de contiguité


33

Matrice de type QUEEN


Matrice de type ROOK

−84 −82 −80 −78 −76


0.6.1 Recapitulatif du système de voisinage de type QUEEN:

summary(nc.nb)

## Neighbour list object:


## Number of regions: 100
## Number of nonzero links: 490
## Percentage nonzero weights: 4.9
## Average number of links: 4.9
## Link number distribution:
##
## 2 3 4 5 6 7 8 9
## 8 15 17 23 19 14 2 2
## 8 least connected regions:
## 4 21 45 56 77 80 90 99 with 2 links
## 2 most connected regions:
## 39 67 with 9 links
barnbmap(as(nc,"sf"), nc.nb, col=col.pal, xlab = "Nombre de liens", ylab = "Nombre de sites", axes=TRUE)

8
9
10
0.7 Graphes de voisinage fondés sur les voisins les plus proches voisins
Nous construisons dans cette section la matrice de voisinage basée sur les 5 plus proches voisins.
#Graphes fondés sur les plus proches voisins
nc.knn = knn2nb(knearneigh(ref,k=5))
par( mar = c(1,1,1,1))
plot(nc, border = "grey",axes=TRUE)
plot(nc.knn, ref, add = TRUE, col="blue")
38
37
36
35
34
33

−84 −82 −80 −78 −76


0.7.1 Commentaires d’une matrice de 5 plus proches voisins

summary(nc.knn)

## Neighbour list object:


## Number of regions: 100
## Number of nonzero links: 500
## Percentage nonzero weights: 5
## Average number of links: 5
## Non-symmetric neighbours list
## Link number distribution:
##
## 5
## 100
## 100 least connected regions:
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
## 100 most connected regions:

11
## 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
histnbmap(as(nc,"sf"), nc.knn, col=col.pal, xlab = "Distance(Km) avec le voisin le plus eloigne", ylab =

12
13
0.8 Matrice de voisinage basée sur un seuil
Pour les données SIDS, voici la contruction d’une matrice bas´ee sur un seuil de 75km, l’option
LONGLAT=TRUE permet d’utiliser une distance kilometrique alors que les coordonn´ees sont exprimées en
degrés.
wd.nb=dnearneigh(ref,0,75,longlat=TRUE)
plot(nc, border= "grey",xlim=c(-84.5,-82),ylim=c(35,36),
axes=TRUE)
plot(wd.nb,ref,add=TRUE, col="blue")
35.8
35.4
35.0

−84.5 −84.0 −83.5 −83.0 −82.5 −82.0

0.8.1 Commentaires du resumé de la structure de voisinage

summary(wd.nb)

## Neighbour list object:


## Number of regions: 100
## Number of nonzero links: 968
## Percentage nonzero weights: 9.68
## Average number of links: 9.68
## Link number distribution:
##
## 4 5 6 7 8 9 10 11 12 13 14 15 16
## 3 3 5 11 11 14 14 13 12 7 4 2 1
## 3 least connected regions:
## 81 95 100 with 4 links
## 1 most connected region:

14
## 41 with 16 links
histnbmap(as(nc,"sf"),wd.nb, xlab = "Distance(Km) avec le voisin le plus eloigne", ylab = "Proportion de

15
16
Histogram of nvoisins
Frequency

20
10
0

4 6 8 12 16

Nombre de voisins

0.9 Matrice de voisinage de type Delaunay


dln.nb <- tri2nb(ref)
par(oma = c(0, 0, 0, 0), mar = c(0, 0, 0, 0))
plot(nc, border="lightgrey", axes=TRUE)
plot(dln.nb,ref,add=TRUE,col="red")
38
37
36
35
34
33
32

−84 −82 −80 −78 −76


17
0.9.1 Commentaire d’une matrice de triangulation

summary(dln.nb)

## Neighbour list object:


## Number of regions: 100
## Number of nonzero links: 574
## Percentage nonzero weights: 5.74
## Average number of links: 5.74
## Link number distribution:
##
## 2 3 4 5 6 7 8 9 10
## 1 2 13 29 27 22 3 1 2
## 1 least connected region:
## 81 with 2 links
## 2 most connected regions:
## 2 84 with 10 links
Le résumé de la structure de voisinage de type Delaunay indique qu’il y a 100 régions, 574 liens de voisinage,
et que le nombre moyen de voisins par région est de 5.74. Il donne aussi la distribution du nombre de liens
par région, ainsi que les régions les moins et les plus connectées. Par exemple, la région 81 a seulement 2
voisins, tandis que les régions 2 et 84 en ont 10.
barnbmap(as(nc,"sf"), dln.nb, col=col.pal, xlab = "Nombre de liens", ylab = "Nombre de sites", axes=TRUE

18
19
20

Vous aimerez peut-être aussi