Joint Margin-Constrained Intersectional Estimation

Leila Marvian Mashhad

Problem

A probability survey observes an outcome and a rich set of person-level attributes. Census dissemination supplies reliable aggregate tables, but the full cross-classification is unavailable. interSAE treats the unobserved multiway census table as a latent population constrained by every published margin.

Fit

library(interSAE)
x <- inter_example()
design <- inter_design(x$survey, "weight", "area", "strata", "psu")
margins <- census_margins(x$margins)
fit <- fit_inter_sae(
  unemployed ~ sex + age + residence + area,
  design, margins,
  family = "binomial",
  domain = c("area", "sex")
)
head(inter_estimates(fit))
#>   area    sex  estimate synthetic residual_correction population    direct
#> 1   A1 Female 0.3628242 0.2938713         0.068952904       2277 0.3628208
#> 2   A2 Female 0.3246757 0.3529523        -0.028276628       2726 0.3246760
#> 3   A3 Female 0.3525557 0.3590753        -0.006519579       3263 0.3525522
#> 4   A4 Female 0.4576265 0.4383212         0.019305249       3906 0.4576252
#> 5   A5 Female 0.4096888 0.4942813        -0.084592509       4677 0.4096883
#> 6   A6 Female 0.5308005 0.4840845         0.046716014       5600 0.5308006
#>   direct_n
#> 1       23
#> 2       38
#> 3       31
#> 4       53
#> 5       53
#> 6       72

The synthetic column is the census-cell prediction aggregated with the reconstructed population counts. The residual correction is a calibrated survey residual total divided by domain population. Their sum gives the model-assisted estimate.

Coherence and identification

max(margin_diagnostics(fit)$relative_error)
#> [1] 4.143726e-14
check_identifiability(fit)
#> Identification diagnostic
#>   Feasible cells: 72
#>   Independent margin constraints: 48
#>   Unidentified dimensions: 24
#>   Full table identified: no

Nullity greater than zero means that overlapping margins do not uniquely identify the full latent table. It is not an algorithmic failure. It is a property of the available information.

When lpSolve is installed, association sensitivity can be evaluated by restricting each latent cell to a multiplicative neighborhood of its fitted value while maintaining all census margins exactly.

inter_sensitivity(
  fit,
  gamma = c(1, 1.25, 1.5, 2),
  domain = list(area = "A1", sex = "Female")
)

Bootstrap inference

The multiplier bootstrap assigns one exponential multiplier per PSU and renormalizes within strata. Every replicate repeats both population reconstruction and outcome-model fitting.

boot <- inter_bootstrap(fit, R = 199, type = "multiplier", seed = 42)
boot$summary

Bootstrap variation and identification width should not be silently collapsed into one standard error. decompose_uncertainty() reports them separately.