mergeron.gen¶
Defines constants, specifications and containers for industry data generation and testing.
Submodules¶
Package Contents¶
- class mergeron.gen.SeedSequenceData[source]¶
Seed sequence values for shares, margins, and, optionally, firm-counts and prices.
- class mergeron.gen.PriceSpec[source]¶
Bases:
tuple
[bool
,str | None
],mergeron.Enameled
Price specification.
Whether prices are symmetric and, if not, the direction of correlation, if any.
- class mergeron.gen.SHRDistribution[source]¶
Bases:
str
,mergeron.Enameled
Market share distributions.
-
DIR_FLAT_CONSTR =
'Flat Dirichlet - Constrained'
[source]¶ Impose minimum probability weight on each firm-count
Only firm-counts with probability weight of 3% or more are included for data generation.
-
DIR_ASYM =
'Asymmetric Dirichlet'
[source]¶ Share distribution for merging-firm shares has a higher peak share
By default, shape parameter for merging-firm-share is 2.5, and 1.0 for all others. Defining,
ShareSpec.dist_parms
as a vector of shape parameters with length matching that ofShareSpec.dist_parms
allows flexible specification of Dirichlet-distributed share-data generation.
-
DIR_FLAT_CONSTR =
Market share specification.
A salient feature of market-share specification in this package is that the draws represent markets with multiple different firm-counts. Firm-counts are unspecified if the share distribution is
SHRDistribution.UNI
, for Dirichlet-distributed market-shares, the default specification is that firm-counts vary between 2 and 7 firms with each value equally likely.Notes
If
dist_type
==SHRDistribution.UNI
, it is then infeasible thatrecapture_form
==mergeron.RECForm.OUTIN
. In other words, recapture ratios cannot be estimated using outside-good choice probabilities if the distribution of markets over firm-counts is unspecified.See
SHRDistribution
Relative or absolute frequencies of pre-merger firm counts
Defaults to
DEFAULT_FCOUNT_WTS
, which specifies pre-merger firm-counts of 2 to 7 with weights in descending order from 6 to 1.ALERT: Firm-count weights are irrelevant when the merging firms’ shares are specified to have uniform distribution; therefore this attribute is forced to None if
dist_type
==SHRDistribution.UNI
.
Parameters for tailoring market-share distribution
For Uniform distribution, bounds of the distribution; defaults to (0, 1); for Dirichlet-type distributions, a vector of shape parameters of length equal to 1 plus the length of firm-count weights below; defaults depend on type of Dirichlet-distribution specified.
See
mergeron.RECForm
A value between 0 and 1.
None
if market share specification requires direct generation of outside good choice probabilities (mergeron.RECForm.OUTIN
).The recapture ratio is usually calibrated to the numbers-equivalent of the HHI threshold for the presumption of harm from unilateral competitive effects in published merger guidelines. Accordingly, the recapture ratio rounded to the nearest 5% is:
0.85, 7-to-6 merger from symmetry; US Guidelines, 1992, 2023
0.80, 5-to-4 merger from symmetry
0.80, 5-to-4 merger to symmetry; US Guidelines, 2010
Highlighting indicates hypothetical mergers in the neighborhood of (the boundary of) the Guidelines presumption of harm. (In the EU Guidelines, concentration measures serve as screens for further investigation, rather than as the basis for presumptions of harm or presumptions no harm.)
ALERT: If diversion ratios are estimated by specifying a choice probability for the outside good, the recapture ratio is set to None, overriding any user-specified value.
- class mergeron.gen.PCMDistribution[source]¶
Bases:
str
,mergeron.Enameled
Margin distributions.
- class mergeron.gen.PCMRestriction[source]¶
Bases:
str
,mergeron.Enameled
Restriction on generated Firm 2 margins.
- class mergeron.gen.PCMSpec[source]¶
Price-cost margin (PCM) specification.
If price-cost margins are specified as having Beta distribution, dist_parms is specified as a pair of positive, non-zero shape parameters of the standard Beta distribution. Specifying shape parameters
np.array([1, 1])
is known equivalent to specifying uniform distribution over the interval \([0, 1]\). If price-cost margins are specified as having Bounded-Beta distribution, dist_parms is specified as the tuple, (mean, std deviation, min, max), where min and max are lower- and upper-bounds respectively within the interval \([0, 1]\).- dist_type : PCMDistribution[source]¶
See
PCMDistribution
- dist_parms : mergeron.ArrayFloat[source]¶
Parameter specification for tailoring PCM distribution
For Uniform distribution, bounds of the distribution; defaults to (0, 1); for Beta distribution, shape parameters, defaults to (1, 1); for Bounded-Beta distribution, vector of (min, max, mean, std. deviation), non-optional; for empirical distribution based on Damodaran margin data, optional, ignored
- pcm_restriction : PCMRestriction[source]¶
See
PCMRestriction
- class mergeron.gen.SSZConstant[source]¶
Bases:
float
,mergeron.Enameled
Scale factors to offset sample size reduction.
Sample size reduction occurs when imposing a HSR filing test or equilibrium condition under MNL demand.
-
HSR_NTH =
1.666667
[source]¶ For HSR filing requirement.
When filing requirement is assumed met if maximum merging-firm shares exceeds ten (10) times the n-th firm’s share and minimum merging-firm share is no less than n-th firm’s share. To assure that the number of draws available after applying the given restriction, the initial number of draws is larger than the sample size by the given scale factor.
-
HSR_TEN =
1.234567
[source]¶ For alternative HSR filing requirement,
When filing requirement is assumed met if merging-firm shares exceed 10:1 ratio to each other.
-
HSR_NTH =
- class mergeron.gen.MarketSampleData[source]¶
Container for generated market sample dataset.
- pcm_array : mergeron.ArrayDouble[source]¶
Merging-firms’ prices (normalized to 1, in default specification)
- aggregate_purchase_prob : mergeron.ArrayDouble[source]¶
One (1) minus probability that the outside good is chosen
Converts market shares to choice probabilities by multiplication.
Market-share of n-th firm
Relevant for testing draws that do or do not meet HSR filing thresholds.
Container for generated market shares.
Includes related measures of market structure and aggregate purchase probability.
All-firm shares (with two merging firms)
All-firm-count for each draw
Market-share of n-th firm
Converts market shares to choice probabilities by multiplication.
- class mergeron.gen.MarginSampleData[source]¶
Container for generated margin array and related MNL test array.
- mnl_test_array : mergeron.ArrayBoolean[source]¶
Flags infeasible observations as False and rest as True
Applying restrictions from Bertrand-Nash oligopoly with MNL demand results in some draws of Firm 2 PCM falling outside the feasible interval, \([0, 1]\) for certain combinations of merging firms shares as initially drawn. Such draws are flagged as infeasible (False) in
mnl_test_array
while draws with feaseible PCM values flagged True. This array is used to exclude infeasible draws when imposing MNL demand in simulations.
- class mergeron.gen.INVResolution[source]¶
Bases:
str
,mergeron.Enameled
Report investigations resulting in clearance; enforcement; or both, respectively.
- class mergeron.gen.UPPTestRegime[source]¶
Configuration for UPP tests.
- resolution : INVResolution[source]¶
Whether to test clearance, enforcement.
- guppi_aggregator : mergeron.UPPAggrSelector[source]¶
Aggregator for GUPPI test.
- divr_aggregator : mergeron.UPPAggrSelector[source]¶
Aggregator for diversion ratio test.
- class mergeron.gen.UPPTestsCounts[source]¶
Counts of markets resolved as specified.
Resolution may be either
INVResolution.ENFT
,INVResolution.CLRN
, orINVResolution.BOTH
. In the case ofINVResolution.BOTH
, two columns of counts are returned: one for each resolution.- by_conczone : mergeron.ArrayBIGINT[source]¶
Zones are “unconcentrated”, “moderately concentrated”, and “highly concentrated”, with further detail by HHI and ΔHHI for mergers in the “unconcentrated” and “moderately concentrated” zones. See
mergeron.gen.enforcement_stats.HMG_PRESUMPTION_ZONE_MAP
andmergeron.gen.enforcement_stats.ZONE_VALS
for more detail.