load_packages <- function(pkg_list) {
for (pkg in pkg_list) {
if (!require(pkg, character.only = TRUE)) {
install.packages(pkg, dependencies = TRUE)
library(pkg, character.only = TRUE)
}
}
}
packages <- c("tidyverse", "readxl", "pander")
load_packages(packages)
knitr::opts_chunk$set(echo = TRUE,
warning = FALSE,
message = FALSE,
results = TRUE,
comment = NA,
fig.align = "center"
)
url <- "https://raw.githubusercontent.com/ncbrechbill/STA321/refs/heads/main/STA321/BrooklynBridge.csv"
data <- read.csv(url)
data$AvgTemp <- (data$HighTemp + data$LowTemp) / 2
data <- data %>%
mutate(data, PrecipFactor = ifelse(Precipitation > 0, "Yes", "No"))
model.quasi.freq <- glm(BrooklynBridge ~ AvgTemp + PrecipFactor + Day,
family = quasipoisson,
data = data)
qcoefs <- model.quasi.freq$coefficients
qnomon <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[4])
qnotue <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[8])
qnowed <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[9])
qnothu <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[7])
qnofri <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp))
qnosat <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[5])
qnosun <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[6])
qyesmon <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[4])
qyestue <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[8])
qyeswed <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[9])
qyesthu <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[7])
qyesfri <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3])
qyessat <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[5])
qyessun <- exp(qcoefs[1] + (qcoefs[2]*data$AvgTemp) + qcoefs[3] + qcoefs[6])
plot_quasi_no <- data.frame(
AvgTemp = data$AvgTemp,
Monday = qnomon,
Tuesday = qnotue,
Wednesday = qnowed,
Thursday = qnothu,
Friday = qnofri,
Saturday = qnosat,
Sunday = qnosun
)
plot_quasi_long.no <- pivot_longer(
plot_quasi_no,
cols = -AvgTemp,
names_to = "Day",
values_to = "ModeledCount"
)
plot_quasi_yes <- data.frame(
AvgTemp = data$AvgTemp,
Monday = qyesmon,
Tuesday = qyestue,
Wednesday = qyeswed,
Thursday = qyesthu,
Friday = qyesfri,
Saturday = qyessat,
Sunday = qyessun
)
plot_quasi_long.yes <- pivot_longer(
plot_quasi_yes,
cols = -AvgTemp,
names_to = "Day",
values_to = "ModeledCount"
)
# Combine all modeled values
quasi_all_counts <- c(qnomon, qnotue, qnowed, qnothu, qnofri, qnosat, qnosun,
qyesmon, qyestue, qyeswed, qyesthu, qyesfri, qyessat, qyessun)
# Get min and max for consistent y-axis
ymin <- min(quasi_all_counts)
ymax <- max(quasi_all_counts)
library(highcharter)
hchart(plot_quasi_long.no, "line", hcaes(x = AvgTemp, y = ModeledCount, group = Day)) %>%
hc_title(text = "Brooklyn Bridge Bikers (No Precipitation)") %>%
hc_yAxis(title = list(text = "Modeled Biker Count"), min = ymin, max = ymax) %>%
hc_xAxis(title = list(text = "Average Temperature (°F)"))
hchart(plot_quasi_long.yes, "line", hcaes(x = AvgTemp, y = ModeledCount, group = Day)) %>%
hc_title(text = "Brooklyn Bridge Bikers (With Precipitation)") %>%
hc_yAxis(title = list(text = "Modeled Biker Count"), min = ymin, max = ymax) %>%
hc_xAxis(title = list(text = "Average Temperature (°F)"))
LS0tDQp0aXRsZTogIkJyb29rbHluIEJyaWRnZSBCaWN5Y2xpbmcgVmlzdWFsaXphdGlvbiBXZWJsZXQiDQphdXRob3I6ICJOb2FoIEJyZWNoYmlsbCINCm91dHB1dDoNCiAgaHRtbF9kb2N1bWVudDoNCiAgICB0b2M6IHllcw0KICAgIHRvY19mbG9hdDogeWVzDQogICAgdG9jX2RlcHRoOiA0DQogICAgZmlnX3dpZHRoOiA2DQogICAgZmlnX2hlaWdodDogNg0KICAgIGZpZ19jYXB0aW9uOiB5ZXMNCiAgICBudW1iZXJfc2VjdGlvbnM6IHllcw0KICAgIHRvY19jb2xsYXBzZWQ6IHllcw0KICAgIGNvZGVfZm9sZGluZzogaGlkZQ0KICAgIGNvZGVfZG93bmxvYWQ6IHllcw0KICAgIHNtb290aF9zY3JvbGw6IHllcw0KICAgIHRoZW1lOiBsdW1lbg0KZWRpdG9yX29wdGlvbnM6IA0KICBtYXJrZG93bjogDQogICAgd3JhcDogNzINCi0tLQ0KDQpgYGB7Y3NzLCBlY2hvID0gRkFMU0V9DQovKiBDYXNjYWRpbmcgU3R5bGUgU2hlZXRzIChDU1MpIGlzIGEgc3R5bGVzaGVldCBsYW5ndWFnZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBwcmVzZW50YXRpb24gb2YgYSBkb2N1bWVudCB3cml0dGVuIGluIEhUTUwgb3IgWE1MLiBpdCBpcyBhIHNpbXBsZSBtZWNoYW5pc20gZm9yIGFkZGluZyBzdHlsZSAoZS5nLiwgZm9udHMsIGNvbG9ycywgc3BhY2luZykgdG8gV2ViIGRvY3VtZW50cy4gKi8NCg0KaDEudGl0bGUgeyAgLyogVGl0bGUgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIHRoZSByZXBvcnQgdGl0bGUgKi8NCiAgZm9udC1zaXplOiAyNHB4Ow0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KICBmb250LXdlaWdodDogYm9sZDsNCiAgZm9udC1mYW1pbHk6ICJHaWxsIFNhbnMiLCBzYW5zLXNlcmlmOw0KfQ0KaDQuYXV0aG9yIHsgLyogSGVhZGVyIDQgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBhdXRob3JzICAqLw0KICBmb250LXNpemU6IDIwcHg7DQogIGZvbnQtZmFtaWx5OiBzeXN0ZW0tdWk7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICBjb2xvcjogRGFya1JlZDsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDQuZGF0ZSB7IC8qIEhlYWRlciA0IC0gZm9udCBzcGVjaWZpY2F0aW9ucyBmb3IgdGhlIGRhdGUgICovDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogIGNvbG9yOiBEYXJrQmx1ZTsNCiAgdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KaDEgeyAvKiBIZWFkZXIgMSAtIGZvbnQgc3BlY2lmaWNhdGlvbnMgZm9yIGxldmVsIDEgc2VjdGlvbiB0aXRsZSAgKi8NCiAgICBmb250LXNpemU6IDIycHg7DQogICAgZm9udC1mYW1pbHk6IHN5c3RlbS11aTsNCiAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgY29sb3I6IG5hdnk7DQogICAgdGV4dC1hbGlnbjogbGVmdDsNCn0NCmgyIHsgLyogSGVhZGVyIDIgLSBmb250IHNwZWNpZmljYXRpb25zIGZvciBsZXZlbCAyIHNlY3Rpb24gdGl0bGUgKi8NCiAgICBmb250LXNpemU6IDIwcHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmgzIHsgLyogSGVhZGVyIDMgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIGxldmVsIDMgc2VjdGlvbiB0aXRsZSAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBuYXZ5Ow0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmg0IHsgLyogSGVhZGVyIDQgLSBmb250IHNwZWNpZmljYXRpb25zIG9mIGxldmVsIDQgc2VjdGlvbiB0aXRsZSAgKi8NCiAgICBmb250LXNpemU6IDE4cHg7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICAgIGZvbnQtZmFtaWx5OiAiVGltZXMgTmV3IFJvbWFuIiwgVGltZXMsIHNlcmlmOw0KICAgIGNvbG9yOiBkYXJrcmVkOw0KICAgIHRleHQtYWxpZ246IGxlZnQ7DQp9DQoNCmJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQoNCi5oaWdobGlnaHRtZSB7IGJhY2tncm91bmQtY29sb3I6eWVsbG93OyB9DQoNCnAgeyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlOyB9DQpgYGANCg0KYGBge3IgcGFja2FnZXMsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9DQpsb2FkX3BhY2thZ2VzIDwtIGZ1bmN0aW9uKHBrZ19saXN0KSB7DQogIGZvciAocGtnIGluIHBrZ19saXN0KSB7DQogICAgaWYgKCFyZXF1aXJlKHBrZywgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKSkgew0KICAgICAgaW5zdGFsbC5wYWNrYWdlcyhwa2csIGRlcGVuZGVuY2llcyA9IFRSVUUpDQogICAgICBsaWJyYXJ5KHBrZywgY2hhcmFjdGVyLm9ubHkgPSBUUlVFKQ0KICAgIH0NCiAgfQ0KfQ0KDQpwYWNrYWdlcyA8LSBjKCJ0aWR5dmVyc2UiLCAicmVhZHhsIiwgInBhbmRlciIpDQpsb2FkX3BhY2thZ2VzKHBhY2thZ2VzKQ0KDQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IFRSVUUsICAgICAgDQogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAgIA0KICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSwgIA0KICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdHMgPSBUUlVFLA0KICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnQgPSBOQSwNCiAgICAgICAgICAgICAgICAgICAgICBmaWcuYWxpZ24gPSAiY2VudGVyIg0KICAgICAgICAgICAgICAgICAgICAgICkgICANCnVybCA8LSAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL25jYnJlY2hiaWxsL1NUQTMyMS9yZWZzL2hlYWRzL21haW4vU1RBMzIxL0Jyb29rbHluQnJpZGdlLmNzdiINCmRhdGEgPC0gcmVhZC5jc3YodXJsKQ0KDQpkYXRhJEF2Z1RlbXAgPC0gKGRhdGEkSGlnaFRlbXAgKyBkYXRhJExvd1RlbXApIC8gMg0KDQpkYXRhIDwtIGRhdGEgJT4lDQogIG11dGF0ZShkYXRhLCBQcmVjaXBGYWN0b3IgPSBpZmVsc2UoUHJlY2lwaXRhdGlvbiA+IDAsICJZZXMiLCAiTm8iKSkNCg0KDQptb2RlbC5xdWFzaS5mcmVxIDwtIGdsbShCcm9va2x5bkJyaWRnZSB+IEF2Z1RlbXAgKyBQcmVjaXBGYWN0b3IgKyBEYXksDQogICAgICAgICAgICAgICAgICAgICAgICBmYW1pbHkgPSBxdWFzaXBvaXNzb24sDQogICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YSkNCg0KDQpxY29lZnMgPC0gbW9kZWwucXVhc2kuZnJlcSRjb2VmZmljaWVudHMNCg0KcW5vbW9uIDwtIGV4cChxY29lZnNbMV0gKyAocWNvZWZzWzJdKmRhdGEkQXZnVGVtcCkgKyBxY29lZnNbNF0pDQpxbm90dWUgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1s4XSkNCnFub3dlZCA8LSBleHAocWNvZWZzWzFdICsgKHFjb2Vmc1syXSpkYXRhJEF2Z1RlbXApICsgcWNvZWZzWzldKQ0KcW5vdGh1IDwtIGV4cChxY29lZnNbMV0gKyAocWNvZWZzWzJdKmRhdGEkQXZnVGVtcCkgKyBxY29lZnNbN10pDQpxbm9mcmkgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSkNCnFub3NhdCA8LSBleHAocWNvZWZzWzFdICsgKHFjb2Vmc1syXSpkYXRhJEF2Z1RlbXApICsgcWNvZWZzWzVdKQ0KcW5vc3VuIDwtIGV4cChxY29lZnNbMV0gKyAocWNvZWZzWzJdKmRhdGEkQXZnVGVtcCkgKyBxY29lZnNbNl0pDQoNCnF5ZXNtb24gPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s0XSkNCnF5ZXN0dWUgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s4XSkNCnF5ZXN3ZWQgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s5XSkNCnF5ZXN0aHUgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s3XSkNCnF5ZXNmcmkgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSkNCnF5ZXNzYXQgPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s1XSkNCnF5ZXNzdW4gPC0gZXhwKHFjb2Vmc1sxXSArIChxY29lZnNbMl0qZGF0YSRBdmdUZW1wKSArIHFjb2Vmc1szXSArIHFjb2Vmc1s2XSkNCg0KcGxvdF9xdWFzaV9ubyA8LSBkYXRhLmZyYW1lKA0KICBBdmdUZW1wID0gZGF0YSRBdmdUZW1wLA0KICBNb25kYXkgPSBxbm9tb24sDQogIFR1ZXNkYXkgPSBxbm90dWUsDQogIFdlZG5lc2RheSA9IHFub3dlZCwNCiAgVGh1cnNkYXkgPSBxbm90aHUsDQogIEZyaWRheSA9IHFub2ZyaSwNCiAgU2F0dXJkYXkgPSBxbm9zYXQsDQogIFN1bmRheSA9IHFub3N1bg0KKQ0KDQpwbG90X3F1YXNpX2xvbmcubm8gPC0gcGl2b3RfbG9uZ2VyKA0KICBwbG90X3F1YXNpX25vLA0KICBjb2xzID0gLUF2Z1RlbXAsDQogIG5hbWVzX3RvID0gIkRheSIsDQogIHZhbHVlc190byA9ICJNb2RlbGVkQ291bnQiDQopDQoNCg0KcGxvdF9xdWFzaV95ZXMgPC0gZGF0YS5mcmFtZSgNCiAgQXZnVGVtcCA9IGRhdGEkQXZnVGVtcCwNCiAgTW9uZGF5ID0gcXllc21vbiwNCiAgVHVlc2RheSA9IHF5ZXN0dWUsDQogIFdlZG5lc2RheSA9IHF5ZXN3ZWQsDQogIFRodXJzZGF5ID0gcXllc3RodSwNCiAgRnJpZGF5ID0gcXllc2ZyaSwNCiAgU2F0dXJkYXkgPSBxeWVzc2F0LA0KICBTdW5kYXkgPSBxeWVzc3VuDQopDQoNCnBsb3RfcXVhc2lfbG9uZy55ZXMgPC0gcGl2b3RfbG9uZ2VyKA0KICBwbG90X3F1YXNpX3llcywNCiAgY29scyA9IC1BdmdUZW1wLA0KICBuYW1lc190byA9ICJEYXkiLA0KICB2YWx1ZXNfdG8gPSAiTW9kZWxlZENvdW50Ig0KKQ0KDQojIENvbWJpbmUgYWxsIG1vZGVsZWQgdmFsdWVzDQpxdWFzaV9hbGxfY291bnRzIDwtIGMocW5vbW9uLCBxbm90dWUsIHFub3dlZCwgcW5vdGh1LCBxbm9mcmksIHFub3NhdCwgcW5vc3VuLA0KICAgICAgICAgICAgICAgIHF5ZXNtb24sIHF5ZXN0dWUsIHF5ZXN3ZWQsIHF5ZXN0aHUsIHF5ZXNmcmksIHF5ZXNzYXQsIHF5ZXNzdW4pDQoNCiMgR2V0IG1pbiBhbmQgbWF4IGZvciBjb25zaXN0ZW50IHktYXhpcw0KeW1pbiA8LSBtaW4ocXVhc2lfYWxsX2NvdW50cykNCnltYXggPC0gbWF4KHF1YXNpX2FsbF9jb3VudHMpDQoNCmxpYnJhcnkoaGlnaGNoYXJ0ZXIpDQoNCmhjaGFydChwbG90X3F1YXNpX2xvbmcubm8sICJsaW5lIiwgaGNhZXMoeCA9IEF2Z1RlbXAsIHkgPSBNb2RlbGVkQ291bnQsIGdyb3VwID0gRGF5KSkgJT4lDQogIGhjX3RpdGxlKHRleHQgPSAiQnJvb2tseW4gQnJpZGdlIEJpa2VycyAoTm8gUHJlY2lwaXRhdGlvbikiKSAlPiUNCiAgaGNfeUF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiTW9kZWxlZCBCaWtlciBDb3VudCIpLCBtaW4gPSB5bWluLCBtYXggPSB5bWF4KSAlPiUNCiAgaGNfeEF4aXModGl0bGUgPSBsaXN0KHRleHQgPSAiQXZlcmFnZSBUZW1wZXJhdHVyZSAowrBGKSIpKQ0KDQpoY2hhcnQocGxvdF9xdWFzaV9sb25nLnllcywgImxpbmUiLCBoY2Flcyh4ID0gQXZnVGVtcCwgeSA9IE1vZGVsZWRDb3VudCwgZ3JvdXAgPSBEYXkpKSAlPiUNCiAgaGNfdGl0bGUodGV4dCA9ICJCcm9va2x5biBCcmlkZ2UgQmlrZXJzIChXaXRoIFByZWNpcGl0YXRpb24pIikgJT4lDQogIGhjX3lBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIk1vZGVsZWQgQmlrZXIgQ291bnQiKSwgbWluID0geW1pbiwgbWF4ID0geW1heCkgJT4lDQogIGhjX3hBeGlzKHRpdGxlID0gbGlzdCh0ZXh0ID0gIkF2ZXJhZ2UgVGVtcGVyYXR1cmUgKMKwRikiKSkNCg0KDQpgYGANCg0KDQoNCg==