A few days ago, I wrote a blog post – R0 and the exponential growth of a pandemic – where I was trying to generate some visualization of some exponential growth, in the context of a pandemic. After giving some thoughts, the previous graph might not be the best one to see an exponential based contagion.

Having graphs evolving, from the left to the right, gives us the (false) idea of some temporal evolution. Which is no necessarily correct. It simply means that contaminated people will contaminate other people, and we look at the number of iterations here. So maybe some concentric dots would look better.

And from a technical perspective, what I did was fun, but probably too complicated. In my previous post, I wanted to pack *optimally* k identical disks intro a unit circle. On http://hydra.nat.uni-magdeburg.de/packing, it was possible to get the “best known packings of equal circles in a circle”, with the coordinates. But as we will see, we can use something much more simple here.

My idea is now to create some picture like one below, with concentric colored dot. In the center, we have the first people that were contaminated, and then, we can see the transmission, somehow

From a technical perspective, here, I use a different strategy. I decided to draw random points, uniformly. The problem with randomness is the natural high discrepancy, with monte carlo methods: it is very likely that some disks will overlap. It is not a major issue, but it might distort the message. So I decided to use some low-discrepancy sequences, such as Halton‘s sequence.

library(randtoolbox) S = halton(n=5000, dim = 2)*2-1 |

Here, I have disk coordinates in [-1,+1]^2. Then, to get disks in a circle, I simply compute the distance to the origin (0,0),

D0 = S[,1]^2+S[,2]^2 |

and take the ranks. If I want to visualize k=200 people, I consider the 200 smaller ranks. To get concentric circles, each part having k_i individuals, I use as thresholds R_0^{\bar k_{i-1}},R_0^{\bar k_{i}},R_0^{\bar k_{i+1}}, etc, where \bar k_i=\bar k_{i-1}+k_i,

R0 = rank(D0,ties.method = "random") C0 = as.numeric(cut(R0,c(0,cumsum(k)+.5)),100000) |

where

R0=1.8 k=round(R0^(seq(1,9,by=2))) |

Then we can plot the dots, with appropriate colors,

points(S,pch=19,col=colrpal[C0],cex=.75) |

And of course, we can try that with different values, for R_0

R0=2.2 k=round(R0^(seq(1,9,by=2))) kmax=max(k) S = halton(n=5000, dim = 2)*2-1 plot(S,col="light yellow",axes=FALSE,xlab="",ylab="",xlim=c(-1.3,1),ylim=c(-1,1),cex=.75,pch=19) D0 = S[,1]^2+S[,2]^2 R0 = rank(D0,ties.method = "random") C0 = as.numeric(cut(R0,c(0,cumsum(k)+.5)),100000) points(S,pch=19,col=colrpal[C0],cex=.75) |

To make it even faster to look it up: from sheet 50 on in the PDF.

People estimate changes in areas with a -40% to -10% bias. So a circleplot is exchanging one bias (the linearity bias for exponentials) for another bias (the bias to underestimate areas).

Have you ever looked into the work of Ross Ihaka of R fame? [1] His slides on statistical graphics and information visualisation are still relevant.

These are nice graphs, but the thing I’ve learned from his courses is that people interpret circles wrongly [2]. They still see some kind of linearity in circles, where ‘we’ (the statistically inclined) might see exponents.

His best sentence was: “Want to fail this class? Just show me a piechart.” You’d lose some of the niceness, but a plot with the period going from left to right would lead people to better interpret the numbers. (And then alas we have the regular exponential graph, that still doesn’t give people a sense of what’s going on.)

[1] https://www.stat.auckland.ac.nz/~ihaka/?Teaching

[2] https://www.stat.auckland.ac.nz/~ihaka/courses/787/lectures-perception.pdf

have you read the great book “The Book of Circles: Visualizing Spheres of Knowledge“. I would definitively think that circles are a natural way to visualize data…

Ha, that’s great. That goes 100% contrary to what Ihaka was teaching. I fear a deep dive coming up on my part.