Closed dafdafdaf closed 3 years ago
Bonjour,
Non ça ne vient pas de votre code, il est tout à fait correct. Effectivement explor
ne fonctionne pas avec l'option tab.disj
. De ce que je comprends, utiliser imp$completeObs
calcule l'ACM en utilisant les données imputées "directement", c'est-à-dire pour lesquelles on a remplacé les NA
par le modalité la plus problème, tandis qu'utiliser imp$tab.disj
permet de prendre en compte plus finement les probabilités d'appartenance des NA
à chaque modalité.
Le problème vient du fait que dans l'objet contenant les résultats de l'ACM, les noms de modalités ne sont pas gérés de la même manière par les deux méthodes, et celle utilisée avec tab.disj
n'est pas compatible avec explor
. Malheureusement je ne suis pas sûr de pouvoir y faire grand chose, il me semble qu'il faudrait plutôt que ça soit corrigé du côté de FactoMineR. Je vais quand même regarder un peu plus sérieusement, je vous tiens au courant.
Merci d'avoir pris le temps de signaler le problème !
Bon finalement j'ai peut-être trouvé un workaround assez simple. Pouvez-vous juste m'indiquer si ça résoud le problème de votre côté ?
Merci d'avoir pris le temps de répondre!
Je vous avoue que du fait de mon niveau cela me dépasse largement...
J'ai fait l'imputation comme la dernière fois, puis introduit votre code (c'st ce que j'ai compris qu'il fallait faire non?):
names(counts.tab) <- make.unique(names(counts.tab)) counts <- sapply(counts.tab[, quali.mods, drop = FALSE], sum) vars$Count <- counts
Le résultats est un message d'erreur:
Error in make.unique(names(counts.tab)) : object 'counts.tab' not found
counts <- sapply(counts.tab[, quali.mods, drop = FALSE], sum) Error in lapply(X = X, FUN = FUN, ...) : object 'counts.tab' not found vars$Count <- counts Error: object 'counts' not found
Je constate par ailleurs(mais cela va au-delà de explor) que lorsqu'on réalise une ACP, on travaille directement avec les données complétées. Je suppose que c'est parce qu'en ACP les imputations sont plus précises qu'en ACM.
J'en profite pour vous féliciter pour la libraire explor (et manuel d'introduction à R avec lequel j'ai fait mes débuts). Non seulement les graphes sont très bon, mais en plus la facilité de faire des allers-retours entre les différentes représentations permet d'avancer dans l'analyse et l'interprétation très facilement.
En fait pour tester si le correctif fonctionne il faut que vous installiez la version de développement d'explor :
install.packages("remotes") # Si remotes n'est pas déjà installé
remotes::install_github("juba/explor")
Et qu'ensuite vous relanciez votre code, sans modification.
Je ne suis pas du tout spécialiste en imputation, mais ce que vous dites pour l'ACP est assez logique. Pour l'ACM, l'imputation de la valeur d'une modalité peut générer soit une seule valeur (la valeur imputée est "femme"), soit une probabilité d'appartenance à chaque modalité (27% de proba d'être "homme", 73% d'être "femme"). Si j'ai bien compris tab.disj
avec MCA
permet d'utiliser les informations plus détaillées de ce deuxième cas. Dans le cas d'une ACP, seul le premier cas est possible (on impute une seule valeur d'âge ou de revenu par exemple).
Merci pour votre retour sur explor et l'introduction à R. Très content si ces outils ont pu vous être utiles !
Oui, cela a fonctionné, merci! Le seul problème est que pour certaines variables le nom a été remplacé par le numéro. Il me faut donc utiliser "prebend" pour avoir le nom, ce qui surcharge un peu car on a alors nom +numéro. Seules ont été remplacées par des numéros les variables dont les modalités sont A,B,C,D,E.
Oui, c'est le problème dont je parlais : quand on n'utilise pas tab.disj
, MCA
différencie les modalités identiques en les préfixant par le nom de la variable ("Oui" devient "bricol_Oui" et "cinema_Oui", etc.). Avec tab.disj
ce n'est pas fait, du coup en cas de modalités identiques on se retouve avec des "Oui.1", "Oui.2"...
C'est un problème du coup lié à FactoMineR et pas à explor. Normalement si vous faites un graphique de l'ACM avec les fonctions de FactoMineR
vous retrouverez les mêmes libellés peu lisibles.
C'est exact, le graphique avec FactoMineR donne aussi ces libellés peu lisibles mais bon, c'st un moindre mal (ce ne sera pas esthétique mais au moins ce sera rigoureux).
Je profite de notre échange pour vous suggérer un idée: il serait très utile de pouvoir choisir les couleurs que l'on veut pour chaque variable et de pouvoir en choisir plusieurs lorsque l'on veut les faire ressortir sur le graphe. Cela serait très utile par exemple lorsque plusieurs variables correspondent à une même rubrique: on pourrait alors faire un graphe par rubrique avec les différentes variables correspondantes.
Merci beaucoup!!!
Oui, je vois tout à fait l'intérêt de la suggestion pour les couleurs, et j'en prends note, malheureusement je ne pense pas pouvoir intégrer ça à l'interface d'explor
(qui est déjà très chargée).
Il y a une possibilité pas très pratique, qui consiste à exporter le code R du graphique souhaité et à personnaliser les couleurs avec l'argument colors
:
library(questionr)
library(FactoMineR)
library(dplyr)
library(explor)
data(hdv2003)
d <- hdv2003 %>%
select(sexe, nivetud, qualif, clso, relig, cuisine, bricol)
acm <- MCA(d, graph = FALSE)
explor(acm)
# Code du graphique
res <- explor::prepare_results(acm)
explor::MCA_var_plot(res, xax = 1, yax = 2, var_sup = FALSE, var_sup_choice = ,
var_lab_min_contrib = 0, col_var = "Variable", symbol_var = NULL, size_var = NULL,
size_range = c(10, 300), labels_size = 10, point_size = 56, transitions = TRUE,
labels_positions = NULL, labels_prepend_var = FALSE,
colors = c(
"bricol" = "#ECD078",
"clso" = "#ECD078",
"relig" = "#ECD078",
"cuisine" = "#C02942",
"qualif" = "#C02942",
"sexe" = "#53777A",
"nivetud" = "#53777A"
)
)
Par contre je ne pense pas que ça marchera pour le code du biplot.
Merci beaucoup pour la suggestion!
Bonjour,
J'ai un problème avec l'utilisation de explor sur une ACM après avoir utilisé missMDA.
J'impute les données et je peux voir les résultats avec FactoMineR sans problème.
imp<-imputeMCA(d,ncp = 2, quali.sup = 2:3) dmca<-MCA(d,quali.sup = 2:3, tab.disj = imp$tab.disj)
Quand je cherche à visualiser avec Explor, le message d'erreur suivant s'affiche:
explor(dmca) Error in
[.data.frame
(counts.tab, , quali.mods, drop = FALSE) : undefined columns selectedJ'ai essayé la chose suivante: imp<-imputeMCA(d,ncp = 2, quali.sup = 2:3) d<-imp$completeObs dmca<-MCA(d, quali.sup=2:3)
Cela fonctionne, mais les résultats de l'ACM avec tab.disj = imp$tab.disj et avec imp$completeObs donne des résultats différents, et selon les manuels que j'ai lu (Husson, Lê, Pagès), c'est l'option avec tab.disj = imp$tab.disj qui est correcte.
Mon code est-il incorrect ou bien est-ce explor qui ne permet pas de visualiser une ACM faite avec tab.disj = imp$tab.disj?
Merci d'avance!