Quantity response to own and cross price changes under constant elasticities

Projects the new quantity of good i when its own price and the price of good j both change, using the log-log demand form in which each coefficient is an elasticity: the proportional change in log quantity is the elasticity-weighted sum of the log price changes. For small changes this equals the article's approximation, proportional change in Q_i about equal to the sum of eps_ij times the proportional change in P_j.

Signature

Q_i1 = Q_i0 * (P_i1 / P_i0)^eps_ii * (P_j1 / P_j0)^eps_ij
Inputs
InputsDefinitionUnit
Q_i0Current quantity of good iunits per period
P_i1New price of good icurrency per unit
P_i0Current price of good i, above zerocurrency per unit
eps_iiConstant elasticity of good i's demand with respect to its own price, usually negativenone
P_j1New price of good jcurrency per unit
P_j0Current price of good j, above zerocurrency per unit
eps_ijConstant elasticity of good i's demand with respect to the price of good jnone
Output
Q_i1Quantity of good i demanded after the changesunits per period

Function

Cross-price elasticity of demand for one health care good with respect to another good's price

Maps a change in the price of good j to the proportional change in the quantity of good i demanded, holding income, preferences and other prices constant. A positive value marks substitutes, as with a branded medicine and its generic; a negative value marks complements; the order of the subscripts matters. Own-price elasticity is the case i = j. The notation follows the Cross-Price Elasticity article.

Computational function

  • Computational function: new quantities of several products from an own and cross price elasticity matrix

    Takes current quantities and prices of several products, their new prices and a matrix of own-price (diagonal) and cross-price (off-diagonal) elasticities, and returns each product's new quantity under constant elasticities (HE-FM-XPE-003 extended to any number of prices), the calculation behind policy models that apply an elasticity matrix to sales or to individual records. The inputs differ from the formula's: a whole matrix and price vectors instead of two prices.

    Inputs and outputs: Q_0: Current quantity of each product; required, vector, above zero. Unit: units per period.; P_0: Current price of each product; required, vector, above zero. Unit: currency per unit.; P_1: New price of each product; required, vector, above zero. Unit: currency per unit.; E: Square matrix with row i holding the elasticities of product i's demand with respect to each product's price, own-price on the diagonal; required. Unit: none.; Q_1: New quantity of each product. Unit: units per period.; pct: Proportional change in each quantity. Unit: proportion.

    Assumption: Constant elasticities over the price range, income and other prices unchanged, and an elasticity matrix estimated for the same population and price measure; insignificant cross terms are kept or set to zero as a stated structural choice.

    Worked example (Branded and generic co-payments, article example): With quantities of 4,000 branded and 6,000 generic packs, co-payments moving from 8 and 2 pounds to 12 and 2 pounds and an elasticity matrix with rows (minus 0.8824, 0.10) for branded and (0.3846, minus 0.30) for generic, the new quantities are about 2,796.90 and 7,012.55 packs; the terms involving the unchanged generic price are illustrative and do not affect the result (computed here for illustration). Q_0 = [4000, 6000]; P_0 = [8, 2]; P_1 = [12, 2]; E = [[-0.8824, 0.10], [0.3846, -0.30]]; Q_1 = [2796.9008, 7012.5496]; pct = [-0.300775, 0.168758]

    Worked example (Equal 10 per cent rise for two products): Quantities of 1,000 and 500 with rows (minus 0.8, 0.3) and (0.2, minus 0.6) become about 953.46 and 481.30. Q_0 = [1000, 500]; P_0 = [1, 1]; P_1 = [1.1, 1.1]; E = [[-0.8, 0.3], [0.2, -0.6]]; Q_1 = [953.4626, 481.2968]

    Excel: With the elasticity matrix in a range named Elasticities, current and new prices in vertical ranges OldPrices and NewPrices and current quantities in OldQty, =OldQty*EXP(MMULT(Elasticities,LN(NewPrices/OldPrices))) returns the new quantities as a dynamic array (Excel 365).

    R: xpe_matrix <- function(Q_0, P_0, P_1, E) { Q_1 <- Q_0*exp(as.vector(E %*% log(P_1/P_0))); list(Q_1 = Q_1, pct = Q_1/Q_0-1) } Returns new quantities of 2796.9008 and 7012.5496 for the first example, with E entered as matrix(c(-0.8824, 0.10, 0.3846, -0.30), 2, byrow = TRUE).

    Python: def xpe_matrix(Q_0, P_0, P_1, E): r = [math.log(b/a) for a, b in zip(P_0, P_1)]; Q_1 = [q*math.exp(sum(e*x for e, x in zip(row, r))) for q, row in zip(Q_0, E)]; return {"Q_1": Q_1, "pct": [b/a-1 for a, b in zip(Q_0, Q_1)]} Needs import math; returns the same values as the R function, with E as a list of rows.

    Test (No price change leaves quantities unchanged): With P_1 equal to P_0 every quantity equals Q_0. Expected result: TRUE. Excel check: =SUMPRODUCT(ABS(OldQty*EXP(MMULT(Elasticities,LN(OldPrices/OldPrices)))-OldQty))<1E-9

    Test (Row order of the matrix): Row i must hold the responses of product i. In the first example the generic row gives 6,000 x 1.5 to the power 0.3846, about 7,012.55 packs; a transposed matrix would give 6,000 x 1.5 to the power 0.10, about 6,248 packs. Expected result: TRUE. Excel check, with the new quantities in NewQty: =ABS(INDEX(NewQty,2,1)-6000*1.5^0.3846)<1E-6

    Common error (Assuming the matrix is symmetric): Gross cross elasticities need not be equal in the two directions, and even compensated ones are equal only after weighting by budget shares (HE-FM-XPE-005); filling one triangle of the matrix by copying the other is not justified.

    Source: Meng Y, Brennan A, Purshouse R, Hill-McManus D, Angus C, Holmes J, Meier PS. Estimation of own and cross price elasticities of alcohol demand in the UK: a pseudo-panel approach using the Living Costs and Food Survey 2001-2009. Journal of Health Economics. 2014;34:96-103. doi:10.1016/j.jhealeco.2013.12.006. Section 2, equation 4, and Introduction.

    Q_1_i = Q_0_i * exp(sum_(j=1)^m [E_ij * log(P_1_j / P_0_j)]); pct_i = Q_1_i / Q_0_i - 1

