Skip to content
Jip Claassens edited this page Mar 31, 2026 · 5 revisions

IGOR — Individuals Grouped Over Ratios

IGOR is an Iterative Proportional Fitting (IPF) method that disaggregates gridded total population (ARDECO) into narrow 5-year sex–age groups, constrained simultaneously to:

  • cell-level sex and broad-age shares from ESTAT 1 km rasters, and
  • region-level (LAU) population pyramids from census microdata.

The result is a set of population grids at 1 km resolution, one per SexAgeGroup combination (currently 36 classes: 18 age bands × 2 sexes).


Pages

  • Algorithm — IPF procedure, formulas, convergence
  • Data — Input datasets, spatial domains, fallback logic, outputs
  • Implementation — GeoDMS containers, parameters, how to run

Index notation

Symbol GeoDMS name Description
$a$ SexAgeClasses Narrow age group (5-yr band)
$b(a)$ SexAgeClasses/BroadClasses_rel Broad age group containing $a$: LT15, 15–64, GE65
$s(a)$ SexAgeClasses/Sex_rel Sex of class $a$: M or F
$i$ domain IPF unit (grouping of 100 m cells sharing a LAU region)
$r(i)$ i/r_rel LAU region that cell $i$ belongs to
$e(i)$ i/e_rel 1 km ESTAT cell that contains cell $i$

Input fields

Symbol GeoDMS name Description
$P_i$ P_i Total population per IPF unit $i$ (aggregated from ARDECO 100 m)
$E_{i,s}$ E_is/M, E_is/F Sex share at 1 km cell $e(i)$ (from ESTAT; fallback: LAU share)
$E_{i,b}$ E_ib/LT15 etc. Broad-age share at 1 km cell $e(i)$ (from ESTAT; fallback: LAU share)
$Q_{asr}$ Q_asr/<name> Census population per LAU region $r$, per SexAgeClass $a$ (fallback: NUTS3 share × $P_r$)

Core formula

For each iteration the population per SexAgeClass $a$ in cell $i$ is:

$$X_{ai} = E_{i,s(a)} \cdot E_{i,b(a)} \cdot A_i \cdot B_{a,r(i)}$$

Cell balancing factor $A_i$ ensures $\sum_a X_{ai} = P_i$:

$$A_i = \frac{P_i}{\displaystyle\sum_{a} E_{i,s(a)} \cdot E_{i,b(a)} \cdot B_{a,r(i)}}$$

Region balancing factor $B_{ar}$ ensures $\sum_{i:, r(i)=r} X_{ai} \approx Q_{ar}$. Updated each iteration as:

$$\tilde{B}_{ar}^{(t)} = B_{ar}^{(t-1)} \cdot \frac{Q_{ar}}{\displaystyle\sum_{i:, r(i)=r} X_{ai}^{(t)}}$$

Then normalized within each region to prevent unbounded growth:

$$B_{ar}^{(t)} = \frac{\tilde{B}_{ar}^{(t)}}{\max_{a'} \tilde{B}_{a'r}^{(t)}}$$

Initialization: $B_{ar}^{(0)} = 1\ \forall, a, r$

Convergence: 10 iterations by default — see Algorithm for details.


Quick links

Topic Page
How the IPF loop works Algorithm
What data goes in and out Data
How to run the model Implementation

Clone this wiki locally