This is a geospatial analysis of unemployment rates in the census tracts chosen specifically by developers compared with the tracts within a certain distance surrounding the project site. Here’s an analysis of tracts only immediately adjacent to the project.
nj_h <- tracts("NJ", county="Hudson", cb=F)
nj_h_centroids <- SpatialPointsDataFrame(gCentroid(nj_h, byid=TRUE),
nj_h@data, match.ID=FALSE)
nj_h_centroids <- as.data.frame(nj_h_centroids)
nj_h_centroids <- select(nj_h_centroids, GEOID, x, y)
nj_h_centroids$distance_proj1 <- 0
nj_h_centroids$distance_proj2 <- 0
for (i in 1:nrow(nj_h_centroids)) {
nj_h_centroids$distance_proj1[i] <- distm (c(-74.063644, 40.734330), c(nj_h_centroids$x[i], nj_h_centroids$y[i]), fun = distHaversine)[,1]/ 1609
nj_h_centroids$distance_proj2[i] <- distm (c(-74.03577, 40.72), c(nj_h_centroids$x[i], nj_h_centroids$y[i]), fun = distHaversine)[,1]/ 1609
}
# GEOIDs: 34017001900, 34017004600, 34017005300, 34017006600, 34017006700, 34017007100
hudson_unemployment_2013 <- get_acs(geography="tract", endyear=2013, variables= c("B23025_005E", "B23025_002E"), county = "Hudson", state="NJ")
hudson_unemployment_2013$moe <- NULL
hudson_unemployment_2013 <- spread(hudson_unemployment_2013,variable, estimate )
hudson_unemployment_2013$per_un <- round(hudson_unemployment_2013[,4]/hudson_unemployment_2013[,3]*100,2)
hudson_unemployment_2013 <- filter(hudson_unemployment_2013, GEOID!="34017006900" & GEOID!="34017980100")
proj1 <- c("34017001900", "34017004600", "34017005300", "34017006600", "34017006700", "34017007100")
hudson_unemployment_2013_sm <- filter(hudson_unemployment_2013, GEOID %in% proj1)
colnames(hudson_unemployment_2013_sm) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2013_sm$un_rate <- hudson_unemployment_2013_sm$unemp_rate$B23025_005
hudson_unemployment_2013_sm$unemp_rate <- NULL
hudson_unemployment_2013_sm$radius <- "gerrymandered"
proj1_half <- filter(nj_h_centroids, distance_proj1 <=.5)
proj1_half <- proj1_half$GEOID
hudson_unemployment_2013_sm_half <- filter(hudson_unemployment_2013, GEOID %in% proj1_half)
colnames(hudson_unemployment_2013_sm_half) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2013_sm_half$un_rate <- hudson_unemployment_2013_sm_half$unemp_rate$B23025_005
hudson_unemployment_2013_sm_half$unemp_rate <- NULL
hudson_unemployment_2013_sm_half$radius <- "half a mile"
proj1_one <- filter(nj_h_centroids, distance_proj1 <=1)
proj1_one <- proj1_one$GEOID
hudson_unemployment_2013_sm_one <- filter(hudson_unemployment_2013, GEOID %in% proj1_one)
colnames(hudson_unemployment_2013_sm_one) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2013_sm_one$un_rate <- hudson_unemployment_2013_sm_one$unemp_rate$B23025_005
hudson_unemployment_2013_sm_one$unemp_rate <- NULL
hudson_unemployment_2013_sm_one$radius <- "one mile"
proj1_two <- filter(nj_h_centroids, distance_proj1 <=2)
proj1_two <- proj1_two$GEOID
hudson_unemployment_2013_sm_two <- filter(hudson_unemployment_2013, GEOID %in% proj1_two)
colnames(hudson_unemployment_2013_sm_two) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2013_sm_two$un_rate <- hudson_unemployment_2013_sm_two$unemp_rate$B23025_005
hudson_unemployment_2013_sm_two$unemp_rate <- NULL
hudson_unemployment_2013_sm_two$radius <- "two miles"
hudson_unemployment_sm <- rbind(hudson_unemployment_2013_sm, hudson_unemployment_2013_sm_half, hudson_unemployment_2013_sm_one, hudson_unemployment_2013_sm_two)
hudson_unemployment_sm$name <- gsub(",.*", "", hudson_unemployment_sm$name)
nj_hf <- fortify(nj_h, region="GEOID")
nj_hud <- left_join(nj_hf, hudson_unemployment_sm, by=c("id"="GEOID"))
nj_hud <- filter(nj_hud, !is.na(radius))
nj_map <- ggplot()
nj_map <- nj_map + geom_polygon(data=nj_hf, aes(x=long, y=lat, group=group), fill=NA, color="black", size=.1)
nj_map <- nj_map + geom_polygon(data=nj_hud, aes(x=long, y=lat, group=group, fill=un_rate), color="black", size=.5)
nj_map <- nj_map + facet_wrap(~radius)
nj_map <- nj_map + coord_map()
nj_map <- nj_map + scale_fill_viridis(option = "heat", direction=-1, name = "Unemployment rate")
nj_map <- nj_map + scale_color_viridis(option = "heat", direction=-1)
nj_map <- nj_map + theme_nothing(legend=TRUE)
nj_map <- nj_map + labs(x=NULL, y=NULL, title="1 Journal Square (2017)")
nj_map <- nj_map + theme(panel.grid.major = element_line(colour = NA))
nj_map <- nj_map + theme(text = element_text(size=15))
nj_map <- nj_map + theme(plot.title=element_text(face="bold", hjust=.4))
nj_map <- nj_map + theme(plot.subtitle=element_text(face="italic", size=9, margin=margin(l=20)))
nj_map <- nj_map + theme(plot.caption=element_text(size=12, margin=margin(t=12), color="#7a7d7e", hjust=0))
nj_map <- nj_map + theme(legend.key.size = unit(1, "cm"))
nj_map <- nj_map + annotate("segment", x = -74.063644, xend = -74.035, y = 40.734330, yend = 40.734330, colour = "tomato", size=.5)
nj_map <- nj_map + annotate("point", x = -74.063644, y = 40.734330, colour = "lightblue", size = 1)
nj_map <- nj_map + annotate("text", x = -74.01, y = 40.734330, label = "1 Journal Square", size=3, colour="gray30")
print(nj_map)
For this project, officials said the qualifying rate using 2015 annual average data is 8.0 percent (1.5 times the United States not seasonally adjusted unemployment rate for the same time period).
So this project would’ve qualified based on any of the measures listed below.
sm_table <- hudson_unemployment_sm %>%
group_by(radius) %>%
summarize(average_unemployment=round(mean(un_rate, na.rm=T),2), median_unemployment=round(median(un_rate, na.rm=T),2)) %>%
arrange(average_unemployment)
kable(sm_table)
radius | average_unemployment | median_unemployment |
---|---|---|
two miles | 9.64 | 9.21 |
one mile | 9.85 | 9.27 |
half a mile | 11.23 | 10.49 |
gerrymandered | 15.74 | 15.89 |
# GEOIDs: 34017004400, 34017004500, 34017004600, 34017005200, 34017005300, 34017005500, 34017005600, 34017005801, 34017006000, 34017006100, 34017006200, 34017006400, 34017006500, 34017006700, 34017006800, 34017007600
hudson_unemployment_2012 <- get_acs(geography="tract", endyear=2012, variables= c("B23025_005E", "B23025_002E"), county = "Hudson", state="NJ")
hudson_unemployment_2012$moe <- NULL
hudson_unemployment_2012 <- spread(hudson_unemployment_2012,variable, estimate )
hudson_unemployment_2012$per_un <- round(hudson_unemployment_2012[,4]/hudson_unemployment_2012[,3]*100,2)
hudson_unemployment_2012 <- filter(hudson_unemployment_2012, GEOID!="34017006900" & GEOID!="34017980100")
proj1 <- c("34017000300", "34017000400", "34017000500", "34017000600", "34017000700", "34017000800", "34017001100", "34017001201", "34017001202", "34017001500", "34017002200", "34017002300", "34017002500", "34017002600", "34017003000", "34017003100", "34017003200",
"34017003300", "34017004400", "34017004500", "34017004600", "34017005000",
"34017005200", "34017005300", "34017005500")
hudson_unemployment_2012_sm <- filter(hudson_unemployment_2012, GEOID %in% proj1)
colnames(hudson_unemployment_2012_sm) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2012_sm$un_rate <- hudson_unemployment_2012_sm$unemp_rate$B23025_005
hudson_unemployment_2012_sm$unemp_rate <- NULL
hudson_unemployment_2012_sm$radius <- "gerrymandered"
proj1_half <- filter(nj_h_centroids, distance_proj2 <=.5)
proj1_half <- proj1_half$GEOID
hudson_unemployment_2012_sm_half <- filter(hudson_unemployment_2012, GEOID %in% proj1_half)
colnames(hudson_unemployment_2012_sm_half) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2012_sm_half$un_rate <- hudson_unemployment_2012_sm_half$unemp_rate$B23025_005
hudson_unemployment_2012_sm_half$unemp_rate <- NULL
hudson_unemployment_2012_sm_half$radius <- "half a mile"
proj1_one <- filter(nj_h_centroids, distance_proj2 <=1)
proj1_one <- proj1_one$GEOID
hudson_unemployment_2012_sm_one <- filter(hudson_unemployment_2012, GEOID %in% proj1_one)
colnames(hudson_unemployment_2012_sm_one) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2012_sm_one$un_rate <- hudson_unemployment_2012_sm_one$unemp_rate$B23025_005
hudson_unemployment_2012_sm_one$unemp_rate <- NULL
hudson_unemployment_2012_sm_one$radius <- "one mile"
proj1_two <- filter(nj_h_centroids, distance_proj2 <=2)
proj1_two <- proj1_two$GEOID
hudson_unemployment_2012_sm_two <- filter(hudson_unemployment_2012, GEOID %in% proj1_two)
colnames(hudson_unemployment_2012_sm_two) <- c("GEOID", "name", "total", "unemployed", "unemp_rate")
hudson_unemployment_2012_sm_two$un_rate <- hudson_unemployment_2012_sm_two$unemp_rate$B23025_005
hudson_unemployment_2012_sm_two$unemp_rate <- NULL
hudson_unemployment_2012_sm_two$radius <- "two miles"
hudson_unemployment_sm <- rbind(hudson_unemployment_2012_sm, hudson_unemployment_2012_sm_half, hudson_unemployment_2012_sm_one, hudson_unemployment_2012_sm_two)
hudson_unemployment_sm$name <- gsub(",.*", "", hudson_unemployment_sm$name)
nj_hf <- fortify(nj_h, region="GEOID")
nj_hud <- left_join(nj_hf, hudson_unemployment_sm, by=c("id"="GEOID"))
nj_hud <- filter(nj_hud, !is.na(radius))
nj_map <- ggplot()
nj_map <- nj_map + geom_polygon(data=nj_hf, aes(x=long, y=lat, group=group), fill=NA, color="black", size=.1)
nj_map <- nj_map + geom_polygon(data=nj_hud, aes(x=long, y=lat, group=group, fill=un_rate), color="black", size=.5)
nj_map <- nj_map + facet_wrap(~radius)
nj_map <- nj_map + coord_map()
nj_map <- nj_map + scale_fill_viridis(option = "heat", direction=-1, name = "Unemployment rate")
nj_map <- nj_map + scale_color_viridis(option = "heat", direction=-1)
nj_map <- nj_map + theme_nothing(legend=TRUE)
nj_map <- nj_map + labs(x=NULL, y=NULL, title="65 Bay Street (2015)")
nj_map <- nj_map + theme(panel.grid.major = element_line(colour = NA))
nj_map <- nj_map + theme(text = element_text(size=15))
nj_map <- nj_map + theme(plot.title=element_text(face="bold", hjust=.4))
nj_map <- nj_map + theme(plot.subtitle=element_text(face="italic", size=9, margin=margin(l=20)))
nj_map <- nj_map + theme(plot.caption=element_text(size=12, margin=margin(t=12), color="#7a7d7e", hjust=0))
nj_map <- nj_map + theme(legend.key.size = unit(1, "cm"))
nj_map <- nj_map + annotate("segment", x = -74.03577, xend = -74.005, y = 40.72, yend = 40.72, colour = "tomato", size=.5)
nj_map <- nj_map + annotate("point", x = -74.03577, y = 40.72, colour = "lightblue", size = 1)
nj_map <- nj_map + annotate("text", x = -73.98217, y = 40.72, label = "65 Bay Street", size=3, colour="gray30")
print(nj_map)
For this project, officials said the qualifying rate using 2015 annual average data is 9.3 percent (1.5 times the United States not seasonally adjusted unemployment rate for the same time period).
So this project would’ve qualified based on only the gerrymandered version since unemployment was too low in the other ways of grouping the census tracts.
sm_table <- hudson_unemployment_sm %>%
group_by(radius) %>%
summarize(average_unemployment=round(mean(un_rate, na.rm=T),2), median_unemployment=round(median(un_rate, na.rm=T),2)) %>%
arrange(average_unemployment)
kable(sm_table)
radius | average_unemployment | median_unemployment |
---|---|---|
half a mile | 5.05 | 5.18 |
one mile | 5.28 | 4.95 |
two miles | 7.53 | 5.98 |
gerrymandered | 12.93 | 12.27 |