There is broad consensus that “Middle Class” incomes have stagnated since the 1970’s. Median household income is perhaps the most common way of measuring middle class incomes; however, middle class incomes can also be captured by the average income of the bottom 90%. [Jason Furman’s recent article for Vox EU][http://www.voxeu.org/article/brief-history-middle-class-economics] summarizes trends in this measure for several advanced countries. However, the conclusion - that middle class incomes have plateaued in the period after 1973 - relies crucially on the income definition used. Furman’s main chart uses data from the World Top Incomes database:
The US time series is based on data from IRS tax returns, which uses a pre-tax, pre-transfer, tax unit definition of income. However, it is not ture that this income definition corresponds with a Haig-Simons definition of income - it leaves out the value of in-kind and cash transfers, the effect of taxes and tax credits, and the fungible value of health insurance, all of which contribute to a household’s ability to consume (which is what we actually care about). Using microdata from the Current Population Survey, we will be able to see how inference about the trend in middle class incomes is crucially dependent on the definition of income, and that a broader definition of income implies no stagnation in middle class incomes.
First, we consider the trends in pre-tax, pre-transfer broad income from 1992-2012, using the CPS data. This data is used in the first chapter of my dissertation, so I had it lying around. The pre-tax (or “market”) income variable includes all money income (wages, investment, pensions, etc.), as well as the fungible value of employer-provided health insurance for each household. I then deflate these nominal amounts by the CPI-U price index, and adjust for household size using a square root equivalence scale. The trend in this pre-tax income variable is very simalr to the Furman graph over the same period. Middle class incomes grew during the 1990’s, but stagnated in the 2000’s, and decreased during the Great Recession.
library(data.table)
library(dplyr)
library(ggplot2)
library(reldist)
#load data, and merge with annual CPI
load("/media/john/Shared Linux_Windows Files1/MSA Level Inequality/Data/CPS_broadinc_ind_state.rda")
CPI <- read.csv("/media/john/Shared Linux_Windows Files1/MSA Level Inequality/Data/CPI.csv")
CPS.work <- merge(CPS.work, CPI, by="year")
#Adjust incomes for inflation
CPS.work$equivinc_pretax_broad <- CPS.work$equivinc_pretax_broad*max(CPI$CPI)/CPS.work$CPI
CPS.work$equivinc_posttax_broad <- CPS.work$equivinc_posttax_broad*max(CPI$CPI)/CPS.work$CPI
#Generate 90th percentile cutoffs in each year (makes more sense to me in data.table syntax)
CPS.work <- data.table(CPS.work)
CPS.work[,"p90_pretax":=quantile(equivinc_pretax_broad, 0.9), by=c("year")]
CPS.work[,"p90_posttax":=quantile(equivinc_posttax_broad, 0.9), by=c("year")]
CPS.work <- data.frame(CPS.work)
#plot average pre-tax income
CPS.work %>% filter(., equivinc_pretax_broad<=p90_pretax) %>% group_by(.,year) %>%
summarise(., "mean_bottom_90"=weighted.mean(equivinc_pretax_broad, hwtsupp)) %>%
ggplot(., aes(x=year, y= mean_bottom_90))+geom_line()+geom_point()+geom_smooth(method="lm")+
xlab("year")+ylab("Average Pre-tax Income of Bottom 90%")+labs(title="Average Market Income of the Bottom 90%, 1992-2012")
On the other hand, using a broader definition of income produces a very different result. I use a broad income definition similar to that used in [Armour, Burkhauser and Larrimore (2014)][http://www.nber.org/papers/w19110]. This income variable includes market income as above, plus all cash transfers, the money value of all in-kind transfers (SNAP, housing assistance, school lunches, etc) and the fungible value of publicly provided insurance (e.g. Medicare), after all taxes and tax credits. Using this income definition, trends are very different: middle class incomes increase through the 2000’s, with a decrease around the Great Recession.
CPS.work %>% filter(., equivinc_posttax_broad<=p90_posttax) %>% group_by(.,year) %>%
summarise(., "mean_bottom_90"=weighted.mean(equivinc_posttax_broad, hwtsupp)) %>%
ggplot(., aes(x=year, y= mean_bottom_90))+geom_line()+geom_point()+geom_smooth(method="lm")+
xlab("year")+ylab("Average Post-tax Income of Bottom 90%")+labs(title="Average Broad Income of the Bottom 90%, 1992-2012")