cournot_tariff: Tariff Simulation With A Cournot Quantity Setting Game

View source: R/cournot_tariff.R

cournot_tariffR Documentation

Tariff Simulation With A Cournot Quantity Setting Game

Description

Simulate the effect of tariffs when firms play a cournot quantity setting game and consumer demand is either linear or log-linear

Usage

cournot_tariff(
  prices,
  quantities,
  margins = matrix(NA_real_, nrow(quantities), ncol(quantities)),
  demand = rep("linear", length(prices)),
  cost = rep("linear", nrow(quantities)),
  tariffPre = matrix(0, nrow = nrow(quantities), ncol = ncol(quantities)),
  tariffPost = tariffPre,
  mcfunPre = list(),
  mcfunPost = mcfunPre,
  vcfunPre = list(),
  vcfunPost = vcfunPre,
  capacitiesPre = rep(Inf, nrow(quantities)),
  capacitiesPost = capacitiesPre,
  productsPre = !is.na(quantities),
  productsPost = productsPre,
  owner = NULL,
  mktElast = rep(NA_real_, length(prices)),
  quantityStart = as.vector(quantities),
  control.slopes,
  control.equ,
  labels,
  ...
)

Arguments

prices

A length k vector product prices.

quantities

An n x k matrix of product quantities. All quantities must either be positive, or if the product is not produced by a plant, NA

margins

An n x k matrix of product margins. All margins must be either be between 0 and 1, or NA.

demand

A length k character vector equal to "linear" if a product's demand curve is assumed to be linear or "log" if a product's demand curve is assumed to be log-linear.

cost

A length k character vector equal to "linear" if a plant's marginal cost curve is assumed to be linear or "constant" if a plant's marginal curve is assumed to be constant. Returns an error if a multi-plant firm with constant marginal costs does not have capacity constraints.

tariffPre

An n x k matrix where each element equals the current ad valorem tariff (expressed as a proportion of consumer price) imposed on each product. Default is 0, which assumes no tariff.

tariffPost

An n x k matrix where each element equals the new ad valorem tariff (expressed as a proportion of consumer price) imposed on each product. Default is 0, which assumes no tariff.

mcfunPre

a length n list of functions that calculate a plant's marginal cost under the current tariff structure. If empty (the default), assumes quadratic costs.

mcfunPost

a length n list of functions that calculate a plant's marginal cost under the new tariff structure. If empty (the default), assumes quadratic costs.

vcfunPre

a length n list of functions that calculate a plant's variable cost under the current tariff structure. If empty (the default), assumes quadratic costs.

vcfunPost

a length n list of functions that calculate a plant's variable cost under the new tariff structure. If empty (the default), assumes quadratic costs.

capacitiesPre

A length n numeric vector of plant capacities under the current tariff regime. Default is Inf.

capacitiesPost

A length n numeric vector of plant capacities under the new tariff regime. Default is Inf.

productsPre

An n x k matrix that equals TRUE if under the current tariff regime, a plant produces a product. Default is TRUE if 'quantities' is not NA.

productsPost

An n x k matrix that equals TRUE if under the new tariff regime, a plant produces a product. Default equals 'productsPre'.

owner

EITHER a vector of length n whose values indicate which plants are commonly owned OR an n x n matrix of ownership shares.

mktElast

A length k vector of product elasticities. Default is a length k vector of NAs

quantityStart

A length k vector of quantities used as the initial guess in the nonlinear equation solver. Default is 'quantities'.

control.slopes

A list of optim control parameters passed to the calibration routine optimizer (typically the calcSlopes method).

control.equ

A list of BBsolve control parameters passed to the non-linear equation solver (typically the calcPrices method).

labels

A k-length vector of labels.

...

Additional options to feed to the BBsolve optimizer used to solve for equilibrium quantities.

Details

Let k denote the number of products and n denote the number of plants. Using price, and quantity, information for all products in each market, as well as margin information for at least one products in each market, cournot_tariff is able to recover the slopes and intercepts of either a Linear or Log-linear demand system. These parameters are then used to simulate the price effects of a tariff under the assumption that the firms are playing a homogeneous products simultaneous quantity setting game.

Value

cournot_tariff returns an instance of class Cournot from package antitrust, depending upon the value of the “demand” argument.

References

Simon P. Anderson, Andre de Palma, Brent Kreider, The efficiency of indirect taxes under imperfect competition, Journal of Public Economics, Volume 81, Issue 2, 2001,Pages 231-251.

Examples

## Simulate the effect of a 75% ad valorem tariff in a
## 5-firm, single-product market with linear demand and quadratic costs
## Firm 1 is assumed to be foreign, and so subject to a tariff


n <- 5 #number of firms in market
cap <- rnorm(n,mean = .5, sd = .1)
int <- 10
slope <- -.25
tariffPre <- tariffPost <- rep(0, n)
tariffPost[1] <- .75

B.pre.c = matrix(slope,nrow=n,ncol=n)
diag(B.pre.c) = 2* diag(B.pre.c) - 1/cap
quantity.pre.c = rowSums(solve(B.pre.c) * -int)
price.pre.c = int + slope * sum(quantity.pre.c)
mc.pre.c = quantity.pre.c/cap
vc.pre.c = quantity.pre.c^2/(2*cap)
margin.pre.c = 1 - mc.pre.c/price.pre.c

#prep inputs for Cournot
owner.pre <- diag(n)



result.c <- cournot_tariff(prices = price.pre.c,quantities = as.matrix(quantity.pre.c),
                    margins=as.matrix(margin.pre.c),
                    owner=owner.pre,
                    tariffPre =  as.matrix(tariffPre),
                    tariffPost = as.matrix(tariffPost))

summary(result.c, market = TRUE)         # summarize tariff (high-level)
summary(result.c, market = FALSE)         # summarize tariff (detailed)


luciu5/trade documentation built on Aug. 26, 2022, 5:52 a.m.