# adibuzz/multi_var_imputation architecture

> Architecture diagram of the GitHub repository adibuzz/multi_var_imputation, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-10-01). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/adibuzz/multi_var_imputation
- Repository: https://github.com/adibuzz/multi_var_imputation

## Overview

This repository is a MIMIC clinical-time-series research pipeline: it prepares patient measurements, trains a GRU-ODE model with Bayesian observation updates, and supports evaluation and visualization. The principal workflow runs from MIMIC tables through preprocessing and dataset batching into model training and logged metrics. The graph also preserves documented model capabilities and fold generation. Some subsystem links come from the README because their implementation was not sampled; those links are identified by README evidence.

Main entry points: [`train_mimic.py`](https://github.com/adibuzz/multi_var_imputation/blob/main/train_mimic.py) (Training loop), [`data_utils.py`](https://github.com/adibuzz/multi_var_imputation/blob/main/data_utils.py) (Time-series dataset), [`create_patient_parquets.py`](https://github.com/adibuzz/multi_var_imputation/blob/main/create_patient_parquets.py) (Patient preprocessing), [`plot_MIMIC.py`](https://github.com/adibuzz/multi_var_imputation/blob/main/plot_MIMIC.py) (Evaluation plotting)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_prep["Patient preprocessing"]
  node_parquet[("Patient Parquet")]
  node_folds["Fold generation<br/>[generate_folds.py]"]
  node_dataset["Time-series dataset<br/>[data_utils.py]"]
  node_batching["Batch collation<br/>[data_utils.py]"]
end

subgraph group_learning["Model and training"]
  node_covariates["Covariate encoder<br/>[models.py]"]
  node_ode["GRU-ODE dynamics<br/>[models.py]"]
  node_updates["Bayesian updates<br/>[models.py]"]
  node_prediction["Classification head<br/>[models.py]"]
  node_trainer["Training loop<br/>[train_mimic.py]"]
  node_logger["Metric logging<br/>[logger.py]"]
end

subgraph group_analysis["Evaluation and visualization"]
  node_evaluation["Model evaluation<br/>[test_mimic.py]"]
  node_plot_eval["Evaluation plotting<br/>[plot_MIMIC.py]"]
  node_plot_patient["Patient plotting"]
  node_plot_general["MIMIC plotting<br/>[plot_MIMIC.py]"]
end

node_mimic(("MIMIC tables"))

node_mimic -->|"provides tables"| node_prep
node_prep -->|"writes partitions"| node_parquet
node_prep -.->|"prepares training data"| node_dataset
node_dataset -.->|"provides patient IDs"| node_folds
node_folds -.->|"supplies splits"| node_trainer
node_trainer -->|"loads batches"| node_dataset
node_dataset -->|"collates samples"| node_batching
node_trainer -->|"uses collator"| node_batching
node_trainer -.->|"initializes state"| node_covariates
node_covariates -.->|"seeds dynamics"| node_ode
node_ode -.->|"propagates between observations"| node_updates
node_updates -.->|"updates latent state"| node_prediction
node_trainer -->|"computes classification loss"| node_prediction
node_trainer -->|"writes metrics"| node_logger
node_trainer -.->|"computes validation metrics"| node_evaluation
node_plot_eval -->|"calls evaluation"| node_evaluation
node_plot_eval -->|"loads test data"| node_dataset
node_plot_patient -->|"reads patient data"| node_parquet
node_plot_general -->|"uses data utilities"| node_dataset

click node_prep "https://github.com/adibuzz/multi_var_imputation/blob/main/create_patient_parquets.py"
click node_folds "https://github.com/adibuzz/multi_var_imputation/blob/main/generate_folds.py"
click node_dataset "https://github.com/adibuzz/multi_var_imputation/blob/main/data_utils.py"
click node_batching "https://github.com/adibuzz/multi_var_imputation/blob/main/data_utils.py"
click node_covariates "https://github.com/adibuzz/multi_var_imputation/blob/main/models.py"
click node_ode "https://github.com/adibuzz/multi_var_imputation/blob/main/models.py"
click node_updates "https://github.com/adibuzz/multi_var_imputation/blob/main/models.py"
click node_prediction "https://github.com/adibuzz/multi_var_imputation/blob/main/models.py"
click node_trainer "https://github.com/adibuzz/multi_var_imputation/blob/main/train_mimic.py"
click node_logger "https://github.com/adibuzz/multi_var_imputation/blob/main/logger.py"
click node_evaluation "https://github.com/adibuzz/multi_var_imputation/blob/main/test_mimic.py"
click node_plot_eval "https://github.com/adibuzz/multi_var_imputation/blob/main/plot_MIMIC.py"
click node_plot_patient "https://github.com/adibuzz/multi_var_imputation/blob/main/plot_patient_ehr.py"
click node_plot_general "https://github.com/adibuzz/multi_var_imputation/blob/main/plot_MIMIC.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_prep,node_parquet,node_folds,node_dataset,node_batching toneBlue
class node_covariates,node_ode,node_updates,node_prediction,node_trainer,node_logger toneAmber
class node_evaluation,node_plot_eval,node_plot_patient,node_plot_general toneMint
class node_mimic toneIndigo
```

## Components

### Data preparation

- [Patient preprocessing](https://github.com/adibuzz/multi_var_imputation/blob/main/create_patient_parquets.py): `create_patient_parquets.py`
- **Patient Parquet**
- [Fold generation](https://github.com/adibuzz/multi_var_imputation/blob/main/generate_folds.py): `generate_folds.py`
- [Time-series dataset](https://github.com/adibuzz/multi_var_imputation/blob/main/data_utils.py): `data_utils.py`
- [Batch collation](https://github.com/adibuzz/multi_var_imputation/blob/main/data_utils.py): `data_utils.py`

### Model and training

- [Covariate encoder](https://github.com/adibuzz/multi_var_imputation/blob/main/models.py): `models.py`
- [GRU-ODE dynamics](https://github.com/adibuzz/multi_var_imputation/blob/main/models.py): `models.py`
- [Bayesian updates](https://github.com/adibuzz/multi_var_imputation/blob/main/models.py): `models.py`
- [Classification head](https://github.com/adibuzz/multi_var_imputation/blob/main/models.py): `models.py`
- [Training loop](https://github.com/adibuzz/multi_var_imputation/blob/main/train_mimic.py): `train_mimic.py`
- [Metric logging](https://github.com/adibuzz/multi_var_imputation/blob/main/logger.py): `logger.py`

### Evaluation and visualization

- [Model evaluation](https://github.com/adibuzz/multi_var_imputation/blob/main/test_mimic.py): `test_mimic.py`
- [Evaluation plotting](https://github.com/adibuzz/multi_var_imputation/blob/main/plot_MIMIC.py): `plot_MIMIC.py`
- [Patient plotting](https://github.com/adibuzz/multi_var_imputation/blob/main/plot_patient_ehr.py): `plot_patient_ehr.py`
- [MIMIC plotting](https://github.com/adibuzz/multi_var_imputation/blob/main/plot_MIMIC.py): `plot_MIMIC.py`

### Other components

- **MIMIC tables**

## Connections

- MIMIC tables → Patient preprocessing: provides tables (evidence: `README.md`)
- Patient preprocessing → Patient Parquet: writes partitions (evidence: `create_patient_parquets.py`)
- Patient preprocessing → Time-series dataset: prepares training data (evidence: `README.md`)
- Time-series dataset → Fold generation: provides patient IDs (evidence: `README.md`)
- Fold generation → Training loop: supplies splits (evidence: `README.md`)
- Training loop → Time-series dataset: loads batches (evidence: `train_mimic.py`)
- Time-series dataset → Batch collation: collates samples (evidence: `train_mimic.py`)
- Training loop → Batch collation: uses collator (evidence: `train_mimic.py`)
- Training loop → Covariate encoder: initializes state (evidence: `README.md`)
- Covariate encoder → GRU-ODE dynamics: seeds dynamics (evidence: `README.md`)
- GRU-ODE dynamics → Bayesian updates: propagates between observations (evidence: `README.md`)
- Bayesian updates → Classification head: updates latent state (evidence: `README.md`)
- Training loop → Classification head: computes classification loss (evidence: `train_mimic.py`)
- Training loop → Metric logging: writes metrics (evidence: `train_mimic.py`)
- Training loop → Model evaluation: computes validation metrics (evidence: `README.md`)
- Evaluation plotting → Model evaluation: calls evaluation (evidence: `plot_MIMIC.py`)
- Evaluation plotting → Time-series dataset: loads test data (evidence: `plot_MIMIC.py`)
- Patient plotting → Patient Parquet: reads patient data (evidence: `plot_patient_ehr.py`)
- MIMIC plotting → Time-series dataset: uses data utilities (evidence: `plot_MIMIC.py`)
