Notes · methods

Extracting a crossover trial: why its conditions are not two arms

2026-07-10

It’s 11pm, the trial in front of you is a crossover (every participant received both the active condition and the control, in sequence), and the results table reports a mean and SD for each condition. Your meta-analysis wants an effect size and its standard error. The fastest move is to drop those two columns into your parallel-arm form as if they were two independent groups. It is also the single most common way a crossover gets extracted wrong.

Why the two conditions are not two arms

In a parallel trial, the two groups are different people, so the contrast between them carries the full between-person variance. A crossover measures the same person under both conditions. Each participant is their own control, and the two measurements are correlated: someone who scores high on the active condition tends to score high on the control too. That within-person correlation is the entire reason crossovers are efficient, and it lives in the variance of the difference, not in either per-condition SD.

Treating the conditions as parallel arms does two wrong things at once. It ignores the correlation, so it computes a variance that’s too large. And it double-counts the sample: 20 participants become 40 observations. The net effect: the trial’s precision is understated, its weight in the pool shrinks, and a real effect gets washed toward null. Cochrane Handbook ch. 23 (§23.2) is explicit that crossover analysis must be based on paired differences.

The paired-difference recovery, worked

Suppose the trial reports, for n = 20 participants, condition A mean 5.2, SD 1.8 and condition B mean 4.1, SD 1.9. The mean difference is easy:

MD = 5.2 − 4.1 = 1.1

The SD of the paired differences is what you actually need, and it requires the within-person correlation r (§23.2.7):

SD_diff = √(SD_A² + SD_B² − 2 × r × SD_A × SD_B)

With r = 0.5:

SD_diff = √(1.8² + 1.9² − 2 × 0.5 × 1.8 × 1.9)
        = √(3.24 + 3.61 − 3.42)
        = √3.43 = 1.852

Then the standard error of the mean difference uses n, the number of participants, not 2n:

SE = SD_diff / √n = 1.852 / √20 = 0.414

Compare the parallel-arm shortcut you were about to use:

SE_wrong = √(SD_A²/n + SD_B²/n) = √(3.24/20 + 3.61/20) = 0.585

That’s a 41% inflation of the standard error: the trial gets under-weighted by exactly the correlation you threw away.

The correlation you have to supply

The catch: crossover papers rarely report r. You cannot read it off the table, and it swings the answer more than any other input:

r = 0.3  →  SD_diff = 2.190,  SE = 0.490
r = 0.5  →  SD_diff = 1.852,  SE = 0.414
r = 0.7  →  SD_diff = 1.436,  SE = 0.321

The Handbook’s advice is to impute r (ideally from crossover trials in the same review that do report a paired analysis) and then run a sensitivity analysis across a plausible range. If any trial reports the paired result directly (a mean difference with its CI or SE, a paired t-statistic, or a paired-sample p-value), use it: those already embed the correlation, and you can back out SD_diff without imputing anything.

The audit-trail habit

Record three things for every crossover you extract: that the SE was derived via the paired-difference route, the value of r you assumed, and where it came from. “We recovered SE = 0.414 from per-condition SDs via Handbook §23.2.7, imputing r = 0.5 from the two trials reporting paired data” is a complete answer to the statistical reviewer who, two years from now, asks why this trial’s confidence interval looks the way it does. The imputed correlation is a modelling choice; the one unforgivable move is to make it silently. When the derivation and its assumed constant travel with the number, that question answers itself instead of reopening the extraction.