Reproducible script for Inside Out: Externalizing Assumptions in Data Analysis as Validation Checks
set.seed(1234)
step_count <- tibble(id = 1:300) |>
rowwise() |>
mutate(
small_n = rpois(1, 8),
large_n = rpois(1, 8),
norm_sd = rlogis(1, 800, scale = 100),
norm_n = 30 - small_n - large_n,
step = list(round(c(rnorm(small_n, 6000, 200),
rnorm(large_n, 12000, 200),
rnorm(norm_n, 9000, 300)
), 0)),
mean = mean(step, na.rm = TRUE),
unexpect = ifelse(between(mean, 8500, 9500), 0, 1),
`q(step, 0.6) > 10000` = ifelse(quantile(step, 0.6, na.rm = TRUE) > 10000, 1, 0),
`q(step, 0.4) < 8000` = ifelse(quantile(step, 0.4, na.rm = TRUE) < 8000, 1, 0),
`sd(step) > 2500` = ifelse(sd(step) > 2500, 1, 0),
) |>
ungroup()
step_count |>
ggplot(aes(x = mean, y = 1, color = as.factor(unexpect))) +
ggbeeswarm::geom_quasirandom() +
scale_y_continuous(breaks = seq(0, 13, 1)) +
scale_color_brewer(palette = "Dark2") +
xlab("Average number of steps") +
ylab("") +
theme_bw() +
theme(legend.position = "none", panel.grid.minor = element_blank(), axis.text.y = element_blank())
## Orientation inferred to be along y-axis; override with `position_quasirandom(orientation =
## 'x')`
![Beeswarm plot of average step counts across 300 simulated 30-day periods. Each point represents the average step count from one simulation. Similar to a boxplot or violin plot, the beeswarm plot also displays the distribution of each individual data point. The orange points indicate instances where the average step count fails outside the [8,500, 9,500] interval, representing an unexpected outcome in this scenario.](data:image/png;base64,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)
fit <- step_count |> fit_logic_reg(unexpect, `q(step, 0.6) > 10000`:`sd(step) > 2500`, seed = 1, nleaves = 3)
plot_logicreg(fit)

