Raj Akil Nomani

MBBS · health data projects

Raj Akil Nomani

Medical graduate (MBBS) learning to answer clinical questions with data.

I build small projects in drug safety, clinical data management and clinical research, and I check every result before I show it. All the code is on GitHub.

  • 50 of 50 planted data errors found
  • 36 of 36 in a second project
  • 863 admissions, same total three ways
Raj Akil Nomani in blue hospital scrubs
Results from three of my projects on one ratio scale. A line is the 95% confidence interval. Where it crosses 1, there is no clear difference.

Eleven projects, each with something I checked

Every repository has a README with its limits. The label under each name says what kind of data it uses, and the preview shows a terminal readout of what the project does and found. Hover a name on a computer, or tap it on a phone.

Showing 7 of 11
gabapentin reports 2.3% pregabalin reports 1.3% reports with neither drug 0.5% Share mentioning respiratory depression, 2024

faers-gabapentin-pregabalin

Real public FDA reports

A Python pipeline on the four quarters of 2024 of FDA adverse event reports (1,480,549 reports after cleaning). It compares gabapentin and pregabalin for respiratory depression, with and without an opioid on the report.

Nine checks pass, including a second independent count and a re-run that gives an identical results file. Gabapentin against pregabalin: ROR 1.81 (95% CI 1.37 to 2.39).

Headache92 Nausea90 Rash58 · not in label Diarrhoea30 Fatigue30 Back pain29 486 usable made-up reports, fictional drug DMX-101

pv-regulatory-lifecycle

Synthetic safety data, fictional drug

Twelve linked documents on a made-up drug: a synthetic safety database, data checks, signal screening, reporting deadlines, a draft periodic safety report, a risk management plan summary, a label change, a letter to prescribers and a dossier tracker.

All 50 planted data problems found. Rash was the only event that met the screening rule, mostly at 25 mg and age 65 and over (PRR 6.96). Where the Indian guidance is silent, the documents say so instead of guessing. One script re-runs everything and confirms identical results.

30 fictional cases 30 25 valid reports 25 13 serious 13 11 serious and not on the label 11 Made-up cases and drugs, five reports deliberately incomplete

icsr-case-processor

Fictional cases, fictional drugs

A small model of the first steps of handling an adverse event report: is it valid, is it serious, is the event on the drug label, how likely is it that the drug caused it, and a short case narrative written from a fixed template.

All 5 incomplete reports were caught. Of 25 valid cases, 13 were serious and 11 of those were not on the label. A second check written in SQL recomputes every result and all 5 of its checks pass. A result I changed on purpose was caught, and a second full run gives 5 identical files.

PRR 42.8% ROR 46.1% IC 37.8% EBGM, the strictest 24.4% Share of 1,191,181 drug-event pairs flagged

signal-detection-methods

Real public FDA reports

Compares four standard signal detection methods (PRR, ROR, IC and EBGM) on 14 years of FDA adverse event reports, 2012 Q4 to 2026 Q3, with gabapentin and pregabalin as the worked example.

EBGM is the most conservative method: it flags 24.4% of drug-event pairs, against 37.8% for IC, 42.8% for PRR and 46.1% for ROR. The analysis covers 17,730,954 cases and 1,191,181 pairs. Almost every EBGM signal is also flagged by the other three methods.

misspelt 100% context 100% multi 100% negated 90% unmappable 83% clean 78% plain words 27% Held-out phrases coded exactly right, 50 of 65

ae-verbatim-coder

Synthetic phrases, open HPO terms

A Python tool that suggests standard terms from the Human Phenotype Ontology for messy adverse event wording, such as "felt sick to my stomach". It is tested on made-up phrases against a separate answer key.

On 65 held-out phrases, scored once after the tool was frozen, 50 are exactly right (76.9%). On the 133 phrases used to build it, 110 are (82.7%). 17 independent checks pass and a second full run gives 6 identical files.

any adverse event 38.3% placebo 65.0% Drug X rash 3.3% placebo 16.7% Drug X Share of 60 subjects per arm, invented data

clinical-tlf-generator

Synthetic trial data

A Python pipeline that builds standard clinical trial outputs from a made-up trial: a demographics table, an adverse event summary table, an adverse event listing and a figure.

39 independent checks recount every number a second way and all pass. A number I changed on purpose was caught (38 of 39), and a second full run gives 9 identical files.

88clean enough to map 32held for open queries 120 subjects in a made-up trial

clinical-data-management

Synthetic trial data

