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)
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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