Exemple #1
0
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)
Exemple #3
0
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)
Exemple #4
0
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())
Exemple #5
0
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()
Exemple #6
0
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())
Exemple #7
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