Hate Crimes Dataset

Flawed hate crime data collection - we should know how the data was collected

(Nathan Yau of Flowing Data, Dec 5, 2017)

So now we know that there is possible bias in the dataset, what can we do with it?

library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.7
## v tidyr   1.1.4     v stringr 1.4.0
## v readr   2.1.1     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
#tinytex::install_tinytex()
library(tinytex)
setwd("C:/Users/wrxio/projects/Data110/Datasets")
hatecrimes <- read_csv("hateCrimes2010.csv")
## Rows: 423 Columns: 44
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr  (2): County, Crime Type
## dbl (42): Year, Anti-Male, Anti-Female, Anti-Transgender, Anti-Gender Identi...
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

Rows: 423 Columns: 44

– Column specification —————————————————————

Delimiter: “,”

chr (2): County, Crime Type

dbl (42): Year, Anti-Male, Anti-Female, Anti-Transgender, Anti-Gender Identity Expre…

i Use spec() to retrieve the full column specification for this data.

i Specify the column types or set show_col_types = FALSE to quiet this message.

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 considered 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))
names(hatecrimes)
##  [1] "county"                                  
##  [2] "year"                                    
##  [3] "crimetype"                               
##  [4] "anti-male"                               
##  [5] "anti-female"                             
##  [6] "anti-transgender"                        
##  [7] "anti-genderidentityexpression"           
##  [8] "anti-age*"                               
##  [9] "anti-white"                              
## [10] "anti-black"                              
## [11] "anti-americanindian/alaskannative"       
## [12] "anti-asian"                              
## [13] "anti-nativehawaiian/pacificislander"     
## [14] "anti-multi-racialgroups"                 
## [15] "anti-otherrace"                          
## [16] "anti-jewish"                             
## [17] "anti-catholic"                           
## [18] "anti-protestant"                         
## [19] "anti-islamic(muslim)"                    
## [20] "anti-multi-religiousgroups"              
## [21] "anti-atheism/agnosticism"                
## [22] "anti-religiouspracticegenerally"         
## [23] "anti-otherreligion"                      
## [24] "anti-buddhist"                           
## [25] "anti-easternorthodox(greek,russian,etc.)"
## [26] "anti-hindu"                              
## [27] "anti-jehovahswitness"                    
## [28] "anti-mormon"                             
## [29] "anti-otherchristian"                     
## [30] "anti-sikh"                               
## [31] "anti-hispanic"                           
## [32] "anti-arab"                               
## [33] "anti-otherethnicity/nationalorigin"      
## [34] "anti-non-hispanic*"                      
## [35] "anti-gaymale"                            
## [36] "anti-gayfemale"                          
## [37] "anti-gay(maleandfemale)"                 
## [38] "anti-heterosexual"                       
## [39] "anti-bisexual"                           
## [40] "anti-physicaldisability"                 
## [41] "anti-mentaldisability"                   
## [42] "totalincidents"                          
## [43] "totalvictims"                            
## [44] "totaloffenders"
str(hatecrimes)
## spec_tbl_df [423 x 44] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ county                                  : chr [1:423] "Albany" "Albany" "Allegany" "Bronx" ...
##  $ year                                    : num [1:423] 2016 2016 2016 2016 2016 ...
##  $ crimetype                               : chr [1:423] "Crimes Against Persons" "Property Crimes" "Property Crimes" "Crimes Against Persons" ...
##  $ anti-male                               : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-female                             : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-transgender                        : num [1:423] 0 0 0 4 0 0 0 0 0 0 ...
##  $ anti-genderidentityexpression           : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-age*                               : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-white                              : num [1:423] 0 0 0 1 1 0 0 0 0 0 ...
##  $ anti-black                              : num [1:423] 1 2 1 0 0 1 0 1 0 2 ...
##  $ anti-americanindian/alaskannative       : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-asian                              : num [1:423] 0 0 0 0 0 1 0 0 0 0 ...
##  $ anti-nativehawaiian/pacificislander     : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-multi-racialgroups                 : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-otherrace                          : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-jewish                             : num [1:423] 0 0 0 0 1 0 1 0 0 0 ...
##  $ anti-catholic                           : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-protestant                         : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-islamic(muslim)                    : num [1:423] 1 0 0 6 0 0 0 0 1 0 ...
##  $ anti-multi-religiousgroups              : num [1:423] 0 1 0 0 0 0 0 0 0 0 ...
##  $ anti-atheism/agnosticism                : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-religiouspracticegenerally         : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-otherreligion                      : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-buddhist                           : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-easternorthodox(greek,russian,etc.): num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-hindu                              : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-jehovahswitness                    : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-mormon                             : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-otherchristian                     : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-sikh                               : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-hispanic                           : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-arab                               : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-otherethnicity/nationalorigin      : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-non-hispanic*                      : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-gaymale                            : num [1:423] 1 0 0 8 0 1 0 0 0 0 ...
##  $ anti-gayfemale                          : num [1:423] 0 0 0 1 0 0 0 0 0 0 ...
##  $ anti-gay(maleandfemale)                 : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-heterosexual                       : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-bisexual                           : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-physicaldisability                 : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ anti-mentaldisability                   : num [1:423] 0 0 0 0 0 0 0 0 0 0 ...
##  $ totalincidents                          : num [1:423] 3 3 1 20 2 3 1 1 1 2 ...
##  $ totalvictims                            : num [1:423] 4 3 1 20 2 3 1 1 1 2 ...
##  $ totaloffenders                          : num [1:423] 3 3 1 25 2 3 1 1 1 2 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   County = col_character(),
##   ..   Year = col_double(),
##   ..   `Crime Type` = col_character(),
##   ..   `Anti-Male` = col_double(),
##   ..   `Anti-Female` = col_double(),
##   ..   `Anti-Transgender` = col_double(),
##   ..   `Anti-Gender Identity Expression` = col_double(),
##   ..   `Anti-Age*` = col_double(),
##   ..   `Anti-White` = col_double(),
##   ..   `Anti-Black` = col_double(),
##   ..   `Anti-American Indian/Alaskan Native` = col_double(),
##   ..   `Anti-Asian` = col_double(),
##   ..   `Anti-Native Hawaiian/Pacific Islander` = col_double(),
##   ..   `Anti-Multi-Racial Groups` = col_double(),
##   ..   `Anti-Other Race` = col_double(),
##   ..   `Anti-Jewish` = col_double(),
##   ..   `Anti-Catholic` = col_double(),
##   ..   `Anti-Protestant` = col_double(),
##   ..   `Anti-Islamic (Muslim)` = col_double(),
##   ..   `Anti-Multi-Religious Groups` = col_double(),
##   ..   `Anti-Atheism/Agnosticism` = col_double(),
##   ..   `Anti-Religious Practice Generally` = col_double(),
##   ..   `Anti-Other Religion` = col_double(),
##   ..   `Anti-Buddhist` = col_double(),
##   ..   `Anti-Eastern Orthodox (Greek, Russian, etc.)` = col_double(),
##   ..   `Anti-Hindu` = col_double(),
##   ..   `Anti-Jehovahs Witness` = col_double(),
##   ..   `Anti-Mormon` = col_double(),
##   ..   `Anti-Other Christian` = col_double(),
##   ..   `Anti-Sikh` = col_double(),
##   ..   `Anti-Hispanic` = col_double(),
##   ..   `Anti-Arab` = col_double(),
##   ..   `Anti-Other Ethnicity/National Origin` = col_double(),
##   ..   `Anti-Non-Hispanic*` = col_double(),
##   ..   `Anti-Gay Male` = col_double(),
##   ..   `Anti-Gay Female` = col_double(),
##   ..   `Anti-Gay (Male and Female)` = col_double(),
##   ..   `Anti-Heterosexual` = col_double(),
##   ..   `Anti-Bisexual` = col_double(),
##   ..   `Anti-Physical Disability` = col_double(),
##   ..   `Anti-Mental Disability` = col_double(),
##   ..   `Total Incidents` = col_double(),
##   ..   `Total Victims` = col_double(),
##   ..   `Total Offenders` = col_double()
##   .. )
##  - attr(*, "problems")=<externalptr>

