## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")

## ----student-family-syntax, eval = FALSE--------------------------------------
# fit <- drmTMB(
#   drm_formula(
#     y ~ x1,
#     sigma ~ x2,
#     nu ~ x3
#   ),
#   family = student(),
#   data = dat
# )

## ----bivariate-family-syntax, eval = FALSE------------------------------------
# fit <- drmTMB(
#   drm_formula(
#     mu1 = y1 ~ x1 + x2,
#     mu2 = y2 ~ x1,
#     sigma1 = ~ x1 + x2,
#     sigma2 = ~ x1,
#     rho12 = ~ x1 + x2
#   ),
#   family = c(gaussian(), gaussian()),
#   data = dat
# )

## ----student-registry, eval = FALSE-------------------------------------------
# student <- function() {
#   structure(
#     list(
#       name = "student",
#       family = "student",
#       n_response = 1L,
#       dpars = c("mu", "sigma", "nu"),
#       links = c(mu = "identity", sigma = "log", nu = "logm2")
#     ),
#     class = "drm_family"
#   )
# }

## ----method-checks, eval = FALSE----------------------------------------------
# coef(fit, "mu")
# coef(fit, "sigma")
# predict(fit, dpar = "mu")
# predict(fit, dpar = "sigma")
# simulate(fit, nsim = 2, seed = 1)
# residuals(fit)
# check_drm(fit)
# summary(fit)

## ----recovery-test-pattern, eval = FALSE--------------------------------------
# set.seed(1)
# dat <- simulate_from_known_parameters()
# 
# fit <- drmTMB(
#   drm_formula(y ~ x1, sigma ~ x2, nu ~ x3),
#   family = student(),
#   data = dat
# )
# 
# expect_equal(fit$opt$convergence, 0)
# expect_lt(max(abs(coef(fit, "mu") - beta_mu)), tolerance_mu)
# expect_lt(max(abs(coef(fit, "sigma") - beta_sigma)), tolerance_sigma)
# expect_lt(max(abs(coef(fit, "nu") - beta_nu)), tolerance_nu)

## ----independent-likelihood-pattern, eval = FALSE-----------------------------
# loglik <- sum(
#   stats::dt((y - mu) / sigma, df = nu, log = TRUE) - log(sigma)
# )
# 
# expect_equal(
#   as.numeric(logLik(fit)),
#   loglik,
#   tolerance = 1e-8
# )

## ----rejection-pattern, eval = FALSE------------------------------------------
# expect_error(
#   drmTMB(
#     drm_formula(y ~ x + meta_V(V = V), sigma ~ 1),
#     family = student(),
#     data = dat
#   ),
#   "not implemented"
# )

