Relative consumption impact

Redistribution Recession sequels

Utilities

returns the eigenvector associated with the smallest (ie., most negative or least positive) eigenvalue.

eigenvectorsmall[m_]:=Last@First@Sort@Transpose@Eigensystem@m

rdiffpwr={(((-1+x_))^(y_))->(((-1))^y)(((1-x))^y),((((1/(-1+x_))))^(y_))->(((-1))^y)((((1/(1-x))))^y),(((-1))^(2 __))->1,(((-1))^(-2 __))->1};

distributepowers[expr_]:=FullSimplify[expr,β>0&&η>0&&γm>0&&γn>0&&n>0]//.(((a_ b_))^(c_))->((a^c)(b^c))//.rdiffpwr

font14[expr_]:=Style[expr,FontSize->14]

maxarginpiecewise[expr_/;Head@expr==Piecewise]:=Max@Cases[List@@#&/@Extract[#,Most/@Position[#,Alternatives@@{Equal,Less,LessEqual,Greater,GreaterEqual,Unequal}]]&@(Last/@First@expr)//Flatten,
_Integer|_Real]

plopts={ImageSize->600,
PlotStyle->{{Purple,Thickness[1/150]},
{Darker@Green,Thickness[1/150]}
,{Red,Thickness[1/150]}},
TicksStyle->Directive[14,Black,FontFamily->"Times New Roman"]};

tr14[expr_]:=Style[font14@expr,Black,FontFamily->"Times New Roman"]

pctfmt[expr_?NumberQ,decplaces_:0]:=Row[{Round[100expr,(10^(-decplaces))],"%"}]

decfmt[expr_?NumberQ]:=StringTrim[ToString@N@expr,"."]

