On April 9th, voters in New Orleans rejected a proposal to increase funding for police and fire departments. Crime rates are a recurring source of concern in New Orleans, and this vote prompts the question: what is the relationship between police presence and crime in New Orleans?
The data for this post (both on crime rates and on the number of police officers) come from the Federal Bureau of Investigation's Uniform Crime Reporting (UCR) program.
Analyses of this sort are inevitably controversial and subject to accusations of partisan bias. To minimize these concerns, I have deliberately kept the models simple. I do, however, control for the nation-wide decline in crime since the 1990's. A variety of reasons have been proposed for this decline, most notably the decreased use of lead in gasoline and paint. Incorporating information on this overall trend allows us to model the impact that police staffing has on crime above and beyond the overall, nationwide decrease. As is typical in analyses on crime, I use information on population coverage to convert crime reports to crime rates, or the number of incidents per 100,000 citizens. This controls for fluctuating population levels and their associated impact on number of incidents.
For those who are more interested in the answer to this post's question than in obtaining the data or in the R code to run the analyses, I recommend skipping to the Statistical Models section, below, which is followed by the findings.
Obtain the data
The crime data is available from the UCR website by following the UCR Data Tool link to the "Table-building tool" link. For New Orleans data, select the "Single agency reported crime" table type, then "Lousiana" from the drop-down menu for state and "Cities from 250,000 to 499,999" for the population group. Select "New Orleans Police Department" as the agency and "Number of violent crimes" for the violent crime data and "Number of property crimes" for the property crime data. I converted the data from these two tables to .txt files, which I import into R. The table tool only provides data from 1985-2012, but you can obtain 2013 and 2014 data from separate links with UCR data by individual year. Twenty-fifteen data is unfortunately not yet available in its entirety - only the preliminary report for the first half of the year is posted. For that reason, these analyses omit 2015 data.
You can obtain the national crime data through 2012 from the table-building tool referenced above. Select "All States and U.S. Total" instead of "Agencies". For the national crime data for 2013 and 2014, go to the UCR report for 2014, click on "Violent Crime", and select "Table 1".
Information on number of police officers is also available from the UCR website by navigating to the reports by individual year. For years 1995-2003, the data is contained in .pdf documents under "Section VI - Law Enforcement Personnel (pdf)". For 2004 - present, select the link for "Police Employee Data" and click Table 78 (Full-time Law Enforcement Employees by State) within that year's data. Assembling the data is a bit onerous, and requires clicking through for each year. My code provides a vector with these values. New Orleans data are missing for years 2009 and 2014, and in these cases, I supplement with information from a recent blog post on police recruitment efforts, with data on historical staffing data.
Prepare the data
The code below imports text files I created with the violent crime data and property crime data for New Orleans, omits data from 2005 (the year of Hurricane Katrina; 6 months of data are missing so the numbers are not comparable to other years), adds 2013 and 2014 data, and calculates crime rates.
################### # New Orleans, LA # ################### nola <- read.table("nola.txt", header=FALSE, sep=",", skip=0, stringsAsFactors=FALSE, strip.white=TRUE, quote = NULL) colnames(nola) <- c("year", "Months", "pop.coverage", "violent.crime", "murders", "rape", "robbery", "assault") nola2 <- read.table("nola2.txt", header=FALSE, sep=",", skip=0, stringsAsFactors=FALSE, strip.white=TRUE, quote = NULL) colnames(nola2) <- c("year", "Months", "pop.coverage", "property.crime", "burglary", "larceny", "vehicle") nola <- merge(nola, nola2, by=c("year", "Months", "pop.coverage"), all=TRUE) remove(nola2) # Remove 2005 b/c only have 6 months of data nola <- subset(nola, year != 2005) # https://www.fbi.gov/about-us/cjis/ucr/crime-in-the-u.s/ # Only preliminary data is available for 2015 year.2013 <- c(2013, NA, 377022, 2965, 156, 176, 1138, 1495, 14525, 3203, 9179, 2143) year.2014 <- c(2014, NA, 387113, 3770, 150, 244, 1470, 1906, 16382, 3458, 10309, 2615) nola <- rbind(nola, year.2013, year.2014) remove(year.2013, year.2014) nola$nola.violent.crime.rate <- (nola$violent.crime*100000)/nola$pop.coverage nola$nola.property.crime.rate <- (nola$property.crime*100000)/nola$pop.coverage
The code below does the same for US-wide crime data, with one notable difference: New Orleans population values and crime rates are subtracted from the national population values and crime rates, to ensure that the control variable(s) for national crime trends exclude New Orleans data.
########################## # United States - totals # ########################## us <- read.table("us.txt", header=FALSE, sep=",", skip=0, stringsAsFactors=FALSE, strip.white=TRUE, quote = NULL) colnames(us) <- c("year", "us.pop.coverage", "us.violent.crime", "us.murders", "us.rape", "us.robbery", "us.assault") us2 <- read.table("us2.txt", header=FALSE, sep=",", skip=0, stringsAsFactors=FALSE, strip.white=TRUE, quote = NULL) colnames(us2) <- c("year", "us.pop.coverage", "us.property.crime", "us.burglary", "us.larceny", "us.vehicle") us <- merge(us, us2, by=c("year","us.pop.coverage"), all=TRUE) remove(us2) # https://www.fbi.gov/about-us/cjis/ucr/crime-in-the-u.s/ # Only preliminary data is available for 2015 year.2013 <- c(2013, 316128839, 1163146, 14196, 82109, 345031, 724149, 8632512, 1928465, 6004453, 699594) year.2014 <- c(2014, 318857056, 1165383, 14249, 84041, 325802, 741291, 8277829, 1729806, 5858496, 689527) us <- rbind(us, year.2013, year.2014) remove(year.2013, year.2014) crime <- merge(nola, us, by="year", all=TRUE) # Need to subtract out NOLA numbers crime$us.pop.coverage <- crime$us.pop.coverage - crime$pop.coverage crime$us.violent.crime <- crime$us.violent.crime - crime$violent.crime crime$us.property.crime <- crime$us.property.crime - crime$property.crime # Now calculate US crime rates crime$us.violent.crime.rate <- (crime$us.violent.crime*100000)/crime$us.pop.coverage crime$us.property.crime.rate <- (crime$us.property.crime*100000)/crime$us.pop.coverage
Police Employment data
As described above, the police data can be found by clicking through the UCR reports for each individual year since 1995. Below, I compile this data into a vector and add it to the crime dataset created during the last step.
########################## # Police employment data # ########################## year <- seq(1995, 2015, 1) police <- c(1372,1302,1480,1635,1633,1658,1627,1613,1612,1661,1671,1424,1416, 1448,1450,1452,1349,1271,1210,1132,1163) police <- as.data.frame(cbind(year, police)) remove(year) crime <- merge(police, crime, by="year", all=TRUE) remove(police)
At this time, police employment data is only available starting in 1995, so unfortunately we won't be able to use the 1985-1994 crime data for these models.
crime <- subset(crime, year >= 1995)
This post may interest a wider audience than some of my more technical posts, so permit me to include a brief introduction to the statistical approach. To examine the relationship between police staffing and crime in New Orleans, I used multiple regression. Regression tests the relationship between a predictor (e.g., police staffing) and an outcome variable (e.g., crime) to determine whether they covary together. In this sense, it’s very similar to a correlation. (In fact, if you only have one predictor in your model, the correlation and regression results are identical, even though they’re presented a little differently.) An advantage of regression is that it can accommodate multiple predictors, and allow you to assess the unique contribution of each, independent of the others. It may be helpful here to picture a Venn diagram with three overlapping circles. In the diagram pictured above, the test for the impact of New Orleans police staffing on New Orleans crime corresponds to the sliver of the crime circle labeled a, with the orange triangle between a and b removed. The impact of nationwide crime on New Orleans-specific crime corresponds to the portion of the crime circle labeled b, once again minus the orange triangle between police staffing and nationwide crime.
The R output from a regression model includes separate lines for each predictor in the model (labeled with the name of that variable’s name in the dataset), with the estimate for the impact that predictor has on the outcome variable and the results of the test to determine whether that predictor is significantly related to the outcome variable. The output will also include a test for the intercept, but we can ignore that for our purposes.
The results indicate a clear, statistically-significant impact of police staffing on violent crime in New Orleans (p=0.00697). In other words, police staffing and violent crime are related to each other. The parameter estimate for this relationship is -1.0097, indicating two things. First, the relationship is negative, so each additional police officer is associated with a decrease in crime. Second, the value itself gives a sense for the magnitude of the decrease - each additional police officer on the police force is associated with a decrease of about 1 violent crime incident per every 100,000 citizens (because we're working with crime rates here), after controlling for the general, national decrease in violent crime. The two omitted observations, noted in the output, refer to 2005 (for which annual New Orleans crime data is not available) and 2015 (for which the annual crime totals have not yet been released by UCR).
violent.crime.model <- lm(nola.violent.crime.rate ~ police + us.violent.crime.rate, data = crime) summary(violent.crime.model)
It's a little tricky to graph the relationship between New Orleans crime and New Orleans police staffing because we're actually modeling the relationship after removing the impact of nationwide crime, but one way to do this is to regress New Orleans crime on nationwide crime, save the standardized residuals, and plot them against New Orleans police staffing:
nationwide.lm <- lm(nola.violent.crime.rate ~ us.violent.crime.rate, data=crime) summary(nationwide.lm) nola.violent.crime.z <- rstandard(nationwide.lm) graph.data <- subset(crime, year != 2005 & year != 2015) graph.data <- cbind(graph.data, nola.violent.crime.z) library(ggplot2) ggplot(graph.data, aes(x=police, y=nola.violent.crime.z)) + geom_point() + geom_text(aes(label=year), size=4) + geom_smooth(method=lm)
This produces the graph to the left, which illustrates the negative relationship between crime and police staffing. As the police force grows, violent crime decreases. I've labeled each data point with its year, and you can see that the two years after Hurricane Katrina (2006 and 2007) don't fit the model quite as well - this may reflect instability as the city rebuilt. The negative relationship between police presence and violent crime remains significant, even when I omit years 2006, 2007, and 1996 (which looks like it was an unusually violent year).
As is always the case with correlational data, we can't claim that these data unequivocally prove that police staffing directly influences violent crime - there is always the possibility that some other, unaccounted-for factor (that somehow doesn't influence the rest of the country) causes crime to go up and police staffing to go down in New Orleans. Nonetheless, the pattern we see in the data is consistent with what we'd expect to see if police staffing has a direct, negative effect on violent crime.
The results from the property crime model are a bit less compelling. Here, the impact of police staffing on crime in not significant (p=0.21), although the direction of the effect is negative, as we'd expect if greater police presence is a crime deterrent. It's possible that the impact of police presence on property crime is more subtle than its impact on violent crime, and that a larger sample with additional years of data is necessary to detect a significant effect.
property.crime.model <- lm(nola.property.crime.rate ~ police + us.property.crime.rate, data = crime) summary(property.crime.model)
Complete code for this post is available in one file on GitHub at: https://github.com/kc001/Blog_code/blob/master/2016.05%20NOLA%20Police%20and%20crime.R