Exploring Global Billionaire Wealth: The Role of Age, Gender, Country GDP, and Region

Author

Soleil Short

Introduction

Source: Magnific Free Images. <https://www.magnific.com/free-photo/financial-growth-investment-success_426493701.htm#fromView=keyword&page=1&position=2&uuid=7176f7a3-d9d0-456e-a5a0-3bb45fa083dc&track=ais_hybrid&query=Money+stock>

For this project, I analyzed the Billionaires dataset from the CORGIS Datasets Project, which has demographic, geographic, and financial records of the world’s wealthiest people. The dataset has a total of 22 variables; 6 quantitative and 16 categorical, 3 of those are Boolean. My analysis focuses on three quantitative variables, and two categorical variables.

The quantitative variables are:

  • wealth.worth in billions (the individual’s net worth in billions of U.S. dollars)

  • demographics.age (the billionaire’s age in years)

  • location.gdp (the Gross Domestic Product of their home country).

The two categorical variables are:

  • demographics.gender (identifying whether the individual is male or female)

  • location.region (the global geographic region they live in)

I chose this dataset because I was personally interested in seeing what affects a person’s success and chances to become a billionaire, and the different distributions between billionaires. When completing my project I had two questions in my mind:

Do age and living in a higher-GDP country significantly predict a billionaire’s net worth, and how does the distribution of billionaire wealth differ across gender, age, and world regions?

I wanted to see if living in a wealthy country actually matters, and if age and gender plays a part in their wealth as well.

To clean up the data, I used the select() and filter() functions from the dplyr package. I selected the columns demographics.age, demographics.gender, location.gdp, location.region, and wealth.worth in billions to separate from the other variables I won’t be using. I then filtered each variable, removing observations that would change the way my data looks. When reviewing the data, I noticed some NA values in the gender column, and I saw many zeros in the age column, GDP, and one in region. I assume it’s because those values were missing, so they just used 0 as a placeholder, however I want all my observations to be completely filled out and accurate, so I filtered those out. To filter out the zeros in age and GDP I used > 0 so R knows to keep every value above 0 from those columns, but I used the Boolean operator != "0" because location.region is a categorical variable. Lastly I removed the NAs in gender with !is.na. This left me with 632 observations to use.

Cleaning the data

Loading the libraries I’ll need.

library(readr)
library(dplyr)

Attaching package: 'dplyr'
The following objects are masked from 'package:stats':

    filter, lag
The following objects are masked from 'package:base':

    intersect, setdiff, setequal, union
library(ggplot2)
library(plotly)

Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':

    last_plot
The following object is masked from 'package:stats':

    filter
The following object is masked from 'package:graphics':

    layout
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ forcats   1.0.1     ✔ stringr   1.6.0
✔ lubridate 1.9.5     ✔ tibble    3.3.1
✔ purrr     1.2.2     ✔ tidyr     1.3.2
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ plotly::filter() masks dplyr::filter(), stats::filter()
✖ dplyr::lag()     masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(RColorBrewer)

Adding my dataset to RStudio.

billions_df <- readr::read_csv("billionaires.csv")
Rows: 2614 Columns: 22
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (13): name, company.name, company.relationship, company.sector, company....
dbl  (6): rank, year, company.founded, demographics.age, location.gdp, wealt...
lgl  (3): wealth.how.from emerging, wealth.how.was founder, wealth.how.was p...

ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.

I first cleaned the data by using the select() function and selecting the variables I will be using, then added it to billions_clean. When looking over the dataset I noticed that there were a lot of 0s and NA in the columns I wanted to use. If I included these observations, it would drastically change how my multiple linear regression model and two final visualizations look like, so removed them. I did it all in the filter() function, and then added it to the billions_clean data, reducing the dataset to 632 complete observations.

The dataset has three different years 1996, 2001, and 2014. the 2014 rows have missing GDP, so I decided to not include it in my final visualization, and I chose to combine the years 1996 and 2001, even when some billionaires repeat because it gives me a stronger and larger data sample, and some billionaires are unique to their years, so it’ll be including the extra individuals as well. Each row is an updated age, net worth, and country GDP at a different economic moment, so I believe combining them shows more observations across time.

