# Matching Markets

#### Sorting bias in endogenous groups

Ever worked with grouped data where group membership wasn’t random? Did you correct for endogeneous matching? Here’s why you should.

Eh, you already know the answer? Then check out a simple correction method in (Klein 2015a) and the documentation and vignette (Klein 2015b) to R package `matchingMarkets`

(Klein 2015c).

Still curious? So here’s why: The figure below plots group outcomes (\(R_{ij}\)) against characteristics (\(X_{ij}\)) for all feasible partitions of 4 agents into groups of two (\(AB\)-\(CD\), \(AC\)-\(BD\), \(AD\)-\(BD\)). Underlying this example is a simple linear model where the group characteristic has no effect on outcomes, and thus \(\beta=0\) (black line). If groups are assigned at random, then all 3 partitions are equiprobable and the average slope estimate is zero. If, however, group formation is endogenous, then regression coefficients will generally be biased (red line).

Read on for the algebra and R code behind the linear model in this example.

#### A simple model of group diversity

Let’s start with a simple model where agent \(i\)’s valuation over agent \(j\) is symmetric, that is \(u_{i,j}=u_{j,i}\). The additive valuation of group \(G\) is then given by the sum over all pairwise valuations

\(V_G = \sum_{i\in G} \sum_{j\in G\backslash i} u_{i,j}\).

Let group valuation \(V_G\) and group outcome \(R_G\) dependent on a group’s diversity \(X\) and some error term. In a population with two types, group diversity can be thought of as the probability of two group members being of the same type. Let’s further assume that everybody prefers to work with members of their own type (\(\alpha=+1\)) but diversified teams are more successful (\(\beta=-1\)).

\(V_G = \alpha\cdot X_G + \eta_G\)

\(R_G = \beta\cdot X_G + \delta\eta_G + \xi_G\)

Here, \(\eta_G\) is a group’s unobserved group valuation, which also affects the outcome equation for \(\delta \neq 0\). Let \(\eta\) capture group members’ individual abilities, which have a positive effect \(\delta = 0.5\) on outcomes. Finally, the error term \(\zeta_G\) contains random shocks that affect group outcomes but are unknown at group formation.

The endogeneity problem kicks in whenever (i) groups are not formed at random and thus \(cov(X_G, \eta_G)\neq 0\) and (ii) unobserved group characteristics affect group outcomes, \(\delta \neq 0\). It is resolved when we can control for the unobservable \(\eta\) in the outcome equation.

#### An example using simulated data

To illustrate, let us simulate the bias from endogenous group formation and consider the solution implemented in the `matchingMarkets`

package. I proceed in three steps: generation of individual-level data, transformation to group-level variables and outcomes and, finally, comparison of OLS and the correction method presented in (Klein 2015a).

##### Individual-level data

The `stabsim`

function simulates individual-level, independent variables. The code below generates data for `m=1,000`

markets with `gpm=2`

groups per market and group size `ind=5`

.

```
## Simulate individual-level, independent variables
library(matchingMarkets)
idata <- stabsim(m=1000, ind=5, seed=123, gpm=2)
head(idata)
```

```
## m.id g.id wst R
## 1 1 1 0 NA
## 2 1 1 1 NA
## 3 1 1 0 NA
## 4 1 1 1 NA
## 5 1 1 1 NA
## 6 1 2 0 NA
```

The resulting data contains market and group identifiers `m.id`

and `g.id`

and the independent variable `wst`

\(\sim\) B(1,0.5). The dependent variable `R`

depends on the error terms and is still undefined at this stage.

##### Group-level data

Next we apply the function `stabit`

that serves three purposes:

- First, it specifies the list of variables to be included in
`selection`

and`outcome`

equations and generates group-level variables based on group members’ individual characteristics. For example, the operation`ieq="wst"`

produces the probability that two randomly drawn group members have the same value of`wst`

. - Second, if
`simulation="NTU"`

, it draws standard normal, group-level unobservables`eta`

and`xi`

to enter selection and outcome equation and selects equilibrium groups based on the group formation game with non-transferable utility, assuming pairwise aligned preferences as in (Klein 2015a). In the case of two groups per market, this selection rule results in one dominant group with the maximum group valuation and one group comprised of the residual agents. - Third, the argument
`method="model.frame"`

specifies that only the group-level model matrices be generated. Other options are estimators using`"NTU"`

for selection correction using non-transferable utility matching as selection rule or`"outcome"`

