# How to reduce the dimensionality of a similarity matrix (of categorical co-occurence counts)?

Our example person Azra has assigned (open-ended categories of her own choosing) to a fixed set of 35 items, recorded as logical values (TRUE, FALSE). We have summarised this data matrix into a co-occurence matrix of items x items, where each cell counts the number of categories that are assigned to both items of the item-pair in question.

We interpret these counts as a measure of categorical similarity between items, and consequently set the diagonal to the maximum possible number of categories, 18 in Azra's case. We then divide all cells by that maximum to scaled our cells to 1. (We also need to do this because there are other people than Azra who have less then 18 categories in total, so we want to make them comparable).

Loosely speaking, we assume that our cells in this (scaled) co-occurence matrix can be interpreted as percentages of similarity, where 1 on the diagonal is – naturally – the maximum: item, say but-how with but-how obviously is completely similar.

Here's Azra (sorry):

Azra <- structure(c(1, 0.0555555555555556, 0.111111111111111, 0.222222222222222,
0.166666666666667, 0, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.166666666666667, 0.166666666666667, 0.222222222222222, 0.333333333333333,
0.111111111111111, 0.166666666666667, 0.166666666666667, 0.277777777777778,
0.166666666666667, 0.222222222222222, 0.222222222222222, 0.111111111111111,
0.111111111111111, 0.166666666666667, 0.333333333333333, 0.111111111111111,
0.222222222222222, 0.111111111111111, 0.222222222222222, 0.0555555555555556,
0.166666666666667, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 1,
0.0555555555555556, 0.166666666666667, 0.166666666666667, 0.166666666666667,
0, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.222222222222222, 0.0555555555555556,
0.111111111111111, 0, 0.111111111111111, 0.111111111111111, 0,
0, 0.111111111111111, 0.222222222222222, 0.111111111111111, 0.166666666666667,
0.222222222222222, 0.166666666666667, 0.0555555555555556, 0,
0.111111111111111, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 1, 0.111111111111111, 0.277777777777778,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.0555555555555556,
0, 0.0555555555555556, 0.166666666666667, 0.166666666666667,
0.0555555555555556, 0, 0.166666666666667, 0.166666666666667,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.166666666666667, 0.166666666666667, 0.222222222222222, 0.111111111111111,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0, 0.111111111111111, 0.0555555555555556, 0, 0.0555555555555556,
0.111111111111111, 0.222222222222222, 0.166666666666667, 0.111111111111111,
1, 0.166666666666667, 0.0555555555555556, 0.0555555555555556,
0.166666666666667, 0, 0.166666666666667, 0.111111111111111, 0.111111111111111,
0.333333333333333, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
0.277777777777778, 0.166666666666667, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.166666666666667, 0.277777777777778,
0.222222222222222, 0.277777777777778, 0, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.111111111111111, 0, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.166666666666667, 0.166666666666667, 0.277777777777778,
0.166666666666667, 1, 0.166666666666667, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0, 0.0555555555555556, 0.222222222222222,
0.333333333333333, 0.0555555555555556, 0, 0.222222222222222,
0.333333333333333, 0.166666666666667, 0.222222222222222, 0.111111111111111,
0.333333333333333, 0.222222222222222, 0.277777777777778, 0.388888888888889,
0.222222222222222, 0.333333333333333, 0.111111111111111, 0.111111111111111,
0.222222222222222, 0, 0.222222222222222, 0.111111111111111, 0,
0.111111111111111, 0.111111111111111, 0, 0.166666666666667, 0.0555555555555556,
0.0555555555555556, 0.166666666666667, 1, 0, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 0,
0.0555555555555556, 0.0555555555555556, 0, 0, 0.0555555555555556,
0.111111111111111, 0.0555555555555556, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.0555555555555556, 0, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.0555555555555556, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0,
1, 0, 0, 0, 0, 0.111111111111111, 0.111111111111111, 0, 0, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0, 0.111111111111111, 0.111111111111111, 0,
0.111111111111111, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0, 0.0555555555555556, 0.0555555555555556, 0, 0.0555555555555556,
0, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0.111111111111111, 0,
1, 0.0555555555555556, 0.166666666666667, 0.166666666666667,
0, 0.166666666666667, 0.111111111111111, 0.166666666666667, 0,
0.166666666666667, 0, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.0555555555555556, 0.166666666666667, 0.222222222222222,
0.166666666666667, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.166666666666667, 0.111111111111111, 0.0555555555555556, 0.166666666666667,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.0555555555555556,
0.0555555555555556, 0, 0.0555555555555556, 0.0555555555555556,
0, 0.0555555555555556, 1, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 0,
0.0555555555555556, 0, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0, 0.111111111111111,
0, 0, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.166666666666667, 0.166666666666667,
0.111111111111111, 0, 0.166666666666667, 0, 0.0555555555555556,
0, 0.166666666666667, 0.0555555555555556, 1, 0.166666666666667,
0.0555555555555556, 0.166666666666667, 0.111111111111111, 0.222222222222222,
0, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0, 0.111111111111111, 0, 0.166666666666667,
0.166666666666667, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0, 0.222222222222222, 0.0555555555555556, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0.0555555555555556, 0.166666666666667,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0, 0.166666666666667, 0.111111111111111,
0.166666666666667, 1, 0.0555555555555556, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.0555555555555556, 0.166666666666667,
0, 0.111111111111111, 0.166666666666667, 0, 0.111111111111111,
0.0555555555555556, 0.166666666666667, 0.166666666666667, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0, 0.166666666666667, 0.111111111111111,
0.111111111111111, 0.166666666666667, 0.0555555555555556, 0.111111111111111,
0.222222222222222, 0.0555555555555556, 0.166666666666667, 0.111111111111111,
0.222222222222222, 0, 0.111111111111111, 0, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 1, 0.222222222222222,
0.0555555555555556, 0.0555555555555556, 0.222222222222222, 0.166666666666667,
0.166666666666667, 0.111111111111111, 0.111111111111111, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.277777777777778, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0,
0.0555555555555556, 0.111111111111111, 0.333333333333333, 0.222222222222222,
0.166666666666667, 0.333333333333333, 0.333333333333333, 0.111111111111111,
0.111111111111111, 0.166666666666667, 0.0555555555555556, 0.166666666666667,
0.166666666666667, 0.222222222222222, 1, 0.111111111111111, 0.166666666666667,
0.166666666666667, 0.388888888888889, 0.222222222222222, 0.222222222222222,
0.222222222222222, 0.222222222222222, 0.222222222222222, 0.277777777777778,
0.444444444444444, 0.277777777777778, 0.388888888888889, 0.111111111111111,
0.222222222222222, 0.166666666666667, 0.166666666666667, 0.222222222222222,
0.111111111111111, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
0.111111111111111, 1, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0, 0.111111111111111, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.166666666666667, 0.166666666666667, 0.111111111111111,
0, 0.166666666666667, 0, 0.0555555555555556, 0, 0.166666666666667,
0.0555555555555556, 0.222222222222222, 0.166666666666667, 0.0555555555555556,
0.166666666666667, 0.111111111111111, 1, 0, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0,
0.111111111111111, 0, 0.166666666666667, 0.166666666666667, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0, 0.222222222222222,
0.0555555555555556, 0.0555555555555556, 0.166666666666667, 0.0555555555555556,
0.0555555555555556, 0.166666666666667, 0, 0.166666666666667,
0.0555555555555556, 0.222222222222222, 0, 0.111111111111111,
0, 0.111111111111111, 0, 0.0555555555555556, 0.222222222222222,
0.166666666666667, 0.0555555555555556, 0, 1, 0.222222222222222,
0.166666666666667, 0.166666666666667, 0.111111111111111, 0.166666666666667,
0.111111111111111, 0.222222222222222, 0.222222222222222, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0, 0.111111111111111, 0.111111111111111, 0, 0.111111111111111,
0.166666666666667, 0.277777777777778, 0.111111111111111, 0.166666666666667,
0.277777777777778, 0.333333333333333, 0.0555555555555556, 0.111111111111111,
0.166666666666667, 0.0555555555555556, 0.111111111111111, 0.166666666666667,
0.166666666666667, 0.388888888888889, 0.111111111111111, 0.111111111111111,
0.222222222222222, 1, 0.111111111111111, 0.333333333333333, 0.222222222222222,
0.222222222222222, 0.166666666666667, 0.277777777777778, 0.333333333333333,
0.277777777777778, 0.333333333333333, 0.111111111111111, 0.222222222222222,
0.166666666666667, 0.111111111111111, 0.222222222222222, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.0555555555555556, 0.166666666666667,
0.111111111111111, 0.0555555555555556, 0.166666666666667, 0.166666666666667,
0.0555555555555556, 0.111111111111111, 0, 0.0555555555555556,
0.0555555555555556, 0, 0.166666666666667, 0.222222222222222,
0.0555555555555556, 0.0555555555555556, 0.166666666666667, 0.111111111111111,
1, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.166666666666667, 0.222222222222222, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0,
0.166666666666667, 0.111111111111111, 0.222222222222222, 0, 0.111111111111111,
0.166666666666667, 0.222222222222222, 0, 0.111111111111111, 0.111111111111111,
0, 0.111111111111111, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.0555555555555556, 0.111111111111111, 0.166666666666667, 0.333333333333333,
0.111111111111111, 1, 0.166666666666667, 0.166666666666667, 0,
0.111111111111111, 0.222222222222222, 0.111111111111111, 0.222222222222222,
0.0555555555555556, 0.222222222222222, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0, 0.222222222222222, 0, 0.111111111111111, 0.166666666666667,
0.111111111111111, 0, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.166666666666667, 0.111111111111111,
0.222222222222222, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.222222222222222, 0.0555555555555556, 0.166666666666667, 1,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.222222222222222,
0.111111111111111, 0.166666666666667, 0.0555555555555556, 0.166666666666667,
0.0555555555555556, 0.111111111111111, 0.0555555555555556, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0.222222222222222, 0.166666666666667, 0.333333333333333,
0.0555555555555556, 0.111111111111111, 0.0555555555555556, 0,
0, 0, 0.166666666666667, 0.222222222222222, 0, 0, 0.166666666666667,
0.222222222222222, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
1, 0.166666666666667, 0.222222222222222, 0.222222222222222, 0.166666666666667,
0.222222222222222, 0.0555555555555556, 0.111111111111111, 0.166666666666667,
0, 0.166666666666667, 0.0555555555555556, 0, 0.0555555555555556,
0.0555555555555556, 0.111111111111111, 0.222222222222222, 0.166666666666667,
0.166666666666667, 0.222222222222222, 0.111111111111111, 0, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.166666666666667,
0.222222222222222, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.166666666666667, 0.0555555555555556, 0, 0.0555555555555556,
0.166666666666667, 1, 0.166666666666667, 0.222222222222222, 0.222222222222222,
0.111111111111111, 0.111111111111111, 0, 0.111111111111111, 0.111111111111111,
0.222222222222222, 0.111111111111111, 0.0555555555555556, 0,
0.166666666666667, 0.166666666666667, 0.111111111111111, 0.166666666666667,
0.166666666666667, 0.277777777777778, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0, 0.0555555555555556,
0.166666666666667, 0.277777777777778, 0.0555555555555556, 0,
0.222222222222222, 0.277777777777778, 0.166666666666667, 0.111111111111111,
0.111111111111111, 0.222222222222222, 0.166666666666667, 1, 0.222222222222222,
0.111111111111111, 0.222222222222222, 0.111111111111111, 0.111111111111111,
0.166666666666667, 0, 0.222222222222222, 0.111111111111111, 0,
0.111111111111111, 0.111111111111111, 0.333333333333333, 0.166666666666667,
0.222222222222222, 0.277777777777778, 0.388888888888889, 0.166666666666667,
0.111111111111111, 0.166666666666667, 0.0555555555555556, 0.166666666666667,
0.166666666666667, 0.277777777777778, 0.444444444444444, 0.111111111111111,
0.166666666666667, 0.222222222222222, 0.333333333333333, 0.222222222222222,
0.222222222222222, 0.222222222222222, 0.222222222222222, 0.222222222222222,
0.222222222222222, 1, 0.277777777777778, 0.388888888888889, 0.111111111111111,
0.222222222222222, 0.166666666666667, 0.166666666666667, 0.166666666666667,
0.111111111111111, 0.111111111111111, 0.166666666666667, 0.111111111111111,
0.111111111111111, 0.222222222222222, 0.111111111111111, 0.222222222222222,
0.222222222222222, 0.166666666666667, 0, 0.222222222222222, 0.0555555555555556,
0.166666666666667, 0.166666666666667, 0.0555555555555556, 0.277777777777778,
0.111111111111111, 0.166666666666667, 0.0555555555555556, 0.277777777777778,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.166666666666667,
0.222222222222222, 0.111111111111111, 0.277777777777778, 1, 0.277777777777778,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.166666666666667,
0.166666666666667, 0.0555555555555556, 0.166666666666667, 0.111111111111111,
0.111111111111111, 0.222222222222222, 0.166666666666667, 0.111111111111111,
0.277777777777778, 0.333333333333333, 0.166666666666667, 0.111111111111111,
0.166666666666667, 0, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.388888888888889, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.333333333333333, 0.166666666666667, 0.222222222222222, 0.166666666666667,
0.222222222222222, 0.111111111111111, 0.222222222222222, 0.388888888888889,
0.277777777777778, 1, 0.0555555555555556, 0.222222222222222,
0.222222222222222, 0.111111111111111, 0.166666666666667, 0.0555555555555556,
0.111111111111111, 0.166666666666667, 0, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.0555555555555556, 0.0555555555555556,
1, 0.0555555555555556, 0, 0.0555555555555556, 0.166666666666667,
0.166666666666667, 0.0555555555555556, 0, 0.111111111111111,
0.222222222222222, 0, 0.0555555555555556, 0.166666666666667,
0.111111111111111, 0, 0.111111111111111, 0.111111111111111, 0,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.111111111111111, 0.222222222222222, 0.166666666666667, 0.111111111111111,
0, 0.111111111111111, 0.222222222222222, 0.111111111111111, 0.222222222222222,
0.0555555555555556, 1, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.166666666666667, 0.222222222222222, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0, 0, 0, 0.0555555555555556, 0.166666666666667,
0, 0, 0.0555555555555556, 0.166666666666667, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.166666666666667, 0.111111111111111,
0.166666666666667, 0.166666666666667, 0.111111111111111, 0.222222222222222,
0, 0.0555555555555556, 1, 0, 0.111111111111111, 0, 0, 0.0555555555555556,
0, 0.166666666666667, 0.111111111111111, 0, 0.166666666666667,
0, 0.0555555555555556, 0, 0.166666666666667, 0.0555555555555556,
0.222222222222222, 0.166666666666667, 0.0555555555555556, 0.166666666666667,
0.111111111111111, 0.222222222222222, 0, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0, 0.111111111111111, 0,
0.166666666666667, 0.166666666666667, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0, 1, 0.0555555555555556, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.166666666666667, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.111111111111111, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.222222222222222,
0.111111111111111, 0.0555555555555556, 0.111111111111111, 0.222222222222222,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.166666666666667,
0.222222222222222, 0.222222222222222, 0.166666666666667, 0.166666666666667,
0.166666666666667, 0.166666666666667, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 1, 0.166666666666667, 0.0555555555555556,
0, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.0555555555555556,
0.111111111111111, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0.111111111111111, 0.0555555555555556, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0, 0.0555555555555556,
0.166666666666667, 1, 0.0555555555555556, 0, 0.111111111111111,
0.111111111111111, 0.0555555555555556, 0, 0.111111111111111,
0, 0.0555555555555556, 0, 0.166666666666667, 0.0555555555555556,
0.166666666666667, 0.166666666666667, 0, 0.111111111111111, 0.111111111111111,
0.166666666666667, 0, 0.111111111111111, 0, 0.111111111111111,
0.111111111111111, 0, 0.0555555555555556, 0, 0.111111111111111,
0.166666666666667, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0, 0.166666666666667, 0.0555555555555556, 0.0555555555555556,
1, 0.0555555555555556, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.0555555555555556,
0.0555555555555556, 0.0555555555555556, 0.0555555555555556, 0.166666666666667,
0.0555555555555556, 0.0555555555555556, 0.111111111111111, 0.111111111111111,
0.166666666666667, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0, 0.111111111111111, 0.166666666666667, 0.111111111111111, 0.166666666666667,
0, 0.111111111111111, 0.0555555555555556, 0.0555555555555556,
0, 0, 0.0555555555555556, 1, 0.0555555555555556, 0.0555555555555556,
0.0555555555555556, 0.111111111111111, 0.0555555555555556, 0.111111111111111,
0.0555555555555556, 0, 0.0555555555555556, 0.166666666666667,
0.0555555555555556, 0.111111111111111, 0.111111111111111, 0.0555555555555556,
0.166666666666667, 0.0555555555555556, 0.166666666666667, 0.0555555555555556,
0.111111111111111, 0, 0.0555555555555556, 0.0555555555555556,
0.166666666666667, 0.111111111111111, 0.111111111111111, 0.111111111111111,
0, 0.111111111111111, 0, 0, 0.0555555555555556, 0.111111111111111,
0.111111111111111, 0.0555555555555556, 0.0555555555555556, 1), .Dim = c(35L,
35L), .Dimnames = structure(list(items = c("but-how", "encyclopedia",
"inventions", "gray-hair", "i-we", "the-same", "the-better",
"cockatoo", "caravan", "comma", "headturner", "crocodile", "countries",
"level", "morning", "idiom", "lullaby", "riddle", "eating-grandpa",
"easter-bunny", "alphabet-of-swearing", "guilt", "trouble", "eating-animals",
"random-poetry", "comparatively", "one-letter", "resistance",
"conjugation", "censored"), items = c("but-how", "encyclopedia",
"inventions", "gray-hair", "i-we", "the-same", "the-better",
"cockatoo", "caravan", "comma", "headturner", "crocodile", "countries",
"level", "morning", "idiom", "lullaby", "riddle", "eating-grandpa",
"easter-bunny", "alphabet-of-swearing", "guilt", "trouble", "eating-animals",
"random-poetry", "comparatively", "one-letter", "resistance",
"conjugation", "censored")), .Names = c("items", "items")))


