Fear of Vocals

Since I seem to be trying to keep the old place ticking over without actually having much of immediate relevance to report, here instead is some more old rope.

Some of it is ropey indeed, but there are also tracks that in retrospect I rather like, ridiculous accents and all. YMMV, of course.

Otherwise, what have you missed? Jean Michel Jarre. Isle of Wight. Cirque Eloize. Provence. Not all since the last post, obviously. Chronology is for wimps.

Miss Kiss Deferment

Among the many things mentioned en passant in my recent cri de cœur on the matter of tweeting vs getting stuff done was apps, to wit: the writing of. Were there more than, to a very good first order approximation, zero (0) people who pay attention to this matter, it would not have escaped their imaginary attention that the currently extant FX trio have not seen updates since January, and the Coming Soon tag on the Osculatrix page was ringing so hollow I had to replace it with this:

screen-shot-2016-10-13-at-11-20-43

To be honest, even that may be a touch optimistic.

App development has certainly been amongst the collateral damage from 2016, the International Year of the Lemming, but a number of other factors have also conspired against it.

Some of these are technological. In particular, the introduction of Audio Unit Extensions in iOS 9 last autumn added a whole new set of infrastructure that would require substantial rewriting to support. Adoption of this tech by app makers in general was pretty glacial for the first year or so, partly because the documentation was rubbish and the process entailed a lot of groping around, but also I suspect because it’s just a bit galling to have to do a whole bunch o’ stuff just to stay more or less in the same place. Arguments about the user benefits of AUX continue. The more vocal proponents insist they’re transformative and essential, but the evidence so far has been pretty thin. Of course this is partly a self-fulfilling consequence of the slow take up, so whatever. But as an app developer it just adds to the already plentiful hoops you have to jump through to get another tick for the checklist on the side of the virtual box.

☑ High Protein!
☑ Low Carb!
☑ Gluten Free!
☑ Audio Unit support!

In any case, adoption is finally increasing and it’s getting harder and harder to avoid. But it’s a bloody nuisance and no mistake.

This is somewhat compounded by a parallel version shift in one of the frameworks I use, Michael Tyson’s The Amazing Audio Engine. (Mike’s a splendid fellow, but his library naming leaves something to be desired.) Version 1 of TAAE doesn’t easily interoperate with the AUX rewiring. Its newfangled successor, TAAE2, apparently does, but in the process completely throws out a number of the old system’s benefits and seems to be primarily targeting people doing rather different stuff than me; fair enough, there are probably more of them, but it makes the task of porting to the new version yet another tranche of unappealing work for no rewards that are visible above the waterline.

The Red Queen looms as a constant presence over iOS app development.

“Well, in our country,” said Alice, still panting a little, “you’d generally get to somewhere else—if you run very fast for a long time, as we’ve been doing.”

“A slow sort of country!” said the Queen. “Now, here, you see, it takes all the running you can do, to keep in the same place. If you want to get somewhere else, you must run at least twice as fast as that!”

Anyway, that’s mere technology. More significant obstacles for much of the year involved my actual for-real job, in particular the shepherding of a final paper to publication before my contract expired at the end of July, plus some stuff on spatialisation of the model which is currently languishing in half-finished limbo. And, subsequent to said contract expiry, ongoing attempts to rescue from similar half-finished limbo a bit of languishing work from my previous postdoc that seemed promising at the time.

In other words: sorry about the delays, I’ve had things on my plate.

And yet.

All of these excuses are kind of secondary. The principal reason Osculatrix hasn’t seen the light of day is simple: it’s a synth and I’m not happy enough with how it sounds. It’s not terrible or anything, it just isn’t very interesting. It was maybe 75% finished, at least in terms of sound generation — there were some remaining decisions about the controls — back in May. Then Moog released their lush modular emulation Model 15, and I basically threw in the towel right there.

Don’t get me wrong, Osculatrix is not at all the same kind of thing as Model 15. It’s not attempting to replicate anything, it’s not modular or virtual analogue, it makes weird noises via the same sort of cryptic parameters as Frobulator and friends. It’s not the sort of thing for which you’d pay the twenty quid or so that Moog charge for their hulking skeuomorph. These apps are not in any meaningful sense competitors.

But jumping between Model 15’s oversampled velvety richness and Osc’s grumpy abrasion I sort of felt like, oh what’s the point? As an app it just seemed superfluous. The parts I was interested in doing were done, the experiment run, the rest was tiresome drudgery to get it in the hands of people who would have more fun with the Moog app, or the wonderful Mitosynth, or Magellan or iSEM or any of countless others. There’s no shortage of synths on the App Store.

And that’s where the whole thing stands right now. Backburnered. In turnaround. On the shelf. Cryogenically frozen. Never to be revived? Only time will tell.

Of course, Osculatrix isn’t the only app in town. Maybe something else will make it out of the WT gravity well. But that’s another story for another, possibly very distant, day. Meanwhile, it’s a lesson learned in gun jumping.

Burlap


If you are seeing this text, it’s because your browser is not able to display the specified canvas element. Rest assured you aren’t missing much.