spec_tbl_df [423 x 44] (S3: spec_tbl_df/tbl_df/tbl/data.frame)

$ county : chr [1:423] “Albany” “Albany” “Allegany” “Bronx” …

$ year : num [1:423] 2016 2016 2016 2016 2016 …

$ crimetype : chr [1:423] “Crimes Against Persons” “Property Crimes” “Property Crimes” “Crimes Against Persons” …

$ anti-male : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-female : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-transgender : num [1:423] 0 0 0 4 0 0 0 0 0 0 …

$ anti-genderidentityexpression : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-age* : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-white : num [1:423] 0 0 0 1 1 0 0 0 0 0 …

$ anti-black : num [1:423] 1 2 1 0 0 1 0 1 0 2 …

$ anti-americanindian/alaskannative : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-asian : num [1:423] 0 0 0 0 0 1 0 0 0 0 …

$ anti-nativehawaiian/pacificislander : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-multi-racialgroups : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-otherrace : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-jewish : num [1:423] 0 0 0 0 1 0 1 0 0 0 …

$ anti-catholic : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-protestant : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-islamic(muslim) : num [1:423] 1 0 0 6 0 0 0 0 1 0 …

$ anti-multi-religiousgroups : num [1:423] 0 1 0 0 0 0 0 0 0 0 …