# Selecting my columns
billions_clean <- select(billions_df, "demographics.age", "demographics.gender", "location.gdp", "location.region", "wealth.worth in billions")

# Filtering out ages that are 0, 0 GDP, NA in gender, and the 0 in region.
billions_clean <- filter(billions_clean, demographics.age > 0, location.gdp > 0, !is.na(demographics.gender), location.region != "0")

Simple Plots

# Simple plot 1: Quantitative 
ggplot(billions_clean, aes(x = demographics.age)) +
  geom_histogram()
`stat_bin()` using `bins = 30`. Pick better value `binwidth`.

# Simple plot 2: Categorical
ggplot(billions_clean, aes(x = demographics.gender)) +
  geom_bar()

These two simple plots let me see what my final visualizations would possibly look like. You can see that most billionaires are mostly concentrated between 50 and 80 years old, and that most billionaires are male and they vastly outnumber female billionaires. My final visualizations explore how net worth varies across age, gender, and world regions.

Multiple Linear Regression Analysis

I chose the variables wealth.worth in billions, demographics.age, and location.gdp for my multiple linear regression. I wanted to test and see if being older gives billionaires more years to compound and increase their wealth, and if living in a richer and larger economy helps billionaires becomes even wealthier.

# Predicting net worth & seeing how much of it is explained by age and country GDP.
model <- lm(`wealth.worth in billions` ~ demographics.age + location.gdp, data = billions_clean)

# Getting a summary of the model
summary(model)

Call:
lm(formula = `wealth.worth in billions` ~ demographics.age + 
    location.gdp, data = billions_clean)

Residuals:
   Min     1Q Median     3Q    Max 
-2.495 -1.811 -1.184  0.158 55.384 

Coefficients:
                  Estimate Std. Error t value Pr(>|t|)   
(Intercept)      2.561e+00  8.064e-01   3.176  0.00157 **
demographics.age 5.585e-03  1.268e-02   0.441  0.65972   
location.gdp     4.752e-14  3.653e-14   1.301  0.19381   
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 4.105 on 629 degrees of freedom
Multiple R-squared:  0.003041,  Adjusted R-squared:  -0.0001292 
F-statistic: 0.9593 on 2 and 629 DF,  p-value: 0.3837

The equation I got from this is:

Wealth (in billions) = 2.561 + 0.005585(Age) - 4.752e-14(GDP)

This means that with every extra year of age, it adds about $0.0056 billion (around $5.6 million) to a billionaire’s predicted net worth. Location GDP barely changes the prediction, so a billionaire living in a country with a high or low GDP doesn’t really matter because their net worth depends more on their business.

The P-value I got is 0.3837, meaning that the regression model is not significant. demographics.age (0.65972) and location.gdp (0.19381) have no asterisks which means that they are not a significant predictor of net worth.

The adjusted R^2 value is -0.0001292, or basically 0%. This means that age and location GDP explains nothing about the variation in net worth. The net worth figures are explained by other factors like company industry, inherited wealth, or stock market performance.

Creating my graphs

GGplot graph

For my first graph, I wanted to see if older billionaires are wealthier, and whether male and female billionaires follow the same wealth trends. The variables I used are demographics.age, wealth.worth in billions, and demographics.gender. I did a scatter-plot because it can show outliers and trend lines.

ggplot(billions_clean, aes(x = demographics.age, y = `wealth.worth in billions`, color = demographics.gender)) +
  geom_point(alpha = 0.3,  size = 2.1) +
  geom_smooth(method = lm, se = FALSE, lty = 2, linewidth = 1.3) +
  scale_color_manual(values = c("#FF7256","#556B2F"),
                    labels = c("Female",
                    "Male")) +
  labs(x = "Age",
       y = "Net worth (in billions)",
       title = "Billionaire Net Worth by Age and Gender",
       caption = "Source: CORGIS Datasets Project",
       color = "Gender") +
  theme_minimal()
