# Effect of Inequality on Economic Growth

A small experiment to observe the effect of inequality on economic growth

I personally believe that economic inequality affects the growth of a country or the whole world negatively. Therefore, I thought that the intuition that I have should be proved by a small experiment. In this post, we will make the experiment together and observe the results.

Since we need to generate data realistically, let’s start defining our subjects first. I divided the citizens into three types which are low class, middle class, and high class. Low, middle, high refers to the economic power (amount of money that people control) of people.

Let’s start thinking from top to bottom. In the end, we all make a purchase decision. That decision is our power in the economy. If we make the right decision, we feed ourselves and our families while we help the economy grow. If we make a wrong decision, we lose the money and the effect of that money on the economy is negative, I just try to oversimplify the free market economy.

So, the decision we make affects the economy. This depends on the market and the way that we spent the money. So let’s call it “decision effect”.

To make the right decision, we need awareness. Awareness is an encapsulating concept for several sub-concepts. Let’s give an example for awareness: Imagine you have 300 Euros in your pocket. It is just enough to feed yourself through the month. Therefore, your awareness to use the money is high, because that money is crucial for you to feed yourself. Let’s imagine that you have 1 million Euro in your bank account. You only need 300 Euros to feed yourself. Therefore you basically do not care about the rest of the money. You can spend it on anything. Even if you make a bad purchase decision, it would not affect your life drastically. So your awareness is low.

In the economy, each individual has their own awareness. We cannot define awareness for thousands of people one by one in this experiment. But we can create a probability distribution that represents people’s awareness. So, we need a probability distribution function that represents people’s awareness so that we can define the awareness for each individual in the community. The mean awareness value changes with respect to the amount of money that you hold. If you are a low-class citizen, you most probably have a higher awareness than middle and high-class citizens. So, we need to define probability distribution for awareness for each class type.

Now, let’s start to code:

Let’s import our libraries first:

`import scipy.stats`

import scipy.special

import matplotlib.pyplot as plt

import numpy as np

Let’s define the function to generate awareness:

`def generate_awareness_probdist(lower = 0,`

upper = 1,

mu = 0.5,

sigma = 0.1,

N = 1000):

awareness_probdist = scipy.stats.truncnorm.rvs((lower-mu)/sigma,

(upper-mu)/sigma,

loc=mu,scale=sigma,

size=N)

return awareness_probdist

Let’s define that our population has a total of 10000 citizens where 8000 of them are low class, 1800 of them are middle class and 200 of them are high class. On the other hand, the effect of the decision for each citizen in these classes differs, because their purchasing power is different. Therefore, let’s define the equality of purchasing power.

`populations = [8000,1800,200],`

equality = [2,8,90]

Now, let’s generate awareness probabilities of each citizen.

lowincome_awareness_probabilities = generate_awareness_probdist(lower = 0, upper = 1,mu = 0.9,sigma = 0.1,N = populations[0])

midincome_awareness_probabilities = generate_awareness_probdist(lower = 0,

upper = 1,mu = 0.7,sigma=0.1, N = populations[1])highincome_awareness_probabilities = generate_awareness_probdist(lower = 0, upper = 1, mu = 0.5, sigma = 0.1, N = populations[2])

According to the awareness probability of citizens, they need to make the right decision. So, we need to define a random variable in the range [0,1]. The random value has a probability of 0.5 to be higher and lower than 0.5. According to this random value, we will determine if the person makes the right decision for his/her purchase. If the random value is lower than the awareness of the person, then the person makes the right purchase decision. Else, the person makes the wrong decision. The right decision has value 1 while the wrong decision has value -1.

lowclass_decisions = []

