Suppose that there are two types of workers: type H and type L. Type H workers are more productive than type L workers and type H workers find it less costly to obtain a given level of education e. Specifically, the marginal products of labor for each type of worker is:
$$m_H(e) = m_H e$$
$$m_L(e) = m_L e,$$
where \(m_L < m_H\) are constants. And the costs to each type of obtaining a given level of education \(e\) is:
$$c_H(e) = c_H e^2$$
$$c_L(e) = c_L e^2,$$
where \(c_L > c_H\). A worker's type is only observable by the worker but the amount of education a worker obtains is observed by a potential employer. So while a worker's wage cannot depend directly on that worker's type, the wage can be a function of that worker's chosen level of education. We consider two classes of equilibria: Pooling and separating.

Pooling Equilibria

A pooling equilibrium in ths model is a threshold value of education \(\bar{e}\) such that:

If a worker obtains \(e<\bar{e}\) units of education, then employers believe that worker is type L and pay that worker a wage \(w(e) = m_Le\).

If a worker obtains \(e\geqslant\bar{e}\) units of education, then employers believe that worker is type H with probability \(p\) and pay that worker a wage \(w(\bar{e}) = \bar{m} \bar{e} = \left( pm_H + (1-p)m_L\right)\bar{e} \).

Separating Equilibria

A separating equilibrium in ths model is a threshold value of education \(\bar{e}\) such that:

If a worker obtains \(e<\bar{e}\) units of education, then employers believe that worker is type L and pay that worker a wage \(w(e) = m_Le\).

If a worker obtains \(e\geqslant\bar{e}\) units of education, then employers believe that worker is type H and pay that worker a wage \(w(e) = m_H e \).

Notes on the simulations

For the animated figures above, I used the following parameter values: \(m_L = 4\), \(m_H = 8\), \(c_L = 0.5\), \(c_H = 0.25\), and \(p = 0.25\). For the pooling equilibrium animation, I computed equilibria for \(e \in[0,19]\). And for the separating equilibrium animation, I computed equilibria for \(e \in[0,34]\). The Python code that I used to create these animations is available in this Github repository.