Choosing Between ACS and Census Denominators for Rates

This guide, part of Small-Area Population Denominators, turns the most common denominator question — decennial census count or American Community Survey estimate — into a procedure with a defensible answer for each area rather than one choice imposed on all of them.

Problem Context & Constraints

Most analyses pick one denominator source for the whole study area and never revisit it. That is convenient and frequently wrong, because the right choice depends on properties that vary between areas: how much the area’s population has changed since the census, and how large the survey’s sampling error is at that area’s size.

Consider a 2026 analysis at tract level. For a stable older neighbourhood, the 2020 census count is still close to the truth and exact on its reference date, while the five-year survey estimate carries a margin of error of perhaps 15%. The census is better. For a tract where a large subdivision was built in 2022, the census count is now badly stale — the population may have grown by a third — while the survey estimate reflects the growth with its usual error. The survey is better. A single choice for both tracts is wrong for one of them.

Three constraints shape a procedure. The comparison needs an estimate of census staleness, which means some indicator of change since the census: survey growth, housing unit counts, or building permits. It needs the survey’s own error, from the published margins. And strata matter: if the analysis needs income or insurance status, only the survey has them, and the choice is made for you at whatever cost in precision.

The Better Source Differs by Tract Two tracts compared in 2026. The stable tract's population barely changed since 2020, so the census count remains within about two per cent of the truth, while the survey estimate carries about fifteen per cent sampling error; the census wins. The growing tract added a subdivision in 2022 and gained a third of its population, so the census count is now thirty per cent too low while the survey estimate is current within its sampling error; the survey wins. A single source chosen for the whole study area is wrong for one of them. One source for every tract is wrong for some of them Stable tract census error by 2026: about 2% survey error: about 15% use the census Growing tract census error by 2026: about 30% survey error: about 15% use the survey choose per area from staleness and sampling error, and record the choice per area

Prerequisites

  • python 3.11
  • pandas 2.2.2, numpy 1.26.4
  • Census counts for the study geography at the most recent census, on harmonised boundaries
  • Five-year survey estimates and margins of error for the same geography and strata
  • An indicator of change since the census — survey trend, housing unit counts or permit data
  • The list of strata the analysis requires

Step-by-Step Solution

Estimate the census’s error from growth, estimate the survey’s error from its margin, choose per area, and record which source each area used.

# Per-area choice between census count and survey estimate as the denominator.
# Pinned: pandas==2.2.2, numpy==1.26.4
import logging

import numpy as np
import pandas as pd

logging.basicConfig(level=logging.INFO, format="%(asctime)s %(levelname)s %(message)s")
log = logging.getLogger("denominators.choose")

Z90 = 1.645


def choose_source(census: pd.DataFrame, survey: pd.DataFrame,
                  growth: pd.DataFrame, needs_survey_strata: bool = False) -> pd.DataFrame:
    """census: geoid, pop_census   survey: geoid, pop_survey, moe
    growth: geoid, growth_since_census (fraction, from housing units or permits)
    """
    df = census.merge(survey, on="geoid", how="outer").merge(growth, on="geoid", how="left")
    if needs_survey_strata:
        df["source"] = "survey"
        df["reason"] = "required strata exist only in the survey"
    else:
        # Census error grows with change since the census date.
        df["census_rel_error"] = df["growth_since_census"].abs().fillna(0.0)
        # Survey error is its relative standard error.
        df["survey_rel_error"] = (df["moe"] / Z90) / df["pop_survey"].replace(0, np.nan)
        pick_survey = df["survey_rel_error"] < df["census_rel_error"]
        df["source"] = np.where(pick_survey, "survey", "census")
        df["reason"] = np.where(pick_survey,
                                "census stale relative to survey sampling error",
                                "census within survey sampling error")
    df["denominator"] = np.where(df["source"] == "survey", df["pop_survey"], df["pop_census"])
    counts = df["source"].value_counts().to_dict()
    log.info("denominator source by area: %s", counts)
    missing = df["denominator"].isna().sum()
    if missing:
        log.warning("%d areas lack the chosen source and need a fallback", int(missing))
    keep = ["geoid", "source", "reason", "denominator", "pop_census", "pop_survey"]
    keep += [c for c in ("census_rel_error", "survey_rel_error") if c in df.columns]
    return df[keep]

