I have a matrix of origin-destination flows and I am trying to figure out the best way to derive X number of functional spatial clusters from the data. I haven't done this particular type of analysis before, but can I treat the O-D matrix as a dissimilarity matrix and simply use a hierarchical clustering algorithm as discussed here? What, if anything, do I need to do to the O-D matrix if I'm going to go this route?

Thanks in advance.

2 Answers 2


Here is a rambling set of resources/publications I have collected on the topic.

I haven't dug into any of them enough to give real firm advice about whether or not they can be performed in R. The Flow mapping software and the Hennemann articles use slightly different and novel techniques (so I'm guessing would take custom code), the Ratti article though just looks like it uses some regular definitions from other networking theories (the Hennemann and Guo articles take some pain to make sure the clustering obeys spatial configurations).

Those articles are about clustering regions of inter-connections rather than clustering flows (which it sounds like you want), but some articles on clustering the flow lines themselves exist. For an example see Phan, Doantam, Ling Xiao, Ron Yeh, Pat Hanrahan & Terry Winograd. (2005) Flow Map Layout. In Information Visualization, 2005. INFOVIS 2005. IEEE Symposium: 219–224.| PDF here You can see similar interactive layouts in the D3.js hierarchical edge bundling, or here is a really cool example of it as well, Global Dependency Explorer via visual complexity. Unfortunately D3.js does not appear to support native flow data like you have, but may be something to keep on the radar (if that is something you want).

  • Thanks for these links. I was interested in the second approach, which I believe is an implementation of the Intermax approach. I believe that Bostock (D3) was involved in the creation of Protovis, which had flow map creation. However, I'm less interested in a pretty visualization and more interested in being able to derive lists of node regions. The context is deploying resources to manage and balance assets within each region, if that helps.
    – scuerda
    Apr 12, 2013 at 10:57
  • It isn't clear to me @scuerda how the intermax approach relates to edge bundling (or the other networking measures). Nice maps and statistics should be complements of one another. Post back if you receive a better answer (or derive one yourself). From your further description it isn't 100% clear to me that you really want clustering, but I've no doubt clustering may be useful to the end goal - good luck.
    – Andy W
    Apr 12, 2013 at 16:57
  • Hi Andy, sorry, I didn't mean to imply that good looking visualizations weren't useful. As I understand the Intermax approach, it is a way of defining regions based on flows / connectivity between a large number of nodes. As such, it produces clusters of functionally connected nodes. In any case, I'll post back with my solution. Thanks for your feedback.
    – scuerda
    Apr 13, 2013 at 13:58

if you're prepared to ditch the graph paper i've seen the HOPACH package used to map flows between clusters of regions as nodes

e.g. outputs see slide 15 http://www.segra.com.au/segra11ConfProc/presentations/tuesday/concurrents/JonesWarwick.pdf

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.