Skip to content

Evidence inventory: entry x configuration x output

Generated by python scripts/build_evidence_inventory.py from statspai.validation_scope.SCOPES. Do not edit by hand; --check is the drift gate.

Each estimator below has a configuration grid: one value per dimension. The table counts the cells in which an output has reference evidence, meaning a known-truth (T1) or same-byte cross-language (T2) artifact ran that configuration and compared that output. A function-level tier says nothing about which cells those are. For one fitted result, call sp.validation_scope(result).

Functions without a scope map are not listed. That is not a claim that they lack evidence: they carry function-level evidence only (sp.parity_status).

Cells with reference evidence, by output

Function Cells estimate se vcov joint_test diagnostic interval Fully covered
aipw 512 32 / 512 17 / 512 -- -- -- -- 17 / 512
callaway_santanna 69120 1380 / 69120 686 / 69120 1 / 69120 257 / 69120 -- -- 686 / 69120
causal_forest 96 0 / 96 0 / 96 -- -- -- -- 0 / 96
did_2x2 80 20 / 80 20 / 80 -- -- -- 3 / 80 20 / 80
did_imputation 240 36 / 240 13 / 240 1 / 240 -- -- -- 12 / 240
did_multiplegt_dyn 18432 136 / 18432 37 / 18432 26 / 18432 36 / 18432 -- -- 37 / 18432
dml 9120 33 / 9120 30 / 9120 -- -- -- -- 30 / 9120
ebalance 16 10 / 16 3 / 16 -- -- -- -- 3 / 16
etwfe 128 16 / 128 16 / 128 3 / 128 -- -- -- 16 / 128
etwfe_glm 2880 51 / 2880 36 / 2880 -- -- -- -- 36 / 2880
event_study 1536 138 / 1536 138 / 1536 3 / 1536 -- -- 3 / 1536 138 / 1536
fast.feols 12 12 / 12 6 / 12 -- -- -- -- 6 / 12
feols 144 72 / 144 29 / 144 -- -- -- -- 27 / 144
g_computation 48 16 / 48 5 / 48 -- -- -- -- 5 / 48
gardner_did 64 24 / 64 7 / 64 1 / 64 -- -- -- 7 / 64
glm 320 144 / 320 32 / 320 -- -- -- -- 32 / 320
heckman 12 9 / 12 6 / 12 -- -- -- -- 6 / 12
honest_did 116640 -- -- -- -- 159 / 116640 -- 159 / 116640
ipw 480 28 / 480 12 / 480 -- -- -- -- 12 / 480
iv 448 224 / 448 63 / 448 -- 3 / 448 3 / 448 -- 63 / 448
ivreg 448 224 / 448 63 / 448 -- 3 / 448 3 / 448 -- 63 / 448
logit 20 10 / 20 10 / 20 -- 3 / 20 -- -- 10 / 20
nbreg 12 9 / 12 7 / 12 -- -- -- -- 7 / 12
nnmatch 1920 17 / 1920 17 / 1920 -- -- -- -- 17 / 1920
panel 144 99 / 144 46 / 144 -- 5 / 144 -- -- 46 / 144
poisson 20 15 / 20 12 / 20 -- 2 / 20 -- -- 12 / 20
ppmlhdfe 72 54 / 72 9 / 72 -- -- -- -- 9 / 72
probit 20 10 / 20 6 / 20 -- 2 / 20 -- -- 6 / 20
psm 3200 100 / 3200 29 / 3200 -- -- -- -- 29 / 3200
qreg 14 14 / 14 9 / 14 2 / 14 -- -- -- 9 / 14
rddensity 2 1 / 2 1 / 2 -- -- 1 / 2 -- 1 / 2
rdrobust 25920 159 / 25920 159 / 25920 -- -- -- -- 159 / 25920
regress 28 28 / 28 26 / 28 -- 5 / 28 1 / 28 -- 26 / 28
sdid 288 60 / 288 27 / 288 -- -- -- -- 27 / 288
sun_abraham 108 63 / 108 63 / 108 6 / 108 -- -- 4 / 108 63 / 108
synth 12 3 / 12 1 / 12 -- -- -- -- 3 / 12
tmle 672 41 / 672 37 / 672 -- -- -- -- 37 / 672
tobit 36 18 / 36 13 / 36 -- -- -- -- 13 / 36
xtabond 88704 74 / 88704 42 / 88704 -- -- 20 / 88704 -- 42 / 88704
xtdpdsys 72576 30 / 72576 18 / 72576 -- -- 8 / 72576 -- 18 / 72576

-- means no artifact compares that output for the function at all. Fully covered counts cells whose primary outputs all have reference evidence.

Other evidence statuses

Cells whose strongest evidence for an output is not a reference row. These are reported at their own grade and are not parity.

Function Output seed_equivalence (T3) stochastic_screen (S) coverage_simulation (B) disclosure (T4) not_covered
aipw estimate 0 0 0 0 480
aipw se 0 0 0 0 495
callaway_santanna estimate 0 0 0 0 67740
callaway_santanna se 0 4 0 0 68430
callaway_santanna coverage 0 0 1 0 69119
callaway_santanna vcov 0 0 0 0 69119
callaway_santanna joint_test 0 0 0 0 68863
causal_forest estimate 3 0 0 0 93
causal_forest se 0 1 0 0 95
causal_forest coverage 0 0 1 0 95
did_2x2 estimate 0 0 0 0 60
did_2x2 se 0 0 0 0 60
did_2x2 interval 0 0 0 0 77
did_imputation estimate 0 0 0 3 201
did_imputation se 0 0 0 0 227
did_imputation vcov 0 0 0 0 239
did_multiplegt_dyn estimate 0 0 0 0 18296
did_multiplegt_dyn se 0 1 0 0 18394
did_multiplegt_dyn vcov 0 0 0 0 18406
did_multiplegt_dyn joint_test 0 0 0 0 18396
dml estimate 0 0 0 0 9087
dml se 0 0 0 3 9087
dml coverage 0 0 2 0 9118
ebalance estimate 0 0 0 0 6
ebalance se 0 0 0 3 10
etwfe estimate 0 0 0 0 112
etwfe se 0 0 0 0 112
etwfe vcov 0 0 0 0 125
etwfe_glm estimate 0 0 0 0 2829
etwfe_glm se 0 0 0 4 2840
event_study estimate 0 0 0 0 1398
event_study se 0 0 0 0 1398
event_study vcov 0 0 0 0 1533
event_study interval 0 0 0 0 1533
fast.feols estimate 0 0 0 0 0
fast.feols se 0 0 0 0 6
fast.feols coverage 0 0 1 0 11
feols estimate 0 0 0 0 72
feols se 0 0 0 0 115
g_computation estimate 0 0 0 0 32
g_computation se 0 0 0 0 43
gardner_did estimate 0 0 0 0 40
gardner_did se 0 0 0 0 57
gardner_did vcov 0 0 0 0 63
glm estimate 0 0 0 0 176
glm se 0 0 0 0 288
heckman estimate 0 0 0 0 3
heckman se 0 0 0 0 6
honest_did diagnostic 0 30 0 105 116346
ipw estimate 0 0 0 0 452
ipw se 0 0 0 0 468
iv estimate 0 0 0 0 224
iv se 0 0 0 7 378
iv coverage 0 0 1 0 447
iv diagnostic 0 0 0 0 445
iv joint_test 0 0 0 0 445
ivreg estimate 0 0 0 0 224
ivreg se 0 0 0 7 378
ivreg coverage 0 0 1 0 447
ivreg diagnostic 0 0 0 0 445
ivreg joint_test 0 0 0 0 445
logit estimate 0 0 0 0 10
logit se 0 0 0 0 10
logit joint_test 0 0 0 0 17
nbreg estimate 0 0 0 0 3
nbreg se 0 0 0 0 5
nnmatch estimate 0 0 0 0 1903
nnmatch se 0 0 0 0 1903
panel estimate 0 0 0 0 45
panel se 0 0 0 0 98
panel joint_test 0 0 0 1 138
poisson estimate 0 0 0 0 5
poisson se 0 0 0 0 8
poisson joint_test 0 0 0 0 18
ppmlhdfe estimate 0 0 0 0 18
ppmlhdfe se 0 0 0 0 63
probit estimate 0 0 0 0 10
probit se 0 0 0 4 10
probit joint_test 0 0 0 0 18
psm estimate 0 0 0 0 3100
psm se 0 0 0 2 3169
qreg estimate 0 0 0 0 0
qreg se 0 0 0 0 5
qreg vcov 0 0 0 0 12
rddensity estimate 0 0 0 0 1
rddensity se 0 0 0 0 1
rddensity diagnostic 0 0 0 0 1
rdrobust estimate 0 0 0 0 25761
rdrobust se 0 0 0 0 25761
rdrobust coverage 0 0 1 0 25919
regress estimate 0 0 0 0 0
regress se 0 0 0 0 2
regress coverage 0 0 1 0 27
regress diagnostic 0 0 0 0 27
regress joint_test 0 0 0 0 23
sdid estimate 0 0 0 0 228
sdid se 0 11 0 0 250
sdid coverage 0 0 1 0 287
sun_abraham estimate 0 0 0 0 45
sun_abraham se 0 0 0 0 45
sun_abraham coverage 0 0 1 0 107
sun_abraham vcov 0 0 0 0 102
sun_abraham interval 0 0 0 0 104
synth estimate 0 0 0 1 8
synth se 0 0 0 0 11
tmle estimate 0 0 0 0 631
tmle se 0 0 0 2 633
tobit estimate 0 0 0 0 18
tobit se 0 0 0 0 23
xtabond estimate 0 0 0 0 88630
xtabond se 0 0 0 0 88662
xtabond diagnostic 0 0 0 0 88684
xtdpdsys estimate 0 0 0 0 72546
xtdpdsys se 0 0 0 0 72558
xtdpdsys diagnostic 0 0 0 0 72568

Artifacts per function

aipw

Dimensions: estimand in {ate, att}; cross_fit in {true, false}; se_method in {influence, sandwich}; outcome_model in {linear, logit, probit, poisson}; propensity in {logit, known}; trim in {inactive, binding}; weights in {none, set}; cluster in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se estimand=ate; cross_fit=false; se_method=sandwich; outcome_model=linear; propensity=logit; trim=inactive; weights=none/set; cluster=none/set tests/reference_parity/test_teffects_design_stata_parity.py sp.aipw(...)
T2 estimate, se estimand=ate; cross_fit=false; se_method=sandwich; outcome_model=logit/poisson/probit; propensity=logit; trim=inactive; weights=none/set; cluster=none tests/reference_parity/test_aipw_outcome_models_stata_parity.py sp.aipw(...)
T2 estimate, se estimand=ate; cross_fit=false; se_method=sandwich; outcome_model=logit/poisson/probit; propensity=logit; trim=inactive; weights=none; cluster=set tests/reference_parity/test_aipw_outcome_models_stata_parity.py sp.aipw(...)
T2 estimate, se estimand=ate; cross_fit=false; se_method=influence; outcome_model=linear; propensity=logit; trim=inactive; weights=none; cluster=none tests/reference_parity/test_teffects_R_parity.py sp.aipw(...)
T1 estimate, se estimand=att; cross_fit=false; se_method=influence; outcome_model=linear; propensity=logit; trim=inactive; weights=none; cluster=none tests/reference_parity/test_teffects_R_parity.py sp.aipw(...)
T1 estimate, se estimand=ate/att; cross_fit=true; se_method=influence; outcome_model=linear; propensity=logit; trim=inactive; weights=none; cluster=none tests/reference_parity/test_aipw_crossfit_identity.py sp.aipw(...)
T2 estimate, se estimand=ate; cross_fit=false; se_method=influence; outcome_model=linear; propensity=logit; trim=inactive; weights=none; cluster=none tests/reference_parity/test_yuksel_aydede_causal_ml_parity.py sp.aipw(...)

se_method is ignored for estimate: the point estimate is computed before, and independently of, the variance estimator

callaway_santanna

