{
  "handle": "NullModelBaseline",
  "ref": "NullModelBaseline#9d36",
  "stub": "9d36",
  "semaId": "sema:NullModelBaseline#mh:SHA-256:9d361368a16dd9c0d05cbb9fd851745b75eae2c8608e22ade4801687a80761c4",
  "layer": "Infrastructure",
  "category": "Verification",
  "gloss": "Attribute structure to a mechanism only by beating a baseline that keeps everything except that mechanism",
  "mechanism": "To claim that an observed pattern comes from mechanism X, build a null model that preserves the constraints you are not testing (counts, bounds, marginal statistics, population over time) and randomises exactly what X would add. Generate many realisations, apply the identical pipeline and measures to them, and compare the observed values with the null distribution, for instance with {{jensen_shannon_divergence}}. Structure that survives the comparison is attributable to what the null randomised; structure the null reproduces is explained by what it kept. Nulls form a ladder: a uniform random placement with the same number of agents per frame tests whether any spatial organisation exists; a null that also keeps individual movement statistics tests whether organisation exceeds what individual kinematics alone would produce.",
  "invariants": [
    "The null keeps every constraint except the mechanism under test",
    "Observed and null data pass through the identical construction and measurement pipeline",
    "Many null realisations are drawn, so the comparison is against a distribution, not a single draw"
  ],
  "failureModes": [
    "Null too weak: it lacks constraints the real system has (density, boundaries, kinematics), so trivial structure looks significant",
    "Null too strong: it bakes in the mechanism itself and erases the effect",
    "Unmodelled mechanisms: a deviation is credited to 'social structure' when an unmodelled factor (pheromone fields, task allocation, internal state) could also produce it",
    "Choosing the null after seeing which one gives a significant result"
  ],
  "ring": 0,
  "tier": 1,
  "aliases": {
    "jensen_shannon_divergence": "JensenShannonDivergence"
  },
  "buildsOn": [
    {
      "handle": "JensenShannonDivergence",
      "type": "composes_with",
      "alias": "jensen_shannon_divergence",
      "url": "/knowledge-graph/JensenShannonDivergence/",
      "json": "/knowledge-graph/JensenShannonDivergence.json"
    }
  ],
  "usedBy": [
    {
      "handle": "EntropyDensityCollapse",
      "type": "composes_with",
      "alias": "null_model",
      "url": "/knowledge-graph/EntropyDensityCollapse/",
      "json": "/knowledge-graph/EntropyDensityCollapse.json"
    },
    {
      "handle": "SpatioTemporalNullModel",
      "type": "references",
      "alias": "null_model_baseline",
      "url": "/knowledge-graph/SpatioTemporalNullModel/",
      "json": "/knowledge-graph/SpatioTemporalNullModel.json"
    },
    {
      "handle": "LocalSpatialStateDivergence",
      "type": "references",
      "alias": "null_model",
      "url": "/knowledge-graph/LocalSpatialStateDivergence/",
      "json": "/knowledge-graph/LocalSpatialStateDivergence.json"
    }
  ],
  "sources": {
    "research": [],
    "works": [
      {
        "kind": "thesis",
        "label": "Kevin Do, PhD thesis on ant collective behaviour (NCSU, 2026)",
        "note": "Ch. 1.2.2; Ch. 3.1.1 SNM; Ch. 3.1.2 STNM; Ch. 5.6 null-model limitations",
        "url": ""
      }
    ],
    "homePage": false
  },
  "url": "/knowledge-graph/NullModelBaseline/",
  "graphUrl": "/knowledge-graph#NullModelBaseline",
  "directory": "/knowledge-graph/patterns.json"
}
