General Equilibria and pricing tensions

Apologies is this is an overly naive take. It is clear from other threads about GE that there are very well-understood solutions to very specific problems. But I think I discovered something while studying OLGModel14.

As writen, OLGModel14 has these GE parameters:

GEPriceParamNames={'r','pension','AccidentBeq','G','w','firmbeta','D','P0','Lhscale'}; 

r is a rate of return of the market, whereas D is the dividend paid to households. These are highly correlated variables, and when fsolve starts randomly perturbing these variables, half of the time the signals are canceling and confusing the solver.

Similarly, w and Lhscale are affecting household labor supply. And again, they have a correlated behavior on the effect of labor, producing confounding results half the time.

I have modified OLGModel14 so that r and Lhscale are exogenous, non-equilibrium variables. And now, when w moves, it sends a non-confusing signal to both household labor supply and firm labor demand which is neither contradicted nor counteracted by changes to Lhscale.

I have also introduced the D parameter to the firm’s ReturnFn. Consider this original code:

% Firms financing constraint gives the new equity issuance
s=dividend+invest+capitaladjcost-(profit-tau_corp*T);

% Firms per-period objective
if s>=0 % enforce that 'no share repurchases allowed'
    F=((1-tau_d)/(1-tau_cg))*dividend-s;
end

Now, it happens that tau_d and tau_cg are both 0.2 in the model, which means that ((1-tau_d)/(1-tau_cg)) equals 1.

If we expand s with the above algebraic simplification specific to our model, we see that that F can be simplified:

F=1*dividend-(dividend+invest+capitaladjcost-(profit-tau_corp*T))

And further:

F=-invest-capitaladjcost+(profit-tau_corp*T))

Which then raises the question: just what sort of decision variable is dividend from the Firm’s perspective? Hopefully we are not paying the firms’ CEOs a high salary to finely tune that decision variable!!

On the other hand…it makes a ton of sense that the firms pay a dividend that’s in line with what the market is expecting to be paid. And that’s D. So we can make (D-dividend)^2 a figure of demerit in our return function calculation. And in so doing it makes the firms and the households productively bargain for a fair rate, with the solver making suggestions for potential returns and the firms responding yeah/nah, depending on how it moves the equilibrium.

Finally, I looked for, but could not find, a similar way to do things with L_h and L_f. Yes, we do now have wages tying these together more deterministically. And yes, we do have a GE equation that’s part of the chorus of complaints when the equilibrium is not zero. But it’s very slow going for the solver to iterate through all the many possible perturbations of prices to hit upon the correct answer.

I thought about trying to expose L_h as a GE price, but as I learned, the return functions have their own ideas about what the value of such is (it’s the specific result of a specific calculation) and the GE prices float according to the whims of the solvers. Two different L_h variables not interacting with one another does not help to produce a convergent result.

All in all, the above changes provide a far more credible equilibrium and search than anything I have seen previously.

Finally, I note that the original grid sizes are pretty large, and to my eyes not very efficient. I’ve reshaped and resized the grids. I’d be happy to receive instruction as to whether or how these grids could be further improved. I’m also holding back on using grid interpolation due to a bug I’ve reported in GitHub.

1 Like

I deleted my post about wage steering for two reasons. First, my initial steering function had a sticking point when w==1. Second, as I refined it, I realized that L_h-L_f (labor markets clear) was basically already doing the job. So I’m just going to add weight to that (it governs three variables after all).

My codes solving the Gourio & Miao model (which is the firm model being used in OLGModel14) use ā€˜dividend’ even though this is actually redundant and should be removed from the problem (which seems to be what you spotted). I mean to get around to doing this, but haven’t yet. Was known to Gourio & Miao, I just missed it when writing my codes (they anyway give the correct answer, just they are doing some redundant stuff).

1 Like

I made what I think is a further refinement to the OLG14 GE improvements pull request. I removed Lhscale from most functions, leaving it only to balance the GE (L_f vs. L_h) and some government taxes. But I removed it from the consumption, income, and return functions. Here’s the a link to the commit with its latest GEq: OLGModel14: tighten GE constraints by MichaelTiemann Ā· Pull Request #12 Ā· vfitoolkit/IntroToOLGModels Ā· GitHub

I’m in no rush to get that approved, but thought you might like to see it.

1 Like

I have another conundrum, based on the tensioning I did for OLGModel14, that I did not previously notice: CapitalGainsTaxRevenue is now negative.

I’ve spent some time staring at the equations that relate P0 with P, Plag, D, and r (not to mention the various tax factors). The bottom line I’m seeing is that if D pays dividends that are higher than the ā€œrisk free rate of returnā€ that r represents, those tax revenues are going to be negative.

P0=p_eqm.P0; D=p_eqm.D; 
tau_cg=Params.tau_cg; tau_d=Params.tau_d; r=Params.r;
>> P0-(((1-tau_cg)*P0 + (1-tau_d)*D)/(1+r-tau_cg))

ans =

   -0.1230