Try this function

Implementations

  • Excel

    Quantity after own and cross price changes from named cells

    With QtyBefore, OwnPriceAfter, OwnPriceBefore, OtherPriceAfter, OtherPriceBefore, OwnElasticity and CrossElasticity named, the formula returns the new quantity, held in QtyProjected.

    =QtyBefore*(OwnPriceAfter/OwnPriceBefore)^OwnElasticity*(OtherPriceAfter/OtherPriceBefore)^CrossElasticity

Assumptions

  • Constant elasticities over the price range

    Log quantity is linear in log prices, as in Meng and colleagues' alcohol demand equations, so each elasticity is the same at every price in the range.

  • Other prices, income and preferences unchanged in the cross-price elasticity projection

    Only P_i and P_j change; further goods with changing prices add further factors, which the matrix version (HE-CF-XPE-001) handles.

Worked examples

  • Generic packs after the branded co-payment rise under a constant elasticity

    With the generic co-payment unchanged at 2 pounds and a cross elasticity of 0.3846, a branded co-payment rise from 8 to 12 pounds projects 6,000 x 1.5 to the power 0.3846, about 7,013 generic packs, close to the 7,000 observed (computed here for illustration).

    Q_i0 = 6000; P_i1 = 2; P_i0 = 2; P_j1 = 12; P_j0 = 8; eps_ii = -0.3; eps_ij = 0.3846; Q_i1 = 7012.55
  • Branded packs after their own co-payment rise under a constant elasticity

    With an own-price elasticity of minus 0.8824 and the generic price unchanged, branded packs fall from 4,000 to about 2,797, close to the 2,800 observed (computed here for illustration).

    Q_i0 = 4000; P_i1 = 12; P_i0 = 8; P_j1 = 2; P_j0 = 2; eps_ii = -0.8824; eps_ij = 0.1; Q_i1 = 2796.9
  • Own and cross-price elasticity response to a 10 per cent tax on two substitutes

    If a tax raises both prices by 10 per cent, with an own elasticity of minus 0.8 and a cross elasticity of 0.3, 1,000 units become 1,000 x 1.1 to the power minus 0.5, about 953.5; the small-change sum, 1 minus 0.08 plus 0.03, gives 950 (computed here for illustration).

    Q_i0 = 1000; P_i1 = 1.1; P_i0 = 1; P_j1 = 1.1; P_j0 = 1; eps_ii = -0.8; eps_ij = 0.3; Q_i1 = 953.46

Common errors

  • Leaving the cross term out of a price policy model

    Modelling only the own-price response to a tax on one product misses switching to its substitutes; the IARC handbook warns that taxing substitutable products at a much lower rate can make tobacco taxation ineffective.

  • Using a cross-tax elasticity as a cross-price elasticity

    A cross-tax elasticity equals eps_ij times the elasticity of P_j with respect to the tax; with a specific tax passed through one for one that factor is T_j / P_j, below 1, so the two differ unless a 1 per cent tax rise raises the price by 1 per cent.

Sources

  • Log-log demand equations whose price coefficients are own and cross elasticities

    Meng Y, Brennan A, Purshouse R, Hill-McManus D, Angus C, Holmes J, Meier PS. Estimation of own and cross price elasticities of alcohol demand in the UK: a pseudo-panel approach using the Living Costs and Food Survey 2001-2009. Journal of Health Economics. 2014;34:96-103. doi:10.1016/j.jhealeco.2013.12.006. Section 2, equation 4: log consumption of each of ten alcohol categories regressed on the logs of all ten prices, log income and other covariates with subgroup fixed effects, giving own-price and cross-price elasticities; Introduction: earlier UK work estimated own and cross elasticities for 16 beverage categories to model minimum unit pricing.

    View source →

  • Tobacco taxation weakened by lower taxes on substitutable products

    International Agency for Research on Cancer. Effectiveness of Tax and Price Policies for Tobacco Control. IARC Handbooks of Cancer Prevention, Tobacco Control, Volume 14. Lyon: IARC; 2011. Chapter 2, Overview of tobacco taxation, page 22: chewing tobacco is almost always taxed at a much lower rate than cigarettes, and to the extent that such products can be substituted for cigarettes, tobacco taxation can be rendered ineffective if other products remain taxed at a much lower rate.

    View source →

Canonical Identity