“Franco Modigliani and the Life Cycle Theory of Consumption” by Angus Deaton.
1. Briefly, what is Modigliani’s life-cycle theory of consumption? For an individual, draw someone’s consumption schedule over their life. Now draw their wealth over their life. At which periods are they saving and dissaving?
People make rational choices on spending based on their age, working to provide for their retirement. Young people have high rates of saving, accumulating wealth, which will peak before retirement as which point they increase their consumption.
2. What effects do population growth and economic growth have on savings rates?
Population growth means there are more young people than old people and therefore more people saving than spending. if incomes are growing then the scale of these savings will increase, while the scale of dissaving will remain the same. Modigliani bases national savings on the rate of growth of income, rather than the level of the income.
3. In the Modigliani model, do consumers consume from current income?
They base their consumption on their needs for their current age, irrespective of whatever their income level is for that age.
4. What is the impact in the model of an increase in transitory income?
If people do not expect a permanent change in income then their marginal propensity to consume is unlikely to change. Indeed people with uncertain future earnings avoid borrowing.
5. What are the implications of the theory for savings rates over the economic cycle?
Savings rate will increase when the incomes are rising, during upturns in the economy.
#Open the data
abs <- read_csv("ABSdata.csv")
#log the data
abs <- abs %>%
mutate(lnconsumption = log(consumption),
lnGDP = log(GDP))
#lag the data
abs <- abs %>%
mutate(lagconsumption = lag(lnconsumption),
lagGDP = lag(lnGDP))
#difference the data
abs <- abs %>%
mutate(lnconsumption.diff = c(NA, diff(lnconsumption)),
lnGDP.diff = c(NA, diff(lnGDP)))
abs <- abs %>%
mutate(lagconsumption.diff = c(NA, diff(lagconsumption)),
lagGDP.diff = c(NA, diff(lagGDP)))
#Plot consumption and GDP on the same plot.
abs %>% ggplot (aes(y=GDP, x=consumption))+
geom_point()+
theme(axis.text.x = element_blank(),panel.grid.major = element_blank(),
panel.background = element_rect(fill = 'aliceblue', colour = 'black'),
axis.line = element_line(colour = "black"))
They are non-starionary variables, both have increased over time, although there is a linear combination of the variables.
mod1 <- lm(lnconsumption ~ lagconsumption, data = abs,na.action="na.exclude")
# Take a look at the parameter estimates
summary(mod1)
##
## Call:
## lm(formula = lnconsumption ~ lagconsumption, data = abs, na.action = "na.exclude")
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0298837 -0.0115955 -0.0000182 0.0116133 0.0262341
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.129859 0.048578 2.673 0.01 *
## lagconsumption 0.992566 0.003806 260.816 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.0151 on 52 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.9992, Adjusted R-squared: 0.9992
## F-statistic: 6.803e+04 on 1 and 52 DF, p-value: < 2.2e-16
mod2 <- lm(lnconsumption ~ lagGDP, data = abs, na.action = "na.exclude")
#Take a look at the parameter estimates
summary(mod2)
##
## Call:
## lm(formula = lnconsumption ~ lagGDP, data = abs, na.action = "na.exclude")
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.041780 -0.012940 0.000318 0.011284 0.042943
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.793746 0.069018 -11.5 6.69e-16 ***
## lagGDP 1.015045 0.005154 196.9 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01999 on 52 degrees of freedom
## (1 observation deleted due to missingness)
## Multiple R-squared: 0.9987, Adjusted R-squared: 0.9986
## F-statistic: 3.879e+04 on 1 and 52 DF, p-value: < 2.2e-16
#Create a new column of lagged residuals from the model.
abs$mod_residuals <- resid(mod2)
abs <- abs %>% mutate(lagmod_residuals = lag(mod_residuals))
#plot them over time
abs %>% ggplot (aes(y=lagmod_residuals, x=Date))+
geom_point()+
theme(axis.text.x = element_blank(),panel.grid.major = element_blank(),
panel.background = element_rect(fill = 'aliceblue', colour = 'black'),
axis.line = element_line(colour = "black"))
Residuals appear to be sporadic.
mod3 <- lm(lnconsumption.diff ~ lagconsumption.diff + lnGDP.diff, data = abs, na.action="na.exclude")
#Take a look at the parameter estimes
summary(mod3)
##
## Call:
## lm(formula = lnconsumption.diff ~ lagconsumption.diff + lnGDP.diff,
## data = abs, na.action = "na.exclude")
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.029288 -0.007819 0.002662 0.009747 0.023384
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.010864 0.005625 1.931 0.0591 .
## lagconsumption.diff 0.238045 0.115436 2.062 0.0444 *
## lnGDP.diff 0.463235 0.102777 4.507 3.98e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01293 on 50 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.334, Adjusted R-squared: 0.3074
## F-statistic: 12.54 on 2 and 50 DF, p-value: 3.863e-05
\(lnconsumption.diff = 0.010864 + 0.238045lagconsumption.diff + 0.463235lnGDP.diff + \epsilon\)
mod4 <- lm(lnconsumption.diff ~ lagconsumption.diff + lnGDP.diff + lagmod_residuals, data = abs, na.action="na.exclude")
#Take a look at the parameter estimes
summary(mod4)
##
## Call:
## lm(formula = lnconsumption.diff ~ lagconsumption.diff + lnGDP.diff +
## lagmod_residuals, data = abs, na.action = "na.exclude")
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.0255628 -0.0086517 0.0000488 0.0077341 0.0248744
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.008353 0.005333 1.566 0.12372
## lagconsumption.diff 0.293209 0.109667 2.674 0.01017 *
## lnGDP.diff 0.479068 0.096276 4.976 8.4e-06 ***
## lagmod_residuals -0.244017 0.085374 -2.858 0.00624 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.01209 on 49 degrees of freedom
## (2 observations deleted due to missingness)
## Multiple R-squared: 0.4292, Adjusted R-squared: 0.3942
## F-statistic: 12.28 on 3 and 49 DF, p-value: 4.124e-06
\(lnconsumption.diff = 0.008353 + 0.293209lagconsumption.diff + 0.479068lnGDP.diff - 0.244017lagmod residuals + \epsilon\)
\(\frac{lagconsumption.diff}{lnGDP.diff}\) \(\frac{0.293209}{0.479068} = 0.61204046189\)
\(61.2\%\)