State Space Models

All state space models are written and estimated in the R programming language. The models are available here with instructions and R procedures for manipulating the models here here.

Thursday, June 18, 2026

Unstable Feedback Loops

 


Everyone has probably heard intended or unintended audio feedback effects at a Rock Concert or a public event with a PA System.  What is probably not well understood is that unstable feedback loops can be found in any system (see examples below) under certain conditions. 

Ii have been studying social systems and feedback loops since the 1980's. Some AI summaries, first from ChatGPT and then from Google AI are presented below.

Contrary to the AI conclusions, for example that the Great Depression was a result of unstable feedback loops, the US_E20 Model does not have unstable secondary feedback loops, neither does the DEL19D Model for 19th Century Germany, contrary to my initial hypotheses.

Notes

Pasdirtz, G.W. Instability and Late Nineteenth Century German Development. The DEL19D Model does not have unstable feedback loops but does have an unstable growth component and is an example of the Moving Equilibrium model.


ChatGPT

What are the effects if unstable feedback loops in systems?

Unstable feedback loops occur when a system's responses amplify disturbances rather than dampening them. Instead of returning to equilibrium after a shock, the system moves farther away from it.

General Effects of Unstable Feedback Loops

  1. Exponential Growth or Decline
    • Small changes become large changes.
    • The system may experience runaway growth or collapse.
    • Example: A bank run, where withdrawals trigger more withdrawals.
  2. Increased Volatility
    • Fluctuations become larger over time.
    • The system becomes difficult to predict or control.
    • Example: Financial bubbles and crashes.
  3. Loss of Equilibrium
    • Stable operating points disappear.
    • The system may shift to a completely different state.
    • Example: An ecosystem losing a key species and reorganizing into a new ecological regime.
  4. Overshoot and Collapse
    • Growth exceeds sustainable limits, followed by rapid decline.
    • Example: Population growth that exhausts resources.
  5. Tipping Points
    • A critical threshold is crossed, after which change becomes self-reinforcing.
    • Returning to the previous state may become difficult or impossible.
    • Example: Climate systems reaching irreversible ice-sheet loss.
  6. System Failure
    • Components become overloaded and break down.
    • Example: Electrical grids experiencing cascading blackouts.

Examples Across Different Systems

SystemUnstable Feedback LoopPossible Outcome
EconomyRising asset prices attract more buyersBubble and crash
ClimateWarming melts ice, reducing reflectivityAccelerated warming
PoliticsPolarization creates more polarizationInstitutional breakdown
EcologySpecies loss reduces ecosystem resilienceEcosystem collapse
TechnologySocial media engagement rewards outrageInformation instability
MilitaryArms race encourages further armamentEscalating conflict

Why Some Systems Survive

Many real-world systems contain negative feedback loops that counteract instability:

  • Central banks raising interest rates during inflation.
  • Predator populations limiting prey populations.
  • Thermostats regulating temperature.
  • Democratic institutions constraining political power.

When these stabilizing mechanisms are weaker than the reinforcing feedbacks, instability grows.

A Systems Theory Perspective

From the perspective of the academic field of Systems Theory, the most dangerous systems are not those with feedback loops alone—every system has feedback loops—but those where:

  1. Positive feedback dominates negative feedback.
  2. Delays prevent corrective action.
  3. Actors do not perceive the consequences until thresholds are crossed.

Many major historical crises—from the Great Depression to financial crashes and ecological collapses—can be understood as situations where self-reinforcing feedbacks overwhelmed stabilizing forces.

A useful rule is:

Stable systems absorb shocks; unstable systems amplify them.


Google AI




Saturday, June 13, 2026

The Neoclassical Growth Model

 


Harvey Leibenstien's Malthusian Model

 



Notes

You can run the basic Leibenstein model (here).

The Many Malthusian Models

 

You might conclude from casual reading or if your research stopped in 1798 when Thomas Robert Malthus published an Essay on the Principle of Population, that there is only one Malthusian Model, the one picture above as a Directed Graph. In the original model, Population (N) increases geometrically and Agricultural Production (QA) increases linearly. Eventually a Malthusian Crisis is created when S=(N > QA). The crisis is inevitable.

You might also conclude from casual empiricism that the model is wrong because technological change in Agriculture has made sure that growth in QA is not linear. So why should we bother with the Malthusian model and why does anyone even continue talking about it: (1) The model is easy to teach and supposedly easy to disprove. (2) The Neoclassical Economic Growth model (the Solow-Swan model) assumes that population growth is simply exogenous, along with technological change, and really offers no demographic theory. (3) Unified Growth Theory puts the Malthusian and Neoclassical models together in one frame work. (4) Malthusian Theory has never convincingly been tested statistically. (5) The data to test Malthusian Theory only exists from 0 AD forward (see the work of Angus Maddison). And, (6) the two single equation theory (one for population and one for production) is better formulated as a systems model.


The systems theory version of the Malthusian model was first formulated by Kenneth Boulding in 1955. I'm going to take Boulding's work one step further and develop the Malthusian Model as a State-Space system (see the R-code below that can be run on line using https://rdrr.io/snippets/ using the program dse. When the model is run in the R programming language, the graph above is produced. In the right frame, you can see that QA increases linearly and N increases geometrically (exponentially) as called for by the original Malthusian model. 

The shock decomposition diagram in the left frame shows that (1) a positive shock to population (N, the first row) increase QA which peaks after six years and then begins declining and (2) a positive shock to agricultural production (QA, second row) increases population which also peaks after about six years. All the data are standardize, dimensionless and purely theoretical.

There is a lot of experimenting you (and I) can (and should) do with this model to convince yourself of its generality. You can experiment by changing values in the System Matrix (F).   Here are some experiments to try:
  1. Set f[1,1] = f[2,2] =1 and set f[1,2] = f[2,1]=0 to create a Random Walk hypothesized to be the original Malthusian Trap by Unified Growth Theory.
  2. Try reading Malthus' original statement (few people do here). Can you find any feedback and feedforward effects?
  3. Add some feedback effects to the original model f[1,2] <- -.5 ; f[2,1] <- .5. We expect Population to increase with decrease (maybe) with increases in QA (f[1,2] is a feedback effect) and we expect Population to increase QA as more people are farming (a feedforward effect).




Code

Models have a compact R-code in dse and can be run easily https://rdrr.io/snippets/. Cut-and-paste the following code into the Snippets editor window. When you run it, it should produce the shock decomposition diagram and the forecast in the graphic above.

#
#    MALTHUS
#
require(dse)
require(matlab)
f <- matrix( c(   1.070143e+00, 0, 0.09478143,
               0,  1.00000000, 0.09238426,
                      0.000000000, 0.00000000,  1.000000000
),byrow=TRUE,nrow=3,ncol=3)
h <- eye(2,3)
k <- f[1:3,1:2,drop=FALSE]
TRM <- SS(F=f,H=h,K=k,
z0=c(0.09478143, 0.09238426, 1.00000000),
              output.names=c("N","QA"))
stability(TRM)
TRM <- SS(F=f,H=h,K=k,
z0=c(0.09479164, 1, 1.00000000),
              output.names=c("N","QA"))
TRM
TRM.data <- simulate(TRM,sampleT=20,
,start=1,freq=1,noise=matrix(0,20,2))
TRM.model <- l(TRM,TRM.data)
#tfplot(TRM.model)
shockDecomposition(toSSChol(TRM))
tfplot(forecast(TRM.model,horizon=20))