Calculating personal income quintiles in ACS 2018

I am hoping to calculate personal income quintiles using the ACS 2018. This seems like a simple task, however, I am unable to match other data sources’ reports of personal incomes. While my sample is slightly more specific than those of these data sources, my numbers just seem too low.

I am filtering for the following: 1) age between 20 - 49, inclusive, 2) family size < 8, and 3) not married in the year 2017 (so single, or got married after 2017). I also drop some observations that would probably have incorrect data/would wrongly skew my results, such as dropping those with negative family income and personal income. I use pernum == 1 based on my readings of some other threads. Dropping pernum == 1 does not improve my results. I am interested in personal income (earned and unearned income), so I use variable INCTOT to calculate quintiles.

Here is my code using R:

acs_raw = read.dta13("[path to dta file]")

acs18 = acs_raw %>% filter(year == 2018)

acs18 = acs18 %>% group_by(serial) %>% mutate(famsize = n()) %>% ungroup()


acs18 = acs18 %>% filter(pernum ==1,
                      age %in% c(20:49) &
                      ftotinc >= 0 &
                      ftotinc != 9999999 &
                      inctot >= 0 &
                      inctot  != 9999999 &
                      famsize < 8 &
                      (yrmarr == 0 | yrmarr > 2017) # single in 2017
                      )

wtd.quantile(acs18$inctot,
             weights = acs18$perwt, probs = c(0.2, 0.4,0.6, 0.8))
 

The above code produces the quinties:
12.3k (20%), 26k (40%), 40k (60%), 62k (80%).

These seem too low. Can anyone help? Thank you!

While I wasn’t able to find any external benchmarks for your filtering criteria, your estimates seem consistent overall with this summary ACS table which shows that median earnings of the population 16 years and over with earnings in 2018 was $35,291 (±49). While your estimate using INCTOT includes other sources of income besides earned income, your findings are not unreasonable based on the published data. You might try replicating these published estimates to check your method and then apply your filters.

We recommend using the filter PERNUM = 1 for household-level analyses (e.g., to estimate household income quintiles) since this restricts the data to only a single observation from each household. As a result, each household is only counted once. Since you’re running a person-level analysis, you should not include this filter. Be aware that the famsize value that you calculate counts the number of people in each household. Since a household refers to a sampled housing unit, a single household can contain one or multiple unrelated persons. See IPUMS created family variables FAMUNIT and FAMSIZE for information about families.