3  PARTIE 2: Analyse de données appliqué aux textes

3.0.1 Introduction

Dans l’approche proposée par l’école française d’analyse de données (Beaudouin, 2016), le principe général de la statistique textuelle est de mettre les méthodes de l’analyse des données - des méthodes généralistes de tableaux de données (analyses factorielles, classifications) - au service d’une analyse exploratoire des textes.

Le principe est toujours le même:

  • construction d’un tableau de données : tableau lexical entier (TLE) et/ou transformation de ce tableau (tableau lexical agrégé, TLA).

  • analyse statistique, en commençant généralement par une analyse univariée (analyse du lexique), puis bivariée (test statistique), puis multivariées (analyse factorielles et classifications).

Dans cette séance on présentera donc une en quelque sorte “analyse canonique”, telle que présente dans des publications historiques utilisant la statistique textuelle en sciences sociales francophones (Guérin-Pace, 1997).

On suppose que le corpus est construit (cf. séance 1).

Les tableaux et analyses proposées ici portent sur des calculs de fréquences de mots. D’autres tableaux sont possibles (co-fréquences saisies par les cooccurrences).

3.0.2 Données de l’exercice

La première partie de la séance portera sur une version simplifiée de données d’enquête.

3.0.2.1 L’enquête Eurobroadmap “Mental Maps of Students”

L’enquête Eurobroadmap « Mental Maps of students » fut menée dans le cadre du projet de recherche Eurobroadmap du 7e PCRD de la Commission Européenne (Beauguitte et al., 2012). Ce projet de recherche européen avait pour objectif de saisir la place de l’Europe dans le monde à travers différentes thématiques (politique, économique, etc.).

Cette enquête s’intéressait aux représentations de l’Europe dans le monde du point de vue d’étudiants en fin de premier cycle universitaire (niveau L3). Elle reposait sur la passation d’un questionnaire auto-administré auprès de 10 000 étudiants de niveau Licence 3 répartis dans 18 pays du Monde entre juillet 2009 et 2010. On travaillera ici sur une version réduite de la base de données (sélection de pays d’enquête et de variables).

Les données textuelles correspondent au module D du questionnaire: une question ouverte, proposée dans la langue nationale du pays d’enquête; recourant à la technique des mots associés : « Quels sont pour vous les mots que vous associez le plus à “Europe”. Choisissez 5 mots au maximum » (pour plus d’information sur l’analyse lexicale de cette enquête voir Brennetot et al., 2013).

Seule une sélection de quatre pays d’étude disponibles dans la base initiale a été retenue pour simplifier l’exercice.

3.0.3 Préparation des données et de l’espace de travail

3.0.3.1 import des données et selection des pays d’étude

# chargement du tableau
EBM_df <- read.csv("data/tabquest3_V9.csv",sep=c(";"),
                   fileEncoding = "UTF-8")

# impression de la liste des Etats
print(unique(EBM_df$G_State))
 [1] "AZE" "BEL" "BRA" "CHN" "CMR" "EGY" "FRA" "HUN" "IND" "MDA" "MLT" "PRT"
[13] "ROU" "RUS" "SEN" "SWE" "TUN" "TUR"
# selection de pays
selcountry_chr1 <- c("CMR","FRA", "SWE","TUR" )
print(selcountry_chr1)
[1] "CMR" "FRA" "SWE" "TUR"
# filtre
EBM_sel_df <- EBM_df[EBM_df$G_State %in% selcountry_chr1,]

3.0.3.2 Suppression des non-réponses

# suppression des non-réponses
EBM_sel_df$D2_Nbansw<- as.numeric(EBM_sel_df$D2_Nbansw)
EBM_sel_df <- EBM_sel_df[EBM_sel_df$D2_Nbansw>0,]

3.0.3.3 Assemblage des réponses dans un même character

Les réponses à la question posée sont stockées dans les variables l’identifiant de colonne commence par D2.

Dans la mesure où l’ensemble des réponses (“5 mots”) sont stockées dans cinq champs différents, on procède à leur assemblage dans un caractère unique qui vaudra comme un “texte” correspondant à chaque répondant. On pourrait tout aussi bien choisir de travailler sur une seule colonne (D2_anws1).

# assemblage des mots dans un character unique
QuestD2_assembled_chr <- paste( EBM_sel_df$D2_answ1,
                                EBM_sel_df$D2_answ2,
                                EBM_sel_df$D2_answ3,
                                EBM_sel_df$D2_answ4,
                                EBM_sel_df$D2_answ5,
                               sep = " ")

