The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

Nonparametric Exponential Tilting Theory

Overview

This vignette explains the matrix-vectorized implementation of the fully nonparametric exponential tilting (EXPTILT) estimator, as described in Appendix 2 of Riddles et al. (2016). This method is designed for fully categorical data, where the outcomes (\(Y\)), the response-model covariates (\(X_1\)), and the instrumental-variable covariates (\(X_2\)) are all discrete.

Unlike the parametric method, which estimates the parameters \(\phi\) of a response probability function \(\pi(x, y; \phi)\), the nonparametric approach directly estimates the nonresponse odds for each stratum. This is achieved using an Expectation-Maximization (EM) algorithm to find the maximum likelihood estimates of these odds.

The implementation (exptilt_nonparam.data.frame) assumes the input data is an aggregated data frame, where each row represents a unique stratum \(x^* = (x_1, x_2)\) and contains the counts of respondents for each outcome \(y^*\) and the total count of nonrespondents.

Notation and Main Objects

The implementation maps directly to the notation in Appendix 2. Let \(x_1\) be the covariates for the response model and \(x_2\) be the nonresponse instrumental variable. A full stratum is \(x^* = (x_1, x_2)\), and a response-model-only stratum is \(x_1\).

The algorithm is built from a set of fixed matrices (computed once) and one matrix that is iteratively updated.

Fixed Objects (Pre-computed)

  1. Respondent Counts \(N_{y^*x^*}\) (code: n_y_x_matrix)
    • Source: data[, outcome_cols]
    • Dimensions: \((N_{\text{strata}} \times K_{\text{outcomes}})\), where \(N_{\text{strata}}\) is the number of \((x_1, x_2)\) rows and \(K_{\text{outcomes}}\) is the number of \(Y\) categories.
    • Definition: The observed (weighted) count of respondents for stratum \(x^*\) and outcome \(y^*\). \[N_{y^*x^*} = \sum_{i \in A} d_i \delta_i I(y_i = y^*, x_i = x^*)\] (Note: The implementation assumes \(d_i=1\) unless the input data is pre-weighted).
  2. Nonrespondent Counts \(M_{x^*}\) (code: m_x_vec)
    • Source: data[, refusal_col]
    • Dimensions: \((N_{\text{strata}} \times 1)\)
    • Definition: The observed (weighted) total count of nonrespondents for stratum \(x^*\). \[M_{x^*} = m_{x^*}\]
  3. Respondent Proportions \(\hat{P}_{y^*|x^*}\) (code: p_hat_matrix)
    • Source: n_y_x_matrix / rowSums(n_y_x_matrix)
    • Dimensions: \((N_{\text{strata}} \times K_{\text{outcomes}})\)
    • Definition: The conditional probability (proportion) of observing outcome \(y^*\) given stratum \(x^*\), among respondents. This is a fixed, observed quantity used in the E-Step. \[\hat{p}_{y^*|x^*} = \frac{N_{y^*x^*}}{\sum_{y} N_{yx^*}} = pr(y=y^* | x_1=x_1^*, x_2=x_2^*, \delta=1)\]
  4. Aggregated Respondent Counts \(N_{y^*x_1^*}\) (code: n_y_x1_matrix)
    • Source: aggregate(n_y_x_matrix ~ data$x1_key, ...)
    • Dimensions: \((N_{x_1} \times K_{\text{outcomes}})\), where \(N_{x_1}\) is the number of unique \(x_1\) strata.
    • Definition: The observed (weighted) count of respondents for outcome \(y^*\) in stratum \(x_1\), summed over the instrument \(x_2\). This is the denominator of the M-Step. \[N_{y^*x_1^*} = \sum_{x_2} N_{y^*(x_1^*, x_2)} = n_{y^*x_1^*}\]

