A simple random sample drawn without replacement from a known finite frame has less sampling variance than an equal-sized independent-draw model.
Finite-frame sampling: adjust uncertainty for sampling without replacement
Specify the finite target
An auditor has a complete register of 347 active retail branches and selects 91 distinct branches by simple random sampling without replacement. The target is the mean outcome among those 347 branches at the defined date, not a hypothetical unlimited supply of branches. When the sample is a material fraction of the frame, selecting one branch removes it from possible future selections. That dependence reduces sampling uncertainty. The frame must be complete and each listed branch must have a known equal selection chance. The frame lesson defines that boundary.
Apply the correction at the right stage
For a simple random sample without replacement, estimate variance of the sample mean as sample variance divided by sample size, multiplied by one minus the sampling fraction n over N. This common finite-population correction is for design-based uncertainty about the fixed finite mean. It reaches zero at a census with complete measurement; measurement error and nonresponse do not vanish. The code implements this specific equal-probability design. Stratified, clustered or unequal-probability samples require their own design variance. The survey-design lesson handles those cases.
Do not repair a defective frame with arithmetic
A low variance estimate from a large sampling fraction can still be biased if closed branches remain listed, new branches are missing, or branch outcomes are recorded differently. The correction describes variability from random selection under the stated design, not coverage error. The initial sample size and actual respondent count also differ: treating a small respondent set as if it were a census of the frame is invalid. Response bounds make the missing-outcome risk visible.
Report the basis and scope
Show N, selected n, measured n, the selection procedure, sample variance, corrected standard error and any frame changes. A smaller standard error is justified only where the draw really was without replacement from the fixed frame. If the decision concerns future branch openings, the finite-frame estimate may have the wrong target; a future-process model asks a different question. The project uses the correction only after reconciling the register and response ledger.
Implementation
from math import sqrt
from statistics import variance
def finite_frame_mean_se(measured_values, frame_size):
selected_count = len(measured_values)
if selected_count < 2 or frame_size < selected_count:
raise ValueError("at least two selected units and a valid frame required")
estimated_variance = variance(measured_values) / selected_count
return sqrt(estimated_variance * (1 - selected_count / frame_size))
assert finite_frame_mean_se([4.0, 8.0, 6.0], 3) == 0
assert finite_frame_mean_se([4.0, 8.0, 6.0], 15) > 0
Performance and operating cost
Computing a sample variance and corrected standard error takes O(n) time and O(1) extra space over the existing measurements. Frame reconciliation is an O(N) audit and may be harder than the calculation. This simple formula must not be reused for a clustered design.
Common Mistakes
- Applying simple-random-sample correction to a clustered or unequal-probability sample.
- Claiming a census has no measurement or coverage error because sampling SE is zero.
- Using respondent count as selected count without addressing nonresponse.
- Using the finite-frame estimate to make claims about unknown future branches.
Read next
- Nonresponse bounds: show what missing binary outcomes could change
- Project: audit branch compliance with a finite sample and missing replies
- Population, estimand and sampling frame: name the quantity before calculating
- Survey uncertainty: count sampled clusters, strata and weight concentration
- Stratified survey estimates: weight toward the named population
