The statistical model

Every formula below is implemented in the source query and every quantity it produces is exported, so that an interval can be recomputed from the graph without access to the database. This page states them in one place; the authoritative implementation remains the SQL.

The parameters in force are recorded on samian:DatingModel_v1 and are read from the data rather than restated here, so they cannot drift.

Interval midpoint

m = (mean(datemin) + mean(datemax)) / 2

The centre about which the effective interval is built. Averaged over every potter attested at the findspot.

As implemented:

((AVG(p.datemin) + AVG(p.datemax)) / 2.0)::numeric(10,1)

Dispersion by variance decomposition

σ = sqrt( mean(width² / 12) + var(midpoints) )

Two sources of spread are added. The first term is the internal fuzziness of each potter’s own range, treated as uniform, whose variance is width²/12. The second is the disagreement between potters about where the centre lies. Where only one potter contributes, the second term is zero and the first survives — a single potter still does not date a findspot to a point.

As implemented:

SQRT( AVG(POWER(p.datemax - p.datemin, 2) / 12.0)
      + COALESCE(VAR_SAMP((p.datemin + p.datemax) / 2.0), 0) )

Volume-based k factor

k = k_max − (k_max − k_min) · (1 − exp(−n / τ))

The multiplier falls from k_max towards k_min as evidence accumulates, so that a well-attested findspot receives a narrower interval. n is the stamp count of the findspot. Until revision 30a it was the number of stamps carrying a die attribution, which tied the width of the box to how completely the die record happened to be filled in; where no die was recorded at all, k fell back to k_max and the interval widened for a reason unconnected with the material. The two counts agree throughout the present corpus, so the correction moves no number — it removes a failure mode.

As implemented:

( (SELECT k_max FROM params)
  - ((SELECT k_max FROM params) - (SELECT k_min FROM params))
    * (1 - EXP(-COUNT(di.number)::numeric / (SELECT tau FROM params))) )

Effective interval

eff_start = m − k·σ    eff_end = m + k·σ

The interval drawn as the box. It is an archaeologically motivated ‘virtual fuzzy year’, not a confidence interval; no probability statement attaches to it. Its width is exactly 2·k·σ, which is the identity used to verify that the exported figures are sufficient to reconstruct the interval.

As implemented:

( (AVG(p.datemin)+AVG(p.datemax))/2.0
  ± k_eff
    * SQRT( AVG(POWER(p.datemax - p.datemin, 2)/12.0)
            + COALESCE(VAR_SAMP((p.datemin+p.datemax)/2.0), 0) ) )

Dating sharpness — first quality axis

q_interval = exp( − sqrt(var(datemin) + var(datemax))
                  / |mean(datemax) − mean(datemin)| )

Dispersion relative to interval width, mapped onto (0, 1]. Because the denominator is a width rather than a calendar value, this axis is unaffected by proximity to the era boundary.

As implemented:

EXP(-(SQRT(VAR_SAMP(p.datemin) + VAR_SAMP(p.datemax)) /
     ABS(AVG(p.datemax) - AVG(p.datemin))))

Edge sharpness — presentation only

q_start = exp( − sd(datemin) / |mean(datemin)| )
q_end   = exp( − sd(datemax) / |mean(datemax)| )

These divide by a calendar value, so material dated near the era boundary is penalised for its position in the calendar rather than for any weakness in the evidence. At Amiens the mean end date is AD 3, and a scatter of 15 years therefore yields q_end ≈ 0.004 — a red whisker that says ‘close to the era boundary’, not ‘poorly dated’. Exported for completeness and used for whisker colour, but not suitable as a quality measure on its own.

As implemented:

EXP(-(STDDEV_SAMP(p.datemin) / ABS(AVG(p.datemin))))
EXP(-(STDDEV_SAMP(p.datemax) / ABS(AVG(p.datemax))))

Die repetition — second quality axis

r = n_stamps_die / n_dies
q_repetition = 1 − 1 / max(r, 1)

Describes deposit character rather than dating quality. The two axes are deliberately kept apart: combining them would let a findspot that is simply not a hoard appear badly dated. Findspots without die attribution yield NULL, not zero, because absence of die information is not evidence of absent repetition.

As implemented:

ROUND(SUM(stamps_pp)::numeric / NULLIF(SUM(dies_pp),0), 3)
CASE WHEN MIN(k.rep) IS NULL THEN NULL
     ELSE ROUND(1 - 1.0/GREATEST(MIN(k.rep),1), 3) END

Verifying the export

Two identities hold for every row, and checking them confirms that the exported figures suffice to reconstruct the interval:

k     = k_max − (k_max − k_min) · (1 − exp(−n_stamps_die / τ))
width = eff_end − eff_start = 2 · k · σ

Against the current data both hold to within the rounding imposed by the SQL column types — 4.8 × 10⁻⁵ for k, which is stored as numeric(10,4), and 0.09 years for the width, stored as numeric(10,1).

Two axes, deliberately not combined

lado:qInterval measures how tightly the contributing potter datings agree. lado:qRepetition measures how often the same dies recur, which indicates deposit character. They are exported separately and never averaged.

The reason is that a findspot which is not a hoard would otherwise appear badly dated. Inchtuthil is the standing example: its dating is sound, but it is not a deposit, and a combined score would drag it down for a property that has nothing to do with dating quality.

A caution about the edge measures

lado:qStart and lado:qEnd divide by a calendar value. Material dated near the era boundary is therefore penalised for where it sits in the calendar rather than for any weakness in the evidence. At Amiens the mean end date is AD 3 and the scatter is 15 years, giving q_end ≈ 0.004 — the red whisker in the figure records proximity to the era boundary, not a poor date. lado:qInterval divides by an interval width and is free of this distortion.

The unexplained filter

The source query excludes rows where datemax takes one of the values 260, 120, 150. The reason is not documented. The filter is not neutral: it removes the affected potters at every findspot, not at selected ones. It is recorded in the graph as lado:excludedDatemax on the model rather than left silent, so that a reader can see that a selection was made even though its rationale is currently unavailable.