Stores and formats the estimation results.
Parameters:
Name |
Type |
Description |
Default |
X |
int
|
int |
required
|
Y |
int
|
int |
required
|
K |
int
|
int |
required
|
number_households |
int
|
int |
required
|
number_individuals |
int
|
int |
required
|
estimated_gamma |
np.ndarray
|
np.ndarray |
required
|
varcov_gamma |
np.ndarray
|
np.ndarray |
required
|
stderrs_gamma |
np.ndarray
|
np.ndarray |
required
|
estimated_beta |
np.ndarray
|
np.ndarray |
required
|
estimated_u |
np.ndarray
|
np.ndarray |
required
|
estimated_v |
np.ndarray
|
np.ndarray |
required
|
varcov_beta |
np.ndarray
|
np.ndarray |
required
|
stderrs_beta |
np.ndarray
|
np.ndarray |
required
|
stderrs_u |
np.ndarray
|
np.ndarray |
required
|
stderrs_v |
np.ndarray
|
np.ndarray |
required
|
estimated_Phi |
np.ndarray
|
np.ndarray |
required
|
Source code in cupid_matching/poisson_glm_utils.py
13
14
15
16
17
18
19
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144 | @dataclass
class PoissonGLMResults:
"""Stores and formats the estimation results.
Args:
X: int
Y: int
K: int
number_households: int
number_individuals: int
estimated_gamma: np.ndarray
varcov_gamma: np.ndarray
stderrs_gamma: np.ndarray
estimated_beta: np.ndarray
estimated_u: np.ndarray
estimated_v: np.ndarray
varcov_beta: np.ndarray
stderrs_beta: np.ndarray
stderrs_u: np.ndarray
stderrs_v: np.ndarray
estimated_Phi: np.ndarray
"""
X: int
Y: int
K: int
number_households: int
number_individuals: int
estimated_gamma: np.ndarray
varcov_gamma: np.ndarray
stderrs_gamma: np.ndarray
estimated_beta: np.ndarray
varcov_beta: np.ndarray
estimated_u: np.ndarray
estimated_v: np.ndarray
stderrs_beta: np.ndarray
stderrs_u: np.ndarray
stderrs_v: np.ndarray
estimated_Phi: np.ndarray
def __str__(self):
line_stars = "*" * 80 + "\n"
print_stars("Estimating a Choo and Siow model by Poisson GLM.")
model_str = f"The data has {self.number_households} households\n\n"
model_str += f"We use {self.K} basis functions.\n\n"
repr_str = line_stars + model_str
repr_str += "The estimated basis coefficients (and their standard errors) are\n\n"
for i in range(self.K):
repr_str += (
f" base_{i + 1}: {self.estimated_beta[i]: > 10.3f} "
+ f"({self.stderrs_beta[i]: .3f})\n"
)
repr_str += (
"The estimated utilities of men (and their standard errors) are\n\n"
)
for i in range(self.X):
repr_str += (
f" u_{i + 1}: {self.estimated_u[i]: > 10.3f} "
+ f"({self.stderrs_u[i]: .3f})\n"
)
repr_str += "The estimated utilities of women (and their standard errors) are\n\n"
for i in range(self.Y):
repr_str += (
f" v {i + 1}: {self.estimated_v[i]: > 10.3f} "
+ f"({self.stderrs_v[i]: .3f})\n"
)
return repr_str + line_stars
def print_results(
self,
lambda_true: Optional[np.ndarray] = None,
u_true: Optional[np.ndarray] = None,
v_true: Optional[np.ndarray] = None,
) -> float | None:
estimates_beta = self.estimated_beta
stderrs_beta = self.stderrs_beta
if lambda_true is None:
repr_str = "The estimated coefficients "
repr_str += "(and their standard errors) are\n\n"
for i, coeff in enumerate(estimates_beta):
repr_str += f" {coeff: > 10.3f} ({stderrs_beta[i]: > 10.3f})\n"
print_stars(repr_str)
else:
repr_str = "The true and estimated coefficients "
repr_str += "(and their standard errors) are\n\n"
for i, coeff in enumerate(estimates_beta):
repr_str += f" base {i + 1}: {lambda_true[i]: > 10.3f} "
repr_str += f" {coeff: > 10.3f} ({stderrs_beta[i]: > 10.3f})\n"
print_stars(repr_str)
estimates_u = self.estimated_u
stderrs_u = self.stderrs_u
if u_true is None:
repr_str = "The estimated utilities for men "
repr_str += "(and their standard errors) are:\n\n"
for i, coeff in enumerate(estimates_u):
repr_str += f" {coeff: > 10.3f} ({stderrs_u[i]: > 10.3f})\n"
print_stars(repr_str)
else:
repr_str = "The true and estimated utilities for men "
repr_str += "(and their standard errors) are:\n\n"
for i, coeff in enumerate(estimates_u):
repr_str += f" u_{i + 1}: {u_true[i]: > 10.3f} "
repr_str += f" {coeff: > 10.3f} ({stderrs_u[i]: > 10.3f})\n"
print_stars(repr_str)
estimates_v = self.estimated_v
stderrs_v = self.stderrs_v
if v_true is None:
repr_str = "The estimated utilities for women "
repr_str += "(and their standard errors) are:\n\n"
for i, coeff in enumerate(estimates_v):
repr_str += f" {coeff: > 10.3f} ({stderrs_v[i]: > 10.3f})\n"
print_stars(repr_str)
else:
repr_str = "The true and estimated utilities for women "
repr_str += "(and their standard errors) are:\n\n"
for i, coeff in enumerate(estimates_v):
repr_str += f" v_{i + 1}: {v_true[i]: > 10.3f} "
repr_str += f" {coeff: > 10.3f} ({stderrs_v[i]: > 10.3f})\n"
print_stars(repr_str)
if lambda_true is None:
return None
else:
discrepancy = npmaxabs(lambda_true - estimates_beta)
print_stars(
f"The largest difference between true and estimated coefficients is {discrepancy: .2e}"
)
return discrepancy
|