def _estimate_kappa(self): y, x, z = self._wy, self._wx, self._wz is_exog = self._regressor_is_exog e = c_[y, x[:, ~is_exog]] x1 = x[:, is_exog] ez = e - z @ (pinv(z) @ e) ex1 = e - x1 @ (pinv(x1) @ e) vpmzv_sqinv = inv_sqrth(ez.T @ ez) q = vpmzv_sqinv @ (ex1.T @ ex1) @ vpmzv_sqinv return min(eigvalsh(q))
def _estimate_kappa(self) -> float: y, x, z = self._wy, self._wx, self._wz is_exog = self._regressor_is_exog e = c_[y, x[:, ~is_exog]] x1 = x[:, is_exog] ez = e - z @ (pinv(z) @ e) if x1.shape[1] == 0: # No exogenous regressors ex1 = e else: ex1 = e - x1 @ (pinv(x1) @ e) vpmzv_sqinv = inv_sqrth(ez.T @ ez) q = vpmzv_sqinv @ (ex1.T @ ex1) @ vpmzv_sqinv return min(eigvalsh(q))
def test_inv_sqrth(): x = np.random.randn(1000, 10) xpx = x.T @ x invsq = inv_sqrth(xpx) prod = invsq @ xpx @ invsq - np.eye(10) assert_allclose(1 + prod, np.ones((10, 10)))