Over the past few years, urban policing and police misconduct have entered the national consciousness as one of the most important social justice issues we face. Earlier this year, a WXYZ report revealed that police misconduct has cost Detroit taxpayers $19.1 million in settlement payouts since 2015. Settlements stem from lawsuits filed by survivors of egregious acts of police brutality. Some of these settlements include:
A image of Officer Lonnie Wade assaulting Detroit citizen David Bivins in Octover 2017. Officer Wade received three years probation for the assault, which broke Bivins’ jaw and damaged eight of his teeth. Photo courtesy of MLive.
While the financial weight of these settlements is enormous, these cases only represent a handful of the thousands of complaints citizens have filed against the police during the same period. A data set from Detroit’s Open Data Portal reveals that Detroit Police received around 9,900 complaints from Detroit Citizens between January 2016 and April 2018. These complaints shed important insight about how Detroit citizens experience police misconduct. In particular, the resulting data from these complaints allow us to understand more about
It’s important to note that the data used for this report covers all complaints against police officers, regardless of whether subsequent DPD investigations found the complaints credible. The Office of the Chief Investigator sustained only 8% of these complaints. However, Department of Justice investigations reveal a pattern of urban police departments covering up misconduct. Given the precedent of police cover ups, a examination of all citizen complaints adds important context for understanding the extent of police misconduct in Detroit.
Black citizen complaints are 81% of all citizen complaints in Detroit. This figure is close to the proportion of Black citizens in Detroit (83%, according to the 2010 census).
Note: For the purposes of this study, I have eliminated complaints listed as younger than 13 or older than 92. Complaints outside of this range were likely entered incorrectly.
# tweaked the read.csv line to point to file in MBOX
library(readxl)
New.DPD.data.set <- read.csv("~/Umich Drive (kaplandf@umich.edu)/Classes/Fall 2018/SW 513/Data Sets/New DPD data set.csv") # You need this code from File |Import to import / get the data
library(MASS) # make sure you install this package first
library(scales)
library(reshape)
library(ggplot2)
library(plotly)
clean_DPD_Data_Set <- New.DPD.data.set%>% #piping to filter out extraneous aspects of data
filter(Age>13) %>%
filter(Age<92)%>%
filter(ctznRace!="NA")%>%
filter(ctznRace!="Select")%>%
filter(ctznRace!="Unknown")%>%
filter(ctznRace!="")
ggplot(clean_DPD_Data_Set,
aes(x=ctznRace))+
geom_bar(stat = "count",
width = 1,
aes(color=ctznRace,
fill=ctznRace))+
labs(title="Complaints By Race", #labels
x="Citizen Race",
y="Number Of Complaints")+
theme(plot.title = element_text (color="gray52",
size=17,
face="bold",
hjust = 0.5),
axis.title.x= element_text(color="gray52",
size=14,
face="bold"),
axis.title.y= element_text(color="gray52",
size=14,
face="bold"))+
theme(axis.text.x = element_blank())+
#Legend Theme
theme(legend.title = element_blank(),
legend.text = element_text
(color="gray30", size=9))+
scale_y_continuous(breaks=seq(0, 8000, 1000))#y axis demarcations
With some anomalies, Black citizen complaints over time cyclically rise in summer months and fall in winter months.
library(MASS) # make sure you install this package first
library(scales)
library(reshape)
library(ggplot2)
library(plotly)
New.DPD.data.set$Report.Date<-
as.Date(New.DPD.data.set$Report.Date, #now it's a date variable
format = "%m/%d/%Y") #had a lot of trouble making this work, needed to make year a capital Y. Remember that!
#formating the x variable into date format
Newer_DPD_data_set <- New.DPD.data.set %>%
filter(ctznRace=="Black") %>%
filter(Age>13) %>%
filter(Age<92)
ggplot(Newer_DPD_data_set,
aes(x=Report.Date))+
geom_histogram(stat = "bin",
fill="#39B600")+ #to find right color, did "library(scales)" then "show_col(hue_pal()(10))" to find right ggplot color for black citizens
labs(title="Complaints By Black Citizens Over Time", #labels
x="Date",
y="Number Of Complaints")+
theme(plot.title = element_text (color="gray52",
size=17,
face="bold",
hjust = 0.5),
axis.title.x= element_text(color="gray52",
size=14,
face="bold"),
axis.title.y= element_text(color="gray52",
size=14,
face="bold"))+
theme(axis.text.x = element_text(color = "gray52",
angle = 45))+
#Legend Theme
theme(legend.title = element_blank(),
legend.text = element_text
(color="gray30", size=9))+
scale_x_date(breaks=date_breaks('3 months'), labels = date_format("%m/%y"))+
theme(axis.text.x = element_text(angle=45)) #breaking up time into quarters
Breaking data down by gender and age reveal similar seasonal patterns in complaints. Black men and women submit complaints in similar patterns. Black youth (through age 18) file complaints a low levels, but their complaint patterns are also seasonal and resemble the pattern of all other Black citizens.
library(MASS) # make sure you install this package first
library(scales)
library(reshape)
library(ggplot2)
library(plotly)
New.DPD.data.set$Report.Date <-
as.Date(New.DPD.data.set$Report.Date, #now it's a date variable
format = "%m/%d/%Y") #had a lot of trouble making this work, needed to make year a capital Y. Remember that!
#formating the x variable into date format
Newer_DPD_data_set <- New.DPD.data.set %>%
filter(ctznSex!="Unknown") %>% #Removing unknown data
filter(ctznRace=="Black") %>% #Filtering only to Black
filter(Age>13) %>%
filter(Age<92)
ggplot(Newer_DPD_data_set,
aes(x=Report.Date))+
geom_histogram(aes(fill=ctznSex,
linetype=ctznSex))+
facet_grid(ctznSex~.)+#Faceting
labs(title="Complaints By Black Citizens Over Time (Gender)", #labels
x="Date",
y="Number Of Complaints")+
theme(plot.title = element_text (color="gray52",
size=17,
face="bold",
hjust = 0.5),
axis.title.x= element_text(color="gray52",
size=14,
face="bold"),
axis.title.y= element_text(color="gray52",
size=14,
face="bold"))+
theme(axis.text.x = element_text(color = "gray52",
angle = 45))+
#Legend Theme
theme(legend.position = "none")+
scale_x_date(breaks=date_breaks('3 months'), labels = date_format("%m/%y"))+
theme(axis.text.x = element_text(angle=45)) #breaking up time into quarters
library(MASS) # make sure you install this package first
library(scales)
library(reshape2)
library(ggplot2)
library(plotly)
New.DPD.data.set$Report.Date <- as.Date(New.DPD.data.set$Report.Date, #now it's a date variable
format = "%m/%d/%Y") #had a lot of trouble making this work, needed to make year a capital Y. Remember that!
#formating the x variable into date format
Newer_DPD_data_set <- #Filtering out Races, Ages, creating two age groups
New.DPD.data.set %>%
filter(ctznRace=="Black") %>%
filter(Age>13) %>%
filter(Age<92) %>%
mutate(AgeGroups=cut(Age,
breaks = c(-Inf, 18, Inf),
labels = c("Youth Complaints (Through Age 18)", "All Other Complaints")))
ggplot(Newer_DPD_data_set,
aes(x=Report.Date))+
geom_histogram(aes(
fill=AgeGroups,
linetype=AgeGroups))+
facet_grid(AgeGroups~.)+#Faceting
labs(title="Complaints By Black Citizens Over Time (Age)", #labels
x="Date",
y="Number Of Complaints")+
theme(plot.title = element_text (color="gray52",
size=17,
face="bold",
hjust = 0.5),
axis.title.x= element_text(color="gray52",
size=14,
face="bold"),
axis.title.y= element_text(color="gray52",
size=14,
face="bold"))+
theme(axis.text.x = element_text(color = "gray52",
angle = 45))+
#Legend Theme
theme(legend.position = "none")+
scale_x_date(breaks=date_breaks('3 months'), labels = date_format("%m/%y"))+
theme(axis.text.x = element_text(angle=45))
Black police officers receive the most complaints. 46.73% of complaints are directed against Black police officers.
The OCI investigates complaints to determine whether they have merit. The OFI only found 8% of complaints in the examined data set sustained. Complaints fell into several other result categories, none of which resulted in a finding that would place fault on an officer.
Race does not appear to be a significant factor in how the OCI finds the result of complaints. Black officers receive most complaints in each finding category,the followed by White officers. These proportions are consistent with the racial breakdown of total police complaints.
library(png)
library(jpeg)
library(grid)
img<-readPNG("~/Umich Drive (kaplandf@umich.edu)/Classes/Fall 2018/SW 513/Tableau Assignment/Complaint Finding Dashboard.png")
grid.raster(img)
The following visualizations were made with Tableau. Percentages do not add up to 100% because officer race is unkown in approximately 18% of complaints.
Plotting the race of citizens against the race of officers reveals patterns in how officers receive complaints. Black and White Police officers receive complaints in a similar pattern, receiving significant numbers of complaints from Arabic, Biracial, Black, Hispanic, and White citizens. Asian and Hispanic officers only receive complaints in significant numbers from Black citizens. One could draw multiple conclusions from this data, including:
The first conclusion is predictable, considering that the city of Detroit is 83% Black. It does not necessarily mean that Black citizens are more prone to complain about police misconduct than other racial groups. The second and third conclusions raise the question of whether the rate of complaints against Detroit police officers by race is proportional to the racial breakdown of the Detroit Police Department. I was not able to find data to answer this question. Obtaining this data would provide insight whether racial bias exists in police-citizen relations, either by officers or citizens or both. The fourth interpretation is difficult to verify without further data, but is consistent with existing research about police misconduct and racial bias.
library(readxl)
#New.DPD.data.set <- read.csv(New_DPD_data_set) # You need this code from File |Import to import / get the data
#load ggplot, ggthemes
library(MASS) # make sure you install this package first
library(scales)
library(reshape)
library(ggplot2)
library(plotly)
Cleaned_Race_DPD<- New.DPD.data.set%>% #piping to filter out extraneous aspects of data
filter(ofcrRace!="NA")%>%
filter(ofcrRace!="Unknown")%>%
filter(ofcrRace!="")%>%
filter(ctznRace!="NA")%>%
filter(ctznRace!="Select")%>%
filter(ctznRace!="Unknown")%>%
filter(ctznRace!="")%>%
filter(ctznRace!="Select")
Cleaned_Race_DPD$ctznRace <-as.factor(Cleaned_Race_DPD$ctznRace) #setting variables as discrete
Cleaned_Race_DPD$ofcrRace <-as.factor(Cleaned_Race_DPD$ofcrRace) #setting variables as discrete
ggplot(Cleaned_Race_DPD,
aes(x=ofcrRace, y=ctznRace))+
#Jitter points graph
geom_jitter(aes(color=ctznRace),
size=.3)+
#ggtheme
theme_classic()+
#Label Titles
labs(title="Racial Breakdown of Complaints Against \n Detroit Police",
x="Officer Race",
y="Citizen Race")+
#theme fonts
theme(plot.title = element_text (color="gray52",
size=17,
face="bold",
hjust = 0.5),
axis.title.x= element_text(color="gray52",
size=14,
face="bold"),
axis.title.y= element_text(color="gray52",
size=14,
face="bold"))+
#Legend Theme
theme(legend.title = element_blank(),
legend.text = element_text
(color="gray30", size=9))
Complaint filings list the police officer’s unit, which is typically a police precinct. The 7th police precinct, which covers Southwest Detroit, received the least number of police complaints (221 in total). The 8th precinct, which covers Northwest Detroit received the most (1238 in total). Complaints are generally lowest in precincts close to downtown, and highest in the precincts on the city’s outskirts.
library(png)
library(jpeg)
library(grid)
img<-readPNG("~/Umich Drive (kaplandf@umich.edu)/Classes/Fall 2018/SW 513/QGIS Assignment/(New) DPD complaint print layout.png")
grid.raster(img)
Note: The DPD complaint reporting codes do not clearly indicate how citizens issue complaints against the 1st precinct, which covers downtown. Due to this complication, the analysis does not include complaints against police in Precinct 1.
The following map overlays the crimes reported by police during the same period of this study. Barring deeper statistical analysis, no pattern geographic pattern emerges between how police report crimes and how citizens report complaints against police.
library(png)
library(jpeg)
library(grid)
img<-readPNG("~/Umich Drive (kaplandf@umich.edu)/Classes/Fall 2018/SW 513/QGIS Assignment/Illustrator DPD Map.png")
grid.raster(img)
Analyzing the DPD’s complaint data reveals important information about how Detroit citizens and police relate to each other. The data reveals:
The most significant finding from this analysis was that only one racial group has a consistent relationship with all Police officers: Black citizens. Further analysis is needed in order to determine whether this finding means that:
Other studies suggest that these findings indicate a consistent bias against Black citizens among all Detroit police officers.
Image of a police-involved shooting protest in downtown Detroit, courtesy of Michigan Radio
This study invites opportunities for further research for understanding police misconduct in Detroit. Most of this report’s data about police officers are not meaningful without knowing more about the Detroit Police Department’s racial demographics. The percentage of total police officers by racial group may reveal information about race as a factor in how officers receive complaints. For example, given that 47% of complaints are directed toward Black officers, is Detroit’s police force approximately 47% Black?
Future research could also explore more geographic relationships around police misconduct. Potential research questions include:
Until these questions can be answered, knowledge about police misconduct remains incomplete. Considering the substantial harm police misconduct causes Detroit’s Black population, resolving these questions is of paramount importance.