Code and data accompanying the research paper on delineating Hospital Service Areas (HSAs) using patient trajectory data and analyzing climate-health relationships in Jordan.
-
GEE_Climate_Features_by_Facilities.ipynb- Climate data extraction (Google Earth Engine from Google Colab or local environment)- Extracts climate variables around healthcare facility buffers
- Sources: CHIRPS (precipitation), ERA5-Land (temperature), TerraClimate (water balance)
- Creates facility-level climate datasets and computes climate clusters for HSA delineation and health analysis
- Local version:
GEE_local_Climate_Features_by_Facilities.ipynb— runs without Colab, but requires Earth Engine auth and (optionally) Drive API OAuth if you use the automated export/download steps
-
HSA_v6_FINAL.ipynb- Main HSA optimization workflow- Delineates Hospital Service Areas using unified scoring system with mode-specific weight profiles
- Five optimization modes: FEWEST, FOOTPRINT, DISTANCE, GOVERNORATE_TAU_COVERAGE, GOVERNORATE_FEWEST
- Pure score-driven optimization with no artificial facility count constraints
- Generates two geometry outputs per mode: (1)
{NETWORK}_{MODE}_hsas_circles.geojson— service-radius circles clipped to Jordan boundary; (2){NETWORK}_{MODE}_hsas_v2.geojson— further clipped to WorldPop constrained inhabited cells, with original circle preserved incircle_geometry_wktcolumn - Generates
{NETWORK}_{MODE}_map.gpkgGeoPackage with 5 layers:hsa_circles,hsa_boundaries,hsa_anchors,all_facilities,country_boundary - Composite score tracking and detailed output tables exported to
out/textresults/
-
GEE_HSA_Weekly_Climate_Lagged.ipynb- Weekly climate aggregation (Google Earth Engine from Google Colab or local environment)- Aggregates climate data to weekly temporal resolution by HSA
- Computes lagged climate variables (1-20 day lags)
- Exports 6 CSV files per HSA (precipitation, temperature, soil moisture, evaporation, water balance, elevation)
- Output location: If running on Google Colab, users must download exported CSVs from Google Drive to
out/DRIVE_CLIMATE_BY_HSA_DOWNLOAD/FINAL_HSA_CLIMATE/ - Local versions:
GEE_local_HSA_Weekly_Climate_Lagged.ipynb(standard) andGEE_local_HSA_Weekly_Climate_Lagged_chunked.ipynb(chunked). Both run without Colab but require Earth Engine auth and (optionally) Drive API OAuth. The chunked version splits weeks into 13-week chunks to avoid GEE memory errors on large HSA polygons, with an additional step to concatenate and validate chunk outputs.
-
Patient_Allocation_Probabilistic.ipynb- Probabilistic population allocation for overlapping HSAs- Two-step process: (1) allocate population pixels to ALL facilities via gravity model, (2) aggregate facility populations to HSA anchors using three-case logic
- Gravity model distributes each pixel's population proportionally to facility attractiveness (capacity^α / distance^β)
- Eliminates double/triple counting when HSAs overlap
- Required for: Computing disease rates and weekly disease counts by HSA
- Outputs:
pixel_allocations_{NETWORK}_{MODE}.csv,{NETWORK}_{MODE}_hsa_populations_probabilistic.csv, and{NETWORK}_{MODE}_facility_hsa_assignments.csv
-
Generate_Modeling_Dataset.ipynb- Complete modeling dataset generation- Orchestrates the complete dataset preparation pipeline
- Calls existing Python scripts to: (1) generate weekly disease counts, (2) merge climate + disease data
- Creates final dataset ready for machine learning modeling
- Outputs:
{NETWORK}_{MODE}_modeling_dataset.csvwith feature metadata
-
compare_delineations.ipynb- Compare delineation modes- Runs
compare_spatial_methods_v2.pywith notebook-specified inputs - Generates a comparison table across methods
- Runs
-
run_climate_health_modeling.ipynb- Run climate-health modeling- Runs
climate_health_modeling.pywith notebook-specified inputs - Uses
out/modeling/{NETWORK}_{MODE}_modeling_dataset.csvas input - Writes outputs to
out/modeling/
- Runs
-
hsa_optimization.py- Core HSA optimization algorithm- HSAOptimizer class with unified scoring system
- Five optimization modes (FEWEST, FOOTPRINT, DISTANCE, governorate-based)
- Population coverage calculations and HSA boundary delineation
-
hsa_mapping_working.py- HSA map generation- Creates professional maps showing both service-radius circle outlines (dashed) and WorldPop-clipped inhabited-area patches (filled)
- Saves
{NETWORK}_{MODE}_map.gpkgGeoPackage with 5 layers:hsa_circles,hsa_boundaries,hsa_anchors,all_facilities,country_boundary - Visualization of facilities, boundaries, and population density
-
hsa_objective_analysis.py- HSA results analysis- Statistical analysis and visualizations for all five optimization modes
-
patient_allocation.py- Probabilistic population allocation for overlapping HSAs- Purpose: Eliminates double/triple counting when HSAs overlap
- Two-step process: (1) Gravity model allocates each population pixel probabilistically across ALL reachable facilities based on attractiveness (capacity^α / distance^β); (2) facility-level populations are aggregated to HSA anchors using three-case logic (inside one HSA, outside all HSAs, or in overlapping HSAs)
- Includes parallel processing for 3-4x speedup on multi-core systems
- Required for: Computing disease rates and weekly disease counts by HSA
- Not required for: HSA boundary delineation (only needed for downstream disease modeling)
-
generate_weekly_disease_counts_adjusted.py- Weekly disease count aggregation- Aggregates patient visits by HSA and week (Monday-anchored weeks)
- Uses gravity model to avoid double-counting facilities in multiple HSAs
- Outputs:
{NETWORK}_{MODE}_weekly_{DISEASE}_adjusted.csv
-
prepare_ml_dataset.py- Dataset preparation for ML modeling- Merges climate data (6 variable types per HSA) with disease surveillance data
- Loads climate CSVs from
out/DRIVE_CLIMATE_BY_HSA_DOWNLOAD/FINAL_HSA_CLIMATE/ - Creates complete modeling dataset with feature metadata
- Outputs:
{NETWORK}_{MODE}_modeling_dataset.csvand feature descriptions JSON
climate_health_modeling.py- Basic climate-health EDA and preprocessingclimate_health_modeling_comprehensive.py- Comprehensive modeling with variable pruningclimate_health_modeling_parsimonious.py- Theory-driven parsimonious modelsclimate_health_modeling_anomalies.py- Tests if climate anomalies predict disease anomalies (removes seasonal means to isolate climate signal)train_ml_models.py- Baseline ML model training (multiple model families)train_improved_models.py- Improved ML models with alternative feature sets
08_climate_ar_decomposition.py- Hierarchical variance decomposition (AR vs seasonal vs climate contributions)09_spatial_unit_comparison.py- Compare model performance across spatial units (HSA vs governorate vs country)10_spatial_autocorrelation.py- Moran's I test for spatial autocorrelation in model residuals11_gravity_sensitivity_analysis.py- Gravity model parameter sensitivity (alpha/beta grid + bootstrap noise)12_extreme_event_analysis.py- Compare climate means vs extreme indicators as predictors13_exclusion_analysis.py- Allocation probability distribution and population coverage tiers14_climate_exclusion_test.py- Population subgroup climate test (high vs low connectivity)15_weight_sensitivity_analysis.py- Optimization weight perturbation sensitivity16_within_hsa_heterogeneity.py- Within-HSA climate heterogeneity analysis (ICC computation)
compare_spatial_methods_v2.py- Compare HSA delineation methods- Compares optimized HSAs vs fixed-radius buffers, Voronoi tessellation, governorate boundaries
- Called by
compare_delineations.ipynbwith notebook-specified parameters - Outputs:
{NETWORK}_spatial_methods_comparison.csv
All data files use synthetic patient data to protect privacy. Boundary and coordinate data are real.
data/jor_ppp_2020_UNadj.tif- WorldPop 2020 population density (UN-adjusted, ~10.2M total)- Resolution: 100m × 100m
- Used in HSA optimization for coverage calculations
- Source: WorldPop (www.worldpop.org)
data/jor_ppp_2020_constrained.tif- WorldPop 2020 population density (constrained to settlement patterns, ~7M total)- Resolution: 100m × 100m
- Used to clip HSA circles to inhabited areas only (assigns population exclusively to detected building footprint cells; desert cells carry NoData); also used as a background layer in maps
- Source: WorldPop (www.worldpop.org)
data/adm_boundaries/Jordan_governorates_simplified20m.gpkg- 12 governoratesdata/adm_boundaries/Jordan_districts_simplified20m.gpkg- 51 districtsdata/adm_boundaries/Jordan_subdistricts_simplified20m.gpkg- 89 subdistrictsdata/jordan_boundary.gpkg- National boundarydata/jordan_governorates.gpkg- Governorate boundaries
Source: OpenStreetMap, manually aligned and verified.
All patient data is synthetic to protect privacy. Files use SYNINF_ prefix for infectious diseases and SYNNCD_ prefix for non-communicable diseases. The repo also supports SYNMODINF_ and SYNMODNCD_, which are synthetic variants designed to better approximate downstream modeling results:
data/SYNINF_facility_coordinates.csv- Infectious disease facility locations (lat/lon)data/SYNNCD_facility_coordinates.csv- Non-communicable disease facility locations (lat/lon)data/SYNINF_groups_of_diagnoses.csv- Diagnosis code groupings for infectious diseasesdata/SYNNCD_groups_of_diagnoses.csv- Diagnosis code groupings for non-communicable diseasesdata/SYNINF_patient_visits.csv- Synthetic infectious disease visitsdata/SYNNCD_patient_visits.csv- Synthetic non-communicable disease visits
Note: Synthetic data preserves statistical properties of real data (distributions, correlations) but contains no actual patient information. The SYN prefix indicates synthetic data. SYNMODINF and SYNMODNCD are modeling-oriented synthetic datasets intended to better reproduce the behavior of the downstream climate-health pipeline.
This repository provides a reproducible workflow for HSA delineation and climate-health analysis implemented as sequential Jupyter notebooks:
- Python 3.8 or higher
- Google Earth Engine account (for climate extraction notebooks)
- Google Colab access (optional; local GEE notebooks are provided)
- Local Python environment (for optimization and modeling)
- GDAL/QGIS (optional, for viewing GeoPackage files)
# Clone repository
git clone https://github.com/izaslavsky/jordan-hsa-optimization.git
cd jordan-hsa-optimization
# Install Python dependencies
pip install -r requirements.txt
# Authenticate with Google Earth Engine (for GEE notebooks)
earthengine authenticateSeveral notebooks in this repository rely on Google Earth Engine (GEE) for climate data extraction and Google Drive for exporting large CSV outputs.
Specifically:
GEE_Climate_Features_by_Facilities.ipynbGEE_HSA_Weekly_Climate_Lagged.ipynb
These notebooks:
- Run computations on Google Earth Engine servers
- Export results to a Google Drive folder
- Optionally poll Google Drive and download results locally
Because of this, both Earth Engine and Google Drive authentication are required.
| Component | Purpose | Required? |
|---|---|---|
| Google Earth Engine account | Run climate computations | ✅ Yes |
| Google Drive OAuth credentials | Detect + download exported CSVs | ✅ Yes |
client_secrets.json file |
Local OAuth authentication | ✅ Yes |
.gitignore entry |
Prevent credential leaks | ✅ Yes |
You must authenticate Earth Engine once per machine or Colab session.
earthengine authenticateThis opens a browser, prompts Google login, and stores credentials locally. After authentication, notebooks initialize Earth Engine with:
ee.Initialize(project="ee-<your-project-id>")Climate exports are written to Google Drive. To automatically detect when files are ready and download them, the notebooks use the Google Drive API.
This requires an OAuth credentials file:
client_secrets.jsonWhere the credentials file goes
Place the file at the root of the repository:
jordan-hsa-optimization/
├── client_secrets.json ← required, NOT committed
├── .gitignore
├── README.md
├── notebooks/
└── ...The notebooks reference it as:
CLIENT_SECRETS_PATH = "client_secrets.json"When running GEE notebooks in Google Colab:
- Earth Engine authentication is handled interactively
- Google Drive can be mounted instead of using OAuth
Colab users do not need client_secrets.json if they rely on:
from google.colab import drive
drive.mount('/content/drive')Local users do need it.
- client_secrets.json grants access to your Google Drive
- Treat it like a password
- Rotate it if accidentally exposed
See SETUP_INSTRUCTIONS.md for step-by-step instructions on creating credentials.
1. HSA Optimization
Open HSA_v6_FINAL.ipynb in Jupyter:
jupyter notebook HSA_v6_FINAL.ipynbThis notebook:
- Runs five optimization modes with different objectives (FEWEST, FOOTPRINT, DISTANCE, and governorate-based modes)
- Uses unified scoring system with mode-specific weight profiles
- Generates HSA boundaries with composite score tracking
- Outputs two GeoJSON files per mode: service-radius circles (
{NETWORK}_{MODE}_hsas_circles.geojson) and WorldPop-clipped inhabited-area patches ({NETWORK}_{MODE}_hsas_v2.geojson, withcircle_geometry_wktcolumn) - Outputs a GeoPackage per mode (
{NETWORK}_{MODE}_map.gpkg) with layers for circles, boundaries, anchors, all facilities, and country boundary
2. Climate Data Extraction
For facility-level climate extraction:
GEE_Climate_Features_by_Facilities.ipynb
For weekly lagged climate variables:
GEE_HSA_Weekly_Climate_Lagged.ipynb
Important: After running GEE_HSA_Weekly_Climate_Lagged.ipynb, you must download the exported climate CSV files from your Google Drive and place them in:
out/DRIVE_CLIMATE_BY_HSA_DOWNLOAD/FINAL_HSA_CLIMATE/
The notebook exports 6 CSV files per HSA (precipitation, temperature, soil moisture, evaporation, water balance, elevation).
Note: GEE notebooks require Google Earth Engine authentication. Climate extraction runtime is highly variable (30 minutes to many hours) depending on GEE server load; tasks may queue, time out, or need to be resubmitted.
3. Probabilistic Population Allocation (Required for Disease Modeling)
HSAs created in step 2 define overlapping service areas around facilities. Before computing disease rates or weekly disease counts, you must allocate population to facilities and then to HSAs to prevent double/triple counting.
Open and run Patient_Allocation_Probabilistic.ipynb:
jupyter notebook Patient_Allocation_Probabilistic.ipynbThis notebook implements a two-step allocation process:
Step 1 — Pixels to ALL facilities (probabilistic): Each population pixel's population is distributed across ALL reachable facilities based on gravity model probabilities: P(facility) = Volume^α / Distance^β, normalized across all facilities within 100km.
Step 2 — Facilities to HSA anchors (three-case logic): Facility-level populations are aggregated to HSAs:
- Facility inside exactly 1 HSA → 100% to that HSA
- Facility outside all HSAs → assigned to nearest HSA anchor within 100km
- Facility inside 2+ overlapping HSAs → proportional split using gravity model
Why this is necessary:
- HSA boundaries overlap (facility service areas are circles that intersect)
- Same person lives in multiple overlapping HSAs
- Without allocation: person counted 2-3 times when computing disease rates
- With probabilistic allocation: each pixel's population is distributed proportionally across nearby facilities, then aggregated to HSAs
- Result: Accurate denominators for disease rate calculations
Runtime: 1-3 hours (processes ~250,000 population pixels against all facilities).
When to skip: Only needed if you're doing disease modeling. Not required for HSA boundary visualization or spatial analysis.
4. Generate Modeling Dataset
After completing steps 1-3 above (HSA optimization, climate extraction, population allocation), generate the complete modeling dataset:
jupyter notebook Generate_Modeling_Dataset.ipynbThis notebook orchestrates the complete dataset preparation pipeline:
-
Checks prerequisites:
- HSA boundaries from step 1
- Population allocations from step 3
- Climate CSVs downloaded from Google Drive (step 2)
- Patient visit data
-
Generates weekly disease counts:
- Calls
generate_weekly_disease_counts_adjusted.py - Aggregates patient visits by HSA and week
- Outputs:
{NETWORK}_{MODE}_weekly_diarrheal.csvand{NETWORK}_{MODE}_weekly_infectious.csv
- Calls
-
Merges climate + disease data:
- Calls
prepare_ml_dataset.py - Loads climate CSVs (6 variable types per HSA)
- Merges with weekly disease counts
- Outputs:
{NETWORK}_{MODE}_modeling_dataset.csvwith feature metadata
- Calls
Outputs:
- Weekly disease count files in
out/ - Complete modeling dataset ready for ML training
Prerequisites:
- ✅ HSA boundaries generated (HSA_v6_FINAL.ipynb)
- ✅ Population allocation completed (Patient_Allocation_Probabilistic.ipynb)
- ✅ Climate files downloaded to
out/DRIVE_CLIMATE_BY_HSA_DOWNLOAD/FINAL_HSA_CLIMATE/
5. Climate-Health Modeling
After completing step 4 (dataset generation), run climate-health modeling:
jupyter notebook run_climate_health_modeling.ipynbThis notebook orchestrates the modeling pipeline by calling:
climate_health_modeling_comprehensive.py- Variable pruning and model comparisonclimate_health_modeling_parsimonious.py- Theory-driven small modelsclimate_health_modeling_anomalies.py- Climate anomaly vs disease anomaly analysistrain_ml_models.py- Baseline ML modelstrain_improved_models.py- Alternative feature sets- Sensitivity analysis scripts (
08_climate_ar_decomposition.pythrough16_within_hsa_heterogeneity.py) — see Sensitivity Analysis section above
See: CLIMATE_HEALTH_MODELING.md for methodology and results.
6. Compare Delineation Methods (Optional)
To compare the optimized HSAs against baseline spatial methods:
jupyter notebook compare_delineations.ipynbThis notebook calls compare_spatial_methods_v2.py to compare:
- Fixed-radius buffers (all facilities)
- Voronoi tessellation
- Governorate boundaries
- Optimized HSAs
See: SPATIAL_METHODS_COMPARISON.md for methodology and results.
All notebooks include a final cell that exports a summary of their outputs (tables, statistics, key results) to out/textresults/ as markdown files. These provide a text-based record of notebook results for version control and review without re-running notebooks.
The included synthetic dataset enables reproduction of HSA delineation but is not suitable for climate-health modeling validation, as synthetic health outcomes lack temporal autocorrelation and climate associations present in real data.
Core HSA Delineation (Steps 1-2):
┌─────────────────────────────────────────────────────────────┐
│ 1. Climate Extraction (GEE_Climate_Features_by_Facilities) │
│ Input: Facility coordinates │
│ Output: Climate variables by facility buffer zones │
│ ACTION: Copy {NETWORK}_Facilities_Climate_Features_with_ │
│ clusters.csv to /data │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 2. HSA Optimization (HSA_v6_FINAL.ipynb) │
│ Input: Facility coordinates + population raster │
│ Output: Per mode: circles GeoJSON, inhabited-area │
│ patches GeoJSON, and map GeoPackage (5 layers) │
└─────────────────────────────────────────────────────────────┘
Disease Modeling Workflow (Steps 3-7 - requires population allocation):
┌─────────────────────────────────────────────────────────────┐
│ 3. Population Allocation (Patient_Allocation_Probabilistic) │
│ Input: HSA boundaries + population raster │
│ Output: pixel_allocations_*.csv, hsa_populations_*.csv │
│ WHY: HSAs overlap - probabilistic gravity allocation │
└─────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 4. Weekly Climate Aggregation (GEE_HSA_Weekly_Climate) │
│ Input: HSA boundaries + Google Earth Engine datasets │
│ Output: Climate CSVs exported to Google Drive │
│ ACTION: Download the exported CSVs to │
│ out/DRIVE_CLIMATE_BY_HSA_DOWNLOAD/FINAL_HSA_CLIMATE │
└─────────────────────────────────────────────────────────────┘
│
▼
┌═════════════════════════════════════════════════════════════┐
║ 5. Generate Modeling Dataset (orchestration notebook) ║
║ Calls existing Python scripts in sequence: ║
║ ║
║ ┌───────────────────────────────────────────────────┐ ║
║ │ 5a. Weekly Disease Counts │ ║
║ │ Script: generate_weekly_disease_counts_ │ ║
║ │ adjusted.py │ ║
║ │ Input: Population allocations + visit data │ ║
║ │ Output: Weekly disease counts per HSA │ ║
║ └───────────────────────────────────────────────────┘ ║
║ │ ║
║ ▼ ║
║ ┌───────────────────────────────────────────────────┐ ║
║ │ 5b. Merge Climate + Disease Data │ ║
║ │ Script: prepare_ml_dataset.py │ ║
║ │ Input: Climate CSVs + disease counts │ ║
║ │ Output: {NETWORK}_{MODE}_modeling_dataset.csv │ ║
║ └───────────────────────────────────────────────────┘ ║
╚═════════════════════════════════════════════════════════════╝
│
▼
┌─────────────────────────────────────────────────────────────┐
│ 6. Climate-Health Modeling (run_climate_health_modeling) │
│ Input: Modeling dataset (climate + AR features) │
│ Output: Trained models + metrics (out/modeling/) │
│ Also runs: Sensitivity analyses (scripts 08-16) │
└─────────────────────────────────────────────────────────────┘
This repository uses OpenStreetMap-derived administrative boundaries that have been:
- Manually aligned across all three levels (governorate → district → subdistrict)
- Simplified to 20m tolerance for efficient processing (85% file size reduction)
- Verified against official Jordan government population statistics
Why OSM? Other commonly used boundary sources (HumData/GeoBoundaries, GADM, Stanford Earthworks) had inconsistencies between administrative levels that prevented accurate nesting of districts within governorates.
For standalone administrative boundaries with full documentation, see:
- Repository: jordan-administrative-boundaries
The unified scoring system optimizes Hospital Service Areas using five different modes:
Five Optimization Modes:
- FEWEST: Minimize number of HSAs while achieving 90% population coverage
- FOOTPRINT: Maximize geographic diversity and spread across climate zones
- DISTANCE: Minimize average travel distance from population to facilities
- GOVERNORATE_TAU_COVERAGE: Achieve 90% coverage in each governorate independently
- GOVERNORATE_FEWEST: One anchor per governorate + minimize total HSAs
Key Features:
- Unified scoring formula: Single formula with mode-specific weight profiles
- Pure score-driven: Number of facilities emerges from optimization, no artificial constraints
- Adaptive radii: Urban facilities (10km) vs rural facilities (18km)
- Composite scoring: Combines coverage gain, overlap penalty, climate diversity, and distance factors
- Overlap removal: Post-processing removes HSAs with >80% overlap
Stopping Conditions:
- Target coverage reached (90% for main modes)
- No more viable facilities (best score ≤ 0)
- All facilities selected (rare)
Because HSAs are overlapping circular regions, population must be allocated to facilities and then aggregated to HSAs to prevent double-counting in disease rate calculations. This is a two-step probabilistic process:
Step 1 — Pixel to ALL Facilities (Probabilistic): Each population pixel (100m resolution) is distributed across all reachable facilities using a gravity model:
P(facility_i | pixel) = (Volume_i^α / Distance_i^β) / Σ_j (Volume_j^α / Distance_j^β)
Where α = 0.75 (facility size weight), β = 1.5 (distance decay), and maximum distance = 100km. This allocates population to all ~188 facilities in the network, not just HSA anchors.
Step 2 — Facility to HSA Aggregation (Three-Case Logic): After pixel-to-facility allocation, facility-level populations are aggregated to HSAs:
| Case | Condition | Assignment |
|---|---|---|
| Case 1 | Facility inside exactly 1 HSA | 100% to that HSA |
| Case 2 | Facility outside all HSAs | Nearest HSA anchor within 100km |
| Case 3 | Facility inside 2+ overlapping HSAs | Proportional split using gravity model |
Facilities beyond 100km from any HSA anchor are excluded and reported.
Climate variables extracted from Google Earth Engine:
- CHIRPS: Daily precipitation (mm)
- ERA5-Land: Temperature (2m air temp, min/max), humidity (dew point)
- TerraClimate: Soil moisture, water deficit, evapotranspiration
Temporal aggregation:
- Weekly means/sums computed from daily data
- Lagged features: 1-20 day lags to capture delayed health effects
- Spatial aggregation: Mean values within facility buffer zones or HSA polygons
Predictive models for weekly disease incidence using climate variables and disease history.
Approach:
-
Dataset Preparation (
prepare_ml_dataset.py)- Merges climate CSV files with disease surveillance data
- Feature selection to prevent overfitting
- Temporal train/validation/test split (no data leakage)
-
Model Training (
run_climate_health_modeling.ipynb)- Comprehensive modeling with variable pruning (
climate_health_modeling_comprehensive.py) - Parsimonious theory-driven models (
climate_health_modeling_parsimonious.py) - Multiple ML families: Ridge, Lasso, Random Forest, Gradient Boosting, XGBoost
- Comprehensive modeling with variable pruning (
See CLIMATE_HEALTH_MODELING.md for detailed methodology and results.
If you use this code or data in your research, please cite:
@article{zaslavsky2025multi,
title = {Multi-Objective Optimization for Hospital Service Area Delineation},
author = {Zaslavsky, Ilya and Lamont, Stephan and Hussien, Moawiah Omar and Abuidhail, Jamila and Kirkpatrick, Christine and Al-Delaimy, Wael K},
year = {2025},
url = {https://essopenarchive.org/doi/full/10.22541/essoar.15002169/v1},
doi = {10.22541/essoar.15002169/v1},
note = {ESS Open Archive preprint}
}Related Publication: Zaslavsky, Ilya; Lamont, Stephan; Hussien, Moawiah Omar; Abuidhail, Jamila; Kirkpatrick, Christine; and Al-Delaimy, Wael K. Multi-Objective Optimization for Hospital Service Area Delineation. ESS Open Archive. https://essopenarchive.org/doi/full/10.22541/essoar.15002169/v1. DOI: https://doi.org/10.22541/essoar.15002169/v1
This project is licensed under the MIT License - see the LICENSE file for details.
Data Licenses:
- Administrative boundaries: ODbL (OpenStreetMap)
- Synthetic patient data: Public domain (no real patient information)
- Climate data: See individual source licenses (CHIRPS, ERA5-Land, TerraClimate)
- Administrative boundaries: OpenStreetMap contributors
- Climate data:
- CHIRPS (UC Santa Barbara Climate Hazards Center)
- ERA5-Land (ECMWF Copernicus)
- TerraClimate (UC Merced)
- Google Earth Engine: Platform for large-scale climate data extraction
For questions or issues:
- GitHub Issues: Open an issue
- Email: izaslavsky@ucsd.edu
Data Privacy Notice: This repository contains only synthetic patient data generated to match statistical properties of real data. No actual patient information is included.