$ anti-atheism/agnosticism : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-religiouspracticegenerally : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-otherreligion : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-buddhist : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-easternorthodox(greek,russian,etc.): num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-hindu : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-jehovahswitness : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-mormon : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-otherchristian : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-sikh : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-hispanic : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-arab : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-otherethnicity/nationalorigin : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-non-hispanic* : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-gaymale : num [1:423] 1 0 0 8 0 1 0 0 0 0 …

$ anti-gayfemale : num [1:423] 0 0 0 1 0 0 0 0 0 0 …

$ anti-gay(maleandfemale) : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-heterosexual : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-bisexual : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-physicaldisability : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ anti-mentaldisability : num [1:423] 0 0 0 0 0 0 0 0 0 0 …

$ totalincidents : num [1:423] 3 3 1 20 2 3 1 1 1 2 …

$ totalvictims : num [1:423] 4 3 1 20 2 3 1 1 1 2 …

$ totaloffenders : num [1:423] 3 3 1 25 2 3 1 1 1 2 …

- attr(*, “spec”)=

.. cols(

.. County = col_character(),

.. Year = col_double(),

.. Crime Type = col_character(),

.. Anti-Male = col_double(),

.. Anti-Female = col_double(),

.. Anti-Transgender = col_double(),

.. Anti-Gender Identity Expression = col_double(),

.. Anti-Age* = col_double(),

.. Anti-White = col_double(),

.. Anti-Black = col_double(),

.. Anti-American Indian/Alaskan Native = col_double(),

.. Anti-American Indian/Alaskan Native = col_double(),

.. Anti-Asian = col_double(),

.. Anti-Native Hawaiian/Pacific Islander = col_double(),

.. Anti-Multi-Racial Groups = col_double(),

.. Anti-Other Race = col_double(),

.. Anti-Jewish = col_double(),

.. Anti-Catholic = col_double(),

.. Anti-Protestant = col_double(),

.. Anti-Islamic (Muslim) = col_double(),

.. Anti-Multi-Religious Groups = col_double(),

.. Anti-Atheism/Agnosticism = col_double(),

.. Anti-Religious Practice Generally = col_double(),

.. Anti-Other Religion = col_double(),

.. Anti-Buddhist = col_double(),

.. Anti-Eastern Orthodox (Greek, Russian, etc.) = col_double(),

.. Anti-Hindu = col_double(),

.. Anti-Jehovahs Witness = col_double(),

.. Anti-Mormon = col_double(),

.. Anti-Other Christian = col_double(),

.. Anti-Sikh = col_double(),

.. Anti-Hispanic = col_double(),

.. Anti-Arab = col_double(),

.. Anti-Other Ethnicity/National Origin = col_double(),

.. Anti-Non-Hispanic* = col_double(),

.. Anti-Gay Male = col_double(),

.. Anti-Gay Female = col_double(),

.. Anti-Gay (Male and Female) = col_double(),

.. Anti-Heterosexual = col_double(),

.. Anti-Bisexual = col_double(),

.. Anti-Physical Disability = col_double(),

.. Anti-Mental Disability = col_double(),

.. Total Incidents = col_double(),

.. Total Victims = col_double(),

.. Total Offenders = col_double()

.. )

