diff_diff.compute_pretrends_power#

diff_diff.compute_pretrends_power(results, M=None, alpha=0.05, target_power=0.8, violation_type='linear', pre_periods=None, violation_weights=None, pretest_form='nis')[source]

Convenience function for pre-trends power analysis.

Parameters:
  • results (results object) – Event study results.

  • M (float, optional) – Violation magnitude to evaluate.

  • alpha (float, default=0.05) – Significance level.

  • target_power (float, default=0.80) – Target power for MDV calculation.

  • violation_type (str, default='linear') – Type of violation pattern: linear / constant / last_period / custom. For custom, also pass violation_weights.

  • pre_periods (list of int, optional) – Explicit list of pre-treatment periods. If None, attempts to infer from results. Use when you’ve estimated all periods as post_periods.

  • violation_weights (np.ndarray, optional) – Custom violation pattern weights. Required when violation_type='custom'; ignored for other violation types.

  • pretest_form ({'nis', 'wald'}, default='nis') – Pretest acceptance-region form. 'nis' (default) implements Roth (2022) Section II.A-B no-individually-significant box probability via scipy.stats.multivariate_normal.cdf; 'wald' is the noncentral-chi-squared form retained for backwards compatibility with the pre-PR-B shipped numerical output (also a paper-supported alternative under Propositions 1+3+4).

Returns:

Power analysis results.

Return type:

PreTrendsPowerResults

Examples

>>> from diff_diff import MultiPeriodDiD
>>> from diff_diff.pretrends import compute_pretrends_power
>>>
>>> results = MultiPeriodDiD().fit(data, ...)
>>> power_results = compute_pretrends_power(results, pre_periods=[0, 1, 2, 3])
>>> print(f"MDV: {power_results.mdv:.3f}")
>>> print(f"Power: {power_results.power:.1%}")