PMSG Platform - 100 Patient Simulator

Comprehensive simulation system for Pain Management Support Group (PMSG) program evaluation. Generates realistic data for 100 patients with complete 8-week trajectories, assessment data, attendance tracking, and medication utilization.

Features

  • Realistic Patient Demographics: Age, gender, race/ethnicity, insurance status
  • Diverse Pain Conditions: 10 different chronic pain conditions with realistic prevalence
  • Complete Assessment Data: BPI and ODI scores across 8-week program + 12-week follow-up
  • Attendance Tracking: Session-by-session attendance with realistic dropout patterns
  • Medication Utilization: Multi-medication regimens with opioid tapering outcomes
  • Multiple Export Formats: CSV, Excel, and SQLAlchemy database integration

Quick Start

1. Install Dependencies

pip install -r requirements.txt

2. Generate Data (CSV/Excel Only)

python patient_simulator.py

This generates: - pmsg_data_csv/ directory with 4 CSV files - pmsg_simulation_100patients.xlsx with 4 sheets

3. Full Workflow (CSV + Excel + Database)

python database_integration.py

This generates: - All CSV files - All Excel files - SQLite database: pmsg_platform.db - Database export: pmsg_database_export.xlsx

File Structure

pmsg_simulator/
├── database_models.py          # SQLAlchemy ORM models
├── patient_simulator.py        # Core simulation engine
├── database_integration.py     # Database loading & queries
├── requirements.txt            # Python dependencies
└── README.md                   # This file

Output files:
├── pmsg_data_csv/
│   ├── patients.csv           # 100 patient records
│   ├── assessments.csv        # ~900 assessment records
│   ├── attendance.csv         # ~1200 attendance records
│   └── medications.csv        # ~280 medication records
├── pmsg_simulation_100patients.xlsx
├── pmsg_database_export.xlsx
└── pmsg_platform.db           # SQLite database

Database Schema

Tables

  1. patients - Demographics, enrollment, program status
  2. assessments - BPI and ODI scores by week
  3. attendance - Session-level attendance tracking
  4. medications - Medication regimens and changes
  5. cohort_schedules - Cohort scheduling information
  6. outcomes_summary - Aggregated cohort outcomes

Key Relationships

  • Patient → Multiple Assessments (1:Many)
  • Patient → Multiple Attendance Records (1:Many)
  • Patient → Multiple Medications (1:Many)

Simulated Patient Characteristics

Demographics

  • Age: 18-85 (mean ~52 years)
  • Gender: Male (45%), Female (52%), Non-binary (3%)
  • Insurance: Medicaid (35%), Medicare (25%), Private (30%), Other (10%)

Pain Conditions

  • Diabetic Peripheral Neuropathy (18%)
  • Chronic Low Back Pain (15%)
  • Rheumatoid Arthritis (12%)
  • Fibromyalgia (10%)
  • Osteoarthritis (10%)
  • Other chronic pain conditions (35%)

Program Outcomes

  • Completion Rate: ~75%
  • Dropout Rate: ~25%
  • BPI Improvement: 12-15% average reduction
  • ODI Improvement: 10-12% average reduction
  • Opioid Tapering Success: ~40% among completers

Assessment Instruments

Brief Pain Inventory (BPI)

  • Pain Severity: 4 items (worst, least, average, now) on 0-10 scale
  • Pain Interference: 7 items (activity, mood, walking, work, relations, sleep, enjoyment) on 0-10 scale
  • Scoring: Mean of items in each domain

Oswestry Disability Index (ODI)

  • 10 Items: Pain intensity, personal care, lifting, walking, sitting, standing, sleeping, social life, traveling, employment
  • Scale: 0-5 per item (0-50 total, converted to 0-100%)
  • Interpretation:
    • 0-20%: Minimal disability
    • 20-40%: Moderate disability
    • 40-60%: Severe disability
    • 60-80%: Crippled
    • 80-100%: Bed-bound

Using the Data

Python/Pandas

import pandas as pd

# Load CSV data
patients = pd.read_csv('pmsg_data_csv/patients.csv')
assessments = pd.read_csv('pmsg_data_csv/assessments.csv')

# Calculate improvement
baseline = assessments[assessments['week_number'] == 0]
week8 = assessments[assessments['week_number'] == 8]
improvement = baseline.merge(week8, on='patient_id', suffixes=('_baseline', '_week8'))
improvement['bpi_improvement'] = improvement['bpi_severity_score_baseline'] - improvement['bpi_severity_score_week8']

SQLAlchemy

from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database_models import Patient, Assessment

engine = create_engine('sqlite:///pmsg_platform.db')
Session = sessionmaker(bind=engine)
session = Session()

# Query completers
completers = session.query(Patient).filter_by(program_status='Completed').all()

# Get patient with assessments
patient = session.query(Patient).filter_by(patient_id='PMSG-01-001').first()
assessments = patient.assessments  # Access related assessments

Excel Analysis

Open pmsg_simulation_100patients.xlsx and use: - Pivot tables for cohort-level analysis - VLOOKUP to join patient and assessment data - Charts for visualization

Customization

Change Number of Patients

simulator = PMSGPatientSimulator(n_patients=200, base_cohort=1, random_seed=42)

Change Random Seed

simulator = PMSGPatientSimulator(n_patients=100, base_cohort=1, random_seed=12345)

Use PostgreSQL Instead of SQLite

db = DatabaseIntegration(
    database_url='postgresql://user:password@localhost/pmsg'
)

Adjust Pain Conditions Distribution

Edit PAIN_CONDITIONS dictionary in patient_simulator.py:

PAIN_CONDITIONS = {
    'Your Condition': 0.30,  # 30% prevalence
    'Another Condition': 0.20,
    # ... total weights must sum to 1.0
}

Clinical Validity

The simulation incorporates evidence-based parameters:

  1. BPI Scores: Realistic baseline severity and improvement patterns based on chronic pain literature
  2. ODI Scores: Correlated with pain severity, representing functional impairment
  3. Dropout Rates: 25% consistent with pain management program attrition
  4. Improvement Trajectories: 70% responders, 30% minimal responders
  5. Medication Patterns: Realistic polypharmacy with opioid prevalence
  6. Opioid Tapering: 40% success rate among program completers

Use Cases

  1. Program Evaluation: Test statistical analysis approaches
  2. Dashboard Development: Prototype visualization dashboards
  3. Grant Writing: Generate sample outcomes data
  4. Staff Training: Demonstrate data workflows
  5. Quality Improvement: Model intervention scenarios
  6. EMR Testing: Populate test databases

Technical Notes

  • Random Seed: Set to 42 for reproducibility
  • Date Ranges: Enrollment dates span 6 months prior to current date
  • Missing Data: Minimal by design; can be added for realism
  • Performance: Generates 100 patients in <2 seconds
  • Database: SQLite by default; supports PostgreSQL, MySQL

Contact

For questions about the PMSG platform or this simulator: - Clinical Lead: Dr. Darrell Harris - Organization: Empowering For Excellence Youth (EFE) - Location: Toledo, Ohio

License

Internal use for EFE PMSG program evaluation and development.

Version History

  • v1.0 (2026-01-16): Initial 100-patient simulator
    • Complete BPI/ODI assessment tracking
    • Realistic demographics and pain conditions
    • CSV, Excel, and database export
    • Comprehensive documentation