# suppression des espaces vides avec la fonction gsub
QuestD2_assembled_chr  <- gsub(pattern="\\s+$","",QuestD2_assembled_chr)

3.0.4 Chargement des packages

Pour la suite du travail, nous avons de nouveau besoin des packages de quanteda ainsi qu’un ensemble de packages utiles pour l’analyse de données:

  • FactoMineR: est un package généraliste permettant d’effectuer des analyses factorielles et des classifications.

  • factoextra et explor sont des packages permettant la visualisation des sorties d’analyse factorielle (produites par FactoMineR).

# quanteda et ses dépendances
library(quanteda)
Package version: 3.3.1
Unicode version: 15.0
ICU version: 72.1
Parallel computing: 2 of 2 threads used.
See https://quanteda.io for tutorials and examples.
library(quanteda.textstats)
library(quanteda.textplots)

# Factominer pour l'analyse de données
#install.packages("FactoMineR")
library(FactoMineR)

# Outils de visualisation des analyses factorielles
#install.packages("factoextra")
#install.packages("explor")
library(factoextra)
Loading required package: ggplot2
Welcome! Want to learn more? See two factoextra-related books at https://goo.gl/ve3WBa
library(explor)

3.0.5 Définition du corpus d’étude et segmentation

Tokenisation, assignation des métadonnées et des id

# selection du texte à utiliser
EBM_chr <- QuestD2_assembled_chr

# segmentation
EBM_tokens <- tokens(EBM_chr)

# définition des métadonnées
docvars(EBM_tokens) <- EBM_sel_df

# définition des noms
docnames(EBM_tokens) <- EBM_sel_df$Code

print(EBM_tokens)
Tokens consisting of 2,314 documents and 144 docvars.
CMR-BUA-ART-037 :
[1] "advanced" "country" 

CMR-BUA-ART-040 :
[1] "developed" "populated" "rich"      "advanced"  "exploiter"

CMR-BUA-ART-042 :
 [1] "advance"      "not"          "corrupt"      "respect"      "for"         
 [6] "constitution" "developed"    "no"           "civil"        "wars"        

CMR-BUA-ART-044 :
[1] "high"     "standard" "of"       "living"   "region"  

CMR-BUA-ART-045 :
[1] "highly"         "industrialized" "selfish"        "exploitory"    

CMR-BUA-ART-046 :
[1] "land"       "of"         "high"       "technology"

[ reached max_ndoc ... 2,308 more documents ]

3.0.5.1 Analyse du lexique

# création de la dfm
EBM_dfm <- dfm(EBM_tokens)

# calcul du lexique
textstat_frequency(EBM_dfm)
# visualisation sous la forme d'un wordcloud
textplot_wordcloud(EBM_dfm)

# identification de termes
kwic(EBM_tokens, pattern="not")
kwic(EBM_tokens, pattern="not") %>% 
  textplot_xray()

3.0.6 Construction d’un tableau lexical agrégé (TLA)

Dans le cadre de cette séance, chercherons l’existence de différences lexicales relativement à des variables caractérisant les étudiant·es, dans cet exemple le pays d’enquête.

Pour tester ces hypothèses, la plupart des méthodes proposées par la suite procèdent par l’analyse de tableaux dérivés du TLE (dfm): des tableaux lexicaux agrégés (TLA).

Les TLA sont des tableaux de contingence : ils représentent la sommes des fréquences de termes par sous-ensemble du corpus, définis à travers une modalité d’une variable qualitative nominale (ici G_country).

Dans quanteda, la construction du TLA s’effectue avec la fonction dfm_group() qui va procéder à l’agrégation des fréquences selon une variable d’agrégation identifiée par le paramètre group.

L’indicateur de sparcity (“rareté”) donne la proportion de cellules vides dans le tableau. Malgré l’agrégation, il reste relativement elevé.

# création d'un TLA selon la modalité de G_state (pays)
EBM_country_dfm <- dfm_group(EBM_dfm,groups=G_State)
print(EBM_country_dfm)
Document-feature matrix of: 4 documents, 2,323 features (66.28% sparse) and 2 docvars.
     features
docs  advanced country developed populated rich exploiter advance not corrupt
  CMR       35      39       195        12  141        22       5   4       2
  FRA        3       2        15         0   16         0       0   1       0
  SWE        1       1         1         1    4         0       0   4       0
  TUR        1       4        93         0   15         2       0   4       3
     features
docs  respect
  CMR       5
  FRA       4
  SWE       0
  TUR       7
