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.