Post-Secondary Employment Outcomes (PSEO) Analysis


1. Load Packages

library(readxl)
library(tidyverse)
library(scales)

2. Import Excel

# Read PSEO Excel workbook
pseo_raw <- read_excel("pseo_utah_earnings.xlsx", sheet = "Earnings")
head(pseo_raw)

3. Earnings Data

# PSEO earnings data by degree field
pseo_earnings <- tibble(
  program = rep(c("Business & Marketing", "Health Professions", "Computer Sciences", "Social Sciences"), each = 3),
  time_postgrad = rep(c("1 Year", "5 Years", "10 Years"), times = 4),
  median_earnings = c(
    53406, 82298, 108893,  # Business & Marketing
    56645, 71091, 87622,   # Health Professions
    62500, 91000, 122000,  # Computer Sciences
    41500, 63200, 81500    # Social Sciences
  )
) %>%
  mutate(
    time_postgrad = factor(time_postgrad, levels = c("1 Year", "5 Years", "10 Years")),
    program = factor(program)
  )

# Table summary
knitr::kable(pseo_earnings, col.names = c("Degree Field", "Time Post-Graduation", "Median Earnings ($)"))
Degree Field Time Post-Graduation Median Earnings ($)
Business & Marketing 1 Year 53406
Business & Marketing 5 Years 82298
Business & Marketing 10 Years 108893
Health Professions 1 Year 56645
Health Professions 5 Years 71091
Health Professions 10 Years 87622
Computer Sciences 1 Year 62500
Computer Sciences 5 Years 91000
Computer Sciences 10 Years 122000
Social Sciences 1 Year 41500
Social Sciences 5 Years 63200
Social Sciences 10 Years 81500

4. Bar Chart

ggplot(pseo_earnings, aes(x = program, y = median_earnings, fill = time_postgrad)) +
  geom_col(position = "dodge") +
  scale_y_continuous(labels = dollar_format(prefix = "$")) +
  labs(
    title = "Median Earnings by Degree Field",
    x = "Degree Field",
    y = "Median Earnings ($)",
    fill = "Time Post-Grad"
  ) +
  theme_minimal()