Statistics for Traders #28: Coefficient of partial determination on today's slot-1 AUD Employment × GBPAUD sample — surprise_z adds 2.08 pp of TOTAL R² over bucket assignment, or 3.18% of the RESIDUAL variance after bucket is removed
Coefficient of partial determination = sr² / (1 - r_yz²). On today’s slot-1 AUD Employment Change × GBPAUD 15m sample (n=199), bucket assignment (Z) explains 34.5%of move_pips variance; of what’s left, surprise_z (X) explains another 3.18% of the residual. As a fraction of the TOTAL variance, X adds only 2.08 pp beyond Z. Same underlying identity as Stats #25 semi-partial and Stats #23 partial correlation, just expressed as a residual-variance partition rather than a total-variance ΔR².

The three correlations on today’s sample
| Correlation | Value | Interpretation |
|---|---|---|
| r(X=surprise_z, Y=move_pips) | -0.5925 | total X-Y relationship (bucket-driven) |
| r(X=surprise_z, Z=bucket_ord) | +0.9045 | near-linear (bucket is z-quantile discretisation) |
| r(Y=move_pips, Z=bucket_ord) | -0.5870 | bucket-to-move relationship (mostly the signal) |
| partial r_XY|Z | -0.1782 | X-Y correlation with Z removed from BOTH |
| semi-partial r_Y(X-Z) | -0.1443 | X-Y correlation with Z removed from X only |
| r_yz² = R²(Y ~ Z) | 0.3446 | Z alone explains 34.5% of Y variance |
| 1 - r_yz² | 0.6554 | residual Y variance after removing Z |
| sr² = ΔR²(X | Z) | 0.0208 | X adds 2.08 pp to TOTAL R² beyond Z |
| coefficient of partial determination | 0.0318 | X adds 3.18% to RESIDUAL variance after Z |
The formula and step-by-step
Coefficient of partial determination for X (given Z):
coeff_pd_X|Z = sr²_X / (1 - r_yz²)
where sr²_X is the semi-partial correlation squared (Stats #25), and r_yz² is R² from regressing Y on Z alone.
Step 1: compute semi-partial correlation. Numerator = rxy - rxz·ryz = -0.5925 - (0.9045)(-0.5870) = -0.0615. Denominator = sqrt(1 - rxz²) = sqrt(0.1819) = 0.4265. semi-partial r_Y(X-Z) = -0.0615 / 0.4265 = -0.1443. sr² = (-0.1443)² = 0.0208 = 2.08 pp of TOTAL variance.
Step 2: compute residual variance after Z. r_yz² = 0.3446 (Z alone explains 34.46% of Y). 1 - r_yz² = 0.6554 (65.54% of Y variance remains after removing Z).
Step 3: coefficient of partial determination = sr² / (1 - r_yz²) = 0.0208 / 0.6554 = 0.0318 = 3.18 pp of the RESIDUAL Y variance.
Cross-check via Frisch-Waugh-Lovell
The coefficient of partial determination is exactly the R² from regressing the Z-residuals of Y on X. Same number two ways:
Way A: on raw variables, sr² / (1 - r_yz²) = 0.0208 / 0.6554 = 0.0318.
Way B: fit Y ~ Z (linear regression), take residuals e_Y|Z. Then fit e_Y|Z ~ X and compute R². Verified via sklearn LinearRegression on 2026-08-28: R²(e_Y|Z ~ X) = 0.0318 — matches Way A to 4 decimals.
This is the Frisch-Waugh-Lovell (1933) partitioning theorem: the coefficient of X in Y ~ X + Z is the same as the coefficient of X in e_Y|Z ~ e_X|Z; and the residual R² picks up exactly the variance X explains that Z didn’t.
Interpretation: buckets carry the signal (again)
On today’s sample, bucket assignment carries essentially all the info surprise_z has about move_pips. The bucket-level table explains 34.5% of the move variance; the raw z-value within a bucket adds only 3.2%of what’s left. Same story as Stats #23 (CAD CPI × USDCAD partial r ≈ -0.05) and Stats #25 (CAD Retail × CADJPY sr² = 0.68 pp) on fresh data.
Practical read: if you’re trading AUD Employment on GBPAUD, the bucket-level table is what you’re pricing off; sub-bucket surprise-z fine-structure doesn’t sharpen the edge. This is the third consecutive Stats installment (Stats #23, #25, #28) that lands on the same conclusion on different events × pairs.
The identity: partial correlation squared = coefficient of partial determination
Coefficient of partial determination is algebraically identical to partial correlation squared: r_XY|Z² = (rxy - rxz·ryz)² / ((1-rxz²)(1-ryz²)) = [(rxy - rxz·ryz)² / (1-rxz²)] / (1-ryz²) = sr² / (1 - r_yz²) = coefficient of partial determination.
Verified on today’s sample: partial r_XY|Z = -0.1782; squared = 0.03175. Coefficient of partial determination = 0.03176. The 5-decimal disagreement is just rounding in the intermediate arithmetic; the identity is exact. So Stats #23 (partial correlation) and today’s post (coefficient of partial determination) are two readings of the same quantity — one as a bounded-in-[-1,+1] correlation, the other as an interpretable partition-fraction of residual variance.
Cross-links
Stats #25 (2026-08-25): semi-partial correlation — sr² as ΔR² identity. Today’s post scales sr² by (1 - r_yz²) to get the residual-variance fraction.
Stats #23 (2026-08-23): partial correlation r_XY|Z. Today’s coefficient of partial determination equals the SQUARE of Stats #23’s partial correlation — algebraically identical.
Stats #24 (2026-08-24): one-way ANOVA / R² / η² — the between-vs-within decomposition that reads r_yz² as η² when Z is categorical.
Today’s slot 1: AUD Employment × GBPAUD anchor using the same n=199 sample.
Verification note
All numbers computed in a Python scratch script on 2026-08-28 against live /api/v1/news-impact/releases for FF:AUD_EMPLOYMENT_CHANGE × GBPAUD, window = 15m, population = non_contaminated. Cross-checked against sklearn.linear_model. LinearRegression for R²(Y ~ Z), R²(Y ~ X + Z), R²(residuals ~ X). All identities agree to 4 decimal places (5-decimal disagreements are intermediate rounding). Chart via a one-off script reusing scripts/insights-charts/svg.ts and theme.ts primitives; not committed under scripts/ (single-use two-stacked-bar variance-partition layout).