Skip to main content

Demography Domain Ontology

Social Science Domains
Authors: MArk Anthony Higgins - Sky Recursive Ai
© Mark Anthony Higgins 11 October 2025
Revised Date: 10 October 2026
Audio Overview
FLOW ALGEBRA
TITLE: Demography Domain Ontology
VERSION: 1.0
DOMAIN: Social Science / Demography
SOURCE_URL: https://kirethresearch.org/booksai-core/ontologies/domain-ontologies/social-science-domains/demography-domain-ontology.html
STATUS: Domain-derived ontology draft; source page content not independently verified.

1. PURPOSE
Represent populations, demographic events, population structures, migration, fertility, mortality, and demographic change as typed, traceable semantic relations. Distinguish observed measurements from estimates, projections, and causal hypotheses.

2. TYPED ENTITIES
ENTITY Population {population_id:str, geographic_area:GeographicArea, reference_time:DateOrPeriod, size:int?, source:DataSource}
ENTITY PopulationGroup {group_id:str, population:Population, criteria:Classification, count:int?}
ENTITY GeographicArea {area_id:str, name:str, boundary_version:str?, spatial_reference:str?}
ENTITY DemographicEvent {event_id:str, event_type:EventType, event_date:date?, area:GeographicArea?, provenance:DataSource}
ENTITY Birth EXTENDS DemographicEvent {maternal_age:int?, live_birth:bool?}
ENTITY Death EXTENDS DemographicEvent {age_at_death:float?, cause_category:str?}
ENTITY MigrationEvent EXTENDS DemographicEvent {origin:GeographicArea, destination:GeographicArea, period:DateOrPeriod}
ENTITY Census {census_id:str, enumeration_date:date, coverage:GeographicArea, methodology:str}
ENTITY Survey {survey_id:str, sample_frame:str, weights_available:bool, reference_period:DateOrPeriod}
ENTITY DemographicIndicator {indicator_id:str, measure:str, value:float?, unit:str, period:DateOrPeriod, area:GeographicArea, source:DataSource}
ENTITY Cohort {cohort_id:str, birth_period:DateOrPeriod, population:Population}
ENTITY Projection {projection_id:str, base_population:Population, horizon:DateOrPeriod, assumptions:list, scenario:str}
ENTITY DataSource {source_id:str, publisher:str, publication_date:date?, methodology:str?, licence:str?}
TYPE EventType = Birth | Death | Immigration | Emigration | InternalMigration
TYPE Classification = AgeGroup | SexCategory | HouseholdType | EducationLevel | OtherDefinedCategory

3. RELATIONSHIPS
Population --LOCATED_IN--> GeographicArea
Population --OBSERVED_AT--> DateOrPeriod
Population --HAS_SUBGROUP--> PopulationGroup
PopulationGroup --DEFINED_BY--> Classification
Birth --INCREASES--> Population
Death --DECREASES--> Population
MigrationEvent --ORIGINATES_IN--> GeographicArea
MigrationEvent --ARRIVES_IN--> GeographicArea
Census --ENUMERATES--> Population
Survey --ESTIMATES--> DemographicIndicator
DemographicIndicator --MEASURES--> Population
Projection --PROJECTS--> Population
Projection --ASSUMES--> ScenarioAssumption
Observation --DERIVED_FROM--> DataSource

4. CORE FLOW OPERATORS
FLOW PopulationBalance:
  INPUT P_start, births, deaths, immigration, emigration, adjustments
  REQUIRE all values refer to a consistent area, time interval and population definition
  OUTPUT P_end = P_start + births - deaths + immigration - emigration + adjustments

FLOW CrudeBirthRate:
  INPUT live_births, mid_period_population
  REQUIRE mid_period_population > 0
  OUTPUT births_per_1000 = 1000 * live_births / mid_period_population

FLOW CrudeDeathRate:
  INPUT deaths, mid_period_population
  REQUIRE mid_period_population > 0
  OUTPUT deaths_per_1000 = 1000 * deaths / mid_period_population

