# Conventional versus Robust Standard Errors
# Module 8 - Robust Standard Errors
# Dataset: MODULE8_ROBUST_SE_DEMO

# Conventional versus Robust Standard Errors
#
# Module 8 notebook lab. This notebook uses original Ceteris Lab teaching data and does not report real empirical findings.

# Learning goal
# Compare conventional, HC0, HC1, HC2, and HC3 standard errors.
#
# Dataset: MODULE8_ROBUST_SE_DEMO. Variables: observation_id, outcome, x1, x2, group, error_variance.

# %% Cell 3
import pandas as pd
import statsmodels.api as sm

df = pd.read_csv("/data/module-8/module8_robust_se_demo.csv")
X = sm.add_constant(df[["x1", "x2"]])
model = sm.OLS(df["outcome"], X).fit()
print("Conventional SE")
print(model.bse.round(4))
for cov in ["HC0", "HC1", "HC2", "HC3"]:
    robust = model.get_robustcov_results(cov_type=cov)
    print(cov, pd.Series(robust.bse, index=model.params.index).round(4).to_dict())

# Reflection
# Write two sentences: one sentence explaining what the diagnostic or robust result says, and one sentence explaining a limitation or next step.