Dimensions: sample in {panel, unbalanced_panel, rcs, unbalanced_pair}; estimator in {dr, drimp, reg, ipw, ipw_abadie}; control_group in {nevertreated, notyettreated}; notyet_cutoff in {period, asinr, cohort}; weights in {none, weighted}; covariates in {none, set}; inference in {analytic, bootstrap}; base_period in {universal, varying}; anticipation in {0, >0}; clustering in {none, set}; parity in {none, r, stata}; variance_convention in {na, delta, reference}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se sample=panel; estimator=reg; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/r_parity/04_csdid.py sp.callaway_santanna(estimator='reg') + sp.aggte(bstrap=False)
T2 estimate, se sample=panel; estimator=dr/ipw/reg; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none/weighted; covariates=none/set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_weighted_parity.py sp.callaway_santanna(...)
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_aggte_mpdta_parity.py sp.aggte(cs_result, type=agg_type, bstrap=False)
T2 vcov sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_aggte_vcov_r_parity.py sp.aggte(type='dynamic')
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal/varying; anticipation=0/>0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_gaps_parity.py sp.callaway_santanna(panel, ...)
T2 estimate, se sample=unbalanced_panel; estimator=dr/ipw/reg; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=na/reference tests/reference_parity/test_cs_gaps_parity.py sp.callaway_santanna(unbalanced, ...)
T2 estimate, se sample=panel/rcs; estimator=dr/reg; control_group=notyettreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal/varying; anticipation=0/>0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_no_never_unbalanced_parity.py sp.callaway_santanna(df, **kw)
T2 estimate, se sample=unbalanced_panel; estimator=dr/reg; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_no_never_unbalanced_parity.py sp.callaway_santanna(df, **kw)
T2 estimate, se sample=panel/rcs; estimator=dr; control_group=notyettreated; notyet_cutoff=period; weights=none; covariates=none/set; inference=analytic; base_period=universal/varying; anticipation=0/>0; clustering=none; parity=none; variance_convention=na/reference tests/reference_parity/test_cs_notyet_cutoff_parity.py sp.callaway_santanna(
T2 estimate, se sample=rcs; estimator=dr/ipw/reg; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=na/reference tests/reference_parity/test_cs_rcs_parity.py sp.callaway_santanna(
T2 estimate sample=rcs; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=delta tests/reference_parity/test_cs_rcs_parity.py sp.callaway_santanna(panel=False, estimator='dr', x=...)
T2 estimate sample=rcs; estimator=reg; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_rcs_aggregation_conventions.py sp.callaway_santanna(
T2 estimate sample=panel; estimator=reg; control_group=notyettreated; notyet_cutoff=asinr/cohort/period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_conventions_stata_parity.py sp.callaway_santanna(
T2 estimate sample=panel; estimator=ipw/ipw_abadie; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_conventions_stata_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=reg; control_group=notyettreated; notyet_cutoff=asinr/cohort; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_options_stata_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=ipw_abadie; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_options_stata_parity.py sp.callaway_santanna(
T2 estimate, se sample=unbalanced_pair; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_options_stata_parity.py sp.callaway_santanna(
T2 estimate, se sample=unbalanced_pair; estimator=reg; control_group=notyettreated; notyet_cutoff=cohort; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_csdid_options_stata_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel/rcs; estimator=drimp/ipw_abadie; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=drimp; control_group=notyettreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=varying; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=ipw; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=set; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=rcs; estimator=ipw; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=weighted; covariates=set; inference=analytic; base_period=universal; anticipation=>0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=reg; control_group=notyettreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=varying; anticipation=>0; clustering=set; parity=none; variance_convention=na tests/reference_parity/test_cs_options_R_parity.py sp.callaway_santanna(
T2 estimate, se sample=panel/rcs; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=set; parity=none; variance_convention=na tests/reference_parity/test_cs_rc_cluster_csdid_parity.py sp.callaway_santanna(clustervars=...)
T2 estimate, se sample=rcs; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=weighted; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none/set; parity=none; variance_convention=na tests/reference_parity/test_cs_rc_weighted_aggte_did_parity.py sp.callaway_santanna(panel=False, weights=...) + sp.aggte
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_cs_balance_full_did_parity.py sp.callaway_santanna(balance='full')
T2 estimate, se sample=panel/unbalanced_panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal/varying; anticipation=0; clustering=set; parity=none; variance_convention=na tests/reference_parity/test_cs_cluster_analytic_parity.py sp.callaway_santanna(clustervars=...)
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal/varying; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_stata_did_commands_parity.py sp.callaway_santanna(
T4 estimate, se sample=panel; estimator=dr/drimp; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=set; inference=analytic; base_period=universal/varying; anticipation=0; clustering=none; parity=none; variance_convention=na tests/reference_parity/test_stata_did_commands_parity.py sp.stata(
T2 estimate, se, joint_test sample=panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none/set; parity=r; variance_convention=na tests/reference_parity/test_cs_parity_switch.py sp.callaway_santanna(
T2 estimate, se, joint_test sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=varying; anticipation=>0; clustering=none; parity=r; variance_convention=na tests/reference_parity/test_cs_parity_switch.py sp.callaway_santanna(
T2 estimate, se, joint_test sample=panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=cohort/period; weights=none; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none/set; parity=stata; variance_convention=na tests/reference_parity/test_cs_parity_switch.py sp.callaway_santanna(
T2 estimate, se sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=bootstrap; base_period=varying; anticipation=0; clustering=none; parity=stata; variance_convention=na tests/reference_parity/test_cs_parity_switch.py sp.callaway_santanna(
T2 estimate, se, joint_test sample=panel/rcs/unbalanced_panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=period; weights=none/weighted; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none/set; parity=r; variance_convention=na/reference tests/reference_parity/test_cs_parity_rc_unbal.py sp.callaway_santanna(
T2 estimate, se, joint_test sample=rcs/unbalanced_pair; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=cohort/period; weights=none/weighted; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none/set; parity=stata; variance_convention=na/reference tests/reference_parity/test_cs_parity_rc_unbal.py sp.callaway_santanna(
T2 estimate, se, joint_test sample=panel; estimator=dr; control_group=nevertreated/notyettreated; notyet_cutoff=cohort/period; weights=weighted; covariates=none/set; inference=analytic; base_period=varying; anticipation=0; clustering=none/set; parity=stata; variance_convention=na tests/reference_parity/test_cs_parity_rc_unbal.py sp.callaway_santanna(
S se sample=panel; estimator=dr; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=bootstrap; base_period=universal; anticipation=0; clustering=none/set; parity=none; variance_convention=na tests/reference_parity/test_cs_inference_parity.py sp.callaway_santanna(bstrap=True)
B coverage sample=panel; estimator=reg; control_group=nevertreated; notyet_cutoff=period; weights=none; covariates=none; inference=analytic; base_period=universal; anticipation=0; clustering=none; parity=none; variance_convention=na tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.callaway_santanna(estimator='reg')

inference is ignored for estimate: the multiplier bootstrap resamples influence functions for SEs and bands; the ATT(g,t) and their aggregates are unchanged

base_period is ignored for estimate, se: the headline is the simple aggregate of the post-treatment cells, whose base period is g - 1 - anticipation under both schemes; only the pre-treatment placebos (and so the event-study covariance) differ (asserted equal in tests/test_validation_scope.py)

causal_forest

Dimensions: treatment in {binary, continuous}; trees in {100, 200, 300, 500, 1000, 2000, 4000, 8000}; tuning in {grf_defaults, custom}; design in {iid, clustered, fixed_effects}.

Kind Outputs Configuration run Artifact Entry point
T3 estimate treatment=binary; trees=2000/500/8000; tuning=grf_defaults; design=iid tests/reference_parity/test_grf_seed_mc_equivalence.py sp.causal_forest(...).average_treatment_effect()
S estimate, se treatment=binary; trees=2000; tuning=grf_defaults; design=iid tests/r_parity/13_causal_forest.py sp.causal_forest(n_estimators=2000)
B coverage treatment=binary; trees=2000; tuning=grf_defaults; design=iid tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.causal_question(design='causal_forest')

did_2x2

Dimensions: vce in {classical, hc1, cluster, wild, survey}; weights in {none, set}; covariates in {none, set}; crit_dist in {t_resid, t_cluster, t_design, bootstrap}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=hc1; weights=set; covariates=none; crit_dist=t_resid tests/reference_parity/test_did2x2_ddd_weighted_robust_parity.py sp.did_2x2(
T2 estimate, se vce=survey; weights=none; covariates=none; crit_dist=t_design tests/reference_parity/test_survey_did_parity.py sp.did_2x2(
T2 estimate, se vce=survey; weights=none; covariates=none; crit_dist=t_design tests/reference_parity/test_survey_replicate_parity.py sp.did_2x2(
T2 estimate, se, interval vce=cluster; weights=none/set; covariates=none; crit_dist=t_cluster tests/reference_parity/test_es_crit_parity.py sp.did_2x2(
T2 estimate, se, interval vce=hc1; weights=none; covariates=none; crit_dist=t_resid tests/reference_parity/test_es_crit_parity.py sp.did_2x2(

crit_dist is ignored for estimate, se: the critical value turns the SE into a p-value and an interval; the ATT and its SE are computed before it is chosen (asserted equal across parity= / crit_dist= in tests/reference_parity/test_es_crit_default.py; crit_dist='t' there is the same fit as parity='stata')

did_imputation

Dimensions: fe in {unit_time, time, none, custom}; covariates in {none, controls, time_covariates, unit_covariates, mixed}; vce in {analytic, bootstrap, none}; weights in {none, set}; horizon in {overall, horizons}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate vce=analytic; weights=none; horizon=overall; fe=unit_time; covariates=none tests/r_parity/16_bjs.py sp.did_imputation()
T2 estimate vce=analytic; weights=none; horizon=overall; fe=none/time/unit_time; covariates=none tests/reference_parity/test_bjs_fe_covariates_parity.py sp.did_imputation(fe=...)
T2 estimate vce=analytic; weights=none; horizon=overall; fe=unit_time; covariates=controls/time_covariates tests/reference_parity/test_bjs_fe_covariates_parity.py sp.did_imputation(controls=...|time_covariates=...)
T4 estimate vce=analytic; weights=none; horizon=overall; fe=unit_time; covariates=unit_covariates tests/reference_parity/test_bjs_fe_covariates_parity.py sp.did_imputation(unit_covariates=...)
T2 se vce=analytic; weights=none; horizon=overall; fe=none/time/unit_time; covariates=none tests/reference_parity/test_option_fixture_bindings.py sp.did_imputation(fe=...)
T2 se vce=analytic; weights=none; horizon=overall; fe=unit_time; covariates=controls/time_covariates/unit_covariates tests/reference_parity/test_option_fixture_bindings.py sp.did_imputation(controls=...|time_covariates=...|unit_covariates=...)
T2 estimate, se fe=unit_time; covariates=none; vce=analytic; weights=none; horizon=horizons tests/r_parity/84_bjs_pretrends.py sp.did_imputation(horizon=[...], pretrend_method='bjs')
T2 vcov fe=unit_time; covariates=none; vce=analytic; weights=none; horizon=horizons tests/reference_parity/test_event_study_vcov_Stata_parity.py sp.did_imputation(horizon=[...])
T2 estimate, se fe=custom; covariates=none; vce=analytic; weights=none; horizon=horizons/overall tests/reference_parity/test_bjs_options_parity.py sp.did_imputation(fe=[...])
T2 estimate, se fe=unit_time; covariates=controls/mixed; vce=analytic; weights=none; horizon=overall tests/reference_parity/test_bjs_options_parity.py sp.did_imputation(controls=..., time_covariates=...)
T2 estimate, se fe=unit_time; covariates=none; vce=analytic; weights=set; horizon=horizons/overall tests/reference_parity/test_bjs_options_parity.py sp.did_imputation(weights=...)
T2 estimate, se fe=custom; covariates=controls; vce=analytic; weights=set; horizon=overall tests/reference_parity/test_bjs_options_parity.py sp.did_imputation(weights=..., fe=[...], controls=...)

vce is ignored for estimate: the covariance is computed after the imputation

did_multiplegt_dyn

Dimensions: se_method in {analytic, bootstrap}; aggregation in {simple, switchers}; control in {not_yet_treated, never_treated}; switchers in {both, in, out}; same_switchers in {false, true}; controls in {none, set}; trends_nonparam in {none, set}; normalized in {false, true}; weights in {none, set}; cluster in {group, coarser}; treatment in {binary, discrete, continuous}; panel in {balanced, unbalanced}; placebo in {0, >0}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=in; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=out; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=true; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=never_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=set; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=true; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=set; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=coarser; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=in; same_switchers=false; controls=none; trends_nonparam=set; normalized=true; weights=set; cluster=coarser; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=continuous; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, vcov, joint_test se_method=analytic; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=unbalanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
S se se_method=bootstrap; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_option_values_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_multiplegt_dyn_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=in/out; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_multiplegt_dyn_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=true; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_multiplegt_dyn_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=bootstrap; aggregation=simple/switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/r_parity/78_multiplegt_dyn.py sp.did_multiplegt_dyn()
T2 estimate, se se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_multiplegt_dyn_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_multiplegt_dyn_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=set; normalized=false; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=true; weights=none; cluster=group; treatment=binary; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_options_parity.py sp.did_multiplegt_dyn()
T2 estimate se_method=analytic; aggregation=simple; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=continuous; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_options_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=true; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=true; controls=none; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=set; cluster=coarser; treatment=discrete; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=set; cluster=coarser; treatment=discrete; panel=balanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=true; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=set; normalized=false; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=in; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=discrete; panel=balanced; placebo=0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se, joint_test se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=set; trends_nonparam=none; normalized=false; weights=none; cluster=group; treatment=binary; panel=unbalanced; placebo=>0 tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.did_multiplegt_dyn()
T2 estimate, se se_method=analytic; aggregation=switchers; control=not_yet_treated; switchers=both; same_switchers=false; controls=none; trends_nonparam=none; normalized=false; weights=none/set; cluster=coarser/group; treatment=binary; panel=balanced; placebo=>0 tests/test_did_multiplegt_dyn_castle_reference.py sp.did_multiplegt_dyn()

se_method is ignored for estimate: the effects are computed before, and independently of, the variance; the bootstrap resamples afterwards

cluster is ignored for estimate: the cluster enters the variance only

dml

Dimensions: model in {plr, irm, pliv, iivm}; score in {partialling out, iv-type, ate, atte, late}; learners in {linear, default, other}; n_folds in {2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; n_rep in {1, >1}; ipw in {n/a, trim0.01, trim1e-12, other}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se model=plr; score=partialling out; learners=linear; n_folds=5; n_rep=1; ipw=n/a tests/r_parity/08_dml.py sp.dml(model='plr')
T2 estimate, se model=irm; score=ate; learners=linear; n_folds=5; n_rep=1; ipw=trim1e-12 tests/r_parity/71_dml_family.py sp.dml(model='irm')
T2 estimate, se model=pliv; score=partialling out; learners=linear; n_folds=5; n_rep=1; ipw=n/a tests/r_parity/71_dml_family.py sp.dml(model='pliv')
T2 estimate, se model=iivm; score=late; learners=linear; n_folds=5; n_rep=1; ipw=trim1e-12 tests/r_parity/71_dml_family.py sp.dml(model='iivm')
T2 estimate, se model=plr; score=partialling out; learners=other; n_folds=4; n_rep=1; ipw=n/a tests/external_parity/test_dml_classifier_nuisance_and_irm_sensitivity.py sp.dml(model='plr')
T2 estimate, se model=irm; score=ate/atte; learners=linear; n_folds=4; n_rep=1; ipw=trim0.01 tests/external_parity/test_dml_classifier_nuisance_and_irm_sensitivity.py sp.dml(model='irm')
B coverage model=plr; score=partialling out; learners=default; n_folds=5; n_rep=1; ipw=n/a tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.dml(model='plr', n_folds=5)
B coverage model=irm; score=ate; learners=default; n_folds=5; n_rep=1; ipw=trim0.01 tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.causal_question(design='dml')
T2 estimate, se model=plr; score=iv-type; learners=linear; n_folds=5; n_rep=1; ipw=n/a tests/test_dml_ivtype_reference.py sp.dml(model='plr', score='IV-type')
T2 estimate, se model=plr; score=iv-type; learners=other; n_folds=5; n_rep=1; ipw=n/a tests/test_dml_ivtype_reference.py sp.dml(model='plr', score='IV-type')
T2 estimate, se model=irm; score=ate/atte; learners=linear; n_folds=5; n_rep=1; ipw=trim0.01 tests/test_dml_ivtype_reference.py sp.dml(model='irm')
T2 estimate, se model=plr; score=iv-type/partialling out; learners=linear; n_folds=10/2/3; n_rep=1; ipw=n/a tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='plr')
T2 estimate, se model=irm; score=ate; learners=linear; n_folds=10/2/3; n_rep=1; ipw=trim0.01 tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='irm')
T2 estimate, se model=irm; score=atte; learners=linear; n_folds=3; n_rep=1; ipw=trim0.01 tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='irm')
T2 estimate, se model=irm; score=ate/atte; learners=linear; n_folds=3; n_rep=1; ipw=other tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='irm')
T2 estimate, se model=pliv; score=partialling out; learners=linear; n_folds=10/2/3; n_rep=1; ipw=n/a tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='pliv')
T2 estimate, se model=iivm; score=late; learners=linear; n_folds=10/2/3; n_rep=1; ipw=trim0.01 tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='iivm')
T2 estimate, se model=iivm; score=late; learners=linear; n_folds=3; n_rep=1; ipw=other tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='iivm')
T2 estimate model=plr; score=iv-type/partialling out; learners=linear; n_folds=5; n_rep=>1; ipw=n/a tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='plr', n_rep=3)
T2 estimate model=irm; score=ate; learners=linear; n_folds=5; n_rep=>1; ipw=trim0.01 tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='irm', n_rep=3)
T4 se model=plr; score=iv-type/partialling out; learners=linear; n_folds=5; n_rep=>1; ipw=n/a tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='plr', n_rep=3)
T4 se model=irm; score=ate; learners=linear; n_folds=5; n_rep=>1; ipw=trim0.01 tests/reference_parity/test_dml_options_doubleml_parity.py sp.dml(df, model='irm', n_rep=3)

ebalance

Dimensions: moments in {1, 2, 3, mixed}; dof_adjust in {true, false}; vce in {mestimation, naive}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se moments=1/2/3; dof_adjust=false; vce=mestimation tests/reference_parity/test_ebalance_weightit_parity.py sp.ebalance(...)
T4 se moments=1/2/3; dof_adjust=false; vce=naive tests/reference_parity/test_ebalance_weightit_parity.py sp.ebalance(...)
T2 estimate moments=1/mixed; dof_adjust=true; vce=mestimation tests/reference_parity/test_the_effect_stata_parity.py sp.ebalance(...)

vce is ignored for estimate: the point estimate is computed before, and independently of, the variance estimator

etwfe

Dimensions: family in {linear, glm}; panel in {true, false}; cgroup in {notyet, nevertreated}; controls in {none, set}; xvar in {none, set}; weights in {none, set}; agg_weights in {estimation, unit}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=false; cgroup=notyet tests/r_parity/17_etwfe.py sp.etwfe(panel=False)
T2 estimate family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated tests/r_parity/17_etwfe.py sp.etwfe(cgroup='nevertreated')
T4 se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=false; cgroup=notyet tests/r_parity/17_etwfe.py sp.etwfe(panel=False)
T4 se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated tests/r_parity/17_etwfe.py sp.etwfe(cgroup='nevertreated')
T2 vcov family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=false; cgroup=notyet tests/reference_parity/test_event_study_vcov_R_parity.py sp.etwfe(panel=False)
T2 vcov family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated tests/reference_parity/test_event_study_vcov_R_parity.py sp.etwfe(cgroup='nevertreated')
T2 estimate, vcov family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=notyet tests/reference_parity/test_validation_entry_points.py sp.etwfe()
T4 se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=notyet tests/reference_parity/test_validation_entry_points.py sp.etwfe()
T2 estimate family=linear; panel=true; cgroup=nevertreated/notyet; controls=none; xvar=none; weights=set; agg_weights=estimation tests/test_etwfe_weights_reference.py sp.etwfe(panel, ..., weights=...)
T4 se family=linear; panel=true; cgroup=nevertreated/notyet; controls=none; xvar=none; weights=set; agg_weights=estimation tests/test_etwfe_weights_reference.py sp.etwfe(panel, ..., weights=...)
T2 estimate family=linear; panel=true; cgroup=nevertreated/notyet; controls=none; xvar=none; weights=set; agg_weights=unit tests/test_etwfe_weights_reference.py sp.etwfe(panel, ..., weights=...)
T4 se family=linear; panel=true; cgroup=nevertreated/notyet; controls=none; xvar=none; weights=set; agg_weights=unit tests/test_etwfe_weights_reference.py sp.etwfe(panel, ..., weights=...)
T2 estimate, se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated/notyet tests/test_etwfe_emfx_reference.py sp.etwfe(castle, ...)
T2 estimate, se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation/unit; panel=true; cgroup=nevertreated/notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=linear; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=false; cgroup=notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=linear; controls=none; xvar=none; weights=set; agg_weights=estimation/unit; panel=true; cgroup=nevertreated/notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=linear; controls=none; xvar=set; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated/notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=linear; controls=set; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated/notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=glm; controls=none; xvar=none; weights=none; agg_weights=estimation; panel=true; cgroup=nevertreated/notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=glm; controls=none; xvar=set; weights=none; agg_weights=estimation; panel=true; cgroup=notyet tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)

etwfe_glm

Dimensions: family in {poisson, logit, gaussian}; cgroup in {notyet, nevertreated}; fe in {cohort, unit}; hettype in {timecohort, time, cohort, event, twfe}; scale in {response, link}; response_se in {profile, margins, unconditional}; controls in {none, set}; xvar in {none, set}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate family=logit/poisson; cgroup=notyet; fe=cohort; hettype=timecohort; scale=response; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_glm_parity.py sp.etwfe(family='poisson'|'logit')
T4 se family=logit/poisson; cgroup=notyet; fe=cohort; hettype=timecohort; scale=response; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_glm_parity.py sp.etwfe(family='poisson'|'logit')
T2 estimate, se family=logit/poisson; cgroup=nevertreated/notyet; fe=cohort; hettype=timecohort; scale=link/response; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=poisson; cgroup=notyet; fe=cohort; hettype=timecohort; scale=link/response; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate family=logit/poisson; cgroup=nevertreated/notyet; fe=cohort; hettype=timecohort; scale=response; response_se=unconditional; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T4 se family=logit/poisson; cgroup=nevertreated/notyet; fe=cohort; hettype=timecohort; scale=response; response_se=unconditional; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_options_parity.py sp.etwfe(panel, **args)
T2 estimate, se family=gaussian; cgroup=notyet; fe=unit; hettype=cohort/event/time/timecohort/twfe; scale=link; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_linear_jwdid_parity.py sp.etwfe(df, y, group, time, first_treat, fe='unit' | hettype=...)
T2 estimate, se family=gaussian; cgroup=nevertreated; fe=unit; hettype=cohort/event/timecohort; scale=link; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_linear_jwdid_parity.py sp.etwfe(df, y, group, time, first_treat, fe='unit' | hettype=...)
T2 estimate, se family=gaussian; cgroup=notyet; fe=unit; hettype=event/timecohort; scale=link; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_linear_jwdid_parity.py sp.etwfe(df, y, group, time, first_treat, fe='unit' | hettype=...)
T2 estimate, se family=gaussian; cgroup=nevertreated; fe=unit; hettype=timecohort; scale=link; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_linear_jwdid_parity.py sp.etwfe(df, y, group, time, first_treat, fe='unit' | hettype=...)
T2 estimate family=poisson; cgroup=notyet; fe=unit; hettype=cohort/event/time/timecohort/twfe; scale=response; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(panel, family='poisson', fe='unit', ...)
T2 estimate family=poisson; cgroup=nevertreated; fe=unit; hettype=cohort/event/timecohort; scale=response; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(panel, family='poisson', fe='unit', ...)
T2 estimate family=poisson; cgroup=notyet; fe=unit; hettype=event/timecohort; scale=response; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(panel, family='poisson', fe='unit', ...)
T2 estimate family=poisson; cgroup=nevertreated; fe=unit; hettype=timecohort; scale=response; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(panel, family='poisson', fe='unit', ...)
T2 estimate, se family=poisson; cgroup=notyet; fe=unit; hettype=timecohort; scale=response; response_se=margins; controls=none; xvar=none/set; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(panel, family='poisson', fe='unit', response_se='margins')
T2 estimate, se family=poisson; cgroup=notyet; fe=unit; hettype=cohort/event/time/timecohort/twfe; scale=link; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(df, family='poisson', fe='unit', scale='link', ...)
T2 estimate, se family=poisson; cgroup=nevertreated; fe=unit; hettype=cohort/event/timecohort; scale=link; response_se=profile; controls=none; xvar=none; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(df, family='poisson', fe='unit', scale='link', ...)
T2 estimate, se family=poisson; cgroup=notyet; fe=unit; hettype=event/timecohort; scale=link; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(df, family='poisson', fe='unit', scale='link', ...)
T2 estimate, se family=poisson; cgroup=nevertreated; fe=unit; hettype=timecohort; scale=link; response_se=profile; controls=none; xvar=set; weights=none tests/reference_parity/test_etwfe_poisson_jwdid_parity.py sp.etwfe(df, family='poisson', fe='unit', scale='link', ...)
T2 estimate, se family=gaussian; cgroup=nevertreated/notyet; fe=unit; hettype=timecohort; scale=link; response_se=profile; controls=set; xvar=none; weights=none tests/reference_parity/test_etwfe_linear_jwdid_parity.py sp.etwfe(df, y, group, time, first_treat, fe='unit' | hettype=...)

event_study

Dimensions: adoption in {single_date, staggered}; window in {-4_4, other}; ref_period in {-1, other}; covariates in {none, set}; weights in {none, set}; cluster in {unit, other}; bins in {none, set}; intensity in {none, set}; absorb in {none, set}; crit_dist in {normal, t_resid, t_cluster}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se adoption=single_date; window=-4_4; ref_period=-1; covariates=none; weights=none; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/r_parity/85_twfe_event_study.py sp.event_study(window=(-4, 4), cluster='unit')
T2 vcov adoption=single_date; window=-4_4; ref_period=-1; covariates=none; weights=none; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_vcov_R_parity.py sp.event_study(window=(-4, 4), cluster='unit')
T2 estimate, se adoption=single_date/staggered; window=-4_4/other; ref_period=-1/other; covariates=none/set; weights=none/set; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_grid_R_parity.py sp.event_study(covariates=..., weights=...)
T2 estimate, se adoption=staggered; window=-4_4/other; ref_period=-1/other; covariates=none; weights=none; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=-4_4; ref_period=-1; covariates=none; weights=none/set; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=-4_4; ref_period=-1; covariates=set; weights=set; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=-4_4; ref_period=-1; covariates=none/set; weights=none; cluster=other; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=single_date; window=-4_4; ref_period=-1; covariates=none; weights=set; cluster=other; bins=none; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=other; ref_period=other; covariates=none; weights=none; cluster=unit; bins=set; intensity=none; absorb=none/set; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=single_date; window=other; ref_period=other; covariates=set; weights=none; cluster=unit; bins=set; intensity=none; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=single_date; window=-4_4; ref_period=-1; covariates=none; weights=none/set; cluster=unit; bins=none; intensity=set; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=single_date; window=other; ref_period=-1; covariates=none; weights=none; cluster=other; bins=none; intensity=set; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=-4_4; ref_period=-1; covariates=none; weights=none; cluster=unit; bins=none; intensity=set; absorb=none; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=staggered; window=-4_4; ref_period=-1; covariates=none/set; weights=none; cluster=unit; bins=none; intensity=none; absorb=set; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se adoption=single_date; window=-4_4; ref_period=-1; covariates=none; weights=set; cluster=unit; bins=none; intensity=none; absorb=set; crit_dist=normal tests/reference_parity/test_event_study_options_R_parity.py sp.event_study(...)
T2 estimate, se, interval adoption=staggered; window=other; ref_period=-1; covariates=none; weights=set; cluster=other/unit; bins=none; intensity=none; absorb=none; crit_dist=t_cluster tests/reference_parity/test_es_crit_parity.py sp.event_study(
T2 estimate, se, interval adoption=staggered; window=other; ref_period=-1; covariates=none; weights=none; cluster=unit; bins=none; intensity=none; absorb=none; crit_dist=t_cluster tests/reference_parity/test_es_crit_parity.py sp.event_study(

crit_dist is ignored for estimate, se, vcov, joint_test: the critical value turns an SE into a p-value and an interval; coefficients, SEs and the pre-trend test are computed before it is chosen (asserted equal across parity= in tests/reference_parity/test_es_crit_parity.py)

fast.feols

Dimensions: vcov in {iid, hc1, cr1}; ssc in {fixest, statspai}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vcov=iid; ssc=fixest; weights=none tests/r_parity/03_hdfe.py sp.fast.feols(vcov='iid')
T2 estimate, se vcov=cr1; ssc=fixest; weights=none tests/r_parity/15_hdfe_cluster.py sp.fast.feols(vcov='cr1')
B coverage vcov=cr1; ssc=fixest; weights=none tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.fast.feols(vcov='cr1')
T2 estimate, se vcov=cr1/hc1/iid; ssc=fixest; weights=none/set tests/reference_parity/test_fast_feols_weights_fixest_parity.py sp.fast.feols(formula, data, weights=..., vcov=...)

vcov is ignored for estimate: the least-squares / k-class point estimate is computed before, and independently of, the covariance estimator

ssc is ignored for estimate: the small-sample factor scales the covariance only

feols

Dimensions: fe in {none, one, multi}; iv in {false, true}; vcov in {iid, hetero, cr1, cr3, cluster_multiway, other}; weights in {none, set}; ssc in {default, custom}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se fe=multi/none/one; iv=false; vcov=cluster_multiway/cr1/hetero/iid; weights=none/set; ssc=default tests/reference_parity/test_feols_grid_fixest_parity.py sp.feols(...)
T2 estimate, se fe=multi; iv=false; vcov=cluster_multiway/iid; weights=none; ssc=default tests/external_parity/test_gow_ding_accounting.py sp.feols(...)
T2 estimate, se fe=one; iv=false; vcov=cr1; weights=none; ssc=default tests/reference_parity/test_sasp_within_parity.py sp.feols(...)
T2 estimate, se fe=multi; iv=false; vcov=cr1; weights=none/set; ssc=default tests/reference_parity/test_castle_stata_parity.py sp.feols(...)
T2 estimate, se fe=multi; iv=false; vcov=cr1; weights=none; ssc=default tests/reference_parity/test_feols_multiref_R_parity.py sp.feols(...)
T2 estimate, se fe=multi; iv=false; vcov=cluster_multiway; weights=none; ssc=default tests/reference_parity/test_accounting_research_parity.py sp.feols(...)
T2 se fe=none; iv=false/true; vcov=cr1/hetero; weights=none; ssc=custom tests/reference_parity/test_ssc_presets_Stata_parity.py sp.feols(...)
T2 se fe=one; iv=false; vcov=cr1; weights=none; ssc=custom tests/reference_parity/test_ssc_presets_Stata_parity.py sp.feols(...)

vcov is ignored for estimate: the point estimate is computed before, and independently of, the covariance estimator

ssc is ignored for estimate: the point estimate is computed before, and independently of, the covariance estimator

g_computation

Dimensions: estimand in {ate, att, atc}; by_arm in {true, false}; ps in {none, set}; se_method in {bootstrap, analytic}; ml_q in {ols, other}.

Kind Outputs Configuration run Artifact Entry point
T1 estimate estimand=atc/ate/att; by_arm=false; ps=none; se_method=bootstrap; ml_q=ols tests/test_inference_scan3_weighting.py sp.g_computation(...)
T1 se estimand=ate; by_arm=false; ps=none; se_method=bootstrap; ml_q=ols tests/test_inference_scan3_weighting.py sp.g_computation(...)
T1 estimate, se estimand=ate/att; by_arm=true; ps=none/set; se_method=analytic; ml_q=ols tests/test_inference_scan3_weighting.py sp.g_computation(...)
T1 estimate estimand=ate; by_arm=false; ps=none; se_method=bootstrap; ml_q=other tests/reference_parity/test_gformula_parity.py sp.g_computation(...)

se_method is ignored for estimate: the point estimate is computed before, and independently of, the variance estimator

gardner_did

Dimensions: vce in {analytic, stage2, bootstrap, none}; weights in {none, set}; covariates in {none, set}; event_study in {off, on}; form in {first_treat, general}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=analytic; weights=none/set; covariates=none/set; event_study=off; form=general tests/reference_parity/test_stata_did_commands_parity.py sp.gardner_did(treat=, fe=)
T2 estimate, se vce=analytic; weights=none; covariates=none; form=first_treat; event_study=off tests/r_parity/73_did2s.py sp.gardner_did()
T2 estimate, se, vcov vce=analytic; weights=none; covariates=none; form=first_treat; event_study=on tests/reference_parity/test_event_study_vcov_R_parity.py sp.gardner_did(event_study=True)
T2 estimate, se vce=stage2; weights=none; covariates=none; form=first_treat; event_study=off tests/reference_parity/test_gardner_stage2_R_parity.py sp.gardner_did(vce='stage2')

vce is ignored for estimate: the covariance is computed after the two stages

glm

Dimensions: family_link in {gaussian_identity, gaussian_log, binomial_logit, binomial_probit, binomial_cloglog, binomial_cauchit, poisson_log, gamma_log, inverse_gaussian_log, other}; vce in {classical, robust, hc0, hc1, hc2, hc3, hac, cluster}; weights in {none, set}; information in {observed, expected}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se family_link=binomial_cloglog/binomial_logit/binomial_probit/gaussian_identity/gaussian_log/poisson_log; vce=classical/cluster/robust; weights=none; information=observed tests/reference_parity/test_vce_grammar_stata_parity.py sp.glm(...)
T2 estimate, se family_link=binomial_logit/poisson_log; vce=classical; weights=none; information=observed tests/reference_parity/test_glm_parity.py sp.glm(...)
T2 estimate, se family_link=gamma_log/inverse_gaussian_log; vce=classical; weights=none; information=expected/observed tests/reference_parity/test_glm_dispersion_stata_r_parity.py sp.glm(...)
T2 estimate, se family_link=binomial_cauchit; vce=classical; weights=none; information=expected tests/reference_parity/test_linear_model_extensions_parity.py sp.glm(...)
T2 estimate, se family_link=binomial_logit/poisson_log; vce=hc0/hc1/hc2/hc3; weights=none; information=observed tests/reference_parity/test_ml_sandwich_r_parity.py sp.glm(...)
T2 se family_link=binomial_probit; vce=hc0; weights=none; information=expected tests/reference_parity/test_ml_sandwich_r_parity.py sp.glm(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

information is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

heckman

Dimensions: method in {twostep, ml}; vce in {classical, robust, cluster}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se method=twostep; vce=classical; weights=none tests/r_parity/43_heckman.py sp.heckman(...)
T1 se method=twostep; vce=classical; weights=none tests/reference_parity/test_heckman_se_parity.py sp.heckman(...)
T2 estimate, se method=ml; vce=classical/cluster/robust; weights=none tests/reference_parity/test_ldv_design_stata_parity.py sp.heckman(...)
T2 estimate, se method=ml; vce=cluster/robust; weights=set tests/reference_parity/test_ldv_design_stata_parity.py sp.heckman(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

honest_did

Dimensions: restriction in {smoothness, relative_magnitude, smoothness_relative_magnitude}; shape in {none, sign, monotone}; interval in {flci, arp_conditional, arp_c_lf, arp_c_f, worst_case_bias}; code_path in {native, r}; target in {single, average, weights}; window in {full, restricted}; alpha in {0.05, other}; m_grid in {zero_only, zero, positive}; rm_grid in {honestdid, extended, user, n/a}; source in {callaway_santanna, sun_abraham, event_study, etwfe, gardner_did, did_imputation, moments, supplied, other}.

Kind Outputs Configuration run Artifact Entry point
T2 diagnostic restriction=smoothness; shape=none; interval=flci; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=n/a; source=supplied tests/r_parity/10_honest_did.py sp.honest_did(res, e=0, m_grid=M_GRID, method='smoothness')
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=supplied tests/r_parity/21_honest_relmags.py sp.honest_did(res, method='relative_magnitude')
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=supplied tests/reference_parity/test_honest_rm_R_parity.py sp.honest_did(res, method='relative_magnitude')
S diagnostic restriction=relative_magnitude; shape=none; interval=arp_c_lf; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=supplied tests/reference_parity/test_honest_rm_R_parity.py sp.honest_did(res, method='relative_magnitude')
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=moments tests/reference_parity/test_honest_did_moments_R_parity.py sp.honest_did_from_moments(
T4 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=extended; source=moments tests/reference_parity/test_honest_did_moments_R_parity.py sp.honest_did_from_moments(
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=average/single/weights; window=full; alpha=0.05/other; m_grid=positive/zero/zero_only; rm_grid=honestdid/user; source=moments tests/reference_parity/test_honest_did_options_R_parity.py sp.honest_did_from_moments(
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=average/single/weights; window=full/restricted; alpha=0.05/other; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=callaway_santanna tests/reference_parity/test_honest_did_options_R_parity.py sp.honest_did(cs, **kw)
S diagnostic restriction=relative_magnitude; shape=none; interval=arp_c_lf; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=callaway_santanna tests/reference_parity/test_honest_did_options_R_parity.py sp.honest_did(cs, **kw)
T1 diagnostic restriction=smoothness; shape=none; interval=flci; code_path=native; target=average/single/weights; window=full/restricted; alpha=0.05/other; m_grid=zero_only; rm_grid=n/a; source=callaway_santanna/moments tests/reference_parity/test_honest_did_options_R_parity.py sp.honest_did(cs, **kw)
T4 diagnostic restriction=smoothness; shape=none; interval=flci; code_path=native; target=average/single/weights; window=full/restricted; alpha=0.05/other; m_grid=positive/zero/zero_only; rm_grid=n/a; source=callaway_santanna/moments tests/reference_parity/test_honest_did_options_R_parity.py sp.honest_did(cs, **kw)
T4 diagnostic restriction=smoothness; shape=none; interval=flci; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive; rm_grid=n/a; source=moments tests/reference_parity/test_honest_did_moments_R_parity.py sp.honest_did_from_moments(
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=average/single/weights; window=restricted; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=etwfe tests/reference_parity/test_honest_did_lvec_window_Stata_parity.py sp.honest_did(fit, backend='r', ...) vs sp.honest_did(fit, ...)
T4 diagnostic restriction=relative_magnitude/smoothness; shape=none; interval=arp_conditional/flci; code_path=native; target=average/single; window=restricted; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid/n/a; source=etwfe tests/reference_parity/test_honest_did_lvec_window_Stata_parity.py sp.honest_did(fit, method=...)
T2 diagnostic restriction=relative_magnitude; shape=none; interval=arp_conditional; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=callaway_santanna tests/reference_parity/test_honest_did_backend_parity.py sp.honest_did(cs_result, method='relative_magnitude')
T2 diagnostic restriction=smoothness; shape=monotone/none/sign; interval=arp_conditional; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=moments tests/reference_parity/test_honest_restrictions_R_parity.py sp.honest_did_from_moments(
T2 diagnostic restriction=relative_magnitude/smoothness_relative_magnitude; shape=monotone/none/sign; interval=arp_conditional; code_path=native; target=average/single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=moments tests/reference_parity/test_honest_restrictions_R_parity.py sp.honest_did_from_moments(
T4 diagnostic restriction=smoothness; shape=monotone/none/sign; interval=arp_c_f; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=moments tests/reference_parity/test_honest_restrictions_R_parity.py sp.honest_did_from_moments(
S diagnostic restriction=relative_magnitude/smoothness/smoothness_relative_magnitude; shape=none/sign; interval=arp_c_lf; code_path=native; target=single; window=full; alpha=0.05; m_grid=positive/zero/zero_only; rm_grid=honestdid; source=moments tests/reference_parity/test_honest_restrictions_R_parity.py sp.honest_did_from_moments(

ipw

Dimensions: estimand in {ate, att, atc, ato, atm}; se_method in {sandwich, bootstrap}; ps_model in {logit, probit, known}; normalized in {true, false}; trim in {zero, set}; weights in {none, set}; cluster in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se estimand=ate/att; se_method=sandwich; ps_model=logit; normalized=true; trim=zero; weights=none/set; cluster=none/set tests/reference_parity/test_teffects_design_stata_parity.py sp.ipw(...)
T2 estimate, se estimand=ate/att; se_method=sandwich; ps_model=logit/probit; normalized=true; trim=zero; weights=none; cluster=none tests/reference_parity/test_teffects_probit_stata.py sp.ipw(...)
T2 estimate, se estimand=ate/atm/ato/att; se_method=sandwich; ps_model=logit; normalized=true; trim=zero; weights=none; cluster=none tests/reference_parity/test_barrett_causal_inference_in_r_parity.py sp.ipw(...)
T2 estimate estimand=atc; se_method=sandwich; ps_model=logit; normalized=true; trim=zero; weights=none; cluster=none tests/reference_parity/test_barrett_causal_inference_in_r_parity.py sp.ipw(...)
T1 estimate estimand=atc/ate/att; se_method=bootstrap; ps_model=logit; normalized=true; trim=zero; weights=none; cluster=none tests/reference_parity/test_ipw_parity.py sp.ipw(...)
T1 estimate estimand=ate; se_method=bootstrap; ps_model=logit; normalized=false; trim=zero; weights=none; cluster=none tests/reference_parity/test_ipw_parity.py sp.ipw(...)

se_method is ignored for estimate: the point estimate is computed before, and independently of, the variance estimator

iv

Dimensions: estimator in {2sls, liml, fuller, gmm}; vce in {classical, hc0, hc1, hc2, hc3, hc4, cr1, cr2, cr3, cluster_multiway, hac, wild, conley, jackknife}; identification in {just, over}; absorb in {none, set}; small in {true, false}.

Kind Outputs Configuration run Artifact Entry point
T2 joint_test estimator=2sls; vce=classical/cr1/hc1; identification=over; absorb=none; small=true tests/reference_parity/test_joint_wald_stata_parity.py sp.ivreg(formula, data, robust=..., cluster=...)
T2 estimate, se estimator=2sls; vce=classical/cr1/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_iv_card_aer_parity.py sp.iv(formula, data, robust=..., cluster=...)
T2 diagnostic estimator=2sls; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_iv_card_aer_parity.py sp.iv(formula, data)
T2 estimate, se estimator=2sls; vce=hc1; identification=just; absorb=none; small=true tests/r_parity/02_iv.py sp.ivreg(robust='hc1')
T2 estimate, se estimator=liml; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_validation_entry_points.py sp.iv(formula, data, method='liml')
B coverage estimator=2sls; vce=hc1; identification=just; absorb=none; small=true tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.ivreg(robust='hc1')
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc1; identification=just; absorb=none; small=true tests/reference_parity/test_iv_small_Stata_parity.py sp.iv(formula, data, method=..., small=True)
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc0; identification=just; absorb=none; small=false tests/reference_parity/test_iv_small_Stata_parity.py sp.iv(formula, data, method=..., small=False)
T2 estimate, se estimator=gmm; vce=cr1/hc1; identification=over; absorb=none; small=true tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm')
T2 estimate, se estimator=gmm; vce=cr1/hc0; identification=over; absorb=none; small=false tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm', small=False)
T2 estimate, se estimator=gmm; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm')
T2 estimate, se estimator=2sls; vce=classical/cluster_multiway/cr1/hc1; identification=just; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...])
T2 estimate, se estimator=2sls; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...])
T2 estimate estimator=liml; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='liml')
T4 se estimator=liml; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='liml')
T2 estimate estimator=fuller; vce=hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='fuller')
T4 se estimator=fuller; vce=hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='fuller')
T2 estimate, se estimator=2sls; vce=classical/cluster_multiway/cr1/hc0/hc1/hc2/hc3; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, **opts)
T2 estimate, se estimator=2sls; vce=cr2/cr3/jackknife; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce=..., cluster='g')
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., small=True)
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc0; identification=just/over; absorb=none; small=false tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., small=False)
T2 estimate, se estimator=liml; vce=hc0; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method='liml', robust='hc0')
T2 estimate, se estimator=fuller; vce=classical/cr1/hc0/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method='fuller', ...)
T2 estimate, se estimator=2sls; vce=cluster_multiway; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, cluster=['g', 'yr'])
T4 se estimator=2sls/fuller/liml; vce=cluster_multiway; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., cluster=['g', 'yr'])
T2 estimate, se estimator=2sls; vce=conley; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='conley', ...)
T2 estimate, se estimator=2sls; vce=wild; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='wild', cluster='g')
T2 diagnostic estimator=2sls; vce=wild; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='wild', cluster='g')

vce is ignored for estimate: the least-squares / k-class point estimate is computed before, and independently of, the covariance estimator

ivreg

Dimensions: estimator in {2sls, liml, fuller, gmm}; vce in {classical, hc0, hc1, hc2, hc3, hc4, cr1, cr2, cr3, cluster_multiway, hac, wild, conley, jackknife}; identification in {just, over}; absorb in {none, set}; small in {true, false}.

Kind Outputs Configuration run Artifact Entry point
T2 joint_test estimator=2sls; vce=classical/cr1/hc1; identification=over; absorb=none; small=true tests/reference_parity/test_joint_wald_stata_parity.py sp.ivreg(formula, data, robust=..., cluster=...)
T2 estimate, se estimator=2sls; vce=classical/cr1/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_iv_card_aer_parity.py sp.iv(formula, data, robust=..., cluster=...)
T2 diagnostic estimator=2sls; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_iv_card_aer_parity.py sp.iv(formula, data)
T2 estimate, se estimator=2sls; vce=hc1; identification=just; absorb=none; small=true tests/r_parity/02_iv.py sp.ivreg(robust='hc1')
T2 estimate, se estimator=liml; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_validation_entry_points.py sp.iv(formula, data, method='liml')
B coverage estimator=2sls; vce=hc1; identification=just; absorb=none; small=true tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.ivreg(robust='hc1')
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc1; identification=just; absorb=none; small=true tests/reference_parity/test_iv_small_Stata_parity.py sp.iv(formula, data, method=..., small=True)
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc0; identification=just; absorb=none; small=false tests/reference_parity/test_iv_small_Stata_parity.py sp.iv(formula, data, method=..., small=False)
T2 estimate, se estimator=gmm; vce=cr1/hc1; identification=over; absorb=none; small=true tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm')
T2 estimate, se estimator=gmm; vce=cr1/hc0; identification=over; absorb=none; small=false tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm', small=False)
T2 estimate, se estimator=gmm; vce=classical; identification=over; absorb=none; small=true tests/reference_parity/test_iv_gmm_stata_parity.py sp.iv(formula, data, method='gmm')
T2 estimate, se estimator=2sls; vce=classical/cluster_multiway/cr1/hc1; identification=just; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...])
T2 estimate, se estimator=2sls; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...])
T2 estimate estimator=liml; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='liml')
T4 se estimator=liml; vce=cr1/hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='liml')
T2 estimate estimator=fuller; vce=hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='fuller')
T4 se estimator=fuller; vce=hc1; identification=over; absorb=set; small=true tests/reference_parity/test_iv_hdfe_stata_parity.py sp.iv(formula, data, absorb=[...], method='fuller')
T2 estimate, se estimator=2sls; vce=classical/cluster_multiway/cr1/hc0/hc1/hc2/hc3; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, **opts)
T2 estimate, se estimator=2sls; vce=cr2/cr3/jackknife; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce=..., cluster='g')
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., small=True)
T2 estimate, se estimator=2sls/liml; vce=classical/cr1/hc0; identification=just/over; absorb=none; small=false tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., small=False)
T2 estimate, se estimator=liml; vce=hc0; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method='liml', robust='hc0')
T2 estimate, se estimator=fuller; vce=classical/cr1/hc0/hc1; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method='fuller', ...)
T2 estimate, se estimator=2sls; vce=cluster_multiway; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, cluster=['g', 'yr'])
T4 se estimator=2sls/fuller/liml; vce=cluster_multiway; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.iv(IV[ident], data, method=..., cluster=['g', 'yr'])
T2 estimate, se estimator=2sls; vce=conley; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='conley', ...)
T2 estimate, se estimator=2sls; vce=wild; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='wild', cluster='g')
T2 diagnostic estimator=2sls; vce=wild; identification=just/over; absorb=none; small=true tests/reference_parity/test_vce_menu_parity.py sp.ivreg(IV[ident], data, vce='wild', cluster='g')

