diff --git a/Shelegia_Motta_2021/IModel.py b/Shelegia_Motta_2021/IModel.py
index 09c8ccb..812bd72 100644
--- a/Shelegia_Motta_2021/IModel.py
+++ b/Shelegia_Motta_2021/IModel.py
@@ -171,6 +171,7 @@ def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwarg
Optional key word arguments for the best answers plot.
- title: title on top of the plot, instead of the default title.
- options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
+ - thresholds_legend: If true, an additional legend explaining the thresholds of the entrant and the incumbent will be added to the plot.
Returns
-------
@@ -192,6 +193,7 @@ def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matpl
Optional key word arguments for the equilibrium plot.
- title: title on top of the plot, instead of the default title.
- options_legend: If true, an additional legend, explaining the options of the entrant and the incumbent, will be added to the plot.
+ - thresholds_legend: If true, an additional legend explaining the thresholds of the entrant and the incumbent will be added to the plot.
Returns
-------
diff --git a/Shelegia_Motta_2021/Models.py b/Shelegia_Motta_2021/Models.py
index b0e7ac0..ecd8f9b 100644
--- a/Shelegia_Motta_2021/Models.py
+++ b/Shelegia_Motta_2021/Models.py
@@ -243,8 +243,9 @@ def _plot(self, coordinates: List[List[Tuple[float, float]]], labels: List[str],
axis.add_patch(poly)
axis.legend(bbox_to_anchor=(1.3, 1), loc="upper left")
- if kwargs.get('options_legend', False):
- axis.text(-0.05, -0.4, self._create_options_legend(), verticalalignment='top')
+ additional_legend: str = self._create_additional_legend(options_legend=kwargs.get('options_legend', False), thresholds_legend=kwargs.get('thresholds_legend', False))
+ if additional_legend != "":
+ axis.text(-0.1, -0.6, additional_legend, verticalalignment='top', linespacing=1)
BaseModel._set_axis_labels(axis, title=kwargs.get('title', ''),
x_label=kwargs.get('xlabel', 'Assets of the entrant'),
y_label=kwargs.get('ylabel', 'Fixed costs of copying for the incumbent'))
@@ -254,15 +255,18 @@ def _plot(self, coordinates: List[List[Tuple[float, float]]], labels: List[str],
def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes:
poly_coordinates: List[List[Tuple[float, float]]] = self._get_incumbent_best_answer_coordinates()
poly_labels: List[str] = self._get_incumbent_best_answer_labels()
- axis: matplotlib.axes.Axes = self._plot(title=kwargs.get("title", "Best Answers of the incumbent to the choices of the entrant"),
- coordinates=poly_coordinates, labels=poly_labels, axis=axis, options_legend=kwargs.get('options_legend', False))
+ axis: matplotlib.axes.Axes = self._plot(
+ title="Best Answers of the incumbent to the choices of the entrant",
+ coordinates=poly_coordinates, labels=poly_labels, axis=axis, **kwargs)
return axis
def _create_choice_answer_label(self, entrant: Literal["complement", "substitute", "indifferent"],
incumbent: Literal["copy", "refrain"],
- development: Literal["success", "failure"]) -> str:
+ development: Literal["success", "failure"],
+ kill_zone: bool = False) -> str:
return self.ENTRANT_CHOICES[entrant] + " $\\rightarrow$ " + self.INCUMBENT_CHOICES[
- incumbent] + " $\\rightarrow$ " + self.DEVELOPMENT_OUTCOME[development]
+ incumbent] + " $\\rightarrow$ " + self.DEVELOPMENT_OUTCOME[development] + (
+ "\n(Kill Zone)" if kill_zone else "")
def _get_incumbent_best_answer_labels(self) -> List[str]:
"""
@@ -319,7 +323,8 @@ def _get_incumbent_best_answer_coordinates(self) -> List[List[Tuple[float, float
[(self._assets['A-c'], 0), (x_max, 0), (x_max, self._copying_fixed_costs['F(YY)s']),
(self._assets['A-c'], self._copying_fixed_costs['F(YY)s'])],
# Square 4
- [(0, max(self._copying_fixed_costs['F(YN)c'], 0)), (self._assets['A-s'], max(self._copying_fixed_costs['F(YN)c'], 0)),
+ [(0, max(self._copying_fixed_costs['F(YN)c'], 0)),
+ (self._assets['A-s'], max(self._copying_fixed_costs['F(YN)c'], 0)),
(self._assets['A-s'], self._copying_fixed_costs['F(YN)s']), (0, self._copying_fixed_costs['F(YN)s'])],
# Square 5
[(self._assets['A-c'], self._copying_fixed_costs['F(YY)s']), (x_max, self._copying_fixed_costs['F(YY)s']),
@@ -334,8 +339,9 @@ def _get_incumbent_best_answer_coordinates(self) -> List[List[Tuple[float, float
def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes:
poly_coordinates: List[List[Tuple[float, float]]] = self._get_equilibrium_coordinates()
poly_labels: List[str] = self._get_equilibrium_labels()
- axis: matplotlib.axes.Axes = self._plot(title=kwargs.get("title", "Equilibrium Path"),
- coordinates=poly_coordinates, labels=poly_labels, axis=axis, options_legend=kwargs.get('options_legend', False))
+ axis: matplotlib.axes.Axes = self._plot(title="Equilibrium Path", coordinates=poly_coordinates,
+ labels=poly_labels,
+ axis=axis, **kwargs)
return axis
def _get_equilibrium_labels(self) -> List[str]:
@@ -354,7 +360,8 @@ def _get_equilibrium_labels(self) -> List[str]:
# Square 2
self._create_choice_answer_label(entrant="substitute", incumbent="copy", development="success"),
# Square 3
- self._create_choice_answer_label(entrant="complement", incumbent="refrain", development="success"),
+ self._create_choice_answer_label(entrant="complement", incumbent="refrain", development="success",
+ kill_zone=True),
# Square 4
self._create_choice_answer_label(entrant="substitute", incumbent="refrain", development="success")
]
@@ -565,18 +572,55 @@ def _draw_vertical_line_with_label(self, axis: matplotlib.axes.Axes, x: float, l
if label is not None:
axis.text(x, label_y, label)
+ def _create_additional_legend(self, options_legend: bool, thresholds_legend: bool) -> str:
+ legend: str = ""
+ if options_legend:
+ legend += self._create_options_legend()
+ if thresholds_legend:
+ legend += self._create_thresholds_legend()
+ return legend
+
def _create_options_legend(self, latex: bool = True) -> str:
space: str = "$\quad$" if latex else "\t"
return "Options of the entrant:\n" + \
- space + self.ENTRANT_CHOICES['complement'] + ": Tries to develop an additional complementary product to a primary product.\n" + \
- space + self.ENTRANT_CHOICES['substitute'] + ": Tries to develop an substitute to the primary product of the incumbent.\n" + \
- space + self.ENTRANT_CHOICES['indifferent'] + " : Indifferent between the options mentioned above.\n" + \
- "Options of the incumbent:\n" + \
- space + self.INCUMBENT_CHOICES['copy'] + " : Tries to develop an additional complementary product to a primary product.\n" + \
- space + self.INCUMBENT_CHOICES['refrain'] + " : Tries to develop an additional complementary product to a primary product.\n" + \
- "Outcomes of the development:\n" + \
- space + self.DEVELOPMENT_OUTCOME['success'] + " : The additional product can be developed, since the entrant has sufficient assets.\n" + \
- space + self.DEVELOPMENT_OUTCOME['failure'] + " : The additional product can not be developed, since the entrant has not enough assets."
+ space + self.ENTRANT_CHOICES[
+ 'complement'] + ": Develop an additional complementary product to a primary product.\n" + \
+ space + self.ENTRANT_CHOICES[
+ 'substitute'] + ": Develop an substitute to the primary product of the incumbent.\n" + \
+ space + self.ENTRANT_CHOICES['indifferent'] + " : Indifferent between the options mentioned above.\n" + \
+ "Options of the incumbent:\n" + \
+ space + self.INCUMBENT_CHOICES[
+ 'copy'] + " : Copy the original complement of the entrant.\n" + \
+ space + self.INCUMBENT_CHOICES[
+ 'refrain'] + " : Do not copy the original complement of the entrant.\n" + \
+ "Outcomes of the development:\n" + \
+ space + self.DEVELOPMENT_OUTCOME[
+ 'success'] + " : The entrant has sufficient assets to develop the product.\n" + \
+ space + self.DEVELOPMENT_OUTCOME[
+ 'failure'] + " : The entrant has not sufficient assets to develop the product."
+
+ @staticmethod
+ def _create_thresholds_legend() -> str:
+ space: str = "$\quad$"
+ return "Thresholds for the assets of the entrant:\n" + \
+ space + r'$\bar{A}_S$' + ": Minimum level of assets to ensure a perfect substitute\n" + \
+ space + space + space + " gets funded if the incumbent copies.\n" + \
+ space + r'$\bar{A}_C$' + ": Minimum level of assets to ensure another complement\n" + \
+ space + space + space + " gets funded if the incumbent copies.\n" + \
+ "If the incumbent does not copy, the entrant will have sufficient assets.\n\n" + \
+ "Thresholds for the fixed costs of copying for the incumbent:\n" + \
+ space + r'$F^{YY}_S$' + ": Maximum costs of copying that ensure that the incumbent\n" + \
+ space + space + space + space + "copies the entrant if the entrant is guaranteed to invest\n" + \
+ space + space + space + space + "in a perfect substitute.\n" + \
+ space + r'$F^{YN}_S$' + ": Maximum costs of copying that ensure that the incumbent\n" + \
+ space + space + space + space + "copies the entrant if the copying prevents the entrant\n" + \
+ space + space + space + space + " from developing a perfect substitute.\n" + \
+ space + r'$F^{YY}_C$' + ": Maximum costs of copying that ensure that the incumbent\n" + \
+ space + space + space + space + "copies the entrant if the entrant is guaranteed to invest\n" + \
+ space + space + space + space + "in another complement.\n" + \
+ space + r'$F^{YN}_C$' + ": Maximum costs of copying that ensure that the incumbent\n" + \
+ space + space + space + space + "copies the entrant if the copying prevents the entrant\n" + \
+ space + space + space + space + "from developing another complement.\n"
@staticmethod
def _get_color(i: int) -> str:
@@ -658,6 +702,7 @@ class BargainingPowerModel(BaseModel):
Besides the parameters used in the paper, this class will introduce the parameter $\\beta$ in the models, called
the bargaining power of the incumbent. In the paper the default value 0.5 is used to derive the results.
"""
+
def __init__(self, u: float = 1, B: float = 0.5, small_delta: float = 0.5, delta: float = 0.51,
K: float = 0.2, beta: float = 0.5):
"""
@@ -796,10 +841,13 @@ def get_payoffs(self) -> Dict[str, Dict[str, float]]:
return self._payoffs
def _get_incumbent_best_answer_coordinates(self) -> List[List[Tuple[float, float]]]:
- coordinates: List[List[Tuple[float, float]]] = super(BargainingPowerModel, self)._get_incumbent_best_answer_coordinates()
+ coordinates: List[List[Tuple[float, float]]] = super(BargainingPowerModel,
+ self)._get_incumbent_best_answer_coordinates()
if self._copying_fixed_costs["F(YY)s"] != self._copying_fixed_costs["F(YN)c"]:
- coordinates.append([(self._assets['A-s'], self._copying_fixed_costs['F(YY)s']), (self._assets['A-c'], self._copying_fixed_costs['F(YY)s']),
- (self._assets['A-c'], max(self._copying_fixed_costs['F(YN)c'], 0)), (self._assets['A-s'], max(self._copying_fixed_costs['F(YN)c'], 0))])
+ coordinates.append([(self._assets['A-s'], self._copying_fixed_costs['F(YY)s']),
+ (self._assets['A-c'], self._copying_fixed_costs['F(YY)s']),
+ (self._assets['A-c'], max(self._copying_fixed_costs['F(YN)c'], 0)),
+ (self._assets['A-s'], max(self._copying_fixed_costs['F(YN)c'], 0))])
return coordinates
def _get_incumbent_best_answer_labels(self) -> List[str]:
@@ -808,13 +856,15 @@ def _get_incumbent_best_answer_labels(self) -> List[str]:
if self._copying_fixed_costs["F(YY)s"] > self._copying_fixed_costs["F(YN)c"]:
labels.append(
# Square 7
- self._create_choice_answer_label(entrant="substitute", incumbent="copy", development="success") + " \n" +
+ self._create_choice_answer_label(entrant="substitute", incumbent="copy",
+ development="success") + " \n" +
self._create_choice_answer_label(entrant="complement", incumbent="refrain", development="success"),
)
else:
labels.append(
# Square 7
- self._create_choice_answer_label(entrant="substitute", incumbent="refrain", development="success") + " \n" +
+ self._create_choice_answer_label(entrant="substitute", incumbent="refrain",
+ development="success") + " \n" +
self._create_choice_answer_label(entrant="complement", incumbent="copy", development="failure"),
)
return labels
@@ -824,6 +874,7 @@ class UnobservableModel(BargainingPowerModel):
"""
This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing, the “kill zone” effect whereby the entrant stays away from the substitute in order to avoid being copied) would not take place. Intuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement is that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy for entering the market. However, if the incumbent cannot observe the entrant’s choice of strategy, the entrant could not hope to strategically affect the decision of the incumbent. This would lead to the entrant having a host of new opportunities when entering the market and it makes competing with a large company much more attractive.
"""
+
def __init__(self, u: float = 1, B: float = 0.5, small_delta: float = 0.5, delta: float = 0.51,
K: float = 0.2, beta: float = 0.5):
"""
@@ -836,7 +887,8 @@ def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwarg
def _create_choice_answer_label(self, entrant: Literal["complement", "substitute", "indifferent"],
incumbent: Literal["copy", "refrain"],
- development: Literal["success", "failure"]) -> str:
+ development: Literal["success", "failure"],
+ kill_zone: bool = False) -> str:
return "{" + self.ENTRANT_CHOICES[entrant] + ", " + self.INCUMBENT_CHOICES[incumbent] + "} $\\rightarrow$ " + \
self.DEVELOPMENT_OUTCOME[development]
@@ -865,7 +917,8 @@ def get_optimal_choice(self, A: float, F: float) -> Dict[str, str]:
result: Dict = super().get_optimal_choice(A, F)
# adjust the different choices in area three -> since the kill zone does not exist in this model.
if result["entrant"] == self.ENTRANT_CHOICES["complement"]:
- result = {"entrant": self.ENTRANT_CHOICES["substitute"], "incumbent": self.INCUMBENT_CHOICES["copy"], "development": self.DEVELOPMENT_OUTCOME["failure"]}
+ result = {"entrant": self.ENTRANT_CHOICES["substitute"], "incumbent": self.INCUMBENT_CHOICES["copy"],
+ "development": self.DEVELOPMENT_OUTCOME["failure"]}
return result
@@ -873,6 +926,7 @@ class AcquisitionModel(BargainingPowerModel):
"""
In order to explore how acquisitions may modify the entrant’s and the incumbent’s strategic choices, we extend the base model in order to allow an acquisition to take place after the incumbent commits to copying the entrant’s original complementary product (between t=1 and t=2, see table 2). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.
"""
+
def __init__(self, u: float = 1, B: float = 0.5, small_delta: float = 0.5, delta: float = 0.51,
K: float = 0.2) -> None:
"""
@@ -885,8 +939,9 @@ def __init__(self, u: float = 1, B: float = 0.5, small_delta: float = 0.5, delta
def _calculate_copying_fixed_costs_values(self) -> Dict[str, float]:
copying_fixed_costs_values: Dict[str, float] = super()._calculate_copying_fixed_costs_values()
- copying_fixed_costs_values.update({'F(ACQ)s': (self._u + self._delta - self._K) / 2 + self._small_delta * (2 - self._beta),
- 'F(ACQ)c': self._small_delta * (2.5 - 3*self._beta) - self._K / 2})
+ copying_fixed_costs_values.update(
+ {'F(ACQ)s': (self._u + self._delta - self._K) / 2 + self._small_delta * (2 - self._beta),
+ 'F(ACQ)c': self._small_delta * (2.5 - 3 * self._beta) - self._K / 2})
return copying_fixed_costs_values
def get_copying_fixed_costs_values(self) -> Dict[str, float]:
@@ -909,8 +964,8 @@ def get_copying_fixed_costs_values(self) -> Dict[str, float]:
if __name__ == '__main__':
- bargaining_power_model = Shelegia_Motta_2021.BargainingPowerModel(beta=0.8)
+ bargaining_power_model = Shelegia_Motta_2021.BargainingPowerModel(beta=0.6)
fig, (axis_eq, axis_best) = plt.subplots(ncols=2, figsize=(14, 9))
bargaining_power_model.plot_equilibrium(axis=axis_eq, options_legend=True)
- bargaining_power_model.plot_incumbent_best_answers(axis=axis_best)
+ bargaining_power_model.plot_incumbent_best_answers(axis=axis_best, thresholds_legend=True)
plt.show()
diff --git a/docs/Shelegia_Motta_2021/IModel.html b/docs/Shelegia_Motta_2021/IModel.html
index feb3ebb..01ede46 100644
--- a/docs/Shelegia_Motta_2021/IModel.html
+++ b/docs/Shelegia_Motta_2021/IModel.html
@@ -278,6 +278,7 @@
def plot_incumbent_best_answers(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: poly_coordinates: List[List[Tuple[float, float]]] = self._get_incumbent_best_answer_coordinates() poly_labels: List[str] = self._get_incumbent_best_answer_labels() - axis: matplotlib.axes.Axes = self._plot(title=kwargs.get("title", "Best Answers of the incumbent to the choices of the entrant"), - coordinates=poly_coordinates, labels=poly_labels, axis=axis, options_legend=kwargs.get('options_legend', False)) + axis: matplotlib.axes.Axes = self._plot( + title="Best Answers of the incumbent to the choices of the entrant", + coordinates=poly_coordinates, labels=poly_labels, axis=axis, **kwargs) return axis
def plot_equilibrium(self, axis: matplotlib.axes.Axes = None, **kwargs) -> matplotlib.axes.Axes: poly_coordinates: List[List[Tuple[float, float]]] = self._get_equilibrium_coordinates() poly_labels: List[str] = self._get_equilibrium_labels() - axis: matplotlib.axes.Axes = self._plot(title=kwargs.get("title", "Equilibrium Path"), - coordinates=poly_coordinates, labels=poly_labels, axis=axis, options_legend=kwargs.get('options_legend', False)) + axis: matplotlib.axes.Axes = self._plot(title="Equilibrium Path", coordinates=poly_coordinates, + labels=poly_labels, + axis=axis, **kwargs) return axis
\n\n\n\n\n\n\n\n\n\n\n
\n\nInstallation over PyPI:
\n\npip install Shelegia-Motta-2021\n
\n\nOr clone the repository via GitHub:
\n\ngit clone https://github.com/manuelbieri/shelegia_motta_2021.git\n
\n\nSince all models implement the Shelegia_Motta_2021.IModel.IModel - Interface, therefore all models provide the same functionality (public methods), even though the results may change substantially.
\n\nFor all models add the following import statement:
\n\nimport Shelegia_Motta_2021.Models\n
\n\nbase_model = Shelegia_Motta_2021.Models.BaseModel()\n
\n\nbargaining_power_model = Shelegia_Motta_2021.Models.BargainingPowerModel()\n
\n\nunobservable_model = Shelegia_Motta_2021.Models.UnobservableModel()\n
\n\nacquisition_model = Shelegia_Motta_2021.Models.AcquisitionModel()\n
\n\n# every model type can be plugged in without changing the following code.\nmodel: Shelegia_Motta_2021.IModel.IModel = Shelegia_Motta_2021.Models.BaseModel()\n\n# print string representation of the model\nprint(model)\n\n# plot the best answers of the incumbent to the choice of the entrant\nmodel.plot_incumbent_best_answers()\n\n# plot the equilibrium path\nmodel.plot_equilibrium()\n
\n\nPackage | \nVersion | \nAnnotation | \n
---|---|---|
matplotlib | \n3.4.3 | \nAlways needed (includes numpy) | \n
jupyter | \n1.0.0 | \nJust for the demonstration in demo.ipynb | \n
pdoc | \n8.0.1 | \nOnly to generate the documentation from scratch | \n
\nThese packages include all the needed imports for the functionality of this package.
For the latest version of the documentation open manuelbieri.github.io/shelegia_motta_2021 in your browser or call:
\n\nimport Shelegia_Motta_2021\n\nShelegia_Motta_2021.docs()\n
\n\nInstall the pdoc package:
\n\npip install pdoc\n
\n\nGenerate api-documentation with the following command:
\n\npdoc -o ./docs Shelegia_Motta_2021 --docformat \"numpy\" --math\n
\n\nFor further information about the coordinates used in the code, see resources/dev_notes.md.
\n"}, {"fullname": "Shelegia_Motta_2021.docs", "modulename": "Shelegia_Motta_2021", "qualname": "docs", "type": "function", "doc": "Opens the latest published version of the documentation of this package.
\n", "parameters": [], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "", "type": "module", "doc": "\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel", "type": "class", "doc": "Interface for all models in Shelegia and Motta (2021).
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.__init__", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.__init__", "type": "function", "doc": "\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.ENTRANT_CHOICES", "type": "variable", "doc": "Contains all the possible product choices of the entrant.
\n\nContains all the possible answers of the incumbent to the choice of the entrant.
\n\nContains all the possible outcomes of the development for the chosen product of the entrant or the merged entity.
\n\nReturns the asset thresholds of the entrant.
\n\nNumber and type of the thresholds will be specific to the model.
\n\nReturns the fixed costs for copying thresholds of the incumbent.
\n\nNumber and type of the thresholds will be specific to the model.
\n\nReturns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. | \n$\\pi(I)$ | \n$\\pi(E)$ | \nCS | \nW | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P$ ; $E_P + E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_P + E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
\nThe payoffs are specific to the models.
Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nPlots the best answers of the incumbent to all possible actions of the entrant.
\n\nPlots the equilibrium path based on the choices of the entrant and incumbent.
\n\nPlots the payoffs for different market configurations.
\n\nThere are two players in our base model: The Incumbent, which sells the primary product, denoted by Ip, and a start-up, called the Entrant, which sells a product Ec complementary to Ip. (One may think of Ip as a platform, and Ec as a service or product which can be accessed through the platform.) We are interested in studying the choice of E between developing a substitute to Ip, denoted by Ep, or another complement to Ip, denoted by \u1ebcc and the choice of I between copying E\u2019s original complementary product Ec by creating a perfect substitute Ic, or not. Since E may not have enough assets to cover the development cost of its second product, copying its current product will affect the entrant\u2019s ability to obtain funding for the development. We shall show that the incumbent has a strategic incentive to copy when the entrant plans to compete, and to abstain from copying when it plans to create another complement.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.__init__", "type": "function", "doc": "Initializes a valid BaseModel object.
\n\nThe following preconditions have to be satisfied:
\n\nTolerance for the comparison of two floating numbers.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_asset_values", "type": "function", "doc": "Returns the asset thresholds of the entrant.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$A_S$ | \nA_s | \n$(2)\\: B + K - \\Delta - 3\\delta/2$ | \n
$A_C$ | \nA_c | \n$(3)\\: B + K - 3\\delta/2$ | \n
$\\overline{A}_S$ | \nA-s | \n$(4)\\: B + K - \\Delta$ | \n
$\\overline{A}_C$ | \nA-c | \n$(5)\\: B + K - \\delta/2$ | \n
Returns the fixed costs for copying thresholds of the incumbent.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{YY}_S$ | \nF(YY)s | \n$(6)\\: \\delta/2$ | \n
$F^{YN}_S$ | \nF(YN)s | \n$(6)\\: u + 3\\delta/2$ | \n
$F^{YY}_C$ | \nF(YY)c | \n$(6)\\: \\delta$ | \n
$F^{YN}_C$ | \nF(YN)c | \n$(6)\\: \\delta/2$ | \n
Returns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nCS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nW $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \n$u + \\delta/2$ | \n$\\delta/2$ | \n0 | \n$u + \\delta$ | \n
$I_P + I_C$ ; $E_C$ | \n$u + \\delta$ | \n0 | \n0 | \n$u + \\delta$ | \n
$I_P$ ; $E_P + E_C$ | \n0 | \n$\\Delta + \\delta$ | \n$u$ | \n$u + \\Delta + \\delta$ | \n
$I_P + I_C$ ; $E_P + E_C$ | \n0 | \n$\\Delta$ | \n$u + \\delta$ | \n$u + \\Delta + \\delta$ | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \n$u + \\delta$ | \n$\\delta$ | \n0 | \n$u + 2\\delta$ | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \n$u + 3\\delta/2$ | \n$\\delta/2$ | \n0 | \n$u + 2\\delta$ | \n
Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nPlots the best answers of the incumbent to all possible actions of the entrant.
\n\nPlots the equilibrium path based on the choices of the entrant and incumbent.
\n\nPlots the payoffs for different market configurations.
\n\nBesides the parameters used in the paper, this class will introduce the parameter $\\beta$ in the models, called\nthe bargaining power of the incumbent. In the paper the default value 0.5 is used to derive the results.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.__init__", "type": "function", "doc": "Besides $\\beta$ the parameters in this model do not change compared to Shelegia_Motta_2021.Models.BaseModel.
\n\nReturns the asset thresholds of the entrant.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$A_S$ | \nA_s | \n$B + K - \\Delta - \\delta(2 - \\beta)$ | \n
$A_C$ | \nA_c | \n$B + K - 3\\delta(1 - \\beta)$ | \n
$\\overline{A}_S$ | \nA-s | \n$B + K - \\Delta$ | \n
$\\overline{A}_C$ | \nA-c | \n$B + K - \\delta(1 - \\beta)$ | \n
Returns the fixed costs for copying thresholds of the incumbent.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{YY}_S$ | \nF(YY)s | \n$\\delta(1 - \\beta)$ | \n
$F^{YN}_S$ | \nF(YN)s | \n$u + \\delta(2 - \\beta)$ | \n
$F^{YY}_C$ | \nF(YY)c | \n$2\\delta(1 - \\beta)$ | \n
$F^{YN}_C$ | \nF(YN)c | \n$\\delta(2 - \\beta)$ | \n
Returns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nCS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nW $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \n$u + \\delta\\beta$ | \n$\\delta(1 - \\beta)$ | \n0 | \n$u + \\delta$ | \n
$I_P + I_C$ ; $E_C$ | \n$u + \\delta$ | \n0 | \n0 | \n$u + \\delta$ | \n
$I_P$ ; $E_P + E_C$ | \n0 | \n$\\Delta + \\delta$ | \n$u$ | \n$u + \\Delta + \\delta$ | \n
$I_P + I_C$ ; $E_P + E_C$ | \n0 | \n$\\Delta$ | \n$u + \\delta$ | \n$u + \\Delta + \\delta$ | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \n$u + 2\\delta\\beta$ | \n$2\\delta(1 - \\beta)$ | \n0 | \n$u + 2\\delta$ | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \n$u + \\delta(1 + \\beta)$ | \n$\\delta(1 - \\beta)$ | \n0 | \n$u + 2\\delta$ | \n
This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing, the \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied) would not take place. Intuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement is that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy for entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision of the incumbent. This would lead to the entrant having a host of new opportunities when entering the market and it makes competing with a large company much more attractive.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.__init__", "type": "function", "doc": "The parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.plot_incumbent_best_answers", "type": "function", "doc": "Plots the best answers of the incumbent to all possible actions of the entrant.
\n\nReturns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nIn order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model in order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product (between t=1 and t=2, see table 2). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.__init__", "type": "function", "doc": "An additional constraint is added compared to Shelegia_Motta_2021.Models.BaseModel. Namely, $\\Delta$ has to be bigger than $\\delta$, meaning the innovation of the entrant is not too drastic.
\n\nMeanwhile, the parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_copying_fixed_costs_values", "type": "function", "doc": "Returns the fixed costs for copying thresholds of the incumbent.
\n\nAdditional thresholds for the fixed cost of copying of the incumbent compared to the Shelegia_Motta_2021.Models.BargainingModel:
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{ACQ}_S$ | \nF(ACQ)s | \n$\\frac{(u + \\Delta - K)}{2} + \\delta(2 - \\beta)$ | \n
$F^{ACQ}_C$ | \nF(ACQ)c | \n$\\frac{K}{2} + \\delta(2.5 - 3\\beta)$ | \n
This package implements the models of Shelegia and Motta (2021).
\n\n\n\n\n\n\n\n\n\n\n\n\n
\n\nInstallation over PyPI:
\n\npip install Shelegia-Motta-2021\n
\n\nOr clone the repository via GitHub:
\n\ngit clone https://github.com/manuelbieri/shelegia_motta_2021.git\n
\n\nSince all models implement the Shelegia_Motta_2021.IModel.IModel - Interface, therefore all models provide the same functionality (public methods), even though the results may change substantially.
\n\nFor all models add the following import statement:
\n\nimport Shelegia_Motta_2021.Models\n
\n\nbase_model = Shelegia_Motta_2021.Models.BaseModel()\n
\n\nbargaining_power_model = Shelegia_Motta_2021.Models.BargainingPowerModel()\n
\n\nunobservable_model = Shelegia_Motta_2021.Models.UnobservableModel()\n
\n\nacquisition_model = Shelegia_Motta_2021.Models.AcquisitionModel()\n
\n\n# every model type can be plugged in without changing the following code.\nmodel: Shelegia_Motta_2021.IModel.IModel = Shelegia_Motta_2021.Models.BaseModel()\n\n# print string representation of the model\nprint(model)\n\n# plot the best answers of the incumbent to the choice of the entrant\nmodel.plot_incumbent_best_answers()\n\n# plot the equilibrium path\nmodel.plot_equilibrium()\n
\n\nPackage | \nVersion | \nAnnotation | \n
---|---|---|
matplotlib | \n3.4.3 | \nAlways needed (includes numpy) | \n
jupyter | \n1.0.0 | \nJust for the demonstration in demo.ipynb | \n
pdoc | \n8.0.1 | \nOnly to generate the documentation from scratch | \n
\nThese packages include all the needed imports for the functionality of this package.
For the latest version of the documentation open manuelbieri.github.io/shelegia_motta_2021 in your browser or call:
\n\nimport Shelegia_Motta_2021\n\nShelegia_Motta_2021.docs()\n
\n\nInstall the pdoc package:
\n\npip install pdoc\n
\n\nGenerate api-documentation with the following command:
\n\npdoc -o ./docs Shelegia_Motta_2021 --docformat \"numpy\" --math\n
\n\nFor further information about the coordinates used in the code, see resources/dev_notes.md.
\n"}, {"fullname": "Shelegia_Motta_2021.docs", "modulename": "Shelegia_Motta_2021", "qualname": "docs", "type": "function", "doc": "Opens the latest published version of the documentation of this package.
\n", "parameters": [], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "", "type": "module", "doc": "\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel", "type": "class", "doc": "Interface for all models in Shelegia and Motta (2021).
\n"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.__init__", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.__init__", "type": "function", "doc": "\n", "parameters": ["self"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.IModel.IModel.ENTRANT_CHOICES", "modulename": "Shelegia_Motta_2021.IModel", "qualname": "IModel.ENTRANT_CHOICES", "type": "variable", "doc": "Contains all the possible product choices of the entrant.
\n\nContains all the possible answers of the incumbent to the choice of the entrant.
\n\nContains all the possible outcomes of the development for the chosen product of the entrant or the merged entity.
\n\nReturns the asset thresholds of the entrant.
\n\nNumber and type of the thresholds will be specific to the model.
\n\nReturns the fixed costs for copying thresholds of the incumbent.
\n\nNumber and type of the thresholds will be specific to the model.
\n\nReturns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. | \n$\\pi(I)$ | \n$\\pi(E)$ | \nCS | \nW | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P$ ; $E_P + E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_P + E_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \nN.A. | \nN.A. | \nN.A. | \nN.A. | \n
\nThe payoffs are specific to the models.
Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nPlots the best answers of the incumbent to all possible actions of the entrant.
\n\nPlots the equilibrium path based on the choices of the entrant and incumbent.
\n\nPlots the payoffs for different market configurations.
\n\nThere are two players in our base model: The Incumbent, which sells the primary product, denoted by Ip, and a start-up, called the Entrant, which sells a product Ec complementary to Ip. (One may think of Ip as a platform, and Ec as a service or product which can be accessed through the platform.) We are interested in studying the choice of E between developing a substitute to Ip, denoted by Ep, or another complement to Ip, denoted by \u1ebcc and the choice of I between copying E\u2019s original complementary product Ec by creating a perfect substitute Ic, or not. Since E may not have enough assets to cover the development cost of its second product, copying its current product will affect the entrant\u2019s ability to obtain funding for the development. We shall show that the incumbent has a strategic incentive to copy when the entrant plans to compete, and to abstain from copying when it plans to create another complement.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.__init__", "type": "function", "doc": "Initializes a valid BaseModel object.
\n\nThe following preconditions have to be satisfied:
\n\nTolerance for the comparison of two floating numbers.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BaseModel.get_asset_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BaseModel.get_asset_values", "type": "function", "doc": "Returns the asset thresholds of the entrant.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$A_S$ | \nA_s | \n$(2)\\: B + K - \\Delta - 3\\delta/2$ | \n
$A_C$ | \nA_c | \n$(3)\\: B + K - 3\\delta/2$ | \n
$\\overline{A}_S$ | \nA-s | \n$(4)\\: B + K - \\Delta$ | \n
$\\overline{A}_C$ | \nA-c | \n$(5)\\: B + K - \\delta/2$ | \n
Returns the fixed costs for copying thresholds of the incumbent.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{YY}_S$ | \nF(YY)s | \n$(6)\\: \\delta/2$ | \n
$F^{YN}_S$ | \nF(YN)s | \n$(6)\\: u + 3\\delta/2$ | \n
$F^{YY}_C$ | \nF(YY)c | \n$(6)\\: \\delta$ | \n
$F^{YN}_C$ | \nF(YN)c | \n$(6)\\: \\delta/2$ | \n
Returns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nCS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nW $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \n$u + \\delta/2$ | \n$\\delta/2$ | \n0 | \n$u + \\delta$ | \n
$I_P + I_C$ ; $E_C$ | \n$u + \\delta$ | \n0 | \n0 | \n$u + \\delta$ | \n
$I_P$ ; $E_P + E_C$ | \n0 | \n$\\Delta + \\delta$ | \n$u$ | \n$u + \\Delta + \\delta$ | \n
$I_P + I_C$ ; $E_P + E_C$ | \n0 | \n$\\Delta$ | \n$u + \\delta$ | \n$u + \\Delta + \\delta$ | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \n$u + \\delta$ | \n$\\delta$ | \n0 | \n$u + 2\\delta$ | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \n$u + 3\\delta/2$ | \n$\\delta/2$ | \n0 | \n$u + 2\\delta$ | \n
Returns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nPlots the best answers of the incumbent to all possible actions of the entrant.
\n\nPlots the equilibrium path based on the choices of the entrant and incumbent.
\n\nPlots the payoffs for different market configurations.
\n\nBesides the parameters used in the paper, this class will introduce the parameter $\\beta$ in the models, called\nthe bargaining power of the incumbent. In the paper the default value 0.5 is used to derive the results.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.BargainingPowerModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "BargainingPowerModel.__init__", "type": "function", "doc": "Besides $\\beta$ the parameters in this model do not change compared to Shelegia_Motta_2021.Models.BaseModel.
\n\nReturns the asset thresholds of the entrant.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$A_S$ | \nA_s | \n$B + K - \\Delta - \\delta(2 - \\beta)$ | \n
$A_C$ | \nA_c | \n$B + K - 3\\delta(1 - \\beta)$ | \n
$\\overline{A}_S$ | \nA-s | \n$B + K - \\Delta$ | \n
$\\overline{A}_C$ | \nA-c | \n$B + K - \\delta(1 - \\beta)$ | \n
Returns the fixed costs for copying thresholds of the incumbent.
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{YY}_S$ | \nF(YY)s | \n$\\delta(1 - \\beta)$ | \n
$F^{YN}_S$ | \nF(YN)s | \n$u + \\delta(2 - \\beta)$ | \n
$F^{YY}_C$ | \nF(YY)c | \n$2\\delta(1 - \\beta)$ | \n
$F^{YN}_C$ | \nF(YN)c | \n$\\delta(2 - \\beta)$ | \n
Returns the payoffs for different market configurations.
\n\nA market configuration can include:
\n\nMarket Config. $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(I) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n$\\pi(E) \\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nCS $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \nW $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|---|---|
$I_P$ ; $E_C$ | \n$u + \\delta\\beta$ | \n$\\delta(1 - \\beta)$ | \n0 | \n$u + \\delta$ | \n
$I_P + I_C$ ; $E_C$ | \n$u + \\delta$ | \n0 | \n0 | \n$u + \\delta$ | \n
$I_P$ ; $E_P + E_C$ | \n0 | \n$\\Delta + \\delta$ | \n$u$ | \n$u + \\Delta + \\delta$ | \n
$I_P + I_C$ ; $E_P + E_C$ | \n0 | \n$\\Delta$ | \n$u + \\delta$ | \n$u + \\Delta + \\delta$ | \n
$I_P$ ; $E_C + \\tilde{E}_C$ | \n$u + 2\\delta\\beta$ | \n$2\\delta(1 - \\beta)$ | \n0 | \n$u + 2\\delta$ | \n
$I_P + I_C$ ; $E_C + \\tilde{E}_C$ | \n$u + \\delta(1 + \\beta)$ | \n$\\delta(1 - \\beta)$ | \n0 | \n$u + 2\\delta$ | \n
This model indicates that if the incumbent were not able to observe the entrant at the moment of choosing, the \u201ckill zone\u201d effect whereby the entrant stays away from the substitute in order to avoid being copied) would not take place. Intuitively, in the game as we studied it so far, the only reason why the entrant is choosing a trajectory leading to another complement is that it anticipates that if it chose one leading to a substitute, the incumbent would copy, making it an inefficient strategy for entering the market. However, if the incumbent cannot observe the entrant\u2019s choice of strategy, the entrant could not hope to strategically affect the decision of the incumbent. This would lead to the entrant having a host of new opportunities when entering the market and it makes competing with a large company much more attractive.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.__init__", "type": "function", "doc": "The parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K", "beta"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.UnobservableModel.plot_incumbent_best_answers", "modulename": "Shelegia_Motta_2021.Models", "qualname": "UnobservableModel.plot_incumbent_best_answers", "type": "function", "doc": "Plots the best answers of the incumbent to all possible actions of the entrant.
\n\nReturns the optimal choice of the entrant and the incumbent based on a pair of assets of the entrant and fixed costs for copying of the incumbent.
\n\nThe output dictionary will contain the following details:
\n\nIn order to explore how acquisitions may modify the entrant\u2019s and the incumbent\u2019s strategic choices, we extend the base model in order to allow an acquisition to take place after the incumbent commits to copying the entrant\u2019s original complementary product (between t=1 and t=2, see table 2). We assume that the incumbent and the entrant share the gains (if any) attained from the acquisition equally.
\n"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.__init__", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.__init__", "type": "function", "doc": "An additional constraint is added compared to Shelegia_Motta_2021.Models.BaseModel. Namely, $\\Delta$ has to be bigger than $\\delta$, meaning the innovation of the entrant is not too drastic.
\n\nMeanwhile, the parameters do not change compared to Shelegia_Motta_2021.Models.BargainingPowerModel.
\n", "parameters": ["self", "u", "B", "small_delta", "delta", "K"], "funcdef": "def"}, {"fullname": "Shelegia_Motta_2021.Models.AcquisitionModel.get_copying_fixed_costs_values", "modulename": "Shelegia_Motta_2021.Models", "qualname": "AcquisitionModel.get_copying_fixed_costs_values", "type": "function", "doc": "Returns the fixed costs for copying thresholds of the incumbent.
\n\nAdditional thresholds for the fixed cost of copying of the incumbent compared to the Shelegia_Motta_2021.Models.BargainingModel:
\n\nThreshold $\\:\\:\\:\\:\\:$ | \nName $\\:\\:\\:\\:\\:$ | \nFormula $\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:\\:$ | \n
---|---|---|
$F^{ACQ}_S$ | \nF(ACQ)s | \n$\\frac{(u + \\Delta - K)}{2} + \\delta(2 - \\beta)$ | \n
$F^{ACQ}_C$ | \nF(ACQ)c | \n$\\frac{K}{2} + \\delta(2.5 - 3\\beta)$ | \n