“What the merry fuck,” you may well ask, “is this?” Just testing, is all.

And failing on the index page, which is a bit tiresome.

Okay, seem to have got it working, albeit in a thoroughly unsatisfactory way. It appears that only global scripts and styles get added to the head on index posts, at least with the Scripts N Styles plugin. Which is clearly wrong — why would you ever want the things you put in a post to break in the index? — but there you go. Perhaps a better way will become apparent on further investigation…

Social Anxiety

It’s becoming increasingly clear that I need to get the hell off social media. That’s sort of a perverse thing to declare in a blog post, but it’s a long time since WT could be reasonably described as ‘social’, and indeed the very notion of social media has changed beyond recognition in the interim. When we talk about it now, what we really mean is Facebook and — overwhelmingly — Twitter.

Ah, Twitter. That simple little ‘microblogging platform’. Convenience conveyor of outrage morsels to the ever-ravenous masses. Who would have guessed, when it launched back in 2006, or even in 2009 when I finally capitulated and posted my first ambivalent tweet, just what it would become?

Perhaps everyone, at some level. Perhaps we all got exactly what we always wanted.

In any case, here we are. The perpetual emotion machine perpetually emotes. The unceasing, unstoppable global cacophony of Pavlovian bells chimes and chimes and we cringing Quasimodos grunt and drool. We tailor our perfect personal Morse code-sparking electrode and wire it into the emotional centres of our brain, delivering a stream of tiny shocks just incrementally powerful enough to maintain that sense of entrenched helpless rage, perfectly balanced on the critical edge of disgust and impotence.

Evidently, not everyone is as susceptible to this as I am. Although the general drift of politics and culture lately strongly suggests that enough people are for it to be a significant problem. Will Twitter actually be the thing that finally immanentises the eschaton? Who knows. It at least seems to be in with a chance.

I made my escape years ago, weary of the bottomless aggravation and just the sheer amount of time and emotional energy it takes to be constantly furious about things you have absolutely no influence over anyway. The release of resources was invigorating — I could read books instead of soundbites, write apps instead of peevish, unfunny one-liners.

But, of course, the respite was only temporary. As respites always are. The awful unbearable momentum of 2016, the enervating saturation of utter fucking woe, herded me back into the quagmire. That my return coincided with the depth-plumbing, barrel-scraping shitbaggery of the EU referendum was, well, no coincidence. Just one more reason to hate and despise and wish eternal unendurable agonies onto the fucking Brexiteers, the way they made it seem imperative to pay attention to their relentless malfeasance. The laughable, nauseating, tear-jerking dark heart of it. The horror. The horror.

So, back I went. And have spent the last six months in a state of diffuse despair and ambient anxiety. Unable to stop watching the dismal succession of slow-motion disasters, train wreck upon plane crash upon supertanker collision, one after another. Angry, frustrated, unable actually to concentrate or get things done because what is the fucking point anyway?

Just read another tweet, another live blog, another poisonous troll comment crowing about the dismantling of modernity. Another headline, another traducement, another barefaced opportunistic lie that frogmarches the famous tolerant open democracy we’re always so proud of towards fascism.

England Prevails.

https://twitter.com/damiengwalter/status/783598265509957632

It gets worse. It gets worse. It just keeps getting worse, and there seems absolutely no prospect of that trend abating. (Yeah, Hillary will probably win in the US, but it’s already too late to stop that country’s political discourse getting dragged into the sewer too. Lap it up, cucks!)

So, time to back the fuck off. Step away from the firehose. Ignorance is bliss. This unremitting angst is purposeless, ineffective. Forget it and do something else instead. Maybe there is nothing I can achieve with the rescued time that has any merit either — what does, objectively? — but I hope it’ll at least be more fun.

Averages Are Evil

The basis of science, and one of its main claims to epistemic validity, is observation and measurement. We do experiments and follow evidence. We enquire into the workings of the world by means of data.

Unfortunately, data is not always well-behaved. It is tricksy and wayward and noisy, subject to contamination and confounding and being not what it seems. The more complex the processes being studied, the more data is needed and the more sources of error there are. And most life science processes are very complex indeed.

Over the years statisticians have come up with a wide variety of techniques for wrestling useful information out of noisy data, ranging from the straightforward to the eye-wateringly complicated. But the best-known and most widely used, even by non-scientists, is much older and simpler still: the average, usually in the form of the arithmetic mean.

Averaging is easy: add up all your data points and divide by how many there were. Formal notation is frankly superfluous, but I’ve got a MathJax and I’m gonna use it, so for data points $x_1$, $x_2$, …, $x_n$:

$$\bar{x} = \frac{1}{n} \sum^n_{i=1} x_i$$

The intuition behind averaging is as appealingly straightforward as the calculation: we’re amortising the errors over the measurements. Sometimes we’ll have measured too high, sometimes too low, and we hope that it will roughly balance out.