FLOW NetMigration:
  INPUT immigration, emigration
  OUTPUT net_migration = immigration - emigration

FLOW PopulationGrowthRate:
  INPUT P_start, P_end, period_years
  REQUIRE P_start > 0 AND period_years > 0
  OUTPUT annualised_growth = (P_end / P_start)^(1 / period_years) - 1

FLOW AgeDependencyRatio:
  INPUT younger_count, older_count, working_age_count, age_band_definitions
  REQUIRE working_age_count > 0
  OUTPUT ratio = 100 * (younger_count + older_count) / working_age_count
  NOTE age-band definitions must be explicitly retained; this is an age-structure indicator, not a direct measure of economic dependency.

5. INFERENCE RULES
RULE NaturalIncrease:
  IF births > deaths over matching population, area and interval
  THEN natural_change > 0

RULE NetOutMigration:
  IF emigration > immigration over matching definitions and interval
  THEN net_migration < 0

RULE PopulationAgeingSignal:
  IF share_older(t2) > share_older(t1) with comparable age thresholds and coverage
  THEN observed_population_ageing = true
  NOTE does not by itself establish a cause.

RULE ProjectionNotObservation:
  IF value generated by demographic scenario assumptions
  THEN classify value as projection, NOT observed_population_count

RULE NonComparableSeries:
  IF area boundaries OR collection methods OR demographic definitions differ materially
  THEN require harmonisation or comparison warning.

6. CONFIDENCE
CONFIDENCE := {score:float[0,1], basis:str, uncertainty_interval:str?, limitations:list}
ASSESS confidence using sampling uncertainty, coverage, registration completeness, methodological consistency, recency and source reliability.
DO NOT treat model confidence as a substitute for reported statistical uncertainty.

7. SEMANTIC_EQUIVALENCE
SEMANTIC_EQUIVALENCE('population count','population size') WHEN reference area/time/definition match.
SEMANTIC_EQUIVALENCE('natural change','births minus deaths') WHEN event definitions and period match.
NOT_EQUIVALENT('fertility rate','crude birth rate').
NOT_EQUIVALENT('life expectancy','average age at death').
NOT_EQUIVALENT('migration stock','migration flow').
NOT_EQUIVALENT('population estimate','population projection').

8. PROVENANCE
PROVENANCE := {source_id, dataset_id?, table_id?, retrieval_date?, reference_period, geographic_boundary_version?, methodology, transformation_history, licence?}
REQUIRE provenance for every published observation, estimate and projection.

9. FLOW_HASH
FLOW_HASH := SHA256(canonicalise({title, version, entity_schema, relationships, rules, operators, source_url}))
NOTE hash is computed on implementation; no uncomputed digest is asserted here.

10. UPDATE_MODEL
UPDATE_MODEL:
  ON new census, vital-registration release, migration dataset, boundary revision or methodological revision:
    validate source and schema;
    preserve historical versions;
    reconcile geographic and temporal definitions;
    recalculate dependent indicators;
    record change provenance and uncertainty;
    recompute FLOW_HASH;
    flag affected projections for review.

11. AI_CONSUMPTION
AI_CONSUMPTION:
  format: typed semantic graph + explicit computation flows
  expose: entities, relationships, units, time ranges, geographical boundaries, confidence, provenance
  require: distinction between observations, estimates, forecasts and hypotheses
  prohibit: unsupported causal inference; disclosure of identifiable personal records; false precision
  enable: population queries, demographic comparisons, cohort analysis, scenario exploration and evidence-traceable summaries.

12. VALIDATION
CHECK nonnegative population/event counts.
CHECK denominator and period compatibility for rates.
CHECK missing data and suppression rules for small groups.
CHECK projections are labelled by scenario and assumptions.
CHECK population balance reconciliation and boundary changes.
CHECK sensitive demographic categories are contextually defined and responsibly handled.

END FLOW ALGEBRA
Kireth Research
38 Thorndale Croft, Wetwang, Driffield
East Riding of Yorkshire YO25 9XZ