Skip to contents

Computes set identification bounds for the endogenous parameter under a relaxed covariance restriction. Optionally computes bootstrap standard errors for the bounds.

Usage

calculate_lewbel_bounds(
  data,
  tau,
  compute_se = FALSE,
  b_reps = .hetid_const("DEFAULT_BOOTSTRAP_REPS"),
  df_adjust = "asymptotic"
)

Arguments

data

Data.frame. Dataset containing Y1, Y2, Xk, Z variables.

tau

Numeric. Relaxation parameter for covariance restriction \(0 \le \tau < 1\). When \(\tau = 0\), gives point identification.

compute_se

Logical. Whether to compute bootstrap standard errors (default: FALSE).

b_reps

Integer. Number of bootstrap replications if compute_se = TRUE (default: 100).

df_adjust

Character. Method for degrees of freedom adjustment:

  • "asymptotic": No adjustment (default)

  • "finite": Finite sample adjustment using HC2 formula

Value

A list containing:

  • bounds: Numeric vector of length 2 with lower and upper bounds

  • se: Numeric vector of length 2 with bootstrap standard errors (if requested)

Details

Note: This parameter currently only affects the interpretation of bootstrap SEs, not the bounds calculation itself.

Under the relaxed assumption \(|\mathrm{Corr}(Z, \epsilon_1 \epsilon_2)| \le \tau\,|\mathrm{Corr}(Z, \epsilon_2^2)|\), the parameter \(\gamma_1\) is set-identified. The bounds are computed as the real roots of a quadratic equation in \(\gamma_1\).

References

Lewbel, A. (2012). Using heteroscedasticity to identify and estimate mismeasured and endogenous regressor models. Journal of Business & Economic Statistics, 30(1), 67-80. doi:10.1080/07350015.2012.643126

Examples

if (FALSE) { # \dontrun{
params <- list(
  beta1_0 = 0.5, beta1_1 = 1.5, gamma1 = -0.8,
  beta2_0 = 1.0, beta2_1 = -1.0,
  alpha1 = -0.5, alpha2 = 1.0, delta_het = 1.2
)
# TODO: Update generate_lewbel_data call if its return columns change to
# snake_case
data <- generate_lewbel_data(1000, params)

# Point identification (tau = 0)
bounds_point <- calculate_lewbel_bounds(data, tau = 0)

# Set identification with bootstrap SE
bounds_set <- calculate_lewbel_bounds(
  data,
  tau = 0.2, compute_se = TRUE, b_reps = 100
)
} # }