_targets.R

# === Targets -------------------------------------------------------------
# Alec L. Robitaille



# Source ------------------------------------------------------------------
lapply(dir('R', '*.R', full.names = TRUE), source)



# Options -----------------------------------------------------------------
# Targets
tar_option_set(format = 'qs')

# Stan
options(mc.cores = 2,
        scipen = 999,
        digits = 2)


# Data --------------------------------------------------------------------
data(Howell1)
data(Oxboys)
data(foxes)
data(Dinosaurs)
data(NWOGrants)
data(reedfrogs)
data(Trolley)

marriage <- sim_happiness(seed = 1977, N_years = 1000) %>%
  filter(age > 17) %>%
  mutate(A = (age - 18)/(65-18))

lagged_obs <- Dinosaurs %>%
  filter(species == "Massospondylus carinatus") %>%
  mutate(time_diff = age - lag(age),
         sizelast = lag(mass)) %>%
  slice(-1)

trolley <- Trolley %>% 
  mutate(contact = as.factor(contact),
         action = as.factor(action),
         intention = as.factor(intention))


# Initial Values ----------------------------------------------------------


inits <- list(`Intercept[1]` = -2,
              `Intercept[2]` = -1,
              `Intercept[3]` = 0,
              `Intercept[4]` = 1,
              `Intercept[5]` = 2,
              `Intercept[6]` = 2.5)

inits_list <- list(inits, inits, inits, inits)


