Skip to content

Commit 89f5a97

Browse files
authored
removes aliasing from feglm (#1071)
1 parent c3a6db5 commit 89f5a97

File tree

1 file changed

+14
-25
lines changed

1 file changed

+14
-25
lines changed

pyfixest/estimation/feglm_.py

Lines changed: 14 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -145,34 +145,23 @@ def get_fit(self):
145145
Estimation of Generalized Linear Models with High-Dimensional
146146
k-way fixed effects': https://arxiv.org/pdf/1707.01815
147147
"""
148-
_Y = self._Y
149-
_X = self._X
150-
_fe = self._fe
151-
_N = self._N
152-
_convergence = self.convergence # False
153-
_maxiter = self.maxiter
154-
_tol = self.tol
155-
_fixef_tol = self._fixef_tol
156-
_fixef_maxiter = self._fixef_maxiter
157-
_solver = self._solver
158-
159148
# initialize
160149

161-
beta = np.zeros(_X.shape[1])
162-
eta = np.zeros(_N)
150+
beta = np.zeros(self._X.shape[1])
151+
eta = np.zeros(self._N)
163152
mu = self._get_mu(theta=eta)
164-
deviance = self._get_deviance(_Y.flatten(), mu)
153+
deviance = self._get_deviance(self._Y.flatten(), mu)
165154
deviance_old = deviance.copy() + 1
166155

167-
for r in range(_maxiter):
156+
for r in range(self.maxiter):
168157
if r == 0:
169158
pass
170159
else:
171160
converged = self._check_convergence(
172161
crit=self._get_diff(deviance=deviance, last=deviance_old),
173-
tol=_tol,
162+
tol=self.tol,
174163
r=r,
175-
maxiter=_maxiter,
164+
maxiter=self.maxiter,
176165
model=self._method,
177166
)
178167
if converged:
@@ -184,19 +173,19 @@ def get_fit(self):
184173

185174
# Step 2: _get v_tilde(r-1) and X_tilde(r-1) (eq. 3.2)
186175
W_tilde = self._update_W_tilde(W=W)
187-
X_tilde = self._update_X_tilde(W_tilde=W_tilde, X=_X)
176+
X_tilde = self._update_X_tilde(W_tilde=W_tilde, X=self._X)
188177
v_tilde = self._update_v_tilde(
189-
y=_Y.flatten(), mu=mu, W_tilde=W_tilde.flatten(), detadmu=detadmu
178+
y=self._Y.flatten(), mu=mu, W_tilde=W_tilde.flatten(), detadmu=detadmu
190179
)
191180

192181
# Step 3 compute v_dotdot(r-1) and X_dotdot(r-1) - demeaning
193182
v_dotdot, X_dotdot = self.residualize(
194183
v=v_tilde,
195184
X=X_tilde,
196-
flist=_fe,
185+
flist=self._fe,
197186
weights=W_tilde.flatten(),
198-
tol=_fixef_tol,
199-
maxiter=_fixef_maxiter,
187+
tol=self._fixef_tol,
188+
maxiter=self._fixef_maxiter,
200189
)
201190

202191
# Step 4: compute (beta(r) - beta(r-1)) and check for convergence, _update beta(r-1) s(eq. 3.5)
@@ -209,7 +198,7 @@ def get_fit(self):
209198
deviance_old = deviance.copy()
210199

211200
beta, eta, mu, deviance = self._update_eta_step_halfing(
212-
Y=_Y,
201+
Y=self._Y,
213202
beta=beta,
214203
eta=eta,
215204
mu=mu,
@@ -245,7 +234,7 @@ def get_fit(self):
245234
self._scores_response = self._u_hat_response[:, None] * self._X
246235
self._scores_working = self._u_hat_working[:, None] * self._X
247236

248-
self._scores = self._get_score(y=_Y.flatten(), X=_X, mu=mu, eta=eta)
237+
self._scores = self._get_score(y=self._Y.flatten(), X=self._X, mu=mu, eta=eta)
249238

250239
self._u_hat = self._u_hat_working
251240
self._tZX = np.transpose(self._Z) @ self._X
@@ -255,7 +244,7 @@ def get_fit(self):
255244
self._hessian = X_dotdot.T @ X_dotdot
256245
self.deviance = deviance
257246

258-
if _convergence:
247+
if self.convergence:
259248
self._convergence = True
260249

261250
def _vcov_iid(self):

0 commit comments

Comments
 (0)