def _f_stat_raw(self): """Returns the raw f-stat value.""" from scipy.stats import f cols = self._x.columns if self._nw_lags is None: F = self._r2_raw / (self._r2_raw - self._r2_adj_raw) q = len(cols) if 'intercept' in cols: q -= 1 shape = q, self.df_resid p_value = 1 - f.cdf(F, shape[0], shape[1]) return F, shape, p_value k = len(cols) R = np.eye(k) r = np.zeros((k, 1)) try: intercept = cols.get_loc('intercept') R = np.concatenate((R[0:intercept], R[intercept + 1:])) r = np.concatenate((r[0:intercept], r[intercept + 1:])) except KeyError: # no intercept pass return math.calc_F(R, r, self._beta_raw, self._var_beta_raw, self._nobs, self.df)
def _f_stat_raw(self): """Returns the raw f-stat value.""" from scipy.stats import f cols = self._x.columns if self._nw_lags is None: F = self._r2_raw / (self._r2_raw - self._r2_adj_raw) q = len(cols) if 'intercept' in cols: q -= 1 shape = q, self.df_resid p_value = 1 - f.cdf(F, shape[0], shape[1]) return F, shape, p_value k = len(cols) R = np.eye(k) r = np.zeros((k, 1)) try: intercept = cols.get_loc('intercept') R = np.concatenate((R[0: intercept], R[intercept + 1:])) r = np.concatenate((r[0: intercept], r[intercept + 1:])) except KeyError: # no intercept pass return math.calc_F(R, r, self._beta_raw, self._var_beta_raw, self._nobs, self.df)
def f_test(self, hypothesis): """Runs the F test, given a joint hypothesis. The hypothesis is represented by a collection of equations, in the form A*x_1+B*x_2=C You must provide the coefficients even if they're 1. No spaces. The equations can be passed as either a single string or a list of strings. Examples -------- o = ols(...) o.f_test('1*x1+2*x2=0,1*x3=0') o.f_test(['1*x1+2*x2=0','1*x3=0']) """ x_names = self._x.columns R = [] r = [] if isinstance(hypothesis, str): eqs = hypothesis.split(',') elif isinstance(hypothesis, list): eqs = hypothesis else: # pragma: no cover raise Exception('hypothesis must be either string or list') for equation in eqs: row = np.zeros(len(x_names)) lhs, rhs = equation.split('=') for s in lhs.split('+'): ss = s.split('*') coeff = float(ss[0]) x_name = ss[1] if x_name not in x_names: raise Exception('no coefficient named %s' % x_name) idx = x_names.get_loc(x_name) row[idx] = coeff rhs = float(rhs) R.append(row) r.append(rhs) R = np.array(R) q = len(r) r = np.array(r).reshape(q, 1) result = math.calc_F(R, r, self._beta_raw, self._var_beta_raw, self._nobs, self.df) return f_stat_to_dict(result)
def get_result(beta, vcov, n, d): return math.calc_F(R, r, beta, vcov, n, d)