Tous les articles par thomash

Classifier des données non-paramétriques : le test de Dunn

Ce post propose d’approfondir le test de Dunn (utilisé dans une thèse déjà citée) et présenté au dernier goûter.

Pour la Préhistoire, si la distribution spatiale d’éléments d’une culture matérielle peut être connue, et nonobstant les données manquantes, il est difficile de savoir quelle aurait pu être cette distribution en théorie et d’en déduire des choix culturels dans l’implantation des sites. L’implantation des sites archéologiques ne suit généralement pas la loi de distribution normale (Poisson homogène). Modéliser une distribution inhomogène, comme un contexte d’économie agropastorale avec des zones mises en valeur et d’autres qui restent marginales, peut être très intéressant mais complexe.

Pour comprendre la distribution des éléments d’une culture donnée, il faut mieux chercher à utiliser la typologie de ces éléments.

 

feuille_laurier_solutreeFigure 1. Feuille de laurier solutréenne (d’après Otte 2003).

Prenons un exemple imaginaire illustré par la découverte de différents types d’industries solutréennes (symbolisées par des points) à proximité d’un gisement.

Gisement_distanceFigure 2. Distribution des différents lieux de découverte des industries par rapport à un gisement (infographie T.Huet).

Le test de Dunn (1961) est un test non paramétrique de comparaisons multiples par paires pour des données quantitatives (ouf !) qui permet d’identifier et de classer différents types en différents groupes en fonction d’une variable (ici la distance au gisement). Sa statistique est établie sur la différence de la somme des rangs pour chaque types (A, B,…) à la différence moyenne théorique (en fonction du nombre de types et de leur nombre d’éléments) pour une variable. Le test est basé sur l’inégalité de Bonferonni. Il est généralement réalisé après un test de Kruskall-Wallis qui permet de déterminer si les différents types (ou échantillons) proviennent d’une même population ou si au moins un de ceux-ci provient d’une population différente.

Gisement_diagrammeFigure 3. Distances des différents types d’industrie par rapport au gisement (id. Fig. 1)
(infographie T. Huet).

Gisement_tableau

Figure 4. Résultat du test de Dunn (infographie T.Huet).

Dans notre exemple, il y a trois groupes : [ 1 | 1 et 2 | 2 ]. Les découvertes d’objets du type B sont significativement (au sens statistique) plus proches du gisement que celles des autres types (A, C, D). Elles appartiennent au groupe 1. Les objets du type A sont quant à eux significativement plus éloignés du gisement (groupe 2). Les types D et C appartiennent aux deux groupes (1 et 2).

Le test permet de passer d’une échelle quantitative (un semi de points) à une échelle ordinale (un classement des types en groupes). Effectué sur un corpus consistant (≥ 30 individus) et pour plusieurs variables (analyses multifactorielles), le classement des types en groupes synthétise l’information et peut permettre d’explorer les relations entre les différents types d’objets.

Ce test de Dunn a été réalisé sur Xlstat (il peut également être effectué sur NCSS) (logiciels non-libres).

Référence :

Mode d’emploi pour l’utilisation de NCSS, p41. Lien

La topologie, une recette…

Comme indiqué dans notre dernier compte-rendu, nous revenons avec un exemple sur la topologie. La documentation en français étant parfois difficile à réunir, nous vous proposons une recette pas à pas.

La topologie en quelques mots…

La topologie fournit un cadre pour traiter des notions de continuité et de voisinage.

En géomatique, la topologie permet de réduire la taille du stockage (deux pays limitrophes partagent nécessairement la même frontière), de « nettoyer » des shapefiles etc. En sciences humaines, la topologie et les graphes permettent de modéliser des relations (qualitatives) quand les mesures (spatiales, quantitatives) son mal approchées.

Graphe du moulon A (ensemble de structures urbaines contigües, limité par des rues) de Saint-Antonin-Noble-Val (82), d’après le terrier de 1397 (crédit : Albane Rossi, Cécile Rivals)
Graphe du moulon (ensemble de structures urbaines contigües, limitées par des rues) de Saint-Antonin-Noble-Val (82), d’après le terrier de 1397
Copyright : Albane Rossi, Cécile Rivals

La topologie en pratique…

En nous servant de PostGIS, une base de données spatiale qui fournit des outils de topologie, nous présentons l’intégration d’un shapefile (géographique) dans un schéma topologique.

Début – Importer le shapefile test.shp dans PostGIS (avec le plugin PostGIS Shapefile and DBF loader). Dans l’interface graphique du plugin, lors de l’import du shapefile, définir son SRID comme 2154 (projection RGF93 / Lambert-93).

test.shp
Visuel du shapefile test.

1– Sous PostGIS,  dans l’onglet SQL, lancer :

CREATE EXTENSION postgis_topology;

Cette commande créée :

– l’extension topologique de PostGIS (postgis_topology) ;

– un  nouveau schéma (topology) ;

– dans ce schéma, deux tables : layer et topology ;