For the record:

[P0, D, tau_cg, tau_d, r]

ans =

    1.1897    0.2050    0.2000    0.2000    0.0500

What, really, are we calculating here?

I finally downloaded and read their paper. It’s a good read!

I also spent some time really looking at how the gears of the GE go together, and I’m slowly starting to understand it better. First I’ll show a bunch of numbers, and then discuss what I think they teach about OLGModel14 (as it is/as it could be).

If we look at capital ranging from 0.2 to 1.8, with w=1, we see labor ranging thusly:

labor=(w./(Params.alpha_l*((0.2:0.2:1.8).^Params.alpha_k))).^(1/(Params.alpha_l-1))

labor =

    0.0699    0.1294    0.1855    0.2395    0.2921    0.3434    0.3938    0.4434    0.4924

Output ranging thusly:

Y=((0.2:0.2:1.8).^Params.alpha_k).*(labor.^Params.alpha_l)

Y =

    0.1075    0.1991    0.2854    0.3685    0.4494    0.5283    0.6059    0.6822    0.7575

And profit ranging thusly:

profit=Y-w*labor

profit =

    0.0376    0.0697    0.0999    0.1290    0.1573    0.1849    0.2121    0.2388    0.2651

When we compare gross profit with labor, we see that the Cobb-Douglas curve is effectively modeling 54% gross margins.

The model parameterizes depreciation \delta as 0.054, which is close to 0.1 when K=1.8.

Before taxes, at K=1.8, profit-investment is approximately 0.16, meaning the firm could offer a dividend in that neighborhood indefinitely. The models capadjcost goes down from 0.02 when k=0.2 to essentially zero as K>=1.2, so taxable income is really just profits - investments, and for long-term sustainability, we want divdends to equal the after-tax value of those retained earnings. I.e.,

dividend=(1-Params.tau_corp)*((Y-w*labor)-delta*k)

dividend =

    0.0177    0.0317    0.0445    0.0566    0.0682    0.0793    0.0901    0.1006    0.1108

Yes, there are some other small effects, but I’m ignoring those because their inclusion/exclusion doesn’t (I think) influence any of the following, which is where the fun begins.

If we fully fund dividends from retained earnings, there is no need to sell shares, in which case households cannot buy them and the model breaks.

Question 1: by how much should we pay out in dividends above what we earn in profits less investments? This gives us more problems.

(1.1) Suppose we choose a miniscule amount, \epsilon. The value of that miniscule offering will be miniscule (Share Issuance will be near zero), but households will flock to buy shares, leading to oversubscription.

We know that share price = annual dividend per share / dividend yield (P = dividend / D in modelspeak), and thus if advertise that we pay what we earn, then the price is 1. But what, really, is the mass of the shares? Is it \epsilon (miniscule value) or 1 (all the shares are all the shares) or ??? From an accounting perspective, should the firm keep track of the shares not sold as belonging to its own treasury?

(1.2) It could be that the share issuance decision is not ā€œhow many shares to sellā€, but rather the binary decision ā€œdoes the company sell shares at all?ā€ and if yes, then of course the mass is 1 because all the shares are now on offer. But this would raise far more money that what is needed to pay the dividend (which is funded entirely by profits, except for \epsilon). How do we account for that excess capital raise within the firm? Put it all into capital?

(1.3) As an alternative to (1.2), we could choose a dividend payment large enough to force us to sell all or most of the shares. But selling shares for the predominant reason of paying a large dividend is not sustainable. Yes, there is a stationary equilibrium whereby stock buyers are laundering their own money through the purchase of shares that return to the stock buyers as dividends. But because these cannot be funded long-term by profits, the company must perpetually sell more and more shares to make up the dividend, which is a ponzi scheme. So we don’t want that.

I also think we don’t want to model two distinct equilibria, one at the beginning of time, which is funding virtually all of the dividend through stock, then dropping the dividend substantially to provide an economically sustainable payout. The people who bought stock on Day 1 would all be capital gains losers to the people who bought when the second equilibrium was reached.

Alas, I think I see negative capital gains in my version of this model for this reason…it’s the consequence of a wrong starting point for the dividend.

Question 2: Should we adjust the stock price based on supply and demand?

Rather than dealing with the unstable equilibrium of (1.3), we could imagine a single equilibrium whereby the price of the stock is adjusted to meet demand. In this case, the stock pays a fixed amount of dividend, but the price floats to a point where the effective yield causes demand to balance with supply. I feel like this is an intention of the model, but it hinges very strongly on answers to the first question (Value = S * P), and while dividends paid must equal dividends received, the dividend yield is no longer the dividend paid (which were equal when S and P are both 1).

It is clear that with CustomModelStats it’s now easy to communicate supply and demand and negotiate price much more efficiently than asking the solver to discover which variable needs tweaking by how much. Yes there is an iterative step to the auction, but we can use efficient and targeted search to find the price.

Anyway, this my present understanding. Feel free to add or correct as you see fit!

1 Like