[ reached max_nfeat ... 2,313 more features ]

3.0.7 Analyse des spécificités lexicales

Une première analyse consiste donc à procéder à un test statistique pour identifier les termes sur- et sous-représentés de manière significative par rapport à des distributions théoriques. Il existe différents tests statistiques pour mesurer les spécificités lexicales (cas du test de Lafon - 1980, dans TXM, test du chi2 - exemple dans Guérin-Pace, 1997).

Les termes dépassants le seuils statistiques fixé pour le rejet de l’hypothèse 0 (-3.841 et 3.841 pour le Chi2) sont dits spécifiques. On peut calculer des spécificités positives (surreprésentations) ou négatives (sous-représentations). Ceux situés en dessous de ce seuil sont dits banaux.

Quanteda utilise un test du Chi2 pour mesurer les écarts entre fréquences observées et fréquences estimées via la fonction textstat_keyness(). Cette fonction s’applique directement sur une dfm sur laquelle on a préalablement procédé à un regroupement (un TLA donc).

L’opération nécessite de définir une modalité cible (target), qui servira de référence pour le calcul du test. En effet, le test de spécificité cherche à établir des spécificités lexicales pour le sous-ensemble décrit par la modalité, par rapport au reste du corpus. En dehors des cas des analyses portant sur des variables binaires (deux modalités), le résultats ne permet donc pas d’identifier à laquelle des autres modalités il s’oppose.

Dans le cadre de cette analyse, on a procédé au préalable à un filtre pour ne retenir que les termes ayant une fréquence globale supérieur à 5 dans l’ensemble du corpus, avec la fonction dfm_trim vue plus haut.

# filtrage sur un nombre de fréquences
EBM_country_dfm_sel <- dfm_trim(EBM_country_dfm, min_termfreq = 5)

# test des spécificités
keyness_df <- textstat_keyness(EBM_country_dfm, target = "FRA")

as.data.frame(keyness_df)

Le résultat est stocké sous la forme d’un data.frame présentant, pour chaque forme, le résultat du test du Chi2, la p-value associée, sa fréquence dans le reste du corpus (appelée “n_reference”) et sa fréquence “locale” (dans le sous ensemble considéré, “n_target”).

Dans cette sortie, la fréquence globale n’apparait directement dans le tableau. Il faut donc procéder à une somme entre ces deux colonnes pour retrouver cette information.

# test des spécificités
keyness_df$global <- keyness_df$n_target+keyness_df$n_reference
as.data.frame(keyness_df)

3.0.7.1 Visualisation graphique des spécificités

Quanteda propose une méthode de visualisation graphique des chi2 (diagramme à barres) calculés via l’outil textplot_keyness().

textplot_keyness(keyness_df, labelsize = 2)

3.0.8 Exercice

A partir des données manipulées lors de la première partie de la journée, procédez à une analyse multifactorielle.

# on utilise la fonction de base saveRDS
JO_tokens <- readRDS("data/corpusJOannote.RDS")

# visualistion du tableau de données
head(docvars(JO_tokens))
# pour rappel la liste des period
unique(docvars(JO_tokens)$period)
[1] "Londres2012"  "Beinjing2008" "Rio2016"      "Tokyo2021"   

Bloc disponible pour réaliser l’exercice

3.0.8.1 Bilan

En tant qu’outil de statistique bivariée, l’analyse des spécificités a ses limites: elle ne permet pas d’analyser les spécificités de chaque texte l’un relativement à l’autre.

L’étape suivante consiste donc à procéder à une analyse factorielle des correspondances (AFC) sur le TLA, utilisé comme un tableau de contingence.

3.0.9 Analyse des correspondances appliquée au TLA

3.0.9.1 Principe général de l’AFC

L’analyse factorielle des correspondances (parfois simplement dite “analyse des correspondances”) nécessite elle aussi la transformation de données brutes, ici un corpus, en un tableau de contingence.

Ce tableau croise deux ensembles d’éléments, un ensemble I (individus ou observations) et un ensemble J (variables ou attributs). Au croisement d’une ligne et d’une colonne, on obtient le nombre d’occurrences de l’attribut j dans l’observation i, soit k (i, j). Il s’agit donc de ce que nous avons désigné comme un TLA.

Pour comparer la distribution des deux ensembles d’éléments, les profils de ligne et de colonnes sont calculés.

L’idée principale est de réduire la complexité du nuage et de trouver une façon de représenter la plus grande part de l’information dans un espace de dimension inférieure. Pour cela, le centre de gravité du nuage est calculé et la dispersion du nuage autour de son centre est mesurée (inertie).