- attr(*, “problems”)=

#summary(hatecrimes)

Select only certain hate-crimes

I decided I would only look at the hate-crime types with a max number or 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-gaymale', 'anti-hispanic') %>%
  group_by(county, year)
head(hatecrimes2)
## # A tibble: 6 x 10
## # 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
## # ... with 4 more variables: `anti-age*` <dbl>, `anti-islamic(muslim)` <dbl>,
## #   `anti-gaymale` <dbl>, `anti-hispanic` <dbl>

# A tibble: 6 x 10

# Groups: county, year [4]

county year anti-black anti-white anti-jewish anti-catholic

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

# … with 4 more variables: anti-age* , anti-islamic(muslim) ,

# anti-gaymale , anti-hispanic

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  10

[1] 423 10

# There are currently 13 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-gaymale    anti-hispanic    
##  Min.   : 0.000   Min.   : 0.0000  
##  1st Qu.: 0.000   1st Qu.: 0.0000  
##  Median : 0.000   Median : 0.0000  
##  Mean   : 1.499   Mean   : 0.3735  
##  3rd Qu.: 1.000   3rd Qu.: 0.0000  
##  Max.   :36.000   Max.   :17.0000

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-gaymale anti-hispanic

Min. : 0.000 Min. : 0.0000

1st Qu.: 0.000 1st Qu.: 0.0000

Median : 0.000 Median : 0.0000

Mean : 1.499 Mean : 0.3735

3rd Qu.: 1.000 3rd Qu.: 0.0000

Max. :36.000 Max. :17.0000

Use Facet_Wrap

Look at each set of hate-crimes for each type for each year. Use the package “tidyr” to convert the dataset from wide to long with the command “gather”. It will take each column’s hate-crime type combine them all into one column called “id”. Then each cell count will go into the new column, “crimecount”. Finally, we are only doing this for the quantitiative variables, which are in columns 3 - 10. Note the command facet_wrap requires (~) before “id”.

hatecrimeslong <- hatecrimes2 %>% 
  tidyr::gather("id", "crimecount", 3:10) 

hatecrimesplot <-hatecrimeslong %>% 
  ggplot(., aes(year, crimecount))+
  geom_point()+
  aes(color = id)+
  facet_wrap(~id)
hatecrimesplot

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 <- hatecrimeslong %>%
  filter( id== "anti-black" | id == "anti-jewish" | id == "anti-gaymale")%>%
  group_by(year, county) %>%
  arrange(desc(crimecount))
hatenew
## # A tibble: 1,269 x 4
## # Groups:   year, county [277]
##    county   year id          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
## # ... with 1,259 more rows

# A tibble: 1,269 x 4

# Groups: year, county [277]

county year id crimecount

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

# … with 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 = id),
      position = "dodge", stat = "identity") +
  ggtitle("Hate Crime Type in NY Counties Between 2010-2016") +
  ylab("Number of Hate Crime Incidents") + 
  labs(fill = "Hate Crime Type")
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 = id),
      position = "dodge", stat = "identity") +
  ggtitle("Hate Crime Type in NY Counties Between 2010-2016") +
  ylab("Number of Hate Crime Incidents") + 
  labs(fill = "Hate Crime Type")
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 - use top_n to list the 5 counties with highest total incidents

counties <- hatenew %>%
  group_by(county, year)%>%
  summarize(sum = sum(crimecount)) %>%
  arrange(desc(sum)) 
## `summarise()` has grouped output by 'county'. You can override using the `.groups` argument.

summarise() has grouped output by ‘county’. You can override using the .groups argument.

counties
## # A tibble: 277 x 3
## # Groups:   county [60]
##    county    year   sum
##    <chr>    <dbl> <dbl>
##  1 Kings     2012   136
##  2 Kings     2010   110
##  3 Kings     2016   101
##  4 Kings     2013    96
##  5 Kings     2014    94
##  6 Kings     2015    90
##  7 Kings     2011    86
##  8 New York  2016    86
##  9 Suffolk   2012    83
## 10 New York  2013    75
## # ... with 267 more rows

