The Difference between Input-output Multipliers and Keynesian Multipliers

Early on in the Proprietor’s career in the Commonwealth Government we examined a request for a Wholesale Sales Tax (WST) reduction for camper trailers (See the Australian definition here).

Attached to this request was a large multiplier showing how the Australian economy would expand several times the size of the WST cut. We can’t remember the exact numbers, but they were big.

For a bit of context, prior to the introduction of the Goods and Services Tax in 2000, Australia’s (national) indirect taxation comprised mainly of the WST, which had many differential rates for different activities. A common lobbying effort by indutries was to get their WST rate lowered.

Also, at this time (the early 1990s) the Australian economy was in recession and everyone was wondering what industries or sectors would drive an economic recovery. Every promising sector would be labelled the ‘XXX led recovery’.

The proprietor’s then supervisor, who was very smart and also possessed a dry wit, immediately quipped:

Now we’ve got a camper-trailer led recovery!

It wasn’t exactly those words, but they’re close enough to make the point.

Strangely enough, the eventual easing of restrictions due to the coronavirus has a similar industry/sectoral feeling. We’ll eventually have to judge the benefits of opening up new industries (e.g. restaurants) versus the risk of new outbreak and having to re-impose restrictions on other industries.

While we don’t recommend using multipliers to analyse this situation, but we have no doubt Input-Output (I-O) multipliers will come into the debate.

But what do I-O multipliers mean, and are they the same as the Keynesian multipliers you first heard about in high school and analysed to death at university?

In our previous post on AFL multipliers, we noted that I-O multipliers and Keynesian multipliers are not the same thing. We also promised a post showing the difference between the two.

Here we are.

A little confession here, while we have in the past said that the two multipliers are not the same, we haven’t yet dived down to the depths that the topic deserves.

Most of what we can find on the internet doesn’t really answer the question either. A US Bureau of Economic Analysis (BEA) paper makes a valid point on the difference between the two:

Macroeconomic multipliers are based on behavioral assumptions related to how individuals adjust their labor supply, saving, and consumption decisions when there is an initial change affecting their income.

Rebecca Bess and Zoë O. Ambargis, Input-Output Models for Impact Analysis

while

The relationships between consumption and income in I-O multipliers are based on personal consumption expenditures measured in I-O tables for a given year.

Rebecca Bess and Zoë O. Ambargis, Input-Output Models for Impact Analysis: Suggestions for Practitioners Using RIMS II Multipliers

This is very important as we’ll see later, but it’s also not the whole story.

The best way to illustrate why they’re different is to construct an input-output table of a simple economy and calculate both types of multipliers. More correctly, we’ll calculate the I-O multipliers for this economy and show why we can’t use these data to calculate a Keynesian multiplier.

We will, however, be able to show differences in concept between the two.

The entire Python code for this analysis is contained at the end of this post, but we will post in some bits as we go for illustrative purposes.

Let’s start with our simple I-O table called IOTABLE in the code. We’ll read it in via Python Pandas DataFrame created from a Python dictionary as in the code at the end of this post.

The simple economy looks like this:

I-O Table of a Simple Stylised Economy

We have two goods (x1 and x2), two factors of production (labour (l) and capital (k)) and two final uses – consumption (c) and government (g).

In our I-O world, we’ll treat g as exogenous and source of the external shock to which our multipliers respond.

First, let’s create our I-O multipliers, full code is at the end of this post. We create the matrix of I-O coefficients by dividing the values by the column totals (B matrix below).

Input-Output Coefficients from Stylised I-O Table

Then we take the first three rows and columns (two goods plus consumption in the horizontal direction and labour income in the vertical). Then we subtract this from a 3*3 identity matrix and invert it (noted as (I-B) inverse).

Then we take remove the income row and consumption column to form the B* matrix outlined in the Australian Bureau of Statistics explanation of multipliers (p9). We’re calculating total multipliers here. If you want to learn about Type Ia etc multipliers then read the ABS publication.

The total output multipliers are formed by summing the first two elements of the first two columns of the B* matrix (sometimes these are referred to as ‘truncated’ multipliers, Millar and Blait, p 248).

The income and value-added multipliers are obtained by matrix multiplying B* by the respective income and total value added (labour plus capital) shares in the B matrix.

Code for these is below. The results for the output, income and value-added multipliers are:

We’re about to make a comparison with Keynesian multipliers, so the appropriate multipliers to focus on are the value-added multipliers 1.26 for exogenous expenditure on good x1 and 1.33 for exogenous expenditure on good x2.

OK, that’s the I-O multipliers, what about the corresponding Keynesian multipliers?