Ensuite, les axes factoriels sont construits. Les points sont projetés sur ces axes, et leurs coordonnées sur ces axes sont appelées facteurs. Dans le plan défini par les deux premiers axes, nous pouvons avoir la meilleure projection du nuage (qui minimise la perte d’informations).

Un trait distinctif de l’analyse de correspondance est la symétrie parfaite des rôles assignés aux deux ensembles I et J. Cela permet la représentation simultanée des deux nuages sur les mêmes axes (donc sur le même plan factoriel).

L’objectif principal est de visualiser la distance entre les observations ou entre les attributs (variables): cette représentation permet de visualiser l’écart par rapport à une distribution aléatoire.

Elle est donc un outil d’exploration de données permettant d’observer conjointement les oppositions entre attributs (modalités de variables) et individus, donc leurs distances relatives.

Attention: Si l’analyse croisée des coordonnées des individus et des attributs est possible, il ce n’est pas le cas des cosinus et des contributions, puisque le calcul de ces éléments s’effectue sur les profils en ligne et en colonne (et non un croisement des deux).

Pour en savoir plus sur l’AFC voir Sanders, 1989, Lebart et Salem, 1994, Lebart et al., 2006.

3.0.9.2 Documentation dans R

De nombreux manuels et tutoriels existent sur l’application des méthodes d’analyse factorielles et leur visualisation dans R. On peut donc s’y référer pour comprendre la partie technique des applications et la méthodologie générale de l’AFC.

  • Husson, F. (dir.). (2018) R pour la statistique et la science des données. Presses Universitaires de Rennes

  • Husson, F. Lê S. & Pagès J. (2016) Analyse de données avec R, 2e édition revue et augmentée. Presses Universitaires.

  • analyse-R Site personnel de J. Larmarange et al.

3.0.9.3 Application

Dans notre exemple, même principe que lors de la construction du TLA utilisé pour l’analyse des spécificités.

Avant de procéder on procède à la réduction de la taille de la matrice (dfm) puis une transformation de l’objet en objet matrix (changement de format) pour permettre son utilisation dans un outil généraliste d’analyse de données (hors de la suite quanteda).

# création d'un TLA selon la modalité de G_state (pays)
EBM_country_dfm <- dfm_group(EBM_dfm,groups=G_State)

# filtrage sur un nombre de fréquences
EBM_country_dfm_sel <- dfm_trim(EBM_country_dfm, min_termfreq = 5)

# transformation du tableau en matrice
EBM_country_mat <- convert(EBM_country_dfm_sel,to="matrix")
# transposition de la matrice pour faire apparaître les modalités en colonnes
EBM_country_mat <- t(EBM_country_mat)

Dans l’exemple suivant, on applique la méthode d’analyse factorielle - fonction CA() proposée par le package FactoMineR. D’autres possibilités existent dans R, comme avec la fonction dudi.coa du package ade4.

Par défaut, seuls les 5 premiers axes sont conservés, ce qui est modifiable avec l’argument ncp. De plus, la fonction affiche par défaut un graphique des résultats avant de renvoyer les résultats de l’AFC Ce graphique peut être désactivé avec graph = FALSE.

# calcul de l'AFC
afc_country <- CA(EBM_country_mat, 
                  graph = FALSE)

# contenu de l'objet CA
print(afc_country)
**Results of the Correspondence Analysis (CA)**
The row variable has  357  categories; the column variable has 4 categories
The chi square of independence between the two variables is equal to 7851.969 (p-value =  0 ).
*The results are available in the following objects:

   name              description                   
1  "$eig"            "eigenvalues"                 
2  "$col"            "results for the columns"     
3  "$col$coord"      "coord. for the columns"      
4  "$col$cos2"       "cos2 for the columns"        
5  "$col$contrib"    "contributions of the columns"
6  "$row"            "results for the rows"        
7  "$row$coord"      "coord. for the rows"         
8  "$row$cos2"       "cos2 for the rows"           
9  "$row$contrib"    "contributions of the rows"   
10 "$call"           "summary called parameters"   
11 "$call$marge.col" "weights of the columns"      
12 "$call$marge.row" "weights of the rows"         

CA de FactoMineR produit un objet “CA”: un format de liste particulier, contenant les informations nécessaires pour l’interprétation des sorties.

# information sur les colonnes
afc_country$col
$coord
         Dim 1       Dim 2       Dim 3
