sr_file <- read.csv("Supervised_Release_Dockets_20240409.csv") 

head(sr_file, 5)
##   program_name docket_id intake_max_severity gender program_entry_date
## 1        CASES         1   Nonviolent Felony   Male         10/26/2018
## 2        CASES         2         Misdemeanor   Male         07/16/2018
## 3        CASES         3   Nonviolent Felony   Male         02/20/2018
## 4          CCI         4         Misdemeanor Female         08/27/2019
## 5        CASES         5   Nonviolent Felony   Male         07/08/2016
##   supervision_level
## 1           Level 1
## 2           Level 2
## 3           Level 2
## 4           Level 2
## 5           Level 2
str(sr_file)
## 'data.frame':    30644 obs. of  6 variables:
##  $ program_name       : chr  "CASES" "CASES" "CASES" "CCI" ...
##  $ docket_id          : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ intake_max_severity: chr  "Nonviolent Felony" "Misdemeanor" "Nonviolent Felony" "Misdemeanor" ...
##  $ gender             : chr  "Male" "Male" "Male" "Female" ...
##  $ program_entry_date : chr  "10/26/2018" "07/16/2018" "02/20/2018" "08/27/2019" ...
##  $ supervision_level  : chr  "Level 1" "Level 2" "Level 2" "Level 2" ...
sr_file$program_entry_date <- as.Date(sr_file$program_entry_date, format = "%m/%d/%Y") #format date 
  sr_file$year <- format(as.Date(sr_file$program_entry_date), "%Y")  
  sr_file$Month_Year <- format(sr_file$program_entry_date, "%m-%Y") #new column containing month and year

Observations: - General: There are 30644 Supervised release entries with 25143 for people identified as men and just over half for CCI program (15509). Entries are from March 1, 2016 through August 31, 2021

-Gender: male by in large composed the majority of the population with 25143 of the 30644. There is sizable population of 1294 that are not identified

-Program: CCI had by far the largest caseload of over 15509 of just over half of the total data set entries

#unique variables for each column
unique(sr_file$program_name)
## [1] "CASES" "CCI"   "CJA"
unique(sr_file$intake_max_severity)
## [1] "Nonviolent Felony" "Misdemeanor"       "Violent Felony"   
## [4] "Unknown"           "Violation"
unique(sr_file$supervision_level)
## [1] "Level 1" "Level 2" "Level 3" "Level 4" "Level 5" "Unknown" "Level 0"
unique(sr_file$gender)
## [1] "Male"    "Female"  "Unknown"
min(sr_file$program_entry_date) #first date in data set
## [1] "2016-03-01"
max(sr_file$program_entry_date) #last date in data set
## [1] "2021-08-31"
table(sr_file$program_name)%>%addmargins() #frequency table by program
## 
## CASES   CCI   CJA   Sum 
##  8555 15509  6580 30644
table(sr_file$program_name, sr_file$gender)%>%addmargins() #frequency table to program and gender
##        
##         Female  Male Unknown   Sum
##   CASES   1313  7148      94  8555
##   CCI     2098 12430     981 15509
##   CJA      796  5565     219  6580
##   Sum     4207 25143    1294 30644
table(sr_file$supervision_level)%>%addmargins() #frequency table by supervision level
## 
## Level 0 Level 1 Level 2 Level 3 Level 4 Level 5 Unknown     Sum 
##      78    7618    7242    8779    3961    1818    1148   30644

Description for below: Descriptive statistic for the total number of supervised release program entries broken out by calendar year

Observation: There was gradual increase of supervised release program entries year-over-year increased (avg. 33.6%) peaking in 2020 before slightly declining in 2021

sr_level_bar <- sr_file %>% #create dataframe with groups count for each year
  group_by(year) %>%
  summarise(n = n())


sr_level_bar %>%
  ggplot(aes(x = year, y = n)) +
  geom_col(fill = "blue") +    
  ggtitle("Supervised Release by Year") +
  xlab("Calendar Year") + 
  ylab("Total Count") + 
  geom_text_repel(aes(label = n), position = "identity", size = 4, color = "black", fontface = "bold", box.padding = 0.2) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1),  
        axis.text = element_text(size = 8, color = "black"))

Description for below: Supervision level scaled out of 100% broke out gender

Observation: The distribution of the supervision level is relatively consistent across gender. Gender has a limited influence of the supervision level.

sr_programs_supervision_bar <- sr_file %>%
  group_by(gender, supervision_level) %>% #Create gouped count by supervision level and gender
  summarise(n = n()) %>%
  mutate(percent_by_supervision = n / sum(n)) %>%  #create percent for supervised release categories by gender
  ungroup()