fit_regtree <- rpart(unexpect ~ ., data = step_count |> dplyr::select(unexpect:`sd(step) > 2500`), method = "class",
control = rpart.control(cp = 0.01))
pred_vec <- predict(fit_regtree) |> as_tibble() |> mutate(.fitted = ifelse(`0` > `1`, 0, 1)) |> dplyr::select(.fitted)
regtree_df <- step_count |> dplyr::select(unexpect) |> bind_cols(pred_vec) |>
calc_miscla_rate(unexpect, .fitted)
sum_entropy <- lapply(as.list(step_count[,c(9:11)]), function(x){infotheo::entropy(x, method = "emp")}) |> unlist() |> sum()
multi_info <- infotheo::multiinformation(step_count[,c(9:11)])
joint_entropy <- sum_entropy - multi_info
ratio <- joint_entropy / sum_entropy
regtree_df <- regtree_df |>
mutate(independence = (ratio - 1/3) / (1 - 1/3)) |>
calc_metrics(metrics = c("harmonic", "arithmetic"))
sum_entropy <- lapply(as.list(step_count[,c(9,11)]), function(x){infotheo::entropy(x, method = "emp")}) |> unlist() |> sum()
multi_info <- infotheo::multiinformation(step_count[,c(9,11)])
joint_entropy <- sum_entropy - multi_info
ratio <- joint_entropy / sum_entropy
another <- tibble(.fitted = as.vector(step_count[,9] & !step_count[,11]) |> as.numeric(),
unexpect = step_count$unexpect) |>
calc_miscla_rate(unexpect, .fitted) |>
mutate(independence = (ratio - 1/2) / (1 - 1/2)) |>
calc_metrics(metrics = c("harmonic", "arithmetic")) |>
mutate(id = 6)
list(tibble(.fitted = step_count$`q(step, 0.6) > 10000`, unexpect = step_count$unexpect),
tibble(.fitted = step_count$`q(step, 0.4) < 8000`, unexpect = step_count$unexpect),
tibble(.fitted = step_count$`sd(step) > 2500`, unexpect = step_count$unexpect)
) |>
map_dfr(~.x |> calc_miscla_rate(unexpect, .fitted) |>
mutate(independence = 1) |>
calc_metrics(metrics = c("harmonic", "arithmetic"))) |>
mutate(checks = c("Check 1: q(step, 0.6) > 10000", "Check 2: q(step, 0.4) < 8000", "Check 3: sd(step) > 2500")) |>
bind_rows(augment(fit) |>
calc_miscla_rate(.fitted, unexpect) |>
calc_independence() |>
calc_metrics(metrics = c("harmonic", "arithmetic")) |>
mutate(checks = "Logic regression: (check 1 OR check 2) AND (not check 3)")) |>
bind_rows(another |>
mutate(checks = "Comparison: (check 1) AND (not check 3)")) |>
bind_rows(regtree_df |>
mutate(checks = "Regression tree")) |>
dplyr::select(checks, precision:arithmetic) |>
dplyr::rename(`indep.` = independence) |>
kable(digits = 3, escape = FALSE, format = "html", booktab = TRUE,
col.names = c("Checks", "Precision", "Recall", "Independence", "Harmonic", "Arithmetic")) |>
kableExtra::kable_styling(latex_options="scale_down") |>
column_spec(1, width = '19em')
| Checks |
Precision |
Recall |
Independence |
Harmonic |
Arithmetic |
| Check 1: q(step, 0.6) > 10000 |
0.319 |
0.575 |
1.000 |
0.511 |
0.631 |
| Check 2: q(step, 0.4)
|
0.264 |
0.613 |
1.000 |
0.467 |
0.626 |
| Check 3: sd(step) > 2500 |
0.153 |
0.289 |
1.000 |
0.273 |
0.481 |
| Logic regression: (check 1 OR check 2) AND (not check 3) |
0.861 |
0.431 |
0.818 |
0.637 |
0.703 |
| Comparison: (check 1) AND (not check 3) |
0.278 |
0.870 |
0.881 |
0.510 |
0.676 |
| Regression tree |
0.542 |
0.780 |
0.818 |
0.689 |
0.713 |
aa2 <- fitdistrplus::fitdist(pm10$mortality, "nbinom")
p1 <- tibble(fitted = rnbinom(558, size = aa2$estimate[1], mu = aa2$estimate[2]),
observed = pm10$mortality) %>%
ggplot(aes(sample = fitted)) +
stat_qq_band(fill = "grey80") +
stat_qq_line(color = "grey30") +
stat_qq_point(size = 0.3) +
theme_bw() +
theme(aspect.ratio = 1) +
ggtitle("Mortality")
aa6 <- fitdistrplus::fitdist(pm10$pm10[pm10$pm10 < 90]/100, "beta")
p2 <- tibble(fitted = rbeta(557, shape1 = aa6$estimate[1], shape2 = aa6$estimate[2]) * 100,
observed = pm10$pm10[pm10$pm10 < 90]) %>%
ggplot(aes(sample = fitted)) +
stat_qq_band(fill = "grey80") +
stat_qq_line(color = "grey30") +
stat_qq_point(size = 0.3) +
theme_bw() +
theme(aspect.ratio = 1) +
ggtitle("PM10")
aa4 <- fitdistrplus::fitdist(pm10$temp, "weibull")
p3 <- tibble(fitted= rweibull(558, aa4$estimate[1], aa4$estimate[2]),
observed= pm10$temp) %>%
ggplot(aes(sample = fitted)) +
stat_qq_band(fill = "grey80") +
stat_qq_line(color = "grey30") +
stat_qq_point(size = 0.3) +
theme_bw() +
theme(aspect.ratio = 1) +
ggtitle("Temperature")
p1 | p2 | p3