vce is ignored for estimate: the least-squares / k-class point estimate is computed before, and independently of, the covariance estimator

logit

Dimensions: vce in {classical, robust, hc0, hc1, cluster}; weights in {none, set}; perfect_prediction in {drop, keep}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=classical; weights=none; perfect_prediction=drop tests/r_parity/57_logit.py sp.logit(formula=...)
T2 estimate, se vce=classical/cluster/robust; weights=none; perfect_prediction=drop tests/reference_parity/test_vce_grammar_stata_parity.py sp.logit(...)
T2 estimate, se vce=classical/cluster/robust; weights=set; perfect_prediction=drop tests/reference_parity/test_count_weights_stata_parity.py sp.logit(...)
T1 estimate, se vce=classical; weights=set; perfect_prediction=drop tests/reference_parity/test_count_weights_stata_parity.py sp.logit(...)
T2 estimate, se vce=hc0/hc1; weights=none/set; perfect_prediction=drop tests/reference_parity/test_ml_sandwich_r_parity.py sp.logit(...)
T2 joint_test vce=classical/robust; weights=none; perfect_prediction=drop tests/reference_parity/test_joint_wald_stata_parity.py sp.logit(...)
T2 joint_test vce=classical/cluster; weights=none; perfect_prediction=drop tests/reference_parity/test_postestimation_stata_parity.py sp.logit(...)
T2 estimate, se vce=classical; weights=none; perfect_prediction=drop tests/reference_parity/test_logit_perfect_prediction_Stata_parity.py sp.logit(...)
T2 estimate, se vce=classical; weights=none; perfect_prediction=drop tests/reference_parity/test_regression_stories_r_parity.py sp.logit(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

nbreg

Dimensions: vce in {classical, robust, cluster}; weights in {none, set}; dispersion in {nb2, nb1}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=classical; weights=none; dispersion=nb2 tests/r_parity/42_nbreg.py sp.nbreg(formula=...)
T4 se vce=classical; weights=none; dispersion=nb2 tests/r_parity/42_nbreg.py sp.nbreg(formula=...)
T2 estimate, se vce=classical/cluster/robust; weights=none; dispersion=nb1/nb2 tests/reference_parity/test_vce_grammar_stata_parity.py sp.nbreg(...)
T1 estimate, se vce=classical; weights=set; dispersion=nb2 tests/reference_parity/test_count_weights_stata_parity.py sp.nbreg(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

nnmatch

Dimensions: estimand in {att, ate}; metric in {mahalanobis, ivariance, euclidean}; n_matches in {1, 2, 3, 4, 5}; exact in {none, set}; bias_adjust in {none, set}; vce in {robust, iid}; vce_nn in {2, 3, 4, na}; caliper in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=ate; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=set; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=ivariance; n_matches=3; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=euclidean; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=iid; vce_nn=na; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=4; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=set; bias_adjust=set; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=ate; metric=mahalanobis; n_matches=2; exact=none; bias_adjust=set; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_nnmatch_teffects_parity.py sp.match(df, y, treat, covariates, method='nnmatch', ...)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1/4/5; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', n_matches=4)
T2 estimate, se estimand=ate; metric=mahalanobis; n_matches=4/5; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=none tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', n_matches=4)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=3; caliper=none tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', vce_nn=3)
T2 estimate, se estimand=ate; metric=mahalanobis; n_matches=4; exact=none; bias_adjust=none; vce=robust; vce_nn=3; caliper=none tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', vce_nn=3)
T2 estimate, se estimand=att; metric=mahalanobis; n_matches=4; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=set tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', caliper=3.0)
T2 estimate, se estimand=ate; metric=mahalanobis; n_matches=1; exact=none; bias_adjust=none; vce=robust; vce_nn=2; caliper=set tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='nnmatch', caliper=3.0)