# A tibble: 277 x 3

# Groups: county [60]

county year sum

1 Kings 2012 136

2 Kings 2010 110

3 Kings 2016 101

4 Kings 2013 96

5 Kings 2014 94

6 Kings 2015 90

7 Kings 2011 86

8 New York 2016 86

9 Suffolk 2012 83

10 New York 2013 75

# … with 267 more rows

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 =="Kings" | county =="New York" | county == "Suffolk" | county == "Nassau" | county == "Queens") %>%
  ggplot() +
  geom_bar(aes(x=county, y=crimecount, fill = id),
      position = "dodge", stat = "identity") +
  labs(ylab = "Number of Hate Crime Incidents",
    title = "5 Counties in NY with Highest Incidents of Hate Crimes",
    subtitle = "Between 2010-2016", 
    fill = "Hate Crime Type")
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/wrxio/projects/Data110/Datasets")
nypop <- read_csv("newyorkpopulation.csv")
## Rows: 62 Columns: 8
## -- Column specification --------------------------------------------------------
## Delimiter: ","
## chr (1): Geography
## dbl (7): 2010, 2011, 2012, 2013, 2014, 2015, 2016
## 
## i Use `spec()` to retrieve the full column specification for this data.
## i Specify the column types or set `show_col_types = FALSE` to quiet this message.

Rows: 62 Columns: 8

– Column specification ——————————————————–

Delimiter: “,”

chr (1): Geography

dbl (7): 2010, 2011, 2012, 2013, 2014, 2015, 2016

i Use spec() to retrieve the full column specification for this data.

i Specify the column types or set show_col_types = FALSE to quiet this message.

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 x 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

# A tibble: 6 x 3

county year population

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

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 x 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

# A tibble: 10 x 3

county year population

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 x 3
## # Groups:   county [41]
##    county       year   sum
##    <chr>       <dbl> <dbl>
##  1 Kings        2012   136
##  2 Suffolk      2012    83
##  3 New York     2012    71
##  4 Nassau       2012    48
##  5 Queens       2012    48
##  6 Erie         2012    28
##  7 Bronx        2012    23
##  8 Richmond     2012    18
##  9 Multiple     2012    14
## 10 Westchester  2012    13
## # ... with 31 more rows

# A tibble: 41 x 3

# Groups: county [41]

county year sum

1 Kings 2012 136

2 Suffolk 2012 83

3 New York 2012 71

4 Nassau 2012 48

5 Queens 2012 48

6 Erie 2012 28

7 Bronx 2012 23

8 Richmond 2012 18

9 Multiple 2012 14

10 Westchester 2012 13

# … with 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 x 4
## # Groups:   county [41]
##    county       year   sum population
##    <chr>       <dbl> <dbl>      <dbl>
##  1 Kings        2012   136    2572282
##  2 Suffolk      2012    83    1499382
##  3 New York     2012    71    1625121
##  4 Nassau       2012    48    1350748
##  5 Queens       2012    48    2278024
##  6 Erie         2012    28     920792
##  7 Bronx        2012    23    1414774
##  8 Richmond     2012    18     470978
##  9 Multiple     2012    14         NA
## 10 Westchester  2012    13     961073
## # ... with 31 more rows

# A tibble: 41 x 4

# Groups: county [41]

county year sum population

1 Kings 2012 136 2572282

2 Suffolk 2012 83 1499382

3 New York 2012 71 1625121

4 Nassau 2012 48 1350748

5 Queens 2012 48 2278024

6 Erie 2012 28 920792

7 Bronx 2012 23 1414774

8 Richmond 2012 18 470978

9 Multiple 2012 14 NA

10 Westchester 2012 13 961073

