Exploration interactive de résultats d’ACP/ACM avec explor

explor

explor est un package R qui permet l’exploration “interactive” des résultats d’une analyse exploratoire multidimensionnelle.

Pour le moment il est utilisable avec les types d’analyses suivants :

Méthode Fonction Package Notes
Analyse en composantes principales PCA FactoMineR -
Analyse des correspondances CA FactoMineR -
Analyse des correspondances multiples MCA FactoMineR -
Analyse en composantes principales dudi.pca ade4 Les variables supplémentaires qualitatives ne sont pas prises en charge
Analyse des correspondances dudi.coa ade4 -
Analyse des correspondances multiples dudi.acm ade4 Les variables supplémentaires quantitatives ne sont pas prises en charge
Analyse des correspondances multiples spécifique speMCA GDAtools -
Analyse des correspondances multiples mca MASS Les variables supplémentaires ne sont pas prises en charge
Analyse en composantes principales princomp stats Les variables supplémentaires ne sont pas prises en charge
Analyse en composantes principales prcomp stats Les variables supplémentaires ne sont pas prises en charge
Correspondance Analysis textmodel_ca quanteda.textmodels Only coordinates are available

La philosophie d’explor est de n’être qu’une interface de visualisation, et de ne rien “exécuter” par elle-même. Les analyses et calculs se font dans votre script R, et explor vous aide seulement à visualiser leurs résultats. L’idée est de conserver l’ensemble des commandes dans les scripts et de ne pas risquer d’être un obstacle à la reproductibilité des analyses.

Fonctionnalités

Pour chaque méthode, explor lance une interface Web interactive qui s’affiche soit directement dans RStudio, soit dans votre navigateur. Cette interface comprend une série d’onglets présentant différents tableaux et graphiques. Ceux-ci sont, autant que possible, “interactifs” : les résultats numériques sont affichés sous forme de tableaux dynamiques triables et filtrables (grâce au package DT), et les graphiques, générés pour la plupart par le package scatterD3, ont les fonctionnalités suivantes :

  • zoom avec la molette de la souris
  • déplacement avec la souris
  • affichage de tooltips au survol des points
  • mise en valeur des données correspondantes au survol des items de légendes
  • étiquettes déplaçables
  • sélection de points à l’aide d’un outil de type “lasso”
  • possibilité d’export du graphique actuel au format SVG
  • possibilité de récupérer le code R permettant de reproduire le graphique actuel dans un script ou un document
  • les modifications du graphique se font sous la forme de transitions animées

À noter que les interfaces sont traduites en français.

Utilisation

L’utilisation du package est très simple : il suffit d’appliquer la fonction explor() à l’objet résultant d’une méthode prise en charge.

prcomp, princomp et MASS::mca

Pour visualiser les résultats de ces fonctions, il suffit de passer l’objet résultat à explor().

Voici un exemple avec une ACP réalisée avec princomp :

data(USArrests)
pca <- princomp(USArrests, cor = TRUE)
explor(pca)

explor permet de visualiser des individus supplémentaires dont les coordonnées ont été calculées avec predict. Il suffit de les ajouter comme un élément nommé supi de l’objet résultat.

Voici un exemple avec prcomp :

pca <- prcomp(USArrests[6:50,], scale. = TRUE)
pca$supi <- predict(pca, USArrests[1:5,])
explor(pca)

Pour MASS::mca, explor() permet également la visualisation de variables qualitatives supplémentaires. Leurs coordonnées doivent être ajoutées comme un élément nommé supv de l’objet résultat. À noter qu’il est également préférable d’ajouter manuellement les noms de lignes à l’élément supi car predict ne les conserve pas :

library(MASS)
mca <- MASS::mca(farms[4:20, 2:4], nf = 11)
supi_df <- farms[1:3, 2:4]
supi <- predict(mca, supi_df, type="row")
rownames(supi) <- rownames(supi_df)
mca$supi <- supi
mca$supv <- predict(mca, farms[4:20, 1, drop=FALSE], type="factor")
explor(mca)

À noter que les réultats de ces trois fonctions sont assez limités, elles ne fournissent que les coordonnées des variables et des individus, pas de contributions ou de cosinus carrés par exemple.

Fonctions de FactoMineR

Pour les fonctions de FactoMineR prises en charge, il suffit de passer l’objet contenant les résultats directement àexplor().

Exemple d’analyse en composantes principales avec FactoMineR::PCA :

library(FactoMineR)
data(decathlon)
pca <- PCA(decathlon[,1:12], quanti.sup = 11:12)
explor(pca)

Exemple d’analyse des correspondances simples avec FactoMiner::CA :

data(children)
res.ca <- CA(children, row.sup = 15:18, col.sup = 6:8)
explor(res.ca)

Exemple d’analyse des correspondances multiples avec FactoMineR::MCA :

library(FactoMineR)
data(hobbies)
mca <- MCA(hobbies[1:1000, c(1:8,21:23)], quali.sup = 9:10, 
           quanti.sup = 11, ind.sup = 1:100)
explor(mca)

Fonctions d’ade4

Les résultats des fonctions d’ade4 prises en charge peuvent également être directement passées à explor().

Par exemple, pour visualiser les résultats d’une ACP :

library(ade4)
data(deug)
pca <- dudi.pca(deug$tab, scale = TRUE, scannf = FALSE, nf = 5)
explor(pca)

