Skip to content

Amy #29

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Feb 27, 2025
Merged

Amy #29

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
85c15d9
fix(model): add error handling for results processing when there are …
amyheather Feb 11, 2025
3526aa1
tests(functional): add tests for extreme IAT, NaN, and sampled times
amyheather Feb 11, 2025
d40ead2
fix(exponential): add error handling for invalid mean
amyheather Feb 11, 2025
903be4a
tests(unit): add test for invalid exponential inputs
amyheather Feb 11, 2025
143d73c
refactor(choosing): split choosing parameters notebooks into three se…
amyheather Feb 12, 2025
1ee39a2
feat(replications): add automated method for rep number from sim-tools
amyheather Feb 12, 2025
ce122bc
style(replications): docstrings and linting
amyheather Feb 13, 2025
0a6b022
fix(summary_stats): no stdev/ci for n<3
amyheather Feb 13, 2025
91fa439
feat(replications): streamline confidence_interval_methods so complem…
amyheather Feb 13, 2025
7e1be58
fix/test(replications): wrote some tests, and made some adjustments t…
amyheather Feb 13, 2025
ce30a42
chore(replications): reran notebook to go with last commit
amyheather Feb 13, 2025
023219b
fix(replications): fixed confidence_interval_method and add test
amyheather Feb 13, 2025
1bb6cf4
tests(replication): add back tests for the replications.py objects
amyheather Feb 13, 2025
fe42a2d
refactor(replications): simplify OnlineStatistics
amyheather Feb 13, 2025
cf5efb4
refactor(replications): convert ReplicationsAlgorithm to check multip…
amyheather Feb 14, 2025
79839b9
tests(replications): add more unit tests
amyheather Feb 14, 2025
fd74877
feat(replications): convert maual methods to check multiple metrics
amyheather Feb 14, 2025
06a86c5
fix(replications): prevent bonus rep after limit hit
amyheather Feb 14, 2025
130aa77
tests(replications): update backtest data to multiple metrics
amyheather Feb 14, 2025
e6ee752
chore(general): linting, docstrings, standardisation, rerun, etc.
amyheather Feb 14, 2025
31cd660
feat(replications): add explanation of OnlineStatistics and Replicati…
amyheather Feb 14, 2025
842bbe5
fix(replications): ReplicationsAlgorithm now can run initial replicat…
amyheather Feb 26, 2025
7e4ca18
tests(replication): add test related to recent fix - that algorithm o…
amyheather Feb 26, 2025
bf81ec2
chore(docs): minor corrections to replications.py docstring and hsma_…
amyheather Feb 26, 2025
be7988a
tests(replication): add test for ReplicationsAlgorithm when initial r…
amyheather Feb 26, 2025
5df7a0c
docs(replications): add explanation of ReplicationsAlgorithm
amyheather Feb 27, 2025
183df48
tests(model): add extreme nurses test
amyheather Feb 27, 2025
9dff66e
chore(linting): lint replications.py
amyheather Feb 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,6 @@ Table of contents:

## 📌  Introduction

<!--TODO: Add links to STARS, relevant publication, and https://github.com/pythonhealthdatascience/rap_des/ -->

This repository provides a template for building discrete-event simulation (DES) models in Python.