panel

Dimensions: method in {fe, twoway, pooled, fd, re, be, mundlak, chamberlain}; vce in {unadjusted, robust, cluster}; ssc in {linearmodels, stata, fixest}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate method=fe/re; vce=unadjusted; ssc=linearmodels; weights=none tests/r_parity/35_panel.py sp.panel(data=df, ...)
T2 joint_test method=fe; vce=unadjusted; ssc=linearmodels; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe')
T2 joint_test method=fe; vce=unadjusted; ssc=stata; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe')
T2 joint_test method=fe; vce=unadjusted; ssc=fixest; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe')
T2 joint_test method=fe; vce=cluster; ssc=stata; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe', cluster=..., ssc=...)
T2 joint_test method=fe; vce=cluster; ssc=fixest; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe', cluster=..., ssc=...)
T4 joint_test method=fe; vce=cluster; ssc=linearmodels; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.panel(data, formula, method='fe', cluster=...)
T2 estimate, se method=fd/fe/pooled/re/twoway; vce=cluster/robust/unadjusted; ssc=stata; weights=none tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=be; vce=unadjusted; ssc=stata; weights=none tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=mundlak; vce=cluster/unadjusted; ssc=stata; weights=none tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=chamberlain; vce=cluster; ssc=stata; weights=none tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=fe/pooled/twoway; vce=cluster/unadjusted; ssc=stata; weights=set tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=fd/fe/pooled/twoway; vce=cluster/robust/unadjusted; ssc=fixest; weights=none tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)
T2 estimate, se method=fe/pooled/twoway; vce=cluster/robust/unadjusted; ssc=fixest; weights=set tests/reference_parity/test_panel_ssc_stata_parity.py sp.panel(data, ..., ssc=ssc)

