mci.shares.elast: Market share elasticities

Description Usage Arguments Details Value Author(s) References See Also Examples

Description

This function calculates the market share elasticities (point elasticity) with respect to an attraction/utility variable and its given weighting parameter.

Usage

1
2
mci.shares.elast (mcidataset, submarkets, suppliers, shares, mcivar, mciparam, 
check_df = TRUE)  

Arguments

mcidataset

an interaction matrix which is a data.frame containing the submarkets, suppliers, the market shares and a variable for the local market potential (e.g. purchasing power, number of customers, population)

submarkets

the column in the interaction matrix mcidataset containing the submarkets

suppliers

the column in the interaction matrix mcidataset containing the suppliers

shares

the column in the interaction matrix mcidataset containing the (local) market shares

mcivar

the column in the interaction matrix mcidataset containing the attraction/utility variable

mciparam

single value of the (empirically estimated) weighting parameter corresponding to the attraction/utility variable

check_df

logical argument that indicates if the input (dataset, column names) is checked (default: check_df = TRUE (should not be changed, only for internal use))

Details

Market-share elasticity is defined as the ratio of the relative change in the market share corresponding to a relative change in an explanatory (attraction/utility) variable, such as price or, in the context of retailing, driving time, sales area or price level. The elasticities calculated here are point elasticities (not arc elasticities): e_{s_{i}} = (d p_{i} / d X_{ki}) * (X_{ki} / {p_i}), which are calculated for the MCI model via: e_{s_{i}}=β _{k}*(1-p_i), where β _k is the corresponding weighting parameter. If the (absolute) elasticity value is greater than one, the suppliers' market share is called elastic, if it is smaller than one, the share is unelastic. E.g. if the share elasticity of a products' price is -2, a relative price reduction of 5% results in a share increase of 10% (Cooper/Nakanishi 2010). Note that the elasticity depends on the empirical shares: The greater the actual share, the smaller is the elasticity.

Value

The function mci.shares.elast() returns the input interaction matrix (data.frame) with a new column containing the calculated share elasticities for every combination of i and j.

Author(s)

Thomas Wieland

References

Cooper, L. G./Nakanishi, M. (2010): “Market-Share Analysis: Evaluating competitive marketing effectiveness”. Boston, Dordrecht, London : Kluwer (first published 1988). E-book version from 2010: http://www.anderson.ucla.edu/faculty/lee.cooper/MCI_Book/BOOKI2010.pdf

See Also

mci.fit, mci.shares

Examples

 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# MCI analysis for the grocery store market areas based on the POS survey in shopping1 #

data(shopping1)
# Loading the survey dataset
data(shopping2)
# Loading the distance/travel time dataset
data(shopping3)
# Loading the dataset containing information about the city districts
data(shopping4)
# Loading the grocery store data

shopping1_KAeast <- shopping1[shopping1$resid_code %in% 
shopping3$resid_code[shopping3$KA_east == 1],]
# Extracting only inhabitants of the eastern districts of Karlsruhe

ijmatrix_gro_adj <- ijmatrix.create(shopping1_KAeast, "resid_code",
"gro_purchase_code", "gro_purchase_expen", remSing = TRUE, remSing.val = 1,
remSingSupp.val = 2, correctVar = TRUE, correctVar.val = 0.1)
# Removing singular instances/outliers (remSing = TRUE) incorporating
# only suppliers which are at least obtained three times (remSingSupp.val = 2)
# Correcting the values (correctVar = TRUE)
# by adding 0.1 to the absolute values (correctVar.val = 0.1)

ijmatrix_gro_adj <- ijmatrix_gro_adj[(ijmatrix_gro_adj$gro_purchase_code !=
"REFORMHAUSBOESER") & (ijmatrix_gro_adj$gro_purchase_code != "WMARKT_DURLACH")
& (ijmatrix_gro_adj$gro_purchase_code != "X_INCOMPLETE_STORE"),]
# Remove non-regarded observations

ijmatrix_gro_adj_dist <- merge (ijmatrix_gro_adj, shopping2, by.x="interaction",
by.y="route")
# Include the distances and travel times (shopping2)
ijmatrix_gro_adj_dist_stores <- merge (ijmatrix_gro_adj_dist, shopping4,
by.x = "gro_purchase_code", by.y = "location_code")
# Adding the store information (shopping4)