# Targets: homework   -----------------------------------------------------
targets_homework <- c(
  
  tar_target(
    d,
    Howell1 %>%
      filter(age <= 13) %>%
      select(c(weight, age))
  ),
  
  tar_target(
    ox,
    Oxboys %>%
      group_by(Subject) %>%
      mutate(growth = height - lag(height, default = first(height), order_by = Occasion)) %>%
      # remove first occasion because there is no growth
      filter(Occasion != 1)
  ),
  
  tar_target(
    fox,
    foxes %>%
      mutate(avgfood_s = scale(avgfood),
             area_s = scale(area),
             weight_s = scale(weight),
             groupsize_s = scale(groupsize))
  ),
  
  tar_target(
    r,
    reedfrogs %>%
      mutate(tank = 1:nrow(reedfrogs))
  ),
  
  
  tar_target(
    h02_mAW_prior,
    brm(formula = weight ~ age,
        data = d,
        family = gaussian(),
        sample_prior = "only",
        prior = c(set_prior("normal(35, 2)", class = "Intercept"),
                  set_prior("uniform(0, 10)", class = "b"), # uniform so it stays positive
                  set_prior("exponential(1)", class = "sigma")),
        chains = 4,
        cores = 1,
        iter = 2000)
  ),
  
  tar_target(
    h02_mAW,
    brm(formula = weight ~ age,
        data = d,
        family = gaussian(),
        prior = c(set_prior("normal(35, 2)", class = "Intercept"),
                  set_prior("uniform(0, 10)", class = "b"), # uniform so it stays positive
                  set_prior("exponential(1)", class = "sigma")),
        chains = 4,
        cores = 1,
        iter = 2000)
  ),
  
  tar_target(
    h02_mGO_prior,
    brm(formula = growth ~ 1,
        data = ox,
        family = gaussian(),
        sample_prior = "only",
        prior = c(prior(normal(1.6, 0.5), class = "Intercept", lb = 0),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h02_mGO,
    brm(formula = growth ~ 1,
        data = ox,
        family = gaussian(),
        prior = c(prior(normal(1.6, 0.5), class = "Intercept", lb = 0),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h03_q1_prior,
    brm(formula = avgfood_s ~ area_s,
        data = fox,
        sample_prior = "only",
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h03_q1,
    brm(formula = avgfood_s ~ area_s,
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h03_q2_prior,
    brm(formula = weight_s ~ avgfood_s,
        sample_prior = "only",
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h03_q2,
    brm(formula = weight_s ~ avgfood_s,
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  
  tar_target(
    h03_q3_prior,
    brm(formula = weight_s ~ avgfood_s + groupsize_s,
        sample_prior = "only",
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h03_q3,
    brm(formula = weight_s ~ avgfood_s + groupsize_s,
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q1a,
    brm(formula = happiness ~ A + (1|married),
        data = marriage,
        family = gaussian(),
        prior = c(prior(normal(0, 1), class = "Intercept"),
                  prior(normal(0, 2), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q1b,
    brm(formula = happiness ~ A,
        data = marriage,
        family = gaussian(),
        prior = c(prior(normal(0, 1), class = "Intercept"),
                  prior(normal(0, 2), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q2,
    brm(formula = weight_s ~ avgfood_s + groupsize_s + area_s,
        data = fox,
        family = gaussian(),
        prior = c(prior(normal(0, 0.5), class = "Intercept"),
                  prior(normal(0, 0.5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q3a,
    brm(formula = mass ~ age,
        data = Dinosaurs %>% filter(species == "Massospondylus carinatus"),
        prior = c(prior(normal(90, 20), class = "Intercept"),
                  prior(normal(0, 5), class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q3b,
    brm(formula = bf(mass ~ sizelast * exp(- exp(logR) * time_diff) +
                       sizeMax * (1 - exp(-exp(logR) * time_diff)),
                     logR ~ 1,
                     sizeMax ~ 1, nl = TRUE),
        data = lagged_obs,
        prior = c(prior(normal(245, 50), nlpar = "sizeMax", class = "b"),
                  prior(normal(0, 5), nlpar = "logR", class = "b"),
                  prior(exponential(1), class = "sigma")),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  tar_target(
    h04_q3c,
    brm(formula = bf(mass ~ a * b ^ (c * age + d),
                     a + b + c + d ~ 1,
                     nl = TRUE),
        data = Dinosaurs %>% filter(species == "Massospondylus carinatus"),
        prior = c(
          prior(normal(0, 20), nlpar = 'a'),
          prior(normal(0, 20), nlpar = 'b'),
          prior(normal(0, 20), nlpar = 'c', lb = 0),
          prior(normal(0, 20), nlpar = 'd'),
          prior(exponential(1), sigma)
        ),
        chains = 4,
        cores = 2,
        iter = 2000)
  ),
  
  zar_brms(
    h05_q1,
    formula = awards | trials(applications) ~ gender,
    data = NWOGrants,
    family = 'binomial',
    prior = c(
      prior(normal(0, 1.5), class = "Intercept"),
      prior(normal(0, 0.5), class = "b"))
  ),
  
  zar_brms(
    h05_q2,
    formula = awards | trials(applications) ~ gender*discipline,
    data = NWOGrants,
    family = 'binomial',
    prior = c(
      prior(normal(0, 1.5), class = "Intercept"),
      prior(normal(0, 0.5), class = "b"))
  ),
  
  tar_target(
    h06_q1_a,
    brm(formula = surv | trials(density) ~ 1 + (1 | tank),
        family = 'binomial', 
        sample_prior = 'only',
        data = r,
        prior = c(prior(normal(0, 1.5), class = "Intercept"),
                  prior(exponential(1), class = "sd")))
  ),
  
  tar_target(
    h06_q1_b,
    brm(formula = surv | trials(density) ~ 1 + (1 | tank),
        family = 'binomial', 
        sample_prior = 'only',
        data = r,
        prior = c(prior(normal(0, 1.5), class = "Intercept"),
                  prior(exponential(10), class = "sd")))
  ),
  
  tar_target(
    h06_q1_c,
    brm(formula = surv | trials(density) ~ 1 + (1 | tank),
        family = 'binomial', 
        sample_prior = 'only',
        data = r,
        prior = c(prior(normal(0, 1.5), class = "Intercept"),
                  prior(exponential(0.1), class = "sd")))
  ),
  
  zar_brms(
    h06_q2, 
    formula = surv | trials(density) ~ 1 + pred*size + (1 | tank),
    family = 'binomial',
    data = r, 
    prior = c(prior(normal(0, 1.5), class = "Intercept"),
              prior(exponential(0.1), class = "sd"),
              prior(normal(0, 1), class = "b"))
  ),
  
  tar_target(
    h06_q3, 
    brm(formula = response ~ 1 + action + contact + intention +  (1 | id),
    family = 'cumulative',
    data = trolley, 
    prior = c(prior(normal(0, 1.5), class = "Intercept"),
              prior(exponential(1), class = "sd"),
              prior(normal(0, 1), class = "b")),
    inits = inits_list,
    chains = 4,
    cores = 2,
    iter = 2000)
  ),
  
  tar_target(
    h06_q3b, 
    brm(formula = response ~ 1 + action + contact + intention,
        family = 'cumulative',
        data = trolley, 
        prior = c(prior(normal(0, 1.5), class = "Intercept"),
                  prior(normal(0, 1), class = "b")),
        inits = inits_list,
        chains = 4,
        cores = 2,
        iter = 2000)
  )
  
)


# Quarto ------------------------------------------------------------------
targets_quarto <- c(
  tar_quarto(site, path = '.')
)



# Targets: all ------------------------------------------------------------
# Automatically grab all the "targets_*" lists above
lapply(grep('targets', ls(), value = TRUE), get)