This is following a conversation I had with several internal JMP users as well as with Martin Demel and Ian Cox from JMP during this November’s JMP day @ GIC (details on that event can be found here). I’ve been advised to put this on the wish list, but apparently do not have privileges to do so, so posting it as a discussion instead. Also, as I couldn't figure out how to convenientely insert screenshots, I attach a PDF with pretty much the same description but with appropriate screen shots. Apologies for any inconvenience caused, as well as for the length of the post - it is meant to be as exhaustive as I could be to illustrate the issues as well as give sufficient details on the how to.
The first question is how to perform a Correspondence Analysis (CA) in JMP. The second question is on watchouts with JMP and desired changes to make the analyses from JMP more useful and avoid misinterpretation. Some of that holds all the same for other maps from, e.g., PCA, PLS, MDS, or others.
It is worth noting that some of the reasoning comes from the usual layout of data from check-all-that-apply questions, which often comes in a format with subject*product (*replication, if any) in rows, and attributes in columns. Values for the attributes are 1 if the attribute was checked, and 0 otherwise (see attachment for screenshot).
There is an internal webtool that allows analysis of this kind of data, and these analyses are considered the reference in what follows; the results from the CA part of the webtool have been checked against at least 3 different R packages and an own implementation in R based on the underlying theory, so it is safe to assume that these results represent what is typically used for CA. Details about the webtool are provided in the help page; for anyone outside of P&G: The webtool provides the following analyses from Meyners et al (2013): Contingency table, CA, Cochran’s Q test based on approximation, binomial tests, PLA, MDA, MDS.
1. CA via JMP’s Fit Y by X platform
In order to use this platform, you need to stack the data into one column that contains the attributes (and another identifying the product; Stack is your friend in JMP here, see attachment for screenshot).
Using the Fit Y by X platform then allows you to model the attributes (“Label”) by product (“Product”), but it is important to use the “Data” column as weights in the analysis (see attachment for screenshot).
Alternatively, you could delete all rows with “Data” == 0, in which case you would not need the weight column anymore.
The analysis will provide a contingency table and a CA with some details. Some issues with it will be talked below, though.
2. CA via JMP’s Multiple Correspondence Analysis [Consumer Research] platform
You can trick this platform in performing CA, though it is intended to be used with multiple categorical questions rather than just two (product and attribute in this example).
For that, though it might feel odd, you need to use attributes as Y and products as X. That will get you the almost classical contingency table, apart from the fact that the counts for both the checks (1) and the non-checks (0) are given (see attachment for screenshot).
This is unlike a classical contingency table, but rather the so-called Burt-matrix used in MCA. That is useful if you have multiple categories per group, e.g. attributes might take several levels (like age groups or hair colors), but not needed if they only have two levels (0 and 1), so just duplicates data. I think I saw somewhere on the JMP help pages that they now run a simple CA – that is true, but it is based on the extended (duplicated) contingency table, as said, not how I would do it and nothing I have ever seen elsewhere. Differences are relatively minor, but results are not identical from the two contingency tables. With JMP, you also get all attributes twice – once for 0 and once for 1 (see attachment for screenshot).
Creating the same contingency table (or rather Burt matrix) manually in R allows me to exactly reproduce the results from JMP.
A way to trick JMP into using the classical contingency table instead is to define 0 as a missing value for all attribute columns. In that case, results are identical to the first way shown.
Note that for both approaches, JMP uses the contingency table of absolute counts. The web application mentioned above uses percentages (based on total number of observations for product*attribute). This leads to slightly different results that will not be noticeable in the graph, but appear if you look at the exact coordinates. These differences can be attributed to numerical rounding in the algorithm and disappear if the CA is run on absolute counts as well. They are of little (read: likely no) practical importance, but it is mentioned here just in case anyone compares the results at that level of detail.
3. Issues with CA in JMP
There are (at least) two noteworthy issues to mention with the current implementation of CA in JMP, irrespective of platform.
- JMP bases the CA on the absolute counts. This works ok if every product and attribute has been evaluated equally often in the dataset, with no missing values. However, if for some reason product A has been evaluated 100-times, while all others have only been evaluated 50-times, this will lead to nonsensical results as the absolute counts are then merely driven by sample size rather than potential associations between products and attributes.
I assume that this might be helped by using appropriate weights to have the same overall weight for all products, but I haven’t tried that. It would only work for products anyway, though, so if some assessors had a shorter attribute list, or just did not evaluate certain attributes (= missing values), as far as I can see there is no way to fix that. [NB: This is unlikely to happen with CATA data, as it is impossible to distinguish missing data from non-checks, but it might occur in other studies like, e.g., applicability testing.]
This seems a serious limitation to me in practice, so until there is a good remedy for this issue, I would not recommend using either of JMP’s platforms to perform CA on imbalanced data. - The other flaw is in the graphic JMP produces by default: any (often so-called) perceptual map or alike (PCA, CA, MDS, PLS, …) requires the same scaling on both axis, i.e. the physical length of one unit has to be the same on both x- and y-axis. Assume you have 90% variation explained on x and only 5 on y: Then the display should represent that visually (without you referring to the variation explained numbers, which is hard to integrate in the interpretation for human beings). That means that such a graphic would be rather have a landscape format than being square (may have white spaces on top of bottom, which some might dislike). JMP doesn’t warrant this by default and rather gives different scales. The remedy in JMP is to right-click on the CA plot and to choose Size/Scale -> Size to Isometric as shown below. So it is relatively easy to solve this issue, but users have to remember actually doing it and it is an unnecessary extra effort. It is strongly desirable to make isometric scaling the default for this graph. I would even go to such length as suggesting it should be a default that can’t be changed by the user, because any distortion of the layout is prone to lead to misinterpretation. As mentioned above, this should also be done for similar graphs like those from PCA, MDS, PLS and similar (see attachment for screenshot).
- Not an issue, but a desirability: CA plots (like the others mentioned) can be arbitrarily reflected on the x- or y-axis (or both). This is offered in JMP 13 in the MDS platform (Flip vertical/horizontal). It is not really needed for individual analyses, but if results from multiple studies or breakouts or… should be compared, it is useful to allow the user to apply the reflections such that the resulting graphs have the same orientation. Therefore, it would help to have the same feature for CA as well as for PCA etc.