A plot is easily made, but not very informative for us, because it's overwhelming, so we need some kind of summry.

library(ggplot2)
ggplot(data = melt(Azra, varnames = c("x", "y")), mapping = aes(x = x, y = y, fill = value, )) + geom_raster() + scale_fill_continuous(low = "white", high = "steelblue") + theme(axis.text.x = element_text(angle = 90, hjust = 1))


We want to be able to see which items Azra thought were categorically similar, and if so, what her dimensions (or clusters?) of similarity are.

What would be an appropriate, and informative method to summarise this kind of data?

Specifically, we'd like to be able to use something akin to Horn's Parallel Analysis (from a PCA context) to decide just how many retainable dimensions there are in Azras similarity matrix.

Notes:

• We've looked at Multidimensional Scaling (MDS), but that seems to require the number of dimensions as an input, though to us, the number of dimensions on which Azra sees similarity is an empirical question.
• We've looked at Hierarchical Clustering Methods and respective dendrogram plots, but that seems to sit awkwardly with the fact that similarity is a multidimensional phenomenon; item censored might share category A with but-how, but category B with language-of-bees etc.
• We've looked at Principal Components Analysis (PCA) – mostly because we know it well, so everything starts looking like a nail ... – but that doesn't work with a similarity matrix, and even with a (converted) distance matrix only under some conditions about which we're not sure. (We tried anyway, see below).