vce is ignored for estimate: the covariance is computed after the coefficients

ssc is ignored for estimate: the small-sample convention scales the covariance only

poisson

Dimensions: vce in {classical, robust, hc0, hc1, cluster}; weights in {none, set}; exposure in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=classical; weights=none; exposure=none tests/r_parity/58_poisson.py sp.poisson(formula=...)
T2 estimate, se vce=classical/cluster/robust; weights=none; exposure=none tests/reference_parity/test_vce_grammar_stata_parity.py sp.poisson(...)
T2 estimate, se vce=classical/cluster/robust; weights=set; exposure=none tests/reference_parity/test_count_weights_stata_parity.py sp.poisson(...)
T1 estimate, se vce=classical; weights=set; exposure=none tests/reference_parity/test_count_weights_stata_parity.py sp.poisson(...)
T2 estimate, se vce=classical/hc1; weights=none; exposure=none tests/reference_parity/test_accounting_research_parity.py sp.poisson(...)
T2 estimate, se vce=hc0/hc1; weights=none/set; exposure=none tests/reference_parity/test_ml_sandwich_r_parity.py sp.poisson(...)
T2 estimate, se vce=classical/hc0; weights=none; exposure=set tests/reference_parity/test_ml_sandwich_r_parity.py sp.poisson(...)
T2 joint_test vce=classical/robust; weights=none; exposure=none tests/reference_parity/test_joint_wald_stata_parity.py sp.poisson(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

ppmlhdfe

Dimensions: fe in {one, multi}; vce in {classical, robust, hc0, hc1, cr1, cluster_multiway}; weights in {none, set}; ssc in {stata, fixest, none}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se fe=one; vce=robust; weights=none; ssc=fixest/stata tests/r_parity/37_ppmlhdfe.py sp.ppmlhdfe(formula=...)
T2 estimate, se fe=multi; vce=robust; weights=none; ssc=fixest/stata tests/r_parity/47_ppmlhdfe_3fe.py sp.ppmlhdfe(formula=...)
T2 estimate, se fe=one; vce=robust; weights=set; ssc=stata tests/reference_parity/test_count_weights_stata_parity.py sp.ppmlhdfe(...)
T2 estimate, se fe=one; vce=cr1; weights=none/set; ssc=stata tests/reference_parity/test_count_weights_stata_parity.py sp.ppmlhdfe(...)
T2 estimate, se fe=multi; vce=cr1; weights=none; ssc=stata tests/reference_parity/test_ppmlhdfe_singletons_Stata_parity.py sp.ppmlhdfe(...)
T2 se fe=multi; vce=cluster_multiway/cr1; weights=none; ssc=stata tests/reference_parity/test_ppmlhdfe_twoway_parity.py sp.ppmlhdfe(...)

vce is ignored for estimate: the point estimate is computed before, and independently of, the covariance estimator

ssc is ignored for estimate: the point estimate is computed before, and independently of, the covariance estimator

probit

Dimensions: vce in {classical, robust, hc0, hc1, cluster}; weights in {none, set}; perfect_prediction in {drop, keep}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=classical; weights=none; perfect_prediction=drop tests/r_parity/48_probit.py sp.probit(formula=...)
T4 se vce=classical; weights=none; perfect_prediction=drop tests/r_parity/48_probit.py sp.probit(formula=...)
T2 estimate, se vce=classical/cluster/robust; weights=none; perfect_prediction=drop tests/reference_parity/test_vce_grammar_stata_parity.py sp.probit(...)
T2 estimate, se vce=classical/cluster/robust; weights=set; perfect_prediction=drop tests/reference_parity/test_count_weights_stata_parity.py sp.probit(...)
T4 se vce=hc0/hc1; weights=none/set; perfect_prediction=drop tests/reference_parity/test_ml_sandwich_r_parity.py sp.probit(...)
T2 joint_test vce=classical/cluster; weights=none; perfect_prediction=drop tests/reference_parity/test_postestimation_stata_parity.py sp.probit(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

psm

Dimensions: method in {nearest, kernel, radius, stratify}; distance in {propensity, mahalanobis}; n_matches in {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; replace in {true, false}; caliper in {none, set}; bias_correction in {true, false}; se_method in {abadie_imbens, abadie_imbens_2016, psmatch2, analytic, bootstrap}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate method=nearest; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=false; se_method=abadie_imbens/abadie_imbens_2016 tests/r_parity/11_psm.py sp.psm(method='nn')
T2 se method=nearest; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=false; se_method=abadie_imbens_2016 tests/r_parity/11_psm.py sp.psm(se_method='abadie_imbens_2016')
T2 estimate method=nearest; distance=propensity; n_matches=1/2; replace=false; caliper=none; bias_correction=false; se_method=abadie_imbens/abadie_imbens_2016 tests/reference_parity/test_matching_r_parity.py sp.match(lalonde, ..., method='nearest', replace=False)
T2 estimate method=nearest; distance=mahalanobis; n_matches=1; replace=false; caliper=none; bias_correction=false; se_method=abadie_imbens/abadie_imbens_2016 tests/reference_parity/test_matching_r_parity.py sp.match(lalonde, ..., distance='mahalanobis', replace=False)
T2 estimate, se method=nearest; distance=propensity; n_matches=1/10/2/3/4/5/6/7/8/9; replace=true; caliper=none; bias_correction=false; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, y='y', treat='d', covariates=X, n_matches=k)
T2 estimate, se method=nearest; distance=propensity; n_matches=1/10/2/3/4/5/6/7/8/9; replace=true; caliper=none; bias_correction=false; se_method=abadie_imbens_2016 tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., se_method='abadie_imbens_2016')
T2 estimate, se method=nearest; distance=propensity; n_matches=1; replace=true; caliper=set; bias_correction=false; se_method=abadie_imbens_2016 tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., caliper=0.2, se_method='abadie_imbens_2016')
T2 estimate, se method=nearest; distance=propensity; n_matches=1; replace=true; caliper=none/set; bias_correction=false; se_method=psmatch2 tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., caliper=0.01, se_method='psmatch2')
T2 estimate method=nearest; distance=propensity; n_matches=1; replace=true; caliper=set; bias_correction=false; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., caliper=0.01)
T4 se method=nearest; distance=propensity; n_matches=1; replace=true; caliper=set; bias_correction=false; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., caliper=0.01)
T4 se method=nearest; distance=propensity; n_matches=1; replace=false; caliper=none; bias_correction=false; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., replace=False, m_order='smallest')
T2 estimate, se method=nearest; distance=mahalanobis; n_matches=1/3; replace=true; caliper=none; bias_correction=false; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., distance='mahalanobis')
T2 estimate, se method=kernel; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=false; se_method=psmatch2 tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='kernel', kernel=k)
T2 estimate, se method=radius; distance=propensity; n_matches=1; replace=true; caliper=set; bias_correction=false; se_method=psmatch2 tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='radius', caliper=0.02)
T2 estimate, se method=stratify; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=false; se_method=analytic tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., method='stratify')
T2 estimate, se method=stratify; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=false; se_method=analytic tests/reference_parity/test_qiu_jiaping_methods_stata.py sp.match(data, ..., method='stratify', strata='b1')
T2 estimate, se method=nearest; distance=propensity; n_matches=1; replace=true; caliper=none; bias_correction=true; se_method=abadie_imbens tests/reference_parity/test_psm_options_parity.py sp.match(df, ..., bias_correction=True)