CMR -0.6376353 -0.27674762 -0.02198346
FRA  1.0347203 -0.54730884 -0.13353480
SWE  0.4753762 -0.05728668  1.77078676
TUR  0.1782719  0.89206799 -0.06260576

$contrib
        Dim 1       Dim 2      Dim 3
CMR 42.583405 10.86740170  0.2090908
FRA 53.731974 20.36638733  3.6967740
SWE  1.658447  0.03262844 95.0618811
TUR  2.026174 68.73358253  1.0322541

$cos2
         Dim 1        Dim 2        Dim 3
CMR 0.84064443 0.1583563495 0.0009992171
FRA 0.77134518 0.2158081175 0.0128467062
SWE 0.06715777 0.0009752785 0.9318669502
TUR 0.03822180 0.9570643710 0.0047138297

$inertia
[1] 0.2241245 0.3082090 0.1092614 0.2345454
# informations sur les lignes
afc_country$row$coord[1:10]
 [1] -0.6975477 -0.7062585 -0.4538009 -0.8298955 -0.5874761 -0.8563911
 [7] -0.9586094  0.1270672 -0.2226373  0.2065843
# informations sur les "valeurs propres" (eigen values - quantité de variance par axe)
afc_country$eig
      eigenvalue percentage of variance cumulative percentage of variance
dim 1  0.4424470               50.49957                          50.49957
dim 2  0.3265871               37.27567                          87.77523
dim 3  0.1071061               12.22477                         100.00000

Elles peuvent notamment être utilisées pour produire les différentes visualisations graphiques (avec plot ou le package ggplot2 par exemple).

Des packages comme factoextra proposent des visualisations pré-définies de ce type d’objet.

3.0.10 Analyse des valeurs propres

Les valeurs propres et le pourcentage de variance expliquée donne une idée de la puissance explicative de chaque axe. Il s’agit de mesures de la quantité d’information résumée par l’axe (en valeur absolue et en valeur relative).

Le calcul des pourcentages de variance cumulée permet d’identifier le nombre d’axes à retenir pour l’analyse.

# valeurs propres
fviz_screeplot(afc_country)

3.0.10.1 Contributions des axes

De même, il est possible d’analyser les contributions des modalités (colonnes) à chaque axe axes.

Cette information est complémentaire la puissance explicative de chacun d’entre eux.

# valeurs propres
fviz_contrib(afc_country, choice = "col", axes = 1)

3.0.10.2 Coordonnées des attributs / modalités de variables sur les axes

Enfin, conjointement à leur contribution, on analyse les coordonnées de chaque modalité de variable sur les axes. On procède généralement à la projection des coordonnées sur un graphique en deux dimensions croisant les coordoonées de deux axes (ici axe 1 et 2): un plan factoriel.

Plus une variable est éloignée du centre de gravité (0), plus le profil des individus qu’elle décrit se différencie du reste de l’ensemble.

Plus une variable est proche d’un axe, plus cela signifie que sa qualité de représentation sur cet axe est importante. Cette information doit croiser l’analyse des contributions (cos2 et pourcentage de variance expliquée élevés).

Enfin, notez que le signe des coordonnées est défini de manière arbitraire: il ne s’agit que d’une position relativement à une ordonnée. Le signe des coordonnées n’a aucune valeur en tant que tel.

Elle permet d’identifier des individus qui s’opposent sur un axe (Cameroun vs. France sur l’axe 1) ou au contraire qui se ressemblent (France et Sudède sur l’axe 1).

# Visualisation des colonnes
fviz_ca_col(afc_country)

3.0.10.3 Représentation des individus (lignes) sur le plan factoriel

Le principe de l’analyse des invdividus est le même.

Le problème d’une telle représentation est qu’elle devient rapidement peu lisible.

# Visualisation des lignes avec factoextra
fviz_ca(afc_country)

3.0.10.4 Visualisation intéractive avec explor

Le package explor permet d’explorer les sorties d’analyse factorielles de manière intéractive.

Note: Au-delà de la statistique textuelle, ce package s’applique à toute type d’analyse factorielle produite via les packages généralistes FactoMineR, ade4 et MASS).

#explor(afc_country)

3.0.10.5 Exercice

A partir des données manipulées lors de la première partie de la journée, procédez à une AFC sur le tableau de données.

3.0.10.6 Exports

En plus des exports graphiques, il est possible de procéder à l’export des tableaux ou variables.

Exemple, ici un tableau comprenant les informations relatives aux individus.

