Why a Small Finite-Support Problem Is Useful
When outcomes can take only a few values, a causal-bounds problem can often be solved without software. The essential task is to list the possible potential-outcome types, impose the observed data as restrictions on their population proportions, and optimize the average treatment effect over the remaining feasible allocations. Working through a small case makes the logic of sharpness concrete: a proposed bound must be both unavoidable and attainable.
The treatment is binary, \(D\in\{0,1\}\). Each individual has potential outcomes \(Y_1\) and \(Y_0\), the outcomes under treatment and control, and the observed outcome is \(Y=DY_1+(1-D)Y_0\). The estimand is the average treatment effect, \(ATE=E[Y_1-Y_0]\). We observe \(D\) and \(Y\), but not both potential outcomes for any one individual.
Suppose the outcome support is a known finite set \(\mathcal{Y}\). There are \(2|\mathcal{Y}|^2\) possible types before imposing the observed margins. For each treatment value and each observed outcome category, the corresponding type masses must sum to the observed joint probability \(P(D=d,Y=y)\). The causal effect associated with an allocation is calculated from all types, including each type’s unobserved potential outcome.
The basic assumptions for this exercise are consistency, a well-defined binary treatment, and a correctly specified outcome support. The observed margins are treated as known population probabilities (or as exact proportions in a finite population). No assumption of random treatment assignment is made. If a substantive restriction such as monotone treatment response is imposed, it must be stated and used to remove incompatible types. The resulting bounds are conditional on that restriction.
Writing the Constraints Before Optimizing
For finite support, the problem is a finite linear optimization problem. The unknowns are the type masses. The constraints are: nonnegativity, total mass one, and the observed-margin equations. The objective is linear because the ATE is a weighted sum of type-specific effects:
The treatment indicator does not appear in the effect \(a-b\); it appears in the constraints that say which potential outcome is observed for each type. This distinction is important. Treatment status determines the data contribution of a type, but both potential outcomes determine its causal-effect contribution.
To establish a sharp lower bound, it is not enough to find a plausible allocation with a small effect. One must show that every feasible allocation has an effect at least that large, and then exhibit a feasible allocation that attains it. The upper bound is verified in the corresponding way. This is the hand-calculation form of the sharpness logic used in linear programming and dual certificates.
Worked Example: Binary Outcomes and Unrestricted Types
Suppose \(Y\in\{0,1\}\). The observed population margins are \(P(D=1)=0.5\), \(P(D=1,Y=1)=0.3\), \(P(D=0)=0.5\), and \(P(D=0,Y=1)=0.1\). Thus, among treated individuals, mass \(0.3\) has observed outcome one and mass \(0.2\) has observed outcome zero. Among controls, mass \(0.1\) has observed outcome one and mass \(0.4\) has observed outcome zero.
There are eight possible types \((D,Y_1,Y_0)\), since each coordinate has two possible values. To make the margins transparent, partition them by observed treatment and outcome. For treated individuals, the margins require \(q_{1,1,0}+q_{1,1,1}=0.3\) and \(q_{1,0,0}+q_{1,0,1}=0.2\). For controls, they require \(q_{0,0,1}+q_{0,1,1}=0.1\) and \(q_{0,0,0}+q_{0,1,0}=0.4\). All masses are nonnegative. These four equations also imply total mass one.
To minimize the ATE, choose the unobserved \(Y_0\) to be one for every treated individual, and the unobserved \(Y_1\) to be zero for every control. One feasible allocation is \(q_{1,1,1}=0.3\), \(q_{1,0,1}=0.2\), \(q_{0,0,1}=0.1\), and \(q_{0,0,0}=0.4\), with all other masses zero. It reproduces each observed margin. Its potential-outcome means are
This is a lower bound, not just a candidate allocation. In any feasible allocation, the treated group contributes \(0.3\) to \(E[Y_1]\), while controls can contribute no less than zero; hence \(E[Y_1]\geq0.3\). The observed control outcomes contribute \(0.1\) to \(E[Y_0]\), and treated individuals can contribute at most their total mass \(0.5\), so \(E[Y_0]\leq0.6\). Therefore \(ATE=E[Y_1]-E[Y_0]\geq0.3-0.6=-0.3\). Since the displayed allocation attains \(-0.3\), the lower bound is sharp.
For the upper endpoint, assign \(Y_0=0\) to all treated individuals and \(Y_1=1\) to all controls. For example, set \(q_{1,1,0}=0.3\), \(q_{1,0,0}=0.2\), \(q_{0,1,1}=0.1\), and \(q_{0,1,0}=0.4\). Then \(E[Y_1]=0.3+0.1+0.4=0.8\), \(E[Y_0]=0.1\), and \(ATE=0.8-0.1=0.7\). For any allocation, \(E[Y_1]\leq0.3+0.5=0.8\) and \(E[Y_0]\geq0.1\), so \(ATE\leq0.7\). The sharp identified interval is \([-0.3,0.7]\) outcome units.
Adding a Restriction Means Rechecking Feasibility
Suppose the same binary-outcome margins are retained, but we additionally assume monotone treatment response: \(Y_1\geq Y_0\) for every individual. With binary outcomes, this rules out type \((D,0,1)\) for either value of \(D\). It does not merely change the objective; it removes types from the feasible set. A candidate endpoint allocation must satisfy both the observed margins and this individual-level restriction.
Worked Example: Bounds Under Monotone Treatment Response
The allocation \(q_{1,1,1}=0.3\), \(q_{1,0,0}=0.2\), \(q_{0,1,1}=0.1\), and \(q_{0,0,0}=0.4\) reproduces the margins from the previous example. Each type satisfies \(Y_1\geq Y_0\). Its means are \(E[Y_1]=0.3+0.1=0.4\) and \(E[Y_0]=0.3+0.1=0.4\), so its ATE is zero.
No feasible allocation under monotone response can have a negative ATE: \(Y_1-Y_0\geq0\) for every individual, so averaging gives \(E[Y_1-Y_0]\geq0\). The displayed allocation attains zero, proving the sharp lower endpoint is zero. Here the separate minima are jointly feasible: the treated group’s contribution to the effect can be zero, and the controls’ contribution can also be zero in the same allocation. In other problems, independently calculated extrema need not be jointly feasible, so the full allocation must always be checked.
For the upper endpoint, take \(q_{1,1,0}=0.3\), \(q_{1,0,0}=0.2\), \(q_{0,1,1}=0.1\), and \(q_{0,1,0}=0.4\). Every type obeys monotone response and the observed margins. Here \(E[Y_1]=0.3+0.1+0.4=0.8\), \(E[Y_0]=0.1\), so the ATE is \(0.7\). This is also an upper bound: the margins and binary support imply \(E[Y_1]\leq0.8\) and \(E[Y_0]\geq0.1\), so \(ATE\leq0.7\), even before imposing monotone response. Thus the sharp interval under this restriction is \([0,0.7]\).
The unrestricted lower allocation in the earlier example is infeasible under monotone response because it assigns positive mass to types with \((Y_1,Y_0)=(0,1)\). An alternative feasible allocation may reproduce the margins without attaining the lower endpoint; reproducing the margins alone does not show that an allocation is minimizing. The zero-effect allocation above establishes attainment directly.
Using the Outcome Support to Bound Missing Contributions
The same hand method applies when outcomes have more than two possible values. The support determines the smallest and largest values that an unobserved potential outcome can take. These values give simple objective bounds, but the type allocations still need to be checked against every margin and restriction.
Worked Example: Outcomes on a Three-Value Support
Consider a finite population of six individuals with \(Y\in\{0,1,2\}\). Four are treated, and their observed outcomes sum to four. Two are controls, and their observed outcomes sum to one. No other restrictions on potential outcomes are imposed.
The observed treated outcomes fix a total contribution of four to \(\sum_iY_{1i}\); the two controls’ unobserved \(Y_1\) values can each be anywhere from zero to two. Therefore
Likewise, the observed control outcomes fix a total contribution of one to \(\sum_iY_{0i}\); the four treated individuals’ unobserved \(Y_0\) values can contribute from zero to \(4(2)=8\). Thus \(1/6\leq E[Y_0]\leq9/6\). Since the treated and control groups are disjoint, the assignments that minimize or maximize these missing contributions can be made simultaneously. The lower endpoint is attained by setting the controls’ missing \(Y_1\) values to zero and the treated individuals’ missing \(Y_0\) values to two:
For the upper endpoint, set both controls’ missing \(Y_1\) values to two and all treated individuals’ missing \(Y_0\) values to zero. The observed contributions remain four and one, respectively, so
The assignments use only support values and reproduce the stated observed sums. The bounds are sharp: the support limits give the corresponding inequalities for every completion, and the exhibited completions attain them. The sharp interval is \([-5/6,7/6]\), or approximately \([-0.8333,1.167]\) outcome units. This calculation relies on the observed totals and the common support; with more detailed outcome-category margins or additional restrictions, the allocations would need to satisfy those constraints too.
A Reliable Hand-Solution Procedure
Write every possible \((D,Y_1,Y_0)\) combination allowed by the support and any stated restrictions.
For each observed \((D,Y)\) category, sum the compatible type masses and set that sum equal to its observed probability or population proportion.
Use the objective \(\sum(a-b)q_{d,a,b}\). For a small problem, reason about which unobserved outcomes should be made small or large, subject to all constraints.
Show an inequality that applies to every feasible allocation, then give a feasible allocation attaining the endpoint. Repeat separately for the other endpoint.
A hand solution is preferable when the number of types is small and the constraints can be checked transparently. Linear programming is the natural alternative when the support or the number of observed margins makes enumeration cumbersome. Crude support-based bounds can also be useful for an initial check, but they may be loose if they ignore restrictions linking the possible type masses. Whatever approach is used, sharpness depends on the complete feasible set—not on the plausibility of one guessed allocation.
Diagnostics and Common Pitfalls
- Check the mass total. The type masses must be nonnegative and sum to one. If they are counts, their sum must equal the population size.
- Reconstruct every observed margin. Verify treated and control masses and each observed outcome category, not just the overall outcome mean.
- Check restrictions type by type. Under monotone response, any positive mass on a type with \(Y_1<Y_0\) makes the allocation infeasible.
- Do not confuse an attained value with a bound. A feasible allocation shows attainability, but a separate inequality is needed to show that no feasible allocation goes farther.
- Check arithmetic against the displayed contributions. For example, \(4+2(2)=8\), not 9. A one-unit arithmetic error changes the endpoint and can invalidate the reported interval.
The main limitation of these calculations is that their conclusions depend on the support and restrictions being appropriate. A narrow support or monotone response can tighten the interval, but the data alone do not establish those assumptions. These are population identification bounds; sampling uncertainty around estimated margins is a separate issue.
Check Your Understanding
Answer each question using the finite-support logic above. Short solutions follow the questions.
- In the binary-outcome example, what equations express the treated observed-outcome margins?
- Why does the unrestricted lower-endpoint allocation in the binary example fail under monotone treatment response?
- For the six-person example with support \(\{0,1,2\}\), what is the largest possible total contribution of controls to \(\sum_iY_{1i}\)?
- Why is a feasible allocation with ATE \(-0.2\) not, by itself, proof that the sharp lower bound is \(-0.2\)?
- What two checks are needed to establish that a proposed endpoint is sharp?
Solutions. (1) The treated mass with observed outcome one is \(q_{1,1,0}+q_{1,1,1}=0.3\), and the treated mass with observed outcome zero is \(q_{1,0,0}+q_{1,0,1}=0.2\). (2) It assigns positive mass to \((D,Y_1,Y_0)=(1,0,1)\), for which \(Y_1<Y_0\). (3) The two controls can each contribute at most two, so their maximum total contribution is \(2(2)=4\). (4) Other feasible allocations may have a smaller ATE; an inequality establishing a universal lower bound is also required. (5) Prove the endpoint inequality for every feasible allocation and exhibit a feasible allocation attaining it, checking all margins and restrictions.