Here's our rough, hacky and probably just plain wrong/dumb way to do this: It doesn't give us any indication of how many dimensions we should be retaining.

We first make a distance matrix as per the cosine theorem (?!):

distances <- sqrt(1-Azra)


We then plug that into a (classical?) MDS and plot the result:

md_scaled <- cmdscale(d = distances)
md_scaled <- as.data.frame(md_scaled)
ggplot(data = md_scaled, mapping = aes(x = V1, y = V2, label = rownames(md_scaled))) + geom_text()


• I am a bit confused: can't you view your matrix as a correlation matrix? If so, you can run PCA or FA directly, without any conversions. Commented Aug 18, 2016 at 12:56
• hehe, yes, I'm confused too, @amoeba. I initially thought that we could just treat this as a correlation matrix (since it looks like one, well except for the fact that it's all positive). However, I couldn't find any source that said that it'd be ok to treat co-occurence counts as correlation matrices, and this post seemed to suggest that some fairly tight conditions applied. Would you say treating it just as a correlation matrix is defensible? That would be fantastic! Commented Aug 18, 2016 at 13:40
• You are right, it's a good point about your matrix being all positive. If two of your items were perfectly negatively correlated, you would expect to get 0 in your matrix, instead of a negative number. But this also suggests that your matrix is not really a "similarity matrix" in the sense used in the linked post. Commented Aug 18, 2016 at 13:56
• Yes, more precisely, our matrix contains co-occurence counts (scaled to highest possible count = 1). We're assuming that the more (open-ended, Azra-defined) categories co-occur on some item pair, the more alike they are in her mind. eating-grandpa/ bad-hen, for example, share 7 categories (scaled 0.388), but one-letter/conjugation share 0 (scaled 0) categories, so we're assuming she finds the former more similar than the latter. Is that a defensible, or at least plausible jump from co-occurence to similarity? Commented Aug 18, 2016 at 14:05
• Not sure. There should be a better way. As I said, 0 co-occurences should really yield a negative similarity, not a zero one. Do you know what number of co-occurences you expect by chance alone? Do I understand correctly that your raw data is actually 35*18 matrix of zeroes and ones? Commented Aug 18, 2016 at 14:23