# … with 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 x 5
## # Groups:   county [41]
##    county       year   sum population  rate
##    <chr>       <dbl> <dbl>      <dbl> <dbl>
##  1 Suffolk      2012    83    1499382 5.54 
##  2 Kings        2012   136    2572282 5.29 
##  3 New York     2012    71    1625121 4.37 
##  4 Richmond     2012    18     470978 3.82 
##  5 Nassau       2012    48    1350748 3.55 
##  6 Erie         2012    28     920792 3.04 
##  7 Queens       2012    48    2278024 2.11 
##  8 Bronx        2012    23    1414774 1.63 
##  9 Westchester  2012    13     961073 1.35 
## 10 Monroe       2012     5     748947 0.668
## # ... with 31 more rows

# A tibble: 41 x 5

# Groups: county [41]

county year sum population rate

1 Suffolk 2012 83 1499382 5.54

2 Kings 2012 136 2572282 5.29

3 New York 2012 71 1625121 4.37

4 Richmond 2012 18 470978 3.82

5 Nassau 2012 48 1350748 3.55

6 Erie 2012 28 920792 3.04

7 Queens 2012 48 2278024 2.11

8 Bronx 2012 23 1414774 1.63

9 Westchester 2012 13 961073 1.35

10 Monroe 2012 5 748947 0.668

# … with 31 more rows

Notice that the highest rates of hate crimes in 2012 happened in:

dt <- datajoinrate[,c("county","rate")]
dt
## # A tibble: 41 x 2
## # Groups:   county [41]
##    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
## # ... with 31 more rows

# A tibble: 41 x 2

# Groups: county [41]

county rate

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

# … with 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

Aggregating some of the categories

aggregategroups <- hatecrimes %>%
  tidyr::gather("id", "crimecount", 4:44) 
unique(aggregategroups$id)
##  [1] "anti-male"                               
##  [2] "anti-female"                             
##  [3] "anti-transgender"                        
##  [4] "anti-genderidentityexpression"           
##  [5] "anti-age*"                               
##  [6] "anti-white"                              
##  [7] "anti-black"                              
##  [8] "anti-americanindian/alaskannative"       
##  [9] "anti-asian"                              
## [10] "anti-nativehawaiian/pacificislander"     
## [11] "anti-multi-racialgroups"                 
## [12] "anti-otherrace"                          
## [13] "anti-jewish"                             
## [14] "anti-catholic"                           
## [15] "anti-protestant"                         
## [16] "anti-islamic(muslim)"                    
## [17] "anti-multi-religiousgroups"              
## [18] "anti-atheism/agnosticism"                
## [19] "anti-religiouspracticegenerally"         
## [20] "anti-otherreligion"                      
## [21] "anti-buddhist"                           
## [22] "anti-easternorthodox(greek,russian,etc.)"
## [23] "anti-hindu"                              
## [24] "anti-jehovahswitness"                    
## [25] "anti-mormon"                             
## [26] "anti-otherchristian"                     
## [27] "anti-sikh"                               
## [28] "anti-hispanic"                           
## [29] "anti-arab"                               
## [30] "anti-otherethnicity/nationalorigin"      
## [31] "anti-non-hispanic*"                      
## [32] "anti-gaymale"                            
## [33] "anti-gayfemale"                          
## [34] "anti-gay(maleandfemale)"                 
## [35] "anti-heterosexual"                       
## [36] "anti-bisexual"                           
## [37] "anti-physicaldisability"                 
## [38] "anti-mentaldisability"                   
## [39] "totalincidents"                          
## [40] "totalvictims"                            
## [41] "totaloffenders"

[1] “anti-male”

[2] “anti-female”

[3] “anti-transgender”

[4] “anti-genderidentityexpression”

[5] “anti-age*”

[6] “anti-white”

[7] “anti-black”

[8] “anti-americanindian/alaskannative”

[9] “anti-asian”

[10] “anti-nativehawaiian/pacificislander”

[11] “anti-multi-racialgroups”

[12] “anti-otherrace”

[13] “anti-jewish”

[14] “anti-catholic”

[15] “anti-protestant”

[16] “anti-islamic(muslim)”

[17] “anti-multi-religiousgroups”

[18] “anti-atheism/agnosticism”

[19] “anti-religiouspracticegenerally”

[20] “anti-otherreligion”

[21] “anti-buddhist”

[22] “anti-easternorthodox(greek,russian,etc.)”

[23] “anti-hindu”

[24] “anti-jehovahswitness”

