Skip to content

Commit 290b13a

Browse files
authored
Merge pull request #188 from igerber/estimator-aliases
Add short aliases for all estimators
2 parents 5cc905d + 36f2d75 commit 290b13a

4 files changed

Lines changed: 71 additions & 0 deletions

File tree

diff_diff/__init__.py

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,20 @@
159159
load_mpdta,
160160
)
161161

162+
# Estimator aliases — short names for convenience
163+
DiD = DifferenceInDifferences
164+
TWFE = TwoWayFixedEffects
165+
EventStudy = MultiPeriodDiD
166+
SDiD = SyntheticDiD
167+
CS = CallawaySantAnna
168+
CDiD = ContinuousDiD
169+
SA = SunAbraham
170+
BJS = ImputationDiD
171+
Gardner = TwoStageDiD
172+
DDD = TripleDifference
173+
Stacked = StackedDiD
174+
Bacon = BaconDecomposition
175+
162176
__version__ = "2.6.0"
163177
__all__ = [
164178
# Estimators
@@ -174,6 +188,19 @@
174188
"TripleDifference",
175189
"TROP",
176190
"StackedDiD",
191+
# Estimator aliases (short names)
192+
"DiD",
193+
"TWFE",
194+
"EventStudy",
195+
"SDiD",
196+
"CS",
197+
"CDiD",
198+
"SA",
199+
"BJS",
200+
"Gardner",
201+
"DDD",
202+
"Stacked",
203+
"Bacon",
177204
# Bacon Decomposition
178205
"BaconDecomposition",
179206
"BaconDecompositionResults",

docs/api/estimators.rst

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ for backward compatibility, so you can import any of them using:
1717
1818
from diff_diff import DifferenceInDifferences, TwoWayFixedEffects, MultiPeriodDiD, SyntheticDiD
1919
20+
Most estimators have short aliases (``TROP`` already uses its short canonical name):
21+
22+
.. code-block:: python
23+
24+
from diff_diff import DiD, TWFE, EventStudy, SDiD, CS, CDiD, SA, BJS, Gardner, DDD, Stacked, Bacon
25+
2026
.. module:: diff_diff.estimators
2127

2228
DifferenceInDifferences

docs/quickstart.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ The simplest DiD design has two groups (treated/control) and two periods (pre/po
2222
import pandas as pd
2323
from diff_diff import DifferenceInDifferences, generate_did_data
2424
25+
# Tip: most estimators have short aliases, e.g. DiD, TWFE, CS, DDD
26+
# from diff_diff import DiD
27+
2528
# Generate synthetic data with a known treatment effect
2629
data = generate_did_data(
2730
n_units=100,

tests/test_aliases.py

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
"""Tests for estimator short aliases."""
2+
3+
import diff_diff
4+
5+
6+
def test_alias_identity():
7+
"""Each alias is the same class object as the full name."""
8+
assert diff_diff.DiD is diff_diff.DifferenceInDifferences
9+
assert diff_diff.TWFE is diff_diff.TwoWayFixedEffects
10+
assert diff_diff.EventStudy is diff_diff.MultiPeriodDiD
11+
assert diff_diff.SDiD is diff_diff.SyntheticDiD
12+
assert diff_diff.CS is diff_diff.CallawaySantAnna
13+
assert diff_diff.CDiD is diff_diff.ContinuousDiD
14+
assert diff_diff.SA is diff_diff.SunAbraham
15+
assert diff_diff.BJS is diff_diff.ImputationDiD
16+
assert diff_diff.Gardner is diff_diff.TwoStageDiD
17+
assert diff_diff.DDD is diff_diff.TripleDifference
18+
assert diff_diff.Stacked is diff_diff.StackedDiD
19+
assert diff_diff.Bacon is diff_diff.BaconDecomposition
20+
21+
22+
def test_aliases_in_all():
23+
"""All aliases are listed in __all__."""
24+
aliases = [
25+
"DiD", "TWFE", "EventStudy", "SDiD", "CS", "CDiD",
26+
"SA", "BJS", "Gardner", "DDD", "Stacked", "Bacon",
27+
]
28+
for alias in aliases:
29+
assert alias in diff_diff.__all__, f"{alias} missing from __all__"
30+
31+
32+
def test_alias_instantiation():
33+
"""Instantiating via alias produces the correct type."""
34+
model = diff_diff.DiD()
35+
assert isinstance(model, diff_diff.DifferenceInDifferences)

0 commit comments

Comments
 (0)