Iterative Objects (The EM Algorithm)

  1. Odds Matrix \(O^{(t)}(x_1, y)\) (code: odds_matrix)
    • Dimensions: \((N_{x_1} \times K_{\text{outcomes}})\)
    • Definition: The parameter being estimated. It represents the odds of nonresponse for a given \(x_1\) stratum and outcome \(y\). This is updated in the M-Step.
    • Initialization (Step 0): \(O^{(0)}(x_1, y) = 1\) for all \((x_1, y)\).
  2. Expected Nonrespondent Counts \(M_{y^*x^*}^{(t)}\) (code: m_y_x_matrix)
    • Dimensions: \((N_{\text{strata}} \times K_{\text{outcomes}})\)
    • Definition: The expected count of nonrespondents for stratum \(x^*\) and outcome \(y^*\), given the current odds \(O^{(t)}\). This is computed in the E-Step.
  3. Aggregated Expected Nonrespondent Counts \(M_{y^*x_1^*}^{(t)}\) (code: m_y_x1_matrix)
    • Dimensions: \((N_{x_1} \times K_{\text{outcomes}})\)
    • Definition: The expected count of nonrespondents for outcome \(y^*\) in stratum \(x_1\), summed over the instrument \(x_2\). This is the numerator of the M-Step.

The Expectation-Maximization (EM) Algorithm

The function exptilt_nonparam.data.frame is a direct implementation of the EM algorithm in Appendix 2. The goal is to find the \(\text{argmax} O(x_1, y)\) that maximizes the observed data likelihood, which is solved by iterating two steps.

Step 1.1 (E-Step): Compute Expected Nonrespondent Counts

The E-Step computes the expected breakdown of nonrespondents into outcome categories. It answers: “Given our current odds_matrix \(O^{(t)}\), what is the expected count \(M_{y^*x^*}^{(t)}\) for each full stratum \(x^*\)?”

Step 1.2 (M-Step): Update Odds Matrix

The M-Step updates the nonresponse odds \(O(x_1, y)\) using the expected counts from the E-Step.

  1. Aggregate Expected Counts: First, the expected nonrespondent counts \(M_{y^*x^*}^{(t)}\) are aggregated over the instrument \(x_2\) to get the total expected nonrespondents \(M_{y^*x_1^*}^{(t)}\) for each \((x_1, y)\) cell.
    • Formula: \(M_{y^*x_1^*}^{(t)} = \sum_{x_2} M_{y^*(x_1^*, x_2)}^{(t)}\)
    • Implementation: m_y_x1_matrix <- aggregate(m_y_x_matrix ~ data$x1_key, ...)
  2. Update Odds: The new odds \(O^{(t+1)}\) is the simple ratio of the total expected nonrespondents to the total observed respondents for each \((x_1, y)\) cell.
    • Formula: \[O^{(t+1)}(x_1^*, y^*) = \frac{M_{y^*x_1^*}^{(t)}}{N_{y^*x_1^*}}\]
    • Implementation: odds_matrix <- m_y_x1_matrix / n_safe

Step 2: Convergence

Steps 1.1 and 1.2 are repeated until the change in the odds_matrix (measured by the sum of absolute differences) falls below the tolerance tol.

Final Estimates and Survey Weights

Survey Weights

The exptilt_nonparam.data.frame function assumes the input data is already aggregated. If a survey.design object is provided to exptilt_nonparam.survey.design, an adapter (not shown here) must first be used to create this aggregated table from the microdata. In that case, \(N_{y^*x^*}\) and \(M_{x^*}\) represent weighted sums of counts (\(\sum d_i \dots\)), not simple counts. The EM algorithm and all derived matrices (p_hat_matrix, odds_matrix) are then correctly computed based on these weighted inputs, following the logic of the paper.

Final Adjusted Counts

The final output data_to_return is the object of primary interest for analysis. It is constructed by: 1. Calculating the final expected nonrespondent counts \(M_{y^*x^*}^{(\text{final})}\) using the converged odds_matrix. 2. Adding these expected counts to the original observed respondent counts \(N_{y^*x^*}\).

This final adjusted table represents the completed dataset, where the “Refusal” counts have been redistributed across the outcome columns according to the NMAR model.

Final Proportion \(\hat{\theta}_j\)

The final population proportion for an outcome \(j\), \(\hat{\theta}_j\), is the total (weighted) adjusted count for outcome \(j\) divided by the total (weighted) population. This is calculated from the data_to_return object.

This differs from the paper’s Step 3 formula, which is an IPW (Inverse Probability Weighting) estimator. However, both methods are asymptotically equivalent, and the “add-and-sum” method (your data_to_return) is a more direct and intuitive application of the EM algorithm’s goal.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.