[25] “anti-mormon”

[26] “anti-otherchristian”

[27] “anti-sikh”

[28] “anti-hispanic”

[29] “anti-arab”

[30] “anti-otherethnicity/nationalorigin”

[31] “anti-non-hispanic*”

[32] “anti-gaymale”

[33] “anti-gayfemale”

[34] “anti-gay(maleandfemale)”

[35] “anti-heterosexual”

[36] “anti-bisexual”

[37] “anti-physicaldisability”

[38] “anti-mentaldisability”

[39] “totalincidents”

[40] “totalvictims”

[41] “totaloffenders”

aggregategroups <- aggregategroups %>%
  mutate(group = case_when(
    id %in% c("anti-transgender", "anti-gayfemale", "anti-genderidendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual") ~ "anti-lgbtq",
    id %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", 
    id %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",
    id %in% c("anti-physicaldisability", "anti-mentaldisability") ~ "anti-disability",
    id %in% c("anti-female", "anti-male") ~ "anti-gender",
    TRUE ~ "others"))
aggregategroups
## # A tibble: 17,343 x 6
##    county    year crimetype              id        crimecount group      
##    <chr>    <dbl> <chr>                  <chr>          <dbl> <chr>      
##  1 Albany    2016 Crimes Against Persons anti-male          0 anti-gender
##  2 Albany    2016 Property Crimes        anti-male          0 anti-gender
##  3 Allegany  2016 Property Crimes        anti-male          0 anti-gender
##  4 Bronx     2016 Crimes Against Persons anti-male          0 anti-gender
##  5 Bronx     2016 Property Crimes        anti-male          0 anti-gender
##  6 Broome    2016 Crimes Against Persons anti-male          0 anti-gender
##  7 Cayuga    2016 Property Crimes        anti-male          0 anti-gender
##  8 Chemung   2016 Crimes Against Persons anti-male          0 anti-gender
##  9 Chemung   2016 Property Crimes        anti-male          0 anti-gender
## 10 Chenango  2016 Crimes Against Persons anti-male          0 anti-gender
## # ... with 17,333 more rows

# A tibble: 17,343 x 6

county year crimetype id crimecount group

1 Albany 2016 Crimes Against Persons anti-male 0 anti-gender

2 Albany 2016 Property Crimes anti-male 0 anti-gender

3 Allegany 2016 Property Crimes anti-male 0 anti-gender

4 Bronx 2016 Crimes Against Persons anti-male 0 anti-gender

5 Bronx 2016 Property Crimes anti-male 0 anti-gender

6 Broome 2016 Crimes Against Persons anti-male 0 anti-gender

7 Cayuga 2016 Property Crimes anti-male 0 anti-gender

8 Chemung 2016 Crimes Against Persons anti-male 0 anti-gender

9 Chemung 2016 Property Crimes anti-male 0 anti-gender

10 Chenango 2016 Crimes Against Persons anti-male 0 anti-gender

# … with 17,333 more rows

or create subset with just lgbtq

lgbtq <- hatecrimes %>%
   tidyr::gather("id", "crimecount", 4:44) %>%
  filter(id %in% c("anti-transgender", "anti-gayfemale", "anti-genderidendityexpression", "anti-gaymale", "anti-gay(maleandfemale", "anti-bisexual"))
lgbtq
## # A tibble: 1,692 x 5
##    county    year crimetype              id               crimecount
##    <chr>    <dbl> <chr>                  <chr>                 <dbl>
##  1 Albany    2016 Crimes Against Persons anti-transgender          0
##  2 Albany    2016 Property Crimes        anti-transgender          0
##  3 Allegany  2016 Property Crimes        anti-transgender          0
##  4 Bronx     2016 Crimes Against Persons anti-transgender          4
##  5 Bronx     2016 Property Crimes        anti-transgender          0
##  6 Broome    2016 Crimes Against Persons anti-transgender          0
##  7 Cayuga    2016 Property Crimes        anti-transgender          0
##  8 Chemung   2016 Crimes Against Persons anti-transgender          0
##  9 Chemung   2016 Property Crimes        anti-transgender          0
## 10 Chenango  2016 Crimes Against Persons anti-transgender          0
## # ... with 1,682 more rows

# A tibble: 1,692 x 5

county year crimetype id crimecount

1 Albany 2016 Crimes Against Persons anti-transgender 0

2 Albany 2016 Property Crimes anti-transgender 0

3 Allegany 2016 Property Crimes anti-transgender 0

4 Bronx 2016 Crimes Against Persons anti-transgender 4

5 Bronx 2016 Property Crimes anti-transgender 0

6 Broome 2016 Crimes Against Persons anti-transgender 0

7 Cayuga 2016 Property Crimes anti-transgender 0

8 Chemung 2016 Crimes Against Persons anti-transgender 0

9 Chemung 2016 Property Crimes anti-transgender 0

10 Chenango 2016 Crimes Against Persons anti-transgender 0

# … with 1,682 more rows

So what does all of this mean?

Important Findings:

I wonder what the data would look like if there was a universally accepted requirement for this type of data collection.

The Bronx appears to have much lower than expected incidents of hate crimes relative to its population density in comparison to other NY counties.

In Kings County, NY (which is home to Brooklyn; according to Wikipedia, it is New York’s most populous borough and the second most densly populated county in the US) in 2012, there was a spike in hate crimes against jews.

All of these findings are corroborated in Hate Crime in New York State 2012 Annual Report: https://www.criminaljustice.ny.gov/crimnet/ojsa/hate-crime-in-nys-2012-annual-report.pdf

1. Write about the positive and negative aspects of this hatecrimes dataset.

Positive aspects:

• This hatecrimes dataset contains good data/information for the hate crimes such as various crime type - anti-male, anti-female, anti-age, anti-white, anti-black, anti-Asian, etc., associated year to happened, and county and so on. Those data and information are good to lead to do analyze for the Hate Crimes.

Negative aspects:

• The hatecrimes dataset may be not complete because a lot of cases may not be reported and that has left the dataset. with unreliable, incomplete official counts and little handle on the true scope of bias-motivated violence.

• The hatecrimes dataset may be not accurate because many police agencies across the area are not working very hard to count hate crimes. Some of them opt not to participate in the FBI’s hate crime program at all to impact it’s accurateness.

2. List 2 different paths you would like to (hypothetically) study about this dataset.

• Add more field as the root causes for the updated hate crimes dataset based on the following finding and even this hypothetical study is based on the fact finding and worth researching for them:

• Those arrested or indicted for hate crimes motivated by the victims’ religious characteristics tend to be older, have more military experience, have higher rates of mental health concerns, and are more likely, compared to those who commit other types of hate crimes, to cause mass casualty events.

• Those motivated by bias on the basis of sexual orientation, gender, or gender identity are often younger, unemployed, and unmarried when they are arrested or charged with hate crimes. They are also more likely to commit hate crimes with peers and while under the influence of drugs or alcohol.

• Those who target others because of their race, ethnicity, or nationality have higher rates of previous criminal activity. They are most likely to belong to organized hate groups.

• Some who commit or are charged with hate crimes are fully engaged with the worlds of bigotry and hate, while others act upon common themes of prejudice in American communities.

• Those who commit mixed-motive crimes engage in spontaneous crimes at a higher rate and are more likely to act in a public setting.

• Some commit crimes of opportunity, and others premeditate their offenses.

• Do more BIAS studies

• The BIAS research also revealed that conventional attempts to capture traits of those who commit hate crimes often fail to capture the complexity of their motivations. The new research showed that:

• Many of those individuals had mixed motives, including financial and other material goals.

• Some targeted victims with whom they had a pre-existing, seemingly amiable, relationship or previous interactions.

• Some were motivated by national demographic changes and political rhetoric rather than local conditions. But the smaller number of individuals motivated by perceived local threats were more likely to join others in committing hate crimes (64.7%) than were those motivated by national conditions (37.4%).

• It is good idea for the new dataset cover more BIAS for these fields.

3. Describe 2 things you would do to follow up after seeing the output from the hatecrimes tutorial.

• Using the sample code and tutorial to try various methods, functions, options, etc. to practices. I may break the codes and I will try to fix them and learn from these practices.

• Run more data vitalization, such as more graphics, business needs