for i_low,elm_low in enumerate(lowincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_low

lowclass_decisions.append(decision)

lowclass_decisions = np.array(lowclass_decisions)*1

lowclass_decisions[np.where(lowclass_decisions==0)] = -1midclass_decisions = []

for i_mid,elm_mid in enumerate(midincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_mid

midclass_decisions.append(decision)

midclass_decisions = np.array(midclass_decisions)*1

midclass_decisions[np.where(midclass_decisions==0)] = -1

highclass_decisions = []

for i_high,elm_high in enumerate(highincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_high

highclass_decisions.append(decision)

highclass_decisions = np.array(highclass_decisions)*1

highclass_decisions[np.where(highclass_decisions==0)] = -1

The effect of each right and wrong decision depends on the market and the way it is made. Therefore, we will generate random variables for it as well. After we calculate the effect of the decision, we need to multiply it with decision values (-1 and 1 mentioned above) so that we will be able to see the final effect.

lowclass_growtheffect = np.random.rand(lowclass_decisions.shape[0])*lowclass_decisions*equality[0]midclass_growtheffect = np.random.rand(midclass_decisions.shape[0])*midclass_decisions*equality[1]highclass_growtheffect = np.random.rand(highclass_decisions.shape[0])*highclass_decisions*equality[2]

Now, we need to repeat this process to aggregate through a period. The complete script is given below. But now, let’s conduct the experiments:

**Experiment.1 — Observing the effect of high inequality on growth.**

Inputs:

Population for each class: [70,20,10] #lowclass, midclass, highclass

Equality for each class(decision effect): [2,8,90] #lowclass, midclass, highclass

Outputs:

Growth amounts for several steps: 327, 606, 52, 517, 1050

# Experiment.2— Observing the effect of mid-high inequality on growth.

Inputs:

Population for each class: [70,20,10] #lowclass, midclass, highclass

Equality for each class(decision effect): [12,18,70] #lowclass, midclass, highclass

Outputs:

Growth amounts for several steps: 1985, 2092, 2020, 2299, 2221

# Experiment.3 — Observing the effect of mid inequality on growth.

Inputs:

Population for each class: [70,20,10] #lowclass, midclass, highclass

Equality for each class(decision effect): [22,28,60] #lowclass, midclass, highclass

Outputs:

Growth amounts for several steps: 3276, 3817, 3267, 3383, 3422

# Experiment.4 — Observing the effect of perfect equality on growth.

Inputs:

Population for each class: [34,33,33] #lowclass, midclass, highclass

Equality for each class(decision effect): [33,33,34] #lowclass, midclass, highclass

Outputs:

Growth amounts for several steps: 3242, 2733, 3108, 3444, 3310

# Conclusion

As you can see from the growth amounts, the high inequality causes the lowest growth rate, while middle inequality causes the highest growth. On the other hand, perfect equality does not cause the highest growth rate. According to these results, it is easy to say that feudalism and wrongly applied capitalism causes a pretty bad growth rate. This shows us one thing, feudalism or capitalism with high inequality causes the lowest growth rates. On the other hand, capitalism which is properly applied causes the highest growth rate. Perfect equality still causes high growth, but it is not the best.

Now, what you need to do is to check the Gini coefficient of the countries and their growth rate. Be careful about the country type. Do not forget to separate the developed countries from developing countries. Assess them in their own class.

# Complete Script:

# -*- coding: utf-8 -*-

"""

Created on Sat Nov 7 10:44:34 2020@author: tekin.evrim.ozmermer

"""

import scipy.stats

import scipy.special

import matplotlib.pyplot as plt

import numpy as npdef generate_awareness_probdist(lower = 0,

upper = 1,

mu = 0.5,

sigma = 0.1,

N = 1000):

awareness_probdist = scipy.stats.truncnorm.rvs((lower-mu)/sigma,

(upper-mu)/sigma,

loc=mu,scale=sigma,

size=N)

return awareness_probdistdef main(total_growth_effect,

populations = [8000,1800,200],

equality = [2,8,90]):

lowincome_awareness_probabilities = generate_awareness_probdist(lower = 0,

upper = 1,

mu = 0.9,

sigma = 0.1,

N = populations[0])

midincome_awareness_probabilities = generate_awareness_probdist(lower = 0,

upper = 1,

mu = 0.7,

sigma = 0.1,

N = populations[1])

highincome_awareness_probabilities = generate_awareness_probdist(lower = 0,

upper = 1,

mu = 0.5,

sigma = 0.1,

N = populations[2])

lowclass_decisions = []

for i_low,elm_low in enumerate(lowincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_low

lowclass_decisions.append(decision)

lowclass_decisions = np.array(lowclass_decisions)*1

lowclass_decisions[np.where(lowclass_decisions==0)] = -1

midclass_decisions = []

for i_mid,elm_mid in enumerate(midincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_mid

midclass_decisions.append(decision)

midclass_decisions = np.array(midclass_decisions)*1

midclass_decisions[np.where(midclass_decisions==0)] = -1

highclass_decisions = []

for i_high,elm_high in enumerate(highincome_awareness_probabilities):

rand = np.random.rand(1)[0]

decision = rand<elm_high

highclass_decisions.append(decision)

highclass_decisions = np.array(highclass_decisions)*1

highclass_decisions[np.where(highclass_decisions==0)] = -1

lowclass_growtheffect = np.random.rand(lowclass_decisions.shape[0])*lowclass_decisions*equality[0]

midclass_growtheffect = np.random.rand(midclass_decisions.shape[0])*midclass_decisions*equality[1]

highclass_growtheffect = np.random.rand(highclass_decisions.shape[0])*highclass_decisions*equality[2]

total_growth_effect.append([lowclass_growtheffect.sum(),midclass_growtheffect.sum(),highclass_growtheffect.sum()])

return total_growth_effectdef softmax(x):

"""Compute softmax values for each sets of scores in x."""

e_x = np.exp(x - np.max(x))

return e_x / e_x.sum(axis=0)total_growth_effect = []

for i in range(5):

total_growth_effect = main(total_growth_effect,

populations = [70,20,10],

equality = [12,18,70])

total_growth_effect_sum_byaxis = np.array(total_growth_effect).sum(axis=0)

total_growth_effect_sum = np.array(total_growth_effect).sum()total_growth_effect_probability = softmax(total_growth_effect_sum_byaxis/total_growth_effect_sum_byaxis.max())print(total_growth_effect_probability)

print(total_growth_effect_sum)