resultslibrary=
(Dataset@LocalSymbol[$LocalSymbolDefaultDirectory<>"JMFsimulations"])[Select[#paperversion=="JMF draft 2"&&
#tastedescription=="RR benchmark"&&
#techndescription=="JMF benchmark"&]];

NGM Analytical Setup

k[t]=date t capital
a=production function parameter (constant)
f[k[t],a]=date t output
c[t]=date t consumption
δ=date t depreciation rate (constant)
r[t]=date t capital rental rate
ρ=date t time preference rate (constant)
u[c[t],n[t]]=date t utility flow

Functional forms

f[k_,n_,a_]:=a (k^(1-α))(n^α)

u[c_,n_,m_]:=(σ/(σ-1))(c^((σ-1)/σ))-γn(η/(η+1))(((n-β m))^((η+1)/η))-γm(η/(η+1))(m^((η+1)/η))

Utility function when m is optimized

The composition of labor is constant.

First@Solve[Derivative[0,0,1][u][c,n,m]==0,m]

interpretγ=γ->γm γn ((((1/(((γm)^η)+(β^(1+η)) ((γn)^η)))))^(1/η));

u[c_,n_]:=(σ/(σ-1))(c^((σ-1)/σ))-γ(η/(η+1))(n^((η+1)/η))

u[c,n]==u[c,n,m]/.interpretγ/.First@Solve[Derivative[0,0,1][u][c,n,m]==0,m]//distributepowers

Equations

eqresourceconstraint=k'[t]==f[k[t],n[t],a]-c[t]-δ k[t];

eqintertemporalfoc=c'[t]==FullSimplify[Derivative[1,0][u][c[t],n[t]](( Derivative[1,0,0][f][k[t],n[t],a]-δ-ρ)/(-Derivative[2,0][u][c[t],n[t]]))]

eqlaborfoc=-((Derivative[0,1][u][c[t],n[t]])/(Derivative[1,0][u][c[t],n[t]]))==(1-τ[t]) Derivative[0,1,0][f][k[t],n[t],a]//FullSimplify

Inequalities

iqpositive=a>0&&γ>0&&η>0&&σ>0&&η>0&&c[t]>0&&n[t]>0&&k[t]>0&&0≤τ[t]<1 &&0<α<1;

Replacement rules

nofck[c_,k_,τ_]:=(((((1-τ)/γ)((α (k^(1-α)))/(c^(1/σ)))a))^(η/(1+(1-α)η)))

eqlaborfoc/.n[t]->nofck[c[t],k[t],τ[t]]//PowerExpand//distributepowers

rssnotation={τ[t]->τ,c[t]->css,k[t]->kss,n[t]->nss,r[t]->rss,τ'[t]->0,c'[t]->0,n'[t]->0,k'[t]->0,r'[t]->0};

Steady state

Steady-state version of equations and inequalities

iqsspositive=iqpositive/.rssnotation;

eqssintertemporalfoc=FullSimplify[eqintertemporalfoc/.rssnotation,iqsspositive]

eqsslaborfoc=FullSimplify[eqlaborfoc/.rssnotation,iqsspositive]

eqssresourceconstraint=eqresourceconstraint/.rssnotation

Steady-state behavior

rnoverk=FullSimplify@First@Quiet@Solve[eqssintertemporalfoc/.{css->(coverk kss),nss->(noverk kss)},noverk]//.rdiffpwr

rcoverk=FullSimplify@First@Solve[eqssresourceconstraint/.{css->(coverk kss),nss->(noverk kss)}/.rnoverk//PowerExpand,coverk]

rkss=First@Quiet@Solve[eqsslaborfoc/.{css->(coverk kss),nss->(noverk kss)}/.rnoverk/.rcoverk,kss]//PowerExpand//distributepowers//FullSimplify

Local behavior

localgradients=Grad[Last/@{eqintertemporalfoc,eqresourceconstraint}/.n[t]->nofck[c[t],k[t],τ],
{c[t],k[t]}]/.{c[t]->coverk kss,k[t]->kss}/.Flatten[{rcoverk,rkss}]//PowerExpand//distributepowers;

MatrixForm@localgradients

This depends only on α, δ, η, ρ, σ and not on a, γ, or τ

Initial impact on log labor

loglaborimpact=Dt[PowerExpand@Log@nofck[c,k,1-q],i]/.{Alternatives@@Dt[{a,α,γ,η,k,σ},i]->0}/.{Dt[q,i]->q Dt[lnq,i]}(* change in c beginning at c==css *)/.c->css/.Dt[css,i]->Dt[c,i]

Normalize γ and a so that kss == nss == 1 at a specific tax rate

rnorma=FullSimplify@First@Quiet@Solve[1==noverk kss/.rnoverk/.kss->1,a]

rnormγ[τ_]=distributepowers@PowerExpand@First@Quiet@Solve[1==kss /.rkss/.rnorma,γ]

Figures 4 and 8

rcalibration=FilterRules["tastestechparams"/.First@Normal@resultslibrary,
{α,δ,ρ,γ,a}]

cprimess[sigma_,eta_]:=Divide@@eigenvectorsmall[localgradients//.Flatten@{τ->0(* dummy: it is not relevant *),rcalibration,σ->sigma,η->eta}]

rellncimpact[σ_?NumericQ,η_]:=(((1+(1-α) η) σ (coverk-c'[kss]))/(coverk σ+η c'[kss]))/.{c'[kss]->cprimess[σ,η]}/.rcoverk/.rcalibration;

Column@{Plot[rellncimpact[σ,#]&/@{(3/8),(3/4),(3/2)}//Evaluate,
{σ,(1/2),2},
PlotLabel->(Row[Style[#,16,FontFamily->"Times New Roman"]&/@{Style["Figure 4.  ",Bold],"Initial log consumption impact\nof a permanent replacement rate increase"}]),
AxesLabel->tr14/@{"Intertemporal\nconsumption elas.","Percentage of initial\nlog labor impact"},
PlotLegends->Placed[tr14/@(Row@{"Labor elasticity = ",#}&/@{(3/8),(3/4),(3/2)}),
{3/4,3/4}],
PlotRange->{0,4/5},
Ticks->{{#,decfmt@#}&/@Range[1/2,2,1/4],
{#,pctfmt@#}&/@Range[0,4/5,1/5]},
Evaluate@plopts],
Style["Note: this figure uses the model's local approximation.",
FontFamily->"Times New Roman"]}

Column@{Plot[((#)/(rellncimpact[σ,3/4]))&/@{.035,.025,.015}//Evaluate,
{σ,(1/2),2},
PlotLabel->(Row[Style[#,16,FontFamily->"Times New Roman"]&/@{Style["Figure 9.  ",Bold],"Inferring average labor impact\nfrom the initial consumption impact"}]),
AxesLabel->tr14/@{"Intertemporal\nconsumption elas.","Discounted average log\nlabor impact magnitude"},
PlotLegends->Placed[tr14/@("initial consumption impact = "<>ToString[#]<>"%"&/@{-3.5,-2.5,-1.5}),
{1/3,4/5}],
PlotRange->{0,.19},
Ticks->{{#,decfmt@#}&/@Range[1/2,2,1/4],
{#,NumberForm[N@#,{2,2}]}&/@Range[0,3/20,1/20]},
Evaluate@plopts],
Style["Note: the discounted average labor impact is estimated as the initial labor impact that occurs in the alternative model\nwith (i) a permanent tax increase and (ii) the same initial consumption impact, using the local approximation to that model.",
FontFamily->"Times New Roman"]}