15 Commits 7ab1e84d3c ... f6bb516138

Auteur SHA1 Message Date
  Martin Horvat f6bb516138 Cosmetic changes il y a 3 semaines
  Martin Horvat 2838fd8b40 Rerun stuff. il y a 3 semaines
  Martin Horvat 989b96f665 Add beta confidence interval comparison il y a 3 semaines
  Martin Horvat 03b8988c01 Update reproducible analysis outputs il y a 3 semaines
  Martin Horvat fd4f113651 Make stochastic analyses reproducible il y a 3 semaines
  Martin Horvat fb83e626fa Add logistic midpoint characteristics il y a 3 semaines
  Martin Horvat f2d31d8a55 Adding section on CI of betas il y a 3 semaines
  Martin Horvat 527766eaeb Correct bootstrap sample documentation il y a 3 semaines
  Martin Horvat d82c88d2b3 Clarify pointwise confidence band coverage il y a 3 semaines
  Martin Horvat 0011c4b0db Use sandwich covariance for penalized fits il y a 3 semaines
  Martin Horvat 79ddfd413c Document monotonic parameter sign symmetries il y a 3 semaines
  Martin Horvat 999ec3a788 Use bootstrap deviance for goodness of fit il y a 3 semaines
  Martin Horvat 9882b5527a Complete theta naming migration in reporting il y a 3 semaines
  Martin Horvat 9458be2b9e Add regularization switch to fit statistics il y a 3 semaines
  Martin Horvat 5771385b3c Adding manuscript il y a 3 semaines
64 fichiers modifiés avec 5840 ajouts et 942 suppressions
  1. 21 17
      README.md
  2. BIN
      manuscript/Figures/BAYESIANFITs.pdf
  3. BIN
      manuscript/Figures/BAYESIANFITs.png
  4. BIN
      manuscript/Figures/BayesianCIs.pdf
  5. BIN
      manuscript/Figures/CHARCHTERISTICSBYES.png
  6. BIN
      manuscript/Figures/CHARCHTERISTICSLOGIT.png
  7. BIN
      manuscript/Figures/CubicCIs.png
  8. BIN
      manuscript/Figures/Distribution.pdf
  9. BIN
      manuscript/Figures/Distributions.png
  10. BIN
      manuscript/Figures/LOGISTICCIs.pdf
  11. BIN
      manuscript/Figures/LOGISTICCIs.png
  12. BIN
      manuscript/Figures/LOGISTICFITS.pdf
  13. BIN
      manuscript/Figures/LOGISTICFITs.pdf
  14. BIN
      manuscript/Figures/LOGISTICFITs.png
  15. BIN
      manuscript/Figures/NOISEBAYES.pdf
  16. BIN
      manuscript/Figures/NOISELOGISTIC.pdf
  17. BIN
      manuscript/Figures/SENBAYES.pdf
  18. BIN
      manuscript/Figures/SENBAYES.png
  19. BIN
      manuscript/Figures/SENLOGISTIC.pdf
  20. BIN
      manuscript/Figures/SENLOGISTIC.png
  21. BIN
      manuscript/Figures/cubic_logistic_fits.pdf
  22. BIN
      manuscript/Figures/cubic_logistic_fits.png
  23. BIN
      manuscript/Figures/logistic_elasticity.pdf
  24. BIN
      manuscript/Figures/logit_cost_min_paper.pdf
  25. BIN
      manuscript/Figures/logit_cost_min_paper.png
  26. BIN
      manuscript/Figures/logit_fit_CI_paper.pdf
  27. BIN
      manuscript/Figures/logit_nonpar_boots.pdf
  28. BIN
      manuscript/Figures/logit_nonpar_boots.png
  29. BIN
      manuscript/Figures/logit_nonpar_boots_sel.pdf
  30. BIN
      manuscript/Figures/logit_nonpar_boots_sel.png
  31. 3608 0
      manuscript/Ref.bib
  32. 146 0
      manuscript/defs_iop.tex
  33. 186 0
      manuscript/iopjournal.cls
  34. 38 0
      manuscript/optimization.tex
  35. BIN
      manuscript/orcid.pdf
  36. 22 0
      manuscript/tex2word/convert2docx.sh
  37. BIN
      manuscript/tex2word/pandoc_reference.docx
  38. 46 0
      manuscript/tex2word/preprocess_tex_for_word.py
  39. 241 203
      notebooks/logit_all_models.ipynb
  40. 339 325
      notebooks/logit_mono-cubic4paper.ipynb
  41. 87 54
      notebooks/logit_review_boots.ipynb
  42. BIN
      results/logit_all_models/cubic_monotonic/logit_mono_asymptotic_fit.pdf
  43. BIN
      results/logit_all_models/cubic_monotonic/logit_mono_ci_comparison.pdf
  44. BIN
      results/logit_all_models/cubic_unconstrained/logit_cubic_nonmono_fit.pdf
  45. BIN
      results/logit_all_models/linear/logit_linear_fit.pdf
  46. 70 0
      results/logit_mono-cubic4paper/beta_CI_long.txt
  47. BIN
      results/logit_mono-cubic4paper/boots_theta_results.pkl
  48. BIN
      results/logit_mono-cubic4paper/logit_cost_min_paper.pdf
  49. BIN
      results/logit_mono-cubic4paper/logit_fit_CI_paper.pdf
  50. BIN
      results/logit_mono-cubic4paper/logit_fit_CI_simple_paper.pdf
  51. BIN
      results/logit_mono-cubic4paper/logit_fit_paper.pdf
  52. 22 0
      results/logit_mono-cubic4paper/theta_CI_long.txt
  53. BIN
      results/logit_review_boots/logit_asymptotic_ci.pdf
  54. BIN
      results/logit_review_boots/logit_ci_comparison.pdf
  55. BIN
      results/logit_review_boots/logit_nonparametric_bootstrap.pdf
  56. BIN
      results/logit_review_boots/logit_parametric_bootstrap.pdf
  57. BIN
      results/logit_review_boots/logit_stratified_bootstrap.pdf
  58. 550 288
      src/irae_risk/logistic.py
  59. 43 28
      src/irae_risk/monotonic.py
  60. 61 27
      src/irae_risk/reporting.py
  61. 6 0
      tests/conftest.py
  62. 240 0
      tests/test_logistic.py
  63. 17 0
      tests/test_monotonic.py
  64. 97 0
      tests/test_reporting.py

+ 21 - 17
README.md

@@ -1,24 +1,28 @@
-# Uncertainty study
+# Uncertainty-aware quantitative risk assessment (QRA)
 
+This project studies uncertainty in estimates of the probability of adverse events based on the SUVmax biomarker. The main focus is polynomial logistic regression, including monotonicity constraints, regularization, goodness-of-fit assessment, and asymptotic and bootstrap uncertainty estimates.
 
-Studing modeling of uncertainty in estimating probability of adverse events based on SUV max biomarker
+## Repository structure
 
-Team:
+- `src/irae_risk/`: core implementation of the logistic-regression models and supporting numerical methods.
+- `notebooks/`: analyses used to generate and review the results.
+  - `logit_all_models.ipynb`: comparison of the fitted logistic-regression models.
+  - `logit_mono-cubic4paper.ipynb`: monotonic cubic analysis used for the manuscript.
+  - `logit_review_boots.ipynb`: review of bootstrap-based uncertainty estimates.
+- `tests/`: automated tests for the core implementation.
+- `data/`: raw, interim, and processed data.
+- `results/`: generated tables, figures, and cached calculations.
+- `manuscript/`: manuscript sources and related material.
 
-  * Marija Delić <makidelic@gmail.com>  PI
-  * Strašek, Katja <Katja.Strasek@fmf.uni-lj.si>
-  * Martin Horvat <martin.horvat@fmf.uni-lj.si>
-  * Robert Jeraj <robert.jeraj@fmf.uni-lj.si>
+## Team
 
-Other online resources:
+- Marija Delić <makidelic@gmail.com>
+- Zahra Alirezaei <Zahra.Alirezaei@fmf.uni-lj.si>
+- Katja Strašek <Katja.Strasek@fmf.uni-lj.si>
+- Martin Horvat <martin.horvat@fmf.uni-lj.si>
+- Robert Jeraj <robert.jeraj@fmf.uni-lj.si>
 
-  A. Minutes of the meetings:
+## Online resources
 
