Summary · Question 12 of 14

Gap in players per million between Denmark and Norway and Czechia, split over three measured channels (descriptive)

Of the −3.21 players per million between Norway and Denmark, youth minutes go with −3.15 (−4.49 to −1.15), league strength with +3.49 (+1.27 to +4.91) and export age with 0.00; of the −10.19 for Czechia, with −7.41 (−10.31 to −2.34), −1.63 (−2.21 to −0.64) and 0.00 (90 % bootstrap intervals).

One horizontal stacked bar per contrast country: the contribution of U21 minutes, league strength and export age to its per-capita gap with Denmark, plus the residual; whiskers show each channel's bootstrap interval.
How to read it: the whole bar is the gap in players per million between the comparison country and Denmark. Each segment is how much of that gap goes with one measured channel — youth minutes, league strength, export age — under the decomposition; the hatched remainder is what the three channels do not carry. A segment is negative where the fitted term for that channel predicts fewer players per million for the comparison country than for Denmark.

In this 8-country fit the league-strength coefficient is negative (−56.83 per unit of the league multiplier m_L): a weaker home league goes with more players per million in the top-ranked leagues, so a contrast country whose league is weaker than Denmark’s (m_L 0.636) gets a positive league-strength contribution.

The export-age channel is zero for these contrasts because Denmark, Norway and Czechia share the same median age at the first top-9 season among recent entrants (22); it carries nothing by construction, not by estimate.

Shares of a gap can add up to more than 100 % when the residual is negative, that is when the channels together predict more than the observed gap.

How we know

Of the −3.21 per million between Norway and Denmark, a residual of −3.55 is not carried by the three channels.

As an analytics question In numbers: a linear split of the per-capita gap into U21 minutes, league strength and export age across 8 peer countries.

What we did We used the players who changed leagues to work out what a season in one league is worth in another, then split the gap between countries into the parts that line up with young players' minutes, league strength and the age players move abroad.

Sources Ridge-regression linear split (α = 1.00, standardised channels), Blinder-Oaxaca-style (Oaxaca, 1973; Blinder, 1973), fit on the 8 peer countries with data on all three channels; 90 % bootstrap intervals, 1000 resamples, seed 42 plus the contrast’s index; with 8 countries and three correlated channels the split is indicative; a decomposition of a correlation, not a causal accounting.

What this means

The decomposition says how the gap lines up with three measured channels across 8 countries, with the contributions and intervals above. With 8 countries, three correlated channels and a ridge penalty, the split is indicative: it describes an association and gives no estimate of what would change if one channel changed.

What this does not show

Channels the model does not include (coaching, money, scouting), countries outside the 8, and a causal share of the gap for any channel.

Data snapshot: FBref tables fetched 14 September 2026, snapshot commit ef7dbd4 · code: src/gap_decomposition.py · status: exploratory, not pre-registered · all limitations