The Systems Approach: Disparities in Socio-Economic Mobility Across Race

July 14, 2020  •  Leave a Comment

I guess I'll make this a mini-series? Whenever I have questions I need answers to, I'll hunt the numbers down and write about my findings here and tag the posts as such.

So my second question regarding institutional racism is the disparity of socio-economic mobility. Its no secret that there is a disparity in the quality of life of Americans across race. My question is, is this a result of economic privilege or are there significantly more barriers to upwards mobility dependent on race? I'd also like to investigate some common arguments against the existence of racial barriers, such as family life conditions.

Lucky for me, there's already been some great studies done. Initially, I downloaded about 5 gigs of census data ready to comb through it with python (would have been an absolute nightmare) but I found some semi processed data off this study done by Raj Chetty, Nathaniel Hendren, Maggie R. Jones and Sonya R. Porter [1].

Data Evaluation

As we did last time, we'll take a step back to evaluate the source. This study was performed by the National Bureau of Economic Research. The NBER is a private, non-profit and non-partisan research agency. Funded by a multitude of sources including government grants, private foundations, investment income and a few corporations.

I looked through the financials and corporate contributions are largely under 20,000 to 30,000 dollars [2] while total revenue is over 31 million for the NBER [3] so we can operate under the assumption that the research was conducted in an unbiased approach. As for the data itself, it is ripped straight from the census. There's no reason to be concerned about the accuracy of that as it's publicly available.

Alright let's get started.

Normalizing for Parental Income/Family Life

A common right wing talking point is that African Americans are more likely to be in single parent homes which can result in a poor upbringing thus impacting education and wages down the line. However, looking at the data, we can compare children of 2 parent homes of both white and black families and see that even then, there is an average disparity of 9.6 percentile points. When we compare children of single parent homes for both races, there is an even greater disparity of 11.03 percentile points.

While being raised in a single family home will make socio-economic mobility harder, it does not explain away disparities in children's income when look at across race.

This graph I generated below shows the disparity in percentile points across all the levels of parent income ranks.

Class Mobility

Next, we can group the parent and child income into percentile ranks and identify how difficult it is for them to move across these classes. The following are colormaps of class mobility. The darker the cell, the more population from that parent percentile rank end up in that child income rank.

Income Class Mobility for African-American Males

Income Class Mobility for White American Males

So what's of note here? Black parents in the top quintile of earners are 40% less likely to have their children stay there. White Americans from the bottom 20% land in the top quintile at twice the rate of Black Americans from the bottom quintile.

Economic inequality is clearly not the only factor at play here.

On top of all this, the largest predictor of class mobility is the very class you start out in and African-Americans have been disparagingly left behind at the bottom of the ladder. So not only are they fighting uphill on economic inequality but there are clearly additional barriers. Here's the code if you'd like to take a look. Data sources can be found in the references [4].

Code

import csv
import pandas as pd
from matplotlib import pyplot as plt
import numpy as np

###################################################################################################
# Table 1 - Disparity Calculating Function
###################################################################################################
# This function will take the incoming dataframes and two columns and return a vector of the difference
def disparity(df,stat1,stat2):
    result = [x-y for x,y in zip(df[stat1],df[stat2])]
    return result

###################################################################################################
# Table 1 - Now do disparity over multiple statistics and compile to dataframe
###################################################################################################
def find_disparities(df,list_of_requests):
    result = pd.DataFrame()
    averages = []
    for request in list_of_requests:
        split_request = request.split('race')#find race in the keyword and substitute it in the stat entry
        request_disparity = disparity(df,split_request[0]+'white'+split_request[1],split_request[0]+'black'+split_request[1])
        result[request]=request_disparity
        averages.append(sum(request_disparity)/len(request_disparity))
    averages_df=pd.DataFrame(averages,index=list_of_requests)
    return [result, averages_df]

###################################################################################################
# Table 1 - Processing
###################################################################################################
table1_df = pd.read_csv('table_1.csv')
list_of_requests = ['kid_wage_rank_race_male','kir_1par_race_male','kir_2par_race_male','kir_par_nohome_race_male']
[result_df,averages] = find_disparities(table1_df,list_of_requests)
plot = result_df.plot(title='Disparities in Socio-Economic Performance (Born in \'78-83)', figsize = (15,8))
plot.set_xlabel("Parent Income Rank")
plot.set_ylabel("Child Percentile Disparity (White-Black)")
print(averages)

###################################################################################################
# Table 2 - Dataframe Construction
###################################################################################################
def pull_data(df, race, sex):
    df_f = df[(df['kid_race']==race) & (df['gender']==sex)] #filter by race & sex
    quintiles = ['1','2','3','4','5']
    table = []
    for par_quintile in quintiles:
        row=[]
        for kid_quintile in quintiles:
            row.append(df_f.iloc[0]['kir_q'+kid_quintile+'_cond_par_q'+par_quintile])
        table.append(row)
    result_df = pd.DataFrame(table,index=quintiles,columns=quintiles)
    return result_df

###################################################################################################
# Table 2 - Colormap
###################################################################################################
def make_colormap(df):
    percentiles = ['0-20%','20-40%','40-60%','60-80%','80-100%']
    vals = df.round(3).to_numpy()
    normal = plt.Normalize(vals.min(),vals.max())
    fig = plt.figure(figsize=(15,8))
    ax = fig.add_subplot(111,frameon=True,xticks=[],yticks=[])
    ax.set_xticks(np.arange(vals.shape[1]) + 0.5, minor=False)
    ax.set_yticks(np.arange(vals.shape[0]) + 0.5, minor=False)
    ax.set_xlabel('Child Income Rank')
    ax.set_ylabel('Parent Income Rank')
    ax.xaxis.tick_top()
    ax.xaxis.set_label_position('top')
    ax.set_xticklabels(percentiles, minor=False)
    ax.set_yticklabels(reversed(percentiles),minor=False)
    table = plt.table(cellText = vals,
                      loc='center',
                     # rowLabels=percentiles,
                      #colLabels=percentiles,
                      cellColours=plt.cm.Blues(normal(vals)))
    table.scale(1,7.3)
    plt.show()

###################################################################################################
# Table 2 - Processing
###################################################################################################
table2_df = pd.read_csv('table_2.csv')
black_male_df = pull_data(table2_df,'Black','M')
make_colormap(black_male_df)
white_male_df = pull_data(table2_df,'White','M')
make_colormap(white_male_df)

















 

References

[1] Raj Chetty & Nathaniel Hendren & Maggie R Jones & Sonya R Porter, 2020. "Race and Economic Opportunity in the United States: an Intergenerational Perspective*," The Quarterly Journal of Economics, vol 135(2), pages 711-783.

[2] https://www.nber.org/CorporateSupporters2020.pdf

[3] https://www.nber.org/FY2019FinancialsSummary.pdf

[4] http://www.equality-of-opportunity.org/data/index.html#race


Comments

No comments posted.
Loading...


Subscribe

* indicates required
/ ( mm / dd )

Subscribe
RSS
Archive
January February March April May June (7) July (1) August (1) September October November (1) December (1)
January February March April (1) May June (1) July August September (7) October (1) November December
January February March April May June July August September October November December
January (1) February March April May June July August September October November December
January February March April May June July August September October November December
January February March April May June July August September October November December
January February March April May June July August September October November December