Skip to content

choo_siow module

The components of the derivative of the entropy for the Choo and Siow homoskedastic model.

e0_fun_choo_siow(muhat)

Returns the values of e_0 for the Choo and Siow model.

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
np.ndarray

the (X,Y) matrix of the first derivative of the entropy

Source code in cupid_matching/choo_siow.py
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
def e0_fun_choo_siow(muhat: Matching) -> np.ndarray:
    """Returns the values of $e_0$ for the Choo and Siow model.

    Args:
        muhat: a Matching

    Returns:
        the (X,Y) matrix of the first derivative of the entropy
    """
    entropy_res = _entropy_choo_siow(muhat, deriv=1)
    return entropy_res[1]

e0_fun_choo_siow_corrected(muhat)

Returns the values of e_0 for the Choo and Siow model, using the finite-sample correction.

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
np.ndarray

the (X,Y) matrix of the first derivative of the entropy

Source code in cupid_matching/choo_siow.py
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
def e0_fun_choo_siow_corrected(
        muhat: Matching
) -> np.ndarray:
    """Returns the values of $e_0$ for the Choo and Siow model,
    using the finite-sample correction.

    Args:
        muhat: a Matching

    Returns:
        the (X,Y) matrix of the first derivative of the entropy
    """
    entropy_res = _entropy_choo_siow(muhat, deriv=1)
    e0_val = entropy_res[1]
    muxy, mux0, mu0y, *_ = muhat.unpack()
    n_households = np.sum(muxy) + np.sum(mux0) + np.sum(mu0y)
    e0_val_corrected = e0_val - (1.0 - muxy / n_households) / muxy
    e0_val_corrected += ((1.0 - mux0 / n_households) / (2.0 * mux0)).reshape((-1, 1))
    e0_val_corrected += ((1.0 - mu0y / n_households) / (2.0 * mu0y))
    # print(f"{npmaxabs(e0_val_corrected/e0_val - 1.0)=}")
    return e0_val_corrected

hessian_mumu_choo_siow(muhat)

Returns the derivatives of e_0 in \mu for the Choo and Siow model.

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
ThreeArrays

the three components of the hessian wrt (\mu,\mu) of the entropy

Source code in cupid_matching/choo_siow.py
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
def hessian_mumu_choo_siow(muhat: Matching) -> ThreeArrays:
    """Returns the derivatives of $e_0$ in $\\mu$
    for the Choo and Siow model.

    Args:
        muhat: a Matching

    Returns:
        the three components of the hessian wrt $(\\mu,\\mu)$ of the entropy
    """
    entropy_res = _entropy_choo_siow(muhat, deriv=2)
    hessmumu = entropy_res[2]
    muxy, *_ = muhat.unpack()
    X, Y = muxy.shape
    hess_x = np.zeros((X, Y, Y))
    hess_y = np.zeros((X, Y, X))
    hess_xy = np.zeros((X, Y))
    for x in range(X):
        for y in range(Y):
            d2xy = hessmumu[x, y, :, :]
            hess_x[x, y, :] = d2xy[x, :]
            hess_y[x, y, :] = d2xy[:, y]
            hess_xy[x, y] = d2xy[x, y]
    return hess_x, hess_y, hess_xy

hessian_mumu_choo_siow_corrected(muhat)

Returns the derivatives of e_0 in \mu for the Choo and Siow model, with the small sample correction

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
ThreeArrays

the three components of the hessian wrt (\mu,\mu) of the entropy

Source code in cupid_matching/choo_siow.py
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
def hessian_mumu_choo_siow_corrected(
        muhat: Matching
) -> ThreeArrays:
    """Returns the derivatives of $e_0$ in $\\mu$
    for the Choo and Siow model, with the small sample correction

    Args:
        muhat: a Matching

    Returns:
        the three components of the hessian wrt $(\\mu,\\mu)$ of the entropy
    """
    hess_x, hess_y, hess_xy = hessian_mumu_choo_siow(muhat)
    muxy, mux0, mu0y, *_ = muhat.unpack()
    n_households = np.sum(muxy) + np.sum(mux0) + np.sum(mu0y)
    X, Y = hess_xy.shape
    corr_x0 = 1.0 / (2.0*mux0*mux0)
    corr_0y = 1.0 / (2.0*mu0y*mu0y)
    corr_xy = -1.0 / (muxy*muxy)
    for x in range(X):
        for y in range(Y):
            hess_x[x, y, y] += corr_x0[x]
            hess_y[x, y, x] += corr_0y[y]
            hess_xy[x, y] += corr_xy[x, y]

    return hess_x, hess_y, hess_xy

hessian_mur_choo_siow(muhat)

Returns the derivatives of e_0 in r for the Choo and Siow model.

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
TwoArrays

the two components of the hessian wrt (\mu,r) of the entropy

Source code in cupid_matching/choo_siow.py
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
def hessian_mur_choo_siow(muhat: Matching) -> TwoArrays:
    """Returns the derivatives of $e_0$ in $r$
    for the Choo and Siow model.

    Args:
        muhat: a Matching

    Returns:
        the two components of the hessian wrt $(\\mu,r)$ of the entropy
    """
    entropy_res = _entropy_choo_siow(muhat, deriv=2)
    hessmur = entropy_res[3]
    muxy, *_ = muhat.unpack()
    X, Y = muxy.shape
    hess_nx = np.zeros((X, Y))
    hess_my = np.zeros((X, Y))
    for x in range(X):
        for y in range(Y):
            d2r = hessmur[x, y, :]
            hess_nx[x, y] = d2r[x]
            hess_my[x, y] = d2r[X + y]
    return hess_nx, hess_my

hessian_mur_choo_siow_corrected(muhat)

Returns the derivatives of e_0 in r for the Choo and Siow model, with the small sample correction

Parameters:

Name Type Description Default
muhat Matching

a Matching

required

Returns:

Type Description
TwoArrays

the two components of the hessian wrt (\mu,r) of the entropy

Source code in cupid_matching/choo_siow.py
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
def hessian_mur_choo_siow_corrected(
        muhat: Matching
) -> TwoArrays:
    """Returns the derivatives of $e_0$ in $r$
    for the Choo and Siow model, with the small sample correction

    Args:
        muhat: a Matching

    Returns:
        the two components of the hessian wrt $(\\mu,r)$ of the entropy
    """
    hess_nx, hess_my = hessian_mur_choo_siow(muhat)
    _, mux0, mu0y, *_ = muhat.unpack()
    corr_nx = 1.0 / (2.0*mux0*mux0)
    corr_my = 1.0 / (2.0*mu0y*mu0y)
    X, Y = mux0.size, mu0y.size
    for x in range(X):
        hess_my[x, :] += corr_my
    for y in range(Y):
        hess_nx[:, y] += corr_nx
    return hess_nx, hess_my