class StargazerTestCase(unittest.TestCase): def setUp(self): self.df = pd.DataFrame(list(zip(range(9), range(0, 18, 2))), columns =['a', 'b']) self.est1 = smf.ols('a ~ 0 + b', self.df).fit() self.est2 = smf.ols('a ~ 1 + b', self.df).fit() self.stargazer = Stargazer([self.est1, self.est2]) def test_add_line(self): # too few arguments self.assertRaises(AssertionError, self.stargazer.add_line, '', [0]) # wrong location self.assertRaises(ValueError, self.stargazer.add_line, '', [0, 0], 'wrong') # correct usage for loc in LineLocation: self.stargazer.add_line(f'test {loc.value}', ['N/A', 'N/A'], loc) latex = self.stargazer.render_latex() for loc in LineLocation: self.assertIn(f' test {loc.value} & N/A & N/A \\', latex) def test_render_latex(self): # test escaping self.stargazer.rename_covariates({'b': 'b_'}) self.assertIn(' b_ ', self.stargazer.render_latex()) self.assertIn(r' b\_ ', self.stargazer.render_latex(escape=True))
def create_table(models, out): """Creates a table of regression results. Args: models: regression results out: the generated table is saved here Returns: None """ results = [] model_names = [] covariate_names = {} for model in models: with open(model, 'rb') as file: result = (pickle.load(file)) results.append(result) model_names.append(result.model_name) covariate_names.update(result.var_names) table = Stargazer(results) table.dependent_variable_name( covariate_names[results[0].model.endog_names]) table.custom_columns(model_names, [1] * len(model_names)) table.rename_covariates(covariate_names) latex_table = table.render_latex() latex_table = re.sub(r"l(c+)\}", r"lc\1}", latex_table) # ugly hack because stargazer generates an invalid latex table with open(out, 'w') as file: file.write(latex_table)
def create_table(models, path): path = Path(path) stargazer = Stargazer(models) if path.suffix == ".tex": table = stargazer.render_latex() elif path.suffix == ".html": table = stargazer.render_html() else: raise NotImplementedError with open(path, "w") as file: file.write(table)
for name in strategy_name_list: # to have the same name for all variables reg_df_tmp = reg_df.rename({name: "ret"}, axis=1) results_list.append( smf.ols(formula="ret ~ MKT + SMB + HML + CMA + RMW", data=reg_df_tmp * 12).fit()) # Outputting short regression results: stargazer = Stargazer([results_list[0], results_list[3], results_list[6]]) stargazer.custom_columns(['D 30', 'prob 20', 'prob 40'], [1, 1, 1]) stargazer.covariate_order(['Intercept', 'MKT', 'SMB', 'HML', 'RMW', 'CMA']) stargazer.show_degrees_of_freedom(False) f = open( "/Users/rsigalov/Dropbox/2019_Revision/Writing/Predictive Regressions/tables/disaster_sort_reg_on_ff.tex", "w") f.write(stargazer.render_latex()) f.close() # Doing extended regression table where I do regressions of strategy return on # (1) just the market, (2) FF 3 factors and (3) FF 5 factors. results_list = [] for name in ["D_30", "p_20_30"]: # to have the same name for all variables reg_df_tmp = reg_df.rename({name: "ret"}, axis=1) results_list.append( smf.ols(formula="ret ~ MKT", data=reg_df_tmp * 12).fit()) results_list.append( smf.ols(formula="ret ~ MKT + SMB + HML", data=reg_df_tmp * 12).fit()) results_list.append( smf.ols(formula="ret ~ MKT + SMB + HML + CMA + RMW", data=reg_df_tmp * 12).fit())
df = pd.concat([country, df], axis=1) df.drop(["Thailand", "location"], axis=1, inplace=True) df.dropna(subset=["new_tests_per_thousand"], inplace=True) df["date"] = pd.to_datetime(df["date"]) df_my = df[df["Malaysia"] == 1] df_my = df_my.merge(mob_my, on="date") df_th = df[df["Malaysia"] == 0] df_th = df_th.merge(mob_th, on="date") df = pd.concat([df_my, df_th]) df["post_election"] = df["date"].apply( lambda x: 0 if x <= pd.to_datetime("2020-09-26") else 1) mdl_joined_el = ols( "new_cases_per_million ~ Malaysia * post_election + new_tests_per_thousand + retail + grocery + parks + transit", data=df) results_joined_el = mdl_joined_el.fit() results_joined_el.summary() stargazer = Stargazer([results_joined_el]) stargazer.render_latex()
model1 = sm.OLS(y, x).fit() model2 = sm.OLS(y, x_withfemale).fit() model1.summary() model2.summary() # ============================================================================= # STARGAZER MODEL OUTPUTS # ============================================================================= from stargazer.stargazer import Stargazer stargazer = Stargazer([model1, model2]) stargazer.custom_columns(['Base Model', 'Spesified Model'], [1, 1]) stargazer.significant_digits(2) stargazer.covariate_order([ 'const', 'propwomen', 'oppospower', 'gdpcap', 'sepowerdist', 'youthunemp' ]) stargazer.rename_covariates({ 'const': 'Constant', 'oppospower': 'Opposition Power', 'gdpcap': 'GDP($)', 'sepowerdist': 'Class Political Power', 'youthunemp': 'Unemployed Youth %', 'propwomen': 'Female Property Rights' }) stargazer.cov_spacing = 3 print(stargazer.render_latex())
def ols_regression_formatted(data, specifications, as_latex=False, covariates_names=None, covariates_order=None): """ Creates formatted tables for different dependent variables and specifications Input: data (df): Dataframe containing all necessary variables for OLS regression specifications (dictionary): dependent variables as keys and list of specifications as values as_latex (bool): specify whether Output as table or Latex code covariate_names (dict): dictionary with covariate names as in "data" as keys and new covariate names as values Output: list_of_tables (list of stargazer tables): list of formatted tables """ # Create dictionary which connects dependent variables with formatted tables dict_regression_tables = {} # Generate regressions for depvar in specifications.keys(): regression_list = [] specification_list = specifications[depvar] list_all_covariates = [] for specification in specification_list: estimation_equation = depvar + " ~ " + specification regression = smf.ols(data=data, formula=estimation_equation).fit() regression_list.append(regression) # Create set of all variables for this dependent variable list_all_covariates = list( set(list_all_covariates + regression.params.index.values.tolist())) # Format table with stargazer formatted_table = Stargazer(regression_list) # No dimension of freedoms and blank dependent variable formatted_table.show_degrees_of_freedom(False) formatted_table.dependent_variable_name("") # Optional: Change order of covariates if covariates_order is not None: covariates_order_depvar = list( OrderedSet(covariates_order).intersection(list_all_covariates)) list_remaining_covariates = list( OrderedSet(list_all_covariates).difference( OrderedSet(covariates_order_depvar))) covariates_sorted = list( OrderedSet(covariates_order_depvar).union( list_remaining_covariates)) covariates_sorted.remove("Intercept") covariates_sorted = covariates_sorted + ["Intercept"] formatted_table.covariate_order(covariates_sorted) # Optional: Change name of covariates if covariates_names is not None: formatted_table.rename_covariates(covariates_names) # Add table or latex code to dictionary if as_latex is True: dict_regression_tables[depvar] = formatted_table.render_latex() # Delete tabular environment around it dict_regression_tables[depvar] = dict_regression_tables[ depvar].replace("\\begin{table}[!htbp] \\centering\n", "") dict_regression_tables[depvar] = dict_regression_tables[ depvar].replace("\\end{table}", "") else: dict_regression_tables[depvar] = formatted_table return dict_regression_tables