-    https://docs.google.com/document/d/10vQ1hQK9TbRgyw8s8O_KXbIIqJ8lp8AsJKMbpaviFuA/edit?usp=sharing
-
-
-  B. Repository
-
-    https://med1.fmf.uni-lj.si/owncloud/index.php/apps/files/?dir=/Optimisation%20Group&fileid=689823
-
-  prepared by Strašek, Katja <Katja.Strasek@fmf.uni-lj.si>. Currently this repo is not available :( .
+- [Meeting minutes](https://docs.google.com/document/d/10vQ1hQK9TbRgyw8s8O_KXbIIqJ8lp8AsJKMbpaviFuA/edit?usp=sharing)
+- [Original project repository](https://med1.fmf.uni-lj.si/owncloud/index.php/apps/files/?dir=/Optimisation%20Group&fileid=689823), prepared by Katja Strašek. This repository is currently unavailable.

BIN
manuscript/Figures/BAYESIANFITs.pdf


BIN
manuscript/Figures/BAYESIANFITs.png


BIN
manuscript/Figures/BayesianCIs.pdf


BIN
manuscript/Figures/CHARCHTERISTICSBYES.png


BIN
manuscript/Figures/CHARCHTERISTICSLOGIT.png


BIN
manuscript/Figures/CubicCIs.png


BIN
manuscript/Figures/Distribution.pdf


BIN
manuscript/Figures/Distributions.png


BIN
manuscript/Figures/LOGISTICCIs.pdf


BIN
manuscript/Figures/LOGISTICCIs.png


BIN
manuscript/Figures/LOGISTICFITS.pdf


BIN
manuscript/Figures/LOGISTICFITs.pdf


BIN
manuscript/Figures/LOGISTICFITs.png


BIN
manuscript/Figures/NOISEBAYES.pdf


BIN
manuscript/Figures/NOISELOGISTIC.pdf


BIN
manuscript/Figures/SENBAYES.pdf


BIN
manuscript/Figures/SENBAYES.png


BIN
manuscript/Figures/SENLOGISTIC.pdf


BIN
manuscript/Figures/SENLOGISTIC.png


BIN
manuscript/Figures/cubic_logistic_fits.pdf


BIN
manuscript/Figures/cubic_logistic_fits.png


BIN
manuscript/Figures/logistic_elasticity.pdf


BIN
manuscript/Figures/logit_cost_min_paper.pdf


BIN
manuscript/Figures/logit_cost_min_paper.png


BIN
manuscript/Figures/logit_fit_CI_paper.pdf


BIN
manuscript/Figures/logit_nonpar_boots.pdf


BIN
manuscript/Figures/logit_nonpar_boots.png


BIN
manuscript/Figures/logit_nonpar_boots_sel.pdf


BIN
manuscript/Figures/logit_nonpar_boots_sel.png


+ 3608 - 0
manuscript/Ref.bib

@@ -0,0 +1,3608 @@
+@article{Lopci2022Guidelines,
+  author = {Lopci, Emanuele and Hicks, Rodney J. and Dimitrakopoulou-Strauss, Antonia and Dercle, Laurent and Iravani, Ashkan and others},
+  title = {Joint {EANM}/{SNMMI}/{ANZSNM} practice guidelines/procedure standards on recommended use of [{\textsuperscript{18}F}]FDG {PET/CT} imaging during immunomodulatory treatments in patients with solid tumors version 1.0},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  year = {2022},
+  volume = {49},
+  number = {7},
+  pages = {2323--2341},
+  doi = {10.1007/s00259-022-05780-2}
+}
+
+@book{Hosmer2013,
+  author = {Hosmer, David W. and Lemeshow, Stanley and Sturdivant, Rodney X.},
+  title = {Applied Logistic Regression},
+  year = {2013},
+  edition = {3},
+  publisher = {Wiley},
+}
+
+@book{Agresti2013,
+  author = {Agresti, Alan},
+  title = {Categorical Data Analysis},
+  year = {2013},
+  edition = {3},
+  publisher = {Wiley},
+}
+
+
+
+@book{Nocedal2006,
+  author    = {Nocedal, Jorge and Wright, Stephen J.},
+  title     = {Numerical Optimization},
+  publisher = {Springer},
+  address   = {New York, NY},
+  edition   = {2nd},
+  year      = {2006},
+  series    = {Springer Series in Operations Research and Financial Engineering},
+  doi       = {10.1007/978-0-387-40065-5},
+  isbn      = {978-0-387-30303-1}
+}
+
+@incollection{NeweyMcFadden1994,
+  author = {Newey, Whitney K. and McFadden, Daniel},
+  title = {Large Sample Estimation and Hypothesis Testing},
+  booktitle = {Handbook of Econometrics},
+  editor = {Engle, Robert F. and McFadden, Daniel L.},
+  volume = {4},
+  pages = {2111--2245},
+  year = {1994},
+  publisher = {Elsevier}
+}
+
+@book{LehmannCasella2004,
+  author    = {Lehmann, Erich L. and Casella, George},
+  title     = {Theory of Point Estimation},
+  publisher = {Springer},
+  address   = {New York, NY},
+  edition   = {2nd},
+  year      = {2004},
+  series    = {Springer Texts in Statistics},
+  doi       = {10.1007/b98854},
+  isbn      = {978-0-387-98502-2}
+}
+
+@book{EfronTibshirani1994,
+  author    = {Efron, Bradley and Tibshirani, Robert J.},
+  title     = {An Introduction to the Bootstrap},
+  publisher = {Chapman \& Hall/CRC},
+  address   = {Boca Raton, FL},
+  year      = {1994},
+  series    = {Monographs on Statistics and Applied Probability},
+  number    = {57},
+  doi       = {10.1201/9780429246593},
+  isbn      = {978-0-412-04231-7}
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Bishop2006,
+  author    = {Bishop, Christopher M.},
+  title     = {Pattern Recognition and Machine Learning},
+  publisher = {Springer},
+  address   = {New York, NY},
+  year      = {2006},
+  series    = {Information Science and Statistics},
+  isbn      = {978-0-387-31073-2}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@techreport{JCGM100_2008,
+  author = {{JCGM}},
+  title = {Evaluation of measurement data --- Guide to the expression of uncertainty in measurement},
+  institution = {BIPM and IEC and IFCC and ILAC and ISO and IUPAC and IUPAP and OIML},
+  number = {JCGM 100:2008},
+  year = {2008},
+  doi = {10.59161/JCGM100-2008E}
+}
+
+@article{DerKiureghianDitlevsen2009,
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  title = {Aleatory or epistemic? Does it matter?},
+  journal = {Structural Safety},
+  year = {2009},
+  volume = {31},
+  number = {2},
+  pages = {105--112},
+  doi = {10.1016/j.strusafe.2008.06.020}
+}
+
+@inproceedings{KendallGal2017,
+  author = {Kendall, Alex and Gal, Yarin},
+  title = {What Uncertainties Do We Need in {Bayesian} Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  year = {2017},
+  eprint = {1703.04977},
+  archivePrefix = {arXiv}
+}
+
+@misc{Nguyen2020Guide,
+  author = {Nguyen, Thanh-Tung and others},
+  title = {A Guide to Data Transformation},
+  howpublished = {arXiv preprint},
+  year = {2020},
+}
+
+@article{BoxCox1964,
+  author = {Box, G. E. P. and Cox, D. R.},
+  title = {An Analysis of Transformations},
+  journal = {Journal of the Royal Statistical Society: Series B (Methodological)},
+  year = {1964},
+  volume = {26},
+  number = {2},
+  pages = {211--252}
+}
+
+@book{Soize2017UQ,
+  author = {Soize, Christian},
+  title = {Uncertainty Quantification: An Accelerated Course with Advanced Applications in Computational Engineering},
+  publisher = {Springer},
+  year = {2017},
+  doi = {10.1007/978-3-319-54339-0}
+}
+
+@article{KingZeng2001,
+  author = {King, Gary and Zeng, Langche},
+  title = {Logistic Regression in Rare Events Data},
+  journal = {Political Analysis},
+  year = {2001},
+  volume = {9},
+  number = {2},
+  pages = {137--163},
+  doi = {10.1093/oxfordjournals.pan.a004868}
+}
+
+@article{HeinzeSchemper2002,
+  author = {Heinze, Georg and Schemper, Michael},
+  title = {A solution to the problem of separation in logistic regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419},
+  doi = {10.1002/sim.1047}
+}
+
+@article{Ghosh2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@article{Ramsay1988,
+  author = {Ramsay, James O.},
+  title = {Monotone Regression Splines in Action},
+  journal = {Statistical Science},
+  year = {1988},
+  volume = {3},
+  number = {4},
+  pages = {425--461},
+  doi = {10.1214/ss/1177012761}
+}
+@article{PyaWood2015,
+  author = {Pya, Natalya and Wood, Simon N.},
+  title = {Shape constrained additive models},
+  journal = {Statistics and Computing},
+  year = {2015},
+  volume = {25},
+  pages = {543--559},
+  doi = {10.1007/s11222-013-9448-7}
+}
+
+@article{OConnor2017,
+  author = {O'Connor, John P. B. and others},
+  title = {Imaging biomarker roadmap for cancer studies},
+  journal = {Nature Reviews Clinical Oncology},
+  year = {2017},
+  volume = {14},
+  pages = {169--186},
+  doi = {10.1038/nrclinonc.2016.162}
+}
+
+@article{Thrall2018,
+  author = {Thrall, James H. and others},
+  title = {Imaging biomarkers in oncology: current status and future perspectives},
+  journal = {Radiology},
+  year = {2018},
+  volume = {287},
+  number = {2},
+  pages = {313--328},
+  doi = {10.1148/radiol.2018170191}
+}
+
+@article{Greenland2016,
+  author = {Greenland, S.},
+  title = {Doubly robust estimation of causal effects},
+  journal = {Epidemiology},
+  year = {2016},
+  volume = {27},
+  number = {1},
+  pages = {1--10},
+  doi = {10.1097/EDE.0000000000000357}
+}
+
+@book{Gelman2013,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2013},
+  publisher = {CRC Press},
+}
+
+@book{Gelman2013_dup1,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2013},
+  publisher = {CRC Press},
+}
+
+@article{GhoshEtAl2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@article{GhoshEtAl2018_dup1,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@book{Steyerberg2019,
+  author = {Steyerberg, Ewout W.},
+  title = {Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating},
+  year = {2019},
+  publisher = {Springer},
+}
+
+@book{Steyerberg2019_dup1,
+  author = {Steyerberg, Ewout W.},
+  title = {Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating},
+  year = {2019},
+  publisher = {Springer},
+}
+
+@book{Harrell2015,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Harrell2015_dup1,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Carroll2006,
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A.},
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  year = {2006},
+  publisher = {CRC Press},
+}
+
+@book{Carroll2006_dup1,
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A.},
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  year = {2006},
+  publisher = {CRC Press},
+}
+
+@article{Obuchowski2015,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{Obuchowski2015_dup1,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@book{Saltelli2008,
+  author = {Saltelli, Andrea and Chan, Kit and Scott, Marco},
+  title = {Sensitivity Analysis in Practice: A Guide to Assessing Scientific Models},
+  year = {2008},
+  publisher = {Wiley},
+}
+
+@book{Saltelli2008_dup1,
+  author = {Saltelli, Andrea and Chan, Kit and Scott, Marco},
+  title = {Sensitivity Analysis in Practice: A Guide to Assessing Scientific Models},
+  year = {2008},
+  publisher = {Wiley},
+}
+
+@article{AJR2021,
+  author = {Sheikhbahaei, S. and Marcus, C. V. and Sadaghiani, M. S. and Rowe, S. P. and Pomper, M. G. and Solnes, L. B.},
+  title = {Imaging of Cancer Immunotherapy: Response Assessment Methods, Atypical Response Patterns, and Immune-Related Adverse Events},
+  journal = {AJR American Journal of Roentgenology},
+  year = {2022},
+  volume = {218},
+  pages = {940--952},
+  doi = {10.2214/AJR.21.26538}
+}
+
+
+@article{Hribernik2024RadiolOncol,
+  author = {Hribernik, Ne{\v{z}}ka and Strasek, Katja and Huff, Daniel T. and Studen, Andrej and Zevnik, Katarina and {\v{S}}kalic, Katja and others},
+  title = {Role of quantitative imaging biomarkers in an early {FDG-PET/CT} for detection of immune-related adverse events in melanoma patients: a prospective study},
+  journal = {Radiology and Oncology},
+  year = {2024},
+  volume = {58},
+  number = {3},
+  pages = {335--347},
+  doi = {10.2478/raon-2024-0045}
+}
+
+@article{Isensee2021nnUNet,
+  author = {Isensee, Fabian and Jaeger, Paul F. and Kohl, Simon A. A. and Petersen, Jens and Maier-Hein, Klaus H.},
+  title = {nnU-Net: a self-configuring method for deep learning-based biomedical image segmentation},
+  journal = {Nature Methods},
+  year = {2021},
+  volume = {18},
+  number = {2},
+  pages = {203--211},
+  doi = {10.1038/s41592-020-01008-z}
+}
+
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{abdar2021review,
+  title = {A review of uncertainty quantification in deep learning: Techniques, applications and challenges},
+  author = {Abdar, Moloud and Pourpanah, Farhad and Hussain, Sadiq and Rezazadegan, Dana and Liu, Li and Ghavamzadeh, Mohammad and Fieguth, Paul and Cao, Xiaochun and Khosravi, Abbas and Acharya, U Rajendra and others},
+  year = {2021},
+  journal = {Information Fusion},
+  volume = {76},
+  pages = {243--297},
+  publisher = {Elsevier}
+}
+
+@article{aide2022_cancerimaging,
+  title = {PET/CT variants and pitfalls in malignant melanoma},
+  author = {Aide, Nicolas and Iravani, Amir and Prigent, Kevin and Kottler, Diane and Alipour, Ramin and Hicks, Rodney J.},
+  year = {2022},
+  journal = {Cancer Imaging},
+  volume = {22},
+  number = {1},
+  doi = {10.1186/s40644-021-00440-4}
+}
+
+@article{ajdari2019towards,
+  title = {Towards optimal stopping in radiation therapy},
+  author = {Ajdari, Ali and Niyazi, Maximilian and Nicolay, Nils Henrik and Thieke, Christian and Jeraj, Robert and Bortfeld, Thomas},
+  year = {2019},
+  journal = {Radiotherapy and Oncology},
+  volume = {134},
+  pages = {96--100},
+  doi = {10.1016/j.radonc.2019.01.010}
+}
+
+@article{ajdari2022personalized,
+  title = {Personalized mid-course FDG-PET based adaptive treatment planning for non-small cell lung cancer using machine learning and optimization},
+  author = {Ajdari, Ali and Liao, Zhongxing and Mohan, Radhe and Wei, Xiong and Bortfeld, Thomas},
+  year = {2022},
+  journal = {Physics in Medicine \& Biology},
+  volume = {67},
+  number = {18},
+  pages = {185015},
+  doi = {10.1088/1361-6560/ac88b3}
+}
+
+@article{anwar2018,
+  title = {Absolute number of new lesions on 18F-FDG PET/CT is more predictive of clinical response than SUV changes in metastatic melanoma patients receiving ipilimumab},
+  author = {Anwar, Hoda and Sachpekidis, Christos and Winkler, Julia and Kopp-Schneider, Annette and Haberkorn, Uwe and Hassel, Jessica C. and Dimitrakopoulou-Strauss, Antonia},
+  year = {2018},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {45},
+  number = {3},
+  pages = {376--383},
+  doi = {10.1007/s00259-017-3870-6},
+  issn = {1619-7089},
+}
+
+@article{basler2020,
+  title = {Radiomics, Tumor Volume, and Blood Biomarkers for Early Prediction of Pseudoprogression in Patients with Metastatic Melanoma Treated with Immune Checkpoint Inhibition},
+  author = {Basler, Lucas and Gabry\'{s}, Hubert S. and Hogan, Sabrina A. and Pavic, Matea and Bogowicz, Marta and Vuong, Diem and Tanadini-Lang, Stephanie and F\"{o}rster, Robert and Kudura, Ken and Huellner, Martin W. and Dummer, Reinhard and Guckenberger, Matthias and Levesque, Mitchell P.},
+  year = {2020},
+  journal = {Clinical Cancer Research},
+  volume = {26},
+  number = {16},
+  pages = {4414--4425},
+  doi = {10.1007/s00259-017-3870-6}
+}
+
+@article{baumann2016radiation,
+  title = {Radiation oncology in the era of precision medicine},
+  author = {Baumann, Michael and Krause, Mechthild and Overgaard, Jens and Debus, J{\"u}rgen and Bentzen, S{\o}ren M. and Daartz, Juliane and Richter, Christian and Zips, Daniel and Bortfeld, Thomas},
+  year = {2016},
+  journal = {Nature Reviews Cancer},
+  volume = {16},
+  number = {4},
+  pages = {234--249},
+  doi = {10.1038/nrc.2016.18}
+}
+
+@book{MacKay2003,
+  author    = {David J. C. MacKay},
+  title     = {Information Theory, Inference, and Learning Algorithms},
+  publisher = {Cambridge University Press},
+  year      = {2003}
+}
+
+@article{behler2016perspective,
+  title = {Perspective: Machine learning potentials for atomistic simulations},
+  author = {Behler, J{\"o}rg},
+  year = {2016},
+  journal = {The Journal of Chemical Physics},
+  volume = {145},
+  number = {17},
+  pages = {170901}
+}
+
+@article{bellazzi2008predictive,
+  title = {Predictive data mining in clinical medicine: current issues and guidelines},
+  author = {Bellazzi, Riccardo and Zupan, Blaz},
+  year = {2008},
+  journal = {International Journal of Medical Informatics},
+  volume = {77},
+  number = {2},
+  pages = {81--97}
+}
+
+@book{benjamin2014probability,
+  title = {Probability, Statistics, and Decision for Civil Engineers},
+  author = {Benjamin, Jack R. and Cornell, C. Allin},
+  year = {2014},
+  publisher = {Courier Corporation}
+}
+
+@book{berger1985decision,
+  title = {Statistical Decision Theory and Bayesian Analysis},
+  author = {Berger, James O.},
+  year = {1985},
+  edition = {2},
+  publisher = {Springer}
+}
+
+@article{boateng2019review,
+  title = {A review of the logistic regression model with emphasis on medical research},
+  author = {Boateng, Ernest Yeboah and Abaye, Daniel A.},
+  year = {2019},
+  journal = {Journal of Data Analysis and Information Processing},
+  volume = {7},
+  number = {4},
+  pages = {190},
+  doi = {10.4236/jdaip.2019.74012}
+}
+
+@article{brier1950verification,
+  title = {Verification of forecasts expressed in terms of probability},
+  author = {Brier, Glenn W.},
+  year = {1950},
+  journal = {Monthly Weather Review},
+  volume = {78},
+  number = {1},
+  pages = {1--3}
+}
+
+@book{carroll2006measurement,
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A. and Crainiceanu, Ciprian M.},
+  year = {2006},
+  edition = {2},
+  publisher = {CRC Press}
+}
+
+@article{chen2019relationship,
+  title = {Relationship between PD-L1 expression and 18F-FDG uptake in gastric cancer},
+  author = {Chen, Ruohua and Chen, Yumei and Huang, Gang and Liu, Jianjun},
+  year = {2019},
+  journal = {Aging (Albany NY)},
+  volume = {11},
+  number = {24},
+  pages = {12270--12279},
+  doi = {10.18632/aging.102567}
+}
+
+@article{cheng2022accelerating,
+  title = {Accelerating molecular simulations of soft materials using machine learning},
+  author = {Cheng, Bingqing and Chen, Mojie and Ceriotti, Michele and others},
+  year = {2022},
+  journal = {Nature Reviews Materials},
+  volume = {7},
+  number = {11},
+  pages = {822--833}
+}
+
+@article{cook2008statistical,
+  title = {Statistical evaluation of prognostic versus diagnostic models: beyond the ROC curve},
+  author = {Cook, Nancy R.},
+  year = {2008},
+  journal = {Clinical Chemistry},
+  volume = {54},
+  number = {1},
+  pages = {17--23}
+}
+
+@book{cox2018analysis,
+  title = {Analysis of Survival Data},
+  author = {Cox, David Roxbee},
+  year = {2018},
+  publisher = {Chapman and Hall/CRC}
+}
+
+@article{coz2024overview,
+  title = {An Overview of Regression Models for Adverse Events Analysis},
+  author = {Coz, Elsa and Fauvernier, Mathieu and Maucort-Boulch, Delphine},
+  year = {2024},
+  journal = {Drug Safety},
+  volume = {47},
+  number = {3},
+  pages = {205--216}
+}
+
+@inproceedings{KendallGal2017,
+  author    = {Kendall, Alex and Gal, Yarin},
+  title     = {What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  volume    = {30},
+  year      = {2017}
+}
+
+@book{DavisonHinkley1997,
+  title = {Bootstrap Methods and their Application},
+  author = {Davison, A. C. and Hinkley, D. V.},
+  year = {1997},
+  publisher = {Cambridge University Press},
+  series = {Cambridge Series in Statistical and Probabilistic Mathematics},
+  place = {Cambridge}
+}
+
+@article{der2009aleatory,
+  title = {Aleatory or epistemic? Does it matter?},
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  year = {2009},
+  journal = {Structural Safety},
+  volume = {31},
+  number = {2},
+  pages = {105--112}
+}
+
+@article{dirks2023,
+  title = {Development and Validation of a Predictive Model for Metastatic Melanoma Patients Treated with Pembrolizumab Based on Automated Analysis of Whole-Body [18F]FDG PET/CT Imaging and Clinical Features},
+  author = {Dirks, Ine and Keyaerts, Marleen and Dirven, Iris and Neyns, Bart and Vandemeulebroucke, Jef},
+  year = {2023},
+  journal = {Cancers},
+  volume = {15},
+  number = {16},
+  doi = {10.3390/cancers15164083}
+}
+
+@book{Efron1982,
+  title = {The Jackknife, the Bootstrap and Other Resampling Plans},
+  author = {Efron, Bradley},
+  year = {1982},
+  publisher = {Society for Industrial and Applied Mathematics},
+  doi = {10.1137/1.9781611970319},
+}
+
+@book{Efron1994,
+  title = {An Introduction to the Bootstrap},
+  author = {Efron, B. and Tibshirani, R. J.},
+  year = {1994},
+  publisher = {Taylor \& Francis},
+  series = {Chapman \& Hall/CRC Monographs on Statistics \& Applied Probability},
+}
+
+@article{eshghi2018,
+  title = {18F-FDG PET/CT can predict development of thyroiditis due to immunotherapy for lung cancer},
+  author = {Eshghi, Naghmehossadat and Garland, Linda L. and Nia, Emily and Betancourt, Robert and Krupinski, Elizabeth and Kuo, Phillip H.},
+  year = {2018},
+  journal = {Journal of Nuclear Medicine Technology},
+  volume = {46},
+  number = {3},
+  pages = {260--264},
+  doi = {10.2967/jnmt.117.204933}
+}
+
+@article{faber2005treatment,
+  title = {On the treatment of uncertainties and probabilities in engineering decision analysis},
+  author = {Faber, Michael Havbro},
+  year = {2005},
+  journal = {Journal of Offshore Mechanics and Arctic Engineering},
+  volume = {127},
+  number = {3},
+  pages = {243--248},
+  doi = {10.1115/1.1951776}
+}
+
+@article{field2007model,
+  title = {Model selection in applied science and engineering: A decision-theoretic approach},
+  author = {Field Jr, R. V. and Grigoriu, Mircea},
+  year = {2007},
+  journal = {Journal of Engineering Mechanics},
+  volume = {133},
+  number = {7},
+  pages = {780--791}
+}
+
+@article{filippi2022_diagnostics,
+  title = {The Role and Potential of 18F-FDG PET/CT in Malignant Melanoma: Prognostication, Monitoring Response to Targeted and Immunotherapy, and Radiomics},
+  author = {Filippi, Luca and Bianconi, Francesco and Schillaci, Orazio and Spanu, Angela and Palumbo, Barbara},
+  year = {2022},
+  journal = {Diagnostics},
+  volume = {12},
+  number = {4},
+  doi = {10.3390/diagnostics12040929}
+}
+
+@book{Finney1971,
+  author = {Finney, D. J.},
+  title = {Probit Analysis},
+  edition = {3rd},
+  publisher = {Cambridge University Press},
+  year = {1971}
+}
+
+@article{Firth1993,
+  author = {Firth, David},
+  title = {Bias Reduction of Maximum Likelihood Estimates},
+  journal = {Biometrika},
+  year = {1993},
+  volume = {80},
+  number = {1},
+  pages = {27--38}
+}
+
+@article{flaus2021,
+  title = {FDG PET biomarkers for prediction of survival in metastatic melanoma prior to anti-PD1 immunotherapy},
+  author = {Flaus, A. and Habouzit, V. and De Leiris, N. and Vuillez, J. P. and Leccia, M. T. and Perrot, J. L. and Pr\'{e}vot, N. and Cachin, F.},
+  year = {2021},
+  journal = {Scientific Reports},
+  volume = {11},
+  number = {1},
+  pages = {18795},
+  doi = {10.1038/s41598-021-98310-3}
+}
+
+@article{ForemanMackey2013,
+  title = {emcee: The MCMC Hammer},
+  author = {Foreman-Mackey, Daniel and Hogg, David W. and Lang, Dustin and Goodman, Jonathan},
+  year = {2013},
+  journal = {Publications of the Astronomical Society of the Pacific},
+  volume = {125},
+  number = {925},
+  pages = {306},
+  doi = {10.1086/670067},
+}
+
+@article{gandy2020_bjr,
+  title = {Immunotherapy-related adverse effects on 18F-FDG PET/CT imaging},
+  author = {Gandy, Nemi and Arshad, Mubarik A. and Wallitt, Kathryn L. and Dubash, Suraiya and Khan, Sameer and Barwick, Tara D.},
+  year = {2020},
+  journal = {The British Journal of Radiology},
+  volume = {93},
+  number = {1111},
+  pages = {20190832},
+  doi = {10.1259/bjr.20190832}
+}
+
+@article{gigerenzer2011bayesian,
+  title = {Bayesian thinking in medicine},
+  author = {Gigerenzer, Gerd and Gaissmaier, Wolfgang and Kurz-Milcke, Elisabeth and Schwartz, Lisa M. and Woloshin, Steven},
+  year = {2011},
+  journal = {BMJ},
+  volume = {342},
+  pages = {d2306},
+  doi = {10.1136/bmj.d2306}
+}
+
+@book{graybill1976,
+  title = {Theory and Application of the Linear Model},
+  author = {Graybill, F. A.},
+  year = {1976},
+  publisher = {Duxbury Press},
+  series = {Duxbury Classic Series},
+}
+
+@article{guo2010review,
+  title = {A review of quantitative risk--benefit methodologies for assessing drug safety and efficacy--report of the ISPOR risk--benefit management working group},
+  author = {Guo, Jeff J. and Pandey, Swapnil and Doyle, John and Bian, Boyang and Lis, Yvonne and Raisch, Dennis W.},
+  year = {2010},
+  journal = {Value in Health},
+  volume = {13},
+  number = {5},
+  pages = {657--666},
+  doi = {10.1111/j.1524-4733.2010.00725.x}
+}
+
+@article{Heinze2002,
+  author = {Heinze, Gerhard and Schemper, Michael},
+  title = {A Solution to the Problem of Separation in Logistic Regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419}
+}
+
+@article{hindie2020,
+  title = {Metastatic melanoma: can FDG-PET predict success of anti-PD-1 therapy and help determine when it can be discontinued?},
+  author = {Hindie, Elif},
+  year = {2020},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {47},
+  pages = {2227--2232},
+  doi = {10.1007/s00259-020-04826-7}
+}
+
+@article{horne2014pretreatment,
+  title = {Pretreatment SUV max predicts progression-free survival in early-stage non-small cell lung cancer treated with stereotactic body radiation therapy},
+  author = {Horne, Zachary D. and Clump, David A. and Vargo, John A. and Shah, Samir and Beriwal, Sushil and Burton, Steven A. and Quinn, Annette E. and Schuchert, Matthew J. and Landreneau, Rodney J. and Christie, Neil A. and others},
+  year = {2014},
+  journal = {Radiation Oncology},
+  volume = {9},
+  pages = {1--6},
+  doi = {10.1186/1748-717X-9-41}
+}
+
+@article{hribernik2020retrospective,
+  title = {Retrospective analysis of treatment-naive Slovenian patients with metastatic melanoma treated with pembrolizumab--real-world experience},
+  author = {Hribernik, Nezka and Boc, Marko and Ocvirk, Janja and Knez-Arbeiter, Jasna and Mesti, Tanja and Ignjatovic, Marija and Rebersek, Martina},
+  year = {2020},
+  journal = {Radiology and Oncology},
+  volume = {54},
+  number = {1},
+  pages = {119--127},
+  doi = {10.2478/raon-2020-0003}
+}
+
+
+@article{hribernik2024_raon,
+  title = {Role of quantitative imaging biomarkers in an early FDG-PET/CT for detection of immune-related adverse events in melanoma patients: a prospective study},
+  author = {Hribernik, Nezka and Strasek, Katja and Huff, Daniel T. and Studen, Andrej and Zevnik, Katarina and Skalic, Katja and Jeraj, Robert and Rebersek, Martina},
+  year = {2024},
+  journal = {Radiology and Oncology},
+  volume = {58},
+  number = {3},
+  pages = {335--347},
+  doi = {10.2478/raon-2024-0045},
+}
+
+@article{huang2009parametric,
+  title = {A parametric ROC model-based approach for evaluating the predictiveness of continuous markers in case--control studies},
+  author = {Huang, Ying and Pepe, Margaret S.},
+  year = {2009},
+  journal = {Biometrics},
+  volume = {65},
+  number = {4},
+  pages = {1133--1144}
+}
+
+@article{Huff2021,
+  title = {Image intensity histograms as imaging biomarkers: application to immune-related colitis},
+  author = {Huff, Daniel T. and Ferjancic, Peter and Nam{\'\i}as, Mauro and Emamekhoo, Hamid and Perlman, Scott B. and Jeraj, Robert},
+  year = {2021},
+  journal = {Biomedical Physics \& Engineering Express},
+  volume = {7},
+  number = {6},
+  pages = {065019},
+  doi = {10.1088/2057-1976/ac27c3}
+}
+
+@article{iravani2020_ejnmmi,
+  title = {FDG PET/CT for tumoral and systemic immune response monitoring of advanced melanoma during first-line combination ipilimumab and nivolumab treatment},
+  author = {Iravani, Amir and Osman, Medhat M. and Weppler, Alison M. and Wallace, Roslyn and Galligan, Anna and Lasocki, Arian and Hunter, Morgan O. and Akhurst, Tim and Hofman, Michael S. and Lau, Peter K. H. and Kee, Damien and Au-Yeung, George and Sandhu, Shahneen and Hicks, Rodney J.},
+  year = {2020},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {47},
+  pages = {2776--2786},
+  doi = {10.1007/s00259-020-04815-w}
+}
+
+@article{janes2008assessing,
+  title = {Assessing the value of risk predictions by using risk stratification tables},
+  author = {Janes, Holly and Pepe, Margaret S. and Gu, Wen},
+  year = {2008},
+  journal = {Annals of Internal Medicine},
+  volume = {149},
+  number = {10},
+  pages = {751--760}
+}
+
+@book{Johnson1994,
+  title = {Continuous Univariate Distributions, Vol. 1},
+  author = {Johnson, Norman L. and Kotz, Samuel and Balakrishnan, Narayanaswamy},
+  year = {1994},
+  publisher = {John Wiley \& Sons, Inc.},
+  series = {Wiley Series in Probability and Statistics},
+  edition = {2}
+}
+@book{JohnsonKotzBalakrishnan1995,
+  title = {Continuous Univariate Distributions, Vol. 2},
+  author = {Johnson, Norman L. and Kotz, Samuel and Balakrishnan, Narayanaswamy},
+  year = {1995},
+  publisher = {John Wiley \& Sons, Inc.},
+  series = {Wiley Series in Probability and Statistics},
+  edition = {2}
+}
+
+@article{kass1995bayesfactors,
+  title = {Bayes Factors},
+  author = {Kass, Robert E. and Raftery, Adrian E.},
+  year = {1995},
+  journal = {Journal of the American Statistical Association},
+  volume = {90},
+  number = {430},
+  pages = {773--795}
+}
+
+@article{khoshgoftaar1999logistic,
+  title = {Logistic regression modeling of software quality},
+  author = {Khoshgoftaar, Taghi M. and Allen, Edward B.},
+  year = {1999},
+  journal = {International Journal of Reliability, Quality and Safety Engineering},
+  volume = {6},
+  number = {4},
+  pages = {303--317}
+}
+
+@article{kim2012development,
+  title = {Development of novel breast cancer recurrence prediction model using support vector machine},
+  author = {Kim, Woojae and Kim, Ku Sang and Lee, Jeong Eon and Noh, Dong-Young and Kim, Sung-Won and Jung, Yong Sik and Park, Man Young and Park, Rae Woong},
+  year = {2012},
+  journal = {Journal of Breast Cancer},
+  volume = {15},
+  number = {2},
+  pages = {230--238}
+}
+
+@article{kiureghian1989measures,
+  title = {Measures of structural safety under imperfect states of knowledge},
+  author = {Der Kiureghian, Armen},
+  year = {1989},
+  journal = {Journal of Structural Engineering},
+  volume = {115},
+  number = {5},
+  pages = {1119--1140}
+}
+
+@article{kudura2021,
+  title = {Prediction of Early Response to Immune Checkpoint Inhibition Using FDG-PET/CT in Melanoma Patients},
+  author = {Kudura, Ken and Dimitriou, Florentia and Basler, Lucas and F{\"o}rster, Robert and Mihic-Probst, Daniela and Kutzker, Tim and Dummer, Reinhard and Mangana, Joanna and Burger, Irene A. and Kreissl, Michael C.},
+  year = {2021},
+  journal = {Cancers},
+  volume = {13},
+  number = {15},
+  doi = {10.3390/cancers13153830}
+}
+
+@article{kurzinger2020structured,
+  title = {Structured benefit--risk evaluation for medicinal products: review of quantitative benefit--risk assessment findings in the literature},
+  author = {K{\"u}rzinger, Marie-Laure and Douarin, Ludivine and Uzun, Ievgeniia and El-Haddad, Chantal and Hurst, William and Juhaeri, Juhaeri and Tcherny-Lessenot, St{\'e}phanie},
+  year = {2020},
+  journal = {Therapeutic Advances in Drug Safety},
+  volume = {11},
+  pages = {2042098620976951},
+  doi = {10.1177/2042098620976951}
+}
+
+@article{lang2019clinical,
+  title = {Clinical significance of signs of autoimmune colitis in 18F-fluorodeoxyglucose positron emission tomography-computed tomography of 100 stage-IV melanoma patients},
+  author = {Lang, Nina and Dick, Julika and Slynko, Alla and Schulz, Carsten and Dimitrakopoulou-Strauss, Antonia and Sachpekidis, Christos and Enk, Alexander H. and Hassel, Jessica C.},
+  year = {2019},
+  journal = {Immunotherapy},
+  volume = {11},
+  number = {8},
+  pages = {667--676},
+  doi = {10.2217/imt-2018-0146}
+}
+
+@book{Lehmann2004,
+  title = {Elements of Large-Sample Theory},
+  author = {Lehmann, E. L.},
+  year = {2004},
+  publisher = {Springer},
+  series = {Springer Texts in Statistics},
+}
+
+@article{li2023challenges,
+  title = {Challenges and opportunities in molecular simulation of amorphous polymer materials},
+  author = {Li, Yang and Jiang, Bin},
+  year = {2023},
+  journal = {Chinese Journal of Chemical Physics},
+  volume = {36},
+  number = {6},
+  pages = {705--714}
+}
+
+@article{lindley2000philosophy,
+  title = {The philosophy of statistics},
+  author = {Lindley, Dennis V.},
+  year = {2000},
+  journal = {Journal of the Royal Statistical Society Series D: The Statistician},
+  volume = {49},
+  number = {3},
+  pages = {293--337}
+}
+
+@article{lineberry2016recommendations,
+  title = {Recommendations to improve adverse event reporting in clinical trial publications: a joint pharmaceutical industry/journal editor perspective},
+  author = {Lineberry, Neil and Berlin, Jesse A. and Mansi, Bernadette and Glasser, Susan and Berkwits, Michael and Klem, Christian and Bhattacharya, Ananya and Citrome, Leslie and Enck, Robert and Fletcher, John and others},
+  year = {2016},
+  journal = {BMJ},
+  volume = {355},
+  doi = {10.1136/bmj.i5078}
+}
+
+
+@misc{MathWorldSigmoid,
+  author = {Weisstein, Eric W.},
+  title = {Sigmoid Function},
+  howpublished = {Wolfram MathWorld},
+  year = {2002}
+}
+
+@book{McCullagh1989,
+  author = {McCullagh, Peter and Nelder, John A.},
+  title = {Generalized Linear Models},
+  edition = {2},
+  year = {1989},
+  publisher = {Chapman and Hall},
+}
+
+@book{McLachlan2000,
+  author = {McLachlan, Geoffrey J. and Peel, David},
+  title = {Finite Mixture Models},
+  publisher = {Wiley},
+  year = {2000}
+}
+
+@article{murff2003detecting,
+  title = {Detecting adverse events for patient safety research: a review of current methodologies},
+  author = {Murff, Harvey J. and Patel, Vimla L. and Hripcsak, George and Bates, David W.},
+  year = {2003},
+  journal = {Journal of Biomedical Informatics},
+  volume = {36},
+  number = {1-2},
+  pages = {131--143}
+}
+
+@article{murphy1973new,
+  title = {A new vector partition of the probability score},
+  author = {Murphy, Allan H.},
+  year = {1973},
+  journal = {Journal of Applied Meteorology and Climatology},
+  volume = {12},
+  number = {4},
+  pages = {595--600}
+}
+
+@book{Murphy2012,
+  author = {Murphy, Kevin P.},
+  title = {Machine Learning: A Probabilistic Perspective},
+  publisher = {MIT Press},
+  year = {2012}
+}
+
+@article{nadaraja2024_cti,
+  title = {Value of 2-[18F]FDG-PET/CT in identifying immune-related adverse events in patients with melanoma or non-small cell lung cancer: a systematic scoping review},
+  author = {Nadaraja, Sambavy and Helsing, Jonas and Naghavi-Behzad, Mohammad and Land, Lotte H. and Ruhlmann, Christina H. and Gerke, Oke and Hildebrandt, Malene G.},
+  year = {2024},
+  journal = {Clinical and Translational Imaging},
+  volume = {12},
+  pages = {187--195},
+  doi = {10.1007/s40336-024-00618-3}
+}
+
+@article{nakamura2010suvmax,
+  title = {The SUVmax of 18F-FDG PET correlates with histological grade in endometrial cancer},
+  author = {Nakamura, Keiichiro and Kodama, Junichi and Okumura, Yoshihiro and Hongo, Atsushi and Kanazawa, Susumu and Hiramatsu, Yuji},
+  year = {2010},
+  journal = {International Journal of Gynecologic Cancer},
+  volume = {20},
+  number = {1},
+  doi = {10.1111/IGC.0b013e3181c3a288}
+}
+
+@incollection{Newey1994,
+  title = {Large sample estimation and hypothesis testing},
+  author = {Newey, Whitney K. and McFadden, Daniel},
+  year = {1994},
+  booktitle = {Handbook of Econometrics},
+  publisher = {Elsevier},
+  volume = {4},
+  pages = {2111--2245},
+  doi = {10.1016/S1573-4412(05)80005-4},
+}
+
+@book{nguyen2020guide,
+  title = {A Guide on Data Analysis},
+  author = {Nguyen, Mike},
+  year = {2020},
+  publisher = {Bookdown},
+}
+
+@article{nick2007logistic,
+  title = {Logistic regression},
+  author = {Nick, Todd G. and Campbell, Kathleen M.},
+  year = {2007},
+  journal = {Topics in Biostatistics},
+  pages = {273--301}
+}
+
+@article{pate1996uncertainties,
+  title = {Uncertainties in risk analysis: Six levels of treatment},
+  author = {Pat{\'e}-Cornell, M. Elisabeth},
+  year = {1996},
+  journal = {Reliability Engineering \& System Safety},
+  volume = {54},
+  number = {2-3},
+  pages = {95--111}
+}
+
+@article{peisen2024os,
+  title = {Pre-treatment 18F-FDG-PET/CT parameters as biomarkers for progression free survival, best overall response and overall survival in metastatic melanoma patients undergoing first-line immunotherapy},
+  author = {Peisen, Felix and Gerken, Annika and Dahm, Isabel and Nikolau, Konstantin and Eigentler, Thomas and Amaral, Teresa and Moltz, Jan H. and Othman, Ahmed E. and Gatidis, Sergios},
+  year = {2024},
+  journal = {PLOS ONE},
+  volume = {19},
+  number = {1},
+  doi = {10.1371/journal.pone.0296253}
+}
+
+@book{pepe2003statistical,
+  title = {The Statistical Evaluation of Medical Tests for Classification and Prediction},
+  author = {Pepe, Margaret Sullivan},
+  year = {2003},
+  publisher = {Oxford University Press}
+}
+
+@article{pepe2010potential,
+  title = {The potential of genes and other markers to inform about risk},
+  author = {Pepe, Margaret S. and Gu, Jessie W. and Morris, Daryl E.},
+  year = {2010},
+  journal = {Cancer Epidemiology, Biomarkers \& Prevention},
+  volume = {19},
+  number = {3},
+  pages = {655--665}
+}
+
+@article{pham2023os,
+  title = {Chemotherapy in Cutaneous Melanoma: Is There Still a Role?},
+  author = {Pham, James P. and Joshua, Anthony M. and Silva, Ines P. and Dummer, Reinhard and Goldinger, Simone M.},
+  year = {2023},
+  journal = {Current Oncology Reports},
+  volume = {25},
+  number = {6},
+  pages = {609--621},
+  doi = {10.1007/s11912-023-01385-6}
+}
+
+@article{pillans2008clinical,
+  title = {Clinical perspectives in drug safety and adverse drug reactions},
+  author = {Pillans, Peter Ian},
+  year = {2008},
+  journal = {Expert Review of Clinical Pharmacology},
+  volume = {1},
+  number = {5},
+  pages = {695--705}
+}
+
+@book{Press1992,
+  title = {Numerical Recipes in C},
+  author = {Press, William H. and Teukolsky, Saul A. and Vetterling, William T. and Flannery, Brian P.},
+  year = {1992},
+  publisher = {Cambridge University Press},
+  edition = {2}
+}
+
+@article{pronzato2009156,
+  title = {Asymptotic Properties of Nonlinear Least Squares Estimates in Stochastic Regression Models Over a Finite Design Space. Application to Self-Tuning Optimisation},
+  author = {Pronzato, Luc},
+  year = {2009},
+  journal = {IFAC Proceedings Volumes},
+  volume = {42},
+  number = {10},
+  pages = {156--161},
+  doi = {10.3182/20090706-3-FR-2004.00026},
+}
+
+@article{puzanov2017managing,
+  title = {Managing toxicities associated with immune checkpoint inhibitors: consensus recommendations from the Society for Immunotherapy of Cancer (SITC) Toxicity Management Working Group},
+  author = {Puzanov, I. and Diab, A. and Abdallah, K. and Bingham, C. O. and Brogdon, C. and Dadu, R. and Hamad, L. and Kim, S. and Lacouture, M. E. and LeBoeuf, N. R. and others},
+  year = {2017},
+  journal = {Journal for Immunotherapy of Cancer},
+  volume = {5},
+  pages = {95},
+  doi = {10.1186/s40425-017-0300-z}
+}
+
+@article{richter2018review,
+  title = {A review of statistical and machine learning methods for modeling cancer risk using structured clinical data},
+  author = {Richter, Aaron N. and Khoshgoftaar, Taghi M.},
+  year = {2018},
+  journal = {Artificial Intelligence in Medicine},
+  volume = {90},
+  pages = {1--14}
+}
+
+@article{Ritz2015,
+  author = {Ritz, Christian and Streibig, Jens C. and Baty, Francesca and Gerhard, Daniel},
+  title = {Dose-Response Analysis Using R},
+  journal = {PLOS ONE},
+  year = {2015},
+  volume = {10},
+  number = {12},
+  pages = {e0146021},
+  doi = {10.1371/journal.pone.0146021}
+}
+
+@article{RitzStreibig2005,
+  title = {Bioassay Analysis using R},
+  author = {Ritz, Christian and Streibig, Jens C.},
+  year = {2005},
+  journal = {Journal of Statistical Software},
+  volume = {12},
+  number = {5},
+  pages = {1--22},
+  doi = {10.18637/jss.v012.i05}
+}
+
+@article{sachpekidis2023,
+  title = {Can physiologic colonic [18F]FDG uptake in PET/CT imaging predict response to immunotherapy in metastatic melanoma?},
+  author = {Sachpekidis, Christos and Stein-Thoeringer, Christoph K. and Kopp-Schneider, Annette and Weru, Vivienn and Dimitrakopoulou-Strauss, Antonia and Hassel, Jessica C.},
+  year = {2023},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {50},
+  number = {12},
+  pages = {3709--3722},
+  doi = {10.1007/s00259-023-06327-9}
+}
+
+@article{Salvatier2016,
+  title = {Probabilistic programming in Python using {PyMC}3},
+  author = {Salvatier, John and Wiecki, Thomas V. and Fonnesbeck, Christopher},
+  year = {2016},
+  journal = {PeerJ Computer Science},
+  volume = {2},
+  pages = {e55},
+  doi = {10.7717/peerj-cs.55},
+}
+
+@article{scarpelli2016we,
+  title = {WE-H-207A-03: The Universality of the Lognormal Behavior of [F-18] FLT PET SUV Measurements},
+  author = {Scarpelli, M. and Eickhoff, J. and Perlman, S. and Jeraj, R.},
+  year = {2016},
+  journal = {Medical Physics},
+  volume = {43},
+  number = {6Part43},
+  pages = {3845--3846}
+}
+
+@article{schober2021logistic,
+  title = {Logistic regression in medical research},
+  author = {Schober, Patrick and Vetter, Thomas R.},
+  year = {2021},
+  journal = {Anesthesia \& Analgesia},
+  volume = {132},
+  number = {2},
+  pages = {365--366},
+  doi = {10.1213/ANE.0000000000005247}
+}
+
+@article{Sebaugh2011,
+  title = {Guidelines for accurate EC50/IC50 estimation},
+  author = {Sebaugh, Jennifer L.},
+  year = {2011},
+  journal = {Pharmaceutical Statistics},
+  volume = {10},
+  number = {2},
+  pages = {128--134},
+  doi = {10.1002/pst.426}
+}
+
+@article{shipe2019developing,
+  title = {Developing prediction models for clinical use using logistic regression: an overview},
+  author = {Shipe, Maren E. and Deppen, Stephen A. and Farjah, Farhood and Grogan, Eric L.},
+  year = {2019},
+  journal = {Journal of Thoracic Disease},
+  volume = {11},
+  number = {Suppl 4},
+  pages = {S574},
+  doi = {10.21037/jtd.2019.01.25}
+}
+
+@book{steyerberg2009,
+  title = {Clinical Prediction Models: a practical approach to development, validation, and updating},
+  author = {Steyerberg, Ewout W.},
+  year = {2009},
+  publisher = {Springer}
+}
+
+@article{ten2020optimal,
+  title = {Optimal treatment plan adaptation using mid-treatment imaging biomarkers},
+  author = {Ten Eikelder, S. C. M. and Ferjan{\v{c}}i{\v{c}}, P. and Ajdari, A. and Bortfeld, T. and Den Hertog, D. and Jeraj, R.},
+  year = {2020},
+  journal = {Physics in Medicine \& Biology},
+  volume = {65},
+  number = {24},
+  pages = {245011},
+  doi = {10.1088/1361-6560/abc130}
+}
+
+@article{thie2000_diagnostic,
+  title = {The diagnostic utility of the lognormal behavior of PET standardized uptake values in tumors},
+  author = {Thie, Joseph A. and Hubner, Karl F. and Smith, Gary T.},
+  year = {2000},
+  journal = {Journal of Nuclear Medicine},
+  volume = {41},
+  number = {10},
+  pages = {1664--1672}
+}
+
+@article{toma2014quantitative,
+  title = {Quantitative techniques for financial risk assessment: a comparative approach using different risk measures and estimation methods},
+  author = {Toma, Aida and Dedu, Silvia},
+  year = {2014},
+  journal = {Procedia Economics and Finance},
+  volume = {8},
+  pages = {712--719}
+}
+
+@article{valentinuzzi2020f,
+  title = {[F] FDG PET immunotherapy radiomics signature (iRADIOMICS) predicts response of non-small-cell lung cancer patients treated with pembrolizumab},
+  author = {Valentinuzzi, Damijan and Vrankar, Martina and Boc, Nina and Ahac, Valentina and Zupancic, Ziga and Unk, Mojca and Skalic, Katja and Zagar, Ivana and Studen, Andrej and Simoncic, Urban and others},
+  year = {2020},
+  journal = {Radiology and Oncology},
+  volume = {54},
+  number = {3},
+  pages = {285--294}
+}
+
+@article{wang2018fatal,
+  title = {Fatal toxic effects associated with immune checkpoint inhibitors: a systematic review and meta-analysis},
+  author = {Wang, Daniel Y. and Salem, Joe-Elie and Cohen, Justine V. and Chandra, Sunandana and Menzer, Christian and Ye, Fei and Zhao, Shilin and Das, Satya and Beckermann, Kathryn E. and Ha, Lisa and others},
+  year = {2018},
+  journal = {JAMA Oncology},
+  volume = {4},
+  number = {12},
+  pages = {1721--1728},
+  doi = {10.1001/jamaoncol.2018.3923}
+}
+
+@article{weber2013safety,
+  title = {Safety, efficacy, and biomarkers of nivolumab with vaccine in ipilimumab-refractory or-naive melanoma},
+  author = {Weber, Jeffrey S. and Kudchadkar, Ragini Reiney and Yu, Bin and Gallenstein, Donna and Horak, Christine E. and Inzunza, H. David and Zhao, Xiuhua and Martinez, Alberto J. and Wang, Wenshi and Gibney, Geoffrey and others},
+  year = {2013},
+  journal = {Journal of Clinical Oncology},
+  volume = {31},
+  number = {34},
+  pages = {4311},
+  doi = {10.1200/JCO.2013.51.4802}
+}
+
+@book{wilks2011statistical,
+  title = {Statistical Methods in the Atmospheric Sciences},
+  author = {Wilks, Daniel S.},
+  year = {2011},
+  edition = {3},
+  publisher = {Academic Press},
+}
+
+@article{wolchok2017overall,
+  title = {Overall survival with combined nivolumab and ipilimumab in advanced melanoma},
+  author = {Wolchok, Jedd D. and Chiarion-Sileni, Vanna and Gonzalez, Rene and Rutkowski, Piotr and Grob, Jean-Jacques and Cowey, C. Lance and Lao, Christopher D. and Wagstaff, John and Schadendorf, Dirk and Ferrucci, Pier F. and others},
+  year = {2017},
+  journal = {New England Journal of Medicine},
+  volume = {377},
+  number = {14},
+  pages = {1345--1356},
+  doi = {10.1056/NEJMoa1709684}
+}
+
+@article{wolchok2022long,
+  title = {Long-term outcomes with nivolumab plus ipilimumab or nivolumab alone versus ipilimumab in patients with advanced melanoma},
+  author = {Wolchok, Jedd D. and Chiarion-Sileni, Vanna and Gonzalez, Rene and Rutkowski, Piotr and Lao, Christopher D. and Cowey, C. Lance and Schadendorf, Dirk and Wagstaff, John and Dummer, Reinhard and others},
+  year = {2022},
+  journal = {Journal of Clinical Oncology},
+  volume = {40},
+  number = {2},
+  pages = {127},
+  doi = {10.1200/jco.21.02229}
+}
+
+@article{yates1982external,
+  title = {External correspondence: Decompositions of the mean probability score},
+  author = {Yates, J. Frank},
+  year = {1982},
+  journal = {Organizational Behavior and Human Performance},
+  volume = {30},
+  number = {1},
+  pages = {132--156}
+}
+
+@article{yu2016development,
+  title = {Development and validation of a prediction model to estimate individual risk of pancreatic cancer},
+  author = {Yu, Ami and Woo, Sang Myung and Joo, Jungnam and Yang, Hye-Ryung and Lee, Woo Jin and Park, Sang-Jae and Nam, Byung-Ho},
+  year = {2016},
+  journal = {PLOS ONE},
+  volume = {11},
+  number = {1},
+  pages = {e0146473}
+}
+
+@article{zhang2021machine,
+  title = {Machine learning in polymer informatics},
+  author = {Zhang, Yongjin and Wang, Hengbin and Luo, Yingkai and Wang, Chongmin and Han, Jinkyu and Lin, Taoran and others},
+  year = {2021},
+  journal = {InfoMat},
+  volume = {3},
+  number = {9},
+  pages = {943--965}
+}
+
+@book{zhou2014statistical,
+  title = {Statistical Methods in Diagnostic Medicine},
+  author = {Zhou, Xiao-Hua and Obuchowski, Nancy A. and McClish, Donna K.},
+  year = {2014},
+  publisher = {John Wiley \& Sons}
+}
+
+@article{zou2023review,
+  title = {A review of uncertainty estimation and its application in medical imaging},
+  author = {Zou, Ke and Chen, Zhihao and Yuan, Xuedong and Shen, Xiaojing and Wang, Meng and Fu, Huazhu},
+  year = {2023},
+  journal = {Meta-Radiology},
+  publisher = {Elsevier},
+  pages = {100003}
+}
+
+@article{Karlsen2024,
+  author = {Karlsen, Rikke and J{\o}rgensen, Jakob J. and Hjorthaug, Vibeke and others},
+  title = {Is 18F-FDG PET/CT an Optimal Imaging Modality for Detecting Immune Checkpoint Inhibitor--Pneumonitis?},
+  journal = {Cancers},
+  volume = {16},
+  number = {11},
+  pages = {1990},
+  year = {2024},
+  doi = {10.3390/cancers16111990}
+}
+
+@article{CancerImaging2024,
+  author = {Iwasaki, Yuki and Yanagitani, Noriko and Nomura, Hiroshi and others},
+  title = {18F-FDG PET/CT Uptake by Noncancerous Lung as a Predictor of ICI-Induced Interstitial Lung Disease},
+  journal = {Cancer Imaging},
+  year = {2024},
+  volume = {25},
+  pages = {37},
+  doi = {10.1186/s40644-024-00672-9}
+}
+
+@article{Rahman2019,
+  author = {Rahman, Rashidul Islam and Takahashi, Takuya and Oishi, Koji and others},
+  title = {Metabolic Activity on 18F-FDG PET/CT in Immune Checkpoint Inhibitor-Associated Pneumonitis: Correlation with Clinical Severity},
+  journal = {Journal of Nuclear Medicine},
+  volume = {60},
+  number = {12},
+  pages = {1708--1714},
+  year = {2019},
+  doi = {10.2967/jnumed.118.223925}
+}
+
+@article{PubMed39227217,
+  author = {Iwasaki, Yuki and Yanagitani, Noriko and Nomura, Hiroshi and others},
+  title = {18F-FDG-PET/CT Uptake by Noncancerous Lung as a Predictor of ICI-ILD Development},
+  journal = {Frontiers in Oncology},
+  volume = {15},
+  pages = {39227217},
+  year = {2025},
+  doi = {10.3389/fonc.2025.39227217}
+}
+@article{Yamazaki2025,
+  author = {Yamazaki, M. and Watanabe, S. and Tominaga, M. and Yagi, T. and Goto, Y. and Yanagimura, N. and Arita, M. and Ohtsubo, A. and Tanaka, T. and Nozaki, K. and Saida, Y. and Kondo, R. and Kikuchi, T. and Ishikawa, H.},
+  title = {18F‐FDG-PET/CT uptake by noncancerous lung as a predictor of interstitial lung disease induced by immune checkpoint inhibitors},
+  journal = {Academic Radiology},
+  year = {2025},
+  volume = {32},
+  pages = {1026--1035},
+  doi = {10.1016/j.acra.2024.08.043}
+}
+
+@article{Gideonse2024,
+  author = {Gideonse, B. M. and Birkeland, M. and Vilstrup, M. H. and Grupe, P. and Naghavi-Behzad, M. and Ruhlmann, C. H. and Gerke, O. and Hildebrandt, M. G.},
+  title = {Organ‐specific accuracy of [18F]FDG-PET/CT in identifying immune‐related adverse events in patients with high‐risk melanoma treated with adjuvant immune checkpoint inhibitor},
+  journal = {Japanese Journal of Radiology},
+  year = {2024},
+  volume = {42},
+  pages = {753--764},
+  doi = {10.1007/s11604-024-01554-y}
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{DerKiureghianDitlevsen2009,
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  title = {Aleatory or epistemic? Does it matter?},
+  journal = {Structural Safety},
+  year = {2009},
+  volume = {31},
+  number = {2},
+  pages = {105--112},
+  doi = {10.1016/j.strusafe.2008.06.020}
+}
+
+@inproceedings{KendallGal2017,
+  author = {Kendall, Alex and Gal, Yarin},
+  title = {What Uncertainties Do We Need in {Bayesian} Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  year = {2017},
+  eprint = {1703.04977},
+  archivePrefix = {arXiv}
+}
+
+@misc{Nguyen2020Guide,
+  author = {Nguyen, Thanh-Tung and others},
+  title = {A Guide to Data Transformation},
+  howpublished = {arXiv preprint},
+  year = {2020},
+}
+
+@article{BoxCox1964,
+  author = {Box, G. E. P. and Cox, D. R.},
+  title = {An Analysis of Transformations},
+  journal = {Journal of the Royal Statistical Society: Series B (Methodological)},
+  year = {1964},
+  volume = {26},
+  number = {2},
+  pages = {211--252}
+}
+
+@article{KingZeng2001,
+  author = {King, Gary and Zeng, Langche},
+  title = {Logistic Regression in Rare Events Data},
+  journal = {Political Analysis},
+  year = {2001},
+  volume = {9},
+  number = {2},
+  pages = {137--163},
+  doi = {10.1093/oxfordjournals.pan.a004868}
+}
+
+@article{HeinzeSchemper2002,
+  author = {Heinze, Georg and Schemper, Michael},
+  title = {A solution to the problem of separation in logistic regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419},
+  doi = {10.1002/sim.1047}
+}
+
+@article{Ghosh2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@article{Greenland2016,
+  author = {Greenland, S.},
+  title = {Doubly robust estimation of causal effects},
+  journal = {Epidemiology},
+  year = {2016},
+  volume = {27},
+  number = {1},
+  pages = {1--10},
+  doi = {10.1097/EDE.0000000000000357}
+}
+
+@book{Harrell2015,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Harrell2015_dup1,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Carroll2006_dup1,
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A.},
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  year = {2006},
+  publisher = {CRC Press},
+}
+
+@article{Obuchowski2015,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{Obuchowski2015_dup1,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@book{McCullaghNelder1989,
+  author = {McCullagh, Peter and Nelder, John A.},
+  title = {Generalized Linear Models},
+  year = {1989},
+  edition = {2},
+  publisher = {Chapman and Hall},
+}
+
+@book{vanDerVaart1998,
+  author    = {van der Vaart, Aad W.},
+  title     = {Asymptotic Statistics},
+  publisher = {Cambridge University Press},
+  address   = {Cambridge, UK},
+  year      = {1998},
+  series    = {Cambridge Series in Statistical and Probabilistic Mathematics},
+  number    = {3},
+  doi       = {10.1017/CBO9780511802256},
+  isbn      = {978-0-521-49603-2}
+}
+
+
+@book{CasellaBerger2002,
+  author = {Casella, George and Berger, Roger L.},
+  title = {Statistical Inference},
+  year = {2002},
+  edition = {2},
+  publisher = {Duxbury},
+}
+
+@article{Boellaard2015,
+  author = {Boellaard, R.},
+  title = {Standards for PET image acquisition and quantitative data analysis},
+  journal = {Journal of Nuclear Medicine},
+  year = {2015},
+  volume = {56},
+  number = {Suppl 1},
+  pages = {11S--20S},
+  doi = {10.2967/jnumed.114.150813}
+}
+
+@article{Zwanenburg2020,
+  author = {Zwanenburg, A. and Vallières, M. and Abdalah, M. A. and et al.},
+  title = {The Image Biomarker Standardization Initiative: standardized quantitative radiomics for high-throughput image-based phenotyping},
+  journal = {Radiology},
+  year = {2020},
+  volume = {295},
+  number = {2},
+  pages = {328--338},
+  doi = {10.1148/radiol.2020191145}
+}
+
+@article{Storn1997,
+  author = {Rainer Storn and Kenneth Price},
+  title = {Differential Evolution -- A Simple and Efficient Heuristic for Global Optimization over Continuous Spaces},
+  journal = {Journal of Global Optimization},
+  year = {1997},
+  volume = {11},
+  number = {4},
+  pages = {341--359},
+  abstract = {A new heuristic approach for minimizing possibly nonlinear and non-differentiable continuous space functions is presented. By means of an extensive testbed it is demonstrated that the new method converges faster and with more certainty than many other acclaimed global optimization methods. The new method requires few control variables, is robust, easy to use, and lends itself very well to parallel computation.},
+  doi = {10.1023/A:1008202821328},
+  issn = {1573-2916}
+}
+
+@article{Virtanen2020,
+  author = {Virtanen, Pauli and Gommers, Ralf and Oliphant, Travis E. and et al.},
+  title = {{SciPy} 1.0: Fundamental Algorithms for Scientific Computing in Python},
+  journal = {Nature Methods},
+  year = {2020},
+  volume = {17},
+  number = {3},
+  pages = {261--272},
+  doi = {10.1038/s41592-019-0686-2}
+}
+
+@article{Byrd1995,
+  title={A limited memory algorithm for bound constrained optimization},
+  author={Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge and Zhu, Ciyou},
+  journal={SIAM Journal on Scientific Computing},
+  volume={16},
+  number={5},
+  pages={1190--1208},
+  year={1995},
+  publisher={SIAM}
+}
+
+@article{Zhu1977,
+author = {Zhu, Ciyou and Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge},
+title = {Algorithm 778: L-BFGS-B: Fortran subroutines for large-scale bound-constrained optimization},
+year = {1997},
+issue_date = {Dec. 1997},
+publisher = {Association for Computing Machinery},
+volume = {23},
+number = {4},
+issn = {0098-3500},
+doi = {10.1145/279232.279236},
+abstract = {L-BFGS-B is a limited-memory algorithm for solving large nonlinear optimization problems subject to simple bounds on the variables. It is intended for problems in which information on the Hessian matrix is difficult to obtain, or for large dense problems. L-BFGS-B can also be used for unconstrained problems and in this case performs similarly to its predessor, algorithm L-BFGS (Harwell routine VA15). The algorithm is implemented in Fortran 77.},
+journal = {ACM Trans. Math. Softw.},
+month = dec,
+pages = {550–560},
+numpages = {11},
+keywords = {large-scale optimization, limited-memory method, nonlinear optimization, variable metric method}
+}
+
+@article{Lopci2022Guidelines,
+  author = {Lopci, Emanuele and Hicks, Rodney J. and Dimitrakopoulou-Strauss, Antonia and Dercle, Laurent and Iravani, Ashkan and others},
+  title = {Joint {EANM}/{SNMMI}/{ANZSNM} practice guidelines/procedure standards on recommended use of [{\textsuperscript{18}F}]FDG {PET/CT} imaging during immunomodulatory treatments in patients with solid tumors version 1.0},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  year = {2022},
+  volume = {49},
+  number = {7},
+  pages = {2323--2341},
+  doi = {10.1007/s00259-022-05780-2}
+}
+
+@book{LehmannCasella2004,
+  author = {Lehmann, Erich L. and Casella, George},
+  title = {Theory of Point Estimation},
+  year = {2004},
+  edition = {2},
+  publisher = {Springer},
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{DerKiureghianDitlevsen2009,
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  title = {Aleatory or epistemic? Does it matter?},
+  journal = {Structural Safety},
+  year = {2009},
+  volume = {31},
+  number = {2},
+  pages = {105--112},
+  doi = {10.1016/j.strusafe.2008.06.020}
+}
+
+@inproceedings{KendallGal2017,
+  author = {Kendall, Alex and Gal, Yarin},
+  title = {What Uncertainties Do We Need in {Bayesian} Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  year = {2017},
+  eprint = {1703.04977},
+  archivePrefix = {arXiv}
+}
+
+@misc{Nguyen2020Guide,
+  author = {Nguyen, Thanh-Tung and others},
+  title = {A Guide to Data Transformation},
+  howpublished = {arXiv preprint},
+  year = {2020},
+}
+
+@article{BoxCox1964,
+  author = {Box, G. E. P. and Cox, D. R.},
+  title = {An Analysis of Transformations},
+  journal = {Journal of the Royal Statistical Society: Series B (Methodological)},
+  year = {1964},
+  volume = {26},
+  number = {2},
+  pages = {211--252}
+}
+
+@article{KingZeng2001,
+  author = {King, Gary and Zeng, Langche},
+  title = {Logistic Regression in Rare Events Data},
+  journal = {Political Analysis},
+  year = {2001},
+  volume = {9},
+  number = {2},
+  pages = {137--163},
+  doi = {10.1093/oxfordjournals.pan.a004868}
+}
+
+@article{HeinzeSchemper2002,
+  author = {Heinze, Georg and Schemper, Michael},
+  title = {A solution to the problem of separation in logistic regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419},
+  doi = {10.1002/sim.1047}
+}
+
+@article{Ghosh2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@article{OConnor2017,
+  author = {O'Connor, John P. B. and others},
+  title = {Imaging biomarker roadmap for cancer studies},
+  journal = {Nature Reviews Clinical Oncology},
+  year = {2017},
+  volume = {14},
+  pages = {169--186},
+  doi = {10.1038/nrclinonc.2016.162}
+}
+
+@article{Thrall2018,
+  author = {Thrall, James H. and others},
+  title = {Imaging biomarkers in oncology: current status and future perspectives},
+  journal = {Radiology},
+  year = {2018},
+  volume = {287},
+  number = {2},
+  pages = {313--328},
+  doi = {10.1148/radiol.2018170191}
+}
+
+@article{Greenland2016,
+  author = {Greenland, S.},
+  title = {Doubly robust estimation of causal effects},
+  journal = {Epidemiology},
+  year = {2016},
+  volume = {27},
+  number = {1},
+  pages = {1--10},
+  doi = {10.1097/EDE.0000000000000357}
+}
+
+@article{GhoshEtAl2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@book{Steyerberg2019,
+  author = {Steyerberg, Ewout W.},
+  title = {Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating},
+  year = {2019},
+  publisher = {Springer},
+}
+
+@book{Harrell2015,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Carroll2006,
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A.},
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  year = {2006},
+  publisher = {CRC Press},
+}
+
+@article{Obuchowski2015,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{AJR2021,
+  author = {Sheikhbahaei, S. and Marcus, C. V. and Sadaghiani, M. S. and Rowe, S. P. and Pomper, M. G. and Solnes, L. B.},
+  title = {Imaging of Cancer Immunotherapy: Response Assessment Methods, Atypical Response Patterns, and Immune-Related Adverse Events},
+  journal = {AJR American Journal of Roentgenology},
+  year = {2022},
+  volume = {218},
+  pages = {940--952},
+  doi = {10.2214/AJR.21.26538}
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{abdar2021review,
+  title = {A review of uncertainty quantification in deep learning: Techniques, applications and challenges},
+  author = {Abdar, Moloud and Pourpanah, Farhad and Hussain, Sadiq and Rezazadegan, Dana and Liu, Li and Ghavamzadeh, Mohammad and Fieguth, Paul and Cao, Xiaochun and Khosravi, Abbas and Acharya, U Rajendra and others},
+  year = {2021},
+  journal = {Information Fusion},
+  volume = {76},
+  pages = {243--297},
+  publisher = {Elsevier}
+}
+
+@article{ajdari2019towards,
+  title = {Towards optimal stopping in radiation therapy},
+  author = {Ajdari, Ali and Niyazi, Maximilian and Nicolay, Nils Henrik and Thieke, Christian and Jeraj, Robert and Bortfeld, Thomas},
+  year = {2019},
+  journal = {Radiotherapy and Oncology},
+  volume = {134},
+  pages = {96--100},
+  doi = {10.1016/j.radonc.2019.01.010}
+}
+
+@article{ajdari2022personalized,
+  title = {Personalized mid-course FDG-PET based adaptive treatment planning for non-small cell lung cancer using machine learning and optimization},
+  author = {Ajdari, Ali and Liao, Zhongxing and Mohan, Radhe and Wei, Xiong and Bortfeld, Thomas},
+  year = {2022},
+  journal = {Physics in Medicine \& Biology},
+  volume = {67},
+  number = {18},
+  pages = {185015},
+  doi = {10.1088/1361-6560/ac88b3}
+}
+
+@article{anwar2018,
+  title = {Absolute number of new lesions on 18F-FDG PET/CT is more predictive of clinical response than SUV changes in metastatic melanoma patients receiving ipilimumab},
+  author = {Anwar, Hoda and Sachpekidis, Christos and Winkler, Julia and Kopp-Schneider, Annette and Haberkorn, Uwe and Hassel, Jessica C. and Dimitrakopoulou-Strauss, Antonia},
+  year = {2018},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {45},
+  number = {3},
+  pages = {376--383},
+  doi = {10.1007/s00259-017-3870-6},
+  issn = {1619-7089},
+}
+
+@article{basler2020,
+  title = {Radiomics, Tumor Volume, and Blood Biomarkers for Early Prediction of Pseudoprogression in Patients with Metastatic Melanoma Treated with Immune Checkpoint Inhibition},
+  author = {Basler, Lucas and Gabry\'{s}, Hubert S. and Hogan, Sabrina A. and Pavic, Matea and Bogowicz, Marta and Vuong, Diem and Tanadini-Lang, Stephanie and F\"{o}rster, Robert and Kudura, Ken and Huellner, Martin W. and Dummer, Reinhard and Guckenberger, Matthias and Levesque, Mitchell P.},
+  year = {2020},
+  journal = {Clinical Cancer Research},
+  volume = {26},
+  number = {16},
+  pages = {4414--4425},
+  doi = {10.1007/s00259-017-3870-6}
+}
+
+@article{baumann2016radiation,
+  title = {Radiation oncology in the era of precision medicine},
+  author = {Baumann, Michael and Krause, Mechthild and Overgaard, Jens and Debus, J{\"u}rgen and Bentzen, S{\o}ren M. and Daartz, Juliane and Richter, Christian and Zips, Daniel and Bortfeld, Thomas},
+  year = {2016},
+  journal = {Nature Reviews Cancer},
+  volume = {16},
+  number = {4},
+  pages = {234--249},
+  doi = {10.1038/nrc.2016.18}
+}
+
+@article{behler2016perspective,
+  title = {Perspective: Machine learning potentials for atomistic simulations},
+  author = {Behler, J{\"o}rg},
+  year = {2016},
+  journal = {The Journal of Chemical Physics},
+  volume = {145},
+  number = {17},
+  pages = {170901}
+}
+
+@article{bellazzi2008predictive,
+  title = {Predictive data mining in clinical medicine: current issues and guidelines},
+  author = {Bellazzi, Riccardo and Zupan, Blaz},
+  year = {2008},
+  journal = {International Journal of Medical Informatics},
+  volume = {77},
+  number = {2},
+  pages = {81--97}
+}
+
+@book{benjamin2014probability,
+  title = {Probability, Statistics, and Decision for Civil Engineers},
+  author = {Benjamin, Jack R. and Cornell, C. Allin},
+  year = {2014},
+  publisher = {Courier Corporation}
+}
+
+@book{berger1985decision,
+  title = {Statistical Decision Theory and Bayesian Analysis},
+  author = {Berger, James O.},
+  year = {1985},
+  edition = {2},
+  publisher = {Springer}
+}
+
+@article{boateng2019review,
+  title = {A review of the logistic regression model with emphasis on medical research},
+  author = {Boateng, Ernest Yeboah and Abaye, Daniel A.},
+  year = {2019},
+  journal = {Journal of Data Analysis and Information Processing},
+  volume = {7},
+  number = {4},
+  pages = {190},
+  doi = {10.4236/jdaip.2019.74012}
+}
+
+@article{brier1950verification,
+  title = {Verification of forecasts expressed in terms of probability},
+  author = {Brier, Glenn W.},
+  year = {1950},
+  journal = {Monthly Weather Review},
+  volume = {78},
+  number = {1},
+  pages = {1--3}
+}
+
+@book{carroll2006measurement,
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A. and Crainiceanu, Ciprian M.},
+  year = {2006},
+  edition = {2},
+  publisher = {CRC Press}
+}
+
+@article{chen2019relationship,
+  title = {Relationship between PD-L1 expression and 18F-FDG uptake in gastric cancer},
+  author = {Chen, Ruohua and Chen, Yumei and Huang, Gang and Liu, Jianjun},
+  year = {2019},
+  journal = {Aging (Albany NY)},
+  volume = {11},
+  number = {24},
+  pages = {12270--12279},
+  doi = {10.18632/aging.102567}
+}
+
+@article{cheng2022accelerating,
+  title = {Accelerating molecular simulations of soft materials using machine learning},
+  author = {Cheng, Bingqing and Chen, Mojie and Ceriotti, Michele and others},
+  year = {2022},
+  journal = {Nature Reviews Materials},
+  volume = {7},
+  number = {11},
+  pages = {822--833}
+}
+
+@article{cook2008statistical,
+  title = {Statistical evaluation of prognostic versus diagnostic models: beyond the ROC curve},
+  author = {Cook, Nancy R.},
+  year = {2008},
+  journal = {Clinical Chemistry},
+  volume = {54},
+  number = {1},
+  pages = {17--23}
+}
+
+@book{cox2018analysis,
+  title = {Analysis of Survival Data},
+  author = {Cox, David Roxbee},
+  year = {2018},
+  publisher = {Chapman and Hall/CRC}
+}
+
+@article{coz2024overview,
+  title = {An Overview of Regression Models for Adverse Events Analysis},
+  author = {Coz, Elsa and Fauvernier, Mathieu and Maucort-Boulch, Delphine},
+  year = {2024},
+  journal = {Drug Safety},
+  volume = {47},
+  number = {3},
+  pages = {205--216}
+}
+
+@article{der2009aleatory,
+  title = {Aleatory or epistemic? Does it matter?},
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  year = {2009},
+  journal = {Structural Safety},
+  volume = {31},
+  number = {2},
+  pages = {105--112}
+}
+
+@article{dirks2023,
+  title = {Development and Validation of a Predictive Model for Metastatic Melanoma Patients Treated with Pembrolizumab Based on Automated Analysis of Whole-Body [18F]FDG PET/CT Imaging and Clinical Features},
+  author = {Dirks, Ine and Keyaerts, Marleen and Dirven, Iris and Neyns, Bart and Vandemeulebroucke, Jef},
+  year = {2023},
+  journal = {Cancers},
+  volume = {15},
+  number = {16},
+  doi = {10.3390/cancers15164083}
+}
+
+@book{Efron1982,
+  title = {The Jackknife, the Bootstrap and Other Resampling Plans},
+  author = {Efron, Bradley},
+  year = {1982},
+  publisher = {Society for Industrial and Applied Mathematics},
+  doi = {10.1137/1.9781611970319},
+}
+
+
+@article{eshghi2018,
+  title = {18F-FDG PET/CT can predict development of thyroiditis due to immunotherapy for lung cancer},
+  author = {Eshghi, Naghmehossadat and Garland, Linda L. and Nia, Emily and Betancourt, Robert and Krupinski, Elizabeth and Kuo, Phillip H.},
+  year = {2018},
+  journal = {Journal of Nuclear Medicine Technology},
+  volume = {46},
+  number = {3},
+  pages = {260--264},
+  doi = {10.2967/jnmt.117.204933}
+}
+
+@article{faber2005treatment,
+  title = {On the treatment of uncertainties and probabilities in engineering decision analysis},
+  author = {Faber, Michael Havbro},
+  year = {2005},
+  journal = {Journal of Offshore Mechanics and Arctic Engineering},
+  volume = {127},
+  number = {3},
+  pages = {243--248},
+  doi = {10.1115/1.1951776}
+}
+
+@article{field2007model,
+  title = {Model selection in applied science and engineering: A decision-theoretic approach},
+  author = {Field Jr, R. V. and Grigoriu, Mircea},
+  year = {2007},
+  journal = {Journal of Engineering Mechanics},
+  volume = {133},
+  number = {7},
+  pages = {780--791}
+}
+
+@book{Finney1971,
+  author = {Finney, D. J.},
+  title = {Probit Analysis},
+  edition = {3rd},
+  publisher = {Cambridge University Press},
+  year = {1971}
+}
+
+@article{Firth1993,
+  author = {Firth, David},
+  title = {Bias Reduction of Maximum Likelihood Estimates},
+  journal = {Biometrika},
+  year = {1993},
+  volume = {80},
+  number = {1},
+  pages = {27--38}
+}
+
+@article{flaus2021,
+  title = {FDG PET biomarkers for prediction of survival in metastatic melanoma prior to anti-PD1 immunotherapy},
+  author = {Flaus, A. and Habouzit, V. and De Leiris, N. and Vuillez, J. P. and Leccia, M. T. and Perrot, J. L. and Pr\'{e}vot, N. and Cachin, F.},
+  year = {2021},
+  journal = {Scientific Reports},
+  volume = {11},
+  number = {1},
+  pages = {18795},
+  doi = {10.1038/s41598-021-98310-3}
+}
+
+@article{ForemanMackey2013,
+  title = {emcee: The MCMC Hammer},
+  author = {Foreman-Mackey, Daniel and Hogg, David W. and Lang, Dustin and Goodman, Jonathan},
+  year = {2013},
+  journal = {Publications of the Astronomical Society of the Pacific},
+  volume = {125},
+  number = {925},
+  pages = {306},
+  doi = {10.1086/670067},
+}
+
+@article{gigerenzer2011bayesian,
+  title = {Bayesian thinking in medicine},
+  author = {Gigerenzer, Gerd and Gaissmaier, Wolfgang and Kurz-Milcke, Elisabeth and Schwartz, Lisa M. and Woloshin, Steven},
+  year = {2011},
+  journal = {BMJ},
+  volume = {342},
+  pages = {d2306},
+  doi = {10.1136/bmj.d2306}
+}
+
+@book{graybill1976,
+  title = {Theory and Application of the Linear Model},
+  author = {Graybill, F. A.},
+  year = {1976},
+  publisher = {Duxbury Press},
+  series = {Duxbury Classic Series},
+}
+
+@article{guo2010review,
+  title = {A review of quantitative risk--benefit methodologies for assessing drug safety and efficacy--report of the ISPOR risk--benefit management working group},
+  author = {Guo, Jeff J. and Pandey, Swapnil and Doyle, John and Bian, Boyang and Lis, Yvonne and Raisch, Dennis W.},
+  year = {2010},
+  journal = {Value in Health},
+  volume = {13},
+  number = {5},
+  pages = {657--666},
+  doi = {10.1111/j.1524-4733.2010.00725.x}
+}
+
+@article{Heinze2002,
+  author = {Heinze, Gerhard and Schemper, Michael},
+  title = {A Solution to the Problem of Separation in Logistic Regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419}
+}
+
+@article{hindie2020,
+  title = {Metastatic melanoma: can FDG-PET predict success of anti-PD-1 therapy and help determine when it can be discontinued?},
+  author = {Hindie, Elif},
+  year = {2020},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {47},
+  pages = {2227--2232},
+  doi = {10.1007/s00259-020-04826-7}
+}
+
+@article{horne2014pretreatment,
+  title = {Pretreatment SUV max predicts progression-free survival in early-stage non-small cell lung cancer treated with stereotactic body radiation therapy},
+  author = {Horne, Zachary D. and Clump, David A. and Vargo, John A. and Shah, Samir and Beriwal, Sushil and Burton, Steven A. and Quinn, Annette E. and Schuchert, Matthew J. and Landreneau, Rodney J. and Christie, Neil A. and others},
+  year = {2014},
+  journal = {Radiation Oncology},
+  volume = {9},
+  pages = {1--6},
+  doi = {10.1186/1748-717X-9-41}
+}
+
+@article{hribernik2020retrospective,
+  title = {Retrospective analysis of treatment-naive Slovenian patients with metastatic melanoma treated with pembrolizumab--real-world experience},
+  author = {Hribernik, Nezka and Boc, Marko and Ocvirk, Janja and Knez-Arbeiter, Jasna and Mesti, Tanja and Ignjatovic, Marija and Rebersek, Martina},
+  year = {2020},
+  journal = {Radiology and Oncology},
+  volume = {54},
+  number = {1},
+  pages = {119--127},
+  doi = {10.2478/raon-2020-0003}
+}
+
+@article{hribernik2024_raon,
+  title = {Role of quantitative imaging biomarkers in an early FDG-PET/CT for detection of immune-related adverse events in melanoma patients: a prospective study},
+  author = {Hribernik, Nezka and Strasek, Katja and Huff, Daniel T. and Studen, Andrej and Zevnik, Katarina and Skalic, Katja and Jeraj, Robert and Rebersek, Martina},
+  year = {2024},
+  journal = {Radiology and Oncology},
+  volume = {58},
+  number = {3},
+  pages = {335--347},
+  doi = {10.2478/raon-2024-0045},
+}
+
+@article{huang2009parametric,
+  title = {A parametric ROC model-based approach for evaluating the predictiveness of continuous markers in case--control studies},
+  author = {Huang, Ying and Pepe, Margaret S.},
+  year = {2009},
+  journal = {Biometrics},
+  volume = {65},
+  number = {4},
+  pages = {1133--1144}
+}
+
+@article{janes2008assessing,
+  title = {Assessing the value of risk predictions by using risk stratification tables},
+  author = {Janes, Holly and Pepe, Margaret S. and Gu, Wen},
+  year = {2008},
+  journal = {Annals of Internal Medicine},
+  volume = {149},
+  number = {10},
+  pages = {751--760}
+}
+
+@article{kass1995bayesfactors,
+  title = {Bayes Factors},
+  author = {Kass, Robert E. and Raftery, Adrian E.},
+  year = {1995},
+  journal = {Journal of the American Statistical Association},
+  volume = {90},
+  number = {430},
+  pages = {773--795}
+}
+
+@article{khoshgoftaar1999logistic,
+  title = {Logistic regression modeling of software quality},
+  author = {Khoshgoftaar, Taghi M. and Allen, Edward B.},
+  year = {1999},
+  journal = {International Journal of Reliability, Quality and Safety Engineering},
+  volume = {6},
+  number = {4},
+  pages = {303--317}
+}
+
+@article{kim2012development,
+  title = {Development of novel breast cancer recurrence prediction model using support vector machine},
+  author = {Kim, Woojae and Kim, Ku Sang and Lee, Jeong Eon and Noh, Dong-Young and Kim, Sung-Won and Jung, Yong Sik and Park, Man Young and Park, Rae Woong},
+  year = {2012},
+  journal = {Journal of Breast Cancer},
+  volume = {15},
+  number = {2},
+  pages = {230--238}
+}
+
+@article{kiureghian1989measures,
+  title = {Measures of structural safety under imperfect states of knowledge},
+  author = {Der Kiureghian, Armen},
+  year = {1989},
+  journal = {Journal of Structural Engineering},
+  volume = {115},
+  number = {5},
+  pages = {1119--1140}
+}
+
+@article{kudura2021,
+  title = {Prediction of Early Response to Immune Checkpoint Inhibition Using FDG-PET/CT in Melanoma Patients},
+  author = {Kudura, Ken and Dimitriou, Florentia and Basler, Lucas and F{\"o}rster, Robert and Mihic-Probst, Daniela and Kutzker, Tim and Dummer, Reinhard and Mangana, Joanna and Burger, Irene A. and Kreissl, Michael C.},
+  year = {2021},
+  journal = {Cancers},
+  volume = {13},
+  number = {15},
+  doi = {10.3390/cancers13153830}
+}
+
+@article{kurzinger2020structured,
+  title = {Structured benefit--risk evaluation for medicinal products: review of quantitative benefit--risk assessment findings in the literature},
+  author = {K{\"u}rzinger, Marie-Laure and Douarin, Ludivine and Uzun, Ievgeniia and El-Haddad, Chantal and Hurst, William and Juhaeri, Juhaeri and Tcherny-Lessenot, St{\'e}phanie},
+  year = {2020},
+  journal = {Therapeutic Advances in Drug Safety},
+  volume = {11},
+  pages = {2042098620976951},
+  doi = {10.1177/2042098620976951}
+}
+
+@article{lang2019clinical,
+  title = {Clinical significance of signs of autoimmune colitis in 18F-fluorodeoxyglucose positron emission tomography-computed tomography of 100 stage-IV melanoma patients},
+  author = {Lang, Nina and Dick, Julika and Slynko, Alla and Schulz, Carsten and Dimitrakopoulou-Strauss, Antonia and Sachpekidis, Christos and Enk, Alexander H. and Hassel, Jessica C.},
+  year = {2019},
+  journal = {Immunotherapy},
+  volume = {11},
+  number = {8},
+  pages = {667--676},
+  doi = {10.2217/imt-2018-0146}
+}
+
+@book{Lehmann2004,
+  title = {Elements of Large-Sample Theory},
+  author = {Lehmann, E. L.},
+  year = {2004},
+  publisher = {Springer},
+  series = {Springer Texts in Statistics},
+}
+
+@article{li2023challenges,
+  title = {Challenges and opportunities in molecular simulation of amorphous polymer materials},
+  author = {Li, Yang and Jiang, Bin},
+  year = {2023},
+  journal = {Chinese Journal of Chemical Physics},
+  volume = {36},
+  number = {6},
+  pages = {705--714}
+}
+
+@article{lindley2000philosophy,
+  title = {The philosophy of statistics},
+  author = {Lindley, Dennis V.},
+  year = {2000},
+  journal = {Journal of the Royal Statistical Society Series D: The Statistician},
+  volume = {49},
+  number = {3},
+  pages = {293--337}
+}
+
+@article{lineberry2016recommendations,
+  title = {Recommendations to improve adverse event reporting in clinical trial publications: a joint pharmaceutical industry/journal editor perspective},
+  author = {Lineberry, Neil and Berlin, Jesse A. and Mansi, Bernadette and Glasser, Susan and Berkwits, Michael and Klem, Christian and Bhattacharya, Ananya and Citrome, Leslie and Enck, Robert and Fletcher, John and others},
+  year = {2016},
+  journal = {BMJ},
+  volume = {355},
+  doi = {10.1136/bmj.i5078}
+}
+
+
+@book{RobertCasella2004,
+  author    = {Robert, Christian P. and Casella, George},
+  title     = {Monte Carlo Statistical Methods},
+  edition   = {2},
+  publisher = {Springer},
+  year      = {2004}
+}
+@misc{MathWorldSigmoid,
+  author = {Weisstein, Eric W.},
+  title = {Sigmoid Function},
+  howpublished = {Wolfram MathWorld},
+  year = {2002}
+}
+
+@book{McCullagh1989,
+  author = {McCullagh, Peter and Nelder, John A.},
+  title = {Generalized Linear Models},
+  edition = {2},
+  year = {1989},
+  publisher = {Chapman and Hall},
+}
+
+@book{McLachlan2000,
+  author = {McLachlan, Geoffrey J. and Peel, David},
+  title = {Finite Mixture Models},
+  publisher = {Wiley},
+  year = {2000}
+}
+
+@article{murff2003detecting,
+  title = {Detecting adverse events for patient safety research: a review of current methodologies},
+  author = {Murff, Harvey J. and Patel, Vimla L. and Hripcsak, George and Bates, David W.},
+  year = {2003},
+  journal = {Journal of Biomedical Informatics},
+  volume = {36},
+  number = {1-2},
+  pages = {131--143}
+}
+
+@article{murphy1973new,
+  title = {A new vector partition of the probability score},
+  author = {Murphy, Allan H.},
+  year = {1973},
+  journal = {Journal of Applied Meteorology and Climatology},
+  volume = {12},
+  number = {4},
+  pages = {595--600}
+}
+
+@book{Murphy2012,
+  author = {Murphy, Kevin P.},
+  title = {Machine Learning: A Probabilistic Perspective},
+  publisher = {MIT Press},
+  year = {2012}
+}
+
+@article{nakamura2010suvmax,
+  title = {The SUVmax of 18F-FDG PET correlates with histological grade in endometrial cancer},
+  author = {Nakamura, Keiichiro and Kodama, Junichi and Okumura, Yoshihiro and Hongo, Atsushi and Kanazawa, Susumu and Hiramatsu, Yuji},
+  year = {2010},
+  journal = {International Journal of Gynecologic Cancer},
+  volume = {20},
+  number = {1},
+  doi = {10.1111/IGC.0b013e3181c3a288}
+}
+
+@incollection{Newey1994,
+  title = {Large sample estimation and hypothesis testing},
+  author = {Newey, Whitney K. and McFadden, Daniel},
+  year = {1994},
+  booktitle = {Handbook of Econometrics},
+  publisher = {Elsevier},
+  volume = {4},
+  pages = {2111--2245},
+  doi = {10.1016/S1573-4412(05)80005-4},
+}
+
+@book{nguyen2020guide,
+  title = {A Guide on Data Analysis},
+  author = {Nguyen, Mike},
+  year = {2020},
+  publisher = {Bookdown},
+}
+
+@article{nick2007logistic,
+  title = {Logistic regression},
+  author = {Nick, Todd G. and Campbell, Kathleen M.},
+  year = {2007},
+  journal = {Topics in Biostatistics},
+  pages = {273--301}
+}
+
+@article{pate1996uncertainties,
+  title = {Uncertainties in risk analysis: Six levels of treatment},
+  author = {Pat{\'e}-Cornell, M. Elisabeth},
+  year = {1996},
+  journal = {Reliability Engineering \& System Safety},
+  volume = {54},
+  number = {2-3},
+  pages = {95--111}
+}
+
+@article{peisen2024os,
+  title = {Pre-treatment 18F-FDG-PET/CT parameters as biomarkers for progression free survival, best overall response and overall survival in metastatic melanoma patients undergoing first-line immunotherapy},
+  author = {Peisen, Felix and Gerken, Annika and Dahm, Isabel and Nikolau, Konstantin and Eigentler, Thomas and Amaral, Teresa and Moltz, Jan H. and Othman, Ahmed E. and Gatidis, Sergios},
+  year = {2024},
+  journal = {PLOS ONE},
+  volume = {19},
+  number = {1},
+  doi = {10.1371/journal.pone.0296253}
+}
+
+@book{pepe2003statistical,
+  title = {The Statistical Evaluation of Medical Tests for Classification and Prediction},
+  author = {Pepe, Margaret Sullivan},
+  year = {2003},
+  publisher = {Oxford University Press}
+}
+
+@article{pepe2010potential,
+  title = {The potential of genes and other markers to inform about risk},
+  author = {Pepe, Margaret S. and Gu, Jessie W. and Morris, Daryl E.},
+  year = {2010},
+  journal = {Cancer Epidemiology, Biomarkers \& Prevention},
+  volume = {19},
+  number = {3},
+  pages = {655--665}
+}
+
+@article{pham2023os,
+  title = {Chemotherapy in Cutaneous Melanoma: Is There Still a Role?},
+  author = {Pham, James P. and Joshua, Anthony M. and Silva, Ines P. and Dummer, Reinhard and Goldinger, Simone M.},
+  year = {2023},
+  journal = {Current Oncology Reports},
+  volume = {25},
+  number = {6},
+  pages = {609--621},
+  doi = {10.1007/s11912-023-01385-6}
+}
+
+@article{pillans2008clinical,
+  title = {Clinical perspectives in drug safety and adverse drug reactions},
+  author = {Pillans, Peter Ian},
+  year = {2008},
+  journal = {Expert Review of Clinical Pharmacology},
+  volume = {1},
+  number = {5},
+  pages = {695--705}
+}
+
+@book{Press1992,
+  title = {Numerical Recipes in C},
+  author = {Press, William H. and Teukolsky, Saul A. and Vetterling, William T. and Flannery, Brian P.},
+  year = {1992},
+  publisher = {Cambridge University Press},
+  edition = {2}
+}
+
+@article{richter2018review,
+  title = {A review of statistical and machine learning methods for modeling cancer risk using structured clinical data},
+  author = {Richter, Aaron N. and Khoshgoftaar, Taghi M.},
+  year = {2018},
+  journal = {Artificial Intelligence in Medicine},
+  volume = {90},
+  pages = {1--14}
+}
+
+@article{Ritz2015,
+  author = {Ritz, Christian and Streibig, Jens C. and Baty, Francesca and Gerhard, Daniel},
+  title = {Dose-Response Analysis Using R},
+  journal = {PLOS ONE},
+  year = {2015},
+  volume = {10},
+  number = {12},
+  pages = {e0146021},
+  doi = {10.1371/journal.pone.0146021}
+}
+
+@article{RitzStreibig2005,
+  title = {Bioassay Analysis using R},
+  author = {Ritz, Christian and Streibig, Jens C.},
+  year = {2005},
+  journal = {Journal of Statistical Software},
+  volume = {12},
+  number = {5},
+  pages = {1--22},
+  doi = {10.18637/jss.v012.i05}
+}
+
+@article{sachpekidis2023,
+  title = {Can physiologic colonic [18F]FDG uptake in PET/CT imaging predict response to immunotherapy in metastatic melanoma?},
+  author = {Sachpekidis, Christos and Stein-Thoeringer, Christoph K. and Kopp-Schneider, Annette and Weru, Vivienn and Dimitrakopoulou-Strauss, Antonia and Hassel, Jessica C.},
+  year = {2023},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {50},
+  number = {12},
+  pages = {3709--3722},
+  doi = {10.1007/s00259-023-06327-9}
+}
+
+@article{Salvatier2016,
+  title = {Probabilistic programming in Python using {PyMC}3},
+  author = {Salvatier, John and Wiecki, Thomas V. and Fonnesbeck, Christopher},
+  year = {2016},
+  journal = {PeerJ Computer Science},
+  volume = {2},
+  pages = {e55},
+  doi = {10.7717/peerj-cs.55},
+}
+
+@article{scarpelli2016we,
+  title = {WE-H-207A-03: The Universality of the Lognormal Behavior of [F-18] FLT PET SUV Measurements},
+  author = {Scarpelli, M. and Eickhoff, J. and Perlman, S. and Jeraj, R.},
+  year = {2016},
+  journal = {Medical Physics},
+  volume = {43},
+  number = {6Part43},
+  pages = {3845--3846}
+}
+
+@article{schober2021logistic,
+  title = {Logistic regression in medical research},
+  author = {Schober, Patrick and Vetter, Thomas R.},
+  year = {2021},
+  journal = {Anesthesia \& Analgesia},
+  volume = {132},
+  number = {2},
+  pages = {365--366},
+  doi = {10.1213/ANE.0000000000005247}
+}
+
+@article{Sebaugh2011,
+  title = {Guidelines for accurate EC50/IC50 estimation},
+  author = {Sebaugh, Jennifer L.},
+  year = {2011},
+  journal = {Pharmaceutical Statistics},
+  volume = {10},
+  number = {2},
+  pages = {128--134},
+  doi = {10.1002/pst.426}
+}
+
+@article{shipe2019developing,
+  title = {Developing prediction models for clinical use using logistic regression: an overview},
+  author = {Shipe, Maren E. and Deppen, Stephen A. and Farjah, Farhood and Grogan, Eric L.},
+  year = {2019},
+  journal = {Journal of Thoracic Disease},
+  volume = {11},
+  number = {Suppl 4},
+  pages = {S574},
+  doi = {10.21037/jtd.2019.01.25}
+}
+
+@book{steyerberg2009,
+  title = {Clinical Prediction Models: a practical approach to development, validation, and updating},
+  author = {Steyerberg, Ewout W.},
+  year = {2009},
+  publisher = {Springer}
+}
+
+@article{ten2020optimal,
+  title = {Optimal treatment plan adaptation using mid-treatment imaging biomarkers},
+  author = {Ten Eikelder, S. C. M. and Ferjan{\v{c}}i{\v{c}}, P. and Ajdari, A. and Bortfeld, T. and Den Hertog, D. and Jeraj, R.},
+  year = {2020},
+  journal = {Physics in Medicine \& Biology},
+  volume = {65},
+  number = {24},
+  pages = {245011},
+  doi = {10.1088/1361-6560/abc130}
+}
+
+@article{thie2000_diagnostic,
+  title = {The diagnostic utility of the lognormal behavior of PET standardized uptake values in tumors},
+  author = {Thie, Joseph A. and Hubner, Karl F. and Smith, Gary T.},
+  year = {2000},
+  journal = {Journal of Nuclear Medicine},
+  volume = {41},
+  number = {10},
+  pages = {1664--1672}
+}
+
+@article{toma2014quantitative,
+  title = {Quantitative techniques for financial risk assessment: a comparative approach using different risk measures and estimation methods},
+  author = {Toma, Aida and Dedu, Silvia},
+  year = {2014},
+  journal = {Procedia Economics and Finance},
+  volume = {8},
+  pages = {712--719}
+}
+
+@article{valentinuzzi2020f,
+  title = {[F] FDG PET immunotherapy radiomics signature (iRADIOMICS) predicts response of non-small-cell lung cancer patients treated with pembrolizumab},
+  author = {Valentinuzzi, Damijan and Vrankar, Martina and Boc, Nina and Ahac, Valentina and Zupancic, Ziga and Unk, Mojca and Skalic, Katja and Zagar, Ivana and Studen, Andrej and Simoncic, Urban and others},
+  year = {2020},
+  journal = {Radiology and Oncology},
+  volume = {54},
+  number = {3},
+  pages = {285--294}
+}
+
+@article{weber2013safety,
+  title = {Safety, efficacy, and biomarkers of nivolumab with vaccine in ipilimumab-refractory or-naive melanoma},
+  author = {Weber, Jeffrey S. and Kudchadkar, Ragini Reiney and Yu, Bin and Gallenstein, Donna and Horak, Christine E. and Inzunza, H. David and Zhao, Xiuhua and Martinez, Alberto J. and Wang, Wenshi and Gibney, Geoffrey and others},
+  year = {2013},
+  journal = {Journal of Clinical Oncology},
+  volume = {31},
+  number = {34},
+  pages = {4311},
+  doi = {10.1200/JCO.2013.51.4802}
+}
+
+@book{wilks2011statistical,
+  title = {Statistical Methods in the Atmospheric Sciences},
+  author = {Wilks, Daniel S.},
+  year = {2011},
+  edition = {3},
+  publisher = {Academic Press},
+}
+
+@article{yates1982external,
+  title = {External correspondence: Decompositions of the mean probability score},
+  author = {Yates, J. Frank},
+  year = {1982},
+  journal = {Organizational Behavior and Human Performance},
+  volume = {30},
+  number = {1},
+  pages = {132--156}
+}
+
+@article{yu2016development,
+  title = {Development and validation of a prediction model to estimate individual risk of pancreatic cancer},
+  author = {Yu, Ami and Woo, Sang Myung and Joo, Jungnam and Yang, Hye-Ryung and Lee, Woo Jin and Park, Sang-Jae and Nam, Byung-Ho},
+  year = {2016},
+  journal = {PLOS ONE},
+  volume = {11},
+  number = {1},
+  pages = {e0146473}
+}
+
+@article{zhang2021machine,
+  title = {Machine learning in polymer informatics},
+  author = {Zhang, Yongjin and Wang, Hengbin and Luo, Yingkai and Wang, Chongmin and Han, Jinkyu and Lin, Taoran and others},
+  year = {2021},
+  journal = {InfoMat},
+  volume = {3},
+  number = {9},
+  pages = {943--965}
+}
+
+@book{zhou2014statistical,
+  title = {Statistical Methods in Diagnostic Medicine},
+  author = {Zhou, Xiao-Hua and Obuchowski, Nancy A. and McClish, Donna K.},
+  year = {2014},
+  publisher = {John Wiley \& Sons}
+}
+
+@article{zou2023review,
+  title = {A review of uncertainty estimation and its application in medical imaging},
+  author = {Zou, Ke and Chen, Zhihao and Yuan, Xuedong and Shen, Xiaojing and Wang, Meng and Fu, Huazhu},
+  year = {2023},
+  journal = {Meta-Radiology},
+  publisher = {Elsevier},
+  pages = {100003}
+}
+
+@article{Karlsen2024,
+  author = {Karlsen, Rikke and J{\o}rgensen, Jakob J. and Hjorthaug, Vibeke and others},
+  title = {Is 18F-FDG PET/CT an Optimal Imaging Modality for Detecting Immune Checkpoint Inhibitor--Pneumonitis?},
+  journal = {Cancers},
+  volume = {16},
+  number = {11},
+  pages = {1990},
+  year = {2024},
+  doi = {10.3390/cancers16111990}
+}
+
+@article{CancerImaging2024,
+  author = {Iwasaki, Yuki and Yanagitani, Noriko and Nomura, Hiroshi and others},
+  title = {18F-FDG PET/CT Uptake by Noncancerous Lung as a Predictor of ICI-Induced Interstitial Lung Disease},
+  journal = {Cancer Imaging},
+  year = {2024},
+  volume = {25},
+  pages = {37},
+  doi = {10.1186/s40644-024-00672-9}
+}
+
+@article{Rahman2019,
+  author = {Rahman, Rashidul Islam and Takahashi, Takuya and Oishi, Koji and others},
+  title = {Metabolic Activity on 18F-FDG PET/CT in Immune Checkpoint Inhibitor-Associated Pneumonitis: Correlation with Clinical Severity},
+  journal = {Journal of Nuclear Medicine},
+  volume = {60},
+  number = {12},
+  pages = {1708--1714},
+  year = {2019},
+  doi = {10.2967/jnumed.118.223925}
+}
+
+@article{PubMed39227217,
+  author = {Iwasaki, Yuki and Yanagitani, Noriko and Nomura, Hiroshi and others},
+  title = {18F-FDG-PET/CT Uptake by Noncancerous Lung as a Predictor of ICI-ILD Development},
+  journal = {Frontiers in Oncology},
+  volume = {15},
+  pages = {39227217},
+  year = {2025},
+  doi = {10.3389/fonc.2025.39227217}
+}
+@article{Yamazaki2025,
+  author = {Yamazaki, M. and Watanabe, S. and Tominaga, M. and Yagi, T. and Goto, Y. and Yanagimura, N. and Arita, M. and Ohtsubo, A. and Tanaka, T. and Nozaki, K. and Saida, Y. and Kondo, R. and Kikuchi, T. and Ishikawa, H.},
+  title = {18F‐FDG-PET/CT uptake by noncancerous lung as a predictor of interstitial lung disease induced by immune checkpoint inhibitors},
+  journal = {Academic Radiology},
+  year = {2025},
+  volume = {32},
+  pages = {1026--1035},
+  doi = {10.1016/j.acra.2024.08.043}
+}
+
+@article{Gideonse2024,
+  author = {Gideonse, B. M. and Birkeland, M. and Vilstrup, M. H. and Grupe, P. and Naghavi-Behzad, M. and Ruhlmann, C. H. and Gerke, O. and Hildebrandt, M. G.},
+  title = {Organ‐specific accuracy of [18F]FDG-PET/CT in identifying immune‐related adverse events in patients with high‐risk melanoma treated with adjuvant immune checkpoint inhibitor},
+  journal = {Japanese Journal of Radiology},
+  year = {2024},
+  volume = {42},
+  pages = {753--764},
+  doi = {10.1007/s11604-024-01554-y}
+}
+
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{DerKiureghianDitlevsen2009,
+  author = {Der Kiureghian, Armen and Ditlevsen, Ove},
+  title = {Aleatory or epistemic? Does it matter?},
+  journal = {Structural Safety},
+  year = {2009},
+  volume = {31},
+  number = {2},
+  pages = {105--112},
+  doi = {10.1016/j.strusafe.2008.06.020}
+}
+
+@inproceedings{KendallGal2017,
+  author = {Kendall, Alex and Gal, Yarin},
+  title = {What Uncertainties Do We Need in {Bayesian} Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  year = {2017},
+  eprint = {1703.04977},
+  archivePrefix = {arXiv}
+}
+
+@misc{Nguyen2020Guide,
+  author = {Nguyen, Thanh-Tung and others},
+  title = {A Guide to Data Transformation},
+  howpublished = {arXiv preprint},
+  year = {2020},
+}
+
+@article{BoxCox1964,
+  author = {Box, G. E. P. and Cox, D. R.},
+  title = {An Analysis of Transformations},
+  journal = {Journal of the Royal Statistical Society: Series B (Methodological)},
+  year = {1964},
+  volume = {26},
+  number = {2},
+  pages = {211--252}
+}
+
+@article{KingZeng2001,
+  author = {King, Gary and Zeng, Langche},
+  title = {Logistic Regression in Rare Events Data},
+  journal = {Political Analysis},
+  year = {2001},
+  volume = {9},
+  number = {2},
+  pages = {137--163},
+  doi = {10.1093/oxfordjournals.pan.a004868}
+}
+
+@article{HeinzeSchemper2002,
+  author = {Heinze, Georg and Schemper, Michael},
+  title = {A solution to the problem of separation in logistic regression},
+  journal = {Statistics in Medicine},
+  year = {2002},
+  volume = {21},
+  number = {16},
+  pages = {2409--2419},
+  doi = {10.1002/sim.1047}
+}
+
+@article{Ghosh2018,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@article{Greenland2016,
+  author = {Greenland, S.},
+  title = {Doubly robust estimation of causal effects},
+  journal = {Epidemiology},
+  year = {2016},
+  volume = {27},
+  number = {1},
+  pages = {1--10},
+  doi = {10.1097/EDE.0000000000000357}
+}
+
+@article{GhoshEtAl2018_dup1,
+  author = {Ghosh, Moumita and others},
+  title = {Weak identifiability in Bayesian models: issues and solutions},
+  journal = {Bayesian Analysis},
+  year = {2018},
+  volume = {13},
+  number = {2},
+  pages = {345--374},
+  doi = {10.1214/17-BA1085}
+}
+
+@book{Steyerberg2019_dup1,
+  author = {Steyerberg, Ewout W.},
+  title = {Clinical Prediction Models: A Practical Approach to Development, Validation, and Updating},
+  year = {2019},
+  publisher = {Springer},
+}
+
+@book{Harrell2015,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Harrell2015_dup1,
+  author = {Harrell, Frank E.},
+  title = {Regression Modeling Strategies: With Applications to Linear Models, Logistic and Ordinal Regression, and Survival Analysis},
+  year = {2015},
+  publisher = {Springer},
+}
+
+@book{Carroll2006_dup1,
+  author = {Carroll, Raymond J. and Ruppert, David and Stefanski, Leonard A.},
+  title = {Measurement Error in Nonlinear Models: A Modern Perspective},
+  year = {2006},
+  publisher = {CRC Press},
+}
+
+@article{Obuchowski2015,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{Obuchowski2015_dup1,
+  author = {Obuchowski, Nancy A. and others},
+  title = {Statistical Methods in Diagnostic Medicine},
+  journal = {Wiley},
+  year = {2015},
+  volume = {2},
+  pages = {223--244},
+  doi = {10.1002/9781118647192}
+}
+
+@article{Efron1979,
+  author = {Efron, Bradley},
+  title = {Bootstrap methods: another look at the jackknife},
+  journal = {The Annals of Statistics},
+  year = {1979},
+  volume = {7},
+  number = {1},
+  pages = {1--26},
+  doi = {10.1214/aos/1176344552}
+}
+
+@book{Gelman2017,
+  author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.},
+  title = {Bayesian Data Analysis},
+  edition = {3},
+  year = {2017},
+  publisher = {CRC Press},
+}
+
+@incollection{McFadden1974,
+  author = {McFadden, Daniel},
+  title = {Conditional Logit Analysis of Qualitative Choice Behavior},
+  booktitle = {Frontiers in Econometrics},
+  editor = {Zarembka, Paul},
+  pages = {105--142},
+  year = {1974},
+  publisher = {Academic Press},
+}
+
+@techreport{NISTTN2119,
+  author = {Lu, Zhan-Qian John},
+  title = {Estimating Instrument Performance: with Confidence Intervals and Confidence Bounds},
+  institution = {National Institute of Standards and Technology (NIST)},
+  type = {NIST Technical Note},
+  number = {2119},
+  year = {2020},
+  month = sep,
+  doi = {10.6028/NIST.TN.2119}
+}
+
+@article{Byrd1995,
+  title={A limited memory algorithm for bound constrained optimization},
+  author={Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge and Zhu, Ciyou},
+  journal={SIAM Journal on Scientific Computing},
+  volume={16},
+  number={5},
+  pages={1190--1208},
+  year={1995},
+  publisher={SIAM}
+}
+
+@article{Zhu1997,
+  author = {Zhu, Ciyou and Byrd, Richard H. and Lu, Peihuang and Nocedal, Jorge},
+  title = {Algorithm 778: L-BFGS-B: Fortran Subroutines for Large-Scale Bound-Constrained Optimization},
+  journal = {ACM Transactions on Mathematical Software},
+  year = {1997},
+  volume = {23},
+  number = {4},
+  pages = {550--560},
+  doi = {10.1145/279232.279236}
+}
+
+@book{Belsley2004,
+  title={Regression Diagnostics: Identifying Influential Data and Sources of Collinearity},
+  author={Belsley, D. A. and Kuh, E. and Welsch, R. E.},
+  year={2004},
+  publisher={Wiley-Interscience}
+}
+
+@article{gifford2016,
+  title={Quantification of Uncertainty in PET Imaging},
+  author={Gifford, H. C. and others},
+  journal={Journal of Nuclear Medicine},
+  volume={57},
+  number={9},
+  pages={1339-1347},
+  year={2016},
+}
+
+@book{huber1981,
+  title={Robust Statistics},
+  author={Huber, P. J.},
+  year={1981},
+  publisher={Wiley}
+}
+
+@article{nguyen2015,
+  title={Sensitivity Analysis in Cancer Risk Prediction Models},
+  author={Nguyen, M. A. and others},
+  journal={Journal of Clinical Oncology},
+  volume={33},
+  number={20},
+  pages={2370-2375},
+  year={2015},
+}
+
+@book{soize2017,
+  title={Uncertainty Quantification for Computational Mechanics},
+  author={Soize, C.},
+  year={2017},
+  publisher={Springer}
+}
+
+@article{wang2011,
+  title={Sensitivity Analysis in Clinical Predictive Models},
+  author={Wang, L. and others},
+  journal={Statistical Methods in Medical Research},
+  volume={20},
+  number={5},
+  pages={405-419},
+  year={2011},
+}
+
+@article{wolchok2017,
+  title={Immune Checkpoint Inhibitors in Cancer Therapy},
+  author={Wolchok, J. D. and others},
+  journal={Lancet},
+  volume={391},
+  number={10122},
+  pages={345-355},
+  year={2017},
+}
+
+@article{Buvat2007,
+  title={Partial-volume effect in PET tumor imaging},
+  author={Soret, Marine and Bacharach, Stephen L and Buvat, Ir{\`e}ne},
+  journal={Journal of Nuclear Medicine},
+  volume={48},
+  number={6},
+  pages={932--945},
+  year={2007},
+  publisher={Society of Nuclear Medicine},
+  doi={10.2967/jnumed.106.035774},
+  pmid={17504879}
+}
+
+@book{Hastie2009Elements,
+  author = {Hastie, Trevor and Tibshirani, Robert and Friedman, Jerome},
+  title = {The Elements of Statistical Learning: Data Mining, Inference, and Prediction},
+  year = {2009},
+  publisher = {Springer},
+  edition = {2nd},
+}
+
+@book{Bayes1763,
+  author = {Thomas Bayes},
+  title = {An Essay towards solving a Problem in the Doctrine of Chances},
+  publisher = {Royal Society},
+  year = {1763},
+}
+
+@book{Saltelli2004,
+  author = {Andrea Saltelli and Stefano Tarantola and Francesca Campolongo and Marco Ratto},
+  title = {Sensitivity Analysis in Practice: A Guide to Assessing Scientific Models},
+  publisher = {Wiley},
+  year = {2004},
+}
+
+@book{Saltelli2019handbook,
+  editor = {Andrea Saltelli and Paola B. Stark},
+  title = {Handbook of Sensitivity Analysis},
+  publisher = {Wiley},
+  year = {2019},
+}
+
+@book{Saltelli2000,
+  author = {Andrea Saltelli and Karen Chan and E. M. Scott},
+  title = {Sensitivity Analysis},
+  publisher = {Wiley},
+  year = {2000},
+}
+
+@book{Wooldridge2019,
+  author = {Jeffrey M. Wooldridge},
+  title = {Introductory Econometrics: A Modern Approach},
+  edition = {7th},
+  publisher = {Cengage Learning},
+  year = {2019},
+}
+
+@book{JohnsonKotz1995,
+  author = {Norman L. Johnson and Samuel Kotz and N. Balakrishnan},
+  title = {Continuous Univariate Distributions, Volume 2},
+  edition = {2nd},
+  publisher = {Wiley},
+  year = {1995}
+}
+
+@article{Ritz2015DoseResponse,
+  author = {Christian Ritz and Frederik Baty and Jens C. Streibig and Daniel Gerhard},
+  title = {Dose-Response Analysis Using R},
+  journal = {PLoS ONE},
+  year = {2015},
+  volume = {10},
+  number = {12},
+  pages = {e0146021}
+}
+
+@article{Febrianti2021,
+  author = {Risma Febrianti and Yekti Widyaningsih and Saskya Soemartojo},
+  title = {The parameter estimation of logistic regression with maximum likelihood method and score function modification},
+  journal = {Journal of Physics: Conference Series},
+  volume = {1725},
+  number = {1},
+  pages = {012014},
+  year = {2021},
+  doi = {10.1088/1742-6596/1725/1/012014}
+}
+
+@article{Cook1977,
+  author    = {Cook, R. Dennis},
+  title     = {Detection of Influential Observation in Linear Regression},
+  journal   = {Technometrics},
+  volume    = {19},
+  number    = {1},
+  pages     = {15--18},
+  year      = {1977},
+  publisher = {Taylor \& Francis},
+  doi       = {10.1080/00401706.1977.10489493}
+}
+
+@inproceedings{Ayhan2018,
+  author = {Ayhan, Murat S. and Berens, Philipp},
+  title = {Test-Time Data Augmentation for Estimation of Heteroscedastic Aleatoric Uncertainty in Deep Neural Networks},
+  booktitle = {Proceedings of the Medical Imaging with Deep Learning (MIDL)},
+  year = {2018}
+}
+
+@article{Akaike1974,
+  author = {Akaike, Hirotugu},
+  title = {A new look at the statistical model identification},
+  journal = {IEEE Transactions on Automatic Control},
+  volume = {19},
+  number = {6},
+  pages = {716--723},
+  year = {1974}
+}
+
+@article{Schwarz1978,
+  author = {Schwarz, Gideon},
+  title = {Estimating the dimension of a model},
+  journal = {The Annals of Statistics},
+  volume = {6},
+  number = {2},
+  pages = {461--464},
+  year = {1978}
+}
+
+@article{Greenland1989,
+  author = {Greenland, Sander},
+  title = {Modeling and variable selection in epidemiologic analysis},
+  journal = {American Journal of Public Health},
+  year = {1989},
+  volume = {79},
+  pages = {340--349}
+}
+
+@article{Greenland1999,
+  author = {Greenland, Sander},
+  title = {Relation of Probability of Causation to Relative Risk and Doubling Dose: A Methodologic Error that Has Become a Social Problem},
+  journal = {Annual Review of Public Health},
+  volume = {20},
+  number = {1},
+  pages = {125--143},
+  year = {1999},
+  doi = {10.1146/annurev.publhealth.20.1.125}
+}
+
+@article{Hribernik2022,
+  author = {Hribernik, N. and Huff, D. T. and Studen, A. and others},
+  title = {Quantitative imaging biomarkers of immune-related adverse events in immune-checkpoint blockade-treated metastatic melanoma patients: a pilot study},
+  journal = {European Journal of Nuclear Medicine and Molecular Imaging},
+  volume = {49},
+  pages = {1857--1869},
+  year = {2022},
+  doi = {10.1007/s00259-021-05650-3}
+}
+
+@article{Robert2021,
+  author = {Robert, Caroline and Hwu, Wen-Jen and Hamid, Omid and others},
+  title = {Long-term safety of pembrolizumab monotherapy and relationship with clinical outcome: A landmark analysis in patients with advanced melanoma},
+  journal = {European Journal of Cancer},
+  volume = {144},
+  pages = {182--191},
+  year = {2021},
+  issn = {0959-8049},
+  doi = {10.1016/j.ejca.2020.11.010}
+}
+
+@article{Robert2019,
+  author = {Robert, Caroline and Ribas, Antoni and Schachter, Jacob and others},
+  title = {Pembrolizumab versus ipilimumab in advanced melanoma ({KEYNOTE-006}): post-hoc 5-year results from an open-label, multicentre, randomised, controlled, phase 3 study},
+  journal = {The Lancet Oncology},
+  volume = {20},
+  number = {9},
+  pages = {1239--1251},
+  year = {2019},
+  issn = {1470-2045},
+  doi = {10.1016/S1470-2045(19)30388-2}
+}
+
+@article{Larkin2018,
+  author = {Larkin, James and others},
+  title = {Overall Survival in Patients With Advanced Melanoma Who Received Nivolumab Versus Investigator's Choice Chemotherapy in {CheckMate} 037: A Randomized, Controlled, Open-Label Phase III Trial},
+  journal = {Journal of Clinical Oncology},
+  volume = {36},
+  pages = {383--390},
+  year = {2018},
+  doi = {10.1200/JCO.2016.71.8023}
+}
+
+@article{Wolchok2022,
+  author = {Wolchok, Jedd D. and others},
+  title = {Long-Term Outcomes With Nivolumab Plus Ipilimumab or Nivolumab Alone Versus Ipilimumab in Patients With Advanced Melanoma},
+  journal = {Journal of Clinical Oncology},
+  volume = {40},
+  pages = {127--137},
+  year = {2022},
+  doi = {10.1200/JCO.21.02229}
+}
+
+@article{Hodi2016,
+  author = {Hodi, F. Stephen and others},
+  title = {Combined nivolumab and ipilimumab versus ipilimumab alone in patients with advanced melanoma: 2-year overall survival outcomes in a multicentre, randomised, controlled, phase 2 trial},
+  journal = {The Lancet Oncology},
+  volume = {17},
+  number = {11},
+  pages = {1558--1568},
+  year = {2016},
+  issn = {1470-2045},
+  doi = {10.1016/S1470-2045(16)30366-7}
+}
+
+@book{Johnson1995,
+  title = {Continuous Univariate Distributions, Vol. 2},
+  author = {Johnson, Norman L. and Kotz, Samuel and Balakrishnan, Narayanaswamy},
+  year = {1995},
+  publisher = {John Wiley \& Sons, Inc.},
+  series = {Wiley Series in Probability and Statistics},
+  edition = {2}
+}
+
+@article{Kamnitsas2017DeepMedic,
+  author  = {Kamnitsas, Konstantinos and Ledig, Christian and Newcombe, Virginia F. J. and Simpson, Joanna P. and Kane, Andrew D. and Menon, David K. and Rueckert, Daniel and Glocker, Ben},
+  title   = {Efficient multi-scale 3D CNN with fully connected CRF for accurate brain lesion segmentation},
+  journal = {Medical Image Analysis},
+  volume  = {36},
+  pages   = {61--78},
+  year    = {2017}
+}
+
+@inproceedings{KendallGal2017,
+  author    = {Alex Kendall and Yarin Gal},
+  title     = {What Uncertainties Do We Need in Bayesian Deep Learning for Computer Vision?},
+  booktitle = {Advances in Neural Information Processing Systems},
+  volume    = {30},
+  year      = {2017}
+}
+
+@article{Riley2025,
+  author  = {Riley, Richard D. and Collins, Gary S. and Kirton, Laura and Snell, Kym I. E. and Ensor, Joie and Whittle, Rebecca and Dhiman, Paula and van Smeden, Maarten and Liu, Xiaoxuan and Alderman, Joseph and Nirantharakumar, Krishnarajah and Manson-Whitton, Jessica and Westwood, Alex J. and Cazier, Jean-Baptiste and Moons, Karel G. M. and Martin, Glen P. and Sperrin, Matthew and Denniston, Alastair K. and Harrell, Frank E. and Archer, Lucy},
+  title   = {Uncertainty of risk estimates from clinical prediction models: rationale, challenges, and approaches},
+  journal = {BMJ},
+  year    = {2025},
+  volume  = {388},
+  pages   = {e080749},
+  doi     = {10.1136/bmj-2024-080749}
+}
+
+@article{Begoli2019,
+  author  = {Begoli, Edmon and Bhattacharya, Tanmoy and Kusnezov, Dimitri},
+  title   = {The need for uncertainty quantification in machine-assisted medical decision making},
+  journal = {Nature Machine Intelligence},
+  year    = {2019},
+  volume  = {1},
+  number  = {1},
+  pages   = {20--23},
+  doi     = {10.1038/s42256-018-0004-1}
+}
+
+@article{Eck2016,
+  author  = {Eck, Vinzenz G. and Donders, Wouter P. and Sturdy, Jacob and Feinberg, Jonathan and Delhaas, Tammo and Hellevik, Leif R. and Huberts, Wouter},
+  title   = {A guide to uncertainty quantification and sensitivity analysis for cardiovascular applications},
+  journal = {International Journal for Numerical Methods in Biomedical Engineering},
+  year    = {2016},
+  volume  = {32},
+  number  = {8},
+  doi     = {10.1002/cnm.2755}
+}
+
+@article{Tomasev2021,
+  author  = {Toma{\v{s}}ev, Nenad and Harris, Natalie and Baur, Sebastien and others},
+  title   = {Use of deep learning to develop continuous-risk models for adverse event prediction from electronic health records},
+  journal = {Nature Protocols},
+  year    = {2021},
+  volume  = {16},
+  pages   = {2765--2787},
+  doi     = {10.1038/s41596-021-00513-5}
+}
+
+@article{Lambert2024,
+  author  = {Lambert, Benjamin and Forbes, Florence and Doyle, Senan and Dehaene, Harmonie and Dojat, Michel},
+  title   = {Trustworthy clinical AI solutions: A unified review of uncertainty quantification in deep learning models for medical image analysis},
+  journal = {Artificial Intelligence in Medicine},
+  year    = {2024},
+  volume  = {150},
+  pages   = {102830},
+  doi     = {10.1016/j.artmed.2024.102830}
+}
+
+@article{BorgonovoPlischke2016,
+  author  = {Borgonovo, Emanuele and Plischke, Elmar},
+  title   = {Sensitivity analysis: A review of recent advances},
+  journal = {European Journal of Operational Research},
+  year    = {2016},
+  volume  = {248},
+  number  = {3},
+  pages   = {869--887},
+  doi     = {10.1016/j.ejor.2015.06.032}
+}
+
+@article{Riley2020,
+  author  = {Riley, Richard D. and Ensor, Joie and Snell, Kym I. E. and Harrell, Frank E. and Martin, Glen P. and Reitsma, Johannes B. and Moons, Karel G. M. and Collins, Gary and van Smeden, Maarten},
+  title   = {Calculating the sample size required for developing a clinical prediction model},
+  journal = {BMJ},
+  year    = {2020},
+  volume  = {368},
+  pages   = {m441},
+  doi     = {10.1136/bmj.m441}
+}
+
+@article{Dumbgen2024,
+  author  = {D{\"u}mbgen, Lutz},
+  title   = {Shape-Constrained Statistical Inference},
+  journal = {Annual Review of Statistics and Its Application},
+  year    = {2024},
+  volume  = {11},
+  pages   = {373--391},
+  doi     = {10.1146/annurev-statistics-033021-014937}
+}

+ 146 - 0
manuscript/defs_iop.tex

@@ -0,0 +1,146 @@
+% -------------------------------------------------------------------------
+% Encoding, fonts, layout
+% -------------------------------------------------------------------------
+\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
+\usepackage{lmodern}
+\usepackage{microtype}
+%\usepackage{float}
+\usepackage{booktabs}
+
+% ---------------------------
+% Better float behavior
+% ---------------------------
+%\setcounter{topnumber}{5}
+%\setcounter{bottomnumber}{5}
+%\setcounter{totalnumber}{10}
+%\renewcommand{\topfraction}{0.9}
+%\renewcommand{\bottomfraction}{0.85}
+%\renewcommand{\textfraction}{0.08}
+%\renewcommand{\floatpagefraction}{0.8}
+
+% -------------------------------------------------------------------------
+% Math
+% -------------------------------------------------------------------------
+\usepackage{amsmath,amssymb,bm,mathtools}
+
+\newcommand{\R}{\mathbb{R}}
+\DeclareMathOperator{\logit}{logit}
+
+% -------------------------------------------------------------------------
+% Numbers
+% -------------------------------------------------------------------------
+\usepackage{siunitx}
+\sisetup{
+  detect-all,
+  round-mode      = places,
+  round-precision = 3,
+  round-pad       = true
+}
+
+% -------------------------------------------------------------------------
+% Graphics
+% -------------------------------------------------------------------------
+\usepackage{graphicx}
+\usepackage[space]{grffile}
+\graphicspath{{./}{./figs/}{./Figures/}}
+
+% Figure width macros
+\newcommand{\figWfull}{\linewidth}
+\newcommand{\figWmed}{0.85\linewidth}
+\newcommand{\figWsmall}{0.70\linewidth}
+\newcommand{\figWwide}{0.90\linewidth}
+
+% -------------------------------------------------------------------------
+% Tables
+% -------------------------------------------------------------------------
+\usepackage[table]{xcolor}
+\usepackage{array,booktabs,adjustbox,tabularx,makecell,colortbl,multirow}
+%\setlength{\tabcolsep}{4pt}
+
+\definecolor{headerblue}{RGB}{52,73,94}
+\definecolor{lightgray}{RGB}{242,242,242}
+\rowcolors{2}{lightgray!25}{white}
+
+% -------------------------------------------------------------------------
+% Comments
+% -------------------------------------------------------------------------
+\newcommand{\mycomment}[1]{\textcolor{red}{{#1}}}
+
+% -------------------------------------------------------------------------
+% Captions/subfigures / lists/floats
+% -------------------------------------------------------------------------
+%\usepackage{caption}
+%\usepackage{subcaption}
+\usepackage{enumitem}
+\usepackage{placeins}
+
+%\captionsetup[figure]{font=small,labelfont=bf}
+%\captionsetup[table]{font=small,labelfont=bf}
+
+% -------------------------------------------------------------------------
+% Bibliography
+% -------------------------------------------------------------------------
+\usepackage[authoryear, round]{natbib} 
+
+% -------------------------------------------------------------------------
+% Custom macros
+% -------------------------------------------------------------------------
+\newcommand{\NCgrp}{\mathrm{NC}}
+\newcommand{\AEgrp}{\mathrm{AE}}
+\newcommand{\SUV}{\mathrm{SUV}}
+\newcommand{\sigmoid}{\sigma}
+\newcommand{\CB}{\mathrm{CB}}
+
+\DeclareMathOperator*{\argmax}{arg\,max} 
+\DeclareMathOperator*{\argmin}{arg\,min}
+\DeclareMathOperator{\softplus}{softplus}
+\DeclareMathOperator{\expit}{expit}
+\DeclareMathOperator{\Cov}{Cov}
+\DeclareMathOperator{\Var}{Var}
+\DeclareMathOperator{\Expect}{E}
+
+\newcommand{\Prob}{P}
+
+\newcommand{\bTheta}{\boldsymbol{\Theta}}
+\newcommand{\balpha}{\boldsymbol{\alpha}}
+\newcommand{\bbeta}{\boldsymbol{\beta}}
+\newcommand{\bphi}{\boldsymbol{\phi}}
+\newcommand{\bSigma}{\boldsymbol{\Sigma}}
+
+\newcommand{\comment}[2]{{\bfseries\color{red} #1: #2}}
+\newcommand{\commentX}[3]{{\bfseries\color{#1} #2: #3}}
+
+
+% -------------------------------------------------------------------------
+% IOP related macros
+% -------------------------------------------------------------------------
+\newcommand{\iopheader}[4]{%
+    % #1 = Journal Name, #2 = Received Date, #3 = Revised Date, #4 = Article Type
+    {\vspace*{-8mm}\noindent \Large \sf #1}
+
+    \vspace*{8mm} \noindent\reversemarginpar
+    \marginpar{\vspace{-3mm} {\color{gray}\hrule} \ \\ Crossmark\\ {\color{gray}\hrule} \ \\ 
+        \tiny {\sf RECEIVED} {\small \\ #2}\\ \\ 
+        {\sf REVISED} {\small \\ #3}
+    }
+    {\scriptsize \sf{\bfseries \MakeUppercase{#4}}}
+}
+
+\makeatletter
+\newcommand{\justifying}{%
+  \rightskip\z@skip
+  \leftskip\z@skip
+  \spaceskip\z@
+  \xspaceskip\z@
+  \parindent 1.5em % Or your preferred indentation
+}
+\makeatother
+
+\justifying
+
+\renewenvironment{abstract}{%
+      \vspace{16pt plus3pt minus3pt}
+      {\color{gray}\hrule} \ \\
+      \noindent \fontsize{11}{12}\selectfont {\bfseries Abstract}\\
+	  \rm\ignorespaces }{\vspace{3mm} {\color{gray}\hrule}}

+ 186 - 0
manuscript/iopjournal.cls

@@ -0,0 +1,186 @@
+% 
+% This is file `iopjournal.cls'
+%
+% This file is distributed in the hope that it will be useful, 
+% but WITHOUT ANY WARRANTY; without even the implied warranty of 
+% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
+%
+% IOP Publishing Ltd
+%
+% email: customerservices@ioppublishing.org
+%
+% Copyright 2025 IOP Publishing Ltd.
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3c
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+%   http://www.latex-project.org/lppl.txt
+% and version 1.3c or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% 
+% This work has the LPPL maintenance status `maintained'.
+% 
+% The Current Maintainer of this work is IOP Publishing Ltd.
+%
+
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesClass{iopjournal}[2024/01/31 IOP Publishing journal article LaTeX template]
+
+%Packages that the class file relies on
+
+\RequirePackage{fancyhdr}
+
+\RequirePackage{xcolor}
+
+\RequirePackage{graphicx}
+
+
+%Options for the class file
+
+\newif\if@anonymous
+\@anonymousfalse
+\DeclareOption{anonymous}{\@anonymoustrue}
+
+%\DeclareOption{...}{...}
+
+%Pass any undefined options on to the article class
+\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
+
+%Execute the options
+\ProcessOptions\relax
+
+%Load the article class as the basis for the formatting
+\LoadClass[a4paper]{article}
+
+\RequirePackage[colorlinks=true, allcolors=blue]{hyperref}
+
+%Define the text area
+\setlength\voffset{-25mm}
+%\setlength\hoffset{-10mm}
+%\setlength\topmargin{10mm}
+\setlength\headsep{10mm}
+\setlength\footskip{12mm}
+\setlength\marginparwidth{25mm}
+\setlength\marginparsep{2mm}
+\setlength\textwidth{153mm}
+\setlength\textheight{255mm}
+
+%General text options, will apply unless commands specify otherwise
+\raggedright
+\setlength\parindent{15pt} 
+
+%Headers and footers
+\pagestyle{fancy}
+\fancyhfoffset[L]{27mm}
+\fancyhead[L]{{\small \sf IOP Publishing}\hspace{5mm} {\it Journal} {\bf vv} (yyyy) aaaaaa}
+\fancyhead[C]{}
+\fancyhead[R]{Author {\it et al}\ }
+\fancyfoot[LR]{}
+\fancyfoot[C]{\thepage}
+\renewcommand{\headrulewidth}{0.5pt}
+\renewcommand{\footrulewidth}{0.5pt}
+\renewcommand{\headrule}{\color{gray}\if@fancyplain\let\headrulewidth\plainheadrulewidth\fi
+      \hrule\@height\headrulewidth\@width\headwidth
+      \vskip-\headrulewidth}
+\renewcommand{\footrule}{{\color{gray}\if@fancyplain\let\footrulewidth\plainfootrulewidth\fi
+    \vskip-\footruleskip\vskip-\footrulewidth
+    \hrule\@width\headwidth\@height\footrulewidth\vskip\footruleskip}}
+
+%Article title, type and left-column content
+
+\newcommand{\articletype}[1]{{\vspace*{-8mm}\noindent \Large \sf Journal Name}
+
+\vspace*{8mm} \noindent\reversemarginpar
+\marginpar{\vspace{-3mm} {\color{gray}\hrule} \ \\ Crossmark\\ {\color{gray}\hrule} \ \\ \tiny {\sf RECEIVED} {\small \\ dd Month yyyy}\\ \\ {\sf REVISED} {\small \\ dd Month yyyy}}{\scriptsize \sf{\bfseries \MakeUppercase{#1}}}}
+
+
+\renewcommand{\title}[1]{{\exhyphenpenalty=10000\hyphenpenalty=10000 
+ \fontsize{18}{21}\selectfont\noindent\raggedright
+        \textsf{#1}\par}\suppressfloats[t]}
+
+		
+\renewcommand{\author}[1]{{\vspace{5mm}%
+   \fontsize{10}{12}
+      \raggedright \if@anonymous Author list removed for anonymity \else #1 \fi
+	  \vspace{3mm}}}
+
+\newcommand{\affil}[1]{{\fontsize{8}{10}\selectfont
+       \raggedright \if@anonymous \phantom{#1} \else #1 \fi}
+	   }
+
+\newcommand{\email}[1]{\vspace*{12pt}{\fontsize{8}{10}\selectfont
+       \raggedright {\bfseries E-mail:} \if@anonymous \phantom{#1} \else #1 \fi}
+	  \vspace{3mm} }
+	   
+\newcommand{\keywords}[1]{{\fontsize{8}{10}\selectfont
+       \raggedright {\bfseries Keywords:} #1}
+	  }
+
+\renewenvironment{abstract}{%
+      \vspace{16pt plus3pt minus3pt}
+      {\color{gray}\hrule} \ \\
+      \noindent \fontsize{11}{12}\selectfont {\bfseries Abstract}\\
+	  \rm\ignorespaces \raggedright}{\vspace{3mm} {\color{gray}\hrule}}
+
+
+% Section titles
+	
+\renewcommand\section{\@startsection {section}{1}{\z@}%
+                   {-3.25ex\@plus -1ex \@minus -.2ex}%
+                   {1sp}%
+                   {\reset@font\normalsize\bfseries\raggedright}}
+\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
+                   {-3.25ex\@plus -1ex \@minus -.2ex}%
+                   {1sp}%
+                   {\reset@font\normalsize\itshape\raggedright}}
+\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
+                                     {-3.25ex\@plus -1ex \@minus -.2ex}%
+                                     {-1em \@plus .2em}%
+                                     {\reset@font\normalsize\itshape}}
+
+
+% New command for acknowledgments to enable automatic removal when anonymous option is used
+
+\newcommand{\ack}[1]{
+\section*{Acknowledgments}
+\if@anonymous Removed for anonymity \else #1 \fi}
+
+\newcommand{\funding}[1]{
+\section*{Funding}
+\if@anonymous Removed for anonymity \else #1 \fi}
+
+\newcommand{\data}[1]{
+\section*{Data availability}
+\if@anonymous Removed for anonymity \else #1 \fi}
+
+\newcommand{\roles}[1]{
+\section*{Author contributions}
+\if@anonymous Removed for anonymity \else #1 \fi}
+
+\newcommand{\suppdata}[1]{
+\section*{Supplementary data}
+#1}
+
+%Figure captions
+
+\renewcommand{\@makecaption}[2]{\vskip\abovecaptionskip
+\sbox\@tempboxa{\fontsize{8}{10}\selectfont {\bfseries #1.} #2}%
+\ifdim \wd\@tempboxa >\hsize
+\raggedright \fontsize{8}{10}\selectfont {\bfseries #1.} #2\par
+\else
+\global \@minipagefalse
+\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+\fi
+\vskip\belowcaptionskip}
+
+%Table font style
+\let\oldtabular\tabular
+\renewcommand{\tabular}{\fontsize{8}{10}\selectfont \oldtabular}
+
+%ORCID
+
+\newcommand{\orcid}[1]{\href{https://orcid.org/#1}{\includegraphics[width=8pt]{orcid}}}
+
+\endinput

Fichier diff supprimé car celui-ci est trop grand
+ 38 - 0
manuscript/optimization.tex


BIN
manuscript/orcid.pdf


+ 22 - 0
manuscript/tex2word/convert2docx.sh

@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+set -euo pipefail
+
+# reference doc:
+# pandoc --print-default-data-file reference.docx > pandoc_reference.docx
+
+infile="$1"
+outfile="$2"
+tmpfile="$(mktemp --suffix=.tex)"
+
+python3 preprocess_tex_for_word.py "$infile" "$tmpfile"
+pandoc "$tmpfile" \
+  --reference-doc=pandoc_reference.docx \
+  --lua-filter resolve_equation_labels.lua \
+  -F pandoc-crossref \
+  -M autoEqnLabels \
+  -M tableEqns \
+  --citeproc \
+  --bibliography=Ref.bib \
+  -o "$outfile"
+
+rm -f "$tmpfile"

BIN
manuscript/tex2word/pandoc_reference.docx


+ 46 - 0
manuscript/tex2word/preprocess_tex_for_word.py

@@ -0,0 +1,46 @@
+#!/usr/bin/env python3
+import re
+import sys
+from pathlib import Path
+
+if len(sys.argv) != 3:
+    print("Usage: preprocess_tex_for_word.py input.tex output.tex", file=sys.stderr)
+    sys.exit(1)
+
+src = Path(sys.argv[1]).read_text(encoding="utf-8")
+text = src
+
+# Rename \includegraphics{file.ext} -> \includegraphics{file.png}
+text = re.sub(
+    r'(\\includegraphics(?:\[[^\]]*\])?\{[^{}]+?)\.[^./{}\\]+(\})',
+    r'\1.png\2',
+    text
+)
+
+# Replace siunitx S[...] columns with plain right-aligned columns
+text = re.sub(r'S\[[^\]]*\]', 'r', text)
+
+# Replace bare S columns with r as well
+text = re.sub(r'(?<![A-Za-z])S(?![A-Za-z])', 'r', text)
+
+# Remove \resizebox{...}{...}{ ...tabular... }
+# Allow optional % after opening { and before closing }
+resizebox_tabular = re.compile(
+    r'''
+    \\resizebox\s*
+    \{[^{}]*\}\s*              # first arg
+    \{[^{}]*\}\s*              # second arg
+    \{\s*%?\s*                 # opening body, optional %
+    (\\begin\{tabular\}.*?\\end\{tabular\})   # inner tabular
+    \s*%?\s*\}                 # optional % before closing }
+    ''',
+    re.DOTALL | re.VERBOSE
+)
+
+while True:
+    new_text, n = resizebox_tabular.subn(r'\1', text)
+    text = new_text
+    if n == 0:
+        break
+
+Path(sys.argv[2]).write_text(text, encoding="utf-8")

Fichier diff supprimé car celui-ci est trop grand
+ 241 - 203
notebooks/logit_all_models.ipynb


Fichier diff supprimé car celui-ci est trop grand
+ 339 - 325
notebooks/logit_mono-cubic4paper.ipynb


+ 87 - 54
notebooks/logit_review_boots.ipynb

@@ -13,8 +13,17 @@
    ]
   },
   {
+   "cell_type": "markdown",
+   "id": "7b2cffa0",
+   "metadata": {},
+   "source": [
+    "## Common"
+   ]
+  },
+  {
    "cell_type": "code",
-   "execution_count": 1,
+   "execution_count": null,
+   "id": "3e49303c",
    "metadata": {},
    "outputs": [],
    "source": [
@@ -24,21 +33,29 @@
     "# Assumes this notebook is in <project>/notebooks/.\n",
     "project_root = Path.cwd().parent\n",
     "src_dir = project_root / 'src'\n",
-    "if str(src_dir) not in sys.path:\n",
-    "    sys.path.insert(0, str(src_dir))\n",
     "\n",
+    "if str(src_dir) not in sys.path: sys.path.insert(0, str(src_dir))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "id": "063c7f0a",
+   "metadata": {},
+   "outputs": [],
+   "source": [
     "import matplotlib.pyplot as plt\n",
     "import numpy as np\n",
     "import pandas as pd\n",
     "import seaborn as sns\n",
     "from scipy.stats import norm\n",
     "\n",
-    "\n",
     "from irae_risk import data, logistic"
    ]
   },
   {
    "cell_type": "markdown",
+   "id": "89f6c3ba",
    "metadata": {},
    "source": [
     "## Data"
@@ -47,6 +64,7 @@
   {
    "cell_type": "code",
    "execution_count": 2,
+   "id": "d679e87e",
    "metadata": {},
    "outputs": [
     {
@@ -858,6 +876,7 @@
   {
    "cell_type": "code",
    "execution_count": 3,
+   "id": "5f40f218",
    "metadata": {},
    "outputs": [
     {
@@ -903,6 +922,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "69c7fcff",
    "metadata": {},
    "source": [
     "## Fit and asymptotic uncertainty"
@@ -910,7 +930,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 4,
+   "execution_count": null,
+   "id": "38b574fa",
    "metadata": {},
    "outputs": [
     {
@@ -1026,23 +1047,24 @@
     "if not res_fit['success']:\n",
     "    raise RuntimeError(f\"Logistic fit failed: {res_fit}\")\n",
     "\n",
-    "pars = res_fit['pars']\n",
-    "cov_pars = logit.get_cov(x, y, pars)\n",
+    "theta = res_fit['theta']\n",
+    "cov_theta = logit.get_cov(x, y, theta)\n",
     "alpha = 0.05\n",
     "probs = [alpha / 2, 1 - alpha / 2]\n",
     "\n",
     "print(res_fit)\n",
-    "print('covariance matrix:\\n', cov_pars)\n",
+    "print('covariance matrix:\\n', cov_theta)\n",
     "pd.DataFrame(\n",
-    "    {'estimate': pars, 'LCL': logit.get_pars_quantiles_normal(probs, pars, cov_pars)[0],\n",
-    "     'UCL': logit.get_pars_quantiles_normal(probs, pars, cov_pars)[1]},\n",
-    "    index=[f'b{i}' for i in range(len(pars))],\n",
+    "    {'estimate': theta, 'LCL': logit.get_theta_quantiles_normal(probs, theta, cov_theta)[0],\n",
+    "     'UCL': logit.get_theta_quantiles_normal(probs, theta, cov_theta)[1]},\n",
+    "    index=[f'b{i}' for i in range(len(theta))],\n",
     ")"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 5,
+   "execution_count": null,
+   "id": "01c94f2e",
    "metadata": {},
    "outputs": [
     {
@@ -1181,12 +1203,13 @@
     }
    ],
    "source": [
-    "pd.DataFrame([logit.goodness_of_fit(x, y, pars)])"
+    "pd.DataFrame([logit.goodness_of_fit(x, y, theta)])"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 6,
+   "execution_count": null,
+   "id": "50095607",
    "metadata": {},
    "outputs": [
     {
@@ -1207,11 +1230,11 @@
     "for cls, label in [(0, 'NC'), (1, 'AE')]:\n",
     "    ax.scatter(x[y == cls], y[y == cls], label=label, zorder=3)\n",
     "\n",
-    "ax.plot(xp, logit.model(xp, pars), color='black', label='logistic fit', zorder=4)\n",
+    "ax.plot(xp, logit.model(xp, theta), color='black', label='logistic fit', zorder=4)\n",
     "\n",
     "for label, method, color in [('normal', logit.get_model_quantiles_normal, 'tab:red'),\n",
     "                             ('delta', logit.get_model_quantiles_delta, 'tab:green')]:\n",
-    "    lo, hi = method(xp, probs, pars, cov_pars)\n",
+    "    lo, hi = method(xp, probs, theta, cov_theta)\n",
     "    ax.fill_between(xp, lo, hi, color=color, alpha=0.18, label=f'95% CI ({label})')\n",
     "\n",
     "ax.set(xlabel='maximum SUV percentile across visits', \n",
@@ -1226,6 +1249,7 @@
   },
   {
    "cell_type": "markdown",
+   "id": "64da8c2f",
    "metadata": {},
    "source": [
     "## Bootstrap parameter samples"
@@ -1233,7 +1257,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 7,
+   "execution_count": null,
+   "id": "77320617",
    "metadata": {},
    "outputs": [
     {
@@ -1245,17 +1270,20 @@
     }
    ],
    "source": [
-    "# Each current API method includes the original-data MLE as its first row.\n",
-    "bpars_nonpar = logit.get_nonparam_boots_pars(x, y, n_boots, seed=1977)\n",
-    "bpars_nonpar_strat = logit.get_nonparam_stratified_boots_pars(x, y, n_boots, seed=1978)\n",
-    "bpars_param = logit.get_parametric_boots_pars(x, y, n_boots, seed=1979)\n",
+    "# Each method returns exactly n_boots bootstrap estimates. The original-data\n",
+    "# MLE is used as the initial point for fitting each replicate but is not\n",
+    "# included as a row in the returned bootstrap array.\n",
+    "btheta_nonpar = logit.get_nonparam_boots_theta(x, y, n_boots, seed=1977)\n",
+    "btheta_nonpar_strat = logit.get_nonparam_stratified_boots_theta(x, y, n_boots, seed=1978)\n",
+    "btheta_param = logit.get_parametric_boots_theta(x, y, n_boots, seed=1979)\n",
     "\n",
-    "print(bpars_nonpar.shape, bpars_nonpar_strat.shape, bpars_param.shape)"
+    "print(btheta_nonpar.shape, btheta_nonpar_strat.shape, btheta_param.shape)"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 8,
+   "execution_count": null,
+   "id": "7b38615a",
    "metadata": {},
    "outputs": [
     {
@@ -1286,9 +1314,9 @@
     "    return samples.mean(axis=0), np.cov(samples, rowvar=False, ddof=1)\n",
     "\n",
     "bootstrap_results = {\n",
-    "    \"nonparametric\": bpars_nonpar,\n",
-    "    \"stratified\": bpars_nonpar_strat,\n",
-    "    \"parametric\": bpars_param,\n",
+    "    \"nonparametric\": btheta_nonpar,\n",
+    "    \"stratified\": btheta_nonpar_strat,\n",
+    "    \"parametric\": btheta_param,\n",
     "}\n",
     "\n",
     "for name, samples in bootstrap_results.items():\n",
@@ -1300,7 +1328,8 @@
   },
   {
    "cell_type": "code",
-   "execution_count": 9,
+   "execution_count": null,
+   "id": "ad4ff783",
    "metadata": {},
    "outputs": [
     {
@@ -1337,10 +1366,10 @@
    "source": [
     "def plot_bootstrap_parameters(\n",
     "    samples,\n",
-    "    pars,\n",
-    "    cov_pars,\n",
+    "    theta,\n",
+    "    cov_theta,\n",
     "    title = None,\n",
-    "    pars_labels=(r\"$\\beta_0$\", r\"$\\beta_1$\"),\n",
+    "    theta_labels=(r\"$\\beta_0$\", r\"$\\beta_1$\"),\n",
     "    kind=\"kde\",\n",
     "    fill=True,\n",
     "    fontsize=None,\n",
@@ -1353,17 +1382,17 @@
     "    fontsize = fontsize or {\"ticks\": 16, \"axes_labels\": 16, \"plot_label\": 18, \"plot_title\": 20}\n",
     "\n",
     "    samples = np.asarray(samples, dtype=float)\n",
-    "    pars = np.asarray(pars, dtype=float)\n",
-    "    cov_pars = np.asarray(cov_pars, dtype=float)\n",
+    "    theta = np.asarray(theta, dtype=float)\n",
+    "    cov_theta = np.asarray(cov_theta, dtype=float)\n",
     "\n",
     "    if samples.ndim != 2 or samples.shape[1] != 2:\n",
     "        raise ValueError(\"samples must have shape (n_samples, 2)\")\n",
-    "    if pars.shape != (2,):\n",
-    "        raise ValueError(\"pars must have shape (2,)\")\n",
-    "    if cov_pars.shape != (2, 2):\n",
-    "        raise ValueError(\"cov_pars must have shape (2, 2)\")\n",
-    "    if np.any(np.diag(cov_pars) <= 0):\n",
-    "        raise ValueError(\"cov_pars must have positive diagonal elements\")\n",
+    "    if theta.shape != (2,):\n",
+    "        raise ValueError(\"theta must have shape (2,)\")\n",
+    "    if cov_theta.shape != (2, 2):\n",
+    "        raise ValueError(\"cov_theta must have shape (2, 2)\")\n",
+    "    if np.any(np.diag(cov_theta) <= 0):\n",
+    "        raise ValueError(\"cov_theta must have positive diagonal elements\")\n",
     "    if kind not in {\"kde\", \"scatter\"}:\n",
     "        raise ValueError(\"kind must be 'kde' or 'scatter'\")\n",
     "\n",
@@ -1386,20 +1415,20 @@
     "                      kind=kind, height=figsize[1], **plot_options,)\n",
     "\n",
     "    g.figure.set_size_inches(*figsize)\n",
-    "    g.set_axis_labels(*pars_labels, fontsize=fontsize[\"axes_labels\"],)\n",
+    "    g.set_axis_labels(*theta_labels, fontsize=fontsize[\"axes_labels\"],)\n",
     "    g.ax_joint.tick_params(labelsize=fontsize[\"ticks\"])\n",
     "\n",
     "    # MLE point\n",
-    "    g.ax_joint.plot(*pars, \"ro\", markersize=8, label=\"MLE\", zorder=10,)\n",
+    "    g.ax_joint.plot(*theta, \"ro\", markersize=8, label=\"MLE\", zorder=10,)\n",
     "    g.ax_joint.legend(fontsize=fontsize[\"ticks\"])\n",
     "\n",
     "    # Marginal normal approximations\n",
     "    x = np.linspace(*g.ax_joint.get_xlim(), 300)\n",
     "    y = np.linspace(*g.ax_joint.get_ylim(), 300)\n",
     "\n",
-    "    g.ax_marg_x.plot(x, norm.pdf(x, pars[0], np.sqrt(cov_pars[0, 0])), \n",
+    "    g.ax_marg_x.plot(x, norm.pdf(x, theta[0], np.sqrt(cov_theta[0, 0])), \n",
     "                     color=\"red\", linewidth=2,)\n",
-    "    g.ax_marg_y.plot(norm.pdf(y, pars[1], np.sqrt(cov_pars[1, 1])), y,\n",
+    "    g.ax_marg_y.plot(norm.pdf(y, theta[1], np.sqrt(cov_theta[1, 1])), y,\n",
     "                     color=\"red\", linewidth=2,)\n",
     "\n",
     "    if plot_label is not None:\n",
@@ -1433,8 +1462,8 @@
     "    if len(samples_sel) < 2:\n",
     "        raise ValueError( f\"Too few samples remain inside the selected window for {name!r}.\")\n",
     "\n",
-    "    g = plot_bootstrap_parameters(samples_sel, pars, cov_pars,\n",
-    "                                  pars_labels = [r\"$\\theta_{0}$\", r\"$\\theta_{1}$\"], \n",
+    "    g = plot_bootstrap_parameters(samples_sel, theta, cov_theta,\n",
+    "                                  theta_labels = [r\"$\\theta_{0}$\", r\"$\\theta_{1}$\"], \n",
     "                                  plot_label=plot_labels.get(name))\n",
     "\n",
     "    safe_name = name.lower().replace(\" \", \"_\")\n",
@@ -1448,14 +1477,18 @@
   },
   {
    "cell_type": "markdown",
+   "id": "90a08ec8",
    "metadata": {},
    "source": [
-    "## Comparison of confidence bands"
+    "## Comparison of confidence bands\n",
+    "\n",
+    "**Coverage note.** The analytic and bootstrap envelopes below are pointwise confidence intervals evaluated separately at each predictor value. Although they are called confidence bands graphically, they do not provide simultaneous coverage of the complete fitted curve.\n"
    ]
   },
   {
    "cell_type": "code",
-   "execution_count": 10,
+   "execution_count": null,
+   "id": "8d2de35f",
    "metadata": {},
    "outputs": [
     {
@@ -1470,22 +1503,22 @@
     }
    ],
    "source": [
-    "def bootstrap_band(xgrid, bootstrap_pars, quantiles):\n",
-    "    values = np.vstack([logit.model(xgrid, sample) for sample in bootstrap_pars])\n",
+    "def bootstrap_band(xgrid, bootstrap_theta, quantiles):\n",
+    "    values = np.vstack([logit.model(xgrid, sample) for sample in bootstrap_theta])\n",
     "    return np.quantile(values, quantiles, axis=0)\n",
     "\n",
     "fig, ax = plt.subplots(figsize=(8, 5))\n",
     "for cls, label in [(0, 'NC'), (1, 'AE')]:\n",
     "    ax.scatter(x[y == cls], y[y == cls], label=label, zorder=4)\n",
     "\n",
-    "ax.plot(xp, logit.model(xp, pars), color='black', lw=2, label='logistic fit', zorder=5)\n",
+    "ax.plot(xp, logit.model(xp, theta), color='black', lw=2, label='logistic fit', zorder=5)\n",
     "\n",
     "bands = [\n",
-    "    ('normal', logit.get_model_quantiles_normal(xp, probs, pars, cov_pars), 'tab:red'),\n",
-    "    ('delta', logit.get_model_quantiles_delta(xp, probs, pars, cov_pars), 'tab:green'),\n",
-    "    ('non-parametric bootstrap', bootstrap_band(xp, bpars_nonpar, probs), 'tab:blue'),\n",
-    "    ('stratified bootstrap', bootstrap_band(xp, bpars_nonpar_strat, probs), 'tab:purple'),\n",
-    "    ('parametric bootstrap', bootstrap_band(xp, bpars_param, probs), 'tab:orange'),\n",
+    "    ('normal', logit.get_model_quantiles_normal(xp, probs, theta, cov_theta), 'tab:red'),\n",
+    "    ('delta', logit.get_model_quantiles_delta(xp, probs, theta, cov_theta), 'tab:green'),\n",
+    "    ('non-parametric bootstrap', bootstrap_band(xp, btheta_nonpar, probs), 'tab:blue'),\n",
+    "    ('stratified bootstrap', bootstrap_band(xp, btheta_nonpar_strat, probs), 'tab:purple'),\n",
+    "    ('parametric bootstrap', bootstrap_band(xp, btheta_param, probs), 'tab:orange'),\n",
     "]\n",
     "\n",
     "for label, (lo, hi), color in bands:\n",

BIN
results/logit_models/cubic_monotonic/logit_mono_asymptotic_fit.pdf → results/logit_all_models/cubic_monotonic/logit_mono_asymptotic_fit.pdf


BIN
results/logit_models/cubic_monotonic/logit_mono_ci_comparison.pdf → results/logit_all_models/cubic_monotonic/logit_mono_ci_comparison.pdf


BIN
results/logit_models/cubic_unconstrained/logit_cubic_nonmono_fit.pdf → results/logit_all_models/cubic_unconstrained/logit_cubic_nonmono_fit.pdf


BIN
results/logit_models/linear/logit_linear_fit.pdf → results/logit_all_models/linear/logit_linear_fit.pdf


+ 70 - 0
results/logit_mono-cubic4paper/beta_CI_long.txt

@@ -0,0 +1,70 @@
+\begin{tabular}{llllrrr}
+\toprule
+scale & dataset & method & coefficient & estimate & LCL & UCL \\
+\midrule
+log & FULL & normal & $\beta_0$ & -40.709397 & -80.514824 & 0.576810 \\
+log & FULL & normal & $\beta_1$ & 152.898365 & 34.454749 & 345.981009 \\
+log & FULL & normal & $\beta_2$ & -186.375741 & -434.565154 & -38.043109 \\
+log & FULL & normal & $\beta_3$ & 75.727683 & 13.775938 & 183.597710 \\
+log & FULL & nonparam_boots & $\beta_0$ & -40.709397 & -362.341899 & -14.457646 \\
+log & FULL & nonparam_boots & $\beta_1$ & 152.898365 & 0.008195 & 1941.547918 \\
+log & FULL & nonparam_boots & $\beta_2$ & -186.375741 & -3466.701526 & 2.548176 \\
+log & FULL & nonparam_boots & $\beta_3$ & 75.727683 & 2.070028 & 2059.363688 \\
+log & FULL & nonparam_stratified_boots & $\beta_0$ & -40.709397 & -369.351128 & -14.205809 \\
+log & FULL & nonparam_stratified_boots & $\beta_1$ & 152.898365 & 0.014464 & 1980.246721 \\
+log & FULL & nonparam_stratified_boots & $\beta_2$ & -186.375741 & -3528.049144 & 2.305803 \\
+log & FULL & nonparam_stratified_boots & $\beta_3$ & 75.727683 & 1.751783 & 2094.675746 \\
+log & FULL & parametric_boots & $\beta_0$ & -40.709397 & -310.971797 & -8.945695 \\
+log & FULL & parametric_boots & $\beta_1$ & 152.898365 & 0.134978 & 1223.357752 \\
+log & FULL & parametric_boots & $\beta_2$ & -186.375741 & -1600.454296 & 6.086761 \\
+log & FULL & parametric_boots & $\beta_3$ & 75.727683 & 0.984105 & 1828.297047 \\
+log & TRIM & normal & $\beta_0$ & -318.624647 & -776.659317 & 157.809374 \\
+log & TRIM & normal & $\beta_1$ & 1693.446514 & 113.742593 & 4971.801432 \\
+log & TRIM & normal & $\beta_2$ & -3000.867759 & -8798.941523 & -199.771987 \\
+log & TRIM & normal & $\beta_3$ & 1772.560127 & 124.155987 & 5163.107174 \\
+log & TRIM & nonparam_boots & $\beta_0$ & -318.624647 & -400.128827 & -17.348309 \\
+log & TRIM & nonparam_boots & $\beta_1$ & 1693.446514 & 0.001076 & 2136.483263 \\
+log & TRIM & nonparam_boots & $\beta_2$ & -3000.867759 & -3801.243116 & 2.791405 \\
+log & TRIM & nonparam_boots & $\beta_3$ & 1772.560127 & 64.697359 & 2251.261055 \\
+log & TRIM & nonparam_stratified_boots & $\beta_0$ & -318.624647 & -399.079252 & -17.585934 \\
+log & TRIM & nonparam_stratified_boots & $\beta_1$ & 1693.446514 & 0.001151 & 2130.156884 \\
+log & TRIM & nonparam_stratified_boots & $\beta_2$ & -3000.867759 & -3786.236311 & 2.695133 \\
+log & TRIM & nonparam_stratified_boots & $\beta_3$ & 1772.560127 & 67.815305 & 2242.960062 \\
+log & TRIM & parametric_boots & $\beta_0$ & -318.624647 & -388.501147 & -23.345353 \\
+log & TRIM & parametric_boots & $\beta_1$ & 1693.446514 & 1.521692 & 2462.926783 \\
+log & TRIM & parametric_boots & $\beta_2$ & -3000.867759 & -5226.607876 & -42.998302 \\
+log & TRIM & parametric_boots & $\beta_3$ & 1772.560127 & 133.499510 & 3697.150084 \\
+plain & FULL & normal & $\beta_0$ & -123.992084 & -233.949431 & -9.562457 \\
+plain & FULL & normal & $\beta_1$ & 163.793487 & 45.151309 & 347.318752 \\
+plain & FULL & normal & $\beta_2$ & -71.447936 & -153.877505 & -18.651542 \\
+plain & FULL & normal & $\beta_3$ & 10.388707 & 2.602959 & 22.798786 \\
+plain & FULL & nonparam_boots & $\beta_0$ & -123.992084 & -662.077285 & -20.931699 \\
+plain & FULL & nonparam_boots & $\beta_1$ & 163.793487 & 7.451974 & 1082.620980 \\
+plain & FULL & nonparam_boots & $\beta_2$ & -71.447936 & -586.956425 & -3.339263 \\
+plain & FULL & nonparam_boots & $\beta_3$ & 10.388707 & 0.769656 & 108.791615 \\
+plain & FULL & nonparam_stratified_boots & $\beta_0$ & -123.992084 & -647.740990 & -21.412504 \\
+plain & FULL & nonparam_stratified_boots & $\beta_1$ & 163.793487 & 7.756705 & 1057.043993 \\
+plain & FULL & nonparam_stratified_boots & $\beta_2$ & -71.447936 & -576.953166 & -13.715894 \\
+plain & FULL & nonparam_stratified_boots & $\beta_3$ & 10.388707 & 6.602426 & 106.656112 \\
+plain & FULL & parametric_boots & $\beta_0$ & -123.992084 & -519.918596 & -14.267928 \\
+plain & FULL & parametric_boots & $\beta_1$ & 163.793487 & 0.269142 & 858.638061 \\
+plain & FULL & parametric_boots & $\beta_2$ & -71.447936 & -504.895600 & -1.304426 \\
+plain & FULL & parametric_boots & $\beta_3$ & 10.388707 & 2.109768 & 101.827455 \\
+plain & TRIM & normal & $\beta_0$ & -450.087847 & -995.828448 & 117.691886 \\
+plain & TRIM & normal & $\beta_1$ & 727.847722 & 93.232075 & 1984.937554 \\
+plain & TRIM & normal & $\beta_2$ & -395.533373 & -1126.854471 & -33.273309 \\
+plain & TRIM & normal & $\beta_3$ & 72.298288 & 4.774418 & 215.847819 \\
+plain & TRIM & nonparam_boots & $\beta_0$ & -450.087847 & -737.807108 & -20.618997 \\
+plain & TRIM & nonparam_boots & $\beta_1$ & 727.847722 & 7.141145 & 1228.613108 \\
+plain & TRIM & nonparam_boots & $\beta_2$ & -395.533373 & -683.232490 & -13.178434 \\
+plain & TRIM & nonparam_boots & $\beta_3$ & 72.298288 & 7.726781 & 126.703570 \\
+plain & TRIM & nonparam_stratified_boots & $\beta_0$ & -450.087847 & -715.579363 & -21.029663 \\
+plain & TRIM & nonparam_stratified_boots & $\beta_1$ & 727.847722 & 7.447028 & 1190.138080 \\
+plain & TRIM & nonparam_stratified_boots & $\beta_2$ & -395.533373 & -659.482995 & -13.645705 \\
+plain & TRIM & nonparam_stratified_boots & $\beta_3$ & 72.298288 & 8.284455 & 121.892100 \\
+plain & TRIM & parametric_boots & $\beta_0$ & -450.087847 & -543.464811 & -30.306043 \\
+plain & TRIM & parametric_boots & $\beta_1$ & 727.847722 & 13.581994 & 948.315529 \\
+plain & TRIM & parametric_boots & $\beta_2$ & -395.533373 & -571.500600 & -21.861143 \\
+plain & TRIM & parametric_boots & $\beta_3$ & 72.298288 & 11.728998 & 112.101168 \\
+\bottomrule
+\end{tabular}

BIN
results/logit_mono-cubic4paper/boots_theta_results.pkl


BIN
results/logit_mono-cubic4paper/logit_cost_min_paper.pdf


BIN
results/logit_mono-cubic4paper/logit_fit_CI_paper.pdf


BIN
results/logit_mono-cubic4paper/logit_fit_CI_simple_paper.pdf


BIN
results/logit_mono-cubic4paper/logit_fit_paper.pdf


+ 22 - 0
results/logit_mono-cubic4paper/theta_CI_long.txt

@@ -0,0 +1,22 @@
+\begin{tabular}{lllllllllllllllll}
+\toprule
+ & scale & dataset & idx & beta & theta & SE & LCL[Wald] & UCL[Wald] & LCL[normal] & UCL[normal] & LCL[nonparam_boots] & UCL[nonparam_boots] & LCL[nonparam_stratified_boots] & UCL[nonparam_stratified_boots] & LCL[parametric_boots] & UCL[parametric_boots] \\
+\midrule
+0 & log & FULL & 0 & -40.709397 & -40.709397 & 20.369622 & -80.633122 & -0.785672 & -80.514824 & 0.576810 & -362.341899 & -14.457646 & -369.351128 & -14.205809 & -310.971797 & -8.945695 \\
+1 & log & FULL & 1 & 152.898365 & 0.000000 & 0.000000 & -0.000000 & 0.000001 & -0.000000 & 0.000000 & -0.000013 & 0.000014 & -0.000011 & 0.000012 & -0.000220 & 0.000241 \\
+2 & log & FULL & 2 & -186.375741 & 15.072593 & 4.286259 & 6.671680 & 23.473505 & 6.428671 & 23.468982 & -35.741173 & 78.600834 & -35.750994 & 79.271857 & -74.060051 & 48.619996 \\
+3 & log & FULL & 3 & 75.727683 & -12.365208 & 3.203398 & -18.643753 & -6.086662 & -18.600565 & -5.869817 & -44.062999 & 2.279963 & -44.499963 & 2.280283 & -34.976531 & 17.689025 \\
+4 & log & TRIM & 0 & -318.624647 & -318.624647 & 234.978512 & -779.174069 & 141.924774 & -776.659317 & 157.809374 & -400.128827 & -17.348309 & -399.079252 & -17.585934 & -388.501147 & -23.345353 \\
+5 & log & TRIM & 1 & 1693.446514 & 0.000000 & 0.000000 & -0.000000 & 0.000000 & -0.000000 & 0.000001 & -0.000252 & 0.000234 & -0.000231 & 0.000239 & -0.000502 & 0.000010 \\
+6 & log & TRIM & 2 & -3000.867759 & 72.922427 & 26.483574 & 21.015576 & 124.829279 & -124.456103 & -19.188869 & -82.181404 & 36.533438 & -82.029752 & 36.475705 & -105.315954 & 35.116438 \\
+7 & log & TRIM & 3 & 1772.560127 & -41.151507 & 15.096946 & -70.740977 & -11.562037 & 10.507731 & 70.511002 & -1.526074 & 46.222108 & -1.518301 & 46.153623 & -3.260625 & 49.627883 \\
+8 & plain & FULL & 0 & -123.992084 & -123.992084 & 56.445124 & -234.622494 & -13.361674 & -233.949431 & -9.562457 & -662.077285 & -20.931699 & -647.740990 & -21.412504 & -519.918596 & -14.267928 \\
+9 & plain & FULL & 1 & 163.793487 & 0.000000 & 0.000000 & -0.000000 & 0.000000 & -0.000096 & 0.000008 & -2.420179 & 0.000387 & -2.530518 & 0.210722 & -2.558559 & 0.017588 \\
+10 & plain & FULL & 2 & -71.447936 & 5.582663 & 1.376914 & 2.883961 & 8.281364 & 2.794437 & 8.270209 & -11.027820 & 17.817660 & -11.034868 & 17.537221 & -17.294438 & 14.727337 \\
+11 & plain & FULL & 3 & 10.388707 & -12.798183 & 2.984920 & -18.648518 & -6.947848 & -18.636490 & -6.719472 & -32.838801 & 5.789172 & -32.436639 & 5.801690 & -28.083489 & 26.411133 \\
+12 & plain & TRIM & 0 & -450.087847 & -450.087847 & 279.831967 & -998.548424 & 98.372730 & -995.828448 & 117.691886 & -737.807108 & -20.618997 & -715.579363 & -21.029663 & -543.464811 & -30.306043 \\
+13 & plain & TRIM & 1 & 727.847722 & -2.558506 & 1.770662 & -6.028940 & 0.911929 & -6.031993 & 0.925499 & -2.675272 & 0.000010 & -2.710152 & 0.000013 & -3.922263 & 0.000003 \\
+14 & plain & TRIM & 2 & -395.533373 & -14.727351 & 5.467168 & -25.442804 & -4.011898 & 3.766396 & 25.446875 & -11.143352 & 19.496428 & -11.122698 & 19.122665 & -10.773395 & 18.058431 \\
+15 & plain & TRIM & 3 & 72.298288 & 26.857062 & 9.038609 & 9.141713 & 44.572410 & -44.501614 & -8.598248 & -35.051578 & 5.858238 & -34.496500 & 5.851761 & -30.760968 & 5.677179 \\
+\bottomrule
+\end{tabular}

BIN
results/logit_review_boots/logit_asymptotic_ci.pdf


BIN
results/logit_review_boots/logit_ci_comparison.pdf


BIN
results/logit_review_boots/logit_nonparametric_bootstrap.pdf


BIN
results/logit_review_boots/logit_parametric_bootstrap.pdf


BIN
results/logit_review_boots/logit_stratified_bootstrap.pdf


Fichier diff supprimé car celui-ci est trop grand
+ 550 - 288
src/irae_risk/logistic.py


+ 43 - 28
src/irae_risk/monotonic.py

@@ -5,16 +5,27 @@
 
     We define the polynomial:
           poly(x) = sum_i beta_i * x^i
-    where the coefficients beta_i are parameterized by the vector 'pars',
+    where the coefficients beta_i are parameterized by the vector 'theta',
     meaning:
-            beta_i is a function pars
+            beta_i is a function theta
+
+    IMPORTANT -- theta is not unique.  The forward map is invariant under
+
+        (C, epsilon, k1, k2) -> (C, -epsilon, k1, k2)
+        (C, epsilon, k1, k2) -> (C, epsilon, -k1, -k2).
+
+    Thus, up to four theta vectors represent the same polynomial (fewer when
+    epsilon or k1 is zero).  Likelihoods, beta coefficients, derivatives of the
+    polynomial, and fitted probabilities are invariant under these sign
+    changes.  Raw theta summaries and confidence intervals are not invariant
+    unless a canonical branch is imposed, for example epsilon >= 0 and k1 >= 0.
 """
 import numpy as np
 
 # Forward map: Parameters to polynomial coefficients
-def forward_map(pars):
+def forward_map(theta):
     """
-    Converts parameters (pars = [C, epsilon, k1, k2]) into polynomial coefficients (beta = [d, c, b, a]).
+    Converts parameters (theta = [C, epsilon, k1, k2]) into polynomial coefficients (beta = [d, c, b, a]).
     
     Polynomial Definition:
     - d = C: Constant term of the polynomial.
@@ -23,12 +34,17 @@ def forward_map(pars):
     - a = k1**2 / 3: Coefficient of the cubic term.
 
     Parameters:
-    - pars: NumPy array of parameters [C, epsilon, k1, k2].
+    - theta: NumPy array of parameters [C, epsilon, k1, k2].
 
     Returns:
     - beta: NumPy array of polynomial coefficients [d, c, b, a].
+
+    Notes:
+    - The map is many-to-one because changing the sign of epsilon, or changing
+      both signs of k1 and k2, leaves beta unchanged.  Do not interpret raw
+      theta summaries across fits without first selecting a common branch.
     """
-    C, epsilon, k1, k2 = pars  # Unpack the parameter vector
+    C, epsilon, k1, k2 = theta  # Unpack the parameter vector
     
     # Compute coefficients
     d = C
@@ -42,17 +58,17 @@ def forward_map(pars):
 
 
 # Jacobian of the forward map: First-order derivatives
-def forward_map_jacobian(pars):
+def forward_map_jacobian(theta):
     """
     Computes the Jacobian matrix of the forward map analytically.
     
     Parameters:
-    - pars: NumPy array of parameters [C, epsilon, k1, k2].
+    - theta: NumPy array of parameters [C, epsilon, k1, k2].
     
     Returns:
-    - J: NumPy 4x4 Jacobian matrix, where J[i, j] = d(beta[i])/d(pars[j]).
+    - J: NumPy 4x4 Jacobian matrix, where J[i, j] = d(beta[i])/d(theta[j]).
     """
-    C, epsilon, k1, k2 = pars  # Unpack parameters
+    C, epsilon, k1, k2 = theta  # Unpack parameters
     
     # Initialize Jacobian matrix
     J = np.zeros((4, 4))  # 4x4 matrix
@@ -85,17 +101,17 @@ def forward_map_jacobian(pars):
 
 
 # Hessian of the forward map: Second-order derivatives
-def forward_map_hessian(pars):
+def forward_map_hessian(theta):
     """
     Computes the Hessian tensor of the forward map analytically.
     
     Parameters:
-    - pars: NumPy array of parameters [C, epsilon, k1, k2].
+    - theta: NumPy array of parameters [C, epsilon, k1, k2].
     
     Returns:
-    - H: NumPy 4x4x4 Hessian tensor, where H[i, j, k] = d^2(beta[i])/d(pars[j])d(pars[k]).
+    - H: NumPy 4x4x4 Hessian tensor, where H[i, j, k] = d^2(beta[i])/d(theta[j])d(theta[k]).
     """
-    C, epsilon, k1, k2 = pars  # Unpack parameters
+    C, epsilon, k1, k2 = theta  # Unpack parameters
     
     # Initialize Hessian tensor (4 x 4 x 4)
     H = np.zeros((4, 4, 4))
@@ -120,7 +136,7 @@ def forward_map_hessian(pars):
 # Backward map: Polynomial coefficients to parameters
 def backward_map(beta, only_one = True):
     """
-    Computes the parameters (pars = [C, epsilon, k1, k2]) from the polynomial coefficients (beta = [d, c, b, a]).
+    Computes the parameters (theta = [C, epsilon, k1, k2]) from the polynomial coefficients (beta = [d, c, b, a]).
     
     Polynomial Definition:
     - d = C: Constant term of the polynomial.
@@ -174,30 +190,29 @@ def backward_map(beta, only_one = True):
 # Round-trip test
 # -------------------------
 if __name__ == "__main__":
-    pars_original = np.array([1.0, 2.0, 3.0, 4.0])
-    beta = forward_map(pars_original)
-    pars_recovered = backward_map(beta)
+    theta_original = np.array([1.0, 2.0, 3.0, 4.0])
+    beta = forward_map(theta_original)
+    theta_recovered = backward_map(beta)
 
-    print("Original pars: ", pars_original)
+    print("Original theta: ", theta_original)
     print("Beta:          ", beta)
-    print("Recovered pars:", pars_recovered)
-    print("Difference:    ", pars_recovered - pars_original)
+    print("Recovered theta:", theta_recovered)
+    print("Difference:    ", theta_recovered - theta_original)
 
-    print("\nJacobian at pars:")
-    print(forward_map_jacobian(pars_original))
+    print("\nJacobian at theta:")
+    print(forward_map_jacobian(theta_original))
 
     print("\nHessian for beta1:")
-    print(forward_map_hessian(pars_original)[1])
+    print(forward_map_hessian(theta_original)[1])
 
     print("\nLinear func:")
     lin_fun_beta = [1,0.2,0,0]
     only_one = False
 
-    lin_fun_pars = backward_map(lin_fun_beta, only_one=only_one)
-    lin_fun_beta_recover = lin_fun_pars if only_one else np.unique([forward_map(pars) for pars in lin_fun_pars], axis=0)
+    lin_fun_theta = backward_map(lin_fun_beta, only_one=only_one)
+    lin_fun_beta_recover = lin_fun_theta if only_one else np.unique([forward_map(theta) for theta in lin_fun_theta], axis=0)
     
     print(f"  {only_one = }")
     print("  lin_fun_beta:", lin_fun_beta)
-    print("  backwards:", lin_fun_pars)
+    print("  backwards:", lin_fun_theta)
     print("  forwards:", lin_fun_beta_recover)
-

+ 61 - 27
src/irae_risk/reporting.py

@@ -4,6 +4,8 @@ import numpy as np
 import pandas as pd
 import matplotlib.pyplot as plt
 
+from .logistic import DEFAULT_RANDOM_SEED
+
 # =========================
 # small generic helpers
 # =========================
@@ -98,10 +100,10 @@ def build_plot_data_basic(df_data, df_fit_index, lg, n_grid=100, verbose=False):
             print(f"Calculating: {scale}, {dataset}")
 
         x = g["X"].to_numpy()
-        pars = df_fit_index.loc[(scale, dataset), "pars"]
+        theta = df_fit_index.loc[(scale, dataset), "theta"]
 
         x_fit = np.linspace(x.min(), x.max(), n_grid)
-        y_fit = lg.model(x_fit, pars)
+        y_fit = lg.model(x_fit, theta)
 
         points.append(_make_points_df(g, scale, dataset))
         fits.append(_make_fit_df(x_fit, y_fit, scale, dataset))
@@ -133,20 +135,20 @@ def build_cost_perturbation_data(
         g = df_data[(df_data["scale"] == scale) & (df_data["dataset"] == dataset)]
         x, y = g["X"].to_numpy(), g["Y"].to_numpy()
 
-        pars = np.array(
-            df_fit.loc[(df_fit["scale"] == scale) & (df_fit["dataset"] == dataset), "pars"].iloc[0],
+        theta = np.array(
+            df_fit.loc[(df_fit["scale"] == scale) & (df_fit["dataset"] == dataset), "theta"].iloc[0],
             copy=True,
         )
 
-        for j in range(len(pars)):
+        for j in range(len(theta)):
             if verbose:
                 print(f"\tparameter {j}")
 
             cost = np.empty_like(dpar_grid, dtype=float)
             for i, dp in enumerate(dpar_grid):
-                pars_tmp = pars.copy()
-                pars_tmp[j] += dp
-                cost[i] = lg.get_cost(x, y, pars_tmp, jac=False)
+                theta_tmp = theta.copy()
+                theta_tmp[j] += dp
+                cost[i] = lg.get_cost(x, y, theta_tmp, jac=False)
 
             rows.append(pd.DataFrame({
                 "scale": scale,
@@ -159,9 +161,20 @@ def build_cost_perturbation_data(
     return pd.concat(rows, ignore_index=True)
 
 
-def build_plot_data(df_data, df_fit_index, alpha, lg, n_grid=100, verbose=False):
+def build_plot_data(
+    df_data,
+    df_fit_index,
+    alpha,
+    lg,
+    n_grid=100,
+    verbose=False,
+    seed=DEFAULT_RANDOM_SEED,
+):
     """
     Build raw points, fitted curves, and analytic confidence intervals.
+
+    ``seed`` is forwarded to the sampling-based normal interval used by a
+    monotonic cubic model.
     """
     probs = [alpha / 2, 1 - alpha / 2]
     confidence = 100 * (1 - alpha)
@@ -173,18 +186,23 @@ def build_plot_data(df_data, df_fit_index, alpha, lg, n_grid=100, verbose=False)
             print(f"Calculating: {scale}, {dataset}")
 
         x = g["X"].to_numpy()
-        pars = df_fit_index.loc[(scale, dataset), "pars"]
+        theta = df_fit_index.loc[(scale, dataset), "theta"]
         cov = df_fit_index.loc[(scale, dataset), "cov"]
 
         x_fit = np.linspace(x.min(), x.max(), n_grid)
-        y_fit = lg.model(x_fit, pars)
+        y_fit = lg.model(x_fit, theta)
 
         points.append(_make_points_df(g, scale, dataset))
         fits.append(_make_fit_df(x_fit, y_fit, scale, dataset))
 
         for method in ("normal", "delta"):
             qfun = getattr(lg, f"get_model_quantiles_{method}")
-            y_low, y_high = qfun(x_fit, probs, pars, cov)
+            if method == "normal":
+                y_low, y_high = qfun(
+                    x_fit, probs, theta, cov, seed=seed
+                )
+            else:
+                y_low, y_high = qfun(x_fit, probs, theta, cov)
 
             cis.append(pd.DataFrame({
                 "scale": scale,
@@ -203,17 +221,19 @@ def build_plot_data(df_data, df_fit_index, alpha, lg, n_grid=100, verbose=False)
     )
 
 
-def load_or_build_bootstrap_pars(
+def load_or_build_bootstrap_theta(
     df_data,
     lg,
     results_path,
-    filename="boots_pars_results.pkl",
+    filename="boots_theta_results.pkl",
     n_boots=10000,
     methods=("normal", "nonparam_boots", "nonparam_stratified_boots", "parametric_boots"),
     verbose=False,
+    seed=DEFAULT_RANDOM_SEED,
 ):
     """
-    Load bootstrap parameter draws from disk or build them.
+    Load bootstrap parameter draws from disk or build them.  When the cache is
+    absent, ``seed`` is forwarded to every parameter generator.
     """
     result_file = os.path.join(results_path, filename)
 
@@ -234,9 +254,11 @@ def load_or_build_bootstrap_pars(
             if verbose:
                 print(f"\tmethod: {method}")
 
-            par_fun = getattr(lg, f"get_{method}_pars")
+            theta_fun = getattr(lg, f"get_{method}_theta")
             try:
-                out[(scale, dataset, method)] = par_fun(x, y, m=n_boots)
+                out[(scale, dataset, method)] = theta_fun(
+                    x, y, m=n_boots, seed=seed
+                )
             except Exception:
                 if verbose:
                     print("\tfailed")
@@ -253,14 +275,17 @@ def build_plot_data_full_ci(
     df_fit_index,
     lg,
     alpha,
-    boots_pars_results,
+    boots_theta_results,
     n_grid=100,
     analytic_methods=("normal", "delta"),
     bootstrap_methods=("nonparam_boots", "parametric_boots"),
     verbose=False,
+    seed=DEFAULT_RANDOM_SEED,
 ):
     """
-    Build raw points, fitted curves, analytic CI, and bootstrap CI.
+    Build raw points, fitted curves, analytic CI, and bootstrap CI.  ``seed``
+    is forwarded to the sampling-based normal interval used by a monotonic
+    cubic model.
     """
     probs = [alpha / 2, 1 - alpha / 2]
     confidence = 100 * (1 - alpha)
@@ -272,11 +297,11 @@ def build_plot_data_full_ci(
             print(f"Calculating plot data: {scale}, {dataset}")
 
         x = g["X"].to_numpy()
-        pars = df_fit_index.loc[(scale, dataset), "pars"]
+        theta = df_fit_index.loc[(scale, dataset), "theta"]
         cov = df_fit_index.loc[(scale, dataset), "cov"]
 
         x_fit = np.linspace(x.min(), x.max(), n_grid)
-        y_fit = lg.model(x_fit, pars)
+        y_fit = lg.model(x_fit, theta)
 
         points.append(_make_points_df(g, scale, dataset))
         fits.append(_make_fit_df(x_fit, y_fit, scale, dataset))
@@ -286,7 +311,12 @@ def build_plot_data_full_ci(
                 print(f"\tanalytic CI: {method}")
 
             qfun = getattr(lg, f"get_model_quantiles_{method}")
-            y_low, y_high = qfun(x_fit, probs, pars, cov)
+            if method == "normal":
+                y_low, y_high = qfun(
+                    x_fit, probs, theta, cov, seed=seed
+                )
+            else:
+                y_low, y_high = qfun(x_fit, probs, theta, cov)
 
             cis.append(pd.DataFrame({
                 "scale": scale,
@@ -303,11 +333,15 @@ def build_plot_data_full_ci(
             if verbose:
                 print(f"\tbootstrap CI: {method}")
 
-            bpars = boots_pars_results[(scale, dataset, method)]
-            if bpars is None:
+            bootstrap_theta = boots_theta_results[(scale, dataset, method)]
+            if bootstrap_theta is None:
                 continue
 
-            quant = np.quantile([lg.model(x_fit, p) for p in bpars], probs, axis=0)
+            quant = np.quantile(
+                [lg.model(x_fit, theta_i) for theta_i in bootstrap_theta],
+                probs,
+                axis=0,
+            )
             y_low, y_high = quant
 
             cis.append(pd.DataFrame({
@@ -350,7 +384,7 @@ def plot_from_dataframes_basic(
     jitter_y=0.0,
     jitter_y_full=None,
     jitter_y_trim=None,
-    random_state=123,
+    random_state=DEFAULT_RANDOM_SEED,
     plot_labs = None,
 ):
     """
@@ -642,4 +676,4 @@ def plot_from_dataframes(
 
 
 # alias, if you want the previous name to remain available
-plot_from_dataframes_full_ci = plot_from_dataframes
+plot_from_dataframes_full_ci = plot_from_dataframes

+ 6 - 0
tests/conftest.py

@@ -0,0 +1,6 @@
+from pathlib import Path
+import sys
+
+
+SRC_DIR = Path(__file__).resolve().parents[1] / "src"
+sys.path.insert(0, str(SRC_DIR))

+ 240 - 0
tests/test_logistic.py

@@ -0,0 +1,240 @@
+import inspect
+
+import numpy as np
+import pytest
+
+from irae_risk.logistic import DEFAULT_RANDOM_SEED, LogisticPolyRegression
+
+
+@pytest.fixture
+def regression_data():
+    x = np.linspace(-2.0, 2.0, 20)
+    y = np.array([0, 1] * 10)
+    theta = np.array([-0.2, 0.8])
+    return x, y, theta
+
+
+def test_stochastic_methods_share_a_fixed_default_seed():
+    methods_and_seed_parameters = (
+        (LogisticPolyRegression.fit, "seed"),
+        (LogisticPolyRegression.goodness_of_fit, "bootstrap_seed"),
+        (LogisticPolyRegression.get_model_quantiles_normal, "seed"),
+        (LogisticPolyRegression.get_normal_theta, "seed"),
+        (LogisticPolyRegression.get_nonparam_boots_theta, "seed"),
+        (LogisticPolyRegression.get_nonparam_stratified_boots_theta, "seed"),
+        (LogisticPolyRegression.get_parametric_boots_theta, "seed"),
+    )
+
+    for method, parameter in methods_and_seed_parameters:
+        default = inspect.signature(method).parameters[parameter].default
+        assert default == DEFAULT_RANDOM_SEED
+
+
+def test_differential_evolution_fit_is_reproducible_by_default(
+    regression_data,
+):
+    x, y, _ = regression_data
+    model = LogisticPolyRegression(degree=1)
+
+    first = model.fit(x, y, method="diff_evol")
+    second = model.fit(x, y, method="diff_evol")
+
+    np.testing.assert_array_equal(first["theta"], second["theta"])
+    assert first["cost"] == second["cost"]
+
+
+def test_x50_and_s50_for_linear_logistic_model():
+    model = LogisticPolyRegression(degree=1)
+    theta = np.array([-2.0, 0.5])
+
+    x50 = model.get_x50(theta)
+
+    assert x50 == pytest.approx(4.0)
+    assert model.model(np.array([x50]), theta)[0] == pytest.approx(0.5)
+    assert model.get_s50(theta) == pytest.approx(0.5 / 4.0)
+
+
+def test_x50_selects_first_crossing_of_unconstrained_polynomial():
+    model = LogisticPolyRegression(degree=3)
+    # F(x) = (x + 2) (x - 1) (x - 3)
+    theta = np.array([6.0, -5.0, -2.0, 1.0])
+
+    assert model.get_x50(theta) == pytest.approx(-2.0)
+    assert model.get_s50(theta) == pytest.approx(15.0 / 4.0)
+
+
+def test_x50_and_s50_are_invariant_to_monotonic_theta_symmetries():
+    model = LogisticPolyRegression(degree=3, mono=True)
+    theta = np.array([-0.5, 0.4, 1.2, -0.3])
+    equivalent_theta = np.array([-0.5, -0.4, -1.2, 0.3])
+
+    x50 = model.get_x50(theta)
+
+    assert model.model(np.array([x50]), theta)[0] == pytest.approx(0.5)
+    assert model.get_x50(equivalent_theta) == pytest.approx(x50)
+    assert model.get_s50(equivalent_theta) == pytest.approx(
+        model.get_s50(theta)
+    )
+
+
+def test_x50_supports_flat_monotonic_midpoint():
+    model = LogisticPolyRegression(degree=3, mono=True)
+    # F(x) = (x - 1)**3 / 3, so p'(x50) = 0 at x50 = 1.
+    theta = np.array([-1.0 / 3.0, 0.0, 1.0, -1.0])
+
+    x50 = model.get_x50(theta)
+
+    assert x50 == pytest.approx(1.0, abs=1e-5)
+    assert model.model(np.array([x50]), theta)[0] == pytest.approx(0.5)
+    assert model.get_s50(theta) == pytest.approx(0.0, abs=1e-9)
+
+
+def test_x50_rejects_models_without_a_unique_real_midpoint():
+    quadratic = LogisticPolyRegression(degree=2)
+
+    with pytest.raises(ValueError, match="does not reach 0.5"):
+        quadratic.get_x50(np.array([1.0, 0.0, 1.0]))
+
+    with pytest.raises(ValueError, match="not uniquely defined"):
+        quadratic.get_x50(np.zeros(3))
+
+
+def test_x50_validates_theta():
+    model = LogisticPolyRegression(degree=1)
+
+    with pytest.raises(ValueError, match="theta must have shape"):
+        model.get_x50(np.array([1.0]))
+
+    with pytest.raises(ValueError, match="finite"):
+        model.get_x50(np.array([0.0, np.nan]))
+
+
+def test_goodness_of_fit_uses_unpenalized_likelihood_by_default(regression_data):
+    x, y, theta = regression_data
+    model = LogisticPolyRegression(degree=1, lam=(0.0, 0.5))
+
+    result = model.goodness_of_fit(x, y, theta, bootstrap_samples=20)
+    expected_llf = -model.get_nllf(x, y, theta)
+    k = len(theta)
+    n = len(x)
+
+    assert result["LLF"] == pytest.approx(expected_llf)
+    assert result["AIC"] == pytest.approx(2 * k - 2 * expected_llf)
+    assert result["BIC"] == pytest.approx(k * np.log(n) - 2 * expected_llf)
+
+
+def test_goodness_of_fit_can_include_regularization(regression_data):
+    x, y, theta = regression_data
+    model = LogisticPolyRegression(degree=1, lam=(0.0, 0.5))
+
+    unregularized = model.goodness_of_fit(
+        x, y, theta, bootstrap_samples=20
+    )
+    regularized = model.goodness_of_fit(
+        x,
+        y,
+        theta,
+        regularization=True,
+        bootstrap_samples=20,
+    )
+    penalty = model.penalty(theta)
+
+    assert regularized["LLF"] == pytest.approx(
+        -model.get_cost(x, y, theta)
+    )
+    assert unregularized["LLF"] - regularized["LLF"] == pytest.approx(penalty)
+    assert regularized["AIC"] - unregularized["AIC"] == pytest.approx(
+        2 * penalty
+    )
+    assert regularized["BIC"] - unregularized["BIC"] == pytest.approx(
+        2 * penalty
+    )
+
+
+def test_regularization_switch_has_no_effect_without_penalty(regression_data):
+    x, y, theta = regression_data
+    model = LogisticPolyRegression(degree=1)
+
+    default = model.goodness_of_fit(x, y, theta, bootstrap_samples=20)
+    regularized = model.goodness_of_fit(
+        x,
+        y,
+        theta,
+        regularization=True,
+        bootstrap_samples=20,
+    )
+
+    assert regularized == pytest.approx(default)
+
+
+def test_goodness_of_fit_reports_reproducible_bootstrap_deviance(regression_data):
+    x, y, theta = regression_data
+    model = LogisticPolyRegression(degree=1)
+
+    first = model.goodness_of_fit(
+        x,
+        y,
+        theta,
+        bootstrap_samples=25,
+        bootstrap_seed=123,
+    )
+    second = model.goodness_of_fit(
+        x,
+        y,
+        theta,
+        bootstrap_samples=25,
+        bootstrap_seed=123,
+    )
+
+    assert "chi2" not in first
+    assert "p-value(chi2)" not in first
+    assert first["deviance"] == pytest.approx(2 * model.get_nllf(x, y, theta))
+    assert first["p-value(deviance_bootstrap)"] == second[
+        "p-value(deviance_bootstrap)"
+    ]
+    assert 0 < first["p-value(deviance_bootstrap)"] <= 1
+    assert first["deviance_bootstrap_samples"] == 25
+
+
+def test_covariance_methods_match_sandwich_formulas(regression_data):
+    x, y, theta = regression_data
+    ridge = 0.5
+    model = LogisticPolyRegression(degree=1, lam=(0.0, ridge))
+
+    design = np.column_stack([np.ones_like(x), x])
+    probabilities = model.model(x, theta)
+    weights = probabilities * (1 - probabilities)
+    information = (design.T * weights) @ design
+    bread = information + 2 * ridge * np.eye(2)
+    bread_inv = np.linalg.pinv(bread, hermitian=True)
+
+    scores = (y - probabilities)[:, None] * design
+    robust_meat = scores.T @ scores
+
+    expected_model = bread_inv @ information @ bread_inv
+    expected_robust = bread_inv @ robust_meat @ bread_inv
+
+    np.testing.assert_allclose(
+        model.get_cov(x, y, theta),
+        expected_model,
+    )
+    np.testing.assert_allclose(
+        model.get_cov(x, y, theta, method="robust_sandwich"),
+        expected_robust,
+    )
+    np.testing.assert_allclose(
+        model.get_cov(x, y, theta, method="inverse_hessian"),
+        bread_inv,
+    )
+
+
+def test_covariance_rejects_unknown_method_and_l1_penalty(regression_data):
+    x, y, theta = regression_data
+    model = LogisticPolyRegression(degree=1)
+
+    with pytest.raises(ValueError, match="Unknown covariance method"):
+        model.get_cov(x, y, theta, method="not-a-method")
+
+    l1_model = LogisticPolyRegression(degree=1, lam=(0.1, 0.0))
+    with pytest.raises(ValueError, match="nonzero L1"):
+        l1_model.get_cov(x, y, theta)

+ 17 - 0
tests/test_monotonic.py

@@ -0,0 +1,17 @@
+import numpy as np
+
+from irae_risk.monotonic import forward_map
+
+
+def test_forward_map_is_invariant_under_parameter_sign_symmetries():
+    theta = np.array([1.2, 0.7, -1.5, 2.3])
+    expected = forward_map(theta)
+
+    equivalent_theta = (
+        theta * np.array([1, -1, 1, 1]),
+        theta * np.array([1, 1, -1, -1]),
+        theta * np.array([1, -1, -1, -1]),
+    )
+
+    for equivalent in equivalent_theta:
+        np.testing.assert_allclose(forward_map(equivalent), expected)

+ 97 - 0
tests/test_reporting.py

@@ -0,0 +1,97 @@
+import numpy as np
+import pandas as pd
+
+from irae_risk import reporting
+from irae_risk.logistic import DEFAULT_RANDOM_SEED, LogisticPolyRegression
+
+
+def _reporting_frames():
+    df_data = pd.DataFrame(
+        {
+            "X": [-1.0, 0.0, 1.0, 2.0],
+            "Y": [0, 0, 1, 1],
+            "scale": ["plain"] * 4,
+            "dataset": ["FULL"] * 4,
+        }
+    )
+    df_fit = pd.DataFrame(
+        {
+            "scale": ["plain"],
+            "dataset": ["FULL"],
+            "theta": [np.array([-0.2, 0.8])],
+            "cov": [np.eye(2) * 0.01],
+        }
+    )
+    return df_data, df_fit
+
+
+def test_reporting_builders_read_theta_column():
+    df_data, df_fit = _reporting_frames()
+    model = LogisticPolyRegression(degree=1)
+    df_fit_index = df_fit.set_index(["scale", "dataset"])
+
+    points, fits = reporting.build_plot_data_basic(
+        df_data,
+        df_fit_index,
+        model,
+        n_grid=5,
+    )
+    _, _, intervals = reporting.build_plot_data(
+        df_data,
+        df_fit_index,
+        alpha=0.05,
+        lg=model,
+        n_grid=5,
+    )
+
+    assert len(points) == len(df_data)
+    assert len(fits) == 5
+    assert set(intervals["method"]) == {"normal", "delta"}
+
+
+def test_full_ci_builder_accepts_bootstrap_theta_results():
+    df_data, df_fit = _reporting_frames()
+    model = LogisticPolyRegression(degree=1)
+    df_fit_index = df_fit.set_index(["scale", "dataset"])
+    bootstrap_theta = {
+        ("plain", "FULL", "parametric_boots"): np.array(
+            [[-0.3, 0.7], [-0.2, 0.8], [-0.1, 0.9]]
+        )
+    }
+
+    _, _, intervals = reporting.build_plot_data_full_ci(
+        df_data,
+        df_fit_index,
+        model,
+        alpha=0.05,
+        boots_theta_results=bootstrap_theta,
+        n_grid=5,
+        analytic_methods=(),
+        bootstrap_methods=("parametric_boots",),
+    )
+
+    assert set(intervals["method"]) == {"parametric_boots"}
+    assert set(intervals["ci_source"]) == {"bootstrap"}
+
+
+def test_bootstrap_loader_calls_theta_api(tmp_path):
+    df_data, _ = _reporting_frames()
+
+    class ThetaSampler:
+        def get_normal_theta(self, x, y, m, seed):
+            assert len(x) == len(y) == 4
+            assert seed == DEFAULT_RANDOM_SEED
+            return np.full((m, 2), 1.5)
+
+    result = reporting.load_or_build_bootstrap_theta(
+        df_data,
+        ThetaSampler(),
+        tmp_path,
+        n_boots=3,
+        methods=("normal",),
+    )
+
+    samples = result[("plain", "FULL", "normal")]
+    assert samples.shape == (3, 2)
+    assert np.all(samples == 1.5)
+    assert (tmp_path / "boots_theta_results.pkl").is_file()

Certains fichiers n'ont pas été affichés car il y a eu trop de fichiers modifiés dans ce diff