Comparing two relative errors on the same scale is what makes the choice defensible. The census’s error is not zero after the reference date — it grows with every household that moves in or out — and treating it as exact because it is an enumeration is the most common reason a fast-growing area’s rate is overstated. Expressing the staleness as a fraction lets it be set against the survey’s relative standard error directly.

The growth indicator is the weakest input and deserves scrutiny. Housing unit counts from assessor records are usually the best available; building permits overcount because not everything permitted is built; survey growth is noisy at tract level. Whichever is used, record it, because it drives every census-versus-survey decision.

The Diagonal Decides Each tract plotted by the estimated relative error of its stale census count on the horizontal axis and the relative standard error of its survey estimate on the vertical axis. Tracts above the diagonal have a survey error larger than their census staleness and use the census; tracts below it use the survey. Most tracts cluster in the upper left and use the census. A smaller group of fast-growing tracts sits to the right, below the diagonal, and switches to the survey. Above the diagonal, the census; below it, the survey stable: census fast-growing: survey estimated error of the stale census count survey relative error

Validation & Edge Cases

Mixed sources in one map. Using different sources in adjacent tracts is legitimate but must be visible. A rate map should carry the source as an attribute, and the methods should state how many areas used each.

Strata that exist only in the survey. If the analysis stratifies by income or insurance, the survey is mandatory, and its margins at that stratification may be too large at tract level. Aggregate to a geography where they are tolerable before choosing.

Growth indicators that lag. Assessor housing counts can trail occupancy by a year. A subdivision whose homes are built but not yet occupied appears as growth before the population arrives, and the survey may not yet reflect it either.

Population decline. The procedure uses the absolute value of growth, because a shrinking area’s census count is stale in the other direction and inflates the denominator, depressing the rate.

Areas split or merged between vintages. A tract that the census split in two has a census count for each half but, if the survey product is still on the older geography, a single survey estimate for the whole. Comparing them requires harmonising one to the other first, and the harmonisation adds its own error to whichever side was moved. Do the comparison on the geography the analysis will use, and add the allocation error to the moved source’s relative error before choosing.

Institutional populations that changed. A dormitory that opened or a correctional facility that closed moves the population substantially without any change in housing units, so a housing-based growth indicator misses it entirely. Check group-quarters counts separately for the tracts where large institutions exist, and override the indicator where they changed.

Choosing once and never revisiting. The comparison depends on the years elapsed since the census, so the right answer for a tract changes through the decade: a tract correctly on the census in 2022 may belong on the survey by 2027. Re-run the choice with every new survey vintage rather than freezing the first result.

Tracts with no survey estimate. Some small areas have suppressed or missing survey values. Fall back to the census with an explicit reason rather than dropping the area.

INFO denominators.choose denominator source by area: {'census': 1512, 'survey': 330}
WARNING denominators.choose 6 areas lack the chosen source and need a fallback

A final validation is to compare the two choices at an aggregate level where both are reliable. The county totals implied by the per-tract choices should sit within the county-level survey’s margin of error. A mixed-source county total that falls outside that margin suggests the growth indicator is systematically wrong somewhere, and the tracts driving the discrepancy are usually easy to find by sorting on the difference between their two candidate denominators.

Check the Mixed Total Against a Reliable Aggregate For four counties, the total population implied by summing each tract's chosen denominator is plotted as a point, and the county-level survey estimate is drawn with its margin of error as a bar. Three counties' mixed totals fall inside the margin, confirming the per-tract choices are consistent. One county's mixed total falls outside, pointing to a systematically wrong growth indicator in some of its tracts, which should be investigated before the rates are used. A county total outside the margin means a growth indicator is off county A county B county C county D: outside bar: county survey estimate with its margin · point: sum of per-tract choices sort county D's tracts by the gap between census and survey to find the culprit

Compliance Notes

Record per area the source chosen, the reason, both candidate denominators and their estimated errors, and the growth indicator used with its own source and vintage. Record the rule itself — the comparison of relative errors — as configuration, so it can be reapplied identically when a new vintage arrives.

State the mixed-source approach in the methods of any product built on it. A reader comparing your tract rates with another agency’s will otherwise see small unexplained differences in the fast-growing areas, which are exactly the areas where the choice of denominator matters and where a single-source analysis is most likely to be wrong.