# création d'un tableau réunissant l'ensemble des informations
tab_indiv <- cbind(row.names(afc_country$row$coord),
                   as.data.frame(afc_country$row$coord),
                   as.data.frame(afc_country$row$contrib),
                   as.data.frame(afc_country$row$cos2))

# réécriture des noms de colonnes
nom_colonnes <- colnames(tab_indiv)
nouveau_nom_colonnes <- c("mots",
                          paste("coord",nom_colonnes[2:4],sep="_"),
                          paste("contrib",nom_colonnes[5:7],sep="_"),
                          paste("cos2",nom_colonnes[7:9],sep="_"))
colnames(tab_indiv) <- nouveau_nom_colonnes

# export 
write.csv(tab_indiv,"outputs/afc_country_indiv.csv",fileEncoding = "UTF-8")

3.0.11 Méthodes de classification: Classification Ascendante Hiérarchique

3.0.11.1 Principe général

Un des objectifs de la statistique textuelle peut-être de rechercher des similitudes entre les textes: est ce que certains texte ressemblent à d’autres du point de vue du lexique utilisé? Inversement, il est possible également de chercher des similitudes dans l’usage des mots (selon le contexte)?

Une grande diversité d’algorithmes de classification existent appliqués à l’analyse textuelle (classifications ascendantes, descendantes, méthodes de partition comme les kmeans).

Les deux premiers exemples montreront l’application d’une méthode de classification non-supervisée (on essaie de déterminer des classes uniquement à partir des données).

Elle est dite hiérarchique parce qu’elle construit des hiérarchie entre des niveaux d’agrégation possibles.

Dans le cas des classifications hiérarchiques, on parle de classification ascendante ou descendante pour caractériser le sens dans lequel l’algorithme a procédé pour construire la hiérarchie. Dans le cas des classifications ascendantes, l’agrégation procède au regroupement successif d’unités élémentaires (ici des mots) en fonction de leur ressemblance selon des critères de ressemblance. A l’inverse, une classification descendante hiérarchique (CDH) possède par division d’une classe initiale unique en sous ensembles.

  • La première étape considère les n individus (considérés comme autant de classes) caractrisés par p variables. La première étape consiste au regroupement des 2 individus les plus proches dans une première classe.

  • La deuxième étape dispose à ce niveau de (n-1) classes postérieures au regroupement des deux premiers individus. De la même manière, l’agorithme procède au regroupement des deux classes les plus semblables pour procéder au regroupement des deux classes les plus proches.

  • On procède ainsi de la même manière jusqu’à obtenir une classe unique regroupant l’ensemble des individus.

Cette procédure nécessite de définir un critère de ressemblance entre les individus (les plus courants: la distance euclidienne, chi2, manhattan, ces deux dernières sont utilisées pour les sorties d’AFC), la distance entre les classes (critères d’agrégation, ici méthode de ward).

Pour un point général sur les CAH, on peut se référer en géographie à Sanders 1989, en mathématique à Lebart et al, pour l’application de ces méthode à l’analyse de textes au Chapitre 4 de Lebart et Salem, 1994.

3.0.11.2 Implémentation dans R

Les liens suivants proposent deux fiches sur l’utilisation de la méthode HCPC dans R

  • https://larmarange.github.io/analyse-R/classification-ascendante-hierarchique.html

  • http://www.sthda.com/english/articles/31-principal-component-methods-in-r-practical-guide/117-hcpc-hierarchical-clustering-on-principal-components-essentials/

3.0.11.3 CAH sur les coordonnées de l’AFC

Dans le cas de l’analyse de tableaux de contingences (comme nos TLA), une procédure classique consiste à procéder à une CAH sur les coordonnées de l’AFC.

La fonction HCPC() du package FactoMineR permet d’effectuer directement cette opération sur un objet de type CA (sortie d’AFC).

Le paramètre metric permet de caractériser la métrique de distance utilisée pour calculer les distances entre les classes (“manhattan”, ou “chi2”).

Le paramètre method permet d’indiquer le critère d’agrégation utilisé.

res.hcpc <- HCPC(afc_country,
                 metric="manhattan",
                 method="ward",
                 nb.par=3,
          graph = FALSE)

3.0.11.4 Dendrogramme

Pour étudier le résultat d’une CAH on passe généralement par l’analyse du dendrogramme (ou arbre), qui permet de visualiser la hiérarchie entre les classes par rapport à leur inertie. L’inertie, permet de visualiser la distance et donc en négatif la proximité entre chacune des classes formées.

# représentation de l'inertie sous la forme d'un diagramme à barre
plot(res.hcpc, choice = "bar")

