Vaccines – An Excerpt

This the concluding part of a longer essay I wrote a while ago, when sorting out my thoughts on anti-vax. It’s based on “The First Rotavirus Vaccine and the Politics of Acceptable Risk”, Milbank Q. 2012 Jun; 90(2): 278–310.

(Context: there was a “RotaShield” vaccine withdrawn in 1999 following confirmation of a serious adverse event associated with its use with infants. The story around this is an important part of the mythology of anti-vax in respect to one of their prime targets, Paul Offit – one of the most public faces of the scientific consensus that vaccines have no association with autism, among many other things)

The history of the Wyeth/RotaShield vaccine’s approval while Paul Offit was on the ACIP panel is crucial It is at the heart of disagreements around Offit himself, but it also operates as a key part of a negative feedback loop that poisons discussion across the pro-vaccine/vaccine-sceptic divide. I will explain why.

The pro-Offit position is that everyone made decisions around Wyeth/RotaShield in good faith, and that the decisions made remain perfectly understandable based on the evidence available at the time the decisions were made, and that there is no evidence to support the notion that there was wrongdoing involved.

I believe that this position is true.

I simultaneously believe that the ACIP process at the time needed improvements to its conflict-of-interest policy. The very fact that people can accuse Offit over RotaShield in the way they do, in a manner that carries a reasonable degree of credibility to a casual observer, surely proves that there is an issue here. I do not think there is any inconsistency in holding these two beliefs at the same time: you can believe that a COI policy needs improvement, without believing that people in any given situation in fact acted badly.

But Offit’s hard-line critics see a very different picture. They see someone who joined the ACIP panel primarily to enrich himself – using the influence of his position to create a vast and open market for his own (Merck/RotaTeq) vaccine by rushing through the approval of a competitor (Wyeth/RotaShield) vaccine with known safety issues. At its strongest, the narrative is that Offit was fully expecting RotaShield to be withdrawn, leaving the pre-established market wide open just as his own vaccine was available to fill the gap. The consequence of this was the suffering of around 100 children, of which 1 actually died and 50 had to have surgery. In return for this, he has profited to the tune of tens of millions of dollars.

In other words, the essential narrative for many of Offit’s opponents is that he has killed a child for money – that Paul Offit is literally a baby-murderer.

Everything else in people’s views of Offit flows from their interpretation around the RotaShield episode. To call this an “interpretation gap” is a huge understatement: it is a gulf, a chasm. It is impossible to reconcile the views. Offit is a medical researcher who has saved hundreds of lives. He has killed a child for money. He campaigns energetically to save lives in the face of death threats. He schemes endlessly to further his own interests, while children suffer and die as a direct consequence. He is a good man who is doing is best to do good things. He is “the devil’s servant” (

And standing on the other side of the divide is Offit’s dual, the closing half of the feedback loop – Andrew Wakefield. The anti-Offit characterisation is echoed in many of the accusations that are flung at Andrew Wakefield by the more intemperate pro-vaccine parties. Truly, many from each side honestly believe that the other side’s prophet is a baby-murderer. This is such a deeply unpleasant thing to consider that the more decent among those on each side rarely articulate it openly – they don’t even like to call the thought fully to mind – but the thought is there on both sides all the same.

Both Offit and Wakefield give a lot of speeches, but they don’t use this kind of rhetoric directly about their opposite number, and there is a good reason for this. It is a deeply primal, a tremendously powerful thing to accuse someone of – there is so much energy to be tapped from the sense of revulsion that results. But it never ends well, because the energy is diseased, tainted at its source. Once you believe someone is a baby-murderer it is hard to even think of them as fully human. Discussion turns ugly even if the underlying accusation is never fully brought to the surface – the unspoken thought poisons everything that it touches, killing respect and goodwill.

More generally, it is healthy for all of us to reject accusations like this wherever they crop up, whoever they are aimed at. No monsters here – only us.

CMY/CMYK pen plotting with Sakura Pigma Microns

This is possibly the most obscure post I will ever write.

Having recently built a “4xidraw” as per Misan’s instructable at I’ve been investigating various uses: I would totally recommend this as a project for anyone into electronics. The accuracy is pretty solid, the speed is good, and the cost a fraction of the “Axidraw” from Evil Mad Scientists – although the “Axidraw” is obviously a far better buy for anyone who wants the machine to get out of the way and just get on with the art bit.

One thing that interested me was the prospect of doing full-colour images, and the “4xidraw” design seems more than capable of overlaying multiple plots in different colours. The theory here is that you combine Cyan, Magenta and Yellow in various combinations – the “CMY” part. If there’s a certain base level shared by all 3, you can draw that out into a “Key” level that is black, giving “CMYK” as the overall name. So by using 3 pens, you can potentially do full-colour designs.

However the pens that many recommend for archival quality plot prints (Sakura Pigma Microns) don’t come in CMY colours. The best we can do is “Blue” (not “Royal Blue”) for “C”, while “M” is “Rose” and “Y” is yellow. The blue, in particular, is way too dark. What to do?

It turns out that with a bit of adjustment, one can rebalance the colour to something pretty acceptable. I arrived at my mix by eye, dong test plots with a small image containing blocks with each of red, green, blue, cyan, magenta, yellow and 50% grey. Note that I only tuned colours in 10% increments. First thing to do was to reduce the “C” (blue, really) in the mix. Setting this at 50% was best – but then “Y” was slightly overpresent. Reducing that to 80% produced the best mix that I was able to come up with using Sakura colours.

I ended up with the following Python code to map from RGB to CMYK. Note that I’m always setting K to zero because, for the kind of plotting I’m doing (“wiggle plots” – where you spiral outwards and wobble back and forth by an amount proportional to the amount of colour), it doesn’t make sense to draw out colour onto a K-layer.

def rgb_cmyk_convert_sakura(r, g, b):
    RGB_SCALE = 255

    # rgb [0,255] -> cmy [0,1]
    # white = no wiggle (0), black = maximum wiggle (1)
    if (r, g, b) == (0, 0, 0):
        # black
        return (1, 1, 1)

    rc = r / RGB_SCALE
    gc = g / RGB_SCALE
    bc = b / RGB_SCALE
    k = 0.0 # we don't use black as this we are calculating for "wiggle" plots: here, using black doesn't make sense
    c = (1 - rc - k) / (1 - k) * 0.5
    m = (1 - gc - k) / (1 - k)
    y = (1 - bc - k) / (1 - k) * 0.8

    return (c, m, y, k)

The results can be seen below. The green of the clown’s body at the bottom right is furthest off – Sakura’s blue doesn’t really have any green in it so we are missing some saturation there. But the match overall is not too shabby.

“Wiggle Plot” rendition using CMY mapping above
Staedler CMY Pigment Liner pens with a “true” (unweighted) mapping – admittedly, far better colour balance!