diff --git a/.github/workflows/draft-pdf.yml b/.github/workflows/draft-pdf.yml new file mode 100644 index 0000000000..e18988985e --- /dev/null +++ b/.github/workflows/draft-pdf.yml @@ -0,0 +1,28 @@ +name: Draft PDF +on: + push: + paths: + - paper/** + - .github/workflows/draft-pdf.yml + +jobs: + paper: + runs-on: ubuntu-latest + name: Paper Draft + steps: + - name: Checkout + uses: actions/checkout@v4 + - name: Build draft PDF + uses: openjournals/openjournals-draft-action@master + with: + journal: joss + # This should be the path to the paper within your repo. + paper-path: paper/paper.md + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: paper + # This is the output path where Pandoc will write the compiled + # PDF. Note, this should be the same directory as the input + # paper.md + path: paper/paper.pdf \ No newline at end of file diff --git a/paper/figures/figure_0.png b/paper/figures/figure_0.png new file mode 100644 index 0000000000..eb33e49ad8 Binary files /dev/null and b/paper/figures/figure_0.png differ diff --git a/paper/paper.md b/paper/paper.md new file mode 100644 index 0000000000..6bd6fd55d6 --- /dev/null +++ b/paper/paper.md @@ -0,0 +1,142 @@ +--- +title: 'ArviZ: a modular and flexible library for exploratory analysis of Bayesian models' +tags: + - Python + - Bayesian statistics + - Bayesian workflow +authors: + - name: Osvaldo A Martin + orcid: 0000-0001-7419-8978 + equal-contrib: true + corresponding: true + affiliation: 1 + - name: Oriol Abril-Pla + orcid: 0000-0002-1847-9481 + equal-contrib: true + corresponding: true + affiliation: 2 + - name: Jordan Deklerk + affiliation: 3 + - name: Seth D. Axen + orcid: 0000-0003-3933-8247 + affiliation: 4 + - name: Colin Carroll + orcid: 0000-0001-6977-0861 + affiliation: 2 + - name: Ari Hartikainen + orcid: 0000-0002-4569-569X + affiliation: 2 + - name: Aki Vehtari + orcid: 0000-0003-2164-9469 + affiliation: "1, 5" +affiliations: + - name: Aalto University, Espoo, Finland + index: 1 + - name: arviz-devs + index: 2 + - name: DICK's Sporting Goods, Coraopolis, Pennsylvania + index: 3 + - name: University of Tübingen + index: 4 + - name: ELLIS Institute Finland + index: 5 +date: 17 January 2026 +bibliography: references.bib +--- + +# Summary + +When working with Bayesian models, a range of related tasks must be addressed beyond inference itself. These include diagnosing the quality of Markov chain Monte Carlo (MCMC) samples, model criticism, model comparison, etc. We collectively refer to these activities as exploratory analysis of Bayesian models. + +In this work, we present a redesigned version of ArviZ, a Python package for exploratory analysis of Bayesian models (EABM). The redesign emphasizes greater user control and modularity. This redesign delivers a more flexible and efficient toolkit for exploratory analysis of Bayesian models. With its renewed focus on modularity and usability, ArviZ is well-positioned to remain an essential tool for Bayesian modelers in both research and applied settings. + + +# Statement of need + +Probabilistic programming has emerged as a powerful paradigm for statistical modeling, accompanied by a growing ecosystem of tools for model specification and inference. Effective modeling requires robust support for uncertainty visualization, sampling diagnostics, model comparison, and model checking [@Gelman_2020; @Martin_2024; @Guo_2024]. ArviZ addresses this gap by providing a unified, backend-agnostic library to perform these tasks. The original ArviZ paper [@Kumar_2019] described the landscape of probabilistic programming tools at the time and the need for a unified, backend-agnostic library for exploratory analysis — a need that has only grown as the ecosystem has expanded. + +The methods implemented in ArviZ are grounded in well-established statistical principles and provide robust, interpretable diagnostics and visualizations [@Vehtari_2017; @Gelman_2019; @Dimitriadis_2021; @Paananen_2021; @Padilla_2021; @Vehtari_2021; @Sailynoja_2022; @Kallioinen_2023; @Sailynoja_2025]. Modern Bayesian practice is a rapidly advancing field in which new methodological developments continually extend the range and complexity of models that can be fit in practice. For instance, the methods to compute key ArviZ features such as `ess`, `rhat`, `loo` or `compare` have been improved between 2019 and now, and new implementations needed significant development effort to adapt to because it wasn't possible to change a part of ArviZ without also adapting everything that interacted with it. The redesign addresses these challenges by modularizing the codebase, allowing individual components to be updated or replaced without affecting the entire system. This modularity not only facilitates maintenance and updates but also encourages community contributions, as developers can focus on specific components without needing to understand the entire codebase. + + +# State of the field + +In the Python Bayesian ecosystem, ArviZ occupies a niche comparable to tools in the R/Stan community such as posterior [@gelman_2013;@Vehtari_2021], loo [@Vehtari_2017;@loo], bayesplot [@bayesplot0;@bayesplot1], priorsense [@Kallioinen_2023], and ggdist [@kay_2024] sharing similar goals while reflecting different language ecosystems and workflows. + +# Research impact statement + +ArviZ [@Kumar_2019] is a Python package for exploratory analysis of Bayesian models that has been widely used in academia and industry since its introduction in 2019, with over 700 citations and 75 million downloads. Its goal is to integrate seamlessly with established probabilistic programming languages and statistical interfaces, such as PyMC [@Abril-pla_2023], Stan (via the cmdstanpy interface) [@stan], Pyro, NumPyro [@Phan_2019; @Bingham_2019], emcee [@emcee], and Bambi [@Capretto_2022], among others. + +The maturity of ArviZ has also led to other initiatives, including ArviZ.jl [@arvizjl_2025] for Julia, PreliZ [@icazatti_2023] for prior elicitation and the development of educational resources [@eabm_2025]. + +# Software design + +The previous ArviZ design divided the package into three submodules, which are now available as three independent installable packages. This redesign emphasizes greater user control and modularity. The new architecture enables users to customize the installation and use of specific components. Key design changes include: + +General functionality, data processing, and data input/output (I/O) have been streamlined and enhanced for greater versatility. Previously, ArviZ used the custom `InferenceData` class to organize and store the high-dimensional outputs of Bayesian inference in a structured, labeled format, enabling efficient analysis, metadata persistence, and serialization. These have been replaced with the `DataTree` class from xarray [@Hoyer_2017], which, like the original `InferenceData`, supports grouping but is more flexible, enabling richer nesting and automatic support for all xarray I/O formats. Additionally, converters allow more flexibility in dimensionality, naming, and indexing of their generated outputs. + +Statistical functions are now accessible through two distinct interfaces: + +* A low-level array interface with only `numpy` [@harris_2020] and `scipy` [@virtanen_2020] as dependencies, intended for advanced users +and developers of third-party libraries. +* A higher-level xarray interface designed for end users, which simplifies usage by automating common tasks and handling metadata. + +Plotting functions have also been redesigned to support modularity at multiple levels: + +* At a high level, ArviZ offers a collection of “batteries-included” plots. These are built-in plotting functions providing sensible defaults for common tasks like MCMC sampling diagnostics, predictive checks, and model comparison. +* At an intermediate level, the application programming interface enables easier customization of batteries-included plots and simplifies the creation of new plots. This is achieved through the `PlotCollection` class, which enables developers and advanced users to focus solely on the plotting logic, delegating any faceting or aesthetic mappings to `PlotCollection`. +* At a lower level, we have improved the separation between computational and plotting logic, reducing code duplication and enhancing modular design. These changes also facilitate support for multiple plotting backends, improving extensibility and maintainability. Currently, ArviZ supports three plotting backends: matplotlib [@Hunter_2007], Bokeh [@Bokeh_2018], and plotly [@plotly_2015]. + +Thanks to this new design, the cost of adding "batteries-included" plots has reduced in more than half even though ArviZ now supports one extra backend. Consequently, redesigned ArviZ already has 37 "batteries-included", 10 more than the 0.x versions. + +## Examples + +For the first example, we use the low-level array interface to compute the effective sample sizes for some fake data. We construct an array resembling data from MCMC sampling with 4 chains and 1000 draws for two posterior variables. When using the array interface we need to specify which axes represent the chains and which the draws. + + import numpy as np + from arviz_stats.base import array_stats + + rng = np.random.default_rng() + samples = rng.normal(size=(4, 1000, 2)) # (chain, draw, variable) + array_stats.ess(samples, chain_axis=0, draw_axis=1) + +The array interface is lightweight and intended for advanced users and library developers. For most users, we instead recommend the xarray interface, as it is more user-friendly and automates many tasks. When converting the NumPy array to a `DataTree`, ArviZ assigns `chain` and `draw` as named dimensions based on the assumed dimension order, so this information is already encoded in the resulting object and does not need to be specified explicitly when calling other functions. + + import arviz as az + dt_samples = az.convert_to_datatree(samples) + az.ess(dt_samples) + +The only required argument for battery-included plots, like `plot_dist`, is the input data, typically a `DataTree` (`dt`). In this example we also apply optional customizations. + + az.style.use('arviz-variat') + dt = az.load_arviz_data("centered_eight") + pc = az.plot_dist( + dt, + kind="dot", + visuals={"dist":{"marker": "C6"}, + "point_estimate_text":False}, + aes={"color": ["school"]} + ); + pc.add_legend("school", loc="outside right upper") + +![plot_dist with color mapped to school dimension.\label{fig:plot_dist}](figures/figure_0.png){width=4.5in} + +To create \autoref{fig:plot_dist} we change the default kind argument in `plot_dist` from "kde" to "dot" to produce quantile dot plots [@kay_2016], and map the school dimension to color so that each school is shown in a different hue. Variables that do not have a school dimension (such as mu and tau) are automatically assigned a neutral color. We also disable the point-estimate text and set a custom marker style for the dots, and finally add a legend for the school. + +For more examples and a more comprehensive overview, see the [ArviZ documentation](https://python.arviz.org/en/latest/) and the [EABM guide](https://arviz-devs.github.io/EABM/) [@eabm_2025]. These resources include a wide range of examples designed for all types of users, from casual users to advanced analysts and developers looking to use ArviZ in their projects or libraries. + +## AI usage disclosure + +Generative AI tools were used during software development and documentation in a limited capacity, primarily to assist with rewording and minor code suggestions. All AI-assisted contributions were reviewed and edited by the authors. Core design decisions, feature development, and scientific or technical judgment were carried out by the authors, and all code and claims were tested and manually verified to ensure correctness. + +## Acknowledgements + +We thank our fiscal sponsor, NumFOCUS, a nonprofit 501(c)(3) public charity, for their operational and financial support. We also thank all the contributors to `arviz`, `arviz-base`, `arviz-stats`, and `arviz-plots` repositories, including code contributors, documentation writers, issue reporters, and users who have provided feedback and suggestions. + +This research was supported by: + +* The Research Council of Finland Flagship Program "Finnish Center for Artificial Intelligence" (FCAI) +* Research Council of Finland grant 340721 +* Essential Open Source Software Round 4 grant by the Chan Zuckerberg Initiative (CZI) +* Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany’s Excellence Strategy – EXC number 2064/1 – Project number 390727645 + +# References diff --git a/paper/references.bib b/paper/references.bib new file mode 100644 index 0000000000..bb8dfef448 --- /dev/null +++ b/paper/references.bib @@ -0,0 +1,415 @@ +@article{Kumar_2019, +doi = {10.21105/joss.01143}, +url = {10.21105/joss.01143}, +year = {2019}, publisher = {The Open Journal}, +volume = {4}, +number = {33}, +pages = {1143}, +author = {Ravin Kumar and Colin Carroll and Ari Hartikainen and Osvaldo Martin}, +title = {{ArviZ} a unified library for exploratory analysis of {Bayesian} models in {Python}}, +journal = {Journal of Open Source Software} +} + +@article{Abril-pla_2023, + title = {{PyMC}: a modern, and comprehensive probabilistic programming framework in {Python}}, + volume = {9}, + issn = {2376-5992}, + shorttitle = {{PyMC}}, + url = {https://peerj.com/articles/cs-1516}, + doi = {10.7717/peerj-cs.1516}, + language = {en}, + urldate = {2023-10-26}, + journal = {PeerJ Computer Science}, + author = {Abril-Pla, Oriol and Andreani, Virgile and Carroll, Colin and Dong, Larry and Fonnesbeck, Christopher J. and Kochurov, Maxim and Kumar, Ravin and Lao, Junpeng and Luhmann, Christian C. and Martin, Osvaldo A. and Osthege, Michael and Vieira, Ricardo and Wiecki, Thomas and Zinkov, Robert}, + month = sep, + year = {2023}, + note = {Publisher: PeerJ Inc.}, + pages = {e1516}, +} + +@article{stan, + title={Stan: A Probabilistic Programming Language}, + volume={76}, + url={https://www.jstatsoft.org/index.php/jss/article/view/v076i01}, + doi={10.18637/jss.v076.i01}, + number={1}, + journal={Journal of Statistical Software}, + author={Carpenter, Bob and Gelman, Andrew and Hoffman, Matthew D. and Lee, Daniel and Goodrich, Ben and Betancourt, Michael and Brubaker, Marcus and Guo, Jiqiang and Li, Peter and Riddell, Allen}, + year={2017}, + pages={1-32} +} + +@article{Phan_2019, + title={Composable Effects for Flexible and Accelerated Probabilistic Programming in {NumPyro}}, + author={Phan, Du and Pradhan, Neeraj and Jankowiak, Martin}, + journal={arXiv preprint arXiv:1912.11554}, + year={2019} +} + +@article{Bingham_2019, + author = {Eli Bingham and + Jonathan P. Chen and + Martin Jankowiak and + Fritz Obermeyer and + Neeraj Pradhan and + Theofanis Karaletsos and + Rohit Singh and + Paul A. Szerlip and + Paul Horsfall and + Noah D. Goodman}, + title = {Pyro: Deep Universal Probabilistic Programming}, + journal = {Journal of Machine Learning Research}, + volume = {20}, + pages = {28:1--28:6}, + year = {2019}, + url = {http://jmlr.org/papers/v20/18-403.html} +} + +@misc{Gelman_2020, + title={Bayesian Workflow}, + author={Andrew Gelman and Aki Vehtari and Daniel Simpson and Charles C. Margossian and Bob Carpenter and Yuling Yao and Lauren Kennedy and Jonah Gabry and Paul-Christian Bürkner and Martin Modrák}, + year={2020}, + eprint={2011.01808}, + archivePrefix={arXiv}, + doi={10.48550/arXiv.2011.01808}, + primaryClass={stat.ME} +} + +@article{Sailynoja_2025, + title={Recommendations for visual predictive checks in {Bayesian} workflow}, + author={S{\"a}ilynoja, Teemu and Johnson, Andrew R and Martin, Osvaldo A and Vehtari, Aki}, + journal={arXiv:2503.01509}, + doi={10.48550/arXiv.2503.01509}, + year={2025}, +} + +@article{Vehtari_2017, + title={Practical {Bayesian} model evaluation using leave-one-out cross-validation and {WAIC}}, + author={Vehtari, Aki and Gelman, Andrew and Gabry, Jonah}, + journal={Statistics and Computing}, + doi={10.1007/s11222-016-9696-4}, + volume={27}, + pages={1413--1432}, + year={2017}, +} + +@article{Vehtari_2021, + title={Rank-normalization, folding, and localization: An improved $\widehat{R}$ for assessing convergence of {MCMC}}, + author={Vehtari, Aki and Gelman, Andrew and Simpson, Daniel and Carpenter, Bob and B{\"u}rkner, Paul Christian}, + journal={Bayes Anal}, + year={2021}, + volume={16}, + doi={10.1214/20-BA1221}, + pages={667--718} +} + +@article{Sailynoja_2022, + title = {Graphical test for discrete uniformity and its applications in goodness-of-fit evaluation and multiple sample comparison}, + volume = {32}, + pages = {1573--1375}, + journal = {Statistics and Computing}, + author = {Säilynoja, Teemu and Bürkner, Paul Christian and Vehtari, Aki}, + doi = {10.1007/s11222-022-10090-6}, + year = {2022} +} + +@article{Kallioinen_2023, +title = {Detecting and diagnosing prior and likelihood sensitivity with power-scaling}, +author = {Noa Kallioinen and Topi Paananen and Paul Christian Bürkner and Aki Vehtari}, +year = {2023}, +journal = {Statistics and Computing}, +volume = {34}, +issue = {57}, +doi = {10.1007/s11222-023-10366-5}, +encoding = {UTF-8}, +} + +@article{Paananen_2021, + author = {Paananen, T. and Piironen, J. and Bürkner, P. C. and Vehtari, A.}, + year = 2021, + title = {Implicitly adaptive importance sampling}, + journal = {Statistics and Computing}, + volume = 31, + number = 16, + doi= {10.1007/s11222-020-09982-2}, +} + +@article{Gelman_2019, +author = {Andrew Gelman and Ben Goodrich and Jonah Gabry and Aki Vehtari}, +title = {R-squared for {Bayesian} regression models}, +journal = {The American Statistician}, +doi={10.1080/00031305.2018.1549100}, +volume = {73}, +number = {3}, +pages = {307-309}, +year = {2019} +} + +@article{Dimitriadis_2021, + title = {Stable reliability diagrams for probabilistic classifiers}, + volume = {118}, + issn = {0027-8424, 1091-6490}, + url = {https://pnas.org/doi/full/10.1073/pnas.2016191118}, + doi = {10.1073/pnas.2016191118}, + language = {en}, + number = {8}, + urldate = {2023-04-12}, + journal = {Proceedings of the National Academy of Sciences}, + author = {Dimitriadis, Timo and Gneiting, Tilmann and Jordan, Alexander I.}, + month = feb, + year = {2021}, + pages = {e2016191118}, +} + +@article{Capretto_2022, + title={Bambi: A Simple Interface for Fitting {Bayesian} Linear Models in {Python}}, + volume={103}, + number={15}, + journal={Journal of Statistical Software}, + author={Capretto, Tomás and Piho, Camen and Kumar, Ravin and Westfall, Jacob and Yarkoni, Tal and Martin, Osvaldo A}, + year={2022}, + pages={1–29} +} + +@article{Hoyer_2017, + title = {{xarray}: {N-D} labeled arrays and datasets in {Python}}, + author = {Hoyer, S. and J. Hamman}, + journal = {Journal of Open Research Software}, + volume = {5}, + number = {1}, + year = {2017}, + publisher = {Ubiquity Press}, + doi = {10.5334/jors.148}, + url = {https://doi.org/10.5334/jors.148} +} + +@article{Hunter_2007, + Author = {Hunter, J. D.}, + Title = {Matplotlib: A {2D} graphics environment}, + Journal = {Computing in Science \& Engineering}, + Volume = {9}, + Number = {3}, + Pages = {90--95}, + abstract = {Matplotlib is a 2D graphics package used for Python for + application development, interactive scripting, and publication-quality + image generation across user interfaces and operating systems.}, + publisher = {IEEE COMPUTER SOC}, + doi = {10.1109/MCSE.2007.55}, + year = 2007 +} + +@manual{Bokeh_2018, +title = {Bokeh: {Python} library for interactive visualization}, +author = {{Bokeh Development Team}}, +year = {2018}, +url = {https://bokeh.pydata.org/en/latest/}, +} + +@online{plotly_2015, +author = {{Plotly Technologies Inc.}}, +title = {Collaborative data science}, +publisher = {Plotly Technologies Inc.}, +address = {Montreal, QC}, +year = {2015}, +url = {https://plot.ly}, +} + +@misc{Guo_2024, + title={{VMC}: A Grammar for Visualizing Statistical Model Checks}, + author={Ziyang Guo and Alex Kale and Matthew Kay and Jessica Hullman}, + year={2024}, + eprint={2408.16702}, + archivePrefix={arXiv}, + primaryClass={cs.HC}, + url={https://arxiv.org/abs/2408.16702}, + doi={10.48550/arXiv.2408.16702}, +} + +@book{Martin_2024, + title = {Bayesian {Analysis} with {Python}: {A} {Practical} {Guide} to probabilistic modeling, 3rd {Edition}}, + isbn = {978-1-80512-716-1}, + shorttitle = {Bayesian {Analysis} with {Python}}, + language = {English}, + publisher = {Packt Publishing}, + author = {Martin, Osvaldo A}, + month = feb, + year = {2024}, +} + + +@article{emcee, + doi = {10.21105/joss.01864}, + url = {https://doi.org/10.21105/joss.01864}, + year = {2019}, + publisher = {The Open Journal}, + volume = {4}, + number = {43}, + pages = {1864}, + author = {Daniel Foreman-Mackey and Will M. Farr and Manodeep Sinha and Anne M. Archibald and David W. Hogg and Jeremy S. Sanders and Joe Zuntz and Peter K. g. Williams and Andrew R. j. Nelson and Miguel de Val-Borro and Tobias Erhardt and Ilya Pashchenko and Oriol Abril Pla}, + title = {{emcee} v3: A {Python} ensemble sampling toolkit for affine-invariant {MCMC}}, + journal = {Journal of Open Source Software} } + + +@book{eabm_2025, + author = {Osvaldo A Martin and Oriol Abril-Pla and Jordan Deklerk}, + title = {Exploratory analysis of {Bayesian} models}, + month = nov, + year = 2025, + publisher = {Zenodo}, + version = {v0.3.0}, + doi = {10.5281/zenodo.15127548}, + url = {https://doi.org/10.5281/zenodo.15127548}, + }, + +@software{arvizjl_2025, + author = {Axen, Seth D and Widmann, David}, + title = {{arviz-devs/ArviZ.jl}: v0.14.0}, + month = sep, + year = 2025, + publisher = {Zenodo}, + version = {v0.14.0}, + doi = {10.5281/zenodo.17194186}, + url = {https://doi.org/10.5281/zenodo.17194186}, +} + +@article{icazatti_2023, +author = {Icazatti, Alejandro and Abril-Pla, Oriol and Klami, Arto and Martin, Osvaldo A}, +doi = {10.21105/joss.05499}, +journal = {Journal of Open Source Software}, +month = sep, +number = {89}, +pages = {5499}, +title = {{PreliZ: A tool-box for prior elicitation}}, +url = {https://joss.theoj.org/papers/10.21105/joss.05499}, +volume = {8}, +year = {2023} +} + +@Misc{bayesplot0, + title = {bayesplot: Plotting for {Bayesian} Models}, + author = {Jonah Gabry and Tristan Mahr}, + year = {2025}, + note = {R package version 1.15.0}, + url = {https://mc-stan.org/bayesplot/}, + doi = {10.32614/cran.package.bayesplot}, +} + +@Article{bayesplot1, + title = {Visualization in {Bayesian} workflow}, + author = {Jonah Gabry and Daniel Simpson and Aki Vehtari and Michael Betancourt and Andrew Gelman}, + year = {2019}, + journal = {Journal of the Royal Statistical Society Series A}, + volume = {182}, + issue = {2}, + pages = {389-402}, + doi = {10.1111/rssa.12378}, +} + +@book{gelman_2013, + address = {Boca Raton}, + edition = {3 edition}, + title = {Bayesian {Data} {Analysis}, {Third} {Edition}}, + isbn = {978-1-4398-4095-5}, + publisher = {Chapman and Hall/CRC}, + author = {Gelman, Andrew and Carlin, John B. and Stern, Hal S. and Dunson, David B. and Vehtari, Aki and Rubin, Donald B.}, + month = nov, + year = {2013}, +} + +@Misc{loo, + title = {loo: Efficient leave-one-out cross-validation and WAIC for Bayesian models}, + year = {2025}, + note = {R package version 2.9.0}, + url = {https://mc-stan.org/loo/}, + doi = {10.32614/cran.package.loo}, +} + +@article{Padilla_2021, + title={Uncertainty Visualization}, + author={Padilla, Lace and Kay, Matthew and Hullman, Jessica}, + journal={Wiley StatsRef: Statistics Reference Online}, + year={2021}, + publisher={Wiley Online Library}, + doi={10.1002/9781118445112.stat08296}, + url={http://space.ucmerced.edu/Downloads/publications/Uncertainty_Visualization_Padilla_Kay_Hullman_2022.pdf} +} + + +@inproceedings{kay_2016, +author = {Kay, Matthew and Kola, Tara and Hullman, Jessica R. and Munson, Sean A.}, +title = {When (ish) is My Bus? User-centered Visualizations of Uncertainty in Everyday, Mobile Predictive Systems}, +year = {2016}, +isbn = {9781450333627}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/2858036.2858558}, +doi = {10.1145/2858036.2858558}, +booktitle = {Proceedings of the 2016 CHI Conference on Human Factors in Computing Systems}, +pages = {5092–5103}, +numpages = {12}, +keywords = {uncertainty visualization, transit predictions, mobile interfac-es, end-user visualization, dotplots}, +location = {San Jose, California, USA}, +series = {CHI '16} +} + +@article{kay_2024, + author = {Matthew Kay}, + title = {{ggdist}: Visualizations of Distributions and Uncertainty in the Grammar of Graphics}, + journal = {IEEE Transactions on Visualization and Computer Graphics}, + year = {2024}, + volume = {30}, + number = {1}, + pages = {414--424}, + doi = {10.1109/TVCG.2023.3327195}, +} + + +@article{harris_2020, + title = {Array programming with {NumPy}}, + author = {Charles R. Harris and K. Jarrod Millman and St{\'{e}}fan J. + van der Walt and Ralf Gommers and Pauli Virtanen and David + Cournapeau and Eric Wieser and Julian Taylor and Sebastian + Berg and Nathaniel J. Smith and Robert Kern and Matti Picus + and Stephan Hoyer and Marten H. van Kerkwijk and Matthew + Brett and Allan Haldane and Jaime Fern{\'{a}}ndez del + R{\'{i}}o and Mark Wiebe and Pearu Peterson and Pierre + G{\'{e}}rard-Marchant and Kevin Sheppard and Tyler Reddy and + Warren Weckesser and Hameer Abbasi and Christoph Gohlke and + Travis E. Oliphant}, + year = {2020}, + month = sep, + journal = {Nature}, + volume = {585}, + number = {7825}, + pages = {357--362}, + doi = {10.1038/s41586-020-2649-2}, + publisher = {Springer Science and Business Media {LLC}}, + url = {https://doi.org/10.1038/s41586-020-2649-2} +} + + +@ARTICLE{virtanen_2020, + author = {Virtanen, Pauli and Gommers, Ralf and Oliphant, Travis E. and + Haberland, Matt and Reddy, Tyler and Cournapeau, David and + Burovski, Evgeni and Peterson, Pearu and Weckesser, Warren and + Bright, Jonathan and {van der Walt}, St{\'e}fan J. and + Brett, Matthew and Wilson, Joshua and Millman, K. Jarrod and + Mayorov, Nikolay and Nelson, Andrew R. J. and Jones, Eric and + Kern, Robert and Larson, Eric and Carey, C J and + Polat, {\.I}lhan and Feng, Yu and Moore, Eric W. and + {VanderPlas}, Jake and Laxalde, Denis and Perktold, Josef and + Cimrman, Robert and Henriksen, Ian and Quintero, E. A. and + Harris, Charles R. and Archibald, Anne M. and + Ribeiro, Ant{\^o}nio H. and Pedregosa, Fabian and + {van Mulbregt}, Paul and {SciPy 1.0 Contributors}}, + title = {{{SciPy} 1.0: Fundamental Algorithms for Scientific + Computing in Python}}, + journal = {Nature Methods}, + year = {2020}, + volume = {17}, + pages = {261--272}, + adsurl = {https://rdcu.be/b08Wh}, + doi = {10.1038/s41592-019-0686-2}, +} + +