Pour commencer, un immense merci aux créateurs des packages dédiés à l'analyse factorielle sur R, c'est génial ! Et donner la possibilité d'accompagner les utilisateurs via ce forum est très généreux.
Je réalise actuellement l’analyse des résultats d’un questionnaire. Il porte sur le recours aux outils numériques dans la pratique des sports de nature. J’ai pour objectif de réaliser une typologie des formes d’usage du numérique dans ces activités. Pour cela, je souhaite réaliser une classification hiérarchique sur les composantes principales de l’ACM calculée sur mes données. J’ai des données manquantes et elles ont une influence énorme sur l’ACM. Je souhaite donc procéder à une imputation du jeu de données sur ces données manquantes pour ensuite réaliser l’ACM puis la classification. Afin de nettoyer le jeu de données, j’ai procédé à des transformations de variables par fusion pour éliminer toute redondance logique dans les données manquantes (liées au filtre du questionnaire de type « si « non » à la question X alors ne pas afficher les questions Y et Z »).
Mon problème survient lors de l’estimation du nombre de composantes à utiliser pout imputer le jeu de données. Je précise que j’ai lu toutes les discussions de ce forum répondant au filtre « estim_ncpMCA » et que j’ai essayé de bien comprendre toute la littérature dispo sur les FactoMineR et missMDA.
Le jeu de données (nommé « bdd_actis ») est composé de 2983 individus et de 144 variables. Les 41 premières variables sont mes variables supplémentaires, j’ai donc 103 variables actives. Voici comment se répartissent les valeurs manquantes dans le jeu de données selon trois configurations :
- L’ensemble du jeu de données : 8,70 % de NA par variable en moyenne
- Les seules variables actives (car les valeurs manquantes des variables supplémentaires n’ont pas d’influence sur le calcul de l’ACM si je comprends bien) : 6,05 % de NA par variable en moyenne
- Les seules variables actives sans les 9 variables actives concernant la fréquence de renouvellement du matériel (cumulant chacune entre 8% et 90% de valeurs manquantes) : 1,26 % de NA par variable en moyenne

Voici mon script
#Installation des packages nécessaires
install.packages("FactoMineR")
install.packages("missMDA")
install.packages("ggplot2")
install.packages("factoextra")
library("FactoMineR")
library("missMDA")
library("ggplot2")
library("factoextra")
library(readr)
#Importation des données
setwd("~/[…]")
bdd_actis <- read.csv("bdd_actis.csv", sep = ",", row.names=1, na.strings = "")
#Calcul ACM préalable
pre_MCA_actis <- MCA (bdd_actis, quali.sup = 1:41)
eig_val_pre_MCA_actis <- get_eigenvalue(pre_MCA_actis)
View(eig_val_pre_MCA_actis)
##observation : l'ACM identifie 469 dimensions, dont 144 avec une eigvalue >0,0097 (0,0097=1/104 car 104 var act)
fviz_screeplot (pre_MCA_actis, addlabels = TRUE, ylim = c (0, 25))

#Prise en compte des données manquantes
##Identifier le nombre de composantes à utiliser pour imputer le jeu de données (remplacer les valeurs manquantes par des valeurs au regard des données complètes) en considérant 147 dimensions
estim_ncpMCA_actis <- estim_ncpMCA(bdd_actis, ncp.max=147, quali.sup = 1:41, verbose = TRUE)
C’est à partir d’ici que je bloque. La fonction estim_ncpMCA tourne mais ne parvient jamais à un résultat : la fonction tourne, je n’ai pas de message d’erreur, mais pas de sortie non plus. Je précise que ce script tourne actuellement depuis 2 mois sur un gros serveur d’un institut de recherche et que le résultat n’est toujours pas sorti. J’ai donc essayé de multiples tentatives différentes.
- Avec le jeu de données exemple vnf : mon ordi parvient à sortir le résultat de la fonction estim_ncpMCA en environ 2 minutes.
- Sur mon jeu de données sans les variables supplémentaires donc en retirant ce paramètre de la fonction estim_ncpMCA : la fonction tourne, je n’ai pas de message d’erreur, mais pas de sortie non plus.
- Sur mon jeu de données sans les variables supplémentaires donc en retirant ce paramètre de la fonction estim_ncpMCA et en réduisant le paramètre ncp.max à 8 : la fonction tourne, je n’ai pas de message d’erreur, mais pas de sortie non plus.
- Sur les seules trois premières variables actives du jeu de données et en réduisant le paramètre ncp.max à 8 : la fonction tourne, je n’ai pas de message d’erreur, mais pas de sortie non plus.
- Sur les seules trois variables actives avec le moins de NA du jeu de données (0, 4 et 5 sur près de 3 000 individus) et en réduisant le paramètre ncp.max à 8 : la fonction tourne, je n’ai pas de message d’erreur, mais pas de sortie non plus.
Je précise enfin que la suite de la procédure vers ma classification fonctionne :
- Je parviens à réaliser une imputation « complete_actis <- imputeMCA(bdd_actis, ncp=9, quali.sup = 1:41) » à partir d’un nombre de composantes que j’ai défini à 6 car au-delà je recevais le message d’erreur "The algorithm fails to converge. Choose a number of components (ncp) less or equal than 6 or a number of iterations (maxiter) less or equal than 999" ;
- Je réussis à réaliser une ACM sur le jeu de données imputés « MCA_actis <- MCA(bdd_actis, tab.disj = complete_actis $tab.disj, quali.sup = 1:41) » ;
- Je peux réaliser ma classification « res_HCPC_actis <- HCPC(res_MCA_actis) »
Avez-vous une idée de la raison pour laquelle estim_ncpMCA ne sort pas de résultat ? Pensez-vous que ça puisse être résolu ? Si non, auriez-vous une suggestion pour la manière de choisir le nombre de composantes à retenir dans l'opération d'imputation avec imputeMCA autrement que via estim_ncpMCA ?
Je vous remercie par avance pour votre aide et je reste bien sûr disponible pour toute demande de renseignement supplémentaire.
Robin Lesné
Université du Littoral Côte d'Opale