se_method is ignored for estimate: the variance estimator does not change the matches

qreg

Dimensions: vce in {iid, robust, nid, kernel, ker, cluster, powell}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=nid; weights=none tests/r_parity/40_qreg.py sp.qreg(...)
T2 estimate, se vce=iid/robust; weights=none tests/reference_parity/test_ldv_design_stata_parity.py sp.qreg(...)
T2 estimate, se, vcov vce=cluster/kernel; weights=none tests/reference_parity/test_qreg_cluster_stata_parity.py sp.qreg(...)
T2 estimate, se vce=robust; weights=set tests/reference_parity/test_ldv_gaps_stata_parity.py sp.qreg(...)
T2 estimate, se vce=ker/nid; weights=none/set tests/reference_parity/test_linear_model_extensions_parity.py sp.qreg(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

rddensity

Dimensions: code_path in {native, rddensity}.

Kind Outputs Configuration run Artifact Entry point
T2 diagnostic code_path=native tests/r_parity/09_rddensity.py sp.rddensity(backend='native')
T2 diagnostic, estimate, se code_path=native tests/reference_parity/test_rddensity_parity.py sp.rddensity(df, x, c)
T2 diagnostic, estimate code_path=native tests/reference_parity/test_rddensity_all_stata.py sp.rddensity(df, x)

rdrobust

Dimensions: design in {sharp, fuzzy, kink}; bwselect in {mserd, msetwo, msesum, msecomb1, msecomb2, cerrd, certwo, cersum, cercomb1, cercomb2, cct, manual}; kernel in {triangular, epanechnikov, uniform}; p in {0, 1, 2, 3, 4}; vce in {nn, hc0, hc1, hc2, hc3, cluster}; covariates in {none, set}; code_path in {native, port}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/r_parity/06_rd.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=manual; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/r_parity/06_rd.py sp.rdrobust(h=15)
B coverage design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=msetwo; kernel=triangular; p=1; vce=hc1; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=cerrd; kernel=triangular; p=2; vce=nn; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=nn; covariates=set; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=cluster; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=mserd; kernel=uniform; p=1; vce=hc3; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=manual; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=fuzzy; bwselect=mserd; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=fuzzy; bwselect=msecomb2; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=set tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=fuzzy; bwselect=msecomb2; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rd_weights_parity.py sp.rdrobust(weights=)
T2 estimate, se design=sharp; bwselect=cerrd/cersum/certwo/mserd/msesum/msetwo; kernel=epanechnikov/triangular/uniform; p=1/2; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=cerrd/cersum/certwo/mserd/msesum/msetwo; kernel=epanechnikov/triangular/uniform; p=0/3/4; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1/2; vce=hc0/hc1/hc2/hc3/nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rd_vce_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=hc0/hc2/hc3/nn; covariates=set; code_path=native; weights=none tests/reference_parity/test_rd_vce_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1/2; vce=cluster; covariates=none; code_path=native; weights=none tests/reference_parity/test_rd_vce_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=mserd; kernel=triangular; p=1; vce=cluster; covariates=set; code_path=native; weights=none tests/reference_parity/test_rd_vce_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=cerrd; kernel=triangular; p=1; vce=cluster; covariates=set; code_path=native; weights=none tests/reference_parity/test_rd_cluster_cer_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=fuzzy; bwselect=mserd; kernel=triangular; p=1/2; vce=nn; covariates=none/set; code_path=native; weights=none tests/reference_parity/test_rdrobust_fuzzy_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=fuzzy; bwselect=cerrd/msetwo; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_fuzzy_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=fuzzy; bwselect=mserd; kernel=uniform; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_fuzzy_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=fuzzy; bwselect=mserd; kernel=triangular; p=1; vce=hc0/hc1/hc2/hc3; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_fuzzy_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=kink; bwselect=mserd; kernel=triangular; p=2; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_params_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=sharp; bwselect=cercomb1/cercomb2/msecomb1/msecomb2; kernel=epanechnikov/triangular/uniform; p=1/2; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_comb_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=fuzzy; bwselect=cercomb1/cercomb2/msecomb1/msecomb2; kernel=triangular; p=1; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rdrobust_comb_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=kink; bwselect=mserd; kernel=triangular; p=1/2; vce=nn; covariates=none; code_path=native; weights=none tests/reference_parity/test_rd_iv_rd_R_parity.py sp.rdrobust(df, y, x, c)
T2 estimate, se design=kink; bwselect=manual/mserd; kernel=triangular; p=1; vce=hc1; covariates=none; code_path=native; weights=none tests/reference_parity/test_rd_iv_rd_R_parity.py sp.rdrobust(df, y, x, c)

regress

Dimensions: vce in {classical, hc0, hc1, hc2, hc3, hc4, cr1, cr2, cr3, cluster_multiway, hac, wild, conley, jackknife}; weights in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se vce=hc1; weights=none tests/r_parity/01_ols.py sp.regress(robust='hc1')
T2 estimate, se vce=classical/cr1/hc1/hc3; weights=none tests/reference_parity/test_vce_grammar_stata_parity.py sp.regress(vce=...)
T2 joint_test vce=classical/cr1/hc1; weights=none tests/reference_parity/test_r2_postest_parity.py sp.test(result, 'C(g)[T.2] = ... = 0')
T2 joint_test vce=classical/cr1/hc1/hc2/hc3; weights=none tests/reference_parity/test_joint_wald_stata_parity.py sp.regress(formula, data, robust=..., cluster=...)
T2 estimate, se vce=hc2/hc3; weights=none tests/r_parity/55_hc2_hc3.py sp.regress(robust='hc2'|'hc3')
T2 estimate, se vce=hc4; weights=none/set tests/reference_parity/test_linear_model_extensions_parity.py sp.regress(F_ALL, df, robust=...)
T2 estimate, se vce=cr1; weights=none tests/r_parity/14_ols_cluster.py sp.regress(cluster=...)
T2 estimate, se vce=hac; weights=none tests/r_parity/51_newey.py sp.regress(robust='hac')
T2 estimate, se vce=classical/cr1/cr2/hc1/hc2/hc3; weights=set tests/reference_parity/test_regress_vce_weights_stata_parity.py sp.regress(FORMULA, data, weights=..., vce=...)
T2 estimate, se vce=cr2; weights=none tests/reference_parity/test_regress_vce_weights_stata_parity.py sp.regress(FORMULA, data, vce='cr2', cluster=...)
T1 se vce=cr3; weights=none/set tests/reference_parity/test_regress_vce_weights_stata_parity.py sp.regress(FORMULA, data, vce='cr3', cluster=...)
T4 se vce=cr3; weights=none tests/reference_parity/test_regress_vce_weights_stata_parity.py sp.regress(FORMULA, data, vce='cr3', cluster=...)
T4 se vce=cluster_multiway; weights=none/set tests/reference_parity/test_regress_vce_weights_stata_parity.py sp.regress(FORMULA, data, cluster=[a, b])
B coverage vce=hc1; weights=none tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.regress(robust='hc1')
T2 estimate, se vce=classical/cluster_multiway/cr1/cr3/hac/hc0/hc1/hc2/hc3/hc4; weights=none/set tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, weights=..., **opts)
T2 estimate, se vce=cr2; weights=none tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='cr2', cluster='g')
T2 estimate, se vce=jackknife; weights=none/set tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='jackknife', cluster='g')
T4 se vce=cr2; weights=set tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='cr2', cluster='g', weights='w')
T2 estimate, se vce=wild; weights=none tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='wild', cluster='g')
T2 diagnostic vce=wild; weights=none tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='wild', cluster='g')
T2 estimate, se vce=conley; weights=none tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, vce='conley', ...)
T2 estimate, se vce=hac; weights=none/set tests/reference_parity/test_vce_menu_parity.py sp.regress(F, data, robust='hac', hac_small=True, ...)