😊 **Simple:** Easy-to-follow code structure using [SimPy](https://simpy.readthedocs.io/en/latest/). Implements a simple M/M/s queueing model in which patients arrive, wait to see a nurse, have a consultation with the nurse and then leave. Follows a modular structure: uses object-oriented programming, with the simulation implemented through classes.
Expand All @@ -43,7 +41,7 @@ This repository provides a template for building discrete-event simulation (DES)
* ["Levels of RAP" framework](https://nhsdigital.github.io/rap-community-of-practice/introduction_to_RAP/levels_of_RAP/) from the NHS RAP Community of Practice (`docs/nhs_rap.md`).
* Recommendations from [Heather et al. 2025](https://doi.org/10.48550/arXiv.2501.13137) "*On the reproducibility of discrete-event simulation studies in health research: an empirical study using open models*" (`docs/heather_2025.md`).

🚀 **Extendable:** This template adapts from Sammi Rosser and Dan Chalk (2024) ["HSMA - the little book of DES"](https://github.com/hsma-programme/hsma6_des_book). The book includes additional advanced features that can be used to extend the model in this template, including:
🚀 **Extendable:** This template is partly adapted from Sammi Rosser and Dan Chalk (2024) ["HSMA - the little book of DES"](https://github.com/hsma-programme/hsma6_des_book). The book includes additional advanced features that can be used to extend the model in this template, including:

* Multiple activities
* Branching paths
Expand Down Expand Up @@ -247,10 +245,12 @@ repo/
The overall run time will vary depending on how the template model is used. A few example implementations are provided in `notebooks/` and the run times for these were:

* `analysis.ipynb` - 23s
* `choosing_parameters.ipynb` - 22s
* `choosing_cores.ipynb` - 21s
* `choosing_replications.ipynb` - 11s
* `choosing_warmup.ipynb` - 2s
* `generate_exp_results.ipynb` - 0s

<!--TODO: Add test times -->
<!--TODO: Update run times -->

These times were obtained on an Intel Core i7-12700H with 32GB RAM running Ubuntu 24.04.1 Linux.

Expand All @@ -268,10 +268,10 @@ You can also cite the GitHub repository:

Researcher details:

| Contributor | Role | ORCID | GitHub |
| --- | --- | --- | --- |
| Amy Heather | Author | [![ORCID: Heather](https://img.shields.io/badge/ORCID-0000--0002--6596--3479-brightgreen)](https://orcid.org/0000-0002-6596-3479) | https://github.com/amyheather |
| Tom Monks | Code review | [![ORCID: Monks](https://img.shields.io/badge/ORCID-0000--0003--2631--4481-brightgreen)](https://orcid.org/0000-0003-2631-4481) | https://github.com/TomMonks |
| Contributor | ORCID | GitHub |
| --- | --- | --- |
| Amy Heather | [![ORCID: Heather](https://img.shields.io/badge/ORCID-0000--0002--6596--3479-brightgreen)](https://orcid.org/0000-0002-6596-3479) | https://github.com/amyheather |
| Tom Monks | [![ORCID: Monks](https://img.shields.io/badge/ORCID-0000--0003--2631--4481-brightgreen)](https://orcid.org/0000-0003-2631-4481) | https://github.com/TomMonks |

<br>

Expand Down
2 changes: 1 addition & 1 deletion docs/hsma_changes.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Changes from the HSMA model

This template model is adapted from Sammi Rosser and Dan Chalk (2024) HSMA - the little book of DES (https://github.com/hsma-programme/hsma6_des_book) (MIT Licence). It also uses an exponentional distribution class from Monks (2021) sim-tools: fundamental tools to support the simulation process in python (https://github.com/TomMonks/sim-tools) (MIT Licence).
This template model is based on a few sources - including: Sammi Rosser and Dan Chalk (2024) HSMA - the little book of DES (https://github.com/hsma-programme/hsma6_des_book) (MIT Licence).

This page explains some of the differences between the models in the HSMA book, and this template.

Expand Down
411 changes: 411 additions & 0 deletions images/replications_algorithm.drawio

Large diffs are not rendered by default.

Binary file added images/replications_algorithm.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
145 changes: 145 additions & 0 deletions images/replications_statistics.drawio
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" version="26.0.13">
<diagram name="Page-1" id="ynTKS2v_TZv17swCPKiS">
<mxGraphModel dx="1630" dy="915" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="827" pageHeight="1169" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<mxCell id="q0k77vlWbUJt_Vhd_Qly-42" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=none;fillColor=#EEEEEE;fontStyle=1;opacity=50;" vertex="1" parent="1">
<mxGeometry x="336.5" y="40" width="543.5" height="436.5" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-67" value="" style="rounded=1;whiteSpace=wrap;html=1;strokeColor=none;fillColor=#EEEEEE;fontStyle=1;opacity=50;" parent="1" vertex="1">
<mxGeometry x="40" y="111" width="270" height="565.5" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="ltitkqDnKHNBnyyiyaz9-6" target="q0k77vlWbUJt_Vhd_Qly-5">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-6" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;OnlineStatistics&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#68A9D4;" parent="1" vertex="1">
<mxGeometry x="353.26" y="56.5" width="154.75" height="40" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-41" value="Key:" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;fontStyle=1;" parent="1" vertex="1">
<mxGeometry x="756.5" y="495.5" width="45" height="25" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-43" value="Methods or properties" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" parent="1" vertex="1">
<mxGeometry x="711.5" y="608.5" width="135" height="30" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-44" value="Instance of class" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A9E4F5;" parent="1" vertex="1">
<mxGeometry x="711.5" y="569.5" width="135" height="30" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-45" value="Class" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#68A9D4;" parent="1" vertex="1">
<mxGeometry x="711.5" y="531" width="135" height="30" as="geometry" />
</mxCell>
<mxCell id="ltitkqDnKHNBnyyiyaz9-88" value="" style="curved=1;endArrow=classic;html=1;rounded=1;dashed=1;exitX=1;exitY=0;exitDx=0;exitDy=0;" parent="1" edge="1">
<mxGeometry width="50" height="50" relative="1" as="geometry">
<mxPoint x="292.8199999999998" y="505" as="sourcePoint" />
<mxPoint x="620" y="366.5" as="targetPoint" />
<Array as="points">
<mxPoint x="660" y="526.5" />
<mxPoint x="550" y="386.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-1" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;init()&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="398.43999999999994" y="206.5" width="64.37" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-34" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0.75;entryY=0;entryDx=0;entryDy=0;curved=0;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-3" target="q0k77vlWbUJt_Vhd_Qly-32">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-3" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;update()&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="389.85" y="356.5" width="81.56" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-7" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-5" target="q0k77vlWbUJt_Vhd_Qly-1">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-22" style="edgeStyle=orthogonalEdgeStyle;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;curved=0;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-5">
<mxGeometry relative="1" as="geometry">
<mxPoint x="730" y="196.5" as="targetPoint" />
</mxGeometry>
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-5" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;stats&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A9E4F5;" vertex="1" parent="1">
<mxGeometry x="391.38" y="127.5" width="78.5" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-9" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" target="q0k77vlWbUJt_Vhd_Qly-3">
<mxGeometry relative="1" as="geometry">
<mxPoint x="431.01" y="306.5" as="sourcePoint" />
</mxGeometry>
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-8" value="Sets up class, including empty variables to store results, and calls update() for each value in data (if provided)" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="343.13" y="251.5" width="175" height="40" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-10" value="Updates count and running calculation of mean and variance.&lt;div&gt;Will call observer.update().&lt;/div&gt;" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="336.5" y="386.5" width="188.25" height="50" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-12" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;variance()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="580" y="287" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-13" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;std()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="680.5" y="287" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-14" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;std_error()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="778" y="287" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-15" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;half_width()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="635.5" y="326" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-16" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;lci()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="734" y="325" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-17" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;uci()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="635.5" y="362" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-18" value="&lt;span style=&quot;font-size: 14px;&quot;&gt;deviation()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="734" y="362" width="90" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-19" value="Can calculate various statistics based on the current count, mean and variance. These are marked @property meaning they are returned by e.g. stats.std rather than stats.std()" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="620.5" y="217" width="210" height="50" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-27" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-24" target="q0k77vlWbUJt_Vhd_Qly-25">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-24" value="&lt;font style=&quot;font-size: 18px;&quot;&gt;ReplicationTabulizer&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#68A9D4;" vertex="1" parent="1">
<mxGeometry x="80" y="127.5" width="190" height="40" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-35" style="edgeStyle=orthogonalEdgeStyle;shape=connector;curved=0;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;endArrow=classic;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-25" target="q0k77vlWbUJt_Vhd_Qly-29">
<mxGeometry relative="1" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-36" style="edgeStyle=orthogonalEdgeStyle;shape=connector;curved=0;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;endArrow=classic;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-25" target="q0k77vlWbUJt_Vhd_Qly-32">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="166" y="376.5" />
<mxPoint x="235" y="376.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-41" style="edgeStyle=orthogonalEdgeStyle;shape=connector;curved=0;rounded=1;orthogonalLoop=1;jettySize=auto;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=default;align=center;verticalAlign=middle;fontFamily=Helvetica;fontSize=11;fontColor=default;labelBackgroundColor=default;endArrow=classic;" edge="1" parent="1" source="q0k77vlWbUJt_Vhd_Qly-25" target="q0k77vlWbUJt_Vhd_Qly-37">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="166" y="556.5" />
<mxPoint x="238" y="556.5" />
</Array>
</mxGeometry>
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-25" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;observer&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#A9E4F5;" vertex="1" parent="1">
<mxGeometry x="127.13" y="202" width="78.5" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-29" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;init()&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="205.62999999999994" y="282" width="64.37" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-31" value="Creates empty lists to store results" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="182.82" y="312" width="110" height="40" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-32" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;update()&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="200" y="456.5" width="70" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-33" value="Add statistics from stats to the lists" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="180" y="488" width="110" height="40" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-37" value="&lt;font style=&quot;font-size: 14px;&quot;&gt;summary_table()&lt;/font&gt;" style="rounded=1;whiteSpace=wrap;html=1;fillColor=#F2A25C;" vertex="1" parent="1">
<mxGeometry x="179.22999999999996" y="590" width="117.18" height="30" as="geometry" />
</mxCell>
<mxCell id="q0k77vlWbUJt_Vhd_Qly-39" value="Converts lists into a dataframe" style="text;html=1;align=center;verticalAlign=middle;whiteSpace=wrap;rounded=1;" vertex="1" parent="1">
<mxGeometry x="179.23000000000002" y="617" width="110" height="41.5" as="geometry" />
</mxCell>
</root>
</mxGraphModel>
</diagram>
</mxfile>
Binary file added images/replications_statistics.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading