14  Weights for a linked population

Two situations produce a weight for units that were never in the frame. Both are transformations of an executed sample and neither changes the draw.

14.2 The weight contract

A shared weight is an estimation weight and is not generally the reciprocal of a target unit’s inclusion probability. Target units can have induced inclusion probabilities through the source selection and link structure, but the generalized weight-sharing formula does not generally produce their inverses. The design the object carries describes selection of the source population. The result records which kind of weight it holds, and every statistical consumer states what it does about that record rather than treating the sample as ordinary.

Consumer On a shared weight
design_effect(), effective_n() Supported. They read .weight and nothing else
as_svrepdesign() Supported. It replicates the source design
The data-manipulation methods Preserve the record
as_svydesign() Supported. It exports the source-target contributions
joint_expectation(), varcomp() Refuse
A further execute(), and the panel verbs Refuse

Each refusal has its own condition class and all of them are also catchable as samplyr_error_weight_contract. Neither as_tbl_sample() nor an ordinary dplyr reconstruction can launder an estimation weight back into a design-weight sample.

14.3 Where the coverage finding fires

A target cluster with no link to the source population can never be surveyed, and the estimator understates totals by exactly its share. share_weights() records that finding and does not warn about it, which departs on purpose from the convention that a condition fires where it arises.

The reason is the composed case. A transformation cannot know whether its result will stand alone or become one component of a design over several frames, and there a cluster one frame cannot reach is the entire reason the second frame exists. So the warning fires where the estimate is formed: as_svydesign() and as_svrepdesign() report it for a single transformation, and for a stack_frames() collection it is evaluated over the union of the frames and fires once, naming only the clusters no frame reaches.

One component’s silence about a cluster counts as coverage only if that component was describing the same target clusters. Where that cannot be established the union is reported as not established, rather than guessed.

14.4 Variance of a shared-weight estimate

There are two ways to estimate the variance, and each is correct for a different reason.

as_svrepdesign() replicates the source design and applies the recorded operator inside every replicate, so the target rows are never resampled. Sharing after replication is a different, and wrong, number.

as_svydesign() exports the source-target contributions: one row per link, weighted by the recorded coefficient times the source unit’s design weight. The identity behind it is that the weight share total is the Horvitz-Thompson total of a variable derived on the source units,

\[ \sum_i w_i y_i = \sum_j \frac{I(j \in S)}{\pi_j} z_j, \qquad z_j = \sum_i \frac{L_{ji}}{L_i} y_i, \]

and z depends on whatever is being analyzed, so it cannot be formed in advance. Expanding the contributions lets survey form it inside each sampling unit instead. That is exact for any link structure, with no condition on how many source units reach a target, provided every selected source unit has at least one contribution. A selected source unit with no link has derived value zero but still defines a sampling unit for the variance calculation. Because a contribution-row design cannot retain that unit without inventing a target row, as_svydesign() refuses this case. as_svrepdesign() remains supported because it replicates the complete source design before applying the sharing operator.

An unequal-probability or random-size source design is refused there. Both take their variance from a structure indexed by the rows of the source sample, and those rows stop being the sampled units once each appears once per contribution.

14.5 Frames that overlap on one population

The second situation is two registers of the same population, each incomplete. stack_frames() collects samples selected independently from them, and the theory turns out to be the same one: the multiplicity estimator for overlapping frames is the weight share method with the standardized link matrix, since the number of links to a unit is the number of frames containing it (Lohr 2021, sec. 3.2; Mecatti 2007).

What a stack records is which frames each sampled unit belongs to. What it does not do is composite the weights, because which compositing factor is appropriate depends on the estimand and on the design effects, so it is an estimation-time choice. theta = NULL at export is the multiplicity estimator, giving every frame reaching a unit an equal share. An explicit theta is Hartley’s constant factor (Hartley 1962) and belongs to the first frame of the stack.

A stack also does not assert that the frames together cover the target population. That is an assumption about the registers, not something the call can establish, which is why the verb is not named after their union. Chapter 13 describes the two export routes and what each one can carry.