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
# Load needed libraries
library(tidyverse)
library(janitor)
library(rcartocolor)
library(readxl)
library(sf)
library(tigris)
library(scales)
library(ggthemes)
library(modelsummary)
library(corrplot)
library(stargazer)
library(kableExtra)
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 %>%
clean_names()
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.
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)) +
geom_bar()
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.
fine_tab <- general %>%
filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
mutate(num_cases = n()) %>%
filter(fine > 0) %>%
summarize(first(num_cases),
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)
)
kbl(fine_tab)
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.
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")
We felt this method was the best way to recode race to give us fewer and clearer categories than are provided in the raw dataset. Race is likely coded as a function of perception rather than how the person in the data actually identifies. While this is problematic, there is no way to account for this in our analysis. Race has therefore been recoded in the way that we believe best maintains the original coding.
Fines are racially assessed in way that is not unexpected. Black defendants do seem to have a slightly highers share of cases with fines than their share of the Virginia population. This may be a factor of police fining Black people at higher rates. However, it could also be a factor of out of state drivers. To know for sure, we would need to know the demographics of out of state drivers that drive in Virginia. The state is surrounded by states with significantly high Black populations near the state line.
## generating total fines and traffic fines by county in 2017
general <- general %>%
mutate(fips3 = str_pad(as.character(fips), 3, side = "left", pad = "0"))
fines_assessed_2017 <- general %>%
filter(fine > 0) %>%
group_by(fips3) %>%
summarize(total_fines = sum(fine))
traffic_fines_assessed_2017 <- general %>%
filter(fine > 0) %>%
filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
group_by(fips3) %>%
summarize(traffic_fines = sum(fine))
fines_assessed_2017 <- left_join(fines_assessed_2017, traffic_fines_assessed_2017, by="fips3")
fines_assessed_2017 <- fines_assessed_2017 %>% mutate(ratio_from_traffic=(traffic_fines/total_fines))
va_counties <- counties(state = 51, cb = TRUE)
va_counties <- va_counties %>%
left_join(fines_assessed_2017, by = c("COUNTYFP" = "fips3"))
map_data4 <- va_counties %>%
select(COUNTYFP, NAME, NAMELSAD, traffic_fines, total_fines, ratio_from_traffic, GEOID, geometry)
county_tab <- fines_assessed_2017 %>%
mutate(ratio_from_traffic=(traffic_fines/total_fines)) %>%
arrange(desc(ratio_from_traffic))
county_tab <-left_join(county_tab, va_counties, by=c("fips3"="COUNTYFP"))
kbl(county_tab %>% select(NAMELSAD, total_fines.x, traffic_fines.x, ratio_from_traffic.x),
col.names= c("Locality", "Total Fines", "Traffic Fines", "Percent Traffic Fines"),
align="lccc",
format.args=list(big.mark = ',')) %>%
kable_material(row_label_position=c,
html_font= "arial") %>%
scroll_box(height = "400px")
Locality | Total Fines | Traffic Fines | Percent Traffic Fines |
---|---|---|---|
Greensville County | 2,213,599 | 2,189,134 | 0.9889 |
Brunswick County | 2,423,942 | 2,396,637 | 0.9887 |
Bland County | 1,187,053 | 1,171,653 | 0.9870 |
Sussex County | 1,966,800 | 1,939,040 | 0.9859 |
Southampton County | 1,075,717 | 1,050,637 | 0.9767 |
Hopewell city | 2,066,915 | 2,010,182 | 0.9726 |
Northampton County | 2,099,325 | 2,036,245 | 0.9700 |
Essex County | 413,237 | 400,452 | 0.9691 |
Carroll County | 2,807,492 | 2,709,738 | 0.9652 |
Dinwiddie County | 993,516 | 954,941 | 0.9612 |
Wythe County | 2,849,215 | 2,734,925 | 0.9599 |
Rappahannock County | 293,275 | 279,681 | 0.9536 |
Cumberland County | 237,034 | 225,574 | 0.9517 |
Amherst County | 768,359 | 724,139 | 0.9424 |
Clarke County | 573,673 | 539,869 | 0.9411 |
Smyth County | 1,793,170 | 1,685,805 | 0.9401 |
Caroline County | 1,010,093 | 949,153 | 0.9397 |
Charlotte County | 338,387 | 317,382 | 0.9379 |
King William County | 200,827 | 187,707 | 0.9347 |
Rockbridge County | 1,478,356 | 1,379,941 | 0.9334 |
Amelia County | 248,867 | 231,447 | 0.9300 |
Giles County | 468,618 | 435,758 | 0.9299 |
Mecklenburg County | 914,772 | 850,390 | 0.9296 |
Petersburg city | 1,066,683 | 990,883 | 0.9289 |
Botetourt County | 939,655 | 869,855 | 0.9257 |
Prince George County | 664,410 | 614,725 | 0.9252 |
Emporia city | 662,579 | 612,217 | 0.9240 |
Nottoway County | 212,919 | 196,454 | 0.9227 |
Charles City County | 58,937 | 54,237 | 0.9203 |
Washington County | 1,588,504 | 1,460,514 | 0.9194 |
Nelson County | 285,329 | 261,339 | 0.9159 |
Lunenburg County | 117,210 | 107,290 | 0.9154 |
Greene County | 261,959 | 239,064 | 0.9126 |
Pittsylvania County | 523,328 | 476,974 | 0.9114 |
Buckingham County | 147,268 | 133,788 | 0.9085 |
Richmond County | 173,492 | 157,567 | 0.9082 |
Madison County | 361,546 | 328,346 | 0.9082 |
King and Queen County | 231,508 | 210,123 | 0.9076 |
Alleghany County | 542,318 | 491,720 | 0.9067 |
Prince Edward County | 484,809 | 438,835 | 0.9052 |
New Kent County | 620,200 | 561,289 | 0.9050 |
NA | 1,953,169 | 1,762,483 | 0.9024 |
Albemarle County | 831,736 | 750,066 | 0.9018 |
Bath County | 96,091 | 85,781 | 0.8927 |
Portsmouth city | 1,274,163 | 1,131,057 | 0.8877 |
Chesapeake city | 2,894,885 | 2,567,201 | 0.8868 |
Shenandoah County | 914,892 | 810,828 | 0.8863 |
King George County | 357,562 | 316,481 | 0.8851 |
Roanoke County | 998,320 | 882,713 | 0.8842 |
Highland County | 35,307 | 31,177 | 0.8830 |
Augusta County | 929,258 | 817,522 | 0.8798 |
NA | 1,560,837 | 1,372,026 | 0.8790 |
Goochland County | 337,411 | 296,491 | 0.8787 |
Surry County | 98,127 | 85,752 | 0.8739 |
Pulaski County | 699,670 | 611,299 | 0.8737 |
Hampton city | 1,914,600 | 1,662,403 | 0.8683 |
York County | 679,673 | 589,648 | 0.8675 |
Isle of Wight County | 661,187 | 573,173 | 0.8669 |
Salem city | 403,098 | 348,268 | 0.8640 |
Bristol city | 498,409 | 430,409 | 0.8636 |
Henrico County | 4,377,401 | 3,762,455 | 0.8595 |
Accomack County | 770,591 | 662,336 | 0.8595 |
Westmoreland County | 234,239 | 201,040 | 0.8583 |
Fauquier County | 1,508,930 | 1,291,570 | 0.8560 |
Rockingham County | 1,702,607 | 1,453,221 | 0.8535 |
Fairfax city | 714,978 | 609,582 | 0.8526 |
Appomattox County | 165,280 | 140,900 | 0.8525 |
Loudoun County | 3,517,495 | 2,973,784 | 0.8454 |
Charlottesville city | 473,219 | 399,884 | 0.8450 |
Hanover County | 1,972,870 | 1,664,665 | 0.8438 |
Halifax County | 589,955 | 497,575 | 0.8434 |
Page County | 277,614 | 233,399 | 0.8407 |
NA | 95,752 | 80,237 | 0.8380 |
Northumberland County | 89,103 | 74,593 | 0.8372 |
Mathews County | 70,865 | 59,255 | 0.8362 |
Campbell County | 333,728 | 278,705 | 0.8351 |
Buena Vista city | 97,785 | 81,300 | 0.8314 |
Martinsville city | 224,540 | 186,239 | 0.8294 |
Montgomery County | 1,266,494 | 1,049,978 | 0.8290 |
Powhatan County | 254,430 | 210,675 | 0.8280 |
Warren County | 588,716 | 486,691 | 0.8267 |
Henry County | 428,714 | 352,274 | 0.8217 |
Suffolk city | 725,534 | 590,115 | 0.8134 |
Craig County | 28,806 | 23,426 | 0.8132 |
Franklin County | 467,108 | 379,610 | 0.8127 |
Bedford County | 502,064 | 407,935 | 0.8125 |
Louisa County | 259,015 | 210,170 | 0.8114 |
Fluvanna County | 184,720 | 149,641 | 0.8101 |
Colonial Heights city | 482,944 | 389,859 | 0.8073 |
Chesterfield County | 2,849,363 | 2,299,928 | 0.8072 |
Lancaster County | 88,595 | 71,500 | 0.8070 |
Orange County | 642,529 | 517,368 | 0.8052 |
Frederick County | 1,230,778 | 990,723 | 0.8050 |
Wise County | 571,399 | 459,124 | 0.8035 |
Patrick County | 153,865 | 123,199 | 0.8007 |
Williamsburg city | 592,578 | 473,458 | 0.7990 |
Russell County | 296,940 | 236,678 | 0.7971 |
Spotsylvania County | 982,376 | 782,566 | 0.7966 |
Floyd County | 129,926 | 102,881 | 0.7918 |
Scott County | 398,605 | 315,185 | 0.7907 |
Gloucester County | 447,914 | 353,024 | 0.7882 |
Norfolk city | 1,950,890 | 1,529,794 | 0.7842 |
Roanoke city | 1,004,198 | 782,062 | 0.7788 |
Culpeper County | 787,983 | 613,498 | 0.7786 |
Buchanan County | 167,137 | 129,912 | 0.7773 |
NA | 411,639 | 319,937 | 0.7772 |
Middlesex County | 85,572 | 65,412 | 0.7644 |
Alexandria city | 1,706,648 | 1,300,241 | 0.7619 |
Arlington County | 2,644,850 | 2,005,099 | 0.7581 |
Dickenson County | 119,142 | 89,372 | 0.7501 |
Stafford County | 1,274,945 | 948,139 | 0.7437 |
Falls Church city | 180,882 | 133,978 | 0.7407 |
Virginia Beach city | 4,772,730 | 3,495,288 | 0.7323 |
Lynchburg city | 457,503 | 325,843 | 0.7122 |
Prince William County | 5,996,274 | 4,270,088 | 0.7121 |
Grayson County | 172,069 | 120,974 | 0.7031 |
Lee County | 294,632 | 206,177 | 0.6998 |
Franklin city | 44,105 | 30,780 | 0.6979 |
Tazewell County | 500,704 | 349,144 | 0.6973 |
Waynesboro city | 112,117 | 77,237 | 0.6889 |
Staunton city | 228,147 | 157,101 | 0.6886 |
Fredericksburg city | 333,863 | 227,816 | 0.6824 |
Fairfax County | 17,140,071 | 11,558,084 | 0.6743 |
Danville city | 423,095 | 284,184 | 0.6717 |
Galax city | 172,810 | 115,715 | 0.6696 |
Winchester city | 363,813 | 206,248 | 0.5669 |
Radford city | 269,323 | 94,462 | 0.3507 |
NA | 265,712 | 13,337 | 0.0502 |
NA | 750 | NA | NA |
NA | 10,095 | NA | NA |
NA | 75 | NA | NA |
ggplot(data = map_data4) +
geom_sf(aes(fill = ratio_from_traffic)) +
scale_fill_carto_c(palette = "ag_Sunset", direction=-1) +
theme_void() +
theme(legend.position = "right")
Fines from traffic cases make up a significant amount of the total fines that counties and cities collect throughout the state.
Maximum: Greensville County (98.9%)
Minimum: Radford City (35.1%)
ggplot(data = map_data4) +
geom_sf(aes(fill = total_fines)) +
scale_fill_carto_c(palette = "Emerald") +
theme_void() +
theme(legend.position = "right")
Maximum: Fairfax County ($17,140,071)
Minimum: Craig County ($28,806)
ggplot(data = map_data4) +
geom_sf(aes(fill = traffic_fines)) +
scale_fill_carto_c(palette = "Emerald") +
theme_void() +
theme(legend.position = "right")
Maximum: Fairfax County ($11,558,084)
Minimum: Craig County ($23,426)
As seen in the two maps above, there is little difference in the distribution of counties in terms of fine collection and fine collection from traffic cases.
# Add in 2017 Annual Survey of State and Local Government Finances data
cog <- read_fwf("../data/2017FinEstDAT_06102021modp_pu.txt",
fwf_widths(c(12,3,12,4,1), c("id", "item", "amount", "year", "imp")))
cog <- cog %>%
mutate(state = str_sub(id, 1,2),
type = str_sub(id, 3, 3),
county = str_sub(id, 4, 6),
unit = str_sub(id, 7,12))
# filter to locality governments
vacog <- cog %>%
filter(state == "51",
type %in% c("1", "2"))
# Generate variable for total revenue
totrevcode <- c("T01", "T08", "T09", "T10", "T11",
"T12", "T13", "T14", "T15", "T16",
"T19", "T20", "T21", "T22", "T23",
"T24", "T25", "T27", "T28", "T29",
"T40", "T41", "T50", "T51", "T53",
"T99", "A01", "A03", "A06", "A09",
"A10", "A12", "A14", "A16", "A18",
"A21", "A36", "A44", "A45", "A50",
"A54", "A56", "A59", "A60", "A61",
"A80", "A81", "A87", "A89", "U01",
"U10", "U11", "U20", "U30", "U40",
"U41", "U50", "U95", "U99", "B01",
"B21", "B22", "B27", "B30", "B42",
"B46", "B47", "B50", "B54", "B59",
"B79", "B80", "B89", "B91", "B92",
"B93", "B94", "C21", "C28", "C30",
"C42", "C46", "C47", "C50", "C67",
"C79", "C80", "C89", "C91", "C92",
"C93", "C94", "D11", "D21", "D30",
"D42", "D46", "D47", "D50", "D79",
"D80", "D89", "D91", "D92", "D93", "D94")
vatotalrev <- vacog %>%
filter(item %in% totrevcode) %>% # mpc added
group_by(county) %>%
summarize(total_revenue = sum(amount))
# Generate variable for total fines
vafines <- vacog %>%
select(item, amount, county) %>%
filter(str_detect(item, "U30", negate = FALSE))
vafines <- vafines %>%
group_by(county) %>%
summarize(amount = sum(amount))
# Merge new dataframes
varevfines <- merge(vafines, vatotalrev ,by="county")
# Generate variable for percent of revenue generated by fines
varevfines <- left_join(vatotalrev, vafines, by="county") %>%
mutate(fine_revenue = replace_na(amount, 0),
pct_rev_from_fines = (fine_revenue / total_revenue)*100)
# Percent revenue from fines by county
varevfines %>%
group_by(county) %>%
ggplot(aes(x = reorder(county, -pct_rev_from_fines), y = pct_rev_from_fines)) +
geom_col() +
labs(title = "Counties by Percent Revenue Generated Through Fines", subtitle = "2017 by FIPS Code",
x = "County", y = "", color = "% Revenue from Fines")+
theme(axis.text.x = element_text(angle = 60),
axis.text = element_text(size=5))
Most counties generate between about one and four percent of their revenue from fines and forfeitures. A significant outlier (Emporia City) collects about 12 percent of its revenue from fines.
Source: Weldon Cooper Center for Public Service
VApop <- read_excel("/cloud/project/data/PopulationEstimates_July2021_VA_CooperCenter_formatted_1.xlsx")
vapoprevfines <- merge(varevfines, VApop, by="county")
# Fine revenue per capita
vapoprevfines$population <- as.numeric(vapoprevfines$population)
vapoprevfines <- vapoprevfines %>%
mutate(amt_dollars=amount*1000)
vapoprevfines <- vapoprevfines%>%
mutate(fine_rev_percap=amt_dollars/population)
# Population by County (in thousands)
va_counties <- counties(state = 51, cb = TRUE)
va_counties <- va_counties %>%
left_join(vapoprevfines, by = c("COUNTYFP" = "county"))
map_data2 <- va_counties %>%
select(COUNTYFP, NAME, NAMELSAD, population, pct_rev_from_fines, fine_rev_percap, GEOID, geometry) %>%
mutate(pop_thous=population/1000)
ggplot(data = map_data2) +
geom_sf(aes(fill = pop_thous)) +
scale_fill_carto_c(palette = "Sunset") +
theme_void() +
theme(legend.position = "bottom")
Maximum: Fairfax County (1,150,309)
Minimum: Highland County (2,232)
# Percent Revenue from Fines by County
va_counties <- counties(state = 51, cb = TRUE)
va_counties <- va_counties %>%
left_join(vapoprevfines, by = c("COUNTYFP" = "county"))
map_data1 <- va_counties %>%
select(COUNTYFP, NAME, NAMELSAD, pct_rev_from_fines, fine_rev_percap, GEOID, geometry)
ggplot(data = map_data1) +
geom_sf(aes(fill = pct_rev_from_fines)) +
scale_fill_carto_c(palette = "Emerald") +
theme_void() +
theme(legend.position = "bottom")
Statewide, there is not much variation in this map due to the extreme outlier.
Maximum: Emporia City (12.0%) Minimum: Covington City (0.018%)
Emporia City (between U.S. 58 and I-95) generates about 12 perent of it revenue from fines, while all others were less than 4 percent. Emporia is widely known as the major speed trap of Virginia.
va_counties <- counties(state = 51, cb = TRUE)
va_counties <- va_counties %>%
left_join(vapoprevfines, by = c("COUNTYFP" = "county"))
map_data3 <- va_counties %>%
select(COUNTYFP, NAME, NAMELSAD, pct_rev_from_fines, fine_rev_percap, GEOID, geometry) %>%
filter(NAME != "Emporia")
ggplot(data = map_data3) +
geom_sf(aes(fill = pct_rev_from_fines)) +
scale_fill_carto_c(palette = "Emerald") +
theme_void() +
theme(legend.position = "bottom")
When we remove the outlier, we see much more variation across the state.
Maximum without outlier: Brunswick County (3.93%)
Minimum: Covington City (0.018%)
ggplot(data = map_data1) +
geom_sf(aes(fill = fine_rev_percap)) +
scale_fill_carto_c(palette = "Purp") +
theme_void() +
theme(legend.position = "bottom")
Again, there is little variation because the outlier is so extreme.
Maximum: Emporia City ($482.31 per resident)
Minimum: Craig County ($0.40 per resident)
ggplot(data = map_data3) +
geom_sf(aes(fill = fine_rev_percap)) +
scale_fill_carto_c(palette = "Purp") +
theme_void() +
theme(legend.position = "bottom")
We again see more variation when the outlier is removed from the map.
Maximum without outlier: Greensville County, which surrounds Emporia
City ($156.62)
Minimum Craig County ($0.41)
# Generate average fine variable
mean_fine <- general %>%
filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
filter(fine > 0) %>%
group_by(fips3) %>%
summarize(mean_fine = mean(fine))
# Generate number of fines per person variable
total_num_fine <- general %>%
filter(str_detect(code_section, "46.2", negate = FALSE)) %>%
filter(fine > 0) %>%
group_by(fips3) %>%
summarize(total_num_fine = n())
# Combine dataframes
vapoprevfines <- vapoprevfines %>%
left_join(mean_fine, by = c("county" = "fips3"))
vapoprevfines <- vapoprevfines %>%
left_join(total_num_fine, by = c("county" = "fips3"))
# Generate variable for number of fines per capita
vapoprevfines <- vapoprevfines %>%
mutate(num_fines_per_cap = total_num_fine / population)
ggplot(data = vapoprevfines, aes(x = pct_rev_from_fines, y = fine_rev_percap)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
Taking out the outlier should provide a clearer picture.
vapoprevfines_noEmp <- vapoprevfines %>%
filter(locality != "Emporia")
ggplot(data = vapoprevfines_noEmp, aes(x = pct_rev_from_fines, y = fine_rev_percap)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
Looks relatively clear that greater shares of revenue coming from fines are associated with greater fine revenue per capita.
reg1 = lm(fine_revenue~ pct_rev_from_fines + population, data = vapoprevfines)
summary(reg1)
##
## Call:
## lm(formula = fine_revenue ~ pct_rev_from_fines + population,
## data = vapoprevfines)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2508 -156 -16 59 4298
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -118.872255 86.260558 -1.38 0.17
## pct_rev_from_fines 362.714846 60.682188 5.98 0.00000002 ***
## population 0.011388 0.000553 20.61 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 811 on 130 degrees of freedom
## Multiple R-squared: 0.772, Adjusted R-squared: 0.769
## F-statistic: 220 on 2 and 130 DF, p-value: <2e-16
reg2 = lm(fine_rev_percap~ pct_rev_from_fines + population, data = vapoprevfines)
summary(reg2)
##
## Call:
## lm(formula = fine_rev_percap ~ pct_rev_from_fines + population,
## data = vapoprevfines)
##
## Residuals:
## Min 1Q Median 3Q Max
## -63.90 -1.82 -0.29 1.29 35.60
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.81661137 1.07186784 -0.76 0.45
## pct_rev_from_fines 39.23706082 0.74492175 52.67 <2e-16 ***
## population 0.00000559 0.00000678 0.82 0.41
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 9.93 on 127 degrees of freedom
## (3 observations deleted due to missingness)
## Multiple R-squared: 0.957, Adjusted R-squared: 0.956
## F-statistic: 1.4e+03 on 2 and 127 DF, p-value: <2e-16
Results suggest that the percent revenue from fines variable is positively associated with both total fine revenue and fine revenue per person.
ggplot(data = vapoprevfines, aes(x = pct_rev_from_fines, y = mean_fine)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
Again, it is difficult to interpret because of the outlier.
ggplot(data = vapoprevfines_noEmp, aes(x = pct_rev_from_fines, y = mean_fine)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
This plot shows a positive relationship between the percent of revenue from fines and the average fine amount.
reg3 = lm(mean_fine ~ pct_rev_from_fines + population, data = vapoprevfines)
summary(reg3)
##
## Call:
## lm(formula = mean_fine ~ pct_rev_from_fines + population, data = vapoprevfines)
##
## Residuals:
## Min 1Q Median 3Q Max
## -50.74 -10.57 -3.45 5.32 54.79
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 81.69846675 1.92398110 42.46 < 2e-16 ***
## pct_rev_from_fines 4.67315682 1.31277245 3.56 0.00053 ***
## population 0.00000946 0.00001207 0.78 0.43459
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 17.5 on 120 degrees of freedom
## (10 observations deleted due to missingness)
## Multiple R-squared: 0.0967, Adjusted R-squared: 0.0817
## F-statistic: 6.43 on 2 and 120 DF, p-value: 0.00223
A 1% increase in the percent of revenue from fines is associated with an increase in the average fine amount of about $4.70.
ggplot(data = vapoprevfines, aes(x = pct_rev_from_fines, y = num_fines_per_cap)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
Again, the plot is distorted by the presence of an outlier.
ggplot(data = vapoprevfines_noEmp, aes(x = pct_rev_from_fines, y = num_fines_per_cap)) +
geom_point() +
geom_smooth(method = "lm", se = FALSE)
Percent of revenue from fines is positively associated with the number of fines per capita.
reg4 = lm(num_fines_per_cap ~ pct_rev_from_fines + population, data = vapoprevfines)
summary(reg4)
##
## Call:
## lm(formula = num_fines_per_cap ~ pct_rev_from_fines + population,
## data = vapoprevfines)
##
## Residuals:
## Min 1Q Median 3Q Max
## -0.8251 -0.0887 -0.0443 0.0261 1.0894
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.181567732 0.023824803 7.62 6.5e-12 ***
## pct_rev_from_fines 0.155275658 0.016256160 9.55 < 2e-16 ***
## population -0.000000260 0.000000149 -1.74 0.085 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.216 on 120 degrees of freedom
## (10 observations deleted due to missingness)
## Multiple R-squared: 0.451, Adjusted R-squared: 0.442
## F-statistic: 49.3 on 2 and 120 DF, p-value: 2.31e-16
A 1% increase in the percent of revenue from fines is associated with 0.15 additional fines per person.
Source: VDOT
VAtraffic <- read_excel("/cloud/project/data/VA_traffic_data.xlsx")
vapoprevfines_traf <- merge(vapoprevfines, VAtraffic, by="county")
reg5 = lm(fine_revenue~ pct_rev_from_fines, data = vapoprevfines_traf)
reg6 = lm(fine_revenue~ pct_rev_from_fines + DVMT, data = vapoprevfines_traf)
reg7 = lm(fine_revenue~ pct_rev_from_fines + DVMT_interstate, data = vapoprevfines_traf)
reg8 = lm(fine_revenue~ pct_rev_from_fines + population, data = vapoprevfines_traf)
reg9 = lm(fine_revenue~ pct_rev_from_fines + DVMT_interstate + population, data = vapoprevfines_traf)
msummary(list(reg5, reg6, reg7, reg8, reg9), title = "Share of Revenue from Fines and Fine Revenue")
Model 1 | Model 2 | Model 3 | Model 4 | Model 5 | |
---|---|---|---|---|---|
(Intercept) | 535.351 | 574.789 | 573.823 | −325.094 | −331.788 |
(218.102) | (230.775) | (227.003) | (96.090) | (100.510) | |
pct_rev_from_fines | 334.278 | 335.958 | 339.082 | 623.312 | 622.853 |
(274.883) | (275.987) | (275.898) | (111.097) | (111.706) | |
DVMT | 0.000 | ||||
(0.000) | |||||
DVMT_interstate | 0.000 | 0.000 | |||
(0.000) | (0.000) | ||||
population | 0.011 | 0.011 | |||
(0.001) | (0.001) | ||||
Num.Obs. | 92 | 92 | 92 | 92 | 92 |
R2 | 0.016 | 0.019 | 0.021 | 0.843 | 0.843 |
R2 Adj. | 0.005 | −0.003 | −0.001 | 0.840 | 0.838 |
AIC | 1638.4 | 1640.1 | 1640.0 | 1471.3 | 1473.3 |
BIC | 1645.9 | 1650.2 | 1650.0 | 1481.4 | 1485.9 |
Log.Lik. | −816.187 | −816.035 | −815.977 | −731.659 | −731.628 |
F | 1.479 | 0.880 | 0.938 | 239.607 | 158.067 |
RMSE | 1743.49 | 1750.38 | 1749.27 | 699.56 | 703.29 |
These results show that controlling for daily vehicle miles on traveled either in total or specifically on interstate roadways does not have a significant effect on the results. Controlling for population, however, increases both the estimate of interest and the precision.
reg10 = lm(mean_fine~ pct_rev_from_fines, data = vapoprevfines_traf)
reg11 = lm(mean_fine~ pct_rev_from_fines + DVMT, data = vapoprevfines_traf)
reg12 = lm(mean_fine~ pct_rev_from_fines + DVMT_interstate, data = vapoprevfines_traf)
reg13 = lm(mean_fine~ pct_rev_from_fines + population, data = vapoprevfines_traf)
reg14 = lm(mean_fine~ pct_rev_from_fines + DVMT_interstate + population, data = vapoprevfines_traf)
msummary(list(reg10, reg11, reg12, reg13, reg14), title = "Share of Revenue from Fines and Average Fine Amount")
Model 1 | Model 2 | Model 3 | Model 4 | Model 5 | |
---|---|---|---|---|---|
(Intercept) | 79.030 | 79.063 | 79.095 | 77.956 | 77.969 |
(1.827) | (1.934) | (1.902) | (1.995) | (2.084) | |
pct_rev_from_fines | 17.482 | 17.483 | 17.491 | 17.842 | 17.843 |
(2.290) | (2.303) | (2.304) | (2.298) | (2.311) | |
DVMT | 0.000 | ||||
(0.000) | |||||
DVMT_interstate | 0.000 | 0.000 | |||
(0.000) | (0.000) | ||||
population | 0.000 | 0.000 | |||
(0.000) | (0.000) | ||||
Num.Obs. | 91 | 91 | 91 | 91 | 91 |
R2 | 0.396 | 0.396 | 0.396 | 0.407 | 0.407 |
R2 Adj. | 0.389 | 0.382 | 0.382 | 0.394 | 0.387 |
AIC | 749.0 | 751.0 | 751.0 | 749.2 | 751.2 |
BIC | 756.5 | 761.0 | 761.0 | 759.3 | 763.8 |
Log.Lik. | −371.493 | −371.491 | −371.483 | −370.612 | −370.612 |
F | 58.266 | 28.808 | 28.820 | 30.228 | 19.923 |
RMSE | 14.51 | 14.59 | 14.59 | 14.45 | 14.53 |
These results show that percent revenue from fines has a positive relationship with the average fine amount. Controlling for daily vehicle miles traveled, daily interstate vehicle miles traveled, or population by county has no impact on the estimates.
#Conclusion While the Census of Governments data is likely the most complete in terms of a repository of local revenues and expenditures, the survey documentation lists an 82.7% response rate for revenue among Virginia localities, and a 75% response rate overall for Virginia. As compared to some of the research that uses data from a similar time frame, our percentages of fines and forfeitures as a share of total revenues are significantly smaller. For instance, computations here using CoG data from 2017 list U30 (fines and forfeitures) revenue from Greensville County as 3.4%, whereas according to the 2017 budget documentation that share may actually be over 8%. Similarly, following the CoG data Brunswick County’s share of U30 revenue is just under 4%, whereas following the county’s own budget, that share may actually be over 5%.
This may be due to a few factors:
-Incomplete response rate among VA localities, as mentioned
-Classification of U30-associated fines, fees, and forfeitures in other budget categories–which would cause them to be excluded from U30 revenues in the CoG data–as well as inconsistent categorization across localities. For instance, the Orange County, VA 2017 budget lists “Charges for traffic violation processing fees” separately from the fines and forfeitures revenue, which means this additional $135,000 in charges was likely not included in the listed U30 CoG revenue data for Orange County.
While these discrepancies seem minor, how and why these discrepancies come to be is a microcosm of the larger lack of reflexive analysis into locality administration and policy. In light of the growing body of research (especially the study by Goldstein, et. al.) on local administration, policing, and inequitable outcomes for minoritized individuals, the lack of transparency has considerable implications for citizens of Virginia’s localities. With more time, we would dive further into revenues to develop a more comprehensive picture of locality revenues, as well as begin to understand differences among those counties with low and high rates of fine revenues as a share of total revenue.
We also would like to acknowledge that while the millions of observations listed in the general court data seem esoteric in aggregate, they represent glimpses of individuals’ journey through the court system in weeks, months, years, dollars, dispositions, and zip codes, just to name a few. Some cases listed here have been ongoing since 2009, others involve traumatic events, and are all wrapped up in lives much larger and significantly more meaningful than the integers and characters here. While this project scratches the surface of the issues of inequity we addressed briefly, the goal of our analysis was to use this data in a way that works towards reducing the amount of court data in the future, that offers a foundation for interrogating policies that promote inequity and injustice, either unconsciously or intentionally. We recognize that through our learning we’ve been beneficiaries of this data, and hope that in turn we can offer work that goes towards generating benefit for others, as well.