lundi 15 juillet 2013

Retour à la statistique

Introduction

J'ai étudié et pratiqué la statistique de 1965 à 1978 puis je me suis tourné vers la science économique : même si de temps à autre il m'est arrivé de regarder des statistiques, ce n'était plus mon activité principale.

Je souhaite pouvoir ancrer de nouveau mon raisonnement dans le constat des faits : je vais donc me remettre à la statistique. Il me faut des outils puissants car compulser de volumineux tableaux de nombres pour les étudier à la main prendrait trop de temps. Je dois donc utiliser l'analyse des données.

Des logiciels existent pour cela (SAS etc.) mais je me méfie du logiciel en boîte, qui fait on ne sait comment des choses mystérieuses. Je vais donc commencer par écrire les programmes d'analyse des données, relançant ainsi le projet open source ANDON longtemps laissé en sommeil.

Les programmes que je publie en annexe sont proposés aux lecteurs de volle.com qui, conformément aux règles du logiciel libre, pourront si cela les intéresse les utiliser et les transformer à leur guise à la seule condition d'en indiquer la source.

*     *

Le cours à l'ENSAE dans les années 70 contient le formulaire des méthodes d'analyse factorielle et de classification automatique. Je dispose par ailleurs de Racket, dialecte de LISP sur lequel je me suis entraîné à programmer (ceux des lecteurs qui veulent utiliser ou examiner mes programmes doivent avoir au préalable téléchargé Racket).

Je commence par l'examen rapide d'un tableau de contingence, dont le principe est décrit dans un article d’Économie et statistique. Je programmerai ensuite l'analyse factorielle des correspondance puis l'analyse en composantes principales, associées chacune à un programme de classification ascendante hiérarchique. Enfin je m'attaquerai à l'analyse discriminante et, peut-être, à l'analyse canonique.

Il est facile de récupérer de gros tableaux statistiques sur le site de l'INSEE puis de les transcrire de telle sorte qu'il soit possible de les traiter sous Racket (cf. ci-dessous « Récupérer des données »). Je pourrai ainsi analyser des statistiques démographiques, l'indice de la production industrielle, les résultats des comptes trimestriels etc.

J'explorerai aussi les sites des services statistiques étrangers pour y trouver des informations analogues.

J'espère gagner ainsi une vue plus exacte et plus complète de la situation économique présente. Cela me prendra un peu de temps mais les outils dont je me serai doté me permettront de ne pas en perdre trop.

*     *

I - Récupérer des données

L'INSEE publie de très nombreux tableaux statistiques sur www.insee.fr. Ils sont téléchargeables sous Excel mais on ne peut pas les récupérer tels quels sous Racket par copier-coller : il faut les soumettre à un petit traitement.

En voici la recette :
  1. recherche des données : lancer une recherche sous Google, par exemple sur les mots « population france régions classes d'âge ». On voit apparaître un lien vers Estimation de la population au 1er janvier par région , département (1975-2012), sexe et âge (quinquennal, classes d'âge). Sur cette page se trouve un lien vers le document « estimation de la population par région, sexe et âge quinquennal – années 1975 à 2012 ». Il faut le télécharger puis l'ouvrir dans un tableur.
  2. sélectionner dans le document ci-dessus, par exemple, le tableau qui donne la ventilation de la population par région et classe d'âge (éviter les totaux en ligne et en colonne) et le copier. Le coller dans un traitement de texte selon le procédé « collage spécial – texte non formaté ».
  3. dans les nombres, les milliers sont séparés par une virgule ; les intitulés des classes doivent être retouchés : « Pays de la Loire » doit devenir « Pays-de-la-Loire », « 10 à 14 ans » doit devenir « 10-14 » , « 0 à 4 ans » doit devenir « 00-04 ». Il faut introduire un symbole qui marquera la case en haut à gauche du tableau, par exemple « X ». Le tableau ainsi modifié peut être recopié sous Racket. On y introduit les parenthèses qui le transforment en une liste et le tour est joué.
Ce traitement, dont la description peut sembler fastidieuse, ne prend que quelques minutes. Cela montre que l'on peut alimenter facilement les programmes d'analyse des données pour peu que les données soient présentées sous la forme d'un tableau Excel.