Based on @amoeba's suggestion, we have decided to go back to the raw, logical data and conceptualize similarity differently, than we did in the question; we can now use the familiar (and simple) correlation coefficients and Principal Components Analysis (PCA) to summarize the data.

Instead of co-occurence counts, inspired by Barton's Z, we transformed the TRUE FALSE values in the logical raw data into their respective deviations from their expected value. The expected value of some (inductive, participant-defined) category to be assigned TRUE on some item is, simply, the total number of TRUEs on that category, divided by the number of items. We take these simple expected values as a weighted means of the outcomes, because draws of items (category assignments on items) are independent: just because you've assigned some TRUE already doesn't mean you can't assign it some more.

The resulting deviations from their expected TRUE value can be interpreted as a surprisal value of TRUEishness. For example, if some item has a positive value (close to 1), this means that it has been assigned TRUE despite that being very unlikely. We thereby weight more heavily those cells, that are less likely to occur, and thereby carry more informational value. We count TRUE as 1, FALSE as 0, and thereby conveniently get surprisal values scaled between -1 and 1.

We can simply find an item x item correlation matrix, where we correlate the surprisal values of some item-pair over the observed categories, thereby, oddly, treating categories as observations.

This yields an informative correlation matrix, where high values imply an item pair that was surprisingly co-/non-assigned, and a high negative value implies that of the pair, one item had high, the other a low surprisal value, that is, surprising disagreement about some item pair. A low value around 0 implies, appropriately, that the item pair showed no consistent pattern across the observed categories, or that many assignments were unsurprising.

