Card sort analysis: similarity and clustering
Card sort analysis turns each participant's groups into a similarity matrix, the share of participants who put two cards together out of those who sorted both, and clusters that matrix into a dendrogram that shows which cards belong together and how strongly.
Updated . Describes scoring version 2026.10.0, the version stored with every score Stroop computes. All method notes
The matrix answers “do people think these two belong together?” one pair at a time. The dendrogram answers “what groups would most people make?” by building them up from the most agreed pairs. Read them together: a tidy dendrogram over a matrix of pale cells means people agreed on little and the clustering forced a shape anyway.
The procedure
- Take each participant's groups. Cards left unsorted or put in the unsure pile don't count as a group.
- For every pair of cards, count the participants who sorted both, and the participants who put them in the same group.
- Similarity is the second count over the first. When nobody sorted both cards, the cell is blank rather than zero.
- Turn similarity into distance (1 minus similarity), treating a blank as no similarity.
- Cluster with average linkage (UPGMA): join the two closest clusters, recompute distances as the average over every pair of cards between clusters, and repeat until one cluster is left.
- Break ties between equal distances on the lowest original card index, so the dendrogram is the same on every load.
- Order the matrix by the dendrogram's leaves, so groups show as dark blocks along the diagonal.
Average linkage is the UPGMA method Sokal and Michener described in 1958 [1]. Our clustering gives the same merge heights as SciPy's average linkage [3] and R's hclust with method average, which is how it's tested. Open sorts also offer label standardisation (grouping participants' category names that mean the same thing) and the Actual Agreement Method, a tree built only from groups participants really made.
A worked example
The sample open sort on the surveys and IA page: 38 participants sorted 12 cards from the Fenwick Grocers app. The five pairs people agreed on most:
| Cards | Together | Sorted both | Similarity |
|---|---|---|---|
| Click and collect and Substitutions | 34 | 38 | 89% |
| Delivery slots and Substitutions | 32 | 38 | 84% |
| Delivery slots and Click and collect | 31 | 38 | 82% |
| Nutrition labels and Allergen advice | 29 | 38 | 76% |
| Store finder and Opening hours | 29 | 38 | 76% |
Every participant sorted every card here, so each similarity is simply the together count over 38. Clustering then joins the closest pairs first. The first three joins:
| Join | Cards in the new group | Agreement |
|---|---|---|
| 1 | Click and collect, Substitutions | 89% |
| 2 | Delivery slots, Click and collect, Substitutions | 83% |
| 3 | Nutrition labels, Allergen advice | 76% |
Agreement is 1 minus the height at which the join happens. Cutting the dendrogram at 50% agreement, as the example on the surveys and IA page does, keeps only groups that at least half the participants would broadly recognise.
How many participants
Tullis and Wood (2004) [2] found that similarity matrices from 20 to 30 participants correlated closely with those from much larger samples. For an open sort feeding a navigation decision, 30 is a sensible target, and the price doesn't change if you collect more.
Used on Card sorting. Stroop is the all-in-one research and testing platform. Run usability tests, prototypes, surveys, tree tests, diaries and IATs in one study, and get results back transcribed, scored and charted, with every finding linked to the session it came from.
Sources
- [1]Sokal, R. R. and Michener, C. D. (1958). A statistical method for evaluating systematic relationships. University of Kansas Science Bulletin, 38, 1409 to 1438. The average-linkage (UPGMA) method.
- [2]Tullis, T. and Wood, L. (2004). How many users are enough for a card-sorting study? Proceedings of the Usability Professionals' Association conference, Minneapolis.
- [3]Virtanen, P. et al. (2020). SciPy 1.0: fundamental algorithms for scientific computing in Python. Nature Methods, 17, 261 to 272. Stroop's clustering is tested against scipy.cluster.hierarchy.linkage with method average.