Economic system research is one of the most important fields of the coming decades. The world urgently requires a whole system transformation, starting with the energy and production systems yet also encompassing the much wider social, political and economic culture. We already know what the problems are: 1) Climate change and greenhouse gases 2) Nature depletion and destruction by non-stop business and settlement expansion (some argue by capitalism altogether) 3) Inequality in money and resource use 4) Social injustice and very skewed distributions of political power.

Activists are now rightly pushing for a shift around the world, yet profound change at scale is still missing. Of course, there long have been great works in systems thinking. Decades ago for instance there was Limits to Growth and Donella Meadows. More recently Steve Keen’s work is gaining popularity among heterodox economists. There is work from the Potsdam Institute for Climate Impact Research. The American Santa Fe Institute is clearly working in that area too. There are plenty of journals working towards systemic and complexity-oriented ideas e.g. the Journal of Economic Modelling, Journal of Economic Dynamics and Control and many more. This only proves that system thinking in economics is more up-to-date than ever and likely will not run out of fashion any time soon.

This is why, firstly inspired by Keen’s lectures, I have looked at one of the classics in system economics: The Goodwin model. Devised by mathematician Richard M. Goodwin in 1967, it is a model resembling the well-known predator-prey differential equations in biology. Keen said in his lecture and I quote “Any decent undergrad can put this model up in 10mins”. Well well, it took me two days to understand what is going on in this model and I am a 3rd year PhD student. I found corresponding explanations hardly clear. The several parameters in the model are not that straightforward, particularly if you are not trained as an economist. The best explanation I came across is the one here by Daniele Tavani but it is far from easy peasy either.

The model’s gist is an economic cycle that is driven by expansion of capital investment (and hence total economic output). Higher investment and output create the need for more labour. The need for more labour raises wages (because higher wages attract labourers) and so increases the labour force, that is the fraction of the entire population that is employed. These higher wages then also lead to a higher fraction that wages, or in other words labour, constitute in the total national income. And last but not least, higher wages ultimately lead to less profits left for capitalists and their capital investment which, together with the realistic assumption of constantly increasing labour productivity, leads to decreased demand for labour again. Consequently the employment rate falls and the amount of wages needed to be paid too. The decreased share of labour in national income leaves more money for capital investment… and the cycle repeats.

I think the central loop can really depicted the following way (as a causal loop diagram):

If capital investment goes up, so does labour demand. If labour goes up so do wages. If wages go up, capital goes down and then in turn so does labour demand and from there on wages. Lower wages lead via inverse relationship again! to higher capital investment.

In the coupled differential equations (picture below), capital investment is not explicitly stated but instead the share of labour in total national income and its inverse basically is the amount of income that goes to capital. According to Tavani’s lecture notes I made an overview of the equations with the denotations integrated. The coupling parameters are highlighted in red. There is one parameter which I am so far unsure what it represents because Tavani does not explain it but it is rather unimportant for the mechanics of the model.

Although mathematically, the model is analogous to the Lotka-Volterra equations, I think conceptually it does not allow for good comparison. The cycle that concerned Goodwin is between employment rate and labour share in national income, two related quantities, mediated by a third quantity so to speak – the capital investments. In my view, it is not meaningful to speak of predator and prey here at all.

Below, I implemented an extremely simple iterative version of the model in Python. I do think however the iterative approach is a good one for learning about the model and having an easy implementation ready is always beneficial, potentially for teaching students. The version is by the way heavily inspired by a Lotka-Volterra implementation here. It is just a few lines of code really. Just jump by the code, if you do not want to try it.

             ########## GOODWIN MODEL PYTHON ###########
             
#### load the necessary libraries ####             
import numpy as np
import matplotlib.pyplot as plt        
    
##### prepare variable space/arrays
t = np.linspace(0,100,100000) # time points resolution                      
e = np.zeros(len(t)) # Pre-allocate the memory for e employment rate
W = np.zeros(len(t)) # Pre-allocate the memory for W wage share in national income

##### diff equation one parameters ###
beta = 0.1 ###capitalist time preference
gamma = 0.05 ### labour productivity growth
n = 0.01 #### population growth 
roh = 0.5 #output/capital ratio how much output per marginal unit of capital employed

#### diff equation two parameters ######
phi = 0.05
lamdba = 0.2 

#initial conditions
e0, W0 = 0.5, 0.5                
e[0] = e0
W[0] = W0

##### Iterative computation ######                 
for i in range(0,len(t)-1):
     dt = t[i+1] - t[i]
     e[i+1] = e[i]+e[i]*dt*((1-W[i])*roh -(beta+gamma+n))
     W[i+1] = W[i]+W[i]*dt*(-phi+lamdba*e[i]-gamma)

###plot over time
plt.plot(t,e,'b-', label = 'employment rate')
plt.plot(t,W,'r-', label = 'wages/national income')
plt.ylabel('share of total')
plt.xlabel('time')
plt.ylim((0,1))
plt.legend()
plt.savefig('over time.png', dpi = 300)
plt.show()

The most interesting part though is to ask where to go from here? The Goodwin model itself is highly stylized, not really realistic (although the cycles do very imperfectly indeed exist, see Tavani’s lecture notes) and pretty old. This does not mean outdated however and did not stop scholars from extending and adjusting the model over and over again. And rightly so. It is an interesting one with much to learn from. Keen even claims his version is able to capture the fundamental dynamics of the financial crisis 2008 (even though I do not see fully through this point yet).

The model also carries a second name “Goodwin’s class struggle model”. Why so? Because it shows the trade-off between national income distributed to labourers or to capitalists and the share labourers receive cycles back and forth. Can the model be updated in light of current global and national inequalities? The question of how much income is pure returns on capital and how much is actually earned through labour is incredibly relevant these days.

I do believe that this, and likely other models of this form, could play a great role when it comes to exploring the necessary transformation of current-day capitalism towards a more just, inclusive and sustainable system. The model itself is so far a perpetuum mobile of economic growth, so total output would forever increase, but what if it were adjusted towards a steady state economy or even a degrowth one? What if wages were no homogeneous quantity but followed a realistic distribution? What if we make ecological constraints and their feedbacks explicit? There have been many extensions but I think not one of them with the spirit of, for instance, Doughnut economics or sustainability in general in mind. And even if so, that would be a great start! Let me know, if you know something. I am looking forward to going down that road.

References:

Tavani notes: http://www.danieletavani.com/?page_id=856

Keen lecture: https://www.youtube.com/watch?v=rn68Llfayl0

Stack exchange predator-prey model: https://scicomp.stackexchange.com/questions/35676/solving-lotka-volterra-equations-on-python