This correlation matrix is also still quite overwhelming, but can be easily reduced in dimensionality using PCA.

Here's what we did:

Azra <- structure(c(FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE,
FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE,
TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE,
FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE,
FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, TRUE,
FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE,
TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE,
TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, TRUE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE, TRUE,
FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE,
TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, TRUE, TRUE, FALSE,
FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,
FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE,
FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE,
TRUE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE, TRUE, FALSE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE,
TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE,
FALSE, TRUE, FALSE, TRUE, TRUE, FALSE, TRUE, FALSE, TRUE, FALSE,
TRUE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE,
FALSE, TRUE, FALSE, TRUE, FALSE, FALSE, TRUE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, TRUE, TRUE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE,
FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, TRUE, FALSE, FALSE,
TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE), .Dim = c(35L,
18L), .Dimnames = structure(list(items = c("but-how", "encyclopedia",
"inventions", "gray-hair", "i-we", "the-same", "the-better",
"cockatoo", "caravan", "comma", "headturner", "crocodile", "countries",
"level", "morning", "idiom", "lullaby", "riddle", "eating-grandpa",
"easter-bunny", "alphabet-of-swearing", "guilt", "trouble", "eating-animals",
"random-poetry", "comparatively", "one-letter", "resistance",
"conjugation", "censored"), categories = NULL), .Names = c("items",
"categories")))
# Azra has items as rownames, and (user-defined, open-eded columns as colnames), TRUE/FALSE as values

