| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- """Create the eight lightweight entry notebooks for the organized project."""
- from pathlib import Path
- import json
- ROOT = Path(__file__).resolve().parent
- def notebook(title, imports, analysis):
- def cell(kind, source):
- block = {"cell_type": kind, "metadata": {}, "source": source.splitlines(True)}
- if kind == "code":
- block.update({"execution_count": None, "outputs": []})
- return block
- setup = """from pathlib import Path
- import sys
- PROJECT_ROOT = Path.cwd().resolve()
- while not (PROJECT_ROOT / 'data.py').exists():
- if PROJECT_ROOT.parent == PROJECT_ROOT:
- raise FileNotFoundError('Open this notebook from inside organized_uncertainty_analysis.')
- PROJECT_ROOT = PROJECT_ROOT.parent
- if str(PROJECT_ROOT.parent) not in sys.path:
- sys.path.insert(0, str(PROJECT_ROOT.parent))
- """
- return {
- "cells": [
- cell("markdown", f"# {title}\n"),
- cell("code", setup + "\n" + imports),
- cell("code", analysis),
- ],
- "metadata": {
- "kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"},
- "language_info": {"name": "python", "version": "3"},
- },
- "nbformat": 4,
- "nbformat_minor": 5,
- }
- specs = {
- "logistic/notebooks/01_data_fit_gof.ipynb": (
- "Logistic regression: data, fitting, and goodness of fit",
- "from organized_uncertainty_analysis.logistic import data_fit_gof as fit\n",
- "import pandas as pd\ndata = fit.prepare_full_trim(PROJECT_ROOT)\nrows = []\nfor name, (x, y) in data.items():\n for transform in ('raw', 'log'):\n pack = fit.fit_logistic_x(x, y, transform=transform, l2=1e-8)\n x_model = x if transform == 'raw' else __import__('numpy').log(x)\n rows.append({'Dataset': name, 'Predictor': transform.upper(), **fit.goodness_of_fit(x_model, y, pack, l2=1e-8)})\ngof_table = pd.DataFrame(rows)\ngof_table.to_csv(PROJECT_ROOT / 'outputs' / 'logistic_goodness_of_fit.csv', index=False)\ngof_table\n",
- ),
- "logistic/notebooks/02_ci_estimation.ipynb": (
- "Logistic regression: confidence intervals and bands",
- "from organized_uncertainty_analysis.logistic.data_fit_gof import prepare_full_trim\nfrom organized_uncertainty_analysis.logistic import ci_estimation as ci\n",
- "B = 5000\ndata = prepare_full_trim(PROJECT_ROOT)\nP = {}\nfor dataset, (x, y) in data.items():\n for transform in ('raw', 'log'):\n key = f'{dataset}-{transform.upper()}'\n P[key] = ci.fit_ci_pack_rawgrid(x, y, transform=transform, name=key, l2=1e-8, B=B, seed=123)\nsummary = ci.param_ci_table_4methods(P)\nsummary.to_csv(PROJECT_ROOT / 'outputs' / 'logistic_parameter_ci.csv', index=False)\nfig, axes = ci.plot_ci_four_panels(P)\nfig.savefig(PROJECT_ROOT / 'outputs' / 'logistic_ci_bands.png', dpi=300, bbox_inches='tight')\nfig.savefig(PROJECT_ROOT / 'outputs' / 'logistic_ci_bands.pdf', bbox_inches='tight')\nsummary\n",
- ),
- "logistic/notebooks/03_elasticity.ipynb": (
- "Logistic regression: elasticity",
- "import numpy as np\nfrom organized_uncertainty_analysis.logistic.data_fit_gof import prepare_full_trim, fit_logistic_x\nfrom organized_uncertainty_analysis.logistic import elasticity as el\n",
- "data = prepare_full_trim(PROJECT_ROOT)\nP = {}\nfor dataset, (x, y) in data.items():\n for transform in ('raw', 'log'):\n key = f'{dataset}-{transform.upper()}'\n P[key] = {'b': fit_logistic_x(x, y, transform=transform, l2=1e-8), 'transform': transform}\nelasticity_table = el.elasticity_table_4panels(P, make_plots=False)\nelasticity_table.to_csv(PROJECT_ROOT / 'outputs' / 'logistic_elasticity.csv', index=False)\nfig, axes = el.plot_combined_elasticity(elasticity_table)\nfig.savefig(PROJECT_ROOT / 'outputs' / 'logistic_elasticity.png', dpi=600, bbox_inches='tight')\nfig.savefig(PROJECT_ROOT / 'outputs' / 'logistic_elasticity.pdf', bbox_inches='tight')\nelasticity_table\n",
- ),
- "logistic/notebooks/04_noise_measurement.ipynb": (
- "Logistic regression: measurement noise",
- "from organized_uncertainty_analysis.logistic.data_fit_gof import prepare_full_trim\nfrom organized_uncertainty_analysis.logistic import noise_measurement as noise\n",
- "data = prepare_full_trim(PROJECT_ROOT)\nfig, axes, full_noise, trim_noise = noise.make_noise_figure(*data['FULL'], *data['TRIM'], transform='raw', n_refit=1100, n_tta=10000, save_path=PROJECT_ROOT / 'outputs' / 'logistic_noise')\n",
- ),
- "bayesian/notebooks/01_data_fit_gof.ipynb": (
- "Constrained Bayesian model: data, fitting, and goodness of fit",
- "import os\nos.chdir(PROJECT_ROOT)\nfrom organized_uncertainty_analysis.bayesian import data_fit_gof as fit\n",
- "import pandas as pd\nfit_result = fit.fit_full_trim(seed=123)\ngof_table = pd.DataFrame([{'Dataset': name, **fit_result[name]['gof']} for name in ('FULL', 'TRIM')])\ngof_table.to_csv(PROJECT_ROOT / 'outputs' / 'bayesian_goodness_of_fit.csv', index=False)\ngof_table\n",
- ),
- "bayesian/notebooks/02_ci_estimation.ipynb": (
- "Constrained Bayesian model: confidence intervals and bands",
- "import os\nos.chdir(PROJECT_ROOT)\nfrom organized_uncertainty_analysis.bayesian import ci_estimation as ci\n",
- "ci_result = ci.run_bayesian_ci(B_nonpar=400, B_param=400, M_mca=10000, max_hessian_condition=1e6)\nparameter_table = ci.make_parameter_ci_table(ci_result)\nderived_table = ci.make_derived_ci_table(ci_result)\nparameter_table.to_csv(PROJECT_ROOT / 'outputs' / 'bayesian_parameter_ci.csv', index=False)\nderived_table.to_csv(PROJECT_ROOT / 'outputs' / 'bayesian_x50_s50_ci.csv', index=False)\nfig, axes = ci.plot_bayesian_ci(ci_result, band_support='observed')\nfig.savefig(PROJECT_ROOT / 'outputs' / 'bayesian_ci_bands.png', dpi=300, bbox_inches='tight')\nfig.savefig(PROJECT_ROOT / 'outputs' / 'bayesian_ci_bands.pdf', bbox_inches='tight')\nparameter_table, derived_table\n",
- ),
- "bayesian/notebooks/03_elasticity.ipynb": (
- "Constrained Bayesian model: elasticity",
- "import os\nos.chdir(PROJECT_ROOT)\nfrom organized_uncertainty_analysis.bayesian.data_fit_gof import fit_full_trim\nfrom organized_uncertainty_analysis.bayesian import elasticity as el\n",
- "fit_result = fit_full_trim(seed=123)\nelasticity_table = el.elasticity_full_trim(fit_result)\nelasticity_table.to_csv(PROJECT_ROOT / 'outputs' / 'bayesian_elasticity.csv', index=False)\nfig, axes = el.plot_combined_elasticity(elasticity_table)\nfig.savefig(PROJECT_ROOT / 'outputs' / 'bayesian_elasticity.png', dpi=600, bbox_inches='tight')\nfig.savefig(PROJECT_ROOT / 'outputs' / 'bayesian_elasticity.pdf', bbox_inches='tight')\nelasticity_table\n",
- ),
- "bayesian/notebooks/04_noise_measurement.ipynb": (
- "Constrained Bayesian model: measurement noise",
- "import os\nos.chdir(PROJECT_ROOT)\nfrom organized_uncertainty_analysis.bayesian import noise_measurement as noise\n",
- "noise_result = noise.run_noise_analysis(n_refit=150, n_tta=300, seed=1234)\nsummary = noise.make_noise_summary_table(noise_result)\nfig, axes = noise.plot_4panels(noise_result['full'], noise_result['trim'], save_prefix=PROJECT_ROOT / 'outputs' / 'bayesian_noise')\nsummary\n",
- ),
- }
- for relative_path, args in specs.items():
- path = ROOT / relative_path
- path.parent.mkdir(parents=True, exist_ok=True)
- path.write_text(json.dumps(notebook(*args), indent=1), encoding="utf-8")
- print(path.relative_to(ROOT))
|