vce is ignored for estimate: the least-squares / k-class point estimate is computed before, and independently of, the covariance estimator

sdid

Dimensions: method in {sdid, sc, did}; se_method in {placebo, bootstrap, jackknife, noinference}; code_path in {native, synthdid, r}; interface in {treated_unit, treat}; design in {block, staggered}; covariates in {none, projected}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate method=sdid; se_method=placebo; code_path=native; interface=treated_unit; design=block; covariates=none tests/r_parity/12_sdid.py sp.sdid(backend='native')
T2 estimate, se method=did/sc/sdid; se_method=jackknife/noinference; code_path=native; interface=treat; design=block/staggered; covariates=none/projected tests/reference_parity/test_sdid_staggered_parity.py sp.sdid(treat=...)
B coverage method=sdid; se_method=placebo; code_path=native; interface=treated_unit; design=block; covariates=none tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.sdid()
T2 estimate, se method=did/sc/sdid; se_method=jackknife; code_path=native; interface=treated_unit; design=block; covariates=none tests/reference_parity/test_did_synth_R_parity.py sp.sdid(treated_unit=...)
T2 estimate method=sdid; se_method=placebo; code_path=native; interface=treated_unit; design=block; covariates=none tests/reference_parity/test_sdid_parity.py sp.sdid()
S se method=did/sc/sdid; se_method=bootstrap/placebo; code_path=native; interface=treated_unit; design=block; covariates=none tests/reference_parity/test_sdid_resampling_screen.py sp.sdid(treated_unit=...)
S se method=did/sc/sdid; se_method=placebo; code_path=native; interface=treat; design=block; covariates=none tests/reference_parity/test_sdid_resampling_screen.py sp.sdid(treat=...)
S se method=sdid; se_method=bootstrap/placebo; code_path=native; interface=treat; design=staggered; covariates=none tests/reference_parity/test_sdid_resampling_screen.py sp.sdid(treat=...)

se_method is ignored for estimate: the SE method resamples after the unit and time weights are solved; the ATT is unchanged

sun_abraham

Dimensions: control_group in {nevertreated, lastcohort, control_cohort}; aggregation in {fixest_att, event_time}; share_variance in {estimated, fixed}; window_rule in {report, bin, reference}; crit_dist in {normal, t_resid, t_cluster}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se control_group=nevertreated; aggregation=fixest_att; share_variance=estimated/fixed; window_rule=report; crit_dist=normal tests/r_parity/05_sunab.py sp.sun_abraham(aggregation='fixest_att')
T2 estimate, se control_group=nevertreated; aggregation=event_time; share_variance=estimated/fixed; window_rule=report; crit_dist=normal tests/reference_parity/test_sunab_event_time_aggregate_parity.py sp.sun_abraham()
B coverage control_group=nevertreated; aggregation=event_time; share_variance=estimated; window_rule=report; crit_dist=normal tests/coverage_monte_carlo/results_b1000/coverage_b1000.json sp.sun_abraham()
T2 vcov control_group=nevertreated; aggregation=event_time; share_variance=fixed; window_rule=report; crit_dist=normal tests/reference_parity/test_event_study_vcov_R_parity.py sp.sun_abraham(share_variance=False)
T2 estimate, se control_group=nevertreated; aggregation=event_time; share_variance=estimated; window_rule=bin; crit_dist=normal tests/reference_parity/test_dcdh_textbook_stata_parity.py sp.sun_abraham(window_rule='bin')
T2 estimate, se control_group=control_cohort/lastcohort; aggregation=event_time/fixest_att; share_variance=estimated/fixed; window_rule=report; crit_dist=normal tests/reference_parity/test_sunab_options_parity.py sp.sun_abraham(control_group='lastcohort')
T2 estimate, se control_group=control_cohort/nevertreated; aggregation=event_time; share_variance=estimated; window_rule=report; crit_dist=normal tests/reference_parity/test_sunab_control_cohort_parity.py sp.sun_abraham(control_cohort=2007)
T2 estimate, se control_group=lastcohort/nevertreated; aggregation=event_time/fixest_att; share_variance=estimated/fixed; window_rule=reference; crit_dist=normal tests/reference_parity/test_sunab_options_parity.py sp.sun_abraham(window_rule='reference')
T2 estimate, se, interval control_group=nevertreated; aggregation=event_time; share_variance=estimated/fixed; window_rule=report; crit_dist=t_cluster/t_resid tests/reference_parity/test_es_crit_parity.py sp.sun_abraham(

aggregation is ignored for vcov: the event-time covariance is formed before the summary aggregate is chosen

crit_dist is ignored for estimate, se, vcov: the critical value turns an SE into a p-value and an interval; coefficients and SEs are computed before it is chosen (asserted equal across parity= in tests/reference_parity/test_es_crit_parity.py)

synth

Dimensions: v_method in {equal, nested, regression}; weights in {unique, nonunique}; code_path in {native, synth}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate v_method=equal; weights=unique; code_path=native tests/r_parity/52_scm_unique.py sp.synth(method='classic')
T4 estimate v_method=nested; weights=nonunique/unique; code_path=native tests/r_parity/07_scm.py sp.synth(method='classic', special predictors)
T1 estimate v_method=nested/regression; weights=unique; code_path=native tests/reference_parity/test_synth_unique_options_parity.py sp.synth(method='classic', special_predictors=...)
T2 se v_method=equal; weights=unique; code_path=native tests/reference_parity/test_synth_unique_options_parity.py sp.synth(method='classic')
T4 estimate v_method=regression; weights=unique; code_path=native tests/reference_parity/test_synth_regression_v_stata.py sp.synth(v_method='regression')
T4 estimate v_method=regression; weights=unique; code_path=native tests/reference_parity/test_synth2_stata_parity.py sp.synth(method='classic', v_method='regression')

tmle

Dimensions: estimand in {ate, att, atc, ey1, ey0, rr, or}; fluctuation in {single, per_arm}; nuisance in {supplied, user_library, default_library}; se_method in {eif, bootstrap}; outcome in {binary, continuous}; weights in {none, set}; cluster in {none, set}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se estimand=ate; fluctuation=per_arm; nuisance=user_library; se_method=eif; outcome=binary/continuous; weights=none/set; cluster=none/set tests/reference_parity/test_tmle_design_R_parity.py sp.tmle(...)
T2 estimate, se estimand=ate/ey0/ey1; fluctuation=per_arm; nuisance=supplied; se_method=eif; outcome=binary/continuous; weights=none/set; cluster=none/set tests/reference_parity/test_tmle_parameters_R_parity.py sp.tmle(...)
T2 estimate, se estimand=or/rr; fluctuation=per_arm; nuisance=supplied; se_method=eif; outcome=binary; weights=none; cluster=none/set tests/reference_parity/test_tmle_parameters_R_parity.py sp.tmle(...)
T2 estimate estimand=or/rr; fluctuation=per_arm; nuisance=supplied; se_method=eif; outcome=binary; weights=set; cluster=none/set tests/reference_parity/test_tmle_parameters_R_parity.py sp.tmle(...)
T4 se estimand=or; fluctuation=per_arm; nuisance=supplied; se_method=eif; outcome=binary; weights=set; cluster=none/set tests/reference_parity/test_tmle_parameters_R_parity.py sp.tmle(...)
T2 estimate, se estimand=ate; fluctuation=per_arm; nuisance=supplied; se_method=eif; outcome=binary; weights=none; cluster=none tests/r_parity/72_tmle.py sp.tmle(fluctuation=...)
T2 estimate, se estimand=ate; fluctuation=single; nuisance=user_library; se_method=eif; outcome=binary; weights=none; cluster=none tests/reference_parity/test_tmle_parity.py sp.tmle(...)

tobit

Dimensions: method in {mle, scls}; vce in {classical, robust, cluster}; weights in {none, set}; censoring in {left, right, two_sided}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se method=mle; vce=classical; weights=none; censoring=left tests/r_parity/41_tobit.py sp.tobit(data=...)
T2 estimate, se method=mle; vce=classical; weights=none; censoring=left tests/reference_parity/test_count_quantile_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=classical/cluster/robust; weights=none; censoring=left tests/reference_parity/test_ldv_design_stata_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=cluster/robust; weights=set; censoring=left tests/reference_parity/test_ldv_design_stata_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=classical; weights=none; censoring=two_sided tests/reference_parity/test_ldv_design_stata_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=cluster; weights=set; censoring=two_sided tests/reference_parity/test_ldv_design_stata_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=cluster/robust; weights=none/set; censoring=two_sided tests/reference_parity/test_ldv_gaps_stata_parity.py sp.tobit(...)
T2 estimate, se method=mle; vce=classical/cluster/robust; weights=none; censoring=right tests/reference_parity/test_ldv_gaps_stata_parity.py sp.tobit(...)
T2 estimate method=scls; vce=classical; weights=none; censoring=left tests/reference_parity/test_binary_r2_and_scls_parity.py sp.tobit(...)

vce is ignored for estimate: the maximum-likelihood point estimate is computed before, and independently of, the covariance estimator

xtabond

Dimensions: model in {difference, ah, system_h3_iv_both, system_h3_iv_diff, system_h3_no_iv, system_h2_iv_both, system_h2_iv_diff, system_h2_no_iv, system_iv_level, system_no_constant, h1}; steps in {onestep, twostep, beyond_two}; robust in {true, false}; cluster in {unit, coarser}; transform in {fd, fod}; collapse in {false, true}; gmm_window in {default, max_capped, min_raised, min_and_max}; regressors in {none, x, x_pre_window, x_endo_window, dummies, x_endo_window_dummies, other}; lags in {1, 2, 3plus}; panel in {gap_free, gapped}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se, diagnostic model=difference; steps=onestep/twostep; robust=false/true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=2; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=max_capped; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=min_raised; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=true; gmm_window=default; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=difference; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=2; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=2; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/r_parity/50_xtabond.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x_endo_window/x_pre_window; lags=2; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 diagnostic model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T4 diagnostic model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none/x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=difference; steps=onestep/twostep; robust=true; cluster=unit; transform=fod; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=difference; steps=onestep; robust=true; cluster=coarser; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=ah; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none/x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fod; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T2 estimate, se model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=true; gmm_window=max_capped/min_and_max; regressors=none; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(...)
T1 estimate model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_gmm_dynamic_panel_parity.py sp.xtabond(...)
S estimate model=difference; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_gmm_dynamic_panel_parity.py sp.xtabond(...)
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=true; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep/twostep; robust=true; cluster=unit; transform=fod; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep; robust=true; cluster=coarser; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se model=system_h3_no_iv; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T4 diagnostic model=system_h3_iv_both; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se model=system_h2_no_iv; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_diff; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_diff; steps=onestep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se, diagnostic model=system_h2_iv_both; steps=onestep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 se model=system_h2_iv_both; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se, diagnostic model=system_h2_no_iv; steps=twostep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 se model=system_h2_no_iv; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=max_capped; regressors=x_endo_window_dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.stata(...)

robust is ignored for estimate: the coefficients are solved before, and independently of, the choice between the classical and the robust / Windmeijer variance (robust= only switches the reported VCE)

xtdpdsys

Dimensions: model in {system_h3_iv_both, system_h3_iv_diff, system_h3_no_iv, system_h2_iv_both, system_h2_iv_diff, system_h2_no_iv, system_iv_level, system_no_constant, h1}; steps in {onestep, twostep, beyond_two}; robust in {true, false}; cluster in {unit, coarser}; transform in {fd, fod}; collapse in {false, true}; gmm_window in {default, max_capped, min_raised, min_and_max}; regressors in {none, x, x_pre_window, x_endo_window, dummies, x_endo_window_dummies, other}; lags in {1, 2, 3plus}; panel in {gap_free, gapped}.

Kind Outputs Configuration run Artifact Entry point
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=true; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep/twostep; robust=true; cluster=unit; transform=fod; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se, diagnostic model=system_h3_iv_both; steps=onestep; robust=true; cluster=coarser; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se model=system_h3_no_iv; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gapped tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T4 diagnostic model=system_h3_iv_both; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtabond(method='system')
T2 estimate, se model=system_h2_no_iv; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_diff; steps=onestep/twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_diff; steps=onestep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)
T2 estimate, se, diagnostic model=system_h2_iv_both; steps=onestep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 se model=system_h2_iv_both; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se, diagnostic model=system_h2_no_iv; steps=twostep; robust=false; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 se model=system_h2_no_iv; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=none; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.xtdpdsys(...)
T2 estimate, se model=system_h2_iv_both; steps=twostep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=max_capped; regressors=x_endo_window_dummies; lags=2; panel=gap_free tests/reference_parity/test_hansen_methods_stata_parity.py sp.stata(...)
T1 estimate model=system_h3_iv_both; steps=onestep; robust=true; cluster=unit; transform=fd; collapse=false; gmm_window=default; regressors=x; lags=1; panel=gap_free tests/reference_parity/test_dynpanel_abdata_parity.py sp.xtdpdsys(...)