# this is the expected value
ev <- colSums(Azra) / nrow(Azra)

# and here's the surprisal value
surprise <- t(apply(X = Azra, MARGIN = 1, FUN = function(x) {x - ev}))

# now we correlate across observed CATEGORIES for every item pair
correl <- cor(t(surprise))

# and plot the result
library(ggplot2)
library(GGally)
ggcorr(data = correl, label = TRUE)

# and we can use PCA to summarize the overwhelming corrplot
pcares <- prcomp(x = t(surprise), retx = TRUE, center = TRUE, scale. = TRUE)

pcares$sdev^2 # surprisingly, we may retain up to 8 factors which have eigenvalues > 1, though this may be overstated, and need a parallel analysis to be safe # we know that some of the underlying surprisal value correlations might just be random chance; after all, 18 observations (categories in this case, over 35 variables is weird and not very reliable) # we're not yet sure how to do this, but let's say we rotate Quartimax # we preliminarily opt for Quartimax, because we like items to be *on* the axes library(GPArotation) rotated_Azra <- quartimax(pcares$rotation[,1:3])$loadings # we just retain/rotate 3 PCs to be safe g <- ggplot(data = as.data.frame(x = rotated_Azra), mapping = aes(x = PC1, y = PC2, label = rownames(rotated_Azra))) g + geom_text()  There's a bunch of things we're not sure about yet, especially how to rotate this result, and how to appropriately deflate it (by a parallel analysis or something like that?), but that's all details. P.S.: A fuller, though preliminary exposition with some context can be found at http://pensieve.maxheld.de/q-cat.html. P.P.S.: The surprisal value is inspired by Barton's Z, full source in Burton, Michael. 1972. “Semantic Dimensions of Occupation Names.” Multidimensional Scaling: Applications in the Behavioral Sciences 2: 55–72. • @amoeba this is what we did, based on your suggestion. Any thoughts? Commented Aug 23, 2016 at 18:35 • @maxheld The first part of this post presents quite a complicated description, and I got a bit lost. Do I understand correctly that you took your binary$35\times 18$data matrix, interpreted 35 rows as samples and 18 columns as variables, performed PCA on the correlation matrix (center=true, scale=true) and plotted 2 first PCs? What's the point of manual centering (computing "surprise") if you later do PCA that centers by default? If I understood correctly, then your writeup is a huge overcomplication. Commented Aug 23, 2016 at 21:53 • @amoeba sorry for being unclear again. No, we interpreted the 35 rows as variables and the 18 columns as observations, hence the t() in cor(t(surprise)). This is a bit stupid on our part, and easily overlooked – we just wanted to start from the same raw data, hence the transposing business. Anyway, we manually first center by observations, which isn't usually done, I think, but made sense to us b/c a TRUE on a very "rare" category is more meaningful, etc. We then automatically center again on the variables (items) in prcomp(). Commented Aug 23, 2016 at 22:01 • We do the latter bit (centering on the variables aka items), because in calculating the$35 Item \times 35 Item\$ correlation matrix, we don't want the items to have different weight based on their sd and mean. (I understand this actually applies only to the sd, not the mean, but we scaled and centered, just to be sure). Hope this clarifies things. Commented Aug 23, 2016 at 22:03
• Ah, okay. So you center both rows and columns. Just for the reference, this is called double-centering. Anyway, good luck with your research! Commented Aug 23, 2016 at 22:07