# représentation du dendrogramme
plot(res.hcpc, choice="tree", cex=0.5)

# dendrogramme en 3D
plot(res.hcpc, choice="3D.map", axes=c(1,2))

# représentations avec des couleurs
fviz_dend(res.hcpc, 
          how_labels = TRUE,             # Vizualise labels
          cex = 0.2,                     # Label size
          palette = "jco",               # Color palette see 
          rect = TRUE, rect_fill = TRUE, # Add rectangle around groups
          rect_border = "jco",           # Rectangle color
          labels_track_height = 0.2,    # Augment the room for labels
          horiz=TRUE
          
          )
Warning: The `<scale>` argument of `guides()` cannot be `FALSE`. Use "none" instead as
of ggplot2 3.3.4.
ℹ The deprecated feature was likely used in the factoextra package.
  Please report the issue at <https://github.com/kassambara/factoextra/issues>.

3.0.11.5 Analyse du contenu des classes

Certaines visualisations optent plutôt pour une représentation sur le plan factoriel d’origine.

# Représentation sur le plan factoriel.
fviz_cluster(res.hcpc,
             repel = TRUE,            # Avoid label overlapping
             show.clust.cent = TRUE, # Show cluster centers
             palette = "jco",         # Color palette see ?ggpubr::ggpar
             ggtheme = theme_minimal(),
             main = "Factor map"
             )

3.0.12 Sorties de l’objet HCPC

Comme l’AFC, les classifications produites avec FactoMineR se présentent sous la forme de listes décrivant les individus et modalités de variables intégrées à l’analyse.

# caractéristique des variables
res.hcpc$desc.var
$`1`
     Intern %    glob % Intern freq Glob freq        p.value    v.test
CMR 73.416385 46.340103        3477       4153  0.000000e+00       Inf
SWE  2.174831  3.247043         103        291  1.714247e-09  -6.02280
TUR 16.047297 28.207989         760       2528 6.353045e-164 -27.28522
FRA  8.361486 22.204865         396       1990 3.293842e-255 -34.12361

$`2`
     Intern %   glob % Intern freq Glob freq        p.value    v.test
TUR 71.797753 28.20799        1278       2528  0.000000e+00       Inf
FRA  7.977528 22.20486         142       1990  6.477406e-69 -17.54516
CMR 17.303371 46.34010         308       4153 5.509969e-179 -28.52642

$`3`
     Intern %    glob % Intern freq Glob freq        p.value     v.test
FRA 59.362224 22.204865        1452       1990  0.000000e+00        Inf
SWE  5.560098  3.247043         136        291  9.558245e-13   7.136723
TUR 20.032706 28.207989         490       2528  6.020306e-27 -10.748546
CMR 15.044971 46.340103         368       4153 3.842957e-315 -37.950107

attr(,"class")
[1] "descfreq" "list"    
# caractéristiques des individus (ici les parangons)
res.hcpc$desc.ind$para
Cluster: 1
     rich countries   country 
0.1315946 0.2034988 0.2142247 
------------------------------------------------------------ 
Cluster: 2
civilization   economical  imperialist 
   0.1970385    0.2608485    0.2816138 
------------------------------------------------------------ 
Cluster: 3
cooperation      future       union 
  0.2403084   0.3649488   0.4384372 
