In this tutorial, the instructor demonstrates how to conduct Multiple Correspondence Analysis (MCA) on a dataset with missing categorical responses using R's missMDA and FactoMineR packages. The example uses the VNF survey (1,231 respondents, 14 questions) which contains many NA entries. First, the default MCA function creates an explicit "NA" category for each missing value, allowing the analyst to visualize patterns of non‑response across variables and individuals. The speaker then explains the difficulty of estimating the optimal number of components for MCA, especially with incomplete data, and shows the use of missMDA's estim_ncpMCA function, which in this case returns 0, prompting a pragmatic choice of 2–4 components. Next, the imputeMCA function is applied to generate a completed disjunctive table where missing entries are replaced by probabilistic memberships (real values between 0 and 1) rather than binary 0/1. The imputed dataset (object completeObs) is then fed back into FactoMineR's MCA, producing clearer variable and individual maps that are less distorted by missingness. The tutorial concludes with practical advice: first inspect missing‑value patterns via the NA categories, then impute and re‑run MCA, while noting that inertia percentages are slightly to substantially over‑estimated depending on the amount of missing data because imputed values influence the early dimensions used for imputation.
Chapters
The purpose of this video is to see how to perform a multiple correspondence analysis on an incomplete dataset, so with missing values. To do this, we will use the missMDA and the FactoMineR packages. I will use a dataset that is available in the missMDA package. This is the dataset VNF. The dataset VNF corresponds to a survey in which 1,231 individuals answered to 14 questions. In this dataset, there are missing data because all the individuals did not answer to all questions. For some questions, there are a lot of missing data. So how to handle the missing data? As a first step, we can use the MCA function of the FactoMineR package and see what happens. So I perform an MCA on the dataset VNF. I have the graph of the variables of the MCA. So to have comments on the MCA results, you can see the video on MCA. So here is the graph of variables, the graph of individuals, and the graph of categories. What do we see on the graph of categories? We see some categories with NA. In fact, every time there are missing— a missing value for a variable, A new category has been created and this category was named NA and therefore all individuals who take a missing value for the variable will take this new category NA. On the graph of the MCA, we see a pool of categories with NA. It means that individuals who did not respond to the question H1 or H2 also did not answer to the question H3, question 9, question 7, and so on. We are visualizing the pattern of missing values and variables for which missing values were simultaneously present. These non-responses define the first dimension and then there is another pool of non-responses that defines the second dimension: questions 30, 29, or 40. This graph is interesting to see the pattern of missing entries but not really interesting to visualize the information from the survey. The observed information does not appear at all on the first 2 dimensions. So we may find the information on the following dimensions but disturbed by the missing entries. It does not mean that this MCA is not interesting. It is interesting to study the pattern of missing values, but then if you want to focus on the observed data, we may want to visualize the observed data not disturbed by the missing To do this, we will use the missMDA package. At first, it is necessary to estimate the number of components that are used to impute the missing entries. This is done with the function estim_ncpMCA of missMDA. Here, the function returns 0 component, that is to say we should impute by the proportions. This function is a straightforward adaptation of the PCA function but it it is more difficult to find the number of components in MCA. Already when the dataset is complete, the decreasing of the eigenvalues is very linear. There is no gap in the eigenvalues and it is difficult to find the number of components. And when there are missing entries, it is more difficult. So in this example, we can consider rather 2 or 4 components. So once we have the number of components, we can complete the dataset with the imputeMCA function of the dataset vnf and specify that we consider 2 components. In the VNF example, it is difficult to find the number of components, but when the dataset is more structured with strong relationships between variables, we will succeed in finding the number of components. We can see the results. So in the complete object, there are 2 things: an object called tab.disj and an object called completeObs. We can view tab.disj. This is a disjunctive table that has been completed. Indeed, in MCA, each categorical variable is transformed into dummy variables. This creates a disjunctive data table. In each column, there are values that are 0 or 1. It is 0 if the category is not taken by the individual and 1 when the category is taken. So this is for the observed values, and for missing entries, we will impute these entries with real values, not necessarily 0 and 1. These real values can be seen as a degree of membership, and for example, we will be able to say that for this variable, the individuals who did not answer to this question would tend to take the 2nd category. And so if we impute the categorical variable, we will impute with the 2nd category. This is what is done in the object completeObs where there was an imputation with the 2nd category. Now I can perform the MCA. So I will use the MCA on the dataset vnf but stating that I want to use the disjunctive data table I have just imputed. MCA is performed and we recover the graph of the variables, the graph of individuals, and the graph of categories. So now with missing entries, we better see the links between categories. So to perform an MCA on an incomplete dataset, first I advise to visualize the pattern of missing entries by creating a missing category and which is done by default with the MCA function of FactoMineR and with most softwares. And then we can visualize the observed responses after imputing the dataset and working on the disjunctive data table that has been completed. So to use this information, it is necessary to use the MCA function of FactoMineR. The imputed values do not contribute to the construction of the dimensions, and therefore the dimensions that are built here are only built with the observed values. This is important because we want to visualize the information provided by only the observed data. However, one can note that the percentage of inertia, the percentage of variance associated with each dimension, is a little bit overestimated since we imputed thanks to the first dimensions of MCA. So we will reinforce the structure that is highlighted on the map of the MCA. The graph is interesting to see the links, but the results should be interpreted with caution for the percentages of variance. If there is a small number of missing entries, the percentage of inertia is slightly overestimated, and if there are many missing data, the percentage of inertia can be quite strongly overestimated.