Skip to contents

The computational engine of Mogstad, Santos and Torgovitsky (2018): when the object of interest is a linear functional c'x and everything the data and assumptions say about x is linear, the identified set for the target is [min c'x, max c'x] over the feasible polytope – and both ends are linear programmes. SHARPNESS is the point: the feasible set is convex, so every value between the optima is attained, and the interval IS the identified set for the target.

Usage

morie_bnd_lp(
  c,
  A_ub = NULL,
  b_ub = NULL,
  A_eq = NULL,
  b_eq = NULL,
  bounds = NULL
)

Arguments

c

target functional's coefficients.

A_ub, b_ub

inequality restrictions A_ub x <= b_ub.

A_eq, b_eq

equality restrictions (typically data moments).

bounds

list of c(lo, hi) per coordinate; [0, 1] each when NULL – the natural range for response probabilities.

Value

list: lower, upper, width, argmin, argmax, feasible, bounded, sharp, k, n_inequalities, n_equalities, method.

Details

Infeasibility is informative rather than an error: an empty feasible set means the maintained assumptions contradict the data moments – a specification REJECTION.

Solved by a self-contained two-phase simplex with Bland's rule (base R has no linear programming); at identification-bound problem sizes the anti-cycling guarantee is worth more than speed.

References

Mogstad, Santos and Torgovitsky (2018), Econometrica 86:1589-1619, Prop. 2 and Sec. 4.

Examples

morie_bnd_lp(c(1, 1), A_eq = rbind(c(1, 2)), b_eq = 1)$lower
#> [1] 0.5