# Plotting
sr_programs_supervision_bar %>%
  ggplot(aes(x = gender, y = percent_by_supervision, fill = supervision_level)) + #gender by co
  geom_col(position = "fill", stat = "identity") +  #aesthetic vv
  geom_text(aes(label = scales::percent(percent_by_supervision)), 
            position = position_fill(vjust = 0.5), size = 3) +  
  scale_y_continuous(labels = scales::percent_format()) + 
  ggtitle("Suprvision Level by Gender") + 
  xlab("Gender") + 
  ylab("%")

Description for below: Count of supervised release program entries by supervision level for each year in the data set

Observation: Most supervision levels trended up between 2016 and 2021 where data is available. Level 2 supervision overall trended down initially doubling before declining each year from 2017 to 2021. Additionally, there is a spike in higher supervision level (Supervision Level 4 and Supervision Level 5) in 2021 before declining to a rate that is more in line with overall upward trends.

sr_level_line_count_percent <- sr_file %>%
  group_by(year, supervision_level) %>%  #count for supervision level by year
  summarise(n = n()) %>%
  filter(supervision_level != "Unknown") %>% #remove unknown supervision population
  group_by(year) %>%
  mutate(percent = round(n / sum(n) * 100, 2)) #add column with percent  for supervision by year



sr_level_line_count_percent %>%
  ggplot(aes(x = year, y = n, group = supervision_level, color = supervision_level, label = n)) +
  geom_line(size = 1.2) +
  ggtitle("Supervision Level By Year") + 
  xlab("Year") + 
  ylab("Total #") + 
  geom_text_repel(aes(label = n), position = "identity", size = 3, box.padding = 0.1, color = "black", fill = "white") +  
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

Description for below: Percent for supervised release program entries by supervision level for each year in the data set

Observation: The change of Supervision Level 2 is event more evident as a percent going from 48.2 of the entries in 2017 to 5.2 in 2021. The gradual increase of supervision levels 1 and 3 can partially be explained by the overall entry growth through 2020

sr_level_line_count_percent %>%
  ggplot(aes(x = year, y = percent, group = supervision_level, color = supervision_level, label = percent)) +
  geom_line(size = 1.2) +
  ggtitle("Supervisor Level By Year (%)") + 
  xlab("Year") +  
  ylab("%") + 
  geom_text_repel(aes(label = percent), 
                  position = "identity", 
                  size = 3, box.padding = 0.1,
                  color = "black", fill = "white") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

Description for below: Distribution of supervision level scaled out of 100% by Program Name

Observation: Similar to gender, the distribution of supervision level across program doesn’t have any notable imbalances. CCI have the largest total number of program entries has worked with the majority of Level 0 supervisions for the limited data available

sr_programs_supervision_bar <- sr_file %>%
  group_by(program_name, supervision_level) %>% #create group count supervision by program name factorng gender
  summarise(n = n()) %>%
  group_by(program_name) %>%
  mutate(percent_by_supervision =  n / sum(n)) %>% #create percent for supervision by gender
  ungroup()



sr_programs_supervision_bar %>%
  ggplot(aes(x = program_name, y = n, fill = supervision_level)) +
  geom_col(position = "fill", stat = "identity") +
  geom_text(aes(label = scales::percent(percent_by_supervision)), position = position_fill(vjust = 0.5), size = 3) +  
  #facet_grid(~program_name) + 
  scale_y_continuous(labels = scales::percent_format()) + 
  ggtitle("Supervision Level By Program") + 
  xlab("Program") +
  ylab("%")

Description for Below: Percentage scaled out 100% for supervision level by year broken out be intake severity.

Observation: misdemeanors and non-violent felonies have similar trends of higher percentage of supervision levels in 2020 and 2021 while violent felonies see a slight decline of level 4 and 5 supervision level in the same years.

sr_supervision_intake_date_bar <- sr_file %>%
  group_by(intake_max_severity, supervision_level, year) %>%
  summarise(n = n()) %>%
  group_by(intake_max_severity, year) %>%
  mutate(percent_by_supervision = round(n / sum(n), 2)) %>% 
  ungroup()


filtered_data <- sr_supervision_intake_date_bar %>%
  filter(percent_by_supervision > 0.20)


sr_supervision_intake_date_bar%>%
  ggplot( aes(x = year, y = n, fill = supervision_level)) +
  geom_col(position = "fill", stat = "identity") +
  geom_text_repel(data = filtered_data, 
                  aes(label = scales::percent(percent_by_supervision)), 
                  position = position_fill(vjust = 0.75),
                  size = 3,
                  box.padding = 0.25,
                  segment.color = NA,
                  force = 0,
                  angle = 90) +
  scale_y_continuous(labels = scales::percent_format()) + 
  facet_grid(~intake_max_severity) +
  ggtitle("Supervision Level by Year and Intake Severity") + 
  xlab("Year") +
  ylab("%") +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 2))