for estimation of the outcome equation only.

```
## Simulate group-level variables (takes a minute to complete...)
mdata <- stabit(x=idata, simulation="NTU", method="model.frame",
selection = list(ieq="wst"),
outcome = list(ieq="wst"))$model.frame
```

The resulting object `mdata`

is a list containing data for selection and outcome equations in `SEL`

and `OUT`

, respectively. `SEL`

contains 252,000 rows, one for each of \({5 \choose 10}\) = 252 feasible group in each of the 1,000 markets. A group’s valuation is given by `V = +1*wst.ieq + eta`

. The variable `D`

indicates which groups are observed in equilibrium `D=1`

and which are not `D=0`

.

`head(mdata$SEL, 4)`

```
## m.id g.id wst.ieq D V eta
## 1 1 1 0.4 1 2.97145815 2.5714581
## 2 1 2 0.4 1 1.11284232 0.7128423
## 3 1 3 0.4 0 0.05608277 -0.3439172
## 4 1 4 0.6 0 2.19850877 1.5985088
```

The outcome data in `OUT`

contains 2,000 rows, one for each of 2 equilibrium groups per market. The group outcome is given by `R = -1*wst.ieq + epsilon`

with `epsilon := +0.5*eta + xi`

.

`head(mdata$OUT, 4)`

```
## m.id g.id intercept wst.ieq R xi epsilon
## 1 1 1 1 0.4 -0.78221286 -1.6679419 -0.3822129
## 2 1 2 1 0.4 0.17095999 0.2145388 0.5709600
## 3 2 1 1 0.6 -0.57408090 -1.3165104 0.0259191
## 4 2 2 1 0.6 -0.08277463 1.4414618 0.5172254
```

##### Bias from sorting

The bias in the slope estimate \(\hat\beta-\beta\) = -0.44 - (-1) = 0.56 is illustrated in the left panel of the figure below.

```
## Naive OLS estimation
lm(R ~ wst.ieq, data=mdata$OUT)$coefficients
```

```
## (Intercept) wst.ieq
## 0.3961386 -0.4372392
```

The source of this bias is the positive correlation between `epsilon`

and the exogenous variable `wst.ieq`

(see the right panel below).

```
## epsilon is correlated with independent variables
summary(lm(epsilon ~ wst.ieq, mdata$OUT))$coefficients
```

```
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.3961386 0.08758434 4.522939 6.456494e-06
## wst.ieq 0.5627608 0.15889272 3.541766 4.065683e-04
```

An analytical example and a formal treatement of this bias is available in (Klein 2015a). We know that `epsilon = 0.5*eta + xi`

. Thus, conditional on `eta`

, the unobservables in the outcome equation are independent of the exogenous variables (because `xi`

does not enter the selection equation).

```
## xi is uncorrelated with independent variables
summary(lm(xi ~ wst.ieq, mdata$OUT))$coefficients
```

```
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.03837509 0.06827652 -0.5620540 0.5741423
## wst.ieq 0.04147217 0.12386508 0.3348173 0.7377980
```

##### Correction of sorting bias

The selection problem is resolved when the residual from the selection equation `eta`

is controlled for in the outcome equation.

```
## 1st stage: obtain fitted value for eta
lm.sel <- lm(V ~ -1 + wst.ieq, data=mdata$SEL); lm.sel$coefficients
```

```
## wst.ieq
## 1.004501
```

```
eta <- lm.sel$resid[mdata$SEL$D==1]
## 2nd stage: control for eta
lm(R ~ wst.ieq + eta, data=mdata$OUT)$coefficients
```

```
## (Intercept) wst.ieq eta
## -0.03858257 -0.96578534 0.50366230
```

The figure below plots the bias from sorting against the independent variable, for the naive OLS and the selection-correction from the structural model.

In most real-world applications, however, the match valuations `V`

are unobserved. The solution is to estimate the selection equation by imposing equilibrium bounds, as derived in (Klein 2015b).

#### References

Klein, T. 2015a. *Does anti-diversification pay? A one-sided matching model of microcredit*. Cambridge Working Papers in Economics 1521. Faculty of Economics, University of Cambridge.

———. 2015b. *Analysis of stable matchings in R: Package matchingMarkets*. Vignette to R package matchingMarkets. The Comprehensive R Archive Network.

———. 2015c. *matchingMarkets: Analysis of stable matchings*. R package version 0.1-7. The Comprehensive R Archive Network.

## Comments

comments powered by Disqus