`geom_smooth()` using formula = 'y ~ x'

In this chart, the forest green trend-line and dots represent males, and the coral trend-line and dots represent female billionaires. The male trend-line stays fairly constant regardless of age. The female trend-line is upward-sloping, which means that older female billionaires tend to have a higher net worth than younger female billionaires. Men make up most of the dataset and outliers, the highest being close to $60 billion dollars. The graph is very compacted ages 50 to 75, and most of them have net worths less than $10 billion. For men, it doesn’t seem like older billionaires (60+) have more money than younger billionaires, but for women that trend is there.

Interactive graph

For my interactive graph, I decided to explore which parts of the world have the richest billionaires, and I wanted to see the outliers as well, so that’s why I’ve chosen to use a box plot. The variables I used to create this graph is location.region and wealth.worth in billions.

# Source: CORGIS Datasets Project
p2 <- ggplot(billions_clean, aes(x = location.region, y = `wealth.worth in billions`, fill = location.region)) +
  geom_boxplot(alpha = 0.6) +
  coord_flip() +
  labs(x = "World Region",
       y = "Net worth (in billions)",
       title = "Billionaire Net Worth Distribution by World Region",
       fill = "Regions") +
  scale_fill_brewer(palette = "Paired") +
  theme_bw()
ggplotly(p2)

All the box plots are in the same part of the graph, below $10 billion dollars, and they all have similar median net worth. The highest medians seem to be East Asia, Middle East/North Africa, and Sub-Saharan Africa. the region with the biggest range is East Asia with it reaching almost $5 billion dollars. The region with the greatest outliers, or richest billionaires, is North America with the highest net worth being close to $60 billion dollars, and three more outliers between $20 billion and $40 billion. Since this is an interactive graph, I am able to deselect North America, and I can see that with North America not in the graph, the highest net worth would be 20 billion in the Middle East/North Africa region. That’s interesting because the Middle East/ North Africa region only has one outlier, so I’m wondering if this individual has inherited or self-made wealth, and who it may be.

I noticed that the Sub-Saharan Africa region only has 3 observations, so it’s box plot may not be accurate to times now.

Conclusion

These two visualizations represent how billionaire net worth varies across individual demographics (age and gender) as well as broader global geography (world regions). There were a few surprising patterns that I’ve found. I was surprised to see the male trend-line stay fairly constant throughout the whole chart, but the female trend-line was upward-sloping even though there’s a smaller portion. This told me that males have a more evenly distributed wealth across those ages, but females have more wealth with age. This made me want to investigate more on why that is. Another surprising thing was the median net worth from the box plots were consistent around $2 to $3 billion across every region. I expected the medians to be more dramatic and vary drastically.

Some limitations I experienced while working on this was the exclusion of the year 2014. 2014 had the most observations out of the three years, 1996, 2001, and 2014. However, for every year in 2014, the country GDP was 0 and this may be because the researchers just chose to not include it for that year, but it would’ve changed the way my plots and data looked, and it wouldn’t fit the required 800 observation limit, so I chose to not include it in the end. Another thing I had to work through and decide on was choosing to combine the years 1996 and 2001 instead of separating them. Combining the two years gave me 632 observations would be a lot to work with instead of only having 412 from 2001, and 220 from 1996. I do recognize that some billionaires repeat in those two years, but each row captures their updated age, net worth, and country GDP at a different economic moment, and keeping both gave me a much stronger sample size.

If I could expand my analysis further, I would’ve included the variables wealth.how.industry, and wealth.how.inherited. If I could see how net worth changed depending on industry would be interesting and great for seeing how it possibly explains the net worth of the billionaires. I believe knowing whether or not the money was self-made or inherited could help explain some outliers, and I could see what region it comes from.

References

Abdullah, M. Financial growth investment success [Photograph]. Magnific. https://www.magnific.com/free-photo/financial-growth-investment-success_426493701.htm

Whitcomb, R. (2016). Billionaires CSV File (Version 2.0.0) [Data set]. CORGIS Datasets Project. https://corgis-edu.github.io/corgis/csv/billionaires/