#tableau de données originel comprenant la classif
head(res.hcpc$data.clust)
# avec donc le résultat de la classification
res.hcpc$data.clust$clust
  [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [38] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
 [75] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2
[112] 1 1 1 1 2 1 2 1 1 1 1 1 1 1 2 1 1 2 2 1 1 1 1 1 1 2 1 2 2 2 2 1 1 1 1 2 2
[149] 2 2 2 1 1 2 1 2 1 1 2 1 1 2 2 2 2 2 2 2 2 2 2 2 2 1 1 2 1 2 2 2 2 2 2 2 2
[186] 2 2 1 2 1 1 2 1 2 2 2 2 2 2 2 3 3 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
[223] 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 2 3 2 2 3 2 2 2 2 2 2 2 2 2 3 2 3 2 2
[260] 3 3 2 3 3 2 2 3 2 3 3 2 3 3 3 3 3 3 3 2 2 3 3 3 2 2 3 3 2 3 3 2 3 2 2 3 3
[297] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
[334] 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
Levels: 1 2 3

3.0.12.1 Exercice

A partir des données manipulées lors de la première partie de la journée, procédez à une analyse multifactorielle. Rappel, l’objet créé pour réaliser l’analyse factorielle s’appelle afc_JO.

3.0.12.2 Bilan sur les analyses factorielles et les classifications

A partir de ce premier modèle d’analyse, une mutitude d’analyses complémentaires sont possibles en modifiant les différents paramètres

  • changer les unités lexicales (application à des segments répétés),

  • tester d’autres algorithmes de classification (comparaison avec un calcul de distance euclidienne, comparaison avec des méthodes de partitionnement: cas des kmeans).

Comme l’expliquent Lebart et Salem dans leur ouvrage, il est intéressant de mener conjointement plusieurs analyses pour tester leur robustesse, notamment dans le cas des méthodes de classification (cf. Lebart et Salem, Chapitre 4).

3.0.12.3 Segments répétés (ngrams)

Il est possible par exemple de procéder aux traitements en procédant cette fois-ci non plus aux analyses sur des mots mais sur des segments répétés (ngrams)

# cas des bigram
myngrams <- tokens_ngrams(JO_tokens, n = 2, concatenator = " ")

# création d'un ensenbme de ngrams de 1 à 4
myngrams <- tokens_ngrams(JO_tokens, n = c(1:4), concatenator = " ")

textstat_frequency(dfm(myngrams, tolower = FALSE))

3.0.13 Conclusion de la PARTIE 2

3.0.13.1 Derrière un ensemble limité d’exemples, une diversité de possibilités

Même si nous avons présenté une forme canonique d’analyse de données, une grande diversité d’adaptation est possible (changements de paramètres, recours à d’autres types d’analyses: autres méthodes de classification, d’analyse factorielle).

La très riche littérature consacrée à l’analyse des données depuis les années 1970 permet de s’orienter de manière autonome dans l’univers des méthodes possibles.

L’intérêt néanmoins de la méthode réside peut-être dans ces observations de L. Lebart cité dans Beaudouin, 2016 (nous soulignons).

“L’association de l’analyse des correspondances avec les méthodes de classification (en particulier la classification ascendante hiérarchique) permet d’approfondir la compréhension des données et facilite l’interprétation. « Ainsi une méthode unique dont le formulaire reste simple est parvenue à incorporer des idées et des problèmes nombreux apparus d’abord séparément, certains depuis plusieurs décennies. », écrit (Benzécri, 1982, p. 102). Comme l’explique Ludovic Lebart (communication personnelle), l’idée était de proposer « des panoplies bien étalonnées (comme le duo analyse des correspondances - classification) pour appréhender la complexité, sans chercher à créer systématiquement une nouvelle méthode pour chaque nouveau problème ».

Plutôt qu’une profusion de méthodes, difficiles à appréhender pour des non statisticiens, l’analyse des données offre un cadre unifié d’analyse avec le couple analyse des correspondances et classification. Celui-ci est clairement pensé pour les utilisateurs et les praticiens, en accordant une place importante à la présentation des résultats.”

3.0.13.2 R: diversité des outils, interfaçage et modularité

Cette diversité de méthodes est renforcée par la diversité des outils possibles dans R pour réaliser le travail. Nous avons par exemple privilégié une combinaison quanteda / FactoMinerR (avec des outils de visualisation factoextra et explor) mais d’autres solutions sont possibles : tidytext ou tm pour la manipulation de données, ade4 ou MASS pour l’analyse de données.

L’un des point fort de R est de pouvoir très facilement changer d’outil sans changer d’environnement de travail, de le connecter les fonctions spécialisées pour l’analyse textuelle à d’autres outils (visualisation, analyse statistique) voire créer des procédures sur mesure (création de vos propres sorties).

Le manque de visualisation intéractive qui donnait un avantage aux logiciels avec inerface graphique tend à être compensé par le développement de packages de visualisation intéractive (cf. explor).

Les possibilités de répétabilité des méthodes facilitent finalement les phases de pré-traitement qui tendent à devenir chronophage sur un logiciel sans langage de programmation.

3.0.13.3 Des solutions en dehors de R

Dans les cas où l’environnement R ne vous conviendrait pas, d’autres logiciels permettent d’effectuer les opérations présentées.

C’est notamment le cas de TXM développé par C. Heiden, qui dispose d’un coeur de fonction similaire à l’enchaînement proposé dans la Partie 2 (partition du corpus/construction d’un TLA, test de spécificité - test de Lafon, analyse des correspondances, CAH).

3.0.14 En ouverture : l’exemple des cooccurrences

Retrouver une place aux cooccurrences

textstat_collocations(JO_tokens)