mci.transvar(ijmatrix_gro_adj_dist_stores, "resid_code", "gro_purchase_code", 
"p_ij_obs")
# Log-centering transformation of one variable (p_ij_obs)

ijmatrix_gro_transf <- mci.transmat(ijmatrix_gro_adj_dist_stores, "resid_code",
"gro_purchase_code", "p_ij_obs", "d_time", "salesarea_qm")
# Log-centering transformation of the interaction matrix

mcimodel_gro_trips <- mci.fit(ijmatrix_gro_adj_dist_stores, "resid_code",
"gro_purchase_code", "p_ij_obs", "d_time", "salesarea_qm")
# MCI model for the grocery store market areas
# shares: "p_ij_obs", explanatory variables: "d_time", "salesarea_qm"

summary(mcimodel_gro_trips)
# Use like lm

# Calculating market share elasticity:
ijmatrix_gro_adj_dist_stores_elas1 <- mci.shares.elast (ijmatrix_gro_adj_dist_stores, 
"resid_code", "gro_purchase_code", "p_ij_obs", "d_time", -1.2443)
# Share elasticities of driving time

ijmatrix_gro_adj_dist_stores_elas2 <- mci.shares.elast (ijmatrix_gro_adj_dist_stores, 
"resid_code", "gro_purchase_code", "p_ij_obs", "salesarea_qm", 0.9413)
# Share elasticities of sales area of the stores

Example output

  [1]  0.5586409 -1.4456805  0.8119981  1.4633403 -1.4456805 -1.4456805
  [7] -0.4042878  0.1671033  0.7611454  0.8119981  0.1671033 -0.4297476
 [13]  0.6116451 -0.4297476  0.8924717 -0.4297476 -0.4297476 -0.4297476
 [19] -0.4297476  0.8924717  0.6116451 -0.4297476 -0.2148738 -0.2148738
 [25] -0.2148738  0.8265189 -0.2148738 -0.2148738 -0.2148738 -0.2148738
 [31]  1.1073455 -0.2148738 -0.2148738 -0.2148738 -0.2148738 -0.2148738
 [37]  1.1073455 -0.2148738 -0.2148738 -0.2148738 -0.2148738  0.8265189
 [43] -0.2148738 -0.2148738  0.1391845  0.1391845  0.4200111  0.8053619
 [49]  0.7105756 -0.9022082  0.5891535 -0.9022082  0.8053619 -0.9022082
 [55] -0.9022082 -0.1893441 -0.1893441 -0.1893441  0.8520486 -0.1893441
 [61] -0.1893441 -0.1893441 -0.1893441  0.8520486 -0.1893441 -0.1893441
 [67] -0.2768831 -0.2768831 -0.2768831  0.7645096 -0.2768831 -0.2768831
 [73] -0.2768831 -0.2768831  1.7274383 -0.2768831 -0.2768831 -0.1202018
 [79] -0.1202018 -0.1202018 -0.1202018 -0.1202018 -0.1202018 -0.1202018
 [85] -0.1202018  1.2020175 -0.1202018 -0.1202018 -0.3768671 -0.3768671
 [91]  0.6645256  1.2359167 -0.3768671 -0.3768671 -0.3768671 -0.3768671
 [97]  1.1144946 -0.3768671 -0.3768671 -0.3359608  0.7054318 -0.3359608
[103] -0.3359608 -0.3359608  0.7054318 -0.3359608 -0.3359608  1.2768230
[109] -0.3359608 -0.3359608 -0.2668185 -0.2668185 -0.2668185 -0.2668185
[115] -0.2668185  1.0554008 -0.2668185 -0.2668185  1.3459654 -0.2668185
[121] -0.2668185

Call:
lm(formula = mci_formula, data = mciworkfile)

Residuals:
     Min       1Q   Median       3Q      Max 
-1.27457 -0.28725 -0.02391  0.32163  1.29351 

Coefficients:
               Estimate Std. Error t value Pr(>|t|)    
d_time_t        -1.2443     0.2319  -5.367 4.02e-07 ***
salesarea_qm_t   0.9413     0.1158   8.132 4.59e-13 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4458 on 119 degrees of freedom
Multiple R-squared:  0.4603,	Adjusted R-squared:  0.4512 
F-statistic: 50.74 on 2 and 119 DF,  p-value: < 2.2e-16

MCI documentation built on May 2, 2019, 6:02 a.m.