If only it were that simple.

Let’s start with the context for the Keynesian multiplier. I-O Table contains no feedback or constraints from financial markets and so we don’t need to expand impacts on multipliers to those in say an IS-LM model or the need to consider resource constraints or Ricardian equivalence.

So the Keynesian multiplier closest to I-O multipliers in our stylised closed economy is:

1[1MPC*(1T)]

where MPC is the economy’s marginal propensity to consume and T is the marginal tax rate.

So where’s MPC in our I-O table? Its not there. I-O tables are totals summed over time and so any coefficients are average, not marginal.

This is what the BEA quotes above refer to.

Nevertheless, let’s have a go at using averages rather than marginals to show further differences in the two types of multipliers.

Our average propensity to consume in the absence of tax in our I-O table is, as far as we can tell is 1.0. If we adjust this for tax to get the denominator in the multiplier we get:

[1-1.0*(1-2/22)]=0.91

So our ‘average’ Keynesian multiplier is 1/(1-0.91) = 10.99

[As an aside, we usually mention multipliers in response to a shock in the economy such as an exogenous increase in saving. We usually mean saving through people hoarding money, which would be seen initially in an I-O table as an increase in stocks. In I-O accounting, stocks are a positive entry, in fact a type of investment, but they generate no income for producers until they are sold. Hence a buildup in stocks is often seen as a precursor to a fall in output.]

You can see that we’re talking different worlds, with about 1.3 for the value-added I-O multiplier versus almost 11.0 for the average Keynesian multiplier.

While we don’t know the economy’s MPC from the table, in these calculations you’d need an MPC of about 0.25 to get a Keynesian multiplier of 1.3. While it’s likely lower than 0.91, we’re not sure it’s this low.

So what’s happening?

In short, the constraints on the Keynesian multiplier apply, to the extent that it makes sense to talk about Keynesian multipliers in I-O tables at all, across the rows of the I-O table. This is in the form of some sort of propensity to consume.

In contrast, constraints on I-O multipliers largely apply down the columns. This is shown by considering the B matrix in our calculations as a part of coefficient of the entire I-O table.

Additionally, the I-O multiplier does not include feedback from all types of income.

B Matrix from Stylised I-O Table

You can see that the feedback in our B (and eventually B*) matrix comes from labour income and consumption. Mathematically, the matrix is closed with respect to households. Capital income doesn’t enter the flow-on or feedback effect (nor does any other demand such as investment).

The underlying assumption of I-O multipliers is that households receive only labour income and contribute all consumption.

Why would I-O multipliers be as large as the Keynesian version?

We could add labour and capital income into a single value-added column, but we then have the problem that the columns of the B matrix sum to one, so they’re not linearly independent and you’ll get the following Python error when you try to find the inverse of (I-B).

‘LinAlgError: Singular matrix’

We can, for this specific example where the APC net of tax is 100% and the only endogenous demand is consumption, do a bit of an approximation of APC down the I-O table or B matrix columns to get (kind of) a Keynesian equivalent multiplier.

We’ve never seen this done anywhere, so we’re putting what little credibility we have on the line.

The leakage (constraint) from income in an I-O table could be approximated by removing income tax from from labour and capital income (taxes on commodities are often explicitly identified in I-O tables, but that’s not what we’re talking about here).

We assume that the $2 in income tax required to fund the equivalent government expenditure is removed from income at $1 per industry input column. Labour and capital are combined into a single value-added row. The I-O table (all matrices in this calculation are followed by an ‘a’ in the code below, e.g. IOTABLEa) is now:

IOTABLEa: Modified I-O Table of the Stylised Economy

The matrix of weights becomes:

IOTABLEa: Modified I-O Table of the Stylised Economy

If we do the math we get:

Modified Value-Added Multipliers of the Stylised Economy

You can see that the value-added multipliers now approach the value of the average Keynesian multiplier of 10.99. Still not the same thing, but much closer.

We’ll reiterate again that we have never seen this interpretation of value-added multipliers anywhere, so we could be way off the mark. Please comment if you think this is way off-base.

But we’ve also never seen as close to a full reconciliation between Keynesian and I-O multipliers.

Of course, all of our numbers are made up, so please don’t take the results literally. A $2 increase in government expenditure will lead to a $20 ($9.73 + $10.27) increase in the economy.

Probably a little large.

As a comparison, during the 2008 economic downturn, the US Government used a fiscal multiplier of 0.27 to 1.73, depending on the type of expenditure or tax reduction.

This is closer but actually lower than the I-O multipliers calculated in our previous post. Who knows what the true number is?

