library(here)
library(tidyverse)
library(gt)
source(here("04-topics/rep-chv2011/Rcode/chv2011-data-prep.R"))
source(here("04-topics/rep-chv2011/Rcode/chv2011-gt-quarto.R"))

B_BOOT <- as.integer(Sys.getenv("CHV2011_BOOT", "250"))

raw <- load_chv2011_raw() |> add_chv2011_derived()
merge_validation <- validate_chv2011_merge(raw)
fit <- glm(choice_formula("baseline"), data = raw, family = binomial(link = "logit"))
avder <- average_marginal_derivatives(fit, raw)
se <- bootstrap_avg_derivatives(raw, B = B_BOOT)
table3_validation <- validate_chv2011_table3(df = raw, fit = fit)
joint_p <- table3_validation$joint_iv_p

labels <- c(
  cafqt = "Corrected AFQT",
  mhgc = "Mother's Years of Schooling",
  numsibs = "Number of Siblings",
  urban14 = "Urban Residence at 14",
  lavlocwage17 = "\"Permanent\" Local Log Earnings at 17",
  avurate = "\"Permanent\" State Unemployment Rate at 17",
  pub4 = "Presence of a College at 14",
  lwage5_17 = "Local Log Earnings at 17",
  lurate_17 = "Local Unemployment Rate at 17 (in %)",
  tuition = "Tuition in 4 Year Public Colleges at 17 (in $100)"
)

inst_vars <- chv2011_inst_base

table_data <- avder |>
  mutate(
    label = labels[variable],
    group = if_else(variable %in% inst_vars, "INSTRUMENTS (Z):", "CONTROLS (X):"),
    se = se[match(variable, avder$variable)],
    p = 2 * pnorm(-abs(avg_deriv / se)),
    cell = chv2011_coef_cell(avg_deriv, se, chv2011_stars(p))
  ) |>
  filter(!is.na(label)) |>
  select(group, label, cell) |>
  add_row(
    group = " ",
    label = "Test for joint significance of instruments: p-value",
    cell = sprintf("%.4f", joint_p),
    .after = Inf
  )

gt_tbl <- table_data |>
  chv2011_quarto_blank_df() |>
  gt(groupname_col = "group") |>
  tab_header(
    title = "Table 3",
    subtitle = "College decision model — average marginal derivatives"
  ) |>
  cols_label(label = " ", cell = "Average Derivative") |>
  tab_options(row_group.as_column = TRUE)

save(
  table_data,
  gt_tbl,
  table3_validation,
  merge_validation = merge_validation,
  file = here("04-topics/rep-chv2011/Rcode/Table_3.RData")
)
