Skip to main content

A package to solve, simulate and estimate separable matching models

Project description

cupid_matching

image image image image

A Python package to solve, simulate and estimate separable matching models

Installation

pip install -U cupid_matching

Accessing the code

For instance:

from cupid_matching.min_distance import estimate_semilinear_mde

An example

We create a Choo-Siow market; we solve for the stable matching in an infinite ppulation using IPFP; we simulate a sample drawn from the stable matching and we estimate the coefficients of the basis functions using both minimum distance and Poisson GLM estimators.

import numpy as np
from cupid_matching.model_classes import ChooSiowPrimitives
from cupid_matching.choo_siow import entropy_choo_siow
from cupid_matching.min_distance import estimate_semilinear_mde
from cupid_matching.poisson_glm import choo_siow_poisson_glm

X, Y, K = 10, 20, 2
# we simulate a Choo and Siow population
#  with 10 types of men and 20 types of women
#  with equal numbers of men and women of each type
#  and two random basis functions
lambda_true = np.random.randn(K)
phi_bases = np.random.randn(X, Y, K)
n = np.ones(X)
m = np.ones(Y)
Phi = phi_bases @ lambda_true
choo_siow_instance = ChooSiowPrimitives(Phi, n, m)
matching_popu = choo_siow_instance.ipfp_solve()
muxy_popu, mux0_popu, mu0y_popu, n_popu, m_popu \
    = matching_popu.unpack()

# we simulate the market on a finite population
n_households = int(1e6)
mus_sim = choo_siow_instance.simulate(n_households)
choo_siow_instance.describe()

# We estimate the parameters using minimum distance
mde_results = estimate_semilinear_mde(
            mus_sim, phi_bases, entropy_choo_siow, 
            more_params=None
        )

# we print and check the results
mde_discrepancy = mde_results.print_results(
            true_coeffs=lambda_true, n_alpha=0
        )

# we also estimate using Poisson GLM 
poisson_results = choo_siow_poisson_glm(mus_sim, phi_bases)

muxy_sim, mux0_sim, mu0y_sim, n_sim, m_sim \
    = mus_sim.unpack()

poisson_discrepancy = poisson_results.print_results(
        lambda_true, 
        u_true=-np.log(mux0_sim/ n_sim), 
        v_true=-np.log(mu0y_sim / m_sim)
    )

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

cupid_matching-0.2.2.tar.gz (34.9 kB view hashes)

Uploaded Source

Built Distribution

cupid_matching-0.2.2-py2.py3-none-any.whl (40.8 kB view hashes)

Uploaded Python 2 Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page