Example on the Choo and Siow model - Cupid Matching

Skip to content

# `example_choosiow` module

example using the Choo and Siow homoskedastic model

## `create_choosiow_population(X, Y, K, std_betas=1.0)`

we simulate a Choo and Siow population with equal numbers of men and women of each type and random bases dunctions and coefficients

    1
    2
    3
    4
    5
    6
    7
    8
    9
    Args:
     X: number of types of men
     Y: number of types of women
     K: random basis functions
     std_betas: the coefficients are drawn from a centered normal
                 with this standard deviation

    Returns:
        a ChooSiowPrimitives instance, the basis functions, and the coefficients

Source code in `cupid_matching/example_choosiow.py`

    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    def create_choosiow_population(
        X: int, Y: int, K: int, std_betas: Optional[float] = 1.0
    ) -> Tuple[ChooSiowPrimitives, np.ndarray, np.ndarray]:
        """
        we simulate a Choo and Siow population
        with equal numbers of men and women of each type
        and random bases dunctions and coefficients

            Args:
             X: number of types of men
             Y: number of types of women
             K: random basis functions
             std_betas: the coefficients are drawn from a centered normal
                         with this standard deviation

            Returns:
                a ChooSiowPrimitives instance, the basis functions, and the coefficients
        """
        betas_true = std_betas * np.random.randn(K)
        phi_bases = np.random.randn(X, Y, K)
        n = np.ones(X)
        m = np.ones(Y)
        Phi = phi_bases @ betas_true
        choo_siow_instance = ChooSiowPrimitives(Phi, n, m)
        return choo_siow_instance, phi_bases, betas_true

## `mde_estimate(mus_sim, phi_bases, betas_true, entropy, title)`

we estimate the parameters using the minimum distance estimator

Parameters:

Name | Type | Description | Default
--- | --- | --- | ---
`mus_sim` | `Matching` | a Choo and Siow Matching | required
`phi_bases` | `np.ndarray` | the basis functions | required
`betas_true` | `np.ndarray` | their true coefficients | required
`entropy` | `EntropyFunctions` | the entropy functions we use | required
`title` | `str` | the name of the estimator | required

Returns:

Type | Description
--- | ---
`float` | the largest absolute difference between the true and estimated coefficients

Source code in `cupid_matching/example_choosiow.py`

    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    def mde_estimate(
        mus_sim: Matching,
        phi_bases: np.ndarray,
        betas_true: np.ndarray,
        entropy: EntropyFunctions,
        title: str,
    ) -> float:
        """we estimate the parameters using the minimum distance estimator

        Args:
            mus_sim: a Choo and Siow Matching
            phi_bases: the basis functions
            betas_true: their true coefficients
            entropy: the entropy functions we use
            title: the name of the estimator

        Returns:
            the largest absolute difference between the true and estimated coefficients
        """
        print_stars(f"    {title}")
        mde_results = estimate_semilinear_mde(mus_sim, phi_bases, entropy)
        mde_discrepancy = mde_results.print_results(true_coeffs=betas_true)
        return mde_discrepancy