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 Appendix_Table_3(df): df_short_g = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad"] == 0][df[df["dummynews_goodbad"] == 0]['treatgroup'] == 4]['beliefadjustment_normalized'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad"] == 0][df[df["dummynews_goodbad"] == 0] ['treatgroup'] == 4] ['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ beliefadjustment_bayes_norm", data=df_short_g) reg_s_1 = model_ols.fit(cov_type='HC1') df_short_b = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad"] == 1][df[df["dummynews_goodbad"] == 1]['treatgroup'] == 4]['beliefadjustment_normalized'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad"] == 1][df[df["dummynews_goodbad"] == 1] ['treatgroup'] == 4] ['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ beliefadjustment_bayes_norm", data=df_short_b) reg_s_2 = model_ols.fit(cov_type='HC1') df["interact_negative_bayes"] = df["beliefadjustment_bayes_norm"] * df[ "dummynews_goodbad"] model_ols = smf.ols( formula= "beliefadjustment_normalized ~ beliefadjustment_bayes_norm + dummynews_goodbad + interact_negative_bayes", data=df[df['treatgroup'] == 4]) reg_s_3 = model_ols.fit(cov_type='HC1') Appendix_Table_3 = Stargazer([reg_s_1, reg_s_2, reg_s_3]) Appendix_Table_3.title('Table 8: Belief Adjustment in the Short-Run') Appendix_Table_3.dependent_variable_name('Belief Adjustment') Appendix_Table_3.custom_columns([ 'Positive Information', 'Negative Information', 'Difference-in-difference' ], [1, 1, 1]) return Appendix_Table_3
def Main_Table_1(df): df_good = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad"] == 0]['beliefadjustment_normalized'], "dummytreat_direct1month": df[df["dummynews_goodbad"] == 0]['dummytreat_direct1month'], "rank": df[df["dummynews_goodbad"] == 0]['rank'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad"] == 0]['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ dummytreat_direct1month", data=df_good) reg_1 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + rank + beliefadjustment_bayes_norm", data=df_good) reg_2 = model_ols.fit(cov_type='HC1') df_bad = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad"] == 1]['beliefadjustment_normalized'], "dummytreat_direct1month": df[df["dummynews_goodbad"] == 1]['dummytreat_direct1month'], "rank": df[df["dummynews_goodbad"] == 1]['rank'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad"] == 1]['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ dummytreat_direct1month", data=df_bad) reg_3 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + rank + beliefadjustment_bayes_norm", data=df_bad) reg_4 = model_ols.fit(cov_type='HC1') #Generating interaction term df["interact_direct1month"] = df["dummytreat_direct1month"] * df[ "dummynews_goodbad"] model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad + interact_direct1month", data=df) reg_5 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad + rank + interact_direct1month + beliefadjustment_bayes_norm", data=df) reg_6 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad + interact_direct1month + rankdummy1 + rankdummy2 + rankdummy3 + rankdummy4 + rankdummy5 + rankdummy6 + rankdummy7 + rankdummy8 + rankdummy9 + rankdummy1_interact + rankdummy2_interact + rankdummy3_interact + rankdummy4_interact + rankdummy5_interact + rankdummy6_interact + rankdummy7_interact + rankdummy8_interact + rankdummy9_interact", data=df) reg_7 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad + interact_direct1month + beliefadjustment_bayes_norm + rankdummy1 + rankdummy2 + rankdummy3 + rankdummy4 + rankdummy5 + rankdummy6 + rankdummy7 + rankdummy8 + rankdummy9 + rankdummy1_interact + rankdummy2_interact + rankdummy3_interact + rankdummy4_interact + rankdummy5_interact + rankdummy6_interact + rankdummy7_interact + rankdummy8_interact + rankdummy9_interact", data=df) reg_8 = model_ols.fit(cov_type='HC1') Main_Table_1 = Stargazer( [reg_1, reg_2, reg_3, reg_4, reg_5, reg_6, reg_7, reg_8]) Main_Table_1.title( 'Table 1 - Belief Adjustment: Direct versus One Month Later') Main_Table_1.dependent_variable_name('Normalized Belief Adjustment - ') Main_Table_1.custom_columns([ 'Positive Information', 'Negative Information', 'Difference-in-difference', 'Difference-in-difference with rank fixed effects' ], [2, 2, 2, 2]) return Main_Table_1
def Appendix_Table_1(df): df_good = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad_h"] == 0]['beliefadjustment_normalized'], "dummytreat_direct1month": df[df["dummynews_goodbad_h"] == 0]['dummytreat_direct1month'], "rank": df[df["dummynews_goodbad_h"] == 0]['rank'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad_h"] == 0]['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ dummytreat_direct1month", data=df_good) reg_1 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + rank + beliefadjustment_bayes_norm", data=df_good) reg_2 = model_ols.fit(cov_type='HC1') df_bad = pd.DataFrame({ "beliefadjustment_normalized": df[df["dummynews_goodbad_h"] == 1]['beliefadjustment_normalized'], "dummytreat_direct1month": df[df["dummynews_goodbad_h"] == 1]['dummytreat_direct1month'], "rank": df[df["dummynews_goodbad_h"] == 1]['rank'], "beliefadjustment_bayes_norm": df[df["dummynews_goodbad_h"] == 1]['beliefadjustment_bayes_norm'] }) model_ols = smf.ols( formula="beliefadjustment_normalized ~ dummytreat_direct1month", data=df_bad) reg_3 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + rank + beliefadjustment_bayes_norm", data=df_bad) reg_4 = model_ols.fit(cov_type='HC1') #Generating interaction term df["interact_direct1month"] = df["dummytreat_direct1month"] * df[ "dummynews_goodbad"] model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad_h + interact_direct1month", data=df) reg_5 = model_ols.fit(cov_type='HC1') model_ols = smf.ols( formula= "beliefadjustment_normalized ~ dummytreat_direct1month + dummynews_goodbad_h + rank + interact_direct1month + beliefadjustment_bayes_norm", data=df) reg_6 = model_ols.fit(cov_type='HC1') Appendix_Table_1 = Stargazer([reg_1, reg_2, reg_3, reg_4, reg_5, reg_6]) Appendix_Table_1.title( 'Appendix Table 1 - Belief Adjustment: Direct versus One Month Later') Appendix_Table_1.dependent_variable_name('Normalized Belief Adjustment - ') Appendix_Table_1.custom_columns([ 'Positive Information', 'Negative Information', 'Difference-in-difference' ], [2, 2, 2]) return Appendix_Table_1
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