| Title: | Fairness-Aware Gated Neural Networks | 
| Version: | 0.1.0 | 
| Description: | Tools for training and analysing fairness-aware gated neural networks for subgroup-aware prediction and interpretation in clinical datasets. Methods draw on prior work in mixture-of-experts neural networks by Jordan and Jacobs (1994) <doi:10.1007/978-1-4471-2097-1_113>, fairness-aware learning by Hardt, Price, and Srebro (2016) <doi:10.48550/arXiv.1610.02413>, and personalised treatment prediction for depression by Iniesta, Stahl, and McGuffin (2016) <doi:10.1016/j.jpsychires.2016.03.016>. | 
| License: | MIT + file LICENSE | 
| Encoding: | UTF-8 | 
| RoxygenNote: | 7.3.3 | 
| Imports: | dplyr, tibble, ggplot2, readr, pROC, magrittr, tidyr, purrr, utils, stats, ggalluvial, tidyselect | 
| Suggests: | knitr, torch, testthat, readxl, rmarkdown | 
| VignetteBuilder: | knitr | 
| URL: | https://github.com/rhysholland/fairGNN | 
| BugReports: | https://github.com/rhysholland/fairGNN/issues | 
| Depends: | R (≥ 4.1.0) | 
| SystemRequirements: | Optional 'LibTorch' backend; install via torch::install_torch(). | 
| NeedsCompilation: | no | 
| Packaged: | 2025-10-22 11:32:41 UTC; k2584926 | 
| Author: | Rhys Holland [aut, cre] | 
| Maintainer: | Rhys Holland <rhys.holland@icloud.com> | 
| Repository: | CRAN | 
| Date/Publication: | 2025-10-26 19:50:10 UTC | 
Analyse and Visualise Expert Network Specialisation
Description
This function analyses the input weights of the expert sub-networks to determine which features are most important for each subgroup. It supports datasets with two or more subgroups.
Usage
analyse_experts(
  gnn_results,
  prepared_data,
  group_mappings,
  top_n_features = 10,
  verbose = FALSE
)
Arguments
gnn_results | 
 A list object from   | 
prepared_data | 
 A list object from   | 
group_mappings | 
 A named list mapping numeric codes to labels.  | 
top_n_features | 
 The number of top features to visualise.  | 
verbose | 
 Logical, whether to print progress messages (default FALSE).  | 
Value
A list containing the importance tables and plots.
Analyse and Visualize GNN Results
Description
Generates plots and statistical tests for interpreting the GNN model results.
Usage
analyse_gnn_results(
  gnn_results,
  prepared_data,
  group_mappings,
  create_roc_plot = TRUE,
  create_calibration_plot = TRUE,
  analyse_gate_weights = TRUE,
  analyse_gate_entropy = TRUE,
  verbose = FALSE
)
Arguments
gnn_results | 
 A list object from the   | 
prepared_data | 
 A list object from the   | 
