def test_add_star(pvalue): if pvalue <= 0.01: expected = "***" elif pvalue <= 0.05: expected = "**" elif pvalue <= 0.10: expected = "*" else: expected = "" result = add_star("", pvalue, True) assert expected == result
def summary(self) -> Summary: """ Model estimation summary. Returns ------- Summary Summary table of model estimation results Supports export to csv, html and latex using the methods ``summary.as_csv()``, ``summary.as_html()`` and ``summary.as_latex()``. """ smry = Summary() models = list(self._results.keys()) title = "Model Comparison" stubs = [ "Dep. Variable", "Estimator", "No. Observations", "Cov. Est.", "R-squared", "R-Squared (Within)", "R-Squared (Between)", "R-Squared (Overall)", "F-statistic", "P-value (F-stat)", ] dep_name = {} for key in self._results: dep_name[key] = self._results[key].model.dependent.vars[0] dep_name = Series(dep_name) vals = concat( [ dep_name, self.estimator_method, self.nobs, self.cov_estimator, self.rsquared, self.rsquared_within, self.rsquared_between, self.rsquared_overall, self.f_statistic, ], axis=1, ) vals = [[i for i in v] for v in vals.T.values] vals[2] = [str(v) for v in vals[2]] for i in range(4, len(vals)): f = _str if i == 9: f = pval_format vals[i] = [f(v) for v in vals[i]] params = self.params precision = getattr(self, self._precision) pvalues = np.asarray(self.pvalues) params_fmt = [] params_stub = [] for i in range(len(params)): formatted_and_starred = [] for v, pv in zip(params.values[i], pvalues[i]): formatted_and_starred.append(add_star(_str(v), pv, self._stars)) params_fmt.append(formatted_and_starred) precision_fmt = [] for v in precision.values[i]: v_str = _str(v) v_str = "({0})".format(v_str) if v_str.strip() else v_str precision_fmt.append(v_str) params_fmt.append(precision_fmt) params_stub.append(params.index[i]) params_stub.append(" ") vals = table_concat((vals, params_fmt)) stubs = stub_concat((stubs, params_stub)) all_effects = [] for key in self._results: res = self._results[key] effects = getattr(res, "included_effects", []) all_effects.append(effects) neffect = max(map(len, all_effects)) effects = [] effects_stub = ["Effects"] for i in range(neffect): if i > 0: effects_stub.append("") row = [] for j in range(len(self._results)): effect = all_effects[j] if len(effect) > i: row.append(effect[i]) else: row.append("") effects.append(row) if effects: vals = table_concat((vals, effects)) stubs = stub_concat((stubs, effects_stub)) txt_fmt = default_txt_fmt.copy() txt_fmt["data_aligns"] = "r" txt_fmt["header_align"] = "r" table = SimpleTable(vals, headers=models, title=title, stubs=stubs, txt_fmt=txt_fmt) smry.tables.append(table) prec_type = self._PRECISION_TYPES[self._precision] smry.add_extra_txt(["{0} reported in parentheses".format(prec_type)]) return smry