On verra annexe 1 les premières lignes du tableau, avant et après le traitement. Le tableau prêt pour être traité se trouve dans le fichier POPF12.rkt.

II - Une analyse rapide

Je vais faire une première analyse de ce tableau en utilisant le procédé décrit dans l'article « Une méthode pour lire et commenter automatiquement des grands tableaux statistiques », Économie et statistique, n° 52, 1974.

Le programme se trouve en annexe 2. Il permet d'identifier les cases du tableau qui apportent le plus d'information, puis de visualiser le « spectre » des régions et des classes d'âge dont la distribution s'écarte le plus de la distribution moyenne.

Le programme réalisé pour cette analyse n'utilise aucun des outils du calcul tensoriel.

Les résultats sont présentés en annexe 3. On saura beaucoup de choses après avoir examiné le tableau selon ce procédé. Dans beaucoup de cas cela suffira, il ne sera pas nécessaire d'aller plus loin. Si l'on veut avoir une vue plus précise il faudra cependant une analyse factorielle et une classification.

Je suggère aux auteurs des logiciels d'analyse des données (SAS, R etc.) d'introduire ce programme dans leur catalogue s'ils ne l'ont pas déjà fait.

III – Calcul tensoriel

Faire une analyse factorielle suppose de disposer des outils du calcul tensoriel.

Le programme se trouve en annexe 4. Il permet d'associer une matrice symétrique à une matrice quelconque, puis de la diagonaliser en identifiant ses vecteurs et valeurs propres.

IV – Analyse factorielle des correspondances

Une fois muni des outils du calcul tensoriel, la programmation de l'analyse des correspondances ne comporte pas de grande difficulté : il faut seulement être un peu minutieux. Le programme se trouve en annexe 5. Pour obtenir une bonne performance, j'ai programmé l'itération selon le procédé dont l'exercice "balistique" donne un exemple simple.

L'analyse fournit les résultats classiques : facteurs associés aux lignes et aux colonnes du tableau, associés aux « aides à l'interprétation » classiques (valeurs propres, contributions, cosinus carrés).

Le calcul des facteurs et des aides à l'interprétation est d'une rapidité convenable, quel que soit le rang du facteur (le programme est paramétré pour publier les résultats sur les quatre premiers axes).

Le programme se termine par le graphique représentant la projection sur le plan formé par un couple d'axes.

Les résultats peuvent être reportés par copier-coller sur un tableur, et quelques manipulations simples permettent encore de produire les graphiques usuels (annexe 6).

Des perfectionnements restent nécessaires pour associer automatiquement une étiquette aux points les plus significatifs : pour cela il faudra que je maîtrise l'interface graphique de Racket.

V - Classification ascendante hiérarchique

Le programme de la CAH associée à une AFC se trouve en annexe 7. Il fournit les nœuds de l'arbre et la hauteur de chaque nœud.

Reste à écrire le programme qui permet d'obtenir le dessin de l'arbre.

Les programmes ci-dessous sont en cours de mise au point :

VI - Analyse en composantes principales

VII - Analyse factorielle sphérique

VIII - Analyse discriminante

IX - Analyse canonique

4 commentaires:

  1. Beau travail ! Bon, je suis loin de tout comprendre, je vais essayer de l'étudier procédure par procédure.

    RépondreSupprimer
  2. Toujours très instructif, quoique pour moi les statistiques à ce niveau soient déjà un peu trop complexes. Cela me rappelle le khi2, covariance, etc ... du DEUG.

    RépondreSupprimer
  3. Ne gagneriez-vous pas en temps de programmation et en efficacité en optant pour le langage R, dédié aux statistiques et très accessible ?
    http://en.wikipedia.org/wiki/R_(programming_language)

    RépondreSupprimer
    Réponses
    1. R est très bien ! Mais j'aime bien programmer moi- même les algorithmes que j'utilise, d'abord pour le plaisir de la programmation, car c'est un exercice très ludique, aussi pour maîtriser entièrement mes calculs.
      Ceci dit, je ne prétends pas rivaliser avec R, qui est supérieur pour traiter les données plus compliquées que celles que je me propose d'analyser.

      Supprimer