library(tidyverse)
#tinytex::install_tinytex()
#library(tinytex)
setwd("C:/Users/Owner/Downloads")
hatecrimes <- read_csv("hateCrimes2010.csv")Hate Crime Assignment
Hate Crimes Dataset
This dataset looks at all types of hate crimes in New York counties by the type of hate crime from 2010 to 2016.
Load neccessary packages and libraries, and set working directory
Clean up the data:
Make all headers lowercase and remove spaces
After cleaning up the variable names, look at the structure of the data. Since there are 44 variables in this dataset, you can use “summary” to decide which hate crimes to focus on. In the output of “summary”, look at the min/max values. Some have a max-vale of 1.
names(hatecrimes) <- tolower(names(hatecrimes))
names(hatecrimes) <- gsub(" ","_", names(hatecrimes))
head(hatecrimes)# A tibble: 6 × 44
county year crime_type `anti-male` `anti-female` `anti-transgender`
<chr> <dbl> <chr> <dbl> <dbl> <dbl>
1 Albany 2016 Crimes Against Pe… 0 0 0
2 Albany 2016 Property Crimes 0 0 0
3 Allegany 2016 Property Crimes 0 0 0
4 Bronx 2016 Crimes Against Pe… 0 0 4
5 Bronx 2016 Property Crimes 0 0 0
6 Broome 2016 Crimes Against Pe… 0 0 0
# ℹ 38 more variables: `anti-gender_identity_expression` <dbl>,
# `anti-age*` <dbl>, `anti-white` <dbl>, `anti-black` <dbl>,
# `anti-american_indian/alaskan_native` <dbl>, `anti-asian` <dbl>,
# `anti-native_hawaiian/pacific_islander` <dbl>,
# `anti-multi-racial_groups` <dbl>, `anti-other_race` <dbl>,
# `anti-jewish` <dbl>, `anti-catholic` <dbl>, `anti-protestant` <dbl>,
# `anti-islamic_(muslim)` <dbl>, `anti-multi-religious_groups` <dbl>, …
Select only certain hate-crimes
summary(hatecrimes) county year crime_type anti-male
Length:423 Min. :2010 Length:423 Min. :0.000000
Class :character 1st Qu.:2011 Class :character 1st Qu.:0.000000
Mode :character Median :2013 Mode :character Median :0.000000
Mean :2013 Mean :0.007092
3rd Qu.:2015 3rd Qu.:0.000000
Max. :2016 Max. :1.000000
anti-female anti-transgender anti-gender_identity_expression
Min. :0.00000 Min. :0.00000 Min. :0.00000
1st Qu.:0.00000 1st Qu.:0.00000 1st Qu.:0.00000
Median :0.00000 Median :0.00000 Median :0.00000
Mean :0.01655 Mean :0.04728 Mean :0.05674
3rd Qu.:0.00000 3rd Qu.:0.00000 3rd Qu.:0.00000
Max. :1.00000 Max. :5.00000 Max. :3.00000
anti-age* anti-white anti-black
Min. :0.00000 Min. : 0.0000 Min. : 0.000
1st Qu.:0.00000 1st Qu.: 0.0000 1st Qu.: 0.000
Median :0.00000 Median : 0.0000 Median : 1.000
Mean :0.05201 Mean : 0.3357 Mean : 1.761
3rd Qu.:0.00000 3rd Qu.: 0.0000 3rd Qu.: 2.000
Max. :9.00000 Max. :11.0000 Max. :18.000
anti-american_indian/alaskan_native anti-asian
Min. :0.000000 Min. :0.0000
1st Qu.:0.000000 1st Qu.:0.0000
Median :0.000000 Median :0.0000
Mean :0.007092 Mean :0.1773
3rd Qu.:0.000000 3rd Qu.:0.0000
Max. :1.000000 Max. :8.0000
anti-native_hawaiian/pacific_islander anti-multi-racial_groups anti-other_race
Min. :0 Min. :0.00000 Min. :0
1st Qu.:0 1st Qu.:0.00000 1st Qu.:0
Median :0 Median :0.00000 Median :0
Mean :0 Mean :0.08511 Mean :0
3rd Qu.:0 3rd Qu.:0.00000 3rd Qu.:0
Max. :0 Max. :3.00000 Max. :0
anti-jewish anti-catholic anti-protestant anti-islamic_(muslim)
Min. : 0.000 Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.000 Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 3.981 Mean : 0.2695 Mean :0.02364 Mean : 0.4704
3rd Qu.: 3.000 3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :82.000 Max. :12.0000 Max. :1.00000 Max. :10.0000
anti-multi-religious_groups anti-atheism/agnosticism
Min. : 0.00000 Min. :0
1st Qu.: 0.00000 1st Qu.:0
Median : 0.00000 Median :0
Mean : 0.07565 Mean :0
3rd Qu.: 0.00000 3rd Qu.:0
Max. :10.00000 Max. :0
anti-religious_practice_generally anti-other_religion anti-buddhist
Min. :0.000000 Min. :0.000 Min. :0
1st Qu.:0.000000 1st Qu.:0.000 1st Qu.:0
Median :0.000000 Median :0.000 Median :0
Mean :0.007092 Mean :0.104 Mean :0
3rd Qu.:0.000000 3rd Qu.:0.000 3rd Qu.:0
Max. :2.000000 Max. :4.000 Max. :0
anti-eastern_orthodox_(greek,_russian,_etc.) anti-hindu
Min. :0.000000 Min. :0.000000
1st Qu.:0.000000 1st Qu.:0.000000
Median :0.000000 Median :0.000000
Mean :0.002364 Mean :0.002364
3rd Qu.:0.000000 3rd Qu.:0.000000
Max. :1.000000 Max. :1.000000
anti-jehovahs_witness anti-mormon anti-other_christian anti-sikh
Min. :0 Min. :0 Min. :0.00000 Min. :0
1st Qu.:0 1st Qu.:0 1st Qu.:0.00000 1st Qu.:0
Median :0 Median :0 Median :0.00000 Median :0
Mean :0 Mean :0 Mean :0.01655 Mean :0
3rd Qu.:0 3rd Qu.:0 3rd Qu.:0.00000 3rd Qu.:0
Max. :0 Max. :0 Max. :3.00000 Max. :0
anti-hispanic anti-arab anti-other_ethnicity/national_origin
Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 0.3735 Mean :0.06619 Mean : 0.2837
3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :17.0000 Max. :2.00000 Max. :19.0000
anti-non-hispanic* anti-gay_male anti-gay_female
Min. :0 Min. : 0.000 Min. :0.0000
1st Qu.:0 1st Qu.: 0.000 1st Qu.:0.0000
Median :0 Median : 0.000 Median :0.0000
Mean :0 Mean : 1.499 Mean :0.2411
3rd Qu.:0 3rd Qu.: 1.000 3rd Qu.:0.0000
Max. :0 Max. :36.000 Max. :8.0000
anti-gay_(male_and_female) anti-heterosexual anti-bisexual
Min. :0.0000 Min. :0.000000 Min. :0.000000
1st Qu.:0.0000 1st Qu.:0.000000 1st Qu.:0.000000
Median :0.0000 Median :0.000000 Median :0.000000
Mean :0.1017 Mean :0.002364 Mean :0.004728
3rd Qu.:0.0000 3rd Qu.:0.000000 3rd Qu.:0.000000
Max. :4.0000 Max. :1.000000 Max. :1.000000
anti-physical_disability anti-mental_disability total_incidents
Min. :0.00000 Min. :0.000000 Min. : 1.00
1st Qu.:0.00000 1st Qu.:0.000000 1st Qu.: 1.00
Median :0.00000 Median :0.000000 Median : 3.00
Mean :0.01182 Mean :0.009456 Mean : 10.09
3rd Qu.:0.00000 3rd Qu.:0.000000 3rd Qu.: 10.00
Max. :1.00000 Max. :1.000000 Max. :101.00
total_victims total_offenders
Min. : 1.00 Min. : 1.00
1st Qu.: 1.00 1st Qu.: 1.00
Median : 3.00 Median : 3.00
Mean : 10.48 Mean : 11.77
3rd Qu.: 10.00 3rd Qu.: 11.00
Max. :106.00 Max. :113.00
I decided I would only look at the hate-crime types with a max number of 9 or more. That way I can focus on the most prominent types of hate-crimes.
hatecrimes2 <- hatecrimes |>
select(county, year, `anti-black`, `anti-white`, `anti-jewish`, `anti-catholic`, `anti-age*`, `anti-islamic_(muslim)`, `anti-multi-religious_groups`, `anti-gay_male`, `anti-hispanic`, `anti-other_ethnicity/national_origin`) |>
group_by(county, year)
head(hatecrimes2)# A tibble: 6 × 12
# Groups: county, year [4]
county year `anti-black` `anti-white` `anti-jewish` `anti-catholic`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Albany 2016 1 0 0 0
2 Albany 2016 2 0 0 0
3 Allegany 2016 1 0 0 0
4 Bronx 2016 0 1 0 0
5 Bronx 2016 0 1 1 0
6 Broome 2016 1 0 0 0
# ℹ 6 more variables: `anti-age*` <dbl>, `anti-islamic_(muslim)` <dbl>,
# `anti-multi-religious_groups` <dbl>, `anti-gay_male` <dbl>,
# `anti-hispanic` <dbl>, `anti-other_ethnicity/national_origin` <dbl>
Check the dimensions and the summary to make sure no missing values
Also check the dimensions to count how many variables remain
dim(hatecrimes2)[1] 423 12
# There are currently 12 variables with 423 rows.
summary(hatecrimes2) county year anti-black anti-white
Length:423 Min. :2010 Min. : 0.000 Min. : 0.0000
Class :character 1st Qu.:2011 1st Qu.: 0.000 1st Qu.: 0.0000
Mode :character Median :2013 Median : 1.000 Median : 0.0000
Mean :2013 Mean : 1.761 Mean : 0.3357
3rd Qu.:2015 3rd Qu.: 2.000 3rd Qu.: 0.0000
Max. :2016 Max. :18.000 Max. :11.0000
anti-jewish anti-catholic anti-age* anti-islamic_(muslim)
Min. : 0.000 Min. : 0.0000 Min. :0.00000 Min. : 0.0000
1st Qu.: 0.000 1st Qu.: 0.0000 1st Qu.:0.00000 1st Qu.: 0.0000
Median : 0.000 Median : 0.0000 Median :0.00000 Median : 0.0000
Mean : 3.981 Mean : 0.2695 Mean :0.05201 Mean : 0.4704
3rd Qu.: 3.000 3rd Qu.: 0.0000 3rd Qu.:0.00000 3rd Qu.: 0.0000
Max. :82.000 Max. :12.0000 Max. :9.00000 Max. :10.0000
anti-multi-religious_groups anti-gay_male anti-hispanic
Min. : 0.00000 Min. : 0.000 Min. : 0.0000
1st Qu.: 0.00000 1st Qu.: 0.000 1st Qu.: 0.0000
Median : 0.00000 Median : 0.000 Median : 0.0000
Mean : 0.07565 Mean : 1.499 Mean : 0.3735
3rd Qu.: 0.00000 3rd Qu.: 1.000 3rd Qu.: 0.0000
Max. :10.00000 Max. :36.000 Max. :17.0000
anti-other_ethnicity/national_origin
Min. : 0.0000
1st Qu.: 0.0000
Median : 0.0000
Mean : 0.2837
3rd Qu.: 0.0000
Max. :19.0000
Convert from wide to long format
Look at each set of hate-crimes for each type for each year. Convert the dataset from wide to long with the pivot_longer function. It will take each column’s hate-crime type combine them all into one column called “victim_cat”. Then each cell count will go into the new column, “crimecount”.
Finally, we are only doing this for the quantitative variables, which are in columns 3 - 10. Note the command facet_wrap requires (~) before “victim_cat”.
hatelong <- hatecrimes2 |>
pivot_longer(
cols = 3:12,
names_to = "victim_cat",
values_to = "crimecount")Now use the long format to create a facet plot
hatecrimplot <-hatelong |>
ggplot(aes(year, crimecount))+
geom_point()+
aes(color = victim_cat)+
facet_wrap(~victim_cat)
hatecrimplotLook deeper into crimes against blacks, gay males, and jews
From the facet_wrap plot above, anti-black, anti-gay males, and anti-jewish categories seem to have highest rates of offenses reported. Filter out just for those 3 crimes.
hatenew <- hatelong |>
filter( victim_cat %in% c("anti-black", "anti-jewish", "anti-gay_male"))|>
group_by(year, county) |>
arrange(desc(crimecount))
hatenew# A tibble: 1,269 × 4
# Groups: year, county [277]
county year victim_cat crimecount
<chr> <dbl> <chr> <dbl>
1 Kings 2012 anti-jewish 82
2 Kings 2016 anti-jewish 51
3 Suffolk 2014 anti-jewish 48
4 Suffolk 2012 anti-jewish 48
5 Kings 2011 anti-jewish 44
6 Kings 2013 anti-jewish 41
7 Kings 2010 anti-jewish 39
8 Nassau 2011 anti-jewish 38
9 Suffolk 2013 anti-jewish 37
10 Nassau 2016 anti-jewish 36
# ℹ 1,259 more rows
Plot these three types of hate crimes together
Use the following commands to finalize your barplot: - position = “dodge” makes side-by-side bars, rather than stacked bars - stat = “identity” allows you to plot each set of bars for each year between 2010 and 2016 - ggtitle gives the plot a title - labs gives a title to the legend
plot2 <- hatenew |>
ggplot() +
geom_bar(aes(x=year, y=crimecount, fill = victim_cat),
position = "dodge", stat = "identity") +
labs(fill = "Hate Crime Type",
y = "Number of Hate Crime Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot2We can see that hate crimes against Jews spiked in 2012. All other years were relatively consistent with a slight upward trend. There was also an upward trend in hate crimes against gay males. Finally, there appears to be a downward trend in hate crimes against blacks during this period.
What about the counties?
I have not dealt with the counties, but I think that is the next place to explore. I can make bar graphs by county instead of by year.
plot3 <- hatenew |>
ggplot() +
geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
position = "dodge", stat = "identity") +
labs(fill = "Hate Crime Type",
y = "Number of Hate Crime Incidents",
title = "Hate Crime Type in NY Counties Between 2010-2016",
caption = "Source: NY State Division of Criminal Justice Services")
plot3So many counties
There are too many counties for this plot to make sense, but maybe we can just look at the 5 counties with the highest number of incidents. - use “group_by” to group each row by counties - use summarize to get the total sum of incidents by county - use arrange(desc) to arrange those sums of total incidents by counties in descending order.
counties <- hatenew |>
group_by(year, county)|>
summarize(sum = sum(crimecount))|>
arrange(desc(sum))`summarise()` has grouped output by 'year'. You can override using the
`.groups` argument.
counties# A tibble: 277 × 3
# Groups: year [7]
year county sum
<dbl> <chr> <dbl>
1 2012 Kings 136
2 2010 Kings 110
3 2016 Kings 101
4 2013 Kings 96
5 2014 Kings 94
6 2015 Kings 90
7 2011 Kings 86
8 2016 New York 86
9 2012 Suffolk 83
10 2013 New York 75
# ℹ 267 more rows
Top 5
To list the 5 counties with the highest total incidents, change group_by to: group_by(county), then use slice_max(order_by = sum, n=5) to list the 5 counties with highest total incidents
counties2 <- hatenew |>
group_by(county)|>
summarize(sum = sum(crimecount)) |>
slice_max(order_by = sum, n=5)
counties2# A tibble: 5 × 2
county sum
<chr> <dbl>
1 Kings 713
2 New York 459
3 Suffolk 360
4 Nassau 298
5 Queens 235
Finally, create the barplot above, but only for the 5 counties in 2012 with the highest incidents of hate-crimes. The command “labs” is nice, because you can get a title, subtitle, y-axis label, and legend title, all in one command.
plot4 <- hatenew |>
filter(county %in% c("Kings", "New York", "Suffolk", "Nassau", "Queens")) |>
ggplot() +
geom_bar(aes(x=county, y=crimecount, fill = victim_cat),
position = "dodge", stat = "identity") +
labs(y = "Number of Hate Crime Incidents",
title = "5 Counties in NY with Highest Incidents of Hate Crimes",
subtitle = "Between 2010-2016",
fill = "Hate Crime Type",
caption = "Source: NY State Division of Criminal Justice Services")
plot4How would calculations be affected by looking at hate crimes in counties per year by population densities?
Bring in census data for populations of New York counties. These are estimates from the 2010 census.
setwd("C:/Users/Owner/Downloads")
nypop <- read_csv("newyorkpopulation.csv")
nypop# A tibble: 62 × 8
Geography `2010` `2011` `2012` `2013` `2014` `2015` `2016`
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Albany County, New York 3.04e5 3.05e5 3.06e5 3.07e5 3.08e5 3.08e5 3.09e5
2 Allegany County, New York 4.89e4 4.88e4 4.82e4 4.80e4 4.78e4 4.74e4 4.71e4
3 Bronx County, New York 1.39e6 1.40e6 1.41e6 1.43e6 1.44e6 1.45e6 1.46e6
4 Broome County, New York 2.00e5 1.99e5 1.99e5 1.98e5 1.98e5 1.97e5 1.95e5
5 Cattaraugus County, New York 8.02e4 7.98e4 7.94e4 7.90e4 7.86e4 7.79e4 7.77e4
6 Cayuga County, New York 7.98e4 7.98e4 7.96e4 7.92e4 7.89e4 7.83e4 7.79e4
7 Chautauqua County, New York 1.35e5 1.34e5 1.33e5 1.33e5 1.32e5 1.31e5 1.30e5
8 Chemung County, New York 8.90e4 8.90e4 8.93e4 8.85e4 8.75e4 8.71e4 8.63e4
9 Chenango County, New York 5.04e4 5.03e4 4.99e4 4.95e4 4.94e4 4.90e4 4.86e4
10 Clinton County, New York 8.21e4 8.19e4 8.19e4 8.17e4 8.17e4 8.12e4 8.11e4
# ℹ 52 more rows
Clean the county name to match the other dataset
Rename the variable “Geography” as “county” so that it matches in the other dataset.
nypop$Geography <- gsub(" , New York", "", nypop$Geography)
nypop$Geography <- gsub("County", "", nypop$Geography)
nypoplong <- nypop |>
rename(county = Geography) |>
gather("year", "population", 2:8)
nypoplong$year <- as.double(nypoplong$year)
head(nypoplong)# A tibble: 6 × 3
county year population
<chr> <dbl> <dbl>
1 Albany , New York 2010 304078
2 Allegany , New York 2010 48949
3 Bronx , New York 2010 1388240
4 Broome , New York 2010 200469
5 Cattaraugus , New York 2010 80249
6 Cayuga , New York 2010 79844
summary(nypop) Geography 2010 2011 2012
Length:62 Min. : 4834 Min. : 4834 Min. : 4797
Class :character 1st Qu.: 51156 1st Qu.: 51101 1st Qu.: 50674
Mode :character Median : 91364 Median : 91124 Median : 91138
Mean : 312946 Mean : 314831 Mean : 316174
3rd Qu.: 231151 3rd Qu.: 231011 3rd Qu.: 231184
Max. :2510240 Max. :2543667 Max. :2572282
2013 2014 2015 2016
Min. : 4760 Min. : 4689 Min. : 4698 Min. : 4542
1st Qu.: 50407 1st Qu.: 50118 1st Qu.: 49880 1st Qu.: 49559
Median : 90446 Median : 89668 Median : 89230 Median : 88560
Mean : 317315 Mean : 318041 Mean : 318503 Mean : 318472
3rd Qu.: 231402 3rd Qu.: 231083 3rd Qu.: 230554 3rd Qu.: 230156
Max. :2595344 Max. :2612544 Max. :2624941 Max. :2629150
Focus on 2012
Since 2012 had the highest counts of hate crimes, let’s look at the populations of the counties in 2012.
Clean the nypoplong12 variable, county, so that matches the counties12 variable by Cutting off the “, New York” portion of the county listing
nypoplong12 <- nypoplong |>
filter(year == 2012) |>
arrange(desc(population)) |>
head(10)
nypoplong12$county<-gsub(" , New York","",nypoplong12$county)
nypoplong12# A tibble: 10 × 3
county year population
<chr> <dbl> <dbl>
1 Kings 2012 2572282
2 Queens 2012 2278024
3 New York 2012 1625121
4 Suffolk 2012 1499382
5 Bronx 2012 1414774
6 Nassau 2012 1350748
7 Westchester 2012 961073
8 Erie 2012 920792
9 Monroe 2012 748947
10 Richmond 2012 470978
Not surprisingly, 4/5 of the counties with the highest populations also were listed in the counties with the highest number of hate crimes. Only the Bronx, which has the fifth highest population is not in the list with the highest number of total hate crimes over the period from 2010 to 2016.
Recall the total hate crime counts:
Kings 713 New York 459 Suffolk 360 Nassau 298 Queens 235
Filter hate crimes just for 2012 as well
counties12 <- counties |>
filter(year == 2012) |>
arrange(desc(sum))
counties12# A tibble: 41 × 3
# Groups: year [1]
year county sum
<dbl> <chr> <dbl>
1 2012 Kings 136
2 2012 Suffolk 83
3 2012 New York 71
4 2012 Nassau 48
5 2012 Queens 48
6 2012 Erie 28
7 2012 Bronx 23
8 2012 Richmond 18
9 2012 Multiple 14
10 2012 Westchester 13
# ℹ 31 more rows
Join the Hate Crimes data with NY population data for 2012
datajoin <- counties12 |>
full_join(nypoplong12, by=c("county", "year"))
datajoin# A tibble: 41 × 4
# Groups: year [1]
year county sum population
<dbl> <chr> <dbl> <dbl>
1 2012 Kings 136 2572282
2 2012 Suffolk 83 1499382
3 2012 New York 71 1625121
4 2012 Nassau 48 1350748
5 2012 Queens 48 2278024
6 2012 Erie 28 920792
7 2012 Bronx 23 1414774
8 2012 Richmond 18 470978
9 2012 Multiple 14 NA
10 2012 Westchester 13 961073
# ℹ 31 more rows
Calculate the rate of incidents per 100,000. Then arrange in descending order
datajoinrate <- datajoin |>
mutate(rate = sum/population*100000) |>
arrange(desc(rate))
datajoinrate# A tibble: 41 × 5
# Groups: year [1]
year county sum population rate
<dbl> <chr> <dbl> <dbl> <dbl>
1 2012 Suffolk 83 1499382 5.54
2 2012 Kings 136 2572282 5.29
3 2012 New York 71 1625121 4.37
4 2012 Richmond 18 470978 3.82
5 2012 Nassau 48 1350748 3.55
6 2012 Erie 28 920792 3.04
7 2012 Queens 48 2278024 2.11
8 2012 Bronx 23 1414774 1.63
9 2012 Westchester 13 961073 1.35
10 2012 Monroe 5 748947 0.668
# ℹ 31 more rows
Notice that the highest rates of hate crimes in 2012 happened in:
dt <- datajoinrate[,c("county","rate")]
dt# A tibble: 41 × 2
county rate
<chr> <dbl>
1 Suffolk 5.54
2 Kings 5.29
3 New York 4.37
4 Richmond 3.82
5 Nassau 3.55
6 Erie 3.04
7 Queens 2.11
8 Bronx 1.63
9 Westchester 1.35
10 Monroe 0.668
# ℹ 31 more rows
But the highest populated counties were: Kings (Brooklyn), Queens, New York, Suffolk (Long Island), Bronx, and Nassau. They do not correspond directly, though they are similar, to the counties with highest rates of hate crimes.
Follow Up
aggregategroups <- hatecrimes |>
pivot_longer(
cols = 4:44,
names_to = "victim_cat",
values_to = "crimecount"
)
unique(aggregategroups$victim_cat) [1] "anti-male"
[2] "anti-female"
[3] "anti-transgender"
[4] "anti-gender_identity_expression"
[5] "anti-age*"
[6] "anti-white"
[7] "anti-black"
[8] "anti-american_indian/alaskan_native"
[9] "anti-asian"
[10] "anti-native_hawaiian/pacific_islander"
[11] "anti-multi-racial_groups"
[12] "anti-other_race"
[13] "anti-jewish"
[14] "anti-catholic"
[15] "anti-protestant"
[16] "anti-islamic_(muslim)"
[17] "anti-multi-religious_groups"
[18] "anti-atheism/agnosticism"
[19] "anti-religious_practice_generally"
[20] "anti-other_religion"
[21] "anti-buddhist"
[22] "anti-eastern_orthodox_(greek,_russian,_etc.)"
[23] "anti-hindu"
[24] "anti-jehovahs_witness"
[25] "anti-mormon"
[26] "anti-other_christian"
[27] "anti-sikh"
[28] "anti-hispanic"
[29] "anti-arab"
[30] "anti-other_ethnicity/national_origin"
[31] "anti-non-hispanic*"
[32] "anti-gay_male"
[33] "anti-gay_female"
[34] "anti-gay_(male_and_female)"
[35] "anti-heterosexual"
[36] "anti-bisexual"
[37] "anti-physical_disability"
[38] "anti-mental_disability"
[39] "total_incidents"
[40] "total_victims"
[41] "total_offenders"
aggregategroups <- aggregategroups |>
mutate(group = case_when(
victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual") ~ "anti-lgbtq",
victim_cat %in% c("anti-multi-racialgroups", "anti-jewish", "anti-protestant", "anti-multi-religousgroups", "anti-religiouspracticegenerally", "anti-buddhist", "anti-hindu", "anti-mormon", "anti-sikh", "anti-catholic", "anti-islamic(muslim)", "anti-atheism/agnosticism", "anti-otherreligion", "anti-easternorthodox(greek,russian,etc.)", "anti-jehovahswitness", "anti-otherchristian") ~ "anti-religion",
victim_cat %in% c("anti-asian", "anti-arab", "anti-non-hispanic", "anti-white", "anti-americanindian/alaskannative", "anti-nativehawaiian/pacificislander", "anti-otherrace", "anti-hispanic", "anti-otherethnicity/nationalorigin") ~ "anti-ethnicity",
victim_cat %in% c("anti-physicaldisability", "anti-mentaldisability") ~ "anti-disability",
victim_cat %in% c("anti-female", "anti-male") ~ "anti-gender",
TRUE ~ "others"))
aggregategroups# A tibble: 17,343 × 6
county year crime_type victim_cat crimecount group
<chr> <dbl> <chr> <chr> <dbl> <chr>
1 Albany 2016 Crimes Against Persons anti-male 0 anti…
2 Albany 2016 Crimes Against Persons anti-female 0 anti…
3 Albany 2016 Crimes Against Persons anti-transgender 0 anti…
4 Albany 2016 Crimes Against Persons anti-gender_identity_ex… 0 othe…
5 Albany 2016 Crimes Against Persons anti-age* 0 othe…
6 Albany 2016 Crimes Against Persons anti-white 0 anti…
7 Albany 2016 Crimes Against Persons anti-black 1 othe…
8 Albany 2016 Crimes Against Persons anti-american_indian/al… 0 othe…
9 Albany 2016 Crimes Against Persons anti-asian 0 anti…
10 Albany 2016 Crimes Against Persons anti-native_hawaiian/pa… 0 othe…
# ℹ 17,333 more rows
or create subset with just lgbtq
lgbtq <- hatecrimes |>
pivot_longer(
cols = 4:44,
names_to = "victim_cat",
values_to = "crimecount") |>
filter(victim_cat %in% c("anti-transgender", "anti-gayfemale", "anti-gendervictim_catendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual"))
lgbtq# A tibble: 846 × 5
county year crime_type victim_cat crimecount
<chr> <dbl> <chr> <chr> <dbl>
1 Albany 2016 Crimes Against Persons anti-transgender 0
2 Albany 2016 Crimes Against Persons anti-bisexual 0
3 Albany 2016 Property Crimes anti-transgender 0
4 Albany 2016 Property Crimes anti-bisexual 0
5 Allegany 2016 Property Crimes anti-transgender 0
6 Allegany 2016 Property Crimes anti-bisexual 0
7 Bronx 2016 Crimes Against Persons anti-transgender 4
8 Bronx 2016 Crimes Against Persons anti-bisexual 0
9 Bronx 2016 Property Crimes anti-transgender 0
10 Bronx 2016 Property Crimes anti-bisexual 0
# ℹ 836 more rows
So what does all of this mean?
Analysis of the Hate Crimes Dataset for New York in 2010
The analysis of hate crime data for New York in 2010 presents a comprehensive yet challenging endeavor. The primary aim is to understand the scope, completeness, and implications of the dataset while highlighting key findings and limitations.
Positive Aspects: The dataset encompasses a wide range of hate crime categories, allowing for a detailed examination of various bias-motivated incidents. The temporal coverage for 2010 provides a snapshot that facilitates trend analysis. Additionally, the geographical breakdown by county enables localized analyses, helping to identify regional patterns and hotspots.
Negative Aspects: Despite its comprehensiveness, the dataset suffers from inconsistencies and underreporting. The presence of numerous zeros and missing data points suggests potential flaws in the data collection process. Furthermore, the small sample size relative to the population limits the statistical power of the analysis, making it challenging to draw robust and generalized conclusions. Hypothetical Paths of Study: -
- Social-Economic Trends Leading to Hate Crimes: This study aims to identify socio-economic factors that correlate with the incidence of hate crimes. By integrating the hate crimes dataset with socio-economic data such as income levels, unemployment rates, and education attainment, researchers could uncover significant predictors through regression analysis. -
- Impact of “The Danger of a Single Story”: This path explores how stereotypes and single narratives contribute to the prevalence of hate crimes. Analyzing hate crime data alongside media coverage and public perception surveys would help examine the influence of dominant narratives on hate crime rates. Follow-Up Actions: To address the limitations observed, enhancing data collection efforts is essential. Involving multiple independent sources, including law enforcement agencies, community organizations, and victim reports, can capture a more accurate picture of hate crimes.
Additionally, supplementing the dataset with contextual information, such as socio-economic conditions and political climate, will enable a deeper understanding of the factors influencing hate crime trends.