group_mappings | 
 A named list that maps the numeric group codes back to their character labels for plotting (e.g.,   | 
create_roc_plot | 
 Boolean, if TRUE, generates and returns a ROC curve plot.  | 
create_calibration_plot | 
 Boolean, if TRUE, generates and returns a calibration plot.  | 
analyse_gate_weights | 
 Boolean, if TRUE, performs gate weight analysis (density plot and t-test).  | 
analyse_gate_entropy | 
 Boolean, if TRUE, performs gate entropy analysis.  | 
verbose | 
 Logical, whether to print progress messages (default FALSE).  | 
Value
A list containing ggplot objects and analysis tables.
Analyse GNN Results (+ Gate Summary Tables)
Description
Wraps analyse_gnn_results() and augments the return object with
gate_weight_summary and gate_entropy_summary computed from
gnn_results$gate_weights.
Usage
analyse_gnn_results_plus(gnn_results, prepared_data, group_mappings, ...)
Arguments
gnn_results | 
 A list from   | 
prepared_data | 
 A list from   | 
group_mappings | 
 A named vector/list mapping group codes to labels.  | 
... | 
 Additional arguments passed through to   | 
Value
The list returned by analyse_gnn_results() with two extra elements:
gate_weight_summary and gate_entropy_summary.
Create a Sankey Plot to Visualise Patient Routing
Description
Create a Sankey Plot to Visualise Patient Routing
Usage
plot_sankey(
  raw_data,
  gnn_results,
  expert_results,
  group_mappings,
  group_var,
  verbose = FALSE
)
Arguments
raw_data | 
 The original, unscaled dataframe (must contain the features referenced by expert analysis).  | 
gnn_results | 
 The results object from   | 
expert_results | 
 The results object from   | 
group_mappings | 
 A named list or named character vector mapping codes to labels (e.g., c("0"="Male","1"="Female")). If provided in the reverse orientation (labels→codes), or unnamed, this function will normalise it automatically.  | 
group_var | 
 A string with the column name of the sensitive attribute in the raw_data.  | 
verbose | 
 Logical, whether to print progress messages (default FALSE).  | 
Value
A ggplot object representing the Sankey diagram.
Prepare Data for GNN Training
Description
This function takes a raw dataframe, cleans it, defines the outcome and group variables, and scales the feature matrix.
Usage
prepare_data(
  data,
  outcome_var,
  group_var,
  group_mappings,
  cols_to_remove = NULL
)
Arguments
data | 
 A dataframe containing the raw data.  | 
outcome_var | 
 A string with the column name of the binary outcome (must be 0 or 1).  | 
group_var | 
 A string with the column name of the sensitive attribute.  | 
group_mappings | 
 A named list that maps the values in   | 
cols_to_remove | 
 A character vector of column names to exclude from the feature matrix (e.g., IDs, highly collinear vars).  | 
Value
A list containing:
X | 
 The scaled feature matrix.  | 
y | 
 The numeric outcome vector.  | 
group | 
 The numeric group vector.  | 
feature_names | 
 The names of the features used.  | 
subject_ids | 
 A vector of subject IDs, if a 'subjectid' column exists.  | 
Examples
# Fictional data example
my_data <- data.frame(
  subjectid = 1:10,
  remission = sample(0:1, 10, replace = TRUE),
  gender = sample(c("M", "F"), 10, replace = TRUE),
  feature1 = rnorm(10),
  feature2 = rnorm(10)
)
prepared_data <- prepare_data(
  data = my_data,
  outcome_var = "remission",
  group_var = "gender",
  group_mappings = list("M" = 0, "F" = 1),
  cols_to_remove = c("subjectid")
)
Train and Evaluate the Gated Neural Network (robust splits + safe ROC)
Description
Train and Evaluate the Gated Neural Network (robust splits + safe ROC)
Usage
train_gnn(
  prepared_data,
  hyper_grid,
  num_repeats = 20,
  epochs = 300,
  output_dir = tempdir(),
  run_tuning = TRUE,
  best_params = NULL,
  save_outputs = FALSE,
  seed = NULL,
  verbose = FALSE
)
Arguments
prepared_data | 
 List from prepare_data(): X, y, group, feature_names, subject_ids  | 
hyper_grid | 
 data.frame with columns: lr, hidden_dim, dropout_rate, lambda, temperature  | 
num_repeats | 
 Integer, repeated train/test splits per combo & final run  | 
epochs | 
 Integer, epochs per run  | 
output_dir | 
 Directory to write csv/rds (defaults to tempdir())  | 
run_tuning | 
 Logical, run hyperparameter search  | 
best_params | 
 data.frame/list with lr, hidden_dim, dropout_rate, lambda, temperature if run_tuning=FALSE  | 
save_outputs | 
 Logical, whether to save outputs to disk (default FALSE)  | 
seed | 
 Optional seed for reproducible data splits. Defaults to NULL to respect the current RNG state.  | 
verbose | 
 Logical, whether to print progress messages (default FALSE)  | 
Value
list(final_results, gate_weights, expert_weights, performance_summary, aif360_data, tuning_results)