Compute the sampling error (SE, margin of error, CV) for the equal-weight
mean of the occasion estimates of a repeated survey, given the size of
each occasion and how far consecutive occasions overlap. An annual
average from quarterly rounds is the ordinary case. This is the inverse
of n_pooled().
Usage
prec_pooled(var = NULL, ...)
# Default S3 method
prec_pooled(
var = NULL,
n,
occasions,
...,
sd = NULL,
p = NULL,
mu = NULL,
alpha = 0.05,
N = Inf,
deff = 1,
resp_rate = 1,
overlap = 0,
overlap_cor = NULL,
cor_decay = NULL,
df = NULL,
plan = NULL,
.overlap_basis = NULL
)
# S3 method for class 'svyplan_n'
prec_pooled(var, ...)Arguments
- var
For the default method: the population variance \(S^2\) on one occasion, taken to be the same on each. Supply this or
p, not both. Forsvyplan_nobjects: a sample size result fromn_pooled().- ...
Additional arguments passed to methods. Unused arguments are rejected.
- n
Sample size per occasion, gross units drawn.
- occasions
Number of occasions entering the average, at least 2.
- sd
Population standard deviation on one occasion, an alternative spelling of
var. Supply exactly one ofvarorsd.- p
The proportion being averaged, as an alternative to
var. The occasion variance is then \(Np(1-p)/(N-1)\), the same finite population varianceprec_prop()uses, andmuis determined and must not be supplied.- mu
The level being averaged, on the
varscale. Required only for the relative measures:cvandrmoeare defined against it and areNAwithout it. Determined bypon the proportion scale.- alpha
Significance level, default 0.05.
- N
Population size.
Inf(default) means no finite population correction.- deff
Design effect multiplier (> 0), applied to the variance of the pooled estimate rather than to any one occasion. See Details.
- resp_rate
Expected response rate, in (0, 1]. Default 1 (no adjustment). It applies to every occasion and nets each size down to
n * resp_ratebefore the covariance is formed. It is a single round's response, not attrition across a panel.- overlap
Fraction of one occasion's responding sample carried into a later one, in [0, 1]. One number, meaning the same overlap at every lag, or one per lag, so
overlap[1]is the consecutive-occasion figure. Adesign_overlap()result is accepted directly atresp_rate = 1; see Details on why not below it.0(default) makes the occasions independent, and the pooled variance is then a single occasion's divided byoccasions.- overlap_cor
Correlation between two occasions among the units they share, in [0, 1]. One number for every lag, or one per lag. Default 0, which makes overlap irrelevant, since it is the product
overlap * overlap_corthat moves the variance. Supply this orcor_decay, not both.- cor_decay
Correlation at lag \(m\) taken as \(\rho^m\), an alternative to stating
overlap_corlag by lag. It is the shape most panels have, a correlation falling away with distance, and a single number is rarely the right one over a long horizon.- df
Degrees of freedom of the variance estimator the planned design will have, typically sampled PSUs minus strata, and available from
design_df(). It switches the interval quantile from normal to t.NULL(default) applies no adjustment.- plan
Optional
svyplan()object providing design defaults.- .overlap_basis
Internal. Records whether a stored
overlapprofile was resolved from adesign_overlap()object ("issued") or supplied as respondent overlap ("respondent"), so that a round trip or a grid meets the same refusal the first call would have. Set from the result being re-read; there is no reason to pass it by hand.
Value
A svyplan_prec object with type = "pooled":
seStandard error of the pooled estimate, computed on the net sizes
n * resp_rate.moeMargin of error,
qnorm(1 - alpha / 2) * se.cvStandard error relative to the level,
se / abs(mu).NAwhenmuis neither supplied nor determined byp.paramsThe validated inputs. Dispersion is always stored as
var, andoverlapandoverlap_coras resolved vectors of one entry per lag, whatever form they were supplied in, alongside theoverlap_basisthey were resolved under.
Nothing here is rounded, so passing a continuous n back from
n_pooled() reproduces its se, moe and cv exactly.
Details
The estimand is the equal-weight mean of the occasion estimates,
\(\bar y = T^{-1}\sum_t \bar y_t\). Three
things share that name and this is none of the other two: it is not a
pooled variance, and it is not the pooling of the rotating cohorts that
make up one occasion, which n_panel() describes.
Writing \(T\) for occasions, \(n\) for the net size,
\(o_m\) for the overlap at lag \(m\) and \(\rho_m\) for the
correlation there, the occasions carry
$$Var(\bar y_t) = \frac{S^2}{n}\Big(1 - \frac{n}{N}\Big), \qquad Cov(\bar y_t, \bar y_s) = \rho_m S^2 \Big(\frac{o_m}{n} - \frac{1}{N}\Big),$$
the same kernel prec_change() takes a difference on, and the average of
them has
$$V = \frac{1}{T^2}\Big[\,T\,Var(\bar y_t) + 2\sum_{m=1}^{T-1}(T-m)\,Cov_m\Big].$$
A lag whose overlap is zero contributes exactly zero, which is the rule
prec_change() applies at overlap = 0 read lag by lag. Two boundaries
fix the whole: a fresh sample each occasion pools to
\(Var(\bar y_t)/T\), independent averaging, and a full panel measured
with correlation 1 pools to \(Var(\bar y_t)\), the same units every
time and averaging buys nothing.
deff multiplies the assembled variance. It is the design effect of the
pooled estimate, which is not in general any one occasion's.
Overlap works against a pooled estimate, when it works at all
A covariance is subtracted in a difference and added in a sum, so whichever sign it carries, it moves a change and a pooled average in opposite directions. When the covariance is positive, which is the ordinary case, overlap improves a change and inflates a pooled average, and planners routinely get that backwards.
The covariance is positive exactly when
\(o_m > n/N\): shared units above what independent draws
from the same finite population would already give the two occasions.
Without a finite population correction any positive overlap qualifies,
so the ordinary case is the only case there. With one, an overlap
below the sampling fraction means the occasions are negatively
coordinated, sharing fewer units than chance, and the directions
reverse: at N = 1000, n = 500, overlap = 0.25 and
overlap_cor = 0.8, two occasions have a pooled variance of 0.030
against 0.050 for independent ones, while the change variance rises from
0.200 to 0.280. The kernel is a valid covariance throughout.
The level at a single occasion is unaffected either way, being a function
of that occasion's size alone, so it is a reference line rather than a
third position: what trades off is the change against the pooled
estimate. ?prec_change and this page size the two arms.
Issued overlap and respondent overlap
A bare number is the overlap between the responding samples, matching
prec_change(). design_overlap() reports the overlap between the
issued ones, and the two coincide only at full response, so its
result is accepted here at resp_rate = 1 and refused below it. The
conversion needs an assumption about how response at one occasion depends
on response at another, which this function does not make: under
independent response the responding overlap is about resp_rate times
the issued one, and stating it is the planner's decision rather than this
function's.
When the inputs do not describe a covariance
A lag's covariance changes sign once its overlap falls below the sampling
fraction n / N, and a covariance whose sign varies across lags need not
be a valid covariance at all. This is checked on the assembled matrix,
because a kernel that fails it can still return a positive pooled
variance, and a design refused here is one whose stated overlap,
correlation and sampling fraction cannot hold together. High sampling
fractions are where it bites, from about n / N = 0.6 upwards over a
long horizon, and much of that region is also a rotation that would
exhaust its own population; the message says so when it does.
What the overlap covariance assumes
As in prec_change(), the covariance is a model form, a correlation
between occasions among the units they share and simple random sampling
otherwise. It is not the design-based covariance of a complex master
sample, which carries its own pairwise inclusion probabilities.
See also
n_pooled() for the inverse (compute n from a precision
target), prec_change() for the other arm of the trade-off,
design_overlap() for the overlap a rotation schedule gives,
prec_mean() and prec_prop() for a single occasion.
Other precision functions:
prec_alloc(),
prec_change(),
prec_cluster(),
prec_mean(),
prec_multi(),
prec_multi_cluster(),
prec_panel(),
prec_prop(),
prec_twophase()
Examples
# Four independent quarterly rounds averaged into an annual figure
prec_pooled(var = 100, n = 500, occasions = 4)
#> Sampling precision for pooled estimate (mean scale)
#> n = 500 per occasion, 4 occasions (var = 100, deff = 1)
#> No between-occasion covariance (overlap x overlap_cor = 0)
#> se = 0.2236, moe = 0.4383
# The same rounds from a rotating panel: overlap inflates the average
prec_pooled(var = 100, n = 500, occasions = 4, overlap = 0.75,
cor_decay = 0.8)
#> Sampling precision for pooled estimate (mean scale)
#> n = 500 per occasion, 4 occasions (var = 100, deff = 1)
#> overlap = 0.75, overlap_cor = 0.8 at lag 1, shared out to lag 3
#> se = 0.3586, moe = 0.7029
# An annual average of a proportion measured monthly
prec_pooled(p = 0.3, n = 1200, occasions = 12, overlap = 0.75,
cor_decay = 0.9)
#> Sampling precision for pooled estimate (proportion scale)
#> n = 1200 per occasion, 12 occasions (p = 0.3, deff = 1)
#> overlap = 0.75, overlap_cor = 0.9 at lag 1, shared out to lag 11
#> se = 0.009682, moe = 0.01898, cv = 0.03227, rmoe = 0.06325
# Overlap read off a rotation schedule, at full response
prec_pooled(var = 100, n = 500, occasions = 8,
overlap = design_overlap("4", max_lag = 7), cor_decay = 0.8)
#> Sampling precision for pooled estimate (mean scale)
#> n = 500 per occasion, 8 occasions (var = 100, deff = 1)
#> overlap = 0.75, overlap_cor = 0.8 at lag 1, shared out to lag 3
#> se = 0.2593, moe = 0.5083
# Round-trip from n_pooled
res <- n_pooled(var = 100, moe = 1, occasions = 4, overlap = 0.5,
cor_decay = 0.7)
prec_pooled(res)
#> Sampling precision for pooled estimate (mean scale)
#> n = 179 per occasion, 4 occasions (var = 100, deff = 1)
#> overlap = 0.5, overlap_cor = 0.7 at lag 1, shared out to lag 3
#> se = 0.5102, moe = 1