def test_jarque_bera(): #tests against R fBasics st_pv_R = np.array([1.9662677226861689, 0.3741367669648314]) jb = jarque_bera(x)[:2] assert_almost_equal(jb, st_pv_R, 14) st_pv_R = np.array([78.329987305556, 0.000000000000]) jb = jarque_bera(x**2)[:2] assert_almost_equal(jb, st_pv_R, 13) st_pv_R = np.array([5.7135750796706670, 0.0574530296971343]) jb = jarque_bera(np.log(x**2))[:2] assert_almost_equal(jb, st_pv_R, 14) st_pv_R = np.array([2.6489315748495761, 0.2659449923067881]) jb = jarque_bera(np.exp(-x**2))[:2] assert_almost_equal(jb, st_pv_R, 14)
def summary(self, yname=None, xname=None, returns='text'): """returns a string that summarizes the regression results Parameters ----------- yname : string, optional Default is `Y` xname : list of strings, optional Default is `X.#` for # in p the number of regressors Returns ------- String summarizing the fit of a linear model. Examples -------- >>> import scikits.statsmodels.api as sm >>> data = sm.datasets.longley.load() >>> data.exog = sm.add_constant(data.exog) >>> ols_results = sm.OLS(data.endog, data.exog).results >>> print ols_results.summary() ... Notes ----- All residual statistics are calculated on whitened residuals. """ import time from scikits.statsmodels.iolib.table import SimpleTable from scikits.statsmodels.stats.stattools import (jarque_bera, omni_normtest, durbin_watson) if yname is None: yname = self.model.endog_names if xname is None: xname = self.model.exog_names modeltype = self.model.__class__.__name__ llf, aic, bic = self.llf, self.aic, self.bic JB, JBpv, skew, kurtosis = jarque_bera(self.wresid) omni, omnipv = omni_normtest(self.wresid) t = time.localtime() part1_fmt = dict( data_fmts = ["%s"], empty_cell = '', colwidths = 15, colsep=' ', row_pre = '| ', row_post = '|', table_dec_above='=', table_dec_below='', header_dec_below=None, header_fmt = '%s', stub_fmt = '%s', title_align='c', header_align = 'r', data_aligns = "r", stubs_align = "l", fmt = 'txt' ) part2_fmt = dict( #data_fmts = ["%#12.6g","%#12.6g","%#10.4g","%#5.4g"], data_fmts = ["%#10.4g","%#10.4g","%#6.4f","%#6.4f"], #data_fmts = ["%#15.4F","%#15.4F","%#15.4F","%#14.4G"], empty_cell = '', colwidths = 14, colsep=' ', row_pre = '| ', row_post = ' |', table_dec_above='=', table_dec_below='=', header_dec_below='-', header_fmt = '%s', stub_fmt = '%s', title_align='c', header_align = 'r', data_aligns = 'r', stubs_align = 'l', fmt = 'txt' ) part3_fmt = dict( #data_fmts = ["%#12.6g","%#12.6g","%#10.4g","%#5.4g"], data_fmts = ["%#10.4g","%#10.4g","%#10.4g","%#6.4g"], empty_cell = '', colwidths = 15, colsep=' ', row_pre = '| ', row_post = ' |', table_dec_above=None, table_dec_below='-', header_dec_below='-', header_fmt = '%s', stub_fmt = '%s', title_align='c', header_align = 'r', data_aligns = 'r', stubs_align = 'l', fmt = 'txt' ) # Print the first part of the summary table part1data = [[yname], [modeltype], ['Least Squares'], [time.strftime("%a, %d %b %Y",t)], [time.strftime("%H:%M:%S",t)], [self.nobs], [self.df_resid], [self.df_model]] part1header = None part1title = 'Summary of Regression Results' part1stubs = ('Dependent Variable:', 'Model:', 'Method:', 'Date:', 'Time:', '# obs:', 'Df residuals:', 'Df model:') part1 = SimpleTable(part1data, part1header, part1stubs, title=part1title, txt_fmt = part1_fmt) ######## summary Part 2 ####### part2data = zip([self.params[i] for i in range(len(xname))], [self.bse[i] for i in range(len(xname))], [self.tvalues[i] for i in range(len(xname))], [self.pvalues[i] for i in range(len(xname))]) part2header = ('coefficient', 'std. error', 't-statistic', 'prob.') part2stubs = xname #dfmt={'data_fmt':["%#12.6g","%#12.6g","%#10.4g","%#5.4g"]} part2 = SimpleTable(part2data, part2header, part2stubs, title=None, txt_fmt = part2_fmt) self.summary2 = part2 ######## summary Part 3 ####### part3Lheader = ['Models stats'] part3Rheader = ['Residual stats'] part3Lstubs = ('R-squared:', 'Adjusted R-squared:', 'F-statistic:', 'Prob (F-statistic):', 'Log likelihood:', 'AIC criterion:', 'BIC criterion:',) part3Rstubs = ('Durbin-Watson:', 'Omnibus:', 'Prob(Omnibus):', 'JB:', 'Prob(JB):', 'Skew:', 'Kurtosis:') part3Ldata = [[self.rsquared], [self.rsquared_adj], [self.fvalue], [self.f_pvalue], [llf], [aic], [bic]] part3Rdata = [[durbin_watson(self.wresid)], [omni], [omnipv], [JB], [JBpv], [skew], [kurtosis]] part3L = SimpleTable(part3Ldata, part3Lheader, part3Lstubs, txt_fmt = part3_fmt) part3R = SimpleTable(part3Rdata, part3Rheader, part3Rstubs, txt_fmt = part3_fmt) part3L.extend_right(part3R) ######## Return Summary Tables ######## # join table parts then print if returns == 'text': return str(part1) + '\n' + str(part2) + '\n' + str(part3L) elif returns == 'tables': return [part1, part2 ,part3L] elif returns == 'csv': return part1.as_csv() + '\n' + part2.as_csv() + '\n' + \ part3L.as_csv() elif returns == 'latex': print('not available yet') elif returns == 'html': print('not available yet')