Camper trailer sales are probably down given all of the travel restrictions in place at the moment. We’re not sure they’ll lead the recovery this time, big multiplier or (more likely) not.

What do you think of our interpretation of Keynesian and Input-Output multipliers? We’re pushing the edge of our knowledge so we’re keen to hear what you think.

Python Code Below:

import pandas as pd
import numpy as np

IOTABLE=pd.DataFrame({‘x1’:[1,3,2,5,11],
‘x2′:[2,4,3,12,21],’c’:[7,13,0,0,20],
‘g’:[1,1,0,0,2],’Tot_Dd’:[11,21,5,17,54]},index=[‘x1′,’x2′,’l’,’k’,’Tot_Use’])

B=IOTABLE.T

B=B.div(B[‘Tot_Use’],axis=0).fillna(0).T
B_ST=B.iloc[:3,:3]

I=pd.DataFrame(np.eye(len(B_ST),dtype=float))
I-B_ST
I=I.set_index(B_ST.index)
I.columns=B_ST.columns.values

B_STAR=pd.DataFrame(np.linalg.inv[1]I-B_ST).values), B_ST.index, B_ST.columns).iloc[:2,:2]

OUTPUT_MULT=pd.DataFrame(B_STAR.sum(
#.iloc[:2,:2]
OUTPUT_MULT.columns=([‘Out_Mult’])

INC_MULT=pd.DataFrame(np.dot(B.iloc[2:3,0:2],B_STAR).T[:2],index=OUTPUT_MULT.index)
INC_MULT.columns=([‘Inc_Mult’])

VA_Mat=B.iloc[2:4,0:2]
VA_Mat=VA_Mat.T
VA_Mat[‘VA’]=(VA_Mat[‘l’]+VA_Mat[‘k’])

VA_Mat=VA_Mat.T

VA_MULT=pd.DataFrame[2]np.dot(VA_Mat[‘VA’],B_STAR.T,index=OUTPUT_MULT.index)#[2:3].iloc[:2]
VA_MULT.columns=([‘VA_Mult’])

df_MULT=pd.concat([OUTPUT_MULT,INC_MULT,VA_MULT],axis=1)

#Full VA feedback

IOTABLEa=pd.DataFrame({‘x1’:[1,3,6,1,11],
‘x2′:[2,4,14,1,21],’c’:[7,13,0,0,20],
‘g’:[1,1,0,0,2],’Tot_Dd’:[11,21,20,2,54]},index=[‘x1′,’x2′,’VA’,’tax’,’Tot_Use’])

Ba=IOTABLEa.T

Ba=Ba.div(Ba[‘Tot_Use’],axis=0).fillna(0).T
B_STa=Ba.iloc[:3,:3]

I=pd.DataFrame(np.eye(len(B_ST),dtype=float))
I-B_ST
I=I.set_index(B_STa.index)
I.columns=B_STa.columns.values

B_STARa=pd.DataFrame(np.linalg.inv[3]I-B_STa).values), B_STa.index, B_STa.columns).iloc[:2,:2]

OUTPUT_MULTa=pd.DataFrame(B_STARa.sum(
#.iloc[:2,:2]
OUTPUT_MULTa.columns=([‘Out_Mult’])

INC_MULTa=pd.DataFrame(np.dot(Ba.iloc[2:3,0:2],B_STARa).T[:2],index=OUTPUT_MULTa.index)
INC_MULTa.columns=([‘Inc_Mult’])

VA_Mata=Ba.iloc[2:3,0:2].T

VA_Mat=VA_Mat.T

VA_Mat[‘VA’]=(VA_Mat[‘l’]+VA_Mat[‘k’])

VA_Mat=VA_Mat.T

VA_MULTa=pd.DataFrame[4]np.dot(VA_Mata[‘VA’],B_STARa.T,index=OUTPUT_MULTa.index)#[2:3].iloc[:2]
VA_MULTa.columns=([‘VA_Mult’])

df_MULTa=pd.concat([OUTPUT_MULTa,INC_MULTa,VA_MULTa],axis=1)

print(IOTABLE)
print()
print (df_MULT)
print()
print (df_MULTa)

References

References
1 I-B_ST).values), B_ST.index, B_ST.columns).iloc[:2,:2]

OUTPUT_MULT=pd.DataFrame(B_STAR.sum(

2 np.dot(VA_Mat[‘VA’],B_STAR
3 I-B_STa).values), B_STa.index, B_STa.columns).iloc[:2,:2]

OUTPUT_MULTa=pd.DataFrame(B_STARa.sum(

4 np.dot(VA_Mata[‘VA’],B_STARa