Because it’s easy to understand and easy to use, averaging is used a lot. I mean A LOT. All the time, for everything. Which is often fine, because it’s actually a pretty useful statistic when applied in an appropriate context. But often it’s a horrible mistake, the sort of thing that buttresses false hypotheses and leads to stupid wrong conclusions. Often it is doing literally the opposite of what the user actually wants, which is to reveal what is going on in the data. Averages can all too easily hide that instead.

Obviously this is not really the fault of the poor old mean. It’s the fault of the scientist who isn’t thinking correctly about what their analysis is actually doing. But averaging is so universal, so ubiquitous, that people just take it for granted without much pause for thought.

The fundamental problem with averaging is, vexingly, also the thing that makes it appealing: it reduces a potentially complex set of data into something much simpler. Complex data sets are difficult to understand, so reduction is often desirable. But in the process a lot of information gets thrown away. Whether or not that’s an issue depends very much on what the data is.

In the simple error model described above, the extra data really is just noise — errors in the measurement process that obscure the single true value that we wish to know. This is the ideal use case for the mean, its whole raison d’être. Provided our error distribution is symmetric — which is to say, we’re about equally likely to get errors either way — we will probably end up with a reasonable estimate of the truth by taking the mean of a bunch of measurements. We don’t really care about the stuff we’re throwing away.

Histogram of a unimodal data set.
For unimodal data, the mean (indicated here by the dashed line) can give a reasonable estimate of the typical (or even “true”) value in the population.

However, this is a very specific kind of problem, and many — perhaps most — sets of data that we might be interested in aren’t like that. It’s actually pretty rare to be looking for a single true value in a data set, because most realistic populations are diverse. If the distribution of the data is not unimodal — meaning clustered around one central value — then the average is going to mislead.

Histogram of non-unimodal data
When the data is not unimodal, the mean value (dashed line) may be completely unrepresentative.

What is the average human height or weight? That seems like a plausible use of the mean, but it’s barely even a meaningful question. A malnourished premature newborn and the world’s tallest adult simply aren’t commensurate. It’s like taking the average of a lightbulb and a school bus. The result tells you nothing useful about either.

This problem is significantly compounded when you start wanting to compare data sets. Which is something we always want to do.

You can, of course, compare two means. One of the most basic and widely used statistical tests — the Student t-test — will do exactly that. But to do so is explicitly to assert that those means do indeed capture what you want to compare. In a diverse population — and again, most realistic populations are diverse — that is a strong assumption, one that needs to be justified with evidence.

Let’s say you’ve got two sets of observations. The sets are related in some way — they might be from patients before and after a treatment, or children before and after a year of schooling, or shoes worn on left and right feet. The raw data look like this:

Raw Data

You’re looking for a difference — a change, let’s call it an improvement — between these two sets, so you take the means:

Mean values of each group

Well, that’s kind of promising: observation 2 definitely looks better. Maybe you draw a line from one to the other to emphasise the change. Obviously there are some differences across the population, so you throw in an error bar to show the spread:

Difference of means with SD error bar

Here I’ve shown the standard deviation, a common and (given some distributional assumptions) useful measure of the variability in a data set. Very often people will instead use a different measure, the standard error of the mean (often shortened to standard error). This is a terrible practice that should be ruthlessly stamped out, but everyone keeps on doing it because it makes their error bars smaller:

Mean change with SEM

While you’re at it, you might perform the aforementioned t-test on the data and boldly assert there’s a less than 5% probability* the observed improvement could have happened by chance. Huzzah! Write your Nature paper, file your patent, prepare to get rich.

But what we’ve done here is gather a bunch of data — maybe through years of tedious and costly experiments — and then throw most of it away. Some such compression is inevitable when data sets are large, but it needs to be done judiciously. In this case the sets are not actually large — and I’ve concocted them to make a point — so let’s claw back that discarded information and take another look.

In using the means to assess the improvement we implicitly assumed the population changes were homogenous. If instead we look at all the changes individually, a different picture emerges:

Pairing data between observations

It’s pretty clear that not everyone is responding the same way. Our ostensible improvement is far from universal. In fact there are two radically different subsets in this data:

Paired data with group colouring

Fully half of the subjects are significantly worse off after treatment — and in fact they were the ones who were doing best to begin with. That’s something we’d really better investigate before marketing our product.

If this were real data, we would want to know what distinguishes the two groups. Is it the mere fact of having a high initial level of whatever it is we’re measuring? Is there some other obvious distinction like sex or smoking? Some specific disease state? Or is there a complex interplay of physiological and social factors that leads to the different outcome? There might be an easy answer, or it might be completely intractable.

Of course, it’s not real data, so the question is meaningless. But the general shape of the problem is not just an idle fiction. It’s endemic. This is rudimentary data analysis stuff, tip of the iceberg, Stats 101 — and people get it wrong all the sodding time. They’re looking at populations they know are drastically heterogenous, but they can scrape a significant p-value by comparing means and that’s all that matters.

Stop it. Don’t be that person. Don’t toss your data away. Recognise its structure. Plot it all. Don’t hide its skew. Don’t make unwarranted assumptions. And don’t take an average unless you actually fucking mean it.


* I’ll save the rant about significance tests for another time.