MarriageMarkets package currently provides two marriage market models as Julia types:
StaticMatch: computes the equilibrium of the static frictionless marriage market model from "Who Marries Whom and Why" (Choo & Siow, 2006).
SearchMatch: computes the equilibrium of variants on the search and matching model from "Assortative Matching and Search" (Shimer & Smith, 2000) and the empirical extension in "Marriage Gains" (Goussé, 2014).
SearchMatch also allows for inflows of new singles as well as deaths.
In a Julia REPL, enter
pkg mode (by pressing
]) and run:
(v1.0) pkg> add MarriageMarkets
Julia version 1.0 or higher is required (installation instructions here).
SearchMatch supports a number of model variants, there are specific constructors for the two main types:
SearchClosed: closed-system where agents cycle between singlehood and marriage
SearchInflow: steady-state population is determined by exogenous inflows and type-specific death rates
All models support both unidimensional and multidimensional agent types.
To specify a multidimensional type space, use a
Here are some simple examples of solving models with unidimensional types. I use Gadfly to plot the resulting equilibrium objects.
using MarriageMarkets using Gadfly n = 50 # number of types Θ = collect(range(0.1, stop=1.0, length=n)) # type space vector m = ones(n) ./ n # uniform population measures f(x,y) = x*y # marital surplus function (per capita) static_mgmkt = StaticMatch(Θ, Θ, m, m, f) plot(z=static_mgmkt.matches, Geom.contour, Guide.title("Distribution of matches"))
The saddle shape indicates positive assortative matching, as expected, due to the supermodular production function
f(x,y) = x*y.
The example below solves a search model with inflows and death. Then I plot the probabilities of match formation conditional on meeting.
using MarriageMarkets using Gadfly λ, δ = 500.0, 0.05 # arrival rates of meetings and divorce shocks r = 0.05 # discount rate σ = 1 # variance of Normally distributed match-specific productivity shocks n = 50 # number of types Θ = collect(range(0.1, stop=1.0, length=n)) # type space vector f(x,y) = x*y # marital production function γ = ones(n) ./ n # uniform inflows ψ = ones(n) # uniform death rates search_mgmkt = SearchInflow(λ, δ, r, σ, Θ, Θ, γ, γ, ψ, ψ, f) plot(z=search_mgmkt.α, Geom.contour, Guide.title("Match probability conditional on meeting"))
In a Julia REPL session, enter
pkg mode and run