sim: Merger Simulation With User-Supplied Demand Parameters In antitrust: Tools for Antitrust Practitioners

Description

Simulates the price effects of a merger between two firms with user-supplied demand parameters under the assumption that all firms in the market are playing a differentiated products Bertrand pricing game.

Usage

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13``` ```sim(prices, demand=c( "Linear","AIDS","LogLin", "Logit","CES","LogitNests", "CESNests","LogitCap"), demand.param, ownerPre,ownerPost,nests, capacities, mcDelta=rep(0,length(prices)), subset=rep(TRUE,length(prices)), priceOutside, priceStart, labels=paste("Prod",1:length(prices),sep=""),... ) ```

Arguments

 Let k denote the number of products produced by all firms. `prices` A length k vector of product prices. `demand` A character string indicating the type of demand system to be used in the merger simulation. Supported demand systems are linear (‘Linear’), log-linear(‘LogLin’), logit (‘Logit’), nested logit (‘LogitNests’), ces (‘CES’), nested CES (‘CESNests’) and capacity constrained Logit (‘LogitCap’). `demand.param` See Below. `ownerPre` EITHER a vector of length k whose values indicate which firm produced a product pre-merger OR a k x k matrix of pre-merger ownership shares. `ownerPost` EITHER a vector of length k whose values indicate which firm produced a product after the merger OR a k x k matrix of post-merger ownership shares. `nests` A length k vector identifying the nest that each product belongs to. Must be supplied when ‘demand’ equals ‘CESNests’ and ‘LogitNests’. `capacities` A length k vector of product capacities. Must be supplied when ‘demand’ equals ‘LogitCap’. `mcDelta` A vector of length k where each element equals the proportional change in a product's marginal costs due to the merger. Default is 0, which assumes that the merger does not affect any products' marginal cost. `subset` A vector of length k where each element equals TRUE if the product indexed by that element should be included in the post-merger simulation and FALSE if it should be excluded.Default is a length k vector of TRUE. `priceOutside` A length 1 vector indicating the price of the outside good. This option only applies to the ‘Logit’ class and its child classes Default for ‘Logit’,‘LogitNests’, and ‘LogitCap’ is 0, and for ‘CES’ and ‘CesNests’ is 1. `priceStart` A length k vector of starting values used to solve for equilibrium price. Default is the ‘prices’ vector for all values of demand except for ‘AIDS’, which is set equal to a vector of 0s. `labels` A k-length vector of labels. Default is “Prod#”, where ‘#’ is a number between 1 and the length of ‘prices’. `...` Additional options to feed to the optimizer used to solve for equilibrium prices.

Details

Using user-supplied demand parameters, `sim` simulates the effects of a merger in a market where firms are playing a differentiated products pricing game.

If ‘demand’ equals ‘Linear’, ‘LogLin’, or ‘AIDS’, then ‘demand.param’ must be a list containing ‘slopes’, a k x k matrix of slope coefficients, and ‘intercepts’, a length-k vector of intercepts. Additionally, if ‘demand’ equals ‘AIDS’, ‘demand.param’ must contain ‘mktElast’, an estimate of aggregate market elasticity. For ‘Linear’ demand models, `sim` returns an error if any intercepts are negative, and for both ‘Linear’, ‘LogLin’, and ‘AIDS’ models, `sim` returns an error if not all diagonal elements of the slopes matrix are negative.

If ‘demand’ equals ‘Logit’ or ‘LogitNests’, then ‘demand.param’ must equal a list containing

• alphaThe price coefficient.

• meanvalA length-k vector of mean valuations ‘meanval’. If none of the values of ‘meanval’ are zero, an outside good is assumed to exist.

If demand equals ‘CES’ or ‘CESNests’, then ‘demand.param’ must equal a list containing

• gamma The price coefficient,

• alphaThe coefficient on the numeraire good. May instead be calibrated using ‘shareInside’,

• meanvalA length-k vector of mean valuations ‘meanval’. If none of the values of ‘meanval’ are zero, an outside good is assumed to exist,

• shareInside The budget share of all products in the market. Default is 1, meaning that all consumer wealth is spent on products in the market. May instead be specified using ‘alpha’.

Value

`sim` returns an instance of the class specified by the ‘demand’ argument.

Author(s)

Charles Taragin [email protected]

The S4 class documentation for: `Linear`, `AIDS`, `LogLin`, `Logit`, `LogitNests`, `CES`, `CESNests`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36``` ```## Calibration and simulation results from a merger between Budweiser and ## Old Style. Note that the in the following model there is no outside ## good; BUD's mean value has been normalized to zero. ## Source: Epstein/Rubenfeld 2004, pg 80 prodNames <- c("BUD","OLD STYLE","MILLER","MILLER-LITE","OTHER-LITE","OTHER-REG") ownerPre <-c("BUD","OLD STYLE","MILLER","MILLER","OTHER-LITE","OTHER-REG") ownerPost <-c("BUD","BUD","MILLER","MILLER","OTHER-LITE","OTHER-REG") nests <- c("Reg","Reg","Reg","Light","Light","Reg") price <- c(.0441,.0328,.0409,.0396,.0387,.0497) demand.param=list(alpha=-48.0457, meanval=c(0,0.4149233,1.1899885,0.8252482,0.1460183,1.4865730) ) sim.logit <- sim(price,demand="Logit",demand.param,ownerPre=ownerPre,ownerPost=ownerPost) print(sim.logit) # return predicted price change summary(sim.logit) # summarize merger simulation elast(sim.logit,TRUE) # returns premerger elasticities elast(sim.logit,FALSE) # returns postmerger elasticities diversion(sim.logit,TRUE) # return premerger diversion ratios diversion(sim.logit,FALSE) # return postmerger diversion ratios cmcr(sim.logit) #calculate compensating marginal cost reduction upp(sim.logit) #calculate Upwards Pricing Pressure Index CV(sim.logit) #calculate representative agent compensating variation ```