In this article, I outline a preliminary model of investment, with the financial aspects stripped away. It is a stock-flow consistent (SFC) model, which is built upon the core of the sfc_models package, written in the Python programming language. (That package is described in my book, An Introduction to SFC Models Using Python.) The code that generates the model has been added to the examples folder of the package at (link to GitHub).
(As an introductory point to any readers who are unfamiliar with economics, when I refer to "investment" herein, that refers to investment by firms in capital equipment or inventories. This is very distinct from the common usage of the term which refers to the purchase of securities in financial markets. Blurring those two definitions of "investment" leads one into many logical traps.)
Model BasicsAlthough it may have been more sensible to take an existing model, my preference was to create the simplest possible model with investment. This is for ease of understanding, as well wanted to keep additions to the sfc_models package as incremental as possible.
The core of the model is model SIM (for "simplest"), which is found in chapter 3 of Wynne Godley and Marc Lavoie's Monetary Economics (and described in chapter 5 of my book). The SIM model has three sectors: households, businesses, and the government. The investment model was created by solely changing the behaviour of the business sector.
Readers need to be cautioned that this model would not be considered the best summary of (post-)Keynesian thinking on the effects of investment. This is a stripped down model that just looks at the somewhat mechanical income flows that occur between the sectors. Although these income flow effects are enough to generate a moderate business cycle, they are not enough to explain the greater volatility we see in the real world. The introduction of the financing aspects of capital investment will inject greater volatility into the model. However, considering the financial aspects increases the complexity, and overshadows the investment accelator mechanism.
Since the model description may be too dry for many readers, I will jump ahead to describe the effects of a jump in private sector investment in the model.
Short-Run EffectsWe are following the convention of Monetary Economics, and setting the model up in a no-growth steady state. We then perturb model settings to see the effects on variables.
In our example, we change the target level of capital in business sector, and leave everything else unchanged. The target capital is set as a ratio relative to the size of the employed labour force, and we change the ratio in time period 5. This causes a jump in gross investment in that period (above). In this model, 5% of the capital stock depreciates. With a steady-state capital stock of 100, this means that gross investment of 5 units of output is needed to keep the capital stock unchanged.
The adjustment of capital target is not instantaneous. Since the target ratio jumped in time period 5, the ratio of capital to target fell to about 0.92. It then is marching slowly towards its target level during the rest of the sample period.
An increased wage bill feeds through into greater demand for consumer goods. The business sector uses the previous period's sales as a forecast for the current period (a very simple adaptive expectations), and it underestimates demand from the other sectors. (It knows what its own investment plans are.) This forecast miss is accommodated by drawing down inventories.
Longer Run Effects
If we look at a longer time period, we see that effects of the change are less uni-directional. In fact, we see an oscillation in output. That is, there is a bust after the the period of boom. However, the oscillations are damped, and the system is converging towards a steady state.
There are a lot of moving pieces in the model, but the best summary is that investment -- both in fixed capital and inventory -- overshoot, and then the excess needs to be worked off. Demand from the other sectors is unable to validate the peak investment levels.
Government policy only appears in this model via fiscal policy. Since the economy is not growing in nominal terms in the steady state, the steady state fiscal balance has to be zero. Once investment picks up in period 5, tax receipts jump while government consumption remains fixed. As a result, the government moves into surplus. In other words, even though fiscal policy settings (the tax rate, spending) are unchanged, the fiscal balance automatically moves to counter-act the private sector movements.
One small point to note is that the inclusion of private investment slightly increases the steady state multiplier on government consumption. As discussed by Godley and Lavoie in Monetary Economics, the level of the output in steady state is a multiple of government consumption. The inclusion of the need for the business sector to replace depreciating capital raises steady state activity. Using the parameter values used in Monetary Economics (which this simulation also uses), the multiplier was 5, so government consumption of 20 supported production of 100. In the simulation, the steady state government consumption dropped to 19. The investment model features variable productivity, but the initial steady state was chosen so that the productivity for both models are equal (at 1).
Although one might think that capital deepening would raise output, the effect was fairly marginal. The explanation appears to be that the model uses a rather neoclassical production function, and so the marginal efficiency of the extra capital is low. The extra depreciation expense due to a higher capital stock actually reduces steady-state profits in the long run. Since those profits flow through to the household sector via dividends, the lower profits reduces final demand.
(There was a small bump in profits as a result of the initial investment surge. It was surprisingly small, given my reliance on the Kalecki profit equation. I believe the explanation is the relatively low propensity to consume out of current income for the household sector (0.6) meant that profit increase due to higher investment was largely eaten up by household savings, as well as the move to fiscal surplus. If we changed the propensity to consume out of wage income to be higher -- which is more Kaleckian -- we presumably would see more of a direct effect on profits due to investment.)
Comments on InterpretationThe point that must be underlined that this model is a stepping stone to more interesting analysis. By itself, it is a misleading interpretation of the (post-)Keynesian view of business cycles. (I am not including the so-called New Keynesians in that group, as they are effectively Monetarists with sticky prices, and have largely retained the classical view of business cycles.) The fuller explanation would show up in later sections of the chapter on post-Keynesian views in my book.
This model was my response to Hyman Minsky's interpretation of Keynes, as set out in Minsky's John Maynard Keynes. I would point to the passage on page 60:
The cyclical succession of system states is not always clearly presented in the "General Theory." In fact, there are two distinct views of the business cycle, one a moderate cycle which can perhaps be identified with a dampened accelerator-multiplier cycle and the second a vigorous "boom and bust" cycle. In chapter 18 (GT, pp. 249-54) Keynes sketches a model of a moderate business cycle that might very well be the prototype for the various nonexplosive accelerator-multiplier interaction models. The business cycle as described is based upon a modest multiplier and a moderately fluctuating prospective yield on investment.This model is an SFC implementation of such an accelerator model. We need to dig into the mechanics of how business investment is financed to get models that generate severe booms and busts. Minsky's argument was that Keynes' own explanations of how the financial forms of capitalism generate booms and busts was muddled, which allowed the Old Keynesians to mangle the theory, and revert back to the neoclassical synthesis.
To jump ahead to the later logic, the fact that income flows in the real economy multiply the effect of changes of investment leads to the result that investment volatility determines the volatility of overall activity (unless the government manages to do something radically stupid and overwhelm the private sector, such as we saw in the euro periphery under the sage leadership of the neoliberal consensus). That is, if we could predict trends in private investment, we could probably predict the broad trends in growth within a reasonable margin of accuracy. (The sting in the tail is that it is unclear that private investment trends can be easily predicted. If they cannot, then the entire premise of using mathematical models to forecast economic trends is doomed to failure.)
I will now turn to some of the various critiques I have seen in the context of SFC models.
- Naïve empiricism. The argument is that we need to pretend to be physicists and immediately fit our models to data. As someone with training in engineering, I would respond that we are facing a complex system, and physicists generally run from complexity and try to isolate underlying principles in simple systems. However, we do not have that luxury when dealing with complex systems. Yes, there are empirical recession models, as I discussed earlier. As I noted, we have no idea what variables we should use for recession forecasting models without having some kind of theory justifying the choice. We need to ask ourselves: what variables will matter? If we look at a broad class of models that properly account for all income flows -- such as this model -- we see that those models feature an investment accelerator mechanism. This gives us a strong hint that our empirical research programme should focus on variables related to investment.
- Naïve faith in optimisation. The decision-making rules for the actors in the models are very definitely backwards-looking. Should not the business sector be forward-looking, particularly since investment is literally providing for future activity? There are a number of defects with this argument. The first is that there appears to be little evidence that we could even come up with a tractable optimisation problem if we take into account any uncertainty in the actions of other sectors. The second is that in the real world, firms are not homogeneous, and so even if each individual firm attempts to invest according to some optimal rule, the overall sector behaviour will not be captured by optimising behaviour. The final nail in the coffin is the possibility of irrational behaviour in financial markets; even if firms have an optimal fixed investment plan, the lunatics in the capital markets might not play along. (I expect that this bullet point will be expanded into an entire section on uncertainty.)
- Rush to pet models. One common reaction when faced by a mathematical model is for readers to suggest dozens of other mathematical models to look at. There's an infinite number of mathematical models. We should just focus on what useful lessons we can draw from simple ones before we rush off to include every possible theory about economic activity (e.g., what are the banks doing? etc.).
Model DescriptionWe now turn to a fuller description of the model. Those of you who are interested in the equations, they are generated by the model.
Once again, the model is the simplest possible extension of the sfc_models framework to allow business sector investment. This was accomplished by taking the simplest (non-trivial) SFC model from Monetary Economics, and only modifying the business sector.
If we look at the more advanced SFC models in Monetary Economics, there is a well-developed financial system. In the interest of simplicity, there is only a single non-interest bearing financial asset ("money"). This has the side effect of eliminating the issues of capitalist finance, which will be discussed later.
Model SIM largely eliminates discussion of the determination of prices; the price of goods is assumed to be fixed, and we only track the nominal income flows in the economy. (Since the price level is fixed, nominal activity is interchangeable with real activity.) The new model largely follows that convention, although wages are now allowed to changed, as discussed below. However, these wage changes are largely cosmetic, and so what matters are the nominal income flows.
The household sector receives wage and dividend income, on which it pays tax. (The addition of dividends is new to this model.) It consumes goods (produced by the business sector), with a basic consumption function that is determined by after-tax income and the stock of wealth. There was no attempt to model constraints on the labour force: it was assumed that there was always unemployed labour that could be drawn in by new hiring.
The government sector is the supplier of money, and imposes a uniform tax of 20% on household income. (The business sector does not pay tax, which is unfortunately realistic.) It also consumes goods by the business sector, and this government expenditure is a policy decision that is determined outside the model (an exogenous variable).
In the analysis of model SIM, we see that there is a multiplier from government consumption to overall activity. In the current model, I am keeping consumption fixed so that we can see the effects of changing trends in investment.
The Business SectorThe changes to the model show up in the business sector. In model SIM, business activity was straightforward: it produced as much goods as was demanded by households and the government, and managed to make no profits when doing so. (The sfc_models framework extended this to allow for non-zero profit margins, which entailed the need for dividend payments to recirculate profits back to households.) Production is linearly proportional to labour hired.
Complications were added on a number of axes.
- The business sector no longer knows exactly what demand in the current period will be. It makes a production decision based on the previous period's activity. The implication is that they can make forecast errors for production, and inventories are used as a buffer for forecast misses. (For example, if demand is higher than anticipated, the excess comes from drawing down inventories.)
- Since we assume that decisions in the current period are based only on previously known information, lagged variables are used extensively in business decisions.
- Production now depends on the level of capital (which depreciates). The business sector diverts some goods production to act as gross investment. (Net investment is this gross investment less depreciation.) Since we are fixing the price of goods, one unit of consumption goods is equivalent to one unit of investment goods, and the value of the capital stock is interchangeable with its size in real terms. (There is no market for investment goods that could create a wedge between in the market value of capital and its production cost.)
- The production function is no longer a linear multiple of hours worked. It is equal to a productivity factor times hours worked, with the productivity factor equal to the square root of the capital stock (measured in real terms) divided by hours worked. This ends up at a very neo-classical looking production function where output is equal to the square root of capital times the square root of hours worked.
- Since productivity changes, keeping wages constant would imply widely varying profit margins -- possibly negative. Normal post-Keynesian arguments is that selling prices are set as a mark-up over production costs; in order to keep the model accounting simple, wages were set as a mark-down: wages are set so that businesses keep a constant profit margin (taking into account depreciation costs as well). Rather than track the profit accounting of inventories, the business sector uses a simplified profit measure that assumes that the cost of goods sold matches the current period's production cost.
- Dividends are paid based on the previous period's profits and cash holdings.
- There is a target capital/hours worked ratio. In the initial steady state, this ratio is one. The implication is that the capital stock is equal to the hours worked, and so the variables production, capital and hours worked start out at 100.
- There is a target inventory/sales ratio. (This is a stock-flow norm, as it a target relationship between a stock variable (inventory) and a flow (sales). The value in the simulation is one, so that the target is to hold one period's sales as the stock of inventory.
Both the capital stock and inventory are adjusted slowly towards their target values. The slow adjustment of these variables helps create a relatively low frequency damped business cycle in the model. (Output oscillates, but it tends towards a constant steady state value.)
In no particular order, I would note the following points.
Concerns About the ModelThe model I created is hardly perfect, but it has some features that may cause me to rebuild it before publication of my book on recessions. However, it does fit my target of being possibly the simplest possible model.
In no particular order, I would note the following points.
- It would have been preferred to take an existing post-Keynesian business cycle model. The issue is getting the model to fit within my Python framework.
- The behaviour of wages is non-intuitive. A more standard post-Keynesian approach would be to fix wages, then set selling prices as a mark-up. The difference shows up in the initial investment rise in period 5 as wages actually fall when hiring picks up. The reason is straightforward: labour hours rose versus steady state, while capital is still at the steady state value in period 5. Correspondingly, productivity falls, and so the hourly wage drops. If wages were fixed, we would end up with a more sensible-looking inflationary jump in selling prices in response to lower productivity.
- The sfc_models framework does not have built-in support of inventory accounting (yet). Rather than build an entire accounting system into this model, an approximation for profits is used: prospective profits based on the current cost of production, not the historical cost of production.
- Splitting the household sector into a worker and capitalist sub-sectors would allow for a different propensity to consume out of wages versus dividends. This may allow for a more rapid consumption response to investment increases, under the usual Keynesian argument that households have a higher propensity to consume out of income than out of dividends.
- The addition of an inventory cycle adds an extra source of overshooting. It may be better to have the business sector accurately forecast demand each period (as in model SIM), and eliminate the need for inventories. (This also eliminates the problem of inventory accounting for profit determination.)
- The initial steady state was found by trial-and-error, and it would be preferable to analytically develop equations to describe the steady state.
- Although the model has passed my initial smell tests, the equations were not heavily tested at the time of writing. I hope that I made no errors. (As I iterate on my book text, I will finalise the model.)
This preliminary model demonstrates how that income flow effects will tend to magnify the effect of changes to fixed investment on overall growth. This allows for moderate business cycles. We need to add financial considerations to the picture to generate greater volatility to the investment cycle. This brings us closer to Keynes' description of the cycle.
The code to generate the simulations is found at: https://github.com/brianr747/SFC_models/blob/master/sfc_models/examples/scripts/ex20190131_investment_accelerator.py (requires installation of the package). Note that this script was added after the Python module was uploaded to PyPi (the Python package repository), so it will not show up in the earlier versions. It will eventually show up once a new version is uploaded.
At the time of writing, the model features a fair number of hard-coded parameters, and the new equations are not heavily. I hope to clean up the internal documentation once I am satisfied with the model implementation.
The extra functionality was generated by sub-classing the original business sector object, a procedure that is described in Section 7.4 of my book. The class has arguably too many equations added to it, but that is the result of not having added support for handling the accounting of inventories.
In case any of you really like equations. The following is the set of reduced equations that are produced by the sfc_models framework. For those of you who are unaware, the sfc_models framework is unusual in that the user specifies the economic sectors as code objects, and the equations are generated by the module.
GOV__F = GOV__LAG_F+TF__T-GOV__DEM_GOOD
GOV__INC = TF__T-GOV__DEM_GOOD
HH__AfterTax = HH__INC-HH__T
HH__AlphaFin = 0.4000
HH__AlphaIncome = 0.6000
HH__DEM_GOOD = HH__AlphaIncome*HH__AfterTax+HH__AlphaFin*HH__LAG_F
HH__F = HH__LAG_F+BUS__DIVPAID-HH__T+HH__SUP_LAB-HH__DEM_GOOD
HH__INC = BUS__DIVPAID+HH__SUP_LAB
HH__SUP_LAB = 0.+BUS__DEM_LAB
HH__T = TF__TaxRate*HH__INC
BUS__CAPITAL = 0.95*BUS__LAG_CAP+BUS__INVEST
BUS__CAPITAL_TARGET = BUS__ALPHA_CAPITAL*BUS__LAG_HOURS
BUS__DEM_LAB = 0.8*BUS__PROD
BUS__DIVPAID = .055*BUS__LAG_F+0.8*BUS__PROFORMA
BUS__F = BUS__LAG_F-BUS__DIVPAID-BUS__DEM_LAB+GOOD__DEM_GOOD
BUS__INV = BUS__LAG_INV+BUS__PROD-GOOD__DEM_GOOD-BUS__INVEST
BUS__INVEST = max(0.,.05*BUS__LAG_CAP+.1*(BUS__CAPITAL_TARGET-BUS__LAG_CAP))
BUS__NUMHOURS = (BUS__PROD*BUS__PROD)/BUS__LAG_CAP
BUS__PROD = max(0,BUS__INVEST+BUS__LAG_SUP_GOOD+.1*(BUS__LAG_SUP_GOOD-BUS__LAG_INV))
BUS__PROFORMA = 0.20*BUS__LAG_SUP_GOOD-.05*BUS__LAG_CAP
TF__T = TF__TaxRate*HH__INC
TF__TaxRate = 0.2000
GOOD__DEM_GOOD = GOV__DEM_GOOD+HH__DEM_GOOD
GOV__LAG_F = GOV__F(k-1)
HH__LAG_F = HH__F(k-1)
BUS__LAG_CAP = BUS__CAPITAL(k-1)
BUS__LAG_F = BUS__F(k-1)
BUS__LAG_HOURS = BUS__NUMHOURS(k-1)
BUS__LAG_INV = BUS__INV(k-1)
BUS__LAG_PROD = BUS__PROD(k-1)
BUS__LAG_SUP_GOOD = BUS__SUP_GOOD(k-1)
GOV__DEM_GOOD = [19. ,]*105
BUS__ALPHA_CAPITAL = [1. ,]*5 +[1.1 ]*100
(c) Brian Romanchuk 2019