# mostafa-abbas/propsens architecture

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

- Interactive diagram: https://gitdiagram.com/mostafa-abbas/propsens
- Repository: https://github.com/mostafa-abbas/propsens

## Overview

propsens is an R package for assessing how propensity-model choice affects a matched study design, without using outcomes. The analyst supplies study data and matching settings, or an existing MatchIt object; the documented workflow refits models, rematches, applies a quality gate, and reports sensitivity diagnostics. The graph retains the README’s documented diagnostic and seed-sensitivity capabilities. Source excerpts were not provided, so relationships are limited to those stated in the README; some internal subsystem paths point to their enclosing R directory where implementation details are unavailable.

Main entry points: [`R/propensity_sensitivity.R`](https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R) (Sensitivity run), [`R/seed_sensitivity.R`](https://github.com/mostafa-abbas/propsens/blob/main/R/seed_sensitivity.R) (Seed sensitivity), [`R/simulate_example_data.R`](https://github.com/mostafa-abbas/propsens/blob/main/R/simulate_example_data.R) (Example data generator), [`R/fit_propensity_models.R`](https://github.com/mostafa-abbas/propsens/blob/main/R/fit_propensity_models.R) (Propensity models)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Study inputs"]
  node_study_data["Study data"]
  node_matchit["MatchIt object"]
end

subgraph group_modeling["Model and matching"]
  node_sensitivity_run["Sensitivity run"]
  node_propensity_models["Propensity models"]
  node_matching["Rematching<br/>[match_each_model.R]"]
end

subgraph group_assessment["Sensitivity assessment"]
  node_quality_gate["Quality gate"]
  node_rank_disagreement["Rank disagreement"]
  node_pair_recurrence["Pair instability<br/>[pair_recurrence.R]"]
  node_bootstrap_instability["Bootstrap rank instability"]
  node_balance_spread["Balance spread<br/>[balance_spread.R]"]
  node_control_spread["Control spread<br/>[control_spread.R]"]
end

subgraph group_reporting["Results and tools"]
  node_seed_sensitivity["Seed sensitivity<br/>[seed_sensitivity.R]"]
  node_diagnostics["Diagnostic results"]
  node_plotting["Sensitivity plots"]
  node_simulation["Example data generator"]
end

node_analyst(("Study analyst"))

node_analyst -->|"provides design"| node_sensitivity_run
node_study_data -->|"supplies data"| node_sensitivity_run
node_matchit -->|"supplies design"| node_sensitivity_run
node_sensitivity_run -->|"refits models"| node_propensity_models
node_sensitivity_run -->|"repeats matching"| node_matching
node_sensitivity_run -->|"applies gate"| node_quality_gate
node_sensitivity_run -->|"reports ranks"| node_rank_disagreement
node_sensitivity_run -->|"reports pairs"| node_pair_recurrence
node_sensitivity_run -->|"reports bootstrap"| node_bootstrap_instability
node_sensitivity_run -->|"reports balance"| node_balance_spread
node_sensitivity_run -->|"reports spread"| node_control_spread
node_sensitivity_run -->|"returns results"| node_diagnostics
node_seed_sensitivity -->|"reruns seeds"| node_sensitivity_run
node_analyst -->|"requests comparison"| node_seed_sensitivity
node_diagnostics -.->|"can be plotted"| node_plotting
node_simulation -->|"generates example"| node_study_data

click node_sensitivity_run "https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R"
click node_propensity_models "https://github.com/mostafa-abbas/propsens/blob/main/R/fit_propensity_models.R"
click node_matching "https://github.com/mostafa-abbas/propsens/blob/main/R/match_each_model.R"
click node_quality_gate "https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R"
click node_rank_disagreement "https://github.com/mostafa-abbas/propsens/blob/main/R/rank_disagreement.R"
click node_pair_recurrence "https://github.com/mostafa-abbas/propsens/blob/main/R/pair_recurrence.R"
click node_bootstrap_instability "https://github.com/mostafa-abbas/propsens/blob/main/R/bootstrap_rank_instability.R"
click node_balance_spread "https://github.com/mostafa-abbas/propsens/blob/main/R/balance_spread.R"
click node_control_spread "https://github.com/mostafa-abbas/propsens/blob/main/R/control_spread.R"
click node_seed_sensitivity "https://github.com/mostafa-abbas/propsens/blob/main/R/seed_sensitivity.R"
click node_diagnostics "https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R"
click node_plotting "https://github.com/mostafa-abbas/propsens/blob/main/R/plot_propensity_sensitivity.R"
click node_simulation "https://github.com/mostafa-abbas/propsens/blob/main/R/simulate_example_data.R"

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_study_data,node_matchit toneBlue
class node_sensitivity_run,node_propensity_models,node_matching toneAmber
class node_quality_gate,node_rank_disagreement,node_pair_recurrence,node_bootstrap_instability,node_balance_spread,node_control_spread toneMint
class node_seed_sensitivity,node_diagnostics,node_plotting,node_simulation toneRose
class node_analyst toneIndigo
```

## Components

### Study inputs

- **Study data**
- **MatchIt object**

### Model and matching

- [Sensitivity run](https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R): `R/propensity_sensitivity.R`
- [Propensity models](https://github.com/mostafa-abbas/propsens/blob/main/R/fit_propensity_models.R): `R/fit_propensity_models.R`
- [Rematching](https://github.com/mostafa-abbas/propsens/blob/main/R/match_each_model.R): `R/match_each_model.R`

### Sensitivity assessment

- [Quality gate](https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R): `R/propensity_sensitivity.R`
- [Rank disagreement](https://github.com/mostafa-abbas/propsens/blob/main/R/rank_disagreement.R): `R/rank_disagreement.R`
- [Pair instability](https://github.com/mostafa-abbas/propsens/blob/main/R/pair_recurrence.R): `R/pair_recurrence.R`
- [Bootstrap rank instability](https://github.com/mostafa-abbas/propsens/blob/main/R/bootstrap_rank_instability.R): `R/bootstrap_rank_instability.R`
- [Balance spread](https://github.com/mostafa-abbas/propsens/blob/main/R/balance_spread.R): `R/balance_spread.R`
- [Control spread](https://github.com/mostafa-abbas/propsens/blob/main/R/control_spread.R): `R/control_spread.R`

### Results and tools

- [Seed sensitivity](https://github.com/mostafa-abbas/propsens/blob/main/R/seed_sensitivity.R): `R/seed_sensitivity.R`
- [Diagnostic results](https://github.com/mostafa-abbas/propsens/blob/main/R/propensity_sensitivity.R): `R/propensity_sensitivity.R`
- [Sensitivity plots](https://github.com/mostafa-abbas/propsens/blob/main/R/plot_propensity_sensitivity.R): `R/plot_propensity_sensitivity.R`
- [Example data generator](https://github.com/mostafa-abbas/propsens/blob/main/R/simulate_example_data.R): `R/simulate_example_data.R`

### Other components

- **Study analyst**

## Connections

- Study analyst → Sensitivity run: provides design (evidence: `README.md`)
- Study data → Sensitivity run: supplies data (evidence: `README.md`)
- MatchIt object → Sensitivity run: supplies design (evidence: `README.md`)
- Sensitivity run → Propensity models: refits models (evidence: `README.md`)
- Sensitivity run → Rematching: repeats matching (evidence: `README.md`)
- Sensitivity run → Quality gate: applies gate (evidence: `README.md`)
- Sensitivity run → Rank disagreement: reports ranks (evidence: `README.md`)
- Sensitivity run → Pair instability: reports pairs (evidence: `README.md`)
- Sensitivity run → Bootstrap rank instability: reports bootstrap (evidence: `README.md`)
- Sensitivity run → Balance spread: reports balance (evidence: `README.md`)
- Sensitivity run → Control spread: reports spread (evidence: `README.md`)
- Sensitivity run → Diagnostic results: returns results (evidence: `README.md`)
- Seed sensitivity → Sensitivity run: reruns seeds (evidence: `README.md`)
- Study analyst → Seed sensitivity: requests comparison (evidence: `README.md`)
- Diagnostic results → Sensitivity plots: can be plotted
- Example data generator → Study data: generates example (evidence: `README.md`)
