Independent mathematical audit

Validation

The strongest check on a simulation is whether an independently written implementation reproduces results for which the mathematics and published benchmarks are already known. This page provides the equations, replication results, failure tests, source code, raw runs, and a downloadable technical report.

2,000 benchmark runs100 runs per published cellAll unit tests passedJacob-specific outputs remain conditional

What was verified

Published benchmark reproducedAll 20 cells of Rohde et al. Tables 1 and 2 were rerun with 100 fresh simulations per cell.
Very small numerical errorAcross 40 MRCA/IA means, mean absolute difference from the published means was 0.160 generations; the largest was 0.51.
Analytical doubling behaviorThe measured changes as N doubles track the R + Δ and D + 1.77 predictions.
Independent lineage checks250 tiny random pedigrees matched a slow explicit graph-traversal calculation exactly.
Important boundary: this validates the genealogical mechanism and an independent Rohde-style implementation. It does not prove the historical existence of Jacob, the survival of his lineage, or any particular ancient migration rate. Those are separate historical and demographic premises.

Core equations

For a single randomly mating population:

TN / log2(N) → 1
UN / [1.77 log2(N)] → 1

For the structured graph model:

TN / [(R + Δ)log2(N)] → 1
UN / [(D + 1.77)log2(N)] → 1

TN = genealogical MRCA time; UN = identical-ancestors point; R = graph radius; D = graph diameter.

Replication of Rohde et al. Tables 1 and 2

The table compares the published mean number of generations with the independent replication. Each replication cell contains 100 Monte Carlo runs, matching the paper.

GraphNT publishedT replicatedΔTU publishedU replicatedΔU
One node1,00010.810.71-0.0920.821.12+0.32
One node2,00011.811.75-0.0522.622.52-0.08
One node4,00012.812.85+0.0524.624.59-0.01
One node8,00013.913.85-0.0526.526.47-0.03
One node16,00014.814.96+0.1628.328.28-0.02
3 fully connected1,00014.013.91-0.0927.427.15-0.25
3 fully connected2,00015.615.63+0.0330.330.38+0.08
3 fully connected4,00017.117.15+0.0533.433.12-0.28
3 fully connected8,00018.918.80-0.1036.236.38+0.18
3 fully connected16,00020.320.49+0.1938.939.24+0.34
5 fully connected1,00014.013.95-0.0525.926.00+0.10
5 fully connected2,00015.815.90+0.1028.928.89-0.01
5 fully connected4,00017.817.72-0.0832.131.83-0.27
5 fully connected8,00019.619.59-0.0135.335.04-0.26
5 fully connected16,00021.521.51+0.0137.938.07+0.17
10-node Fig. 11,00021.121.54+0.4446.346.65+0.35
10-node Fig. 12,00024.324.07-0.2353.052.49-0.51
10-node Fig. 14,00027.627.67+0.0759.859.83+0.03
10-node Fig. 18,00030.530.42-0.0866.866.41-0.39
10-node Fig. 116,00033.833.32-0.4873.673.31-0.29

T = MRCA generations; U = IA-point generations. Published standard deviations and all raw replication outputs are included in the downloadable CSV files.

Calculator-level check

For the ten-node world graph, R = 3, D = 5, and Δ = 0. Therefore:

Expected ΔT per population doubling = 3.00
Expected ΔU per population doubling = 5 + 1.77 = 6.77

Rohde's published means give average increments of 3.175 and 6.825. The independent replication gives 2.945 and 6.665.

Failure and unit tests

  • 250/250 tiny random pedigrees exactly matched explicit graph traversal.
  • 25/25 zero-migration disconnected-population trials correctly produced no global common ancestor.
  • Repeated identical random seed produced identical result (T,U) = (8,17).
  • MRCA persistence invariant passed in 25/25 random tests.
Recorded test output

Download the audit package

Technical validation report (PDF)

Seven-page scholarly appendix: formulas, method, full tables, hand calculations, limits, and reproducibility hashes.

Open PDF

Editable report (DOCX)

Editable version of the validation report for peer comments or submission appendices.

Open DOCX

Benchmark source code

Independent Python implementation for all four graph structures and all five population sizes.

Download Python

Summary results CSV

All 20 cells with replicated mean and standard deviation, published values, and differences.

Open CSV

All 2,000 raw runs

Every seed and resulting T/U pair so reviewers can recompute all summary statistics themselves.

Open raw CSV

Unit tests and manifest

Brute-force correctness checks, recorded console output, and SHA-256 hashes for integrity verification.

Unit testsManifest

For independent reviewers

  1. Verify definitions of TN and UN against Rohde et al. and Chang.
  2. Verify R, D, and Δ for the 3-, 5-, and 10-node graphs.
  3. Run rohde_full_validation.py and compare the resulting CSV to Tables 1 and 2.
  4. Run jacob_validation_unit_tests.py and inspect the explicit traversal check.
  5. Compare SHA-256 hashes to validation_manifest.json.
  6. Audit the production simulator code separately to confirm its ancestry routine is equivalent to the validated implementation.
  7. Evaluate historical parameters—migration, endogamy, population size, fertility, and dating—separately from the math.

References

  1. Rohde, D. L. T., Olson, S., & Chang, J. T. (2004), Modelling the recent common ancestry of all living humans, Nature 431, 562–566. DOI.
  2. Rohde, Olson & Chang, Supplementary Methods A, Further Explanation and Derivations of Mathematical Results.
  3. Rohde, Olson & Chang, Supplementary Methods B, Further Details of the Computational Model.
  4. Chang, J. T. (1999), Recent common ancestors of all present-day individuals, Advances in Applied Probability 31, 1002–1026. DOI.
  5. Kelleher et al. (2016), Spread of pedigree versus genetic ancestry in spatially distributed populations, Theoretical Population Biology 108, 1–12. DOI.
  6. Ralph & Coop (2013), The Geography of Recent Genetic Ancestry across Europe, PLoS Biology 11(5), e1001555. DOI.