robust is ignored for estimate: the coefficients are solved before, and independently of, the choice between the classical and the robust / Windmeijer variance (robust= only switches the reported VCE)

Option-level Stata fixtures

Fixtures under tests/stata_parity/option_parity/ pin option switches within an estimator and sit outside the Track A enumeration on purpose, so TIER_A_FIXTURE_LOCK.json does not hash them. The SHA-256 below is their lock: an edited fixture fails --check until this file is regenerated. A fixture read by no test fails the build.

Fixture Read by SHA-256 (first 16)
tests/stata_parity/option_parity/results/82_csdid_conventions_Stata.json tests/reference_parity/test_csdid_conventions_stata_parity.py c988134a90bb0dec
tests/stata_parity/option_parity/results/83_sunab_control_cohort_Stata.json tests/reference_parity/test_sunab_control_cohort_parity.py
tests/reference_parity/test_sunab_options_parity.py
fd4d59285d8606fb
tests/stata_parity/option_parity/results/84_bjs_fe_covariates_Stata.json tests/reference_parity/test_bjs_fe_covariates_parity.py
tests/reference_parity/test_option_fixture_bindings.py
eead3fb4a701b770
tests/stata_parity/option_parity/results/85_multiplegt_dyn_options_Stata.json tests/reference_parity/test_multiplegt_dyn_options_parity.py a6b6c27ad860d8a7
tests/stata_parity/option_parity/results/86_lprobust_Stata.json tests/reference_parity/test_lprobust_parity.py 5dc6478d44596acd
tests/stata_parity/option_parity/results/87_did_had_Stata.json tests/reference_parity/test_did_had_parity.py 0f158aa295005c95
tests/stata_parity/option_parity/results/92_vce_menu_Stata.json tests/reference_parity/test_vce_menu_parity.py 320c9f3720262c4f
tests/stata_parity/option_parity/results/93_sunab_options_Stata.json tests/reference_parity/test_sunab_options_parity.py 696642f7337dbc76
tests/stata_parity/option_parity/results/94_bjs_options_Stata.json tests/reference_parity/test_bjs_options_parity.py 8f7d765f8a78ad27
tests/stata_parity/option_parity/results/95_rdrobust_comb_Stata.json tests/reference_parity/test_rdrobust_comb_parity.py a640f1fd03604042
tests/stata_parity/option_parity/results/96_csdid_options_Stata.json tests/reference_parity/test_csdid_options_stata_parity.py f54b8457546789eb
tests/stata_parity/option_parity/results/97_dcdh_options_Stata.json tests/reference_parity/test_dcdh_option_values_stata_parity.py f26a2a96ef115c11

Stata translation holdout

A frozen corpus of 42 Stata commands and the numbers Stata 18 MP gives for the 36 that run, scored on five layers by tests/test_stata_translation_holdout.py. Hashed here so the corpus cannot drift towards what the translator already handles.

File SHA-256 (first 16)
tests/stata_translation_holdout/corpus.json 88e8f103d0d65361
tests/stata_translation_holdout/holdout_Stata.json 4023297b3cd0b260
tests/stata_translation_holdout/holdout_cross.csv 5eca4a3640048a41
tests/stata_translation_holdout/holdout_panel.csv f5f2b30439c32471

Inference reliability (Track B)

Reference evidence says an estimator reproduces another implementation. Whether its interval covers is a separate question, answered here from the committed Monte Carlo runs under tests/coverage_monte_carlo/results_b1000/. Every replication is in the denominator, failed ones included. MC SE is the Monte Carlo standard error of the rate; a rate within two of them of 0.95 is not distinguishable from nominal at this B.

Design B Failed Coverage MC SE Mean SE / MC SD Within 2 MC SE of 0.95
sp.regress (HC1) on RCT 1000 0 0.952 0.0068 1.001 yes
sp.regress 2x2 DiD 1000 0 0.955 0.0066 1.026 yes
sp.ivreg (HC1) on strong-Z IV 1000 0 0.962 0.0060 0.984 yes
sp.callaway_santanna simple ATT (staggered) 1000 0 0.947 0.0071 1.009 yes
sp.sun_abraham overall ATT (staggered) 1000 0 0.950 0.0069 1.017 yes
sp.panel two-way FE 1000 0 0.948 0.0070 0.990 yes
sp.fast.feols two-way FE (CR1 by unit) 1000 0 0.955 0.0066 0.987 yes
sp.rdrobust sharp (robust CI) 1000 0 0.934 0.0079 0.982 no
sp.sdid placebo (1 treated) 1000 0 0.928 0.0082 0.992 no
sp.ebalance (CIA, ATT) 1000 0 0.945 0.0072 0.969 yes
sp.causal_question(design='dml') IRM ATE 1000 0 0.968 0.0056 1.045 no
sp.dml(model='plr') theta 1000 0 0.883 0.0102 0.885 no
sp.causal_question(design='causal_forest') AIPW ATE 1000 0 0.959 0.0063 1.036 yes

Designs built to break an assumption. The band is the range documented in advance for that design, not a pass mark for nominal coverage.

Stress design B Coverage MC SE Documented band Note
sp.ivreg (HC1) weak instrument (pi=0.10) 1000 0.882 0.0102 0.85 to 0.95
sp.callaway_santanna heterogeneous timing+magnitude 1000 0.954 0.0066 0.92 to 0.96
sp.causal_forest AIPW under overlap loss 300 0.900 0.0173 0.85 to 0.99 Capped at B=300 (wall-clock cap; AIPW IF dominates).
Design B Size at 5% MC SE Power by effect size
sp.regress (HC1) RCT 1000 0.043 0.0064 0.0: 0.043, 0.1: 0.208, 0.2: 0.596, 0.3: 0.903
sp.did 2x2 1000 0.024 0.0048 0.0: 0.024, 0.2: 0.291, 0.4: 0.871, 0.6: 0.996
sp.ivreg strong-Z 1000 0.046 0.0066 0.0: 0.046, 0.2: 0.453, 0.4: 0.935, 0.6: 0.996
sp.rdrobust sharp 500 0.076 0.0119 0.0: 0.076, 0.2: 0.404, 0.4: 0.888, 0.6: 1.000
sp.panel two-way FE 1000 0.052 0.0070 0.0: 0.052, 0.15: 0.231, 0.3: 0.652, 0.45: 0.954
sp.callaway_santanna staggered 300 0.050 0.0126 0.0: 0.050, 0.3: 0.777, 0.6: 1.000, 0.9: 1.000
sp.ebalance (M-estimation SE) 1000 0.055 0.0072 0.0: 0.055, 0.4: 1.000, 0.7: 1.000, 1.0: 1.000

Reliability studies

Simulation studies under tests/reliability/, each with its design fixed in the script before the first run. A row of a study is one method on one design; a fit that was refused counts in the denominator. The table gives, per study and method, how many designs land within two Monte Carlo standard errors of the nominal rate, and the design furthest from it. Every row is in docs/evidence_inventory.json; the reading of each study is in tests/reliability/README.md.

Study Method Quantity B Designs At nominal Furthest from nominal
dml_learners ols coverage 300 4 2 0.000 (shape=nonlinear, n=500)
dml_learners lasso coverage 300 4 2 0.000 (shape=nonlinear, n=500)
dml_learners rf coverage 300 4 1 0.433 (shape=nonlinear, n=500)
dml_learners gbm coverage 300 4 0 0.867 (shape=nonlinear, n=500)
dml_learners stacking coverage 300 4 2 0.727 (shape=nonlinear, n=500)
extreme_weights_binary_iv classical coverage 2000 24 8 0.146 (model=glm, n=1000, sigma=2.0)
extreme_weights_binary_iv robust coverage 2000 24 9 0.814 (model=probit, n=200, sigma=2.0)
extreme_weights_fast iid coverage 2000 12 2 0.223 (model=fast_fepois, size=200, sigma=2.0)
extreme_weights_fast hc1 coverage 2000 12 6 0.870 (model=fast_feols, size=50, sigma=2.0)
extreme_weights_fast cr1 coverage 2000 12 5 0.793 (model=fast_feols, size=50, sigma=2.0)
extreme_weights_fast classical coverage 2000 6 2 0.140 (model=nbreg, size=1000, sigma=2.0)
extreme_weights_fast robust coverage 2000 6 2 0.841 (model=nbreg, size=200, sigma=2.0)
extreme_weights_models classical coverage 2000 12 4 0.143 (model=poisson, size=1000, sigma=2.0)
extreme_weights_models robust coverage 2000 12 6 0.840 (model=poisson, size=200, sigma=2.0)
extreme_weights_models cluster coverage 2000 6 2 0.777 (model=panel_fe, size=50, sigma=2.0)
extreme_weights classical coverage 2000 12 8 0.340 (errors=sampling, n=1000, sigma=2.0)
extreme_weights hc1 coverage 2000 12 5 0.842 (errors=sampling, n=200, sigma=2.0)
extreme_weights hc2 coverage 2000 12 6 0.895 (errors=sampling, n=200, sigma=2.0)
extreme_weights hc3 coverage 2000 12 10 0.932 (errors=sampling, n=1000, sigma=2.0)
few_clusters cr1 rejection 2000 29 7 0.749 (treated=1, G=40)
few_clusters cr2 rejection 2000 16 4 0.234 (treated=two, sizes=balanced, G=40)
few_clusters cr3 rejection 2000 22 12 0.170 (treated=two, sizes=balanced, G=40)
few_clusters wild rejection 2000 16 3 0.126 (treated=half, sizes=unbalanced, G=40)
few_clusters placebo rejection 2000 5 0 0.139 (treated=10, G=40)
forest_split_evaluation own/AUTOC rejection 400 1 0 0.160 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation split_bjs/AUTOC rejection 400 1 0 0.005 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation split_forest/AUTOC rejection 400 1 0 0.005 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation own/QINI rejection 400 1 0 0.122 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation split_bjs/QINI rejection 400 1 0 0.000 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation split_forest/QINI rejection 400 1 0 0.000 (model=tau = 0.3 + 0.0 z, N=150)
forest_split_evaluation split/gain rejection 400 1 0 0.000 (model=tau = 0.3 + 0.0 z, N=200)
rate_cross_section rate_own_ranking rejection 400 1 0 0.360 (n=800)
rate_cross_section rate_split rejection 100 1 0 0.000 (n=800)
rd_mass_points adjust coverage 1000 10 6 0.021 (n=4000, support_per_side=5, 976 refused)
rd_mass_points off coverage 1000 10 5 0.021 (n=4000, support_per_side=5, 976 refused)
rd_mass_points cluster coverage 1000 8 0 0.001 (n=4000, support_per_side=5, 976 refused)
unbalanced_panel cs coverage 1000 8 5 0.023 (pattern=attrit_outcome, N=400)
unbalanced_panel cs_rcs coverage 1000 8 4 0.000 (pattern=attrit_outcome, N=400)
unbalanced_panel bjs coverage 1000 8 5 0.000 (pattern=attrit_outcome, N=400)
unbalanced_panel twfe coverage 1000 8 2 0.000 (pattern=attrit_outcome, N=400)

Inputs those do-files read (the other fixtures use tests/orig_parity/data/02_mpdta_original.csv):

Input SHA-256 (first 16)
tests/stata_parity/option_parity/data_85_dcdh_switch.csv 776bafc6c4c8e2f4
tests/stata_parity/option_parity/data_86_lprobust.csv 895c4205c6d1012b
tests/stata_parity/option_parity/data_87_did_had.csv 7609daa994c6aca4
tests/stata_parity/option_parity/data_94_bjs_options.csv 38192ebdc07262fc
tests/stata_parity/option_parity/data_96_csdid_unbalanced.csv e63036296fd3fcb1
tests/stata_parity/option_parity/data_97_dcdh_options.csv dc79c9f35475ab39