Closed loops in Keynes

Gang --

I'm on the verge of finding two closed-loop relationships in Keynes'
conceptions of the economy. The problem is that I'm having trouble
re-finding them (I'm still looking even as I write). One of them has to do
with interest rates and investment on the one hand, and the the other has
to do with the propensity to consume and employment, I think. The problem
is that I often see things in these writings only after digesting them for
a while, when the significance of some statement has sunk in enough, so
that by the time enlightenment occurs I no longer remember exactly where
the passages in question occurred. So then it's a slow process of leafing
through the book to find them again.

Keynes speakes of liquidity-preferences, which seems to mean a preference
for holding savings in cash rather than parting with them for a while in
hope of a greater future return (which seems to be just another way to
speak of investment). This is a tacit acknowledgement that it is possible
for savings to exist in two forms: as investments, and as cash. This seems
to contradict his earlier insistence that savings = investment,
unconditionally. We now see that there can be savings which are not
invested -- which, in Keynes' terminology, are "hoarded." (p. 174)

Here is one excerpt, from p. 181-2:

"Thus the functions used by the classical theory, namely, the response of
investment and the amount saved out of a given income to change in the rate
of interest, do not furnish material for a theory of the rate of interest;
but they could be used to tell what the level of income will be, given
(from some other source) the rate of interest; and, alternatively, what the
rate of interest will have to be, if the level of income is to be
maintained at a given level (e.g., the level corresponding to full
employment)."

Ah, I found one of the lost parts. On p. 183:

"Thus the traditional analysis is faulty because it has failed to isolate
correctly the independent variables of the system. Savings and investment
are the determinates [that which is determined, or the dependent variables
-- wtp] of the system, not the determinants. They are the twin results of
the system's determinants, namely, the propensity to consume, the schedule
of the marginal efficiency of capital, and the rate of interest."

This is highly suggestive of the closed-loop analysis of a feedback system.
In a feedback system, the apparent cause-effect relationships involve an
input that affects an output by one route, while the output affects the
input by a different route. An analyst can mistakenly consider either the
outputs or the inputs as independent variables, with the remaining one
being the dependent variable. But in fact the independent variables lie
outside the loop; they are the disturbances and the reference signal, while
BOTH the input and the output variables are _dependent_ variables.

Later on (p. 184) we find this:

"Nor are those theories more successful which attempt to make the rate of
interest depend on "the marginal efficiency of capital". It is true that at
equilibrium the rate of interest will be equal to the maginal efficiency of
capital, since it will be profitable to increase (or decrease) the current
scale of investment until the point of equality has been reached. But to
make this into a theory of the rate of interest or to derive the rate of
interest from it involves a circular argument, as Marshall discovered after
he had got half-way into giving an account of the rate of interest along
these lines. For the "marginal efficiency of capital" partly depends on the
scale of current investment, and we must already know the rate of interest
before we can calculate what this scale must be."

That, of course, is precisely the dilemma that any closed loop presents to
a linear analysis. How can you calculate the output without first knowing
the input, and how can you calculate the input without first knowing the
fed-back effects of the output? The so-called "circular argument," which in
conventional thinking is taken as a sign that something has gone wrong, is
precisely the sign that closed-loop analysis must be used: simultaneous
equations either algebraic or differential.

I haven't understood the "marginal efficiency of capital" yet, or the
arguments relating money supply to interest rate and liquidity preference,
All these relationships are really guesses at the _psychology of consumers
and managers_, not relationships inherent in the basic entities and
transactions of economics. It would be good to get these distinct factors
completely separated.

The other place where there is probably a closed loop lurking is related to
the "propensity to consume" and the "marginal propensity to consume."
Keynes proposes that consumption is some constant times income, or in the
case of a nonlinear relationship, the ratio of a change in consumption to a
change in income at some level of these variables. He clearly sees income
as driving consumption.

But there is a second relationship: the relationship between consumption
and employment, which is the producer's half of the loop. Consumption is
the producer's main income aside from investment, so in various ways it
affects the managers' decisions about how much labor to employ. And of
course that determines the aggregate income of the consumer. So at least in
part, consumption drives income as well as income driving consumption.

I don't think Keynes quite saw that he was in a situation parallel to that
of Marshall and his "circular argument" about interest and the maginal
efficiency of capital. You must know the income before you can determine
the level of consumption, and you must know the level of consumption before
you can know the level of income.

In truth, I venture, both the level of income and the level of consumption
are dependent variables, the actual independent variables including the
consumer's needs and wants for the products of the producer, and the
managers' goals and objectives given by the owners of the means of
production -- these reference signals, plus any environmental perturbations
of the system. Those independent variables determine the state of the loop
that passes through consumer and producer. Keynes reached the correct
conclusion in the first case above; I haven't seen yet that he did so in
the second case. I would be surprised if he had done so, because while he
intuitively saw in one case that the state of a closed loop must be
determined from outside it, he doesn't know this explicitly or formally, so
he can't put a consistent argument about it together, or extend the
principle from one case to another.

Of course the greatest problem is the disorganization of his development
and the opacity of his writing. I got a real laugh from the New Yorker
article in which Keynes' clarity of writing is praised. I suspect that the
author is subtly patting himself on the back for having found his way
through the thickets of parentheses and subordinate clauses that constantly
get in the reader's way -- the ordinary stupid reader, of course, not the
reader who is writing this erudite review, who found it all crystal clear.
Sure.

I think it's getting clear that while Keynes took into consideration a lot
of relationships between some variables and some other variables, he never
got a coherent picture of the whole system he was discussing. The
relationships are just too intertwined and loopy to be grasped in the
necessary way by human, or even superhuman, intuition. Also, some of his
variables are clear-cut and relate to observables, such as consumption,
while others are abstract variables like the marginal efficiency of
capital, and other are purely conjectural, such as the marginal propensity
to consume. Part of the confusion is mixing these different kinds of
variables together as if they all had equal reality.

Maybe, in the inner recesses of his consciousness, he did have a complete
model running in his brain that led him at times to valid insights. He
seems to have had an impressive intellect at least with regard to
economics. But nothing can substitute for a working model that operates
independently of its constructor's prejudices, beliefs, and wishes. I see
no sign that he even knew such things could exist.

I hope you guys get hold of Keynes _General theory_ and help me with this
exploration. You can get it for less than 20 bucks from Amazon or B&N. I
find this sort of unguided tour of strange ideas hard, maybe harder that it
might have been thirty years ago (though I'm more patient now, a little).
three brains (or however many we can conscript -- are you in, Linda?) might
do better than one.

Oh, yes, appended is CHMP007,pas with the banking record adjusted to
approximate the terminology suggested by Linda Schult ... can't spell it
without looking it up. You know, the broad who lives with Rick. Linda
actually got me to understand, I think, what Credit and Debit mean, and how
new money is really created. I think we're set up to do this correctly,
now. Not complete yet, but it compiles and runs to initialize almost all
variables and constants in a trial sort of way.

Best,

Bill

···

===========================================================================
program CHMP007; { Consumer, household, manager, and plant }

{
New version using record variables. Initializations only. 2001.01.17 WTP
Bank introduced, Terminology adjusted to approximate accounting
language . 2001.01.26 WTP
}

uses dos, crt, graph, setsvga;

const wbar = 24;
      backgrnd = black;
      lettcolor = white;
      numplants = 1;
      numgoods = 1;
      numhouseholds = 1;
      up = 'H'; {'H' & 'P' purely a coincidence!}
      down = 'P'; { ch2 value for each special key}
      right = 'M'; { when ch1 = #0}
      left = 'K';
      pgUp = 'I';
      pgDn = 'Q';
      Endkey = 'O';
      Home = 'G';

type ctype = record { consumer control system variables, parameters}
              cSr, {Savings reference level}
              cSg, {Savings control gain}
              cSo: {Savings control output}
                   double;
              cAr, {Acquisitions reference level, each good}
              cAg, {Acquisitions control gain, each good}
              cAo: {Acquisitions control output, each good}
                  array[1..numgoods] of double;
             end;

     goodsettype = set of 1..numgoods;

     cgoodtype = record {data applying to each good}
                 Sup{plier}: integer; {number of plant}
                 Acq{uired}: integer; {number of Acquired items on hand}
                 Dep{rec}: double; {fraction per day}
                 Use: integer; {number used per day}
                 Buy: integer; {number bought per day}
                end;

     htype = record {data, each household}
              hG: array[1..numgoods] of cgoodtype;
              hS, {savings/checking, dollars}
              hX, {Expenses, $/day}
              hY: {Income, $/day}
                  double;
              hNp, {Num of people in this household}
              hNw, {Num of income recipients in this household}
              hE: {Employer, plant number}
                  word;
             end;

     mtype = record {manager control system variables, parameters}
              mIr, {Investment fund reference level, $}
              mIg, {Investment fund control gain}
              mIo: {Investment fund control output}
                   double;
              mVr, {Inventory reference level, each good}
              mVg, {Inventory control gain, each good}
              mVo: {Inventory control output}
                   array[1..numgoods] of double;
             end;

     pgoodtype = record {for each kind of good}
                  pV, {Inventory, number of unsold goods}
                  pP, {Price of good, $/good}
                  pDv, {Inventory depreciation, fract/day}
                  pDm, {Machinery depreciation, frac/day}
                  pC: {Productivity, number/day/worker}
                      double;
                  pMw: integer; {number of workstations}
                  pMc: double; {cost per workstation}
                 end;

     ptype = Record {for each plant}
              pGi: goodsettype;
              pG: array[1..numgoods] of pgoodtype;
              pR, {Cash reserves, $}
              pI: {Investment fund, $}
                  double; {cumulative variables}
              pO, {Plant output, goods/day}
              pK, {Capital distributions, $/day}
              pY, {Plant income, $/day}
              pX: {Plant expenses, $/day}
                  double; {rate variables}
              pW, {Wages, $/day/worker}
              pKp: {Capital income percent of wages,$/day/recipient}
                  double; {constant parameters}
             end;

     btype = record {bank}
              pLoanPay: array[1..numplants] of double; {Plant Loans Payable}
              pLoanInt: array[1..numplants] of double; {Plant Loan
interest rate}
              pRes: array[1..numplants] of double; {Plant Check Acct}
              pResInt: array[1..numplants] of double; {Reserve Interest
if any}
              cLoanPay: array[1..numhouseholds] of double;{Consumer loans
Payable}
              cLoanInt: array[1..numhouseholds] of double;{Cons Loan Interest}
              cSav: array[1..numhouseholds] of double; {Cons check Acct}
              cSavInt: array[1..numhouseholds] of double;{Cons Savings Int}
              bLoanRec: array[1..numplants] of double; {Bank Loans Rcvble}
              bR, {Bank business cash reserve;}
              bW, {Bank employee wages}
              bK, {Bank capital distributions}
              bI, {Bank investment fund}
              bY, {bank income}
              bX: double; {Bank expenses}
             end;

var c: array[1..numhouseholds] of ^ctype;
     h: array[1..numhouseholds] of ^htype;
     m: array[1..numplants] of ^mtype;
     p: array[1..numplants] of ^ptype;
     b: ^btype;

     cfile: file of ctype;
     hfile: file of htype;
     mfile: file of mtype;
     pfile: file of ptype;
     bfile: file of btype;

     dt: double;
     i: integer;
     ch: char;
     numstr: string;
     ch1,ch2: char;

{The five types of data records are stored in memory reserved on the heap.
Data records are referenced by arrays of pointers c[i]^.. p[i]^, or as b^.}

procedure reservememory;
var i: integer;
begin
for i := 1 to numhouseholds do
begin
  getmem(h[i], sizeof(htype));
  getmem(c[i], sizeof(ctype));
end;
for i := 1 to numplants do
begin
  getmem(p[i], sizeof(ptype));
  getmem(m[i], sizeof(mtype));
end;
getmem(b,sizeof(btype));
end;

procedure freememory;
var i: integer;
begin
for i := 1 to numhouseholds do
begin
  freemem(h[i], sizeof(htype));
  freemem(c[i], sizeof(ctype));
end;
for i := 1 to numplants do
begin
  freemem(p[i], sizeof(ptype));
  freemem(m[i], sizeof(mtype));
end;
freemem(b,sizeof(btype));
end;

procedure getcmd; {for cases when special keys are used}
begin
ch1 := readkey;
if ch1 = #0 then
   ch2 := readkey
else ch2 := #0;
end;

procedure saveconsumer;
var i: integer;
begin
assign(cfile,'consumer.dat');
rewrite(cfile);
for i := 1 to numhouseholds do
  write(cfile,c[i]^);
close(cfile);
end;

procedure savehousehold;
var i: integer;
begin
assign(hfile,'househld.dat');
rewrite(hfile);
for i := 1 to numhouseholds do
  write(hfile,h[i]^);
close(hfile);
end;

procedure savemanager;
var i: integer;
begin
assign(mfile,'manager.dat');
rewrite(mfile);
for i := 1 to numplants do
  write(mfile,m[i]^);
close(mfile);
end;

procedure saveplant;
var i: integer;
begin
assign(pfile,'plant.dat');
rewrite(pfile);
for i := 1 to numplants do
  write(pfile,p[i]^);
close(pfile);
end;

procedure savebank;
begin
assign(bfile,'bank.dat');
rewrite(bfile);
write(bfile,b^);
close(bfile);
end;

procedure initconsumer;
var i,j: integer;
begin
for i := 1 to numhouseholds do
with c[i]^ do
  begin
   for j := 1 to numgoods do
    begin
     cAr[j] := 1000.0 + 100*random; {Set ref levels for all goods}
     cAg[j] := 0.01 * cAr[j]; {higher ref level also more important}
     cAo[j] := 0.0;
    end;
   cSr := 500.0 + random*1000.0;
   cSg := 0.01;
   cSo := 0.0;
end;
end;

(* cgoodtype = record {data applying to each good}
                 Sup{plier}: integer; {number of plant}
                 Acq{uired}: integer; {number of Acquired items on hand}
                 Dep{rec}: double; {fraction per day}
                 Use: integer; {number used per day}
                 Buy: integer; {number bought per day}
                end; *)

function findplant(n: integer): word; {find a plant that makes nth good}
var i: integer;
begin
repeat
  i := random(word(numplants)) + 1; {Pick a plant at random}
until n in p[i]^.pGi; { find a plant that makes the good}
findplant := i;
end;

(* htype = record {data, each household}
              hG: array[1..numgoods] of cgoodtype;
              hS, {savings/checking, dollars}
              hX, {Expenses, $/day}
              hY: {Income, $/day}
                  double;
              hNp, {Num of people in this household}
              hNw, {Num of income recipients in this household}
              hE: {Employer, plant number}
                  word;
             end; *)

procedure inithousehold;
var i,j,k: integer;
begin
for i := 1 to numhouseholds do
with h[i]^ do
begin
  writeln;
  for j := 1 to numgoods do
  with hG[j] do
   begin
    Sup := findPlant(j);
    write(Sup:2,' ');
    Acq := 100;
    Dep := 0.01;
    Use := random(round(c[i]^.cAr[j] / 10.0));
        {up to 10% of ref amount per day}
   end;
end;
end;

(* mtype = record {manager control system variables, parameters}
              mIr, {Investment fund reference level, $}
              mIg, {Investment fund control gain}
              mIo, {Investment fund control output}
              mVr, {Inventory reference level, one good}
              mVg, {Inventory control gain}
              mVo: {Inventory control output}
                   array[1..numgoods] of double;
             end; *)

procedure initmanager;
var i,j: integer;
begin
for i := 1 to numplants do
with m[i]^ do
begin
  mIr := 10000.0;
  mIg := 1.0;
  for j := 1 to numgoods do
  with p[i]^ do
  if j in pGi then
   mVr[j] := 200 + random(300)
  else mVr[j] := 0;
end;
end;

(* ptype = Record {for each plant}
              pGi: goodsettype;
              pG: array[1..numgoods] of pgoodtype;
              pR, {Cash reserves, $}
              pI: {Investment fund, $}
                  double; {cumulative variables}
              pO, {Plant output, goods/day}
              pK, {Capital distributions, $/day}
              pY, {Plant income, $/day}
              pX: {Plant expenses, $/day}
                  double; {rate variables}
              pKp: {Capital income percent of distributions}
                  double; {constant parameters}
             end; *)

(* pgoodtype = record {for each kind of good}
                  pV, {Inventory, number of unsold goods}
                  pP, {Price of good, $/good}
                  pDv, {Inventory depreciation, fract/day}
                  pDm, {Machinery depreciation, frac/day}
                  pC: {Productivity, number/day/worker}
                      double;
                  pW, {Wages, $/day/worker making this good}
                  pMw: integer; {number of workstations}
                  pMc: double; {cost per workstation}
                 end;*)

procedure initplant;
var i,k: integer;
    j: byte;
begin
for i := 1 to numplants do
with p[i]^ do
  fillchar(p[i]^,sizeof(ptype),0);

for j := 1 to numgoods do
for k := 1 to 1+random(4) do {each good in up to 4 plants}
begin
  i := 1 + random(numplants);
  with p[i]^ do
   pGi := pGi + [j]; { add good j to plant i}
end;

for i := 1 to numplants do
with p[i]^ do
  begin
   for j := 1 to numgoods do
   with pG[j] do
   if j in pGi then
   begin
    pV := 10 + random(100);
    pP := 1.0 + 10.0*random;
    pDv := 0.001 + random*0.02;
    pDm := 0.001 + random*0.02;
    pC := 200.0 + random*200.0;
    pW := 100 + 300*random;
    pMw := 1 + random(10);
    pMc := 1000.0 + 1000.0*random;
   end;
   pR := 1000.0;
   pI := 1000.0;
   pKp := 0.6; { capital income = % distributions}
  end;
end;
(* btype = record {bank}
              pLoanPay: array[1..numplants] of double; {Plant Loans Payable}
              pLoanInt: array[1..numplants] of double; {Plant Loan
interest rate}
              pRes: array[1..numplants] of double; {Plant Check Acct}
              pResInt: array[1..numplants] of double; {Reserve Interest}
              cLoanPay: array[1..numhouseholds] of double;{Cons loans Payable}
              cLoanInt: array[1..numhouseholds] of double;{Cons Loan Interest}
              cSav: array[1..numhouseholds] of double; {Cons check Acct}
              cSavInt: array[1..numhouseholds] of double;{Cons Savings Int}
              bLoanRec: array[1..numplants] of double; {Bank Loans Rcvble}
              bR, {Bank cash reserve;}
              bW, {Bank employee wages}
              bK, {Bank capital distributions}
              bI, {Bank investment fund}
              bY, {bank income}
              bX: double; {Bank expenses}
             end;
*)

procedure initbank;
begin
with b^ do
begin
for i := 1 to numplants do
  begin
   pLoanPay[i] := 0.0;
   bLoanRec[i] := 0.0;
   pLoanInt[i] := 0.05;
   pRes[i] := 0.0;
   pResInt[i] := 0.03;
  end;
for i := 1 to numhouseholds do
begin
  cLoanPay[i] := 0.0;
  cLoanInt[i] := 0.08;
  cSav[i] := 0.0;
  cSavInt[i] := 0.03;
end;
bR := 0.0; {plants and households initialize first}
for i := 1 to numplants do
bR := bR + pRes[i];
for i := 1 to numhouseholds do
bR := bR + cSav[i];
end;
end;

procedure restoreconsumer;
var i,j: integer;
begin
assign(cfile,'consumer.dat');
{$i-}
i := 0;
reset(cfile);
{$i+}
if IOresult = 0 then
begin
  while (not eof(cfile)) and (i < numhouseholds) do
   begin
    read(cfile,c[i+1]^);
    inc(i)
   end;
  close(cfile);
end;
while i < numhouseholds do {clear any unfilled arrays}
  begin
   fillchar(c[i+1]^,sizeof(ctype),0);
   inc(i);
  end;
end;

procedure restorehousehold;
var i,j: integer;
begin
assign(hfile,'househld.dat');
{$i-}
i := 0;
reset(hfile);
{$i+}
if IOresult <> 0 then inithousehold
else
begin
  while (not eof(hfile)) and (i < numhouseholds) do
   begin
    {$i-}
    read(hfile,h[i+1]^);
    {$i+}
    inc(i);
    if IOResult <> 0 then halt; {Format has changed}
   end;
  close(hfile);
  while i < numhouseholds do
  begin
   fillchar(h[i+1]^,sizeof(htype),0);
   inc(i);
  end;
end;
end;

procedure restoremanager;
var i,j: integer;
begin
assign(mfile,'manager.dat');
{$i-}
i := 0;
reset(mfile);
{$i+}
if IOresult <> 0 then initmanager
else
begin
  while (not eof(mfile)) and (i < numplants) do
   begin
    read(mfile,m[i+1]^);
    inc(i)
   end;
  close(mfile);
  while i < numplants do
  begin
   fillchar(m[i+1]^,sizeof(mtype),0);
   inc(i);
  end;
end;
end;

procedure restoreplant;
var i,j: integer;
begin
assign(pfile,'plant.dat');
{$i-}
i := 0;
reset(pfile);
{$i+}
if IOresult <> 0 then initplant
else
begin
  while (not eof(pfile)) and (i < numplants) do
   begin
    read(pfile,p[i+1]^);
    inc(i)
   end;
  close(pfile);
  while i < numplants do {if more plants added, zero them out}
  begin
   fillchar(p[i+1]^,sizeof(ptype),0);
   inc(i);
  end;
end;
end;

procedure restorebank;
begin
assign(bfile,'bank.dat');
{$i-}
reset(bfile);
{$i+}
if IOresult <> 0 then initbank
else
  begin
   if (not eof(bfile)) then
    read(bfile,b^);
   close(bfile);
  end;
end;

procedure initprogram;
begin
end;

begin
clrscr;
{ initsvga(3);}
reservememory;
randomize;
initprogram;
initplant; {must be done first}
initconsumer;
inithousehold;
initmanager;
initbank;
writeln;
writeln('All initialized');
writeln('One Row/household. Horiz entries = plant #, in order of good #');
{program runs here}
saveconsumer;
savehousehold;
savemanager;
saveplant;
savebank;
freememory;
closegraph;
end.

Hi all (now including Linda) --

I am forwarding this to my broad's e-mail address (lwesterschulte@cs.com). Linda
(who, for reasons I'll leave to your sordid imaginations, I prefer to call my
"Christian flesh" rather than my "broad") said she'd be happy to try to follow
this discussion and I hope she will chime in occasionally (though she is very busy
working on her own fiction so economic fictions may not rank high among her
concerns at the moment).

I am ordering Keynes from the library. I'd buy it but it sounds to me like it's
not worth it. From what I'm hearing I think TCP (that's Bill's dad, darling) had
the big picture basically correct (the closed loop relationship between production
and consumption) and that I already captured a lot of that big picture in my own
H. economicus modeling. But I think your modeling effort will be very important,
especially if it captures the main thing missing from my (and TCP's) model; a
mechanism that explains how money is created. It would also be nice if the model
can explain how and why economies grow (population growth is surely one reason
but, as you know, an actual growth mechanism is not built into TCP's closed loop
model).

Best regards

Rick

Bill Powers wrote:

Gang --

I'm on the verge of finding two closed-loop relationships in Keynes'
conceptions of the economy. The problem is that I'm having trouble
re-finding them (I'm still looking even as I write). One of them has to do
with interest rates and investment on the one hand, and the the other has
to do with the propensity to consume and employment, I think. The problem
is that I often see things in these writings only after digesting them for
a while, when the significance of some statement has sunk in enough, so
that by the time enlightenment occurs I no longer remember exactly where
the passages in question occurred. So then it's a slow process of leafing
through the book to find them again.

Keynes speakes of liquidity-preferences, which seems to mean a preference
for holding savings in cash rather than parting with them for a while in
hope of a greater future return (which seems to be just another way to
speak of investment). This is a tacit acknowledgement that it is possible
for savings to exist in two forms: as investments, and as cash. This seems
to contradict his earlier insistence that savings = investment,
unconditionally. We now see that there can be savings which are not
invested -- which, in Keynes' terminology, are "hoarded." (p. 174)

Here is one excerpt, from p. 181-2:

"Thus the functions used by the classical theory, namely, the response of
investment and the amount saved out of a given income to change in the rate
of interest, do not furnish material for a theory of the rate of interest;
but they could be used to tell what the level of income will be, given
(from some other source) the rate of interest; and, alternatively, what the
rate of interest will have to be, if the level of income is to be
maintained at a given level (e.g., the level corresponding to full
employment)."

Ah, I found one of the lost parts. On p. 183:

"Thus the traditional analysis is faulty because it has failed to isolate
correctly the independent variables of the system. Savings and investment
are the determinates [that which is determined, or the dependent variables
-- wtp] of the system, not the determinants. They are the twin results of
the system's determinants, namely, the propensity to consume, the schedule
of the marginal efficiency of capital, and the rate of interest."

This is highly suggestive of the closed-loop analysis of a feedback system.
In a feedback system, the apparent cause-effect relationships involve an
input that affects an output by one route, while the output affects the
input by a different route. An analyst can mistakenly consider either the
outputs or the inputs as independent variables, with the remaining one
being the dependent variable. But in fact the independent variables lie
outside the loop; they are the disturbances and the reference signal, while
BOTH the input and the output variables are _dependent_ variables.

Later on (p. 184) we find this:

"Nor are those theories more successful which attempt to make the rate of
interest depend on "the marginal efficiency of capital". It is true that at
equilibrium the rate of interest will be equal to the maginal efficiency of
capital, since it will be profitable to increase (or decrease) the current
scale of investment until the point of equality has been reached. But to
make this into a theory of the rate of interest or to derive the rate of
interest from it involves a circular argument, as Marshall discovered after
he had got half-way into giving an account of the rate of interest along
these lines. For the "marginal efficiency of capital" partly depends on the
scale of current investment, and we must already know the rate of interest
before we can calculate what this scale must be."

That, of course, is precisely the dilemma that any closed loop presents to
a linear analysis. How can you calculate the output without first knowing
the input, and how can you calculate the input without first knowing the
fed-back effects of the output? The so-called "circular argument," which in
conventional thinking is taken as a sign that something has gone wrong, is
precisely the sign that closed-loop analysis must be used: simultaneous
equations either algebraic or differential.

I haven't understood the "marginal efficiency of capital" yet, or the
arguments relating money supply to interest rate and liquidity preference,
All these relationships are really guesses at the _psychology of consumers
and managers_, not relationships inherent in the basic entities and
transactions of economics. It would be good to get these distinct factors
completely separated.

The other place where there is probably a closed loop lurking is related to
the "propensity to consume" and the "marginal propensity to consume."
Keynes proposes that consumption is some constant times income, or in the
case of a nonlinear relationship, the ratio of a change in consumption to a
change in income at some level of these variables. He clearly sees income
as driving consumption.

But there is a second relationship: the relationship between consumption
and employment, which is the producer's half of the loop. Consumption is
the producer's main income aside from investment, so in various ways it
affects the managers' decisions about how much labor to employ. And of
course that determines the aggregate income of the consumer. So at least in
part, consumption drives income as well as income driving consumption.

I don't think Keynes quite saw that he was in a situation parallel to that
of Marshall and his "circular argument" about interest and the maginal
efficiency of capital. You must know the income before you can determine
the level of consumption, and you must know the level of consumption before
you can know the level of income.

In truth, I venture, both the level of income and the level of consumption
are dependent variables, the actual independent variables including the
consumer's needs and wants for the products of the producer, and the
managers' goals and objectives given by the owners of the means of
production -- these reference signals, plus any environmental perturbations
of the system. Those independent variables determine the state of the loop
that passes through consumer and producer. Keynes reached the correct
conclusion in the first case above; I haven't seen yet that he did so in
the second case. I would be surprised if he had done so, because while he
intuitively saw in one case that the state of a closed loop must be
determined from outside it, he doesn't know this explicitly or formally, so
he can't put a consistent argument about it together, or extend the
principle from one case to another.

Of course the greatest problem is the disorganization of his development
and the opacity of his writing. I got a real laugh from the New Yorker
article in which Keynes' clarity of writing is praised. I suspect that the
author is subtly patting himself on the back for having found his way
through the thickets of parentheses and subordinate clauses that constantly
get in the reader's way -- the ordinary stupid reader, of course, not the
reader who is writing this erudite review, who found it all crystal clear.
Sure.

I think it's getting clear that while Keynes took into consideration a lot
of relationships between some variables and some other variables, he never
got a coherent picture of the whole system he was discussing. The
relationships are just too intertwined and loopy to be grasped in the
necessary way by human, or even superhuman, intuition. Also, some of his
variables are clear-cut and relate to observables, such as consumption,
while others are abstract variables like the marginal efficiency of
capital, and other are purely conjectural, such as the marginal propensity
to consume. Part of the confusion is mixing these different kinds of
variables together as if they all had equal reality.

Maybe, in the inner recesses of his consciousness, he did have a complete
model running in his brain that led him at times to valid insights. He
seems to have had an impressive intellect at least with regard to
economics. But nothing can substitute for a working model that operates
independently of its constructor's prejudices, beliefs, and wishes. I see
no sign that he even knew such things could exist.

I hope you guys get hold of Keynes _General theory_ and help me with this
exploration. You can get it for less than 20 bucks from Amazon or B&N. I
find this sort of unguided tour of strange ideas hard, maybe harder that it
might have been thirty years ago (though I'm more patient now, a little).
three brains (or however many we can conscript -- are you in, Linda?) might
do better than one.

Oh, yes, appended is CHMP007,pas with the banking record adjusted to
approximate the terminology suggested by Linda Schult ... can't spell it
without looking it up. You know, the broad who lives with Rick. Linda
actually got me to understand, I think, what Credit and Debit mean, and how
new money is really created. I think we're set up to do this correctly,
now. Not complete yet, but it compiles and runs to initialize almost all
variables and constants in a trial sort of way.

Best,

Bill

< I've deleted the program for Linda's sake>