As the year begins it’s a time to think about the future. What return could one expect from an investment this year? An answer lays in what risks the asset is exposed to and what is natural (equilibrium) return on investment in economy. While risks can vary significantly over short periods, these short term risks are more of a technical nature, e.g. great financial crisis of 2008. Key long term drivers of natural return is technological innovation and population composition. Consider working age populations in India and Japan (figure below). Vertical white line indicates year 2015, thus everything to the right of the line is future projections. Dynamics of working populations in these two countries can hardly be any more different. While both countries started at around the same fraction of working populations in 1950, they quickly diverged. By 2060 only half of Japanese population is expected to be of working age, while India is expected to reach 65%. It is interesting to see that United States population dynamics looks as if Japanese data was lagged by about 15 years (note peaks and troughs).

What are implications of working population dynamics to the natural return? There could be several equally convincing explanations: more working-> higher growth, less working (e.g. more elderly) -> more consumption, more growth, more working-> more innovation->more growth.

This looks more like an empirical matter. At least 80% of empirical work is preparing data, and this time was no exception. You can download data here. The data set contains fractions of working population (working), short term rate (ST_interest) and local equity earnings yield (earnings over price) for 39 countries/regions. Lets load data.

1 2 |
# load data load("aging_data_web.Rdata") |

Consider fixed effects panel data model for \(N\) observations and \(T\) time periods:

\(y_{it} = X_{it}\mathbf{\beta}+\alpha_{i}+u_{it}\)

for \(t=1,..,T\) and \(i=1,…,N\) where \(y_{it}\) is the dependent variable observed for country \(i\) at time \(t\), \(X_{it}\) is the time-variant \(1\times k\) regressor matrix, \(\alpha_{i}\) is the unobserved time-invariant individual effect (intercept) and \(u_{it}\) is the error term.

Lets estimate effect of working population on log earnings yield (EP) using all available country data. It is useful to correct for time effects, thus we include year variable (yr) in the model.

1 2 3 |
library(plm) # panel data fixed_EP <- plm(log(EP) ~ working+yr, data=data, index=c("Location"), model="within") coeftest(fixed_EP, vcovHC(fixed_EP, method = "arellano")) |

The last line gives output for coefficient significance tests controlled for heteroscedasticity and autocorrelation.

1 2 3 4 5 6 7 |
t test of coefficients: Estimate Std. Error t value Pr(>|t|) working -0.0509624 0.0170459 -2.9897 0.0028662 ** yr -0.0076529 0.0021078 -3.6307 0.0002982 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 |

It seems over time earnings yield has been decreasing and increases in working population has negative effect on earning yield. How large is the effect? Since we are modelling log earnings yield, transformation is needed.

1 2 |
exp(fixed_EP$coefficients[2])-1 exp(fixed_EP$coefficients[1])-1 |

Earnings yield decreases annually by 0.7% from the current level. I.e. if current earnings yield is 10% then next year due to time will be 9.93% . Similarly 1% increase in working population would lead to decrease of earnings yield by 4.9%, this is approximately drop of 0.49% if current earnings yield is 10%.

Similarly we could estimate the model for short term rates:

1 2 3 |
# Modelling Short term rates fixed_ST <- plm(log(ST_interest) ~ working+yr, data=data, index=c("Location"), model="within") coeftest(fixed_ST, vcov.=vcovHC(fixed_ST,method = "arellano")) |

1 2 3 4 5 6 7 |
t test of coefficients: Estimate Std. Error t value Pr(>|t|) working 0.1867083 0.0516120 3.6175 0.0003147 *** yr -0.0857416 0.0059476 -14.4163 < 2.2e-16 *** --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 |

The effects of time is negative, while increase in working population is related to higher short term rate.

1 2 |
exp(fixed_ST$coefficients[2])-1 exp(fixed_ST$coefficients[1])-1 |

Short term rate decreases annually by 8% from the current level. I.e. if current interest rate is 1% then next year due to time will be 0.92% . This is approximately 0.21% increase if current rate is 1%.

For the last part, we show what could we expect of policy rate and earnings yield in, say, United States for the next 45 years. Because dataset includes projections for the working population till 2060 we can fit the model and make forecasts (R code at the end).

As pointed out above, from the working population perspective U.S. looks like Japan lagged 15 years. Due to expected shrinkage of working population in U.S. it seems short term rates are unlikely to go to higher levels in the foreseeable future. Due to population fundamentals Fed does not have that much space to maneuver using conventional policy. On the bright side, earnings yield is unlikely to go down much further.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# Forecasting EP --------------------------------------------------- fixefs <- merge(data, data.frame(Location = names(fixef(fixed_EP)),fixef = as.numeric(fixef(fixed_EP))), all.x = TRUE, by = c("Location")) fixefs<-fixefs[,ncol(fixefs)] data$fitted_forecast_EP <- exp(fixefs + fixed_EP$coefficients[1] * data$working + fixed_EP$coefficients[2]*data$yr) plot_data<-data[which(data$Location=="United States"),c("yr","Location","fitted_forecast_EP","EP")] last_available<-max(plot_data$yr[which(!is.na(plot_data$EP))]) plot_data$fitted_forecast_EP[which(plot_data$yr<=last_available)]<-NA plot(plot_data$yr,plot_data$EP,ty="l",xlab = "",ylab="EP",lwd=3) lines(plot_data$yr,plot_data$fitted_forecast_EP,col=2,lwd=2) title(unique(plot_data$Location)) # Forecasting Short term rates ------------------------------------- fixefs <- merge(data, data.frame(Location = names(fixef(fixed_ST)),fixef = as.numeric(fixef(fixed_ST))), all.x = TRUE, by = c("Location")) fixefs<-fixefs[,ncol(fixefs)] data$fitted_forecast_ST <- exp(fixefs + fixed_ST$coefficients[1] * data$working + fixed_ST$coefficients[2]*data$yr) plot_data<-data[which(data$Location=="United States"),c("yr","Location","fitted_forecast_ST","ST_interest")] last_available<-max(plot_data$yr[which(!is.na(plot_data$ST_interest))]) plot_data$fitted_forecast_ST[which(plot_data$yr<=last_available)]<-NA plot(plot_data$yr,plot_data$ST_interest,ty="l",xlab = "",ylab="ST Interest",lwd=3) lines(plot_data$yr,plot_data$fitted_forecast_ST,col=2,lwd=3) title(unique(plot_data$Location)) |