Kaitlin Kavlie PSYC-541
Lab #10: Dot Maps
library(leaflet)
library(tidyverse)
library(lubridate)
library(broom)
library(plotly)
library(DT)
- I created a map of the shootings with dots on the map marking the location of each shooting.
shootings %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(stroke = F, fillOpacity = .6, radius = 5, label = ~fatalities)
Assuming "longitude" and "latitude" are longitude and latitude, respectively
1A. I centered the map on the continental US by searching for the latitude and longitude of the center of the continental US, which are latitude 39° 57’ 52.00” N and longitude:-82° 59’ 49.69. So I calculated the decimal for the minutes of the latitude and the longitude. This calculated and rounded up into latitude 40.1 and longitude -83.1.
57/60
[1] 0.95
59/60
[1] 0.9833333
Then I used the code below to create a new map centered on the basis of the specific latitude and longitude coordinates calculated above.
shootings %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(stroke = F, fillOpacity = .6, radius = 5, label = ~fatalities) %>%
setView(lng = -83.1, lat = 40.1, zoom = 4) %>%
addMarkers(lng = -83.1, lat = 40.1)
Assuming "longitude" and "latitude" are longitude and latitude, respectively
1B. Then I changed the size of the dots so that the more victims of a shooting, the larger the dot on the map. I did so by using the code chunk below.
shootings %>%
leaflet() %>%
addTiles() %>%
addCircleMarkers(radius = ~log(total_victims))
Assuming "longitude" and "latitude" are longitude and latitude, respectively
2A. I found the median number of total victims and median number of fatalities by using the two code chunks below.
shootings %>%
summarize(median_number_of_total_victims = median(total_victims))
shootings %>%
summarize(median_number_of_total_fatalities = median(fatalities))
2B. Then I created a histogram of the number of shootings per year using the code chunk below.
shootings %>%
plot_ly(x = ~year) %>%
add_histogram(nbinsx = 40)
NA
2C. Then I used the code below to create a heatmaps with add_histogram2dcontour() of the gender and race of the shooter.
shootings %>%
drop_na(race) %>%
mutate(race = as_factor(race)) %>%
mutate(race = fct_collapse(race, White = c("white", "White"), Black = c("black", "Black"), Other = c("unclear", "other"))) %>%
mutate(gender = fct_collapse(gender, Male = c("Male", "M"), Female = c("Female", "F"))) %>%
plot_ly(x = ~race, y = ~gender) %>%
add_histogram2dcontour()
Warning: Problem while computing `race = fct_collapse(...)`.
i Unknown levels in `f`: other
2D. I used the code below to create a scatterplot with plotly of the number of people injured by the number of fatalities in the shooting.
shootings %>%
plot_ly(x = ~fatalities,
y = ~injured) %>%
add_markers()
NA
- Lastly, I conducted a regression analysis testing the hypothesis that the number of shootings has increased over the years.
First, I set the data up by creating the data set num_per_year which focuses only on the number of shootings per year.
num_per_year <- shootings %>%
filter(fatalities > 3) %>%
count(year)
num_per_year
Then I ran analyses on the data using the code below and found that the p-value is less than .05, leading me to reject the null hypothesis. This means that there has been a statistically significant increase in the number of shootings each year.
shootings_per_year_model <- lm(n ~ year, data = num_per_year)
tidy(shootings_per_year_model)
glance(shootings_per_year_model)
NA
Lastly, I created a regression analysis scatter plot displaying the number of shootings that have occurred each year.
num_per_year %>%
plot_ly(x = ~year,
y = ~n, hoverinfo = "text", text = ~paste("Number of shootings per year: ", round(num_per_year, 1), "<br>", "Year: ", year)) %>%
add_markers(showlegend = F) %>%
add_lines(y = ~fitted(shootings_per_year_model)) %>%
layout(title = "Number of shootings per year",
xaxis = list(title = "Year"),
yaxis = list(title = "Number of shootings"))
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpLYWl0bGluIEthdmxpZSBQU1lDLTU0MQ0KDQpMYWIgIzEwOiBEb3QgTWFwcyANCg0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGxlYWZsZXQpDQpsaWJyYXJ5KHRpZHl2ZXJzZSkNCmxpYnJhcnkobHVicmlkYXRlKQ0KbGlicmFyeShicm9vbSkNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeShEVCkNCg0KYGBgDQoNCg0KDQoNCg0KMS4gSSBjcmVhdGVkIGEgbWFwIG9mIHRoZSBzaG9vdGluZ3Mgd2l0aCBkb3RzIG9uIHRoZSBtYXAgbWFya2luZyB0aGUgbG9jYXRpb24gb2YgZWFjaCBzaG9vdGluZy4NCg0KYGBge3J9DQpzaG9vdGluZ3MgJT4lIA0KICBsZWFmbGV0KCkgJT4lIA0KICBhZGRUaWxlcygpICU+JQ0KICBhZGRDaXJjbGVNYXJrZXJzKHN0cm9rZSA9IEYsIGZpbGxPcGFjaXR5ID0gLjYsIHJhZGl1cyA9IDUsIGxhYmVsID0gfmZhdGFsaXRpZXMpDQpgYGANCg0KDQoNCg0KDQoNCg0KDQoxQS4gSSBjZW50ZXJlZCB0aGUgbWFwIG9uIHRoZSBjb250aW5lbnRhbCBVUyBieSBzZWFyY2hpbmcgZm9yIHRoZSBsYXRpdHVkZSBhbmQgbG9uZ2l0dWRlIG9mIHRoZSBjZW50ZXIgb2YgdGhlIGNvbnRpbmVudGFsIFVTLCB3aGljaCBhcmUgbGF0aXR1ZGUgMznCsCA1NycgNTIuMDAiIE4gYW5kIGxvbmdpdHVkZTotODLCsCA1OScgNDkuNjkuIFNvIEkgY2FsY3VsYXRlZCB0aGUgZGVjaW1hbCBmb3IgdGhlIG1pbnV0ZXMgb2YgdGhlIGxhdGl0dWRlIGFuZCB0aGUgbG9uZ2l0dWRlLiBUaGlzIGNhbGN1bGF0ZWQgYW5kIHJvdW5kZWQgdXAgaW50byBsYXRpdHVkZSA0MC4xIGFuZCBsb25naXR1ZGUgLTgzLjEuDQoNCg0KDQpgYGB7cn0NCjU3LzYwDQpgYGANCg0KDQpgYGB7cn0NCjU5LzYwDQpgYGANCg0KDQpUaGVuIEkgdXNlZCB0aGUgY29kZSBiZWxvdyB0byBjcmVhdGUgYSBuZXcgbWFwIGNlbnRlcmVkIG9uIHRoZSBiYXNpcyBvZiB0aGUgc3BlY2lmaWMgbGF0aXR1ZGUgYW5kIGxvbmdpdHVkZSBjb29yZGluYXRlcyBjYWxjdWxhdGVkIGFib3ZlLg0KDQpgYGB7cn0NCnNob290aW5ncyAlPiUgDQogIGxlYWZsZXQoKSAlPiUgDQogIGFkZFRpbGVzKCkgJT4lDQogIGFkZENpcmNsZU1hcmtlcnMoc3Ryb2tlID0gRiwgZmlsbE9wYWNpdHkgPSAuNiwgcmFkaXVzID0gNSwgbGFiZWwgPSB+ZmF0YWxpdGllcykgJT4lDQogIHNldFZpZXcobG5nID0gLTgzLjEsIGxhdCA9IDQwLjEsIHpvb20gPSA0KSAlPiUNCiAgYWRkTWFya2VycyhsbmcgPSAtODMuMSwgbGF0ID0gNDAuMSkNCmBgYA0KDQoNCg0KDQoxQi4gVGhlbiBJIGNoYW5nZWQgdGhlIHNpemUgb2YgdGhlIGRvdHMgc28gdGhhdCB0aGUgbW9yZSB2aWN0aW1zIG9mIGEgc2hvb3RpbmcsIHRoZSBsYXJnZXIgdGhlIGRvdCBvbiB0aGUgbWFwLiBJIGRpZCBzbyBieSB1c2luZyB0aGUgY29kZSBjaHVuayBiZWxvdy4NCg0KDQpgYGB7cn0NCnNob290aW5ncyAlPiUgDQogIGxlYWZsZXQoKSAlPiUgDQogIGFkZFRpbGVzKCkgJT4lDQogIGFkZENpcmNsZU1hcmtlcnMocmFkaXVzID0gfmxvZyh0b3RhbF92aWN0aW1zKSkNCmBgYA0KDQoNCg0KDQoyQS4gSSBmb3VuZCB0aGUgbWVkaWFuIG51bWJlciBvZiB0b3RhbCB2aWN0aW1zIGFuZCBtZWRpYW4gbnVtYmVyIG9mIGZhdGFsaXRpZXMgYnkgdXNpbmcgdGhlIHR3byBjb2RlIGNodW5rcyBiZWxvdy4gIA0KDQpgYGB7cn0NCnNob290aW5ncyAlPiUgDQogIHN1bW1hcml6ZShtZWRpYW5fbnVtYmVyX29mX3RvdGFsX3ZpY3RpbXMgPSBtZWRpYW4odG90YWxfdmljdGltcykpDQpgYGANCg0KDQoNCmBgYHtyfQ0Kc2hvb3RpbmdzICU+JSANCiAgc3VtbWFyaXplKG1lZGlhbl9udW1iZXJfb2ZfdG90YWxfZmF0YWxpdGllcyA9IG1lZGlhbihmYXRhbGl0aWVzKSkNCmBgYA0KDQoNCg0KMkIuIFRoZW4gSSBjcmVhdGVkIGEgaGlzdG9ncmFtIG9mIHRoZSBudW1iZXIgb2Ygc2hvb3RpbmdzIHBlciB5ZWFyIHVzaW5nIHRoZSBjb2RlIGNodW5rIGJlbG93Lg0KDQoNCmBgYHtyfQ0Kc2hvb3RpbmdzICU+JSANCiAgcGxvdF9seSh4ID0gfnllYXIpICU+JSANCiAgYWRkX2hpc3RvZ3JhbShuYmluc3ggPSA0MCkNCg0KYGBgDQoNCg0KDQoyQy4gVGhlbiBJIHVzZWQgdGhlIGNvZGUgYmVsb3cgdG8gY3JlYXRlIGEgaGVhdG1hcHMgd2l0aCBhZGRfaGlzdG9ncmFtMmRjb250b3VyKCkgb2YgdGhlIGdlbmRlciBhbmQgcmFjZSBvZiB0aGUgc2hvb3Rlci4gDQoNCmBgYHtyfQ0Kc2hvb3RpbmdzICU+JQ0KICBkcm9wX25hKHJhY2UpICU+JSANCiAgbXV0YXRlKHJhY2UgPSBhc19mYWN0b3IocmFjZSkpICU+JSANCiAgbXV0YXRlKHJhY2UgPSBmY3RfY29sbGFwc2UocmFjZSwgV2hpdGUgPSBjKCJ3aGl0ZSIsICJXaGl0ZSIpLCBCbGFjayA9IGMoImJsYWNrIiwgIkJsYWNrIiksIE90aGVyID0gYygidW5jbGVhciIsICJvdGhlciIpKSkgJT4lDQogIG11dGF0ZShnZW5kZXIgPSBmY3RfY29sbGFwc2UoZ2VuZGVyLCBNYWxlID0gYygiTWFsZSIsICJNIiksIEZlbWFsZSA9IGMoIkZlbWFsZSIsICJGIikpKSAlPiUNCiAgcGxvdF9seSh4ID0gfnJhY2UsIHkgPSB+Z2VuZGVyKSAlPiUNCiAgYWRkX2hpc3RvZ3JhbTJkY29udG91cigpDQpgYGANCg0KDQoNCg0KDQoNCjJELiBJIHVzZWQgdGhlIGNvZGUgYmVsb3cgdG8gY3JlYXRlIGEgc2NhdHRlcnBsb3Qgd2l0aCBwbG90bHkgb2YgdGhlIG51bWJlciBvZiBwZW9wbGUgaW5qdXJlZCBieSB0aGUgbnVtYmVyIG9mIGZhdGFsaXRpZXMgaW4gdGhlIHNob290aW5nLiANCg0KDQpgYGB7cn0NCnNob290aW5ncyAlPiUgDQogIHBsb3RfbHkoeCA9IH5mYXRhbGl0aWVzLCANCiAgICAgICAgICB5ID0gfmluanVyZWQpICU+JSANCiAgYWRkX21hcmtlcnMoKSANCg0KYGBgDQoNCg0KDQoNCjMuIExhc3RseSwgSSBjb25kdWN0ZWQgYSByZWdyZXNzaW9uIGFuYWx5c2lzIHRlc3RpbmcgdGhlIGh5cG90aGVzaXMgdGhhdCB0aGUgbnVtYmVyIG9mIHNob290aW5ncyBoYXMgaW5jcmVhc2VkIG92ZXIgdGhlIHllYXJzLg0KDQoNCkZpcnN0LCBJIHNldCB0aGUgZGF0YSB1cCBieSBjcmVhdGluZyB0aGUgZGF0YSBzZXQgbnVtX3Blcl95ZWFyIHdoaWNoIGZvY3VzZXMgb25seSBvbiB0aGUgbnVtYmVyIG9mIHNob290aW5ncyBwZXIgeWVhci4NCg0KYGBge3J9DQpudW1fcGVyX3llYXIgPC0gc2hvb3RpbmdzICU+JSANCiAgZmlsdGVyKGZhdGFsaXRpZXMgPiAzKSAlPiUgDQogIGNvdW50KHllYXIpDQoNCm51bV9wZXJfeWVhcg0KYGBgDQoNCg0KDQoNClRoZW4gSSByYW4gYW5hbHlzZXMgb24gdGhlIGRhdGEgdXNpbmcgdGhlIGNvZGUgYmVsb3cgYW5kIGZvdW5kIHRoYXQgdGhlIHAtdmFsdWUgaXMgbGVzcyB0aGFuIC4wNSwgbGVhZGluZyBtZSB0byByZWplY3QgdGhlIG51bGwgaHlwb3RoZXNpcy4gVGhpcyBtZWFucyB0aGF0IHRoZXJlIGhhcyBiZWVuIGEgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbmNyZWFzZSBpbiB0aGUgbnVtYmVyIG9mIHNob290aW5ncyBlYWNoIHllYXIuDQoNCmBgYHtyfQ0Kc2hvb3RpbmdzX3Blcl95ZWFyX21vZGVsIDwtIGxtKG4gfiB5ZWFyLCBkYXRhID0gbnVtX3Blcl95ZWFyKQ0KdGlkeShzaG9vdGluZ3NfcGVyX3llYXJfbW9kZWwpDQpnbGFuY2Uoc2hvb3RpbmdzX3Blcl95ZWFyX21vZGVsKQ0KICANCmBgYA0KDQoNCg0KDQoNCkxhc3RseSwgSSBjcmVhdGVkIGEgcmVncmVzc2lvbiBhbmFseXNpcyBzY2F0dGVyIHBsb3QgZGlzcGxheWluZyB0aGUgbnVtYmVyIG9mIHNob290aW5ncyB0aGF0IGhhdmUgb2NjdXJyZWQgZWFjaCB5ZWFyLg0KDQpgYGB7cn0NCm51bV9wZXJfeWVhciAlPiUgDQogIHBsb3RfbHkoeCA9IH55ZWFyLCANCiAgICAgICAgICB5ID0gfm4sIGhvdmVyaW5mbyA9ICJ0ZXh0IiwgdGV4dCA9IH5wYXN0ZSgiTnVtYmVyIG9mIHNob290aW5ncyBwZXIgeWVhcjogIiwgcm91bmQobnVtX3Blcl95ZWFyLCAxKSwgIjxicj4iLCAiWWVhcjogIiwgeWVhcikpICU+JSANCiAgYWRkX21hcmtlcnMoc2hvd2xlZ2VuZCA9IEYpICU+JQ0KYWRkX2xpbmVzKHkgPSB+Zml0dGVkKHNob290aW5nc19wZXJfeWVhcl9tb2RlbCkpICU+JQ0KICBsYXlvdXQodGl0bGUgPSAiTnVtYmVyIG9mIHNob290aW5ncyBwZXIgeWVhciIsDQogICB4YXhpcyA9IGxpc3QodGl0bGUgPSAiWWVhciIpLA0KICAgeWF4aXMgPSBsaXN0KHRpdGxlID0gIk51bWJlciBvZiBzaG9vdGluZ3MiKSkNCmBgYA0KDQoNCg==