---
title: "Pre-fit Design-Support Diagnostics"
output: rmarkdown::html_vignette
vignette: >
  %\VignetteIndexEntry{Pre-fit Design-Support Diagnostics}
  %\VignetteEngine{knitr::rmarkdown}
  %\VignetteEncoding{UTF-8}
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(collapse = TRUE, comment = "#>")
library(gp3bayes)
```

## Diagnose the design before invoking Stan

Many modeling failures can be identified from the declared design itself.
Version 0.2.0 adds four reporting audits that run before MCMC:

- `audit_missingness_structure()`;
- `audit_fixed_effect_design()`;
- `audit_random_effects_support()`; and
- `audit_design_support()`.

They do not impute, exclude, drop predictors, or simplify random effects.

```{r}
simulation <- simulate_hierarchical_binary_data(
  n_participants = 12,
  trials_per_participant = 10,
  n_items = 6,
  random_slope_sd = 0,
  seed = 11
)

contract <- create_model_contract(
  family = "binary",
  outcome_col = "selected",
  participant_col = "participant_id",
  item_col = "item_id",
  trial_col = "trial_id",
  condition_col = "condition",
  predictors = "trial_covariate"
)
```

## Missingness is described, not repaired

```{r}
with_missing <- simulation$data
with_missing$trial_covariate[c(3, 17, 41)] <- NA_real_

missingness <- audit_missingness_structure(
  with_missing,
  contract
)
missingness
plot(missingness)
```

## Fixed-effect geometry

The fixed-effects audit reports design-matrix rank, singular values, a
condition-number screen, invariant columns, and leverage. These quantities are
warning signals about the declared numerical design; they do not determine a
scientifically preferred model.

```{r}
fixed_design <- audit_fixed_effect_design(
  simulation$data,
  contract
)
fixed_design
plot(fixed_design)
```

## Repetition, crossing and random slopes

```{r}
random_support <- audit_random_effects_support(
  simulation$data,
  contract
)
random_support
plot(random_support)
```

## One combined preflight

```{r}
design <- audit_design_support(
  simulation$data,
  contract,
  separation = FALSE,
  strict_readiness = TRUE
)
design
plot(design)
```

For binary models, a fixed-effects separation screen can also be requested when
`detectseparation` is installed:

```{r eval=FALSE}
audit_design_support(
  simulation$data,
  contract,
  separation = TRUE
)
```

A `review` or `fail` flag is a prompt for methodological inspection. It is not
an automatic instruction to remove data or alter the prespecified model.
