Compute the fraction of the units a rotation schedule puts in sample that
it carries from one occasion to another, at every lag the schedule
reaches. This is the overlap of the issued sample, a property of the
schedule alone. It is the overlap that n_change(), prec_change(),
power_mean(), power_prop() and power_did() take when response is
complete, replacing a number the planner would otherwise have to know.
See Details for what a response rate below 1 does to that reading.
Arguments
- schedule
The occasions a unit spends in and out of sample over its whole life, in one of two forms.
A compact string in either of the two notations the literature uses, told apart by whether it contains a
0. Without one it names the spells in order, starting in sample:"4-8-4"is the CPS pattern, four occasions in, eight out, four in, and"5"is a five-occasion panel with no break. The count of spells must be odd, so the life starts and ends in sample. With a0it is one flag per occasion:"1-1-0-0-1-1"is in for two, out for two, in for two, the same life as"2-2-2". A string of all 1s is the one form both notations claim and is refused, naming the two readings and the unambiguous spelling of each.A numeric or logical vector gives one entry per occasion of a unit's life,
0/FALSEfor out of sample. Positive values may differ, in which case they are the number of units still measured at that occasion of the life, which is how a design that subsamples later waves is described. No entry may exceed the first, a wave being able only to re-interview part of the cohort it recruited. The first and last entries must be positive, since an out-of-sample spell before the first or after the last interview is not part of a unit's life. A life shorter than two occasions is refused, having no lag at which any sample is shared.- max_lag
Largest lag to report. Defaults to one less than the life, which is the largest lag at which any overlap is possible.
Value
A svyplan_overlap object: a numeric vector of issued-sample
overlap fractions named by lag, so x[1] is the consecutive-occasion
overlap and x[12] the overlap a year apart on monthly occasions.
Subsetting returns a plain number, which is what the overlap
arguments take, and arithmetic returns bare numerics. It also carries:
$sharedUnits in sample on both occasions, at each lag.
$n_occasionUnits in sample at any one occasion. Constant, see Details.
$scheduleThe resolved per-occasion vector.
$lifeOccasions from a unit's first interview to its last.
Details
One cohort enters at every occasion, so at a steady state the cohorts alive span every stage of the life and the sample at occasion \(t\) is \(\sum_s w_s\), writing \(w\) for the schedule. Units in sample at both \(t\) and \(t + m\) are those whose cohort is in sample at stages \(s\) and \(s + m\), so
$$\mathrm{shared}(m) = \sum_{s = 1}^{L - m} \min(w_s, w_{s + m}), \qquad \mathrm{overlap}(m) = \mathrm{shared}(m) / \sum_s w_s.$$
The min is the count when the smaller take at the two occasions is a
subset of the larger, which is what attrition and planned subsampling both
give, including a design that subsamples an interim wave and returns to
the whole cohort afterwards. Nesting is an assumption about the design and
is not identifiable from the takes. Where the two occasions measure
partly disjoint subsamples of the cohort, min is the largest overlap
the takes admit rather than the overlap the design has.
These are the overlaps of the design at a steady state, which a rotation
reaches once every stage of the life is represented at one occasion. Which
occasion that is depends on how the design is launched, and the overlaps
themselves do not: shared(m) sums over stages, and entry dates do not
enter it. A design that recruits one cohort an occasion reaches the steady
state at the occasion that spans the life, the overlaps before it being
those of a design no cohort has yet aged out of. A design whose first
occasion contains launch components for every possible remaining life
length is at the steady state from the first occasion, and these figures
hold throughout. For an unbroken equal-take life, those are equal panels
planned for lives from the full life down to one occasion, all at their
first interview.
Covering every stage is the exact requirement, and for a life with a gap
it is more than one cohort per remaining length. Under "1-1-0-0-1-1" the
stages that hold the steady state include two that are out of sample, so
the cohorts starting there are selected but not interviewed until they
reach their first in-sample stage. Splitting the first occasion's
interviewed sample alone puts six cohorts in sample where the design holds
four, and gives a consecutive overlap of 0.83 against the schedule's 0.50.
plot.svyplan_overlap() draws the one-cohort-an-occasion launch and marks
the occasion the steady state begins.
The overlap has one direction here, and that is a property of the
steady state rather than a simplification. Elsewhere in the package
overlap is n12 / n1 and is not symmetric when the occasions differ in
size. Under a stationary rotation every occasion holds the same mix of
life stages, so \(n_t\) is the same at every occasion and the two
directions coincide. A design whose cohorts differ in size by entry date
has no steady state and is outside what this function describes.
Why a life, and not a repeating pattern
A schedule is a finite life, not a cycle. Reading "4-8-4" as "four in,
eight out, repeat forever" gives the wrong answer, and gives it quietly.
Under the cycle only the cohort finishing its four-occasion stint leaves
each occasion, so seven of eight are retained and the consecutive overlap
comes out at 87.5%. Under the finite life two cohorts leave, one reaching
the end of its first spell and one reaching the end of its second, so six
of eight are retained and the answer is the published 75%. A compact
string with an even number of spells would have to be read as a cycle and
is rejected for that reason.
Two notations, and the one string that means both
Rotation designs are named two ways in print. "4-8-4" counts occasions
per spell; "1-1-0-0-1-1" carries one flag per occasion. Both are
accepted, told apart by the 0, which no spell can be. The exception is a
string of all 1s, which is a valid sentence in both notations and a
different design in each: "1-1-1" is three occasions in sample as a
pattern and one in, one out, one in as spells, whose consecutive overlaps
are 2/3 and 0. Neither reading is given precedence, because the wrong one
is invisible in the answer. Write "3" or "1-0-1", which each say one
thing only.
Issued overlap, and the overlap a variance formula reads
What a schedule fixes is which units are issued at both occasions.
The overlap argument of n_change(), prec_change() and the power
family is the fraction of the first occasion's responding sample
measured again, those functions netting each occasion down by resp_rate
before the covariance forms. The two are the same number at
resp_rate = 1, and this function's result can be passed straight
through there.
Below full response they are not, and converting one into the other needs an assumption about how response persists across occasions, which neither function makes. Under response independent between occasions at rate \(r\), an issued overlap \(f\) leaves a responding overlap of about \(fr\): a shared unit responds at both occasions with probability \(r^2\), against the \(r\) of issued units responding at the first. A panel whose wave-1 respondents are much likelier to respond again sits above that, reaching \(f\) itself when response persists perfectly. Pass the figure you expect among respondents, and say which assumption produced it.
What it does not give you
The correlation between occasions. overlap is a property of the
schedule and is fixed once the design is declared; overlap_cor is a
property of the variable being measured and has to come from a previous
round of the same survey. Both enter the variance of a change, and only
their product buys precision, so a schedule alone does not say what a
rotation is worth.
References
U.S. Census Bureau. Current Population Survey: Design and Methodology, Technical Paper 77. The 4-8-4 rotation and its 75% and 50% overlaps.
Lynn, P. (2012). Longitudinal Survey Methods for the Household Finance and Consumption Survey. Report to the European Central Bank. The one-flag-per-occasion notation, and the 1-1-0-0-1-1 design whose lag profile the examples reproduce.
See also
plot.svyplan_overlap() for the rotation chart of a schedule;
n_change() and prec_change(), which take the result as their
overlap; design_effect() and design_df() for the other quantities
a planned design determines.
Examples
# CPS 4-8-4: 75 percent month to month, 50 percent a year apart
cps <- design_overlap("4-8-4")
cps[1]
#> [1] 0.75
cps[12]
#> [1] 0.5
# A five-wave panel with no break
design_overlap("5")[1]
#> [1] 0.8
# Feed it straight into a change requirement, response being complete here
n_change(p = c(0.30, 0.36), moe = 0.02,
overlap = cps[1], overlap_cor = 0.5)
#> Sample size for change (proportion scale)
#> n = 2646 per occasion (p = 0.3 to 0.36, moe = 0.02, deff = 1)
#> overlap = 0.75, overlap_cor = 0.5 (62.5% of the independent variance)
# The annual lag is the one a year-on-year change uses
n_change(p = c(0.30, 0.36), moe = 0.02,
overlap = cps[12], overlap_cor = 0.5)
#> Sample size for change (proportion scale)
#> n = 3174 per occasion (p = 0.3 to 0.36, moe = 0.02, deff = 1)
#> overlap = 0.5, overlap_cor = 0.5 (75.0% of the independent variance)
# Under response independent between occasions at 80 percent, the overlap
# among respondents is the issued one scaled by the response rate
n_change(p = c(0.30, 0.36), moe = 0.02, resp_rate = 0.8,
overlap = cps[1] * 0.8, overlap_cor = 0.5)
#> Sample size for change (proportion scale)
#> n = 3703 per occasion (net: 2962) (p = 0.3 to 0.36, moe = 0.02, deff = 1, resp_rate = 0.80)
#> overlap = 0.6, overlap_cor = 0.5 (70.0% of the independent variance)
# One flag per occasion, the other notation in use: in for two, out for
# two, in for two. Change is estimable at lags 1, 3, 4 and 5 but not 2
design_overlap("1-1-0-0-1-1")
#> Rotation overlap (planning)
#>
#> 6-occasion life, 4 in sample each occasion
#> schedule: 2 in, 2 out, 2 in
#>
#> lag shared overlap
#> 1 2 0.5
#> 2 0 0
#> 3 1 0.25
#> 4 2 0.5
#> 5 1 0.25
# The same design as spell lengths
identical(as.double(design_overlap("2-2-2")),
as.double(design_overlap("1-1-0-0-1-1")))
#> [1] TRUE
# An explicit schedule, halving the take at later waves
design_overlap(c(1, 1, 0.5, 0.5))
#> Rotation overlap (planning)
#>
#> 4-occasion life, 3 in sample each occasion
#> schedule: 2 in, 2 in at 0.5
#>
#> lag shared overlap
#> 1 2.0 0.6667
#> 2 1.0 0.3333
#> 3 0.5 0.1667
# The chart of the schedule, one row per cohort
plot(design_overlap("1-1-0-0-1-1"))