Skip to content
Quantitative History Methods

The best practice for nominal record linkage is to treat names as noisy evidence rather than identifiers: standardise aggressively, block on phonetic codes, score candidate pairs with frequency-aware weights, set a defensible threshold, and validate against a hand-linked gold standard. Done consistently across a whole collection, this yields links you can document, audit, and defend. Below is a working checklist you can apply to any census, parish, or directory series.

What makes nominal linkage different from key joins? ​

A relational join needs a shared key. Nominal linkage has none — only Mary Ann Thornton, "abt 1844", born "Salford". Every field carries error: clerks misheard names, ages were rounded or lied about, places were spelled by ear. So you never match on names alone; you accumulate evidence from several fields and decide probabilistically.

How should I standardise names? ​

Standardisation is the highest-leverage step. Build and apply, in order:

  1. Case and whitespace — lowercase, collapse repeated spaces, strip punctuation.
  2. Forename canonicalisation — map nicknames and abbreviations (Betsy, Eliza, Bess to elizabeth) via a lookup table you keep under version control.
  3. Phonetic code — store a Double Metaphone of the surname for blocking.
python
from metaphone import doublemetaphone
def encode(surname: str) -> str:
    return doublemetaphone(surname)[0]   # primary code
# "Smith" -> "SM0", "Smyth" -> "SM0"  (same block)

Keep the original spelling in its own column. Never overwrite source data.

What is the right blocking strategy? ​

Block on phonetic_surname + birth_decade. This keeps almost all true pairs while slashing comparisons. To recover links that a single key misses — a mistranscribed surname, say — run a second pass blocking on forename_initial + birthplace and union the candidate sets. Two complementary passes typically lift recall by several points at negligible cost to precision.

How do I weight agreements by name frequency? ​

This is where amateur linkages go wrong. Agreeing on "Smith" should count for little; agreeing on "Pomfret" for a lot. Compute m- and u-probabilities or, more simply, scale each surname's match weight by its inverse frequency in the population.

Pair agrees onNaive weightFrequency-aware weight
Surname "Smith"+1.0+0.3
Surname "Pomfret"+1.0+2.6
Age within 1 year+1.0+0.7
Exact birthplace parish+1.0+1.9

The R package reclin2 and Python's recordlinkage both estimate these weights with an EM algorithm so you do not hand-tune them.

Enforce the cardinality your question needs. For longitudinal tracing, apply a one-to-one constraint and resolve competing high-scoring pairs with a global assignment (for example, the Hungarian algorithm or a greedy highest-score-first pass). Without that constraint a popular record absorbs several spurious partners.

How do I prove the linkage is good? ​

Draw a random sample of candidate and accepted pairs, link them by hand, and treat that as truth. Then report:

  • Precision = correct links / accepted links (target above 95 percent).
  • Recall = correct links / true links available (often 60 to 85 percent).
  • Differential rates by sex, region, and name frequency, so readers see who your linked sample under-represents.

Key Takeaways ​

  • Treat names as noisy evidence; never link on a single field.
  • Standardise case, nicknames, and phonetics, but keep the original spelling intact.
  • Block on phonetic surname plus birth decade, and run a complementary second pass.
  • Weight agreements by name frequency so rare surnames carry their real signal.
  • Apply a one-to-one constraint for individual tracing using a global assignment step.
  • Validate with a hand-linked gold standard and report precision, recall, and bias.

Frequently Asked Questions ​

What is nominal record linkage? ​

Nominal record linkage matches records by personal names plus supporting attributes like age and birthplace, rather than by a shared identifier. It is the standard method for joining historical censuses, vital registers, and directories.

How do I handle name spelling variation? ​

Combine phonetic encoding (Double Metaphone or NYSIIS) with edit-distance similarity such as Jaro-Winkler. Phonetic codes group plausible variants for blocking, and the string metric scores the actual closeness.

Why are common names a problem? ​

A common surname carries little discriminating power, so many false candidate pairs agree on it. Weight agreements by name frequency so that matching on a rare surname counts far more than matching on a common one.

Decide from your research design. Tracing individuals across censuses needs a one-to-one constraint, while linking a person to all their property records is naturally one-to-many.

How do I evaluate linkage quality? ​

Hand-link a random gold-standard sample of 200 to 500 pairs and compute precision and recall against it. Report both numbers and the linkage rate broken down by sex and region.

What should I record for reproducibility? ​

Document the standardisation rules, blocking keys, comparison metrics, weights, threshold, and software versions. A linkage you cannot describe in full is a linkage no one can trust.