Multiplier-Accelerator Model

EC 313 Spring 2000

The multiplier-accelerator model introduced in the 1950s by Paul
Samuelson was an early instance of interesting dynamic behavior in a macroeconomic model. It consists, at minimum, of three equations: a Keynesian consumption
function, an investment function, and the national income identity. The "multiplier" component arises from the consumption function, as in a
simple "Keynesian cross" model. The "accelerator" component arises from the specification of investment demand as a function of the change in the level
of income. This gives the model a rudimentary supply side: if the capital stock required to produce a given level of output is K, then an increase in
the level of output to be produced each period will require an increase in the capital stock–by definition, investment. Thus, investment demand–the discrete-time equivalent to \(TraditionalForm\`\(K\& . \) - \(\(will\)\(\ \)\(be\)\(\ \)\)\)proportional to the change in the level of output.

In its simplest form, this model generates a linear second-order difference equation with constant coefficients, which may exhibit stability or instability. In either
regime, it may exhibit monotonic or oscillatory behavior.

c[t] := a1 + a2 y[t - 1]

i[t] := b1 + b2 (y[t - 1] - y[t - 2])

y[t] := c[t] + i[t] + g[t]

y[t]

The dynamics of the model depend on the coefficients a2 and b2. The model may be rewritten in terms of the state vector, {y[t], y[t-1]}' as:

lhs = 
        MatrixForm[Table[Y[t - i], {i, 0, 1}]];
dynmat = {{a2 + b2 , -b2}, {1, 0}};
dyn = MatrixForm[dynmat];
rhs = 
        MatrixForm[Table[Y[t - i], {i, 2}]];
xog = MatrixForm[{a1 + b1 + g[t], 0}];
Print[lhs, "=",   dyn rhs , "+",  xog]

The solution to this matrix dynamic equation involves calculating the eigenvalues of the characteristic equation |D-λI|==0,
where D is the coefficient matrix.

dd = 
        Det[dynmat - lambda IdentityMatrix[2]];
soln = Solve[dd == 0, lambda]

In this case the solutions are readily derived by applying the quadratic equation.For stability, both roots of the characteristic equation
must be within the unit circle.For combinations of a2 and b2 that lie inside
the relation a2 = 2 sqrt(b2) - b2, the behavior of the system will be oscillatory; damped cycles will occur if b2<1, and explosive cycles otherwise. Outside that relation, the system will be nonoscillatory. This
may be illustrated via:

aye2[bee2_] = 2 Sqrt[bee2] - bee2;
b2k[z_] = 1.0; 
    g1 = ParametricPlot[{{bee2, aye2[bee2]}, {bee2, b2k[bee2]}, {b2k[bee2], 
            bee2}}, {bee2, 0, 4}, PlotRange -> {{0, 4}, {0, 1}}, 
        AxesLabel -> {"b2", "a2"}, 
        PlotLabel ->  "S=Stable, E=Explosive, O=Oscillatory, \
M=Monotonic"];

Show[g1, Graphics[Text["S,O", {0.5, 0.4}]], 
      Graphics[Text["S,M", {0.2, 0.9}]], 
      Graphics[Text["E,O", {2, 0.4}]], 
      Graphics[Text["E,M", {3.5, 
            0.8}]]]

Implementation

BeginPackage["`MultAccel`"]
MultAccel::usage = "MultAccel[a2,b2] calculates the eigenvalues for a multiplier-accelerator model with MPC of a2 and accelerator coefficient
b2."
MASoln::usage = "MASoln contains the eigenvalues of the multiplier-accelerator model."
MAMod::usage = "MAMod contains the moduli of the eigenvalues."
Begin["`Private`"]
MultAccel[a2_Real,b2_Real] :=
	Block[{lambda,ss,y = Table[0,{52}]},
		y[[1]]=100;
		y[[2]]=100;
		ss=100 (1-a2)+1;
		Do[y[[i]]=ss+a2 y[[i-1]]+b2 (y[[i-1]]-y[[i-2]]),{i,3,52}];
		dynmat={{a2+b2 ,-b2},{1,0}};
		dd=Det[dynmat-lambda IdentityMatrix[2]];
		soln=Solve[dd==0,lambda];
		MASoln=lambda/.soln;
		eigModul[r_,i_]:=Sqrt[r^2+i^2];
		Rp=Re[MASoln];
		Ip=Im[MASoln];
		MAMod=Thread[eigModul[Rp,Ip]];
		verdict=If[Max[MAMod]<1,"stable","unstable"];
		behav=If[Max[Ip]>0,"oscillatory","monotonic"];
		ListPlot[y,PlotJoined->True,PlotLabel->"Response to One Unit Shock from
Steady State",PlotRange->{Min[y],Max[y]}];
		Print["For MPC = ",a2," and accelerator coefficient = ",b2,"\nEigenvalues of the model are ", MASoln,"\nModuli of the eigenvalues are ",MAMod,"\nThe system is ",verdict," and ",behav]
	]
End[]
Protect[ MultAccel ]
EndPackage[]

Execution

MultAccel[0.5,0.9]

A more complex multiplier-accelerator model could be constructed taking the permanent income hypothesis into account: consumption does not depend only upon the most recent level of income, but rather depends on a smoothed income measure. This could be generated by making consumption
depend on the last four quarters' income:

c[t] := 
      a1 + a2 y[t - 1] + a3 y[t - 2] + a4 y[t - 3] + 
        a5 y[t - 4]
i[t] := b1 + b2 (y[t - 1] - y[t - 2])

which then gives rise to a more complex dynamic process for income:

y[t] := c[t] + i[t] + g[t]

y[t]

The dynamic matrix of the system in state vector form becomes:

lhs = 
        MatrixForm[Table[Y[t - i], {i, 0, 3}]];
dynmat = {{a2 + b2 , a3 - b2, a4, a5}, {1, 0, 0, 0}, {0, 1, 0, 
            0}, {0, 0, 1, 0}};
dyn = MatrixForm[dynmat];
rhs = 
        MatrixForm[Table[Y[t - i], {i, 4}]];
xog = 
        MatrixForm[{a1 + b1 + g[t], 0, 0, 0}];
Print[lhs, "=",   dyn rhs , "+",  xog]

The characteristic equation is now a quartic; an analytic solution exists, but is very cumbersome. We can generate numerical solutions to the eigenvalue problem via an expanded version of MultAccel:

BeginPackage["`MultAccel2`"]
MultAccel2::usage = "MultAccel2[a2,a3,a4,a5,b2] calculates the eigenvalues
for a expanded multiplier-accelerator model with MPCs of {a2..a5} and accelerator coefficient b2."
MASoln2::usage = "MASoln2 contains the eigenvalues of the multiplier-accelerator model."
MAMod2::usage = "MAMod2 contains the moduli of the eigenvalues."
Begin["`Private`"]
MultAccel2[a2_Real,a3_Real,a4_Real,a5_Real,b2_Real] :=
	Block[{lambda,ss,y = Table[0,{54}]},
		y[[1]]=100;
		y[[2]]=100;
		y[[3]]=100;
		y[[4]]=100;
		ss=100 (1-a2-a3-a4-a5)+1;
		Do[y[[i]]=ss+a2 y[[i-1]]+b2 (y[[i-1]]-y[[i-2]]+a3 y[[i-2]]+a4
y[[i-3]]+a5 y[[i-4]]),{i,5,54}];
		dynmat={{a2+b2,a3-b2,a4,a5},{1,0,0,0},{0,1,0,0},{0,0,1,0}};
		dd=Det[dynmat-lambda IdentityMatrix[4]];
		soln=Solve[dd==0,lambda];
		MASoln2=lambda/.soln;
		eigModul[r_,i_]:=Sqrt[r^2+i^2];
		Rp=Re[MASoln2];
		Ip=Im[MASoln2];
		MAMod2=Thread[eigModul[Rp,Ip]];
		verdict=If[Max[MAMod2]<1,"stable","unstable"];
		behav=If[Max[Ip]>0,"oscillatory","monotonic"];
		ListPlot[y,PlotJoined->True,PlotLabel->"Response to One Unit Shock from
Steady State",PlotRange->{Min[y],Max[y]},AxesOrigin->{1,Min[y]}];
		Print["For MPCs = {",a2,",",a3,",",a4,",",a5,"} and accelerator
coefficient = ",b2,"\nEigenvalues of the model are ",
MASoln2,"\nModuli of the eigenvalues are ",MAMod2,"\nThe system is ",verdict," and ",behav]
	]
End[]
Protect[ MultAccel2 ]
EndPackage[]

MultAccel2[0.4, 0.1, 0.1, 0.05, 0.9]

An interesting exercise with this version of the model would be to trace out the boundary between oscillatory and monotonic regions.