I have a few approaches which might work for you.

k-mediods clustering

d <- sqrt(1-Azra)
library(cluster)
p2m <- pam(d, 3, dist = TRUE)
plot(p2m)


However, this doesn't seem to return good results for the example you provided. A value of one is ideal.

Hierarchical Clustering

hc <- hclust(as.dist(d))
plot(hc)


In my opinion you still get multi-dimensional clustering because Category A can combine with another item or cluster at a higher level if it is the closest item to that cluster during that iteration.

You might also want to refer to this: Clustering with a distance matrix

My only concern is the validity of calculating the distance matrix from this data using the method you provided. I don't have a better idea at the moment.

• thanks so much – we're going to implement each of those and try and substantively interpret them. Commented Aug 18, 2016 at 14:11
• I'm still confused about the "multidimensionality" of hierarchical clustering and its adequacy here, but that might very well because I'm too beholden/used to a PCA-way of doing things. What you say makes a lot of sense to us: that multidimensionality is (sort of) reflected in the higher-level clusters. This might actually make our interpretation more meaningful. I still worry about the very hierarchy of the clusters, though, which seems at odds with how the data were generated (very much as multidimensional similarity). Really like that the clustering takes care of the number of clusters. Commented Aug 18, 2016 at 14:16
• I'm also unhappy about how the distance matrix is calculated; that feels hacky/haphazard, and I found only that CrossValidated post as a source. Any thoughts on affinity propagation clustering which seems to accept similarity matrices directly? Commented Aug 18, 2016 at 14:25
• Haven't looked at affinity propagation yet, but it does look like it might be worth looking into for your use case. Commented Aug 18, 2016 at 14:52
• thanks so much again; we ended up taking @amoeba s comment to heart and your worries about how the distance matrix is calculated. As a result, we went back to the raw data and came up with a different approach, so now we can use PCA. Thanks so much, anyway for your generous recommendations. Commented Aug 23, 2016 at 18:36