What a data management team does on a trial: edit checks, a numbered query log, simplified SDTM-style datasets, a dashboard and a Data Validation Plan.

11 edit checks found all 36 planted errors. 88 of 120 subjects were clean enough to map, and 32 were held back for open queries.

median (50%) women men Illustration only. Adjusted hazard ratio 0.58 (0.41 to 0.80)

clinical-research-analysis

Published teaching dataset

A survival analysis written up like a paper: analysis plan first, then Kaplan-Meier curves, Cox regression, and a meta-analysis of four published trials.

Women compared with men, adjusted hazard ratio 0.58 (95% CI 0.41 to 0.80). Pooled SGLT2 inhibitor trials: 0.91 (0.85 to 0.97). A flagged assumption check led to a documented follow-up analysis.

this drug all other drugs the event other events a b c d PRR = a/(a+b) ÷ c/(c+d) Idea of the method. Real numbers use live FDA data.

drug-adverse-event-explorer

Real public FDA reports

Charts the most reported side effects of a drug, compares two drugs, and calculates a PRR score, a standard way to flag possible safety signals.

Ibuprofen and acetaminophen are compared as percentages of each drug’s own reports, so a drug with more reports does not look worse. The README explains why reports cannot prove causation.

diabetes trials with an Indian site 581 recruiting now 35 records flagged as possibly out of date 66 All bars share one scale

clinical-trials-tracker

Real public registry data

A pipeline and dashboard on ClinicalTrials.gov: which trials are recruiting and where, which records look out of date, and how long trials take.

581 diabetes trials with an Indian site. 35 are recruiting now, and 66 records were flagged as possibly out of date. A script writes the findings report from the data.

admissions by department 863 admissions by city 863 admissions by age group 863 Three queries, one total

healthcare-sql-analysis

Synthetic hospital data

Five SQL queries on a made-up hospital database, using JOINs, CASE, CTEs and a window function.

Admissions by department, city and age group all add up to the same 863 admissions.

These are self-directed learning projects and not work experience. Six use synthetic data, one uses a published teaching dataset and the rest use public registry or FDA data, so no private patient information is involved in any of them.

Research paper

A full paper from my drug safety work, written the way a journal paper is: the question, the methods, the results and the limits.

RESEARCH PAPER · 2024 FAERS Respiratory depression reports with gabapentin versus pregabalin in the FDA Adverse Event Reporting System, 2024 Raj Akil Nomani · 26 Oct 2026

The paper in four points

  • Question: is respiratory depression reported more often with gabapentin than with pregabalin?
  • Data: 1,480,549 public FDA reports from the four quarters of 2024.
  • Result: yes, ROR 1.81 (95% CI 1.37 to 2.39), with and without an opioid on the report.
  • Limit: reports show a pattern, not cause or how often an event happens.
Gabapentin versus pregabalin, from the paper. A ratio above 1 means respiratory depression was reported more often with gabapentin. Each line is a 95% confidence interval.

Try the signal check

This is the calculation behind the PRR score in two of my projects. Pick an example from my made-up drug or type your own counts. A flag needs at least 3 reports, a PRR of 2 or more and a chi-square of 4 or more.

Examples use the 486 usable reports of my made-up drug DMX-101. The group is the 25 mg tablet and everyone else is the 10 mg tablet.

PRR
–
Chi-square
–
–

One signal, ten steps

My largest project follows a single made-up safety signal through the documents a drug safety team writes. Choose a step to see what I did and what I checked.

    How I work

    Plan before results

    I write the question and the method before I run the analysis, and I record every change I make afterwards.

    Check against a known answer

    I plant errors and see whether my checks find them, make totals agree across queries, and compare numbers with the original papers.

    State the limits

    Every project says what it cannot show: synthetic data, observational results, flags that are leads and not proof.

    Skills

    Programming
    PythonpandasstatsmodelsmatplotlibStreamlitSQL (SQLite)Git and GitHub
    Methods
    Survival analysisCox regressionMeta-analysisData validationSignal detection with PRR
    Documents
    Document controlReference registersPeriodic safety report draftRisk management plan summary
    Standards
    CDISC SDTM concepts (simplified)CTD structure
    Next
    GCP trainingR

    About me

    I am a medical graduate (MBBS) moving into clinical research and health data roles. I like questions where a number has to stand up to checking.

    I started with coding and found that research questions were the part I enjoyed most. These eleven projects are how I am learning the work of drug safety, clinical data management and clinical research teams.

    I am looking for entry-level roles in drug safety, clinical data management or clinical operations in India.

    Contact