2– Sous PostGIS, dans l’onglet SQL, lancer :

SELECT topology.CreateTopology(‘ma_topo’, 2154, 0.5);

Où :

‘ma_topo’ est le nom du nouveau schéma topologique ;

2154 est la référence spatiale de ‘ma_topo’ elle doit être identique à celle de la colonne ‘geom’ (lors de l’import su shapefile);

0.5 est la tolérance de la topologie (voir ci-dessous) ;

Cette commande créée :

–  un  nouveau schéma topologique (‘ma_topo’) ;

–  quatre tables dans ce schéma : edge_data, face, node, relation ;

3– Sous PostGIS, dans l’onglet SQL, lancer :

SELECT topology.AddTopoGeometryColumn(‘ma_topo’, ‘public’, ‘test’, ‘topo’, ‘POLYGON’);

Où :

‘ma_topo’ est le nom du schéma topologique ;

‘public’ est le schéma géométrique ;

‘test’ est la table où sera enregistrée la colonne ‘topo’ ;

‘topo’ est la nouvelle colonne topologique dans la table ‘test’ ;

‘POLYGON’ est le type de données qui y sera enregistré ;

Cette commande créée :

– une colonne topologique dans la table ‘test’;

– une ligne dans la table ‘layer’;

4– Sous PostGIS,  dans l’onglet SQL, lancer :

UPDATE test SET topo = topology.toTopoGeom(geom, ‘ma_topo’, 1, 0.5);

Où :

‘test’ est la table qui va être modifiée ;

‘topo’ est la colonne qui va être modifiée ;

‘geom’ la colonne géométrique qui va être lue ;

‘ma_topo’ est le nom du schéma topologique ;

1 fait référence à l’identifiant enregistré dans la table layer ;

0.5 est la tolérance de la transformation topologique ‘geom’ -> ‘topo’ ;

La commande :

– remplit la colonne topo avec les données géométriques transformées (geom -> topo) ;

– remplit les quatre tables (edge_data, face, node, relation) du schéma ‘ma_topo’;

table edge_data
Aperçu de la table edge_data.

C’est la table edge_data qui contient l’information sur les relations de voisinage…

 panneau_attention A ce niveau des erreurs peuvent survenir.

Par exemple : « la fonction st_changeedgegeom(character varying, integer, geometry) n’existe pas ». Ceci est dû à un problème de search_path. Dans ce cas, fermer et relancer pgAdmin III.

Ou par exemple : « ERREUR:  Geometry SRID (un_nombre) does not match column SRID (un_autre_nombre)) ». Le SRID de la colonne ‘geometry’ ne correspond pas à celui de la colonne ‘topo’.

Fin– Importer dans un SIG (par exemple QGIS).

Topologie de test.shp
Résultat de l’opération de topologie sur le shapefile test.

La tolérance (une vertu)

Pour le shapefile test_1.shp (1), il peut y avoir des vides (gaps) et des superpositions (overlaps). L’outil Vérification de topologie de QGIS permet de les mettre en évidence (2).

shapefile test_1 avant (1) et après  (2) la vérification de sa topologie
Shapefile test_1 avant (1) et après (2) la vérification de sa topologie.

On peut savoir quelle est la distance maximale (entre deux points) de ces vides et de ces superpositions avec l’outil Mesurer une longueur de QGIS. Ici, la distance maximale est ≤ 5 m (on est en RGF93). C’est ce paramètre que l’on va rentrer dans les requêtes SQL : CreateTopology et toTopoGeom (voir ci-dessus).

SELECT topology.CreateTopology(‘ma_topo’, 0, 5);
SELECT topology.AddTopoGeometryColumn(‘ma_topo’, ‘public’, ‘test’, ‘topo’, ‘POLYGON’);
UPDATE test SET topo = topology.toTopoGeom(geom, ‘ma_topo’, 1, 5);

Il pourra encore apparaitre des erreurs qu’il faudra chercher à identifier de manière ad hoc, par exemple en levant des exceptions (voir les liens ci-dessous).

Résultat :

topologie de test_1.shp avec une tolérance de 5 degrés
Topologie de test_1.shp avec une tolérance de 5 m.

Si la tolérance avait été nulle :

SELECT topology.CreateTopology(‘ma_topo’, 0, 0);
SELECT topology.AddTopoGeometryColumn(‘ma_topo’, ‘public’, ‘test’, ‘topo’, ‘POLYGON’) As new_layer_id;
UPDATE test SET topo = topology.toTopoGeom(geom, ‘ma_topo’, 1, 0);
topologie de test_1.shp sans tolérance (tolérance=0)
Topologie de test_1.shp sans tolérance (tolérance=0).

Liens sur la topologie dans PostGIS :

simplifier un ensemble de polygones limitrophes (départements)

nettoyer un ensemble de lignes (réseau routier)

Une excellente manière de continuer à ‘topologiser’ en bandes dessinées  :

le Topologicon.pdf