def test_group_agg(): values = np.ones((10, 2)) * np.arange(10).reshape((10, 1)) bounds = np.arange(5) * 2 f = lambda x: x.mean(axis=0) agged = group_agg(values, bounds, f) assert(agged[1][0] == 2.5) assert(agged[2][0] == 4.5)
def _var_beta_panel(y, x, beta, xx, rmse, cluster_axis, nw_lags, nobs, df, nw_overlap): from pandas.core.panel import LongPanel, group_agg 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, ['resid'], y.index) 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.panel import LongPanel, group_agg 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, ['resid'], y.index) 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))