Des étapes supplémentaires sont nécessaires si on souhaite ajouter des éléments supplémentaires, car ade4 ne les inclut pas directement dans l’objet résultat. Il faut donc calculer les coordonnées de ces éléments avec suprow ou supcol, et les ajouter comme éléments supi (pour les individus supplémentaires) ou supv (pour les variables supplémentaires) de l’objet résultat.

Voici un exemple de comment faire tout cela pour une ACP :

data(deug)
d <- deug$tab
sup_var <- d[-(1:10), 8:9]
sup_ind <- d[1:10, -(8:9)]
pca <- dudi.pca(d[-(1:10), -(8:9)], scale = TRUE, scannf = FALSE, nf = 5)
## Individus supplémentaires
pca$supi <- suprow(pca, sup_ind)
## Variables supplémentaires
pca$supv <- supcol(pca, dudi.pca(sup_var, scale = TRUE, scannf = FALSE)$tab)
explor(pca)

Il est nécessaire de faire la même chose en cas d’éléments supplémentaires pour une analyse des correspondances multiples :

data(banque)
d <- banque[-(1:100),-(19:21)]
ind_sup <- banque[1:100, -(19:21)]
var_sup <- banque[-(1:100),19:21]
acm <- dudi.acm(d, scannf = FALSE, nf = 5)
## Variables supplémentaires
acm$supv <- supcol(acm, dudi.acm(var_sup, scannf = FALSE, nf = 5)$tab)
## Individus supplémentaires
acm$supi <- suprow(acm, ind_sup)
explor(acm)

Pour une analyse des correspondances simples, on peut afficher des lignes ou colonnes supplémentaires en ajoutant leurs coordonnées à des éléments nommés supr ou supc :

data(bordeaux)
tab <- bordeaux
row_sup <- tab[5,-4]
col_sup <- tab[-5,4]
coa <- dudi.coa(tab[-5,-4], nf = 5, scannf = FALSE)
coa$supr <- suprow(coa, row_sup)
coa$supc <- supcol(coa, col_sup)
explor(coa)

Fonctions de GDAtools

Les résultats des fonctions de GDAtools prises en charge peuvent également être directement passées à explor().

library(GDAtools)
data(Music)
mca <- speMCA(Music[,1:5], excl = c(3, 6, 9, 12, 15))
explor(mca)

Pour ajouter des individus supplémentaires, il est nécessaire de calculer leurs données associées à l’aide de la fonction indsup, puis de les ajouter manuellement comme un élément nommé supi de l’objet résultat :

mca <- speMCA(Music[3:nrow(Music),1:5], excl = c(3, 6, 9, 12, 15))
mca$supi <- indsup(mca, Music[1:2, 1:5])
explor(mca)

Pour ajouter des variables supplémentaires, il faut calculer leurs données associées à l’aide de la fonction speMCA_varsup, et je les ajouter manuellement comme un élément supv de l’objet résultat :

mca <- speMCA(Music[3:nrow(Music), 1:4], excl = c(3, 6, 9, 12))
mca$supi <- indsup(mca, Music[1:2, 1:4])
mca$supv <- speMCA_varsup(mca, Music[3:nrow(Music), 5:6])
explor(mca)

Export des graphiques

explor offre deux possibilités pour exporter les graphiques affichés dans l’interface.

Export SVG

Pour exporter le graphique actuellement affiché au format SVG, cliquez sur le bouton Exporter en SVG (icône en bas de la barre latérale gauche), ou choisissez l’entrée Export to SVG du menu “engrenage” du graphique.

Le SVG est un format de dessin vectoriel, éditable et redimensionnable sans perte à l’aide d’un logiciel comme Inkscape.

La fonction d’export SVG peut rencontrer des problèmes quand elle est effectuée depuis RStudio. Si c’est le cas, ouvrez d’abord explor dans un navigateur en cliquant sur Open in Browser, avant d’exporter.

Récupérer le code R

L’autre possibilité est de récupérer le code R permettant de générer le graphique actuellement affiché, ce qui permet de le reproduire ensuite dans un script ou un document Rmarkdown.

Pour cela, cliquez sur le bouton Obtenir le code R en bas de la barre latérale. Une boîte de dialogue s’affiche, vous n’avez plus qu’à copier/coller le code R qui s’y trouve.

À noter que ce code R respecte le zoom effectué sur le graphique au moment de l’export, mais pas les positions des labels. Si vous souhaitez conserver celles-ci, il faut d’abord les enregistrer dans un fichier CSV avec l’entrée Export labels positions du menu “Engrenage”. Ensuite, dans votre script, chargez ce fichier CSV dans un objet à l’aide de read.csv puis passez cet objet à l’argument export_labels_positions dans le code généré :

labels <- read.csv("position_labels.csv")
res <- explor::prepare_results(mca)
explor::MCA_var_plot(res, xax = 1, yax = 2,
    var_sup = TRUE, , var_lab_min_contrib = 0,
    col_var = "Variable", symbol_var = "Type",
    size_var = NULL, size_range = c(10, 300),
    labels_size = 10, point_size = 56,
    transitions = TRUE, labels_positions = labels)

Bugs et commentaires

explor est un package très récent, qui comporte donc certainement des bugs et autres problèmes. N’hésitez pas à les signaler par mail ou en créant une issue sur GitHub.