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))