Hate Crime Assignment

Author

Paul Daniel-Orie

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

library(tidyverse)
#tinytex::install_tinytex()
#library(tinytex)
setwd("C:/Users/Owner/Downloads")
hatecrimes <- read_csv("hateCrimes2010.csv")

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)
hatecrimplot

Look 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")
plot2

We 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")
plot3

So 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")
plot4

How 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: -

    1. 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. -
    1. 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.