# cor(pm10$pm10, pm10$mortality)
# cor(pm10$temp, pm10$mortality)
# cor(pm10$temp, pm10$pm10)
corr_grid <- expand.grid(#seq(0.01, 0.2, by = 0.02),
seq(-0.1, 0.1, by = 0.02),
seq(0.1, 0.5, by = 0.05),
seq(0.25, 0.45, by = 0.05))
gen_corr_mtx <- function(r1, r2, r3) {
# correlation between mortality and pm10 are negative - r1
# correlation between mortality and temp are negative - r2
cor_matrix <- matrix(c(1, r1, -r2,
r1, 1, r3,
-r2, r3, 1), nrow = 3, byrow = TRUE)
if (all(eigen(cor_matrix)$values > 0)) return(cor_matrix)
}
corr_mtx <- lapply(1:nrow(corr_grid), function(i) {
gen_corr_mtx(corr_grid[i, 1], corr_grid[i, 2], corr_grid[i, 3]) })
corr_mtx <- corr_mtx[map_lgl(corr_mtx, ~!is.null(.x))]
sample_size <- c(500, 3000)
outlier <- c(TRUE, FALSE)
generate_data <- function(n, mtx, seed = 123, outlier = FALSE) {
mu <- c(0, 0, 0)
set.seed(seed)
data <- mvrnorm(n, mu, mtx, empirical = TRUE)
U <- pnorm(data, mean = 0, sd = 1)
if (!outlier) {
tibble(mortality = qnbinom(U[,1], size = 74, mu = 183),
pm10 = qbeta(U[,2], shape1 = 4.21, shape2 = 11.67) * 100,
temp = qweibull(U[,3], shape = 3.8, scale = 61))
} else{
pm10_vec <- qbeta(U[,2], shape1 = 4.21, shape2 = 11.67) * 100
tibble(
mortality = c(qnbinom(U[,1], size = 74, mu = 183)[-1],
rnorm(n = 1, mean = 300, sd = 10)),
pm10 = c(pm10_vec[-1], rnorm(n = 1, mean = 100, sd = 10)),
temp = qweibull(U[,3], shape = 3.8, scale = 61)
)
}
}
res <- tibble(corr_mtx = corr_mtx) |>
mutate(id = row_number()) |>
crossing(sample_size, outlier) |>
rowwise() |>
mutate(data = list(generate_data(n = sample_size, mtx = corr_mtx, outlier = outlier)),
fit = list(summary(glm(mortality ~ pm10 + temp, family = "poisson", data))$coefficients))
## Warning: There were 990 warnings in `mutate()`.
## The first warning was:
## ℹ In argument: `fit = list(...)`.
## ℹ In row 2.
## Caused by warning in `dpois()`:
## ! non-integer x = 291.790133
## ℹ Run `dplyr::last_dplyr_warnings()` to see the 989 remaining warnings.
pm10_df <- res |>
mutate(
p_value = fit[2,4],
coef = fit[2,1],
mor_pm10_correlation = corr_mtx[1, 2],
mor_temp_correlation = corr_mtx[1, 3],
temp_pm10_yz_correlation = corr_mtx[2, 3],
unexpect = ifelse(between(coef, 0, 0.005), 0, 1),
`cor(m, PM10) < -0.05` = ifelse(mor_pm10_correlation < -0.05, 1, 0),
`cor(m, PM10) < -0.03` = ifelse(mor_pm10_correlation < -0.03, 1, 0),
`cor(m, PM10) > 0.03` = ifelse(mor_pm10_correlation > 0.03, 1, 0),
`cor(m, PM10) > 0.05` = ifelse(mor_pm10_correlation > 0.05, 1, 0),
`cor(m, tmp) > -0.3` = ifelse(mor_temp_correlation > -0.3, 1, 0),
`cor(m, tmp) > -0.35` = ifelse(mor_temp_correlation > -0.35, 1, 0),
`cor(m, tmp) > -0.4` = ifelse(mor_temp_correlation > -0.4, 1, 0),
`cor(m, tmp) > -0.45` = ifelse(mor_temp_correlation > -0.45, 1, 0)
) |>
ungroup()
pm10_df <- pm10_df |>
rowwise() |>
mutate(PM10_outlier = ifelse(any(scale(data$pm10) > 4), 1, 0),
mortality_outlier = ifelse(any(scale(data$mortality) > 4), 1, 0)
) |>
ungroup()
unexpect_df <- tibble(
unexpect = c(0, 1),
n = pm10_df$unexpect |> table() |> as.numeric() |> rev(),
wgt = n/sum(n))
wgt_vec <- pm10_df |> dplyr::select(unexpect) |> left_join(unexpect_df) |> pull(wgt)
## Joining with `by = join_by(unexpect)`
fit <- pm10_df |> fit_logic_reg(unexpect, `cor(m, PM10) < -0.05`:mortality_outlier,
seed = 7, nleaves = 4, wgt = wgt_vec)
plot_logicreg(fit)

