Skip to content
Jip Claassens edited this page Mar 31, 2026 · 1 revision

Home | Algorithm | Implementation


Spatial domain hierarchy

IGOR works across four nested spatial domains:

100 m cells (p)
    └── IPF units (i)          ← IPF is performed at this level
            ├── 1 km ESTAT cells (e)   ← sex & age shares
            └── LAU regions (r)        ← population pyramids
                    └── NUTS3 regions  ← fallback for missing LAU data

The IPF unit (domain, unit i) is the key computational domain: it groups 100 m cells that share the same LAU region. This prevents cells near region boundaries from being partially attributed to two regions.

Domain GeoDMS unit Description
p domain_100m 100 m raster cells; source of ARDECO population
i domain IPF units; one per (LAU region, 1 km cell) combination
e domain_1000m 1 km raster cells; source of ESTAT characterisation
r LAU LAU regions; source of census population pyramids

Input datasets

ARDECO — total population baseline

Attribute GeoDMS name Domain Description
$P_p$ P_p p (100 m) Raw ARDECO population per 100 m cell
$P_i$ P_i i Aggregated to IPF unit: sum(P_p, p/i_rel)
$P_e$ P_e e (1 km) Aggregated to 1 km, respecting LAU boundaries
$P_{ee}$ P_ee e (1 km) Aggregated to 1 km, ignoring LAU boundaries

delta_P = P_ee - P_e captures population that falls outside the study area or LAU coverage.


ESTAT rasters — sex and broad-age characterisation

Provided at 1 km resolution. IGOR converts raw counts to shares:

Raw input Share derived Description
ESTAT_M, ESTAT_F Share_M, Share_F Male / Female share of total sex-attributed population
ESTAT_LT15, ESTAT_15_64, ESTAT_GE65 Share_LT15, Share_15_64, Share_GE65 Broad-age share of total age-attributed population

A floor value $\varepsilon = 0.00001$ is applied before computing shares to avoid division-by-zero in sparse cells.

Cell-level shares with fallback

The containers E_is and E_ib expose the final shares used in IPF. For each IPF unit $i$, the share is taken from the 1 km ESTAT cell $e(i)$ unless that cell has no ESTAT data — in which case the LAU region share is used instead (see Fallback mechanisms below).


LAU census — population pyramids

Q_asr holds the target population per LAU region $r$ and SexAgeClass $a$. It is derived from microdata (Population/AGEGROUP5_SEX_perLAU) and may be corrected for data-quality issues (see fallback #3 below).

Q_asr/Total is the sum across all SexAgeClasses for region $r$, used for normalisation and validation.


Fallback mechanisms

IGOR contains three data-quality fallbacks to handle incomplete input data.

Fallback 1 — ESTAT sex data missing at cell level

Trigger: ESTAT_M + ESTAT_F < 1 for a 1 km cell, while ARDECO population > 0

Action: Sex shares $E_{i,s}$ for all IPF units in that cell are replaced by the sex shares of the parent LAU region $r(i)$.

E_is/<sex> =
  if ESTAT_Sex_0_and_with_ARDECO_pop[e(i)]
    then Share_<sex>_LAU[r(i)]
    else Share_<sex>[e(i)]

Fallback 2 — ESTAT age data missing at cell level

Trigger: ESTAT_LT15 + ESTAT_15_64 + ESTAT_GE65 < 1 for a 1 km cell, while ARDECO population > 0

Action: Broad-age shares $E_{i,b}$ fall back to LAU-level shares.

E_ib/<broad> =
  if ESTAT_Age_0_and_with_ARDECO_pop[e(i)]
    then Share_<broad>_LAU[r(i)]
    else Share_<broad>[e(i)]

Fallback 3 — LAU census population zero, ARDECO non-zero

Trigger: Q_asr_Raw/Total = 0 for a LAU region $r$, while P_r > 0 (i.e. ARDECO places people there but the census records nobody)

Action: $Q_{asr}$ for that region is imputed by distributing the ARDECO total $P_r$ using SexAgeClass shares from the parent NUTS3 region:

$$Q_{ar} = P_r \cdot \frac{\sum_{r' \in \text{NUTS3}(r)} Q_{ar,\text{raw}}}{\sum_{r' \in \text{NUTS3}(r)} Q_{r',\text{raw,total}}}$$

This prevents the IPF from having a non-zero $P_i$ but a zero regional target, which would cause $B_{ar}$ to diverge.

Note: which LAU regions trigger this fallback can be inspected via Checks/Qr_0_and_Pr_gt0.


Output datasets

Written by StoreResults as GeoTIFF at 1 km resolution.

File pattern Content
<SexAgeClass>.tif Absolute population count per SexAgeClass (one file per class)
Total.tif Total population summed over all SexAgeClasses
rel/<SexAgeClass>.tif Population share per SexAgeClass relative to Total

Output path is controlled by ModelParameters/store_path.


See also

  • Algorithm — how $P_i$, $E_{i,s}$, $E_{i,b}$ and $Q_{ar}$ are combined in IPF
  • Implementation — GeoDMS containers and how to trigger output generation