Research Question: How does the revenue from fees/forfeitures compare to total revenue within Virginia’s localities? Are there differences in assessment of fines, policing, incidences of traffic cases and case outcomes?

Our project was inspired by this study. The authors explore the effects of the percent of a local government’s revenue that comes from collecting fines, fees, and asset forfeitures on the rate at which their police departments solve violent and property crimes. They find that as the share of revenue from fines increases, crime clearance rate falls.

The general court data is not coded in a uniform way. Therefore it is difficult to easily discern in what types of cases fines are being assessed. According to the study by Goldstein, et. al. linked above, over 80% of involuntary police contact (contact initiated by offers, as opposed to citizens calling the police, or initiating contact in some other way) occurs due to traffic violations. Additionally, police officers tend to have a high level of discretion about the severity of tickets during traffic stops.

Taking all of this into account, we ultimately want to investigate if, in traffic cases, the share of revenue that comes from fines is correlated to the number and severity of fines assessed for localities in Virginia. While beyond the scope of our project, the rates of fine and forfeitures as a percentage of income

Set Up

# Load needed libraries
options(tigris_use_cache = TRUE) 

# Read in regional circuit court data
general <- readRDS("../data/gd_case_2017.RDS")

# Camel case to snake case
general <- general %>% 

Descriptive data

Title 46.2 of the Code of Virginia pertains to Motor Vehicles. Because of the high level of pulbic-police interaction and our hypothesis that police officers will have the highest degree of discression during traffic stops, we will only be looking at cases that include this code.

What is the distribution of infractions, misdemeanors, and felonies in the general court data?

general %>% 
  filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
  select(case_type) %>%
  filter(case_type == "Infraction" | case_type == "Misdemeanor" | case_type == "Felony") %>%
  ggplot(aes(x = fct_infreq(case_type), fill = case_type)) +

As expected, among traffic violations, the majority of cases are infractions. About one-sixth of cases are misdemeanors. There are very few felonies in the general court data for traffic cases. Many of the more serious cases, and therefore felonies, would likely be adjudicated in the circuit court.

Of traffic violations, how many cases have a fine assoicated with it, what is the percentage of cases with a fine, and what are the minimum, average, median, and maximum fines in these cases?

fine_tab <- general %>%
  filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
  mutate(num_cases = n()) %>%
  filter(fine > 0) %>%
    num_cases_fine = n(),
    pct_fine = n() / first(num_cases),
    min_fine = min(fine),
    mean_fine = mean(fine),
    median_fine = median(fine),
    max_fine = max(fine)

first(num_cases) num_cases_fine pct_fine min_fine mean_fine median_fine max_fine
1529438 1164897 0.7617 0.1 90.83 78 35288

Fines are present in about 75 percent of traffic cases. Fines range from $0.10 to $35,288 with an average fine of $90.83.

In traffic cases where fines are present, how does the number of cases vary by race?

general <- general %>%
  mutate(race7 = fct_collapse(race,
                              unknown = c("", "Unknown", "Unknown (Includes Not Applicable, Unknown)"),
                              amind = c("American Indian", "American Indian or Alaskan Native"),
                              asian = c("Asian or Pacific Islander", "Asian Or Pacific Islander"),
                              black = c("Black", "Black(Non-Hispanic)"),
                              white = c("White", "White Caucasian(Non-Hispanic)"),
                              latinx = c("Hispanic"),
                              remaining = c("Other(Includes Not Applicable, Unknown)", "NA")))

general %>%
  filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
  filter(fine > 0) %>%
  group_by(race7) %>%
  ggplot(aes(fct_infreq(race7), fill = race7)) +
  geom_bar() +
  labs(y = "", title = "Number of Traffic Cases Filed by Race") +
  guides(color = "none")