df <- list(
tibble(.fitted = pm10_df$`cor(m, PM10) < -0.03`,
unexpect = pm10_df$unexpect),
tibble(.fitted = pm10_df$`cor(m, tmp) > -0.3`,
unexpect = pm10_df$unexpect),
tibble(.fitted = pm10_df$mortality_outlier,
unexpect = pm10_df$unexpect),
tibble(.fitted = pm10_df$PM10_outlier,
unexpect = pm10_df$unexpect)) |>
map_dfr(~.x |> calc_miscla_rate(.fitted, unexpect) |>
mutate(independence = 1) |>
calc_metrics(metrics = c("harmonic", "arithmetic")), .id = "id") |>
mutate(id = as.numeric(id))
reg <- fit |> augment() |>
calc_miscla_rate(unexpect, .fitted) |>
calc_independence() |>
calc_metrics(metrics = c("harmonic", "arithmetic")) |>
mutate(id = 5)
df <- df |> bind_rows(reg)
tbl <- tibble(check = c("Check 1: cor(m, PM10) < -- 0.03", "Check 2: cor(m, tmp) > -- 0.35",
"Check 3: mortality outlier", "Check 4: PM10 outlier",
"Logic regression: (check 1) AND ((check 2) OR (check 3 AND check 4))")) |>
bind_cols(df |> dplyr::select(-id)) |> rename(`indep.` = independence)
tbl |>
kable(digits = 3, escape = FALSE, format = "html", booktab = TRUE,
col.names = c("Checks", "Precision", "Recall", "Independence", "Harmonic", "Arithmetic")) |>
kableExtra::kable_styling(latex_options="scale_down") |>
column_spec(1, width = '18em')
| Checks |
Precision |
Recall |
Independence |
Harmonic |
Arithmetic |
| Check 1: cor(m, PM10)
|
0.551 |
0.894 |
1.000 |
0.763 |
0.815 |
| Check 2: cor(m, tmp) > -- 0.35 |
0.281 |
0.556 |
1.000 |
0.472 |
0.612 |
| Check 3: mortality outlier |
0.302 |
0.775 |
1.000 |
0.536 |
0.692 |
| Check 4: PM10 outlier |
0.305 |
0.766 |
1.000 |
0.537 |
0.690 |
| Logic regression: (check 1) AND ((check 2) OR (check 3 AND check 4)) |
0.876 |
0.722 |
0.812 |
0.798 |
0.803 |
pm10 <- read_csv("data/pm10.csv", col_types = cols()) |> filter(!is.na(pm10)) |> filter(!is.na(temp))
files <- list.files(path = "data", pattern = "csv", full.names = TRUE)[-1]
pred_res <- files |> map_dfr(function(raw){
data <- read_csv(raw, col_types = cols()) |> filter(!is.na(pm10)) |> filter(!is.na(temp))
res_df <- glm(mortality ~ pm10 + temp, family = "poisson", data = data)$coefficients |>
as_tibble_row()
res_df |>
mutate(
cor_m_tmp = cor(data$mortality, data$temp),
cor_m_pm10 = cor(data$mortality, data$pm10),
cor_tmp_pm10 = cor(data$temp, data$pm10),
unexpect = !between(pm10, 0, 0.005),
mort_outlier = any(scale(data$mortality) > 4),
pm10_outlier = any(scale(data$pm10) > 4),
lgl_cor_m_tmp = cor(data$mortality, data$temp) > -0.3,
lgl_cor_m_pm10 = cor(data$mortality, data$pm10) < -0.03,
.pred = ((mort_outlier & pm10_outlier) | (lgl_cor_m_tmp)) & (lgl_cor_m_pm10),
ss = nrow(data)
)
})
city_name_map <- read_csv(here::here("data/city_name_map.csv"),col_types = cols())
df <- tibble(city = str_remove(files, "data/pm10-") |> str_remove(".csv")) |> bind_cols(pred_res) |>
left_join(city_name_map) |>
filter(city != "data/pm10") |>
dplyr::select(cityname, pm10, unexpect, .pred,
cor_m_tmp, lgl_cor_m_tmp,
cor_m_pm10, lgl_cor_m_pm10,
mort_outlier, pm10_outlier)
## Joining with `by = join_by(city)`
df |>
mutate(pm10 = format(round(pm10, 4), nsmall = 4),
cor_m_tmp = format(round(cor_m_tmp, 2), nsmall = 2),
cor_m_pm10 = format(round(cor_m_pm10, 2), nsmall = 2)) |>
mutate(across(c(unexpect, .pred, lgl_cor_m_pm10, lgl_cor_m_tmp, mort_outlier, pm10_outlier),
~ifelse(.x, "T", "F"))) |>
mutate(cor_m_tmp = paste0(cor_m_tmp, " (", lgl_cor_m_tmp, ")"),
cor_m_pm10 = paste0(cor_m_pm10, " (", lgl_cor_m_pm10, ")")) |>
dplyr::select(-lgl_cor_m_tmp, -lgl_cor_m_pm10) |>
kable(format = "html", booktabs = TRUE, escape = F,
align = "lrccrrcc")
| cityname |
pm10 |
unexpect |
.pred |
cor_m_tmp |
cor_m_pm10 |
mort_outlier |
pm10_outlier |
| Atlanta |
-0.0008 |
T |
T |
-0.26 (T) |
-0.16 (T) |
F |
F |
| Austin |
-0.0030 |
T |
T |
-0.12 (T) |
-0.11 (T) |
F |
T |
| Baltimore |
0.0018 |
F |
F |
-0.21 (T) |
0.01 (F) |
T |
T |
| Boston |
0.0019 |
F |
F |
-0.16 (T) |
0.02 (F) |
F |
T |
| Buffalo |
0.0028 |
F |
F |
-0.23 (T) |
-0.02 (F) |
F |
T |
| Chicago |
0.0011 |
F |
F |
-0.38 (F) |
-0.02 (F) |
T |
T |
| Cincinnati |
0.0011 |
F |
T |
-0.27 (T) |
-0.06 (T) |
T |
T |
| Cleveland |
0.0010 |
F |
F |
-0.30 (F) |
-0.02 (F) |
T |
T |
| Columbus |
0.0004 |
F |
T |
-0.20 (T) |
-0.07 (T) |
F |
T |
| Denver |
0.0010 |
F |
F |
-0.23 (T) |
0.06 (F) |
F |
T |
| Detroit |
0.0011 |
F |
F |
-0.30 (T) |
0.04 (F) |
F |
T |
| Dallas/Fort Worth |
0.0016 |
F |
T |
-0.30 (F) |
-0.03 (T) |
T |
T |
| Honolulu |
0.0006 |
F |
F |
-0.17 (T) |
0.05 (F) |
T |
T |
| Houston |
0.0007 |
F |
F |
-0.22 (T) |
-0.03 (F) |
F |
T |
| Indianapolis |
0.0014 |
F |
F |
-0.13 (T) |
0.02 (F) |
F |
T |
| Kansas City |
0.0022 |
F |
F |
-0.20 (T) |
0.02 (F) |
F |
T |
| Los Angeles |
0.0011 |
F |
F |
-0.47 (F) |
-0.01 (F) |
T |
T |
| Las Vegas |
0.0008 |
F |
F |
-0.27 (T) |
0.05 (F) |
T |
T |
| Memphis |
-0.0007 |
T |
T |
-0.16 (T) |
-0.10 (T) |
F |
T |
| Miami |
-0.0004 |
T |
F |
-0.16 (T) |
-0.02 (F) |
F |
T |
| Milwaukee |
0.0026 |
F |
F |
-0.22 (T) |
0.09 (F) |
F |
T |
| Minneapolis/St. Paul |
0.0009 |
F |
F |
-0.30 (F) |
-0.01 (F) |
T |
T |
| New York |
0.0022 |
F |
F |
-0.46 (F) |
-0.01 (F) |
T |
T |
| Oakland |
0.0008 |
F |
F |
-0.28 (T) |
0.04 (F) |
F |
T |
| Orlando |
-0.0008 |
T |
T |
-0.21 (T) |
-0.05 (T) |
F |
T |
| Philadelphia |
0.0021 |
F |
F |
-0.27 (T) |
0.11 (F) |
T |
T |
| Phoenix |
0.0009 |
F |
F |
-0.44 (F) |
0.07 (F) |
T |
T |
| Pittsburgh |
0.0009 |
F |
T |
-0.36 (F) |
-0.08 (T) |
T |
T |
| Riverside |
0.0001 |
F |
T |
-0.27 (T) |
-0.11 (T) |
T |
T |
| Sacramento |
0.0005 |
F |
F |
-0.30 (T) |
0.05 (F) |
T |
T |
| Salt Lake City |
-0.0004 |
T |
T |
-0.19 (T) |
-0.03 (T) |
F |
T |
| San Antonio |
-0.0021 |
T |
T |
-0.22 (T) |
-0.16 (T) |
F |
T |
| San Bernardino |
0.0006 |
F |
T |
-0.28 (T) |
-0.09 (T) |
T |
T |
| San Diego |
0.0011 |
F |
F |
-0.33 (F) |
0.03 (F) |
T |
T |
| San Jose |
0.0006 |
F |
F |
-0.23 (T) |
0.08 (F) |
F |
T |
| Seattle |
0.0003 |
F |
F |
-0.24 (T) |
0.06 (F) |
F |
T |
| Santa Ana/Anaheim |
0.0005 |
F |
T |
-0.26 (T) |
-0.04 (T) |
T |
T |
| St. Petersburg |
0.0012 |
F |
F |
-0.31 (F) |
0.01 (F) |
F |
T |
| Tampa |
-0.0003 |
T |
T |
-0.20 (T) |
-0.04 (T) |
F |
T |
| Tucson |
0.0028 |
F |
F |
-0.31 (F) |
0.18 (F) |
T |
T |
df |>
dplyr::select(unexpect, .pred) |>
table() |>
as_tibble() |>
rename(Observed = unexpect) |>
pivot_wider(names_from = .pred, values_from = n) |>
kable(format = "html",
booktabs = TRUE) |>
add_header_above(c("", "Predicted"=2),
escape = FALSE)
|
Predicted |
| Observed |
FALSE |
TRUE |
| FALSE |
25 |
7 |
| TRUE |
1 |
7 |