Allocation Approaches¶
Design and parameters for allocation approaches in fair-shares.
For underlying principles, see From Principle to Code. For mathematical formulations, see the API Reference for budgets and pathways.
Overview¶
Allocation approaches distribute emissions among countries based on equity principles. fair-shares implements two categories:
| Category | Question Answered | Output |
|---|---|---|
| Budget | What is each country's fair share of a cumulative remaining emissions budget? | Single allocation per country |
| Pathway | What is each country's fair share of emissions each future year? | Time-varying annual allocations |
All allocation approaches ensure shares sum to 1 in each year and ensure complete global coverage.
Value neutrality is impossible in equity analysis
No allocation approach is normatively neutral. Every choice about base year, indicator, weighting, or approach inclusion reflects value judgments about fairness [Dooley 2021; Kartha 2018].
Two specific pitfalls to avoid:
- Do not claim comprehensiveness through approach averaging. Averaging contradictory approaches (e.g., averaging grandfathering with equal per capita) does not produce a neutral result — it produces an incoherent one.
- Do not combine contradictory principles into composite indices.
The appropriate role of analysis is to clarify the ethical underpinnings and consequences of normative choices — not to make those choices on behalf of users [Kartha 2018].
Budget vs Pathway: Choosing Based on Your Needs¶
In brief: Both produce compatible cumulative allocations. Choose based on whether you need year-by-year breakdowns.
Why they're compatible: For emission pathways that never go negative (emissions always >= 0), the cumulative sum of annual allocations is consistent with the budget allocation, fair-shares ensures this cumulative consistency by design.
Technical note: The net-negative emissions exception
The equivalence holds only for pathways with positive-only emissions. IPCC AR6 overshoot scenarios include net-negative emissions in later decades (CO2 removal). This creates a challenge:
- AR6 budgets work fine — they capture cumulative totals that already account for net-negative emissions
- AR6 pathways present ambiguity — how to allocate negative values while maintaining proportional fairness?
fair-shares does not alter AR6 pathways. Instead, it sets post-net-zero emissions to NaN and reports unallocated quantities as a warning. Users must decide how to handle net-negative portions separately.
Converting RCBs to pathways: Use generate_rcb_pathway_scenarios() to convert any budget to a temporal breakdown (e.g., exponential decay over years). See Other Operations: RCB Pathway Generation.
Target Source Options¶
fair-shares currently supports three target sources for allocation calculations:
| Target | Type | Allocation Functions | Use When | Output |
|---|---|---|---|---|
rcbs |
Budget | Budget approaches | Calculating cumulative national budget allocations | Single value per country |
ar6 |
Pathway | Pathway approaches | Allocating annual emissions following scenario pathways (e.g. AR6) | Time series of annual values |
rcb-pathways |
Hybrid | Pathway approaches | Using budget data but need year-by-year pathways | Budget to global pathway to allocated annually |
RCB-to-Pathway Conversion¶
The rcb-pathways target source converts the global remaining carbon budget (RCB) into a global annual emission pathway, which can then be allocated to countries using pathway allocation approaches. This is a two-step process:
- Generates a global pathway from the remaining carbon budget using normalized shifted exponential decay (a global operation -- no country allocations at this stage)
- Applies pathway allocation approaches to distribute the global pathway among countries (e.g.,
equal-per-capita,per-capita-adjusted) - Preserves cumulative totals -- the sum of annual pathway emissions equals the original carbon budget
The global pathway:
- Starts at global historical emissions in the allocation year
- Reaches exactly zero by the end year (default 2100)
- Ensures discrete annual sums equal the budget
- The
generatorparameter is an extensibility point for alternative functional forms, provided they consume the full budget by the end year
Country net-zero years emerge from allocation, not pathway shape
The global pathway shape described above does not directly prescribe when individual countries reach net-zero. Country net-zero timing emerges from the allocation step: pathway allocation approaches distribute annual emissions to countries, and countries whose allocation nears zero early in the pathway are effectively at their net-zero year. For example, under a 1.5 deg C budget with strong responsibility weighting, a high-emitting developed country might receive an allocation that reaches near-zero (or a very small % of current emissions) well before 2100 -- this can be considered their implied net-zero year in policy translation.
Configuration: Set target: "rcb-pathways" in your data source config. See User Guide: Configuration for setup details.
Technical details: RCB Pathway Generation
Parameters¶
For real-world examples showing how these parameters affect allocation outcomes for different countries, see Parameter Effects Reference.
Allocation Year¶
Reference year for calculating cumulative per capita allocations.
| Category | Parameter Name |
|---|---|
| Budget | allocation_year |
| Pathway | first_allocation_year |
Earlier allocation years account for historical emissions in the cumulative calculation. See Historical Responsibility below.
Building Blocks¶
| Component | What it adds | Budget Parameter | Pathway Parameter |
|---|---|---|---|
| Early allocation year | Accounts for emissions since that year | allocation_year |
first_allocation_year |
| Pre-allocation responsibility | Multiplicative rescaling by relative per-capita emissions in [pre_allocation_responsibility_year, allocation_year); always positive (see warning below) |
pre_allocation_responsibility_weight + pre_allocation_responsibility_year |
Same |
| Capability weight | Adjustment by capacity from allocation year onwards | capability_weight |
Same |
| Income floor | Protects subsistence needs in capability calculations | income_floor |
Same |
| Gini adjustment | Within-country inequality correction | Use *-gini-budget allocation approach |
Use *-gini or *-gini-adjusted allocation approach |
| Historical discounting | Weights earlier emissions less (e.g. due to natural CO2 removal) | historical_discount_rate |
Same |
| Historical population entitlement | Extends cumulative population window backward for target shares | N/A | historical_start_year (convergence approaches only) |
| Convergence mechanism | Transition from current to target cumulative shares | N/A | Use cumulative-per-capita-convergence* allocation approach |
Pre-allocation responsibility scaling ≠ earlier allocation year
These are two different mechanisms, not two ways of saying the same thing.
Earlier allocation year (e.g. allocation_year=1990): requires considering cumulative emissions since that year when determining the remaining budget from the present. Regions that emitted heavily since 1990 can end up with negative remaining allocations by 2025 — this is a mathematical consequence of the budget accounting, not a design choice.
Pre-allocation responsibility scaling (e.g. allocation_year=2025, pre_allocation_responsibility_year=1990): keeps the allocation year at 2025 (so no cumulative accounting of past emissions in the budget) but multiplicatively rescales each country's share based on relative per-capita emissions during 1990–2025. Always produces positive allocations if allocation_year is the present, because it adjusts proportions, not levels — but it is not a 1:1 accounting of those emissions.
Temporal note: Capability adjustments apply from the allocation year onwards. Pre-allocation responsibility scaling covers pre_allocation_responsibility_year to the allocation year — a separate, earlier window.
These can be combined. For example, CBDR-RC can be interpreted and operationalised through:
- Early allocation year (e.g. 1850) + capability weight: simplest, but capability data may be unavailable for early years
- Allocation year of 1990 + pre-allocation responsibility scaling from 1850 + capability weight: avoids data availability issues for early capability years while still differentiating by historical emissions
- (Pathways only) Convergence approach + early allocation year + capability weight: with smooth transition path
For complete parameter configurations, worked examples, and use-case-to-approach mappings, see From Principle to Code.
Gini Adjustment¶
Implements an interpretation of the Greenhouse Development Rights (GDR) framework's capability metric for entitlements (note: GDR was originally designed for burden-sharing, not entitlement allocation): only income above a development threshold counts as "ability to pay." The income floor works like a tax-free personal allowance — each person's first $7,500/year (default, 2010 PPP) of income is exempt from capability calculations.
Income distribution is modelled as log-normal, parameterised by each country's Gini coefficient. When combined with the income floor, higher inequality means more national income sits above the development threshold — increasing measured capability.
See From Principle to Code for conceptual context.
Mathematical formulations: GDR capability calculation | Budget | Pathway
Maximum Deviation Constraint¶
Parameter: max_deviation_sigma (default: 2.0, set to None to disable)
Why this exists: Pre-allocation responsibility and capability adjustments are multiplicative rescaling factors applied to population. In theory, these factors are unbounded — a country with extremely high per-capita emissions and high GDP could have its allocation rescaled to near zero, while a country at the other extreme could receive a disproportionately large share. Without a constraint, a single outlier country can distort the entire distribution, making results sensitive to data quality in the tails rather than the underlying equity logic.
max_deviation_sigma caps this by limiting how far any country's adjusted allocation can deviate from the equal-per-capita baseline, measured in standard deviations of the adjustment distribution. The default of 2.0 standard deviations permits substantial differentiation while preventing extreme outliers from dominating results.
Set to None to remove the constraint entirely — use this when you want the raw, unconstrained adjustment to see the full range of differentiation. Values below 1.0 compress the distribution aggressively and are rarely appropriate.
Only relevant when applying scaling adjustments (pre-allocation responsibility, capability, or combinations). Has no effect on pure equal-per-capita approaches.
Implementation details: Budget | Pathway
Weight Normalization¶
Combines pre-allocation responsibility scaling and capability adjustments as multiplicative factors applied to the equal-per-capita baseline:
Where w_r and w_c are the normalized pre-allocation responsibility and capability weights (divided by their sum). Only the ratio between weights affects results; (0.3, 0.7) and (0.15, 0.35) produce identical allocations because they normalize to the same values.
Mathematical specification: Budget | Pathway
Dynamic vs Preserved Shares¶
Parameter: preserve_allocation_year_shares (budget) / preserve_first_allocation_year_shares (pathway)
Why this exists: Equal per capita allocation rests on the principle that each person has equal entitlement to atmospheric space. But population changes over time — some countries are growing rapidly, others are shrinking. The question is: which population counts?
Dynamic mode (the default) recalculates shares as population evolves, giving growing populations proportionally more atmospheric space over the allocation horizon. This reflects a forward-looking interpretation: future people have the same entitlement as present people.
Preserved mode fixes shares at the allocation year and holds them constant. This reflects a snapshot interpretation: entitlements are determined at the moment of allocation and don't shift with subsequent demographic change. It also provides a simpler, more predictable allocation for policy planning — the shares won't move with updated population projections.
The choice between these modes is a normative judgment about whether future population growth should increase a country's atmospheric entitlement.
| Mode | Budget | Pathway |
|---|---|---|
| Dynamic (default) | Cumulative population from allocation year | Recalculated each year based on current pop/GDP |
| Preserved | Population at allocation year only | Fixed at first allocation year |
Mathematical specifications: Budget | Pathway
Historical Responsibility¶
Two mechanisms:
- Early allocation year: Set
allocation_yearto 1850 or 1990 — use of this requires one to consider cumulative emissions since that year when determining the remaining budget from the present (can produce negative remaining allocations) - Responsibility weight: Use
pre_allocation_responsibility_weight+pre_allocation_responsibility_year— multiplicative rescaling of shares based on relative per-capita historical emissions (always positive ifallocation_yearis the present)
These can be combined, but they are different mechanisms with different behavioral properties. See the warning in Building Blocks for the full distinction.
Mathematical details: Budget | Pathway
Historical Emissions Discounting¶
Parameter: historical_discount_rate (default: 0.0)
This is a per-capita-adjusted parameter, not an equal-per-capita parameter
Discounting historical emissions is not a neutral technical choice. It systematically reduces measured responsibility for early-industrialising countries and is not part of equal-per-capita accounting. Equal per capita treats every tonne of CO2 equivalently regardless of when it was emitted. Discounting departs from this by introducing a temporal weighting that favours early emitters.
The parameter is available on the per-capita-adjusted family of functions (where pre_allocation_responsibility_weight > 0), not on equal-per-capita functions. It is also available on cumulative-per-capita-convergence-adjusted and cumulative-per-capita-convergence-gini-adjusted, which route through the same responsibility adjustment pipeline.
For critiques of discounting historical responsibility, see [Meyer 2013] (why historical emissions should count at face value), [Shue 2014; Shue 2015] (harm prohibition does not decay with time), and [Caney 2009] (discounting conflates atmospheric residence with moral responsibility). For the countervailing physical argument, see [Dekker 2025] and [Van Den Berg 2020].
Weights earlier historical emissions less than recent ones when computing pre-allocation responsibility scaling. The discount weight for emissions in year \(t\) relative to a reference year \(t_{ref}\) is:
where \(r_d\) is the discount rate (0.0 to <1.0) and \(t_{ref}\) is the year before the allocation year. When historical_discount_rate=0.0 (default), all historical emissions are weighted equally — this is the standard approach. When per-capita responsibility is used, the same discount weights are applied to population for consistency.
The argument for discounting is physical: a fraction of emitted CO2 is removed from the atmosphere each year by ocean and terrestrial sinks, so older emissions contribute less to current concentrations [Dekker 2025; Van Den Berg 2020]. The argument against is moral: responsibility for harm does not diminish with time, and discounting produces outcomes that systematically benefit the countries most responsible for cumulative warming [Meyer 2013; Shue 2015].
| Rate | Effect on 1850 emissions (ref. 2020) |
|---|---|
| 0.0 | Full weight (1.0) — standard |
| 0.005 | ~43% weight |
| 0.01 | ~18% weight |
| 0.02 | ~3% weight |
Higher rates reduce the influence of early historical emissions on pre-allocation responsibility scaling. Countries with large early-industrialisation emissions (e.g., UK, Germany) benefit most from discounting. Countries whose emissions grew recently (e.g., China, India) see relatively smaller changes.
Convergence Mechanism (Pathways Only)¶
Cumulative per capita convergence approaches provide exponential transition from current emissions to cumulative per capita targets.
Properties:
- Smooth (continuous and differentiable)
- Cumulative-constrained: total over horizon equals target share
- Automatic speed: minimum speed satisfying cumulative constraints
Convergence Method¶
Parameter: convergence_method (default: "minimum-speed")
Why this matters: The convergence mechanism needs a solver to find a path from each country's current emission share to its cumulative target share. The two available methods produce the same cumulative outcome (total allocations match the target budget) but differ in how they distribute emissions across years — which affects the near-term mitigation trajectory countries face.
-
minimum-speedfinds the slowest possible exponential convergence that still satisfies the cumulative constraint. This produces the most gradual transition, giving high-emitting countries the most time to adjust. Use this as the default — it is fully automatic and produces conservative (least-disruptive) transition paths. -
sine-deviationfront-loads the adjustment, requiring larger near-term emission reductions and allowing more headroom later. This reflects an urgency argument: if cumulative emissions drive warming, earlier reductions have more value. Use this when you want to explore front-loaded pathways or when replicating [Dekker 2025].
| Method | Description | Required Parameters |
|---|---|---|
minimum-speed |
Default. Finds the minimum exponential convergence speed satisfying cumulative constraints. | None (automatic) |
sine-deviation |
Iterative sine-shaped deviation from a PCC baseline [Dekker 2025]. Front-loads the adjustment toward cumulative budget targets. | convergence_year |
Sine-deviation method: Computes year-by-year allocations that deviate from a per-capita-convergence (PCC) baseline using a sine-shaped correction. Each year's allocation depends on all previous allocations (iterative). The method tracks the remaining "debt" between the target cumulative budget and actual cumulative allocations, and applies a sine-shaped correction that front-loads the adjustment.
Validation status
Validated with synthetic data in unit and integration tests. Pending validation against real AR6/PRIMAP pipeline output and the published results in Dekker et al. (2025).
For country \(g\) in year \(t\):
where \(t_{conv}\) is convergence_year and \(t_a\) is first_allocation_year.
Parameter: convergence_year (required when convergence_method="sine-deviation")
Why this matters: The sine-deviation method needs a deadline — the year by which the cumulative allocation must match the target budget. This is a policy choice: an earlier convergence year demands steeper near-term reductions (front-loading the transition), while a later year spreads the adjustment over a longer horizon. Later convergence years produce smoother transitions; earlier years produce steeper near-term adjustments.
Maximum Convergence Speed (Convergence Only)¶
Parameter: max_convergence_speed (default: 0.9)
Why this exists: The convergence solver finds the exponential speed at which each country's emission share moves toward its target. Without an upper bound, the solver could produce speeds where a country's allocation swings wildly from one year to the next — technically satisfying the cumulative constraint but producing a pathway no country could actually follow.
max_convergence_speed caps the speed parameter at a value between 0 and 1. At 0.9 (default), a country's allocation can move up to 90% of the remaining distance to its long-run target in a single year — fast enough for aggressive transitions but smooth enough to be physically plausible. Lower values force gentler transitions but increase the chance of infeasibility (the solver may not find a path that satisfies the cumulative constraint at low speeds). Higher values allow more abrupt year-to-year changes.
If strict=True raises an infeasibility error and max_convergence_speed is below 0.9, try increasing it before relaxing other parameters.
Historical Start Year (Convergence Only)¶
Parameter: historical_start_year (default: None)
Why this exists: Cumulative per capita convergence computes target shares based on cumulative population — the total person-years a country contributes over the allocation horizon. By default, this sum starts at first_allocation_year. But that ignores a key fact: the atmospheric commons was being used long before the allocation starts. Countries that had large populations during the period of industrialisation (China, India) had more people with a claim to equal per-capita atmospheric space during those decades. If cumulative per-capita entitlements are the fairness principle, then the population window should arguably cover the entire period over which the commons was used — not just the future [Dekker 2025; Van Den Berg 2020].
historical_start_year operationalises this choice. When set, cumulative population for computing target shares is summed from historical_start_year instead of first_allocation_year. Must be \(\leq\) first_allocation_year.
The effect is directional and predictable: extending the population window backward increases the cumulative entitlement of countries that had large populations historically, and decreases the entitlement of countries whose populations grew recently. The magnitude depends on how far back the window extends and how much relative population shares shifted over that period.
This is a population entitlement parameter, not a responsibility parameter
historical_start_year affects the target share calculation (who is entitled to how much atmospheric space based on cumulative population). It does not affect responsibility adjustments or historical emissions accounting. For historical responsibility, see pre_allocation_responsibility_weight and historical_discount_rate.
| Configuration | Cumulative population window | Effect |
|---|---|---|
Default (no historical_start_year) |
first_allocation_year to end |
Target shares based on forward-looking population only |
historical_start_year=1990 |
1990 to end | Modest shift — population shares were similar to today |
historical_start_year=1950 |
1950 to end | Moderate shift toward China, India |
historical_start_year=1850 |
1850 to end | Strongest shift — captures the full industrialisation period |
Available on all three convergence variants: cumulative-per-capita-convergence, cumulative-per-capita-convergence-adjusted, and cumulative-per-capita-convergence-gini-adjusted.
Strict Parameter (Convergence Only)¶
Parameter: strict (default: True)
Why this exists: The convergence solver works backward from a cumulative target share to find a convergence speed that gets each country there. But this isn't always mathematically possible. When a country's current emissions are very far from its target share — for example, a high emitter with a small target — the solver would need a "long-run share" below 0 (i.e., negative emissions) or above 1 (i.e., more than 100% of global emissions). Neither is physically meaningful.
This happens most often under aggressive equity configurations: strong responsibility weighting with early allocation years, very tight carbon budgets, or combinations that push high-emitting countries toward extreme targets. The solver hits a mathematical wall — there is no exponential convergence path that satisfies the cumulative constraint within the allowed speed range.
strict controls what happens at that wall:
| Mode | Behavior | When to use |
|---|---|---|
Strict (True, default) |
Raises an error if no feasible solution exists | Research: you want to know immediately if your configuration produces infeasible targets |
Permissive (False) |
Clips infeasible long-run shares to [0, 1], adjusts remaining countries proportionally, and reports per-country deviation ratios as warnings | Exploration: you want results for feasible countries even when some targets are unreachable |
In permissive mode, country-level warnings report the ratio of achieved-to-target cumulative shares (e.g., strict=false:0.85 means the country achieved 85% of its target cumulative allocation). Countries whose targets were feasible are unaffected — the solver only adjusts the infeasible ones and redistributes the surplus proportionally.
Diagnosing infeasibilities
If strict=True raises an error, try strict=False first to see which countries are infeasible and by how much. Common causes: (1) very early allocation_year with strong responsibility weighting makes high-emitting countries' targets unreachable; (2) short time horizon (few years between first_allocation_year and end of pathway) leaves insufficient time for convergence; (3) max_convergence_speed is too low for the required transition.
Adjustment Shape Parameters¶
The *-adjusted and *-adjusted-gini approaches expose several parameters that control the functional shape of pre-allocation responsibility and capability adjustments. These are advanced tuning parameters — the defaults are appropriate for most analyses. They are documented here for completeness; see the API Reference for full mathematical details.
Per Capita vs Absolute Mode¶
Parameters: pre_allocation_responsibility_per_capita (default: True), capability_per_capita (default: True)
Why these exist: Pre-allocation responsibility can be measured on a per-capita or absolute basis, and the choice reflects different fairness intuitions. Per-capita mode (the default) divides cumulative emissions by cumulative population before comparing countries — a high-population country with high total emissions may have low per-capita emissions, reducing its responsibility adjustment. Absolute mode uses total emissions regardless of population, which penalises large emitters even if their per-capita emissions are low. The same logic applies to capability: per-capita GDP measures individual prosperity, while absolute GDP measures aggregate economic capacity.
Per-capita mode is the standard choice in the equity literature and is consistent with the equal-per-capita framing of fair-shares. Absolute mode may be appropriate when the research question focuses on aggregate national capacity or total emission volume.
Exponents¶
Parameters: pre_allocation_responsibility_exponent (default: 1.0), capability_exponent (default: 1.0)
Why these exist: The exponent controls the shape of the adjustment function — how steeply allocations decline as emissions or GDP increase. At 1.0 (default), the adjustment is proportional: doubling per-capita emissions roughly doubles the adjustment. At values above 1.0, the adjustment is convex: high emitters or wealthy countries are penalised disproportionately more. This operationalises the argument that the first tonne of emissions or dollar of GDP matters less than the hundredth — a form of diminishing marginal value.
Values below 1.0 produce concave adjustments (diminishing penalties), which have no clear equity justification and are not recommended.
Functional Form¶
Parameters: pre_allocation_responsibility_functional_form (default: "asinh"), capability_functional_form (default: "asinh")
Why these exist: The functional form determines how the raw metric (emissions or GDP) is transformed before the exponent is applied. "asinh" (inverse hyperbolic sine) is the default and handles zero values gracefully — it behaves like a logarithm for large values but passes through zero without blowing up. "power" applies a simple power function, which is undefined at zero and can produce extreme outliers when the input distribution has a long tail.
Use "asinh" unless you have a specific reason to prefer "power" (e.g., replicating a published methodology that uses power-law adjustments).
Maximum Gini Adjustment¶
Parameter: max_gini_adjustment (default: 0.8)
Why this exists: The Gini adjustment rescales GDP based on within-country income distribution: countries with high inequality have more income above the development threshold, increasing their measured capability. Without a cap, extreme Gini coefficients (>0.6, as in some Sub-Saharan African countries) could produce outsized adjustments that dominate the allocation. max_gini_adjustment limits the maximum proportional reduction from the Gini correction. At the default of 0.8, the Gini adjustment can reduce a country's measured GDP by at most 80%.
Available on per-capita-adjusted-gini-budget, per-capita-adjusted-gini, and cumulative-per-capita-convergence-gini-adjusted.
Per Capita Convergence (PCC)¶
The per-capita-convergence approach linearly blends grandfathering (current emissions) with equal per capita over time. It includes grandfathering elements, which are critiqued in the literature; see Approaches Debated in the Literature for context.
Approaches Debated in the Literature¶
Several approaches appear in climate policy discussions and have been subject to scholarly critique.
Grandfathering¶
Allocating future emission entitlements based on current emission shares. Caney [2009] calls grandfathering "morally perverse," and Dooley [2021] documents that it has "virtually no support among moral and political philosophers." Despite this, it dominates many studies that claim to be value-neutral. Moreover grandfathering is often embedded implicitly in "blended" approaches that combine it with equity principles [Kartha 2018] which must be treated with caution.
The per-capita-convergence approach includes grandfathering elements and is available in fair-shares for comparison; see PCC.
BAU Deviation Framing¶
Treating deviation from business-as-usual emissions as a cost or sacrifice. Pelz 2025b argues this framing is inconsistent with CBDR-RC because it treats current emission levels as a baseline entitlement.
Small Share Justification¶
Arguments of the form "We only emit X% of global emissions." Winkler 2020 notes this cannot be universalized and conflates total with per capita emissions.
See Also¶
- API Reference: Budget Allocations: Budget mathematical formulations
- API Reference: Pathway Allocations: Pathway mathematical formulations
- country-fair-shares Guide: When to use each approach
- References: Complete bibliography