def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis, nw_lags, nobs, df, nw_overlap): xx_inv = math.inv(xx) yv = y.values if cluster_axis is None: if nw_lags is None: return xx_inv * (rmse**2) else: resid = yv - np.dot(x.values, beta) m = (x.values.T * resid).T xeps = math.newey_west(m, nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xeps, xx_inv)) else: Xb = np.dot(x.values, beta).reshape((len(x.values), 1)) resid = DataFrame(yv[:, None] - Xb, index=y.index, columns=['resid']) if cluster_axis == 1: x = x.swaplevel(0, 1).sortlevel(0) resid = resid.swaplevel(0, 1).sortlevel(0) m = _group_agg(x.values * resid.values, x.index._bounds, lambda x: np.sum(x, axis=0)) if nw_lags is None: nw_lags = 0 xox = 0 for i in range(len(x.index.levels[0])): xox += math.newey_west(m[i:i + 1], nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xox, xx_inv))
def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis, nw_lags, nobs, df, nw_overlap): from pandas.core.frame import group_agg xx_inv = math.inv(xx) yv = y.values if cluster_axis is None: if nw_lags is None: return xx_inv * (rmse ** 2) else: resid = yv - np.dot(x.values, beta) m = (x.values.T * resid).T xeps = math.newey_west(m, nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xeps, xx_inv)) else: Xb = np.dot(x.values, beta).reshape((len(x.values), 1)) resid = DataFrame(yv[:, None] - Xb, index=y.index, columns=["resid"]) if cluster_axis == 1: x = x.swaplevel(0, 1).sortlevel(0) resid = resid.swaplevel(0, 1).sortlevel(0) m = group_agg(x.values * resid.values, x.index._bounds, lambda x: np.sum(x, axis=0)) if nw_lags is None: nw_lags = 0 xox = 0 for i in range(len(x.index.levels[0])): xox += math.newey_west(m[i : i + 1], nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xox, xx_inv))
def _cov_beta(self): cov_resid = self._sigma x = self._x inv_cov_x = inv(np.dot(x.T, x)) return np.kron(inv_cov_x, cov_resid)
def _var_beta_raw(self): """Returns the raw covariance of beta.""" x = self._x_trans y = self._y_trans dates = self._index nobs = self._nobs rmse = self._rmse_raw beta = self._beta_raw df = self._df_raw window = self._window cum_xx = self._cum_xx(self._x) results = [] for n, i in enumerate(self._valid_indices): xx = cum_xx[i] date = dates[i] if self._is_rolling and i >= window: xx = xx - cum_xx[i - window] prior_date = dates[i - window + 1] else: prior_date = dates[0] x_slice = x.truncate(before=prior_date, after=date) y_slice = y.truncate(before=prior_date, after=date) xv = x_slice.values yv = np.asarray(y_slice) if self._nw_lags is None: result = math.inv(xx) * (rmse[n]**2) else: resid = yv - np.dot(xv, beta[n]) m = (xv.T * resid).T xeps = math.newey_west(m, self._nw_lags, nobs[n], df[n], self._nw_overlap) xx_inv = math.inv(xx) result = np.dot(xx_inv, np.dot(xeps, xx_inv)) results.append(result) return np.array(results)
def _var_beta_raw(self): """Returns the raw covariance of beta.""" x = self._x_trans y = self._y_trans dates = self._index nobs = self._nobs rmse = self._rmse_raw beta = self._beta_raw df = self._df_raw window = self._window cum_xx = self._cum_xx(self._x) results = [] for n, i in enumerate(self._valid_indices): xx = cum_xx[i] date = dates[i] if self._is_rolling and i >= window: xx = xx - cum_xx[i - window] prior_date = dates[i - window + 1] else: prior_date = dates[0] x_slice = x.truncate(before=prior_date, after=date) y_slice = y.truncate(before=prior_date, after=date) xv = x_slice.values yv = np.asarray(y_slice) if self._nw_lags is None: result = math.inv(xx) * (rmse[n] ** 2) else: resid = yv - np.dot(xv, beta[n]) m = (xv.T * resid).T xeps = math.newey_west(m, self._nw_lags, nobs[n], df[n], self._nw_overlap) xx_inv = math.inv(xx) result = np.dot(xx_inv, np.dot(xeps, xx_inv)) results.append(result) return np.array(results)
def _var_beta_raw(self): """ Returns the raw covariance of beta. """ x = self._x.values y = self._y.values xx = np.dot(x.T, x) if self._nw_lags is None: return math.inv(xx) * (self._rmse_raw ** 2) else: resid = y - np.dot(x, self._beta_raw) m = (x.T * resid).T xeps = math.newey_west(m, self._nw_lags, self._nobs, self._df_raw, self._nw_overlap) xx_inv = math.inv(xx) return np.dot(xx_inv, np.dot(xeps, xx_inv))
def _var_beta_raw(self): """ Returns the raw covariance of beta. """ x = self._x.values y = self._y.values xx = np.dot(x.T, x) if self._nw_lags is None: return math.inv(xx) * (self._rmse_raw**2) else: resid = y - np.dot(x, self._beta_raw) m = (x.T * resid).T xeps = math.newey_west(m, self._nw_lags, self._nobs, self._df_raw, self._nw_overlap) xx_inv = math.inv(xx) return np.dot(xx_inv, np.dot(xeps, xx_inv))
def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis, nw_lags, nobs, df, nw_overlap): from pandas.core.frame import group_agg from pandas.core.panel import LongPanel xx_inv = math.inv(xx) if cluster_axis is None: if nw_lags is None: return xx_inv * (rmse ** 2) else: resid = y.values.squeeze() - np.dot(x.values, beta) m = (x.values.T * resid).T xeps = math.newey_west(m, nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xeps, xx_inv)) else: Xb = np.dot(x.values, beta).reshape((len(x.values), 1)) resid = LongPanel(y.values - Xb, index=y.index, columns=['resid']) if cluster_axis == 1: x = x.swapaxes() resid = resid.swapaxes() m = group_agg(x.values * resid.values, x.index._bounds, lambda x: np.sum(x, axis=0)) if nw_lags is None: nw_lags = 0 xox = 0 for i in range(len(x.major_axis)): xox += math.newey_west(m[i : i + 1], nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xox, xx_inv))
def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis, nw_lags, nobs, df, nw_overlap): from pandas.core.frame import group_agg from pandas.core.panel import LongPanel xx_inv = math.inv(xx) yv = y.values if cluster_axis is None: if nw_lags is None: return xx_inv * (rmse**2) else: resid = yv - np.dot(x.values, beta) m = (x.values.T * resid).T xeps = math.newey_west(m, nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xeps, xx_inv)) else: Xb = np.dot(x.values, beta).reshape((len(x.values), 1)) resid = LongPanel(yv[:, None] - Xb, index=y.index, columns=['resid']) if cluster_axis == 1: x = x.swapaxes() resid = resid.swapaxes() m = group_agg(x.values * resid.values, x.index._bounds, lambda x: np.sum(x, axis=0)) if nw_lags is None: nw_lags = 0 xox = 0 for i in range(len(x.major_axis)): xox += math.newey_west(m[i:i + 1], nw_lags, nobs, df, nw_overlap) return np.dot(xx_inv, np.dot(xox, xx_inv))
def test_inv_illformed(self): singular = DataFrame(np.array([[1, 1], [2, 2]])) rs = pmath.inv(singular) expected = np.array([[0.1, 0.2], [0.1, 0.2]]) self.assert_(np.allclose(rs, expected))