fig, axes = plt.subplots(2, 2, figsize=(14, 10))
colors_a = [“gray”, “#1f77b4”, “#ff7f0e”, “#2ca02c”, “#d62728″][: len(asmd_means)]
axes[0, 0].bar(listing(asmd_means.keys()), listing(asmd_means.values()), shade=colors_a)
axes[0, 0].axhline(0.1, ls=”–“, shade=”pink”, label=”0.10 imbalance threshold”)
axes[0, 0].set_title(“Imply ASMD throughout covariates”)
axes[0, 0].set_ylabel(“Imply ASMD”); axes[0, 0].legend()
axes[0, 0].tick_params(axis=”x”, rotation=20)
fact = target_df[“happiness”].imply()
colors_b = [“#888”] + [“#1f77b4”, “#ff7f0e”, “#2ca02c”, “#d62728”][: len(methods)] + [“black”]
axes[0, 1].bar(listing(outcome_means.keys()), listing(outcome_means.values()),
shade=colors_b[: len(outcome_means)])
axes[0, 1].axhline(fact, ls=”–“, shade=”black”, label=f”fact = {fact:.2f}”)
axes[0, 1].set_title(“Estimated imply happiness vs floor fact”)
axes[0, 1].set_ylabel(“Imply happiness”); axes[0, 1].legend()
axes[0, 1].tick_params(axis=”x”, rotation=20)
w_ipw = adjusted_ipw.to_df()[“weight”].values
axes[1, 0].hist(w_ipw, bins=40, shade=”steelblue”, edgecolor=”white”)
axes[1, 0].set_title(
f”IPW weight distributionn”
f”min={w_ipw.min():.2f} median={np.median(w_ipw):.2f} max={w_ipw.max():.2f}”
)
axes[1, 0].set_xlabel(“weight”); axes[1, 0].set_ylabel(“rely”)
ages = sample_df[“age”].values
bins = np.linspace(18, 90, 31)
axes[1, 1].hist(target_df[“age”], bins=bins, density=True, alpha=0.45,
shade=”inexperienced”, label=”Goal (fact)”)
axes[1, 1].hist(ages, bins=bins, density=True, alpha=0.45,
shade=”pink”, label=”Pattern (biased)”)
axes[1, 1].hist(ages, bins=bins, density=True, alpha=0.45,
shade=”blue”, weights=w_ipw, label=”Pattern (IPW-weighted)”)
axes[1, 1].set_title(“Age distribution: bias correction by IPW”)
axes[1, 1].set_xlabel(“Age”); axes[1, 1].set_ylabel(“density”); axes[1, 1].legend()
plt.tight_layout()
plt.savefig(“balance_diagnostics.png”, dpi=110, bbox_inches=”tight”)
plt.present()
print(“n” + “=” * 60)
print(” ADVANCED — controlling variance with max_de”)
print(“=” * 60)
print(“max_de=1.5 trims excessive weights so the design impact stays ≤ 1.5,”)
print(“buying and selling a bit bias for tighter confidence intervals.n”)
adjusted_trim = sample_with_target.modify(methodology=”ipw”, max_de=1.5)
print(adjusted_trim.abstract())
out = adjusted_ipw.to_df()
out.to_csv(“balance_weighted_sample.csv”, index=False)
print(“nSaved weighted pattern → balance_weighted_sample.csv”)
print(“Saved diagnostics plot → balance_diagnostics.png”)
print(“nFirst 5 rows of weighted output:”)
print(out.head())
err_naive = abs(sample_df[“happiness”].imply() – fact)
err_ipw = abs(outcome_means[“IPW”] – fact)
print(“n” + “=” * 60)
print(” BIAS REDUCTION SUMMARY”)
print(“=” * 60)
print(f”Naive estimator error : {err_naive:.3f}”)
print(f”IPW estimator error : {err_ipw:.3f}”)
print(f”Bias discount : {(1 – err_ipw / max(err_naive, 1e-9)) * 100:.1f}%”)

