mergeron.gen

Defines constants, specifications and containers for industry data generation and testing.

Submodules

Package Contents

mergeron.gen.DEFAULT_FCOUNT_WTS[source]
mergeron.gen.DEFAULT_BETA_BND_DIST_PARMS[source]
class mergeron.gen.SeedSequenceData[source]

Seed sequence values for shares, margins, and, optionally, firm-counts and prices.

share : numpy.random.SeedSequence[source]
pcm : numpy.random.SeedSequence[source]
fcounts : numpy.random.SeedSequence | None[source]
price : numpy.random.SeedSequence | None[source]
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.

SYM = (True, None)[source]
RNG = (False, None)[source]
NEG = (False, 'negative share-correlation')[source]
POS = (False, 'positive share-correlation')[source]
CSY = (False, 'market-wide cost-symmetry')[source]
class mergeron.gen.SHRDistribution[source]

Bases: str, mergeron.Enameled

Market share distributions.

UNI = 'Uniform'[source]

Uniform distribution over \(s_1 + s_2 \leqslant 1\)

DIR_FLAT = 'Flat Dirichlet'[source]

Shape parameter for all merging-firm-shares is unity (1)

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 of ShareSpec.dist_parms allows flexible specification of Dirichlet-distributed share-data generation.

DIR_COND = 'Conditional Dirichlet'[source]

Shape parameters for non-merging firms is proportional

Shape parameters for merging-firm-share are 2.0 each; and are equiproportional and add to 2.0 for all non-merging-firm-shares.

class mergeron.gen.ShareSpec[source]

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 that recapture_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.

dist_type : SHRDistribution[source]

See SHRDistribution

firm_counts_weights : mergeron.ArrayFloat | None[source]

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.

dist_parms : mergeron.ArrayFloat[source]

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.

recapture_form : mergeron.RECForm[source]

See mergeron.RECForm

recapture_ratio : float | None[source]

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.

UNI = 'Uniform'[source]
BETA = 'Beta'[source]
BETA_BND = 'Bounded Beta'[source]
EMPR = 'Damodaran margin data, resampled'[source]
class mergeron.gen.PCMRestriction[source]

Bases: str, mergeron.Enameled

Restriction on generated Firm 2 margins.

IID = 'independent and identically distributed (IID)'[source]
MNL = 'Nash-Bertrand equilibrium with multinomial logit (MNL) demand'[source]
SYM = 'symmetric'[source]
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.

MNL_DEP = 1.25[source]

For restricted PCM’s.

When merging firm’s PCMs are constrained for consistency with f.o.c.s from profit maximization under Nash-Bertrand oligopoly with MNL demand.

ONE = 1.0[source]

When initial set of draws is not restricted in any way.

class mergeron.gen.MarketSampleData[source]

Container for generated market sample dataset.

frmshr_array : mergeron.ArrayDouble[source]

Merging-firm shares (with two merging firms)

pcm_array : mergeron.ArrayDouble[source]

Merging-firms’ prices (normalized to 1, in default specification)

price_array : mergeron.ArrayDouble[source]

Merging-firms’ price-cost margins (PCM)

divr_array : mergeron.ArrayDouble[source]

Diversion ratio between the merging firms

hhi_delta : mergeron.ArrayDouble[source]

Change in HHI from combination of merging firms

aggregate_purchase_prob : mergeron.ArrayDouble[source]

One (1) minus probability that the outside good is chosen

Converts market shares to choice probabilities by multiplication.

fcounts : mergeron.ArrayINT[source]

Number of firms in market

nth_firm_share : mergeron.ArrayDouble[source]

Market-share of n-th firm

Relevant for testing draws that do or do not meet HSR filing thresholds.

hhi_post : mergeron.ArrayDouble[source]

Post-merger contribution to Herfindahl-Hirschman Index (HHI)

to_h5bin()[source]

Save market sample data to HDF5 file.

classmethod from_h5f(_hfh)[source]

Load market sample data from HDF5 file.

class mergeron.gen.ShareSampleData[source]

Container for generated market shares.

Includes related measures of market structure and aggregate purchase probability.

mktshr_array : mergeron.ArrayDouble[source]

All-firm shares (with two merging firms)

fcounts : mergeron.ArrayINT[source]

All-firm-count for each draw

nth_firm_share : mergeron.ArrayDouble[source]

Market-share of n-th firm

aggregate_purchase_prob : mergeron.ArrayDouble[source]

Converts market shares to choice probabilities by multiplication.

class mergeron.gen.PriceSampleData[source]

Container for generated price array, and related.

price_array : mergeron.ArrayDouble[source]

Merging-firms’ prices

hsr_filing_test : mergeron.ArrayBoolean[source]

Flags draws as meeting HSR filing thresholds or not

class mergeron.gen.MarginSampleData[source]

Container for generated margin array and related MNL test array.

pcm_array : mergeron.ArrayDouble[source]

Merging-firms’ PCMs

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.

CLRN = 'clearance'[source]
ENFT = 'enforcement'[source]
BOTH = 'clearance and enforcement, respectively'[source]
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, or INVResolution.BOTH. In the case of INVResolution.BOTH, two columns of counts are returned: one for each resolution.

by_firm_count : mergeron.ArrayBIGINT[source]
by_delta : mergeron.ArrayBIGINT[source]
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 and mergeron.gen.enforcement_stats.ZONE_VALS for more detail.