library(tidyverse)
## ── Attaching packages ─────────────────────────────────────── tidyverse 1.3.2 ──
## ✔ ggplot2 3.3.6     ✔ purrr   0.3.4
## ✔ tibble  3.1.7     ✔ dplyr   1.0.9
## ✔ tidyr   1.2.0     ✔ stringr 1.4.0
## ✔ readr   2.1.2     ✔ forcats 0.5.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
library(tinytex)
setwd("C:/Data 110.MC")
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...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
names(hatecrimes) <- tolower(names(hatecrimes))
names(hatecrimes) <- gsub(" ","",names(hatecrimes))
str(hatecrimes)
## spec_tbl_df [423 × 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>

Select only certain 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 × 10
## # Groups:   county, year [4]
##   county    year anti-…¹ anti-…² anti-…³ anti-…⁴ anti-…⁵ anti-…⁶ anti-…⁷ anti-…⁸
##   <chr>    <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>   <dbl>
## 1 Albany    2016       1       0       0       0       0       1       1       0
## 2 Albany    2016       2       0       0       0       0       0       0       0
## 3 Allegany  2016       1       0       0       0       0       0       0       0
## 4 Bronx     2016       0       1       0       0       0       6       8       0
## 5 Bronx     2016       0       1       1       0       0       0       0       0
## 6 Broome    2016       1       0       0       0       0       0       1       0
## # … with abbreviated variable names ¹​`anti-black`, ²​`anti-white`,
## #   ³​`anti-jewish`, ⁴​`anti-catholic`, ⁵​`anti-age*`, ⁶​`anti-islamic(muslim)`,
## #   ⁷​`anti-gaymale`, ⁸​`anti-hispanic`

Check the dimensions and the summary to make sure no missing values

dim(hatecrimes2)
## [1] 423  10
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

Use Facet_Wrap

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

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

head(hatecrimesplot,10)
## $data
## # A tibble: 3,384 × 5
## # Groups:   county, year [277]
##    county    year id         crimecount .group
##    <chr>    <dbl> <chr>           <dbl>  <int>
##  1 Albany    2016 anti-black          1      7
##  2 Albany    2016 anti-black          2      7
##  3 Allegany  2016 anti-black          1      9
##  4 Bronx     2016 anti-black          0     16
##  5 Bronx     2016 anti-black          0     16
##  6 Broome    2016 anti-black          1     23
##  7 Cayuga    2016 anti-black          0     31
##  8 Chemung   2016 anti-black          1     38
##  9 Chemung   2016 anti-black          0     38
## 10 Chenango  2016 anti-black          2     42
## # … with 3,374 more rows
## # ℹ Use `print(n = ...)` to see more rows
## 
## $layers
## $layers[[1]]
## geom_point: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity 
## 
## 
## $scales
## <ggproto object: Class ScalesList, gg>
##     add: function
##     clone: function
##     find: function
##     get_scales: function
##     has_scale: function
##     input: function
##     n: function
##     non_position_scales: function
##     scales: list
##     super:  <ggproto object: Class ScalesList, gg>
## 
## $mapping
## Aesthetic mapping: 
## * `colour` -> `id`
## * `x`      -> `year`
## * `y`      -> `crimecount`
## 
## $theme
## list()
## 
## $coordinates
## <ggproto object: Class CoordCartesian, Coord, gg>
##     aspect: function
##     backtransform_range: function
##     clip: on
##     default: TRUE
##     distance: function
##     expand: TRUE
##     is_free: function
##     is_linear: function
##     labels: function
##     limits: list
##     modify_scales: function
##     range: function
##     render_axis_h: function
##     render_axis_v: function
##     render_bg: function
##     render_fg: function
##     setup_data: function
##     setup_layout: function
##     setup_panel_guides: function
##     setup_panel_params: function
##     setup_params: function
##     train_panel_guides: function
##     transform: function
##     super:  <ggproto object: Class CoordCartesian, Coord, gg>
## 
## $facet
## <ggproto object: Class FacetWrap, Facet, gg>
##     compute_layout: function
##     draw_back: function
##     draw_front: function
##     draw_labels: function
##     draw_panels: function
##     finish_data: function
##     init_scales: function
##     map_data: function
##     params: list
##     setup_data: function
##     setup_params: function
##     shrink: TRUE
##     train_scales: function
##     vars: function
##     super:  <ggproto object: Class FacetWrap, Facet, gg>
## 
## $plot_env
## <environment: 0x00000271fcf7d420>
## 
## $labels
## $labels$colour
## [1] "id"
## 
## $labels$x
## [1] "year"
## 
## $labels$y
## [1] "crimecount"

Look deeper into crimes against blacks, gay males, and jews

hatenew <- hatecrimeslong %>%
  filter( id== "anti-black" | id == "anti-jewish" | id == "anti-gaymale")%>%
  group_by(year, county) %>%
  arrange(desc(crimecount))
hatenew
## # A tibble: 1,269 × 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
## # ℹ Use `print(n = ...)` to see more rows

Plot these three types of hate crimes together

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

What about the counties?

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

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.
counties
## # A tibble: 277 × 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
## # ℹ Use `print(n = ...)` to see more rows
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?

setwd("C:/Data 110.MC")
nypop <- read_csv("newyorkpopulation.csv")
## Rows: 62 Columns: 8
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): Geography
## dbl (7): 2010, 2011, 2012, 2013, 2014, 2015, 2016
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
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

Focus on 2012

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

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:   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
## # ℹ Use `print(n = ...)` to see 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:   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
## # ℹ Use `print(n = ...)` to see 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:   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
## # ℹ Use `print(n = ...)` to see more rows

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

dt <- datajoinrate[,c("county","rate")]
dt
## # A tibble: 41 × 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
## # ℹ Use `print(n = ...)` to see more rows

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"
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 × 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
## # ℹ Use `print(n = ...)` to see 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 × 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
## # ℹ Use `print(n = ...)` to see more rows

Write about the positive and negative aspects of this hate crime dataset.

The 1990 Hate Crime Statistics Act and the amended 1996 act, and the 2009 Matthew Shepard and James Byrd, Jr. Hate Crimes Prevention Act require “the Attorney General to collect data on crimes committed because of the victim’s race, religion, disability, sexual orientation, or ethnicity.” (FBI — Hate Crime Statistics Act). However, ProPublica reported that out of 15,000 police departments nationwide, only 22% were hate crimes. Stated differently, 6,121 hate crimes were reported to the FBI in 2016, whereas ProPublica estimated that 250 000 a year should be reported (Why America Fails at Gathering Hate Crime Statistics — ProPublica.pdf). Considering the poor overall statistical reports of hate crime, the fact that NY state reported the crimes is considered significantly positive. Also, the NY state law mirrors the Federal law, and it includes sexual orientation, which according to the CNN 2021 report, is missing from other states’ definitions of hate crimes because those states do not require data collection or reporting altogether (49 states and territories have hate crime laws – but they vary - CNN). Aside from gathering and reporting hate crime statistics, more information is needed about the offenders committing those hate crimes. Specifically, factors such as age, education level, and rate of convictions will be very informative in creating programs to combat these specific crimes. Indeed, there are several such programs. A good example is the anti-defamation league (ADL) 5 Things You Can Do to Combat Hate (5 Things You Can Do to Combat Hate (adl.org)).

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

Two hypothetical questions will be of interest to me, 1. NY state hate crime data include property crimes. This begs the question, a) do property crimes associated with hate crimes follow the same pattern, and b) do those crimes have a similar inflection point as the Anti-Jewish hate crimes, that is, 2012 Kings County?
2. More granularity is needed to focus on the intervention to reduce hate crimes; the data show that Anti-Jewish hate crime is the highest in Kings County. It will be interesting to see hate crimes by Zip codes. I will surmise that the Anti-Jewish hate crimes are primarily located in Brooklyn’s Zip codes because one in four Brooklyn residents are Jews (https://www.nydailynews.com/new-york/brooklyn/brooklyn-residents-jews-new-study-finds-article-1.1100080). Moreover, most of the Jewish population in Brooklyn are Orthodox Jewish distinguished by their religious garb,

Describe two things you would do to follow up after seeing the output from the hate crimes tutorial

It will be interesting to see the rate of hate crime in Maryland. Indeed, a fast fact sheet produced by the FBI for 2020 shows 40 hate crimes in Maryland. However, I was not able to find information by county. Lastly, my younger daughter is married to a Montgomery County detective, so I asked him what kind of training he received in the police academy about hate crimes. He responded that he” vaguely remember some video showing something about hate crimes. “In response to my question about how he identifies a hate crime. His response was, “if somebody is assaulted and called names, for example, a homophobic slur, he asked the individual, are you gay, and if the answer is yes, the assault is considered a hate crime; otherwise, it is just another assault.” Clearly, as the residents of this county, we should require our political and police leaders to do more and better prepare and train the police force to do better.