From 277da0c03c0eb03e0b46d4c6ac3991e019fc3b12 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Mon, 22 Apr 2024 14:39:17 -0600 Subject: [PATCH 1/8] Hospitalizations to 'hospital admissions (or simply admissions)' --- .../_sources/msei_reference/model.rst.txt | 8 +- docs/source/msei_reference/model.rst | 8 +- model/README.md | 2 +- .../figure-commonmark/output-rt-output-1.png | Bin 26746 -> 26868 bytes model/docs/pyrenew_demo.md | 219 +++++++++++++----- model/docs/pyrenew_demo.qmd | 14 +- .../fig-randwalk-output-1.png | Bin 29868 -> 29905 bytes .../fig-sampled-rt-output-1.png | Bin 38150 -> 38249 bytes model/equations.md | 8 +- .../src/pyrenew/latent/hospitaladmissions.py | 29 ++- model/src/pyrenew/model/__init__.py | 6 +- ...hospitalizations.py => admissionsmodel.py} | 95 ++++---- ...renewal.py => rtinfectionsrenewalmodel.py} | 13 +- ...lizations.py => test_latent_admissions.py} | 4 +- model/src/test/test_model_hospitalizations.py | 64 ++--- 15 files changed, 283 insertions(+), 187 deletions(-) rename model/src/pyrenew/model/{hospitalizations.py => admissionsmodel.py} (66%) rename model/src/pyrenew/model/{rtinfectionsrenewal.py => rtinfectionsrenewalmodel.py} (96%) rename model/src/test/{test_latent_hospitalizations.py => test_latent_admissions.py} (94%) diff --git a/docs/build/html/_sources/msei_reference/model.rst.txt b/docs/build/html/_sources/msei_reference/model.rst.txt index d430154c..21109cc4 100644 --- a/docs/build/html/_sources/msei_reference/model.rst.txt +++ b/docs/build/html/_sources/msei_reference/model.rst.txt @@ -1,10 +1,10 @@ MSEI Model ========== -Hospitalizations ----------------- +Hospital Admissions +------------------- -.. automodule:: pyrenew.model.hospitalizations +.. automodule:: pyrenew.model.admissionsmodel :members: :undoc-members: :show-inheritance: @@ -12,7 +12,7 @@ Hospitalizations Reproduction Number Renewal Infections -------------------------------------- -.. automodule:: pyrenew.model.rtinfectionsrenewal +.. automodule:: pyrenew.model.rtinfectionsrenewalmodel :members: :undoc-members: :show-inheritance: diff --git a/docs/source/msei_reference/model.rst b/docs/source/msei_reference/model.rst index d430154c..21109cc4 100644 --- a/docs/source/msei_reference/model.rst +++ b/docs/source/msei_reference/model.rst @@ -1,10 +1,10 @@ MSEI Model ========== -Hospitalizations ----------------- +Hospital Admissions +------------------- -.. automodule:: pyrenew.model.hospitalizations +.. automodule:: pyrenew.model.admissionsmodel :members: :undoc-members: :show-inheritance: @@ -12,7 +12,7 @@ Hospitalizations Reproduction Number Renewal Infections -------------------------------------- -.. automodule:: pyrenew.model.rtinfectionsrenewal +.. automodule:: pyrenew.model.rtinfectionsrenewalmodel :members: :undoc-members: :show-inheritance: diff --git a/model/README.md b/model/README.md index 8c873ad6..d1f1e698 100755 --- a/model/README.md +++ b/model/README.md @@ -12,4 +12,4 @@ pip install git+https://github.com/cdcent/cfa-pyrenew.git ## Demo -The [`docs`](docs) folder contains quarto documents to get you started. It simulates observed hospitalizations using a simple renewal process model and then fits it using a No-U-Turn Sampler. +The [`docs`](docs) folder contains quarto documents to get you started. It simulates observed hospital admissions using a simple renewal process model and then fits it using a No-U-Turn Sampler. diff --git a/model/docs/getting-started_files/figure-commonmark/output-rt-output-1.png b/model/docs/getting-started_files/figure-commonmark/output-rt-output-1.png index c67d4967d8e6fdbccdf035c950f08adc9e57e329..af600fea0ae5706477bc83bb3a511ba97c40568a 100644 GIT binary patch literal 26868 zcmdRVRa8~cyYD6>H?WcJl#-I}*rarqbc29&cSx!{ zmwR8&1H++XyI6b9Z+_peW~7Re3A0$YvUK$@akc;{nz%aJeR8$4F{O03aCWizqYgX-)lpX01q8zU{_h7a>WB@AS@Zp|bUF32!s4 ze1rK2;irCd_t0!Y6zV?5+8{*1&=vM1±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

18ayKLgwXsPFn|cj|TL2f>A% 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 literal 26746 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 a@%MMQhNvAl1=0.4.24 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from pyrenew) (0.4.26) + Requirement already satisfied: numpy<2.0.0,>=1.26.4 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from pyrenew) (1.26.4) + Requirement already satisfied: numpyro<0.14.0,>=0.13.2 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from pyrenew) (0.13.2) + Requirement already satisfied: pillow<11.0.0,>=10.3.0 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from pyrenew) (10.3.0) + Requirement already satisfied: polars<0.21.0,>=0.20.13 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from pyrenew) (0.20.19) + Requirement already satisfied: ml-dtypes>=0.2.0 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax<0.5.0,>=0.4.24->pyrenew) (0.4.0) + Requirement already satisfied: opt-einsum in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax<0.5.0,>=0.4.24->pyrenew) (3.3.0) + Requirement already satisfied: scipy>=1.9 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax<0.5.0,>=0.4.24->pyrenew) (1.13.0) + Requirement already satisfied: jaxlib>=0.4.14 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro<0.14.0,>=0.13.2->pyrenew) (0.4.26) + Requirement already satisfied: multipledispatch in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro<0.14.0,>=0.13.2->pyrenew) (1.0.0) + Requirement already satisfied: tqdm in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro<0.14.0,>=0.13.2->pyrenew) (4.66.2) + Note: you may need to restart the kernel to use updated packages. + You’ll also need working installations of `matplotlib`, `numpy`, `jax`, `numpyro`, and `polars`: ``` python -python -m pip install "matplotlib" "numpy" "jax" "numpyro" "polars" +pip install matplotlib numpy jax numpyro polars ``` -Run the following import section to call external modules and functions -necessary to run the `pyrenew` demo. The `import` statement imports the -module and the `as` statement renames the module for use within this -script. The `from` statement imports a specific function from a module -(named after the `.`) within a package (named before the `.`). + Requirement already satisfied: matplotlib in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (3.8.3) + Requirement already satisfied: numpy in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (1.26.4) + Requirement already satisfied: jax in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (0.4.26) + Requirement already satisfied: numpyro in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (0.13.2) + Requirement already satisfied: polars in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (0.20.19) + Requirement already satisfied: contourpy>=1.0.1 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (1.2.1) + Requirement already satisfied: cycler>=0.10 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (0.12.1) + Requirement already satisfied: fonttools>=4.22.0 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (4.50.0) + Requirement already satisfied: kiwisolver>=1.3.1 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (1.4.5) + Requirement already satisfied: packaging>=20.0 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (24.0) + Requirement already satisfied: pillow>=8 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (10.3.0) + Requirement already satisfied: pyparsing>=2.3.1 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (3.1.2) + Requirement already satisfied: python-dateutil>=2.7 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from matplotlib) (2.9.0.post0) + Requirement already satisfied: ml-dtypes>=0.2.0 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax) (0.4.0) + Requirement already satisfied: opt-einsum in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax) (3.3.0) + Requirement already satisfied: scipy>=1.9 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from jax) (1.13.0) + Requirement already satisfied: jaxlib>=0.4.14 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro) (0.4.26) + Requirement already satisfied: multipledispatch in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro) (1.0.0) + Requirement already satisfied: tqdm in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from numpyro) (4.66.2) + Requirement already satisfied: six>=1.5 in /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages (from python-dateutil>=2.7->matplotlib) (1.16.0) + Note: you may need to restart the kernel to use updated packages. + +To begin, run the following import section to call external modules and +functions necessary to run the `pyrenew` demo. The `import` statement +imports the module and the `as` statement renames the module for use +within this script. The `from` statement imports a specific function +from a module (named after the `.`) within a package (named before the +`.`). ``` python import matplotlib as mpl @@ -37,7 +74,21 @@ import numpyro.distributions as dist ``` python from pyrenew.process import SimpleRandomWalkProcess ``` -To understand the simple random walk process underlying the sampling within the renewal process model, we first examine a single random walk path. Using the `sample` method from an instance of the `SimpleRandomWalkProcess` class, we first create an instance of the `SimpleRandomWalkProcess` class with a normal distribution of mean = 0 and standard deviation = 0.0001 as its input. Next, the `with` statement sets the seed for the random number generator for the duration of the block that follows. Inside the `with` block, the `q_samp = q.sample(duration=100)` generates the sample instance over a duration of 100 time units. Finally, this single random walk process is visualized using `matplot.pyplot` to plot the exponential of the sample instance. + + An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu. + +To understand the simple random walk process underlying the sampling +within the renewal process model, we first examine a single random walk +path. Using the `sample` method from an instance of the +`SimpleRandomWalkProcess` class, we first create an instance of the +`SimpleRandomWalkProcess` class with a normal distribution of mean = 0 +and standard deviation = 0.0001 as its input. Next, the `with` statement +sets the seed for the random number generator for the duration of the +block that follows. Inside the `with` block, the +`q_samp = q.sample(duration=100)` generates the sample instance over a +duration of 100 time units. Finally, this single random walk process is +visualized using `matplot.pyplot` to plot the exponential of the sample +instance. ``` python np.random.seed(3312) @@ -50,37 +101,54 @@ plt.plot(np.exp(q_samp[0])) ![](pyrenew_demo_files/figure-commonmark/fig-randwalk-output-1.png) +Next, import several additional functions from the `latent` module of +the `pyrenew` package to model infections, hospital admissions, initial +infections, and hospitalization rate due to infection. -Next, import several additional functions from the `latent` module of the `pyrenew` package to model infections, hospital admissions, initial infections, and hospitalization rate due to infection. - -```{python} +``` python from pyrenew.latent import ( Infections, HospitalAdmissions, Infections0, InfectHospRate, ) ``` -Additionally, import several classes from Pyrenew, including a Poisson observation process, determininstic PMF and variable classes, the Pyrenew hospitalization model, and a renewal modle (Rt) random walk process: +Additionally, import several classes from Pyrenew, including a Poisson +observation process, determininstic PMF and variable classes, the +Pyrenew hospitalization model, and a renewal modle (Rt) random walk +process: -```{python} +``` python from pyrenew.observation import PoissonObservation from pyrenew.deterministic import DeterministicPMF, DeterministicVariable -from pyrenew.model import HospitalizationsModel +from pyrenew.model import HospitalAdmissionsModel from pyrenew.process import RtRandomWalkProcess ``` -To initialize a model run, we first define initial conditions, including: +To initialize the model, we first define initial conditions, including: -1) deterministic generation time, defined as an instance of the `DeterministicPMF` class, which gives the probability of each possible outcome for a discrete random variable given as a JAX NumPy array of four possible outcomes +1) deterministic generation time, defined as an instance of the + `DeterministicPMF` class, which gives the probability of each + possible outcome for a discrete random variable given as a JAX NumPy + array of four possible outcomes -2) initial infections at the start of simulation as a log-normal distribution with mean = 0 and standard deviation = 1 +2) initial infections at the start of simulation as a log-normal + distribution with mean = 0 and standard deviation = 1 -3) latent infections as an instance of the `Infections` class with default settings +3) latent infections as an instance of the `Infections` class with + default settings -4) latent hospitalization process, modeled by first defining the time interval from infections to hospitalizations as a `DeterministicPMF` input with 18 possible outcomes and corresponding probabilities given by the values in the array. The `HospitalAdmissions` function then takes in this defined time interval, as well as defining the rate at which infections are admitted to the hospital due to infection, modeled as a log-normal distribution with mean = `jnp.log(0.05)` and standard deviation = 0.05. +4) latent hospitalization process, modeled by first defining the time + interval from infections to hospitalizations as a `DeterministicPMF` + input with 18 possible outcomes and corresponding probabilities + given by the values in the array. The `HospitalAdmissions` function + then takes in this defined time interval, as well as defining the + rate at which infections are admitted to the hospital due to + infection, modeled as a log-normal distribution with mean = + `jnp.log(0.05)` and standard deviation = 0.05. -5) hospitalization observation process, modeled with a Poisson distribution +5) hospitalization observation process, modeled with a Poisson + distribution -6) an Rt random walk process with default settings +6) an Rt random walk process with default settings ``` python # Initializing model components: @@ -103,35 +171,39 @@ inf_hosp_int = DeterministicPMF( (jnp.array([0, 0, 0,0,0,0,0,0,0,0,0,0,0, 0.25, 0.5, 0.1, 0.1, 0.05]),), ) -latent_hospitalizations = HospitalAdmissions( +latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp_int, infect_hosp_rate_dist = InfectHospRate( dist=dist.LogNormal(jnp.log(0.05), 0.05), ), ) -# 5) An observation process for the hospitalizations -observed_hospitalizations = PoissonObservation() +# 5) An observation process for the hospital admissions +admissions_process = PoissonObservation() # 6) A random walk process (it could be deterministic using # pyrenew.process.DeterministicProcess()) Rt_process = RtRandomWalkProcess() ``` -The `HospitalizationsModel` is then initialized using the initial conditions just defined: +The `HospitalAdmissionsModel` is then initialized using the initial +conditions just defined: ``` python # Initializing the model -hospmodel = HospitalizationsModel( +hospmodel = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, - latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=observed_hospitalizations, + latent_admissions=latent_admissions, + admissions_process=admissions_process, latent_infections=latent_infections, Rt_process=Rt_process ) ``` +Next, we sample from the `hospmodel` for 30 time steps and view the +output of a single run: + ``` python with seed(rng_seed=np.random.randint(1, 60)): x = hospmodel.sample(n_timepoints=30) @@ -158,6 +230,10 @@ x 0.01345188], dtype=float32), sampled=Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], dtype=int32)) +Visualizations of the single model output show (top) infections over the +30 time steps, (middle) hospitalizations over the 30 time steps, and +(bottom) + ``` python fig, ax = plt.subplots(nrows=3, sharex=True) ax[0].plot(x.infections) @@ -170,65 +246,84 @@ for axis in ax[:-1]: ![](pyrenew_demo_files/figure-commonmark/fig-hosp-output-1.png) +To fit the `hospmodel` to the simulated data, we call `hospmodel.run()`, +an MCMC algorithm, with the arguments generated in `hospmodel` object, +using 1000 warmup stepts and 1000 samples to draw from the posterior +distribution of the model parameters. The model is run for +`len(x.sampled)-1` time steps with the seed set by +`jax.random.PRNGKey()` + ``` python # from numpyro.infer import MCMC, NUTS hospmodel.run( num_warmup=1000, num_samples=1000, - observed_hospitalizations=x.sampled, + admissions_process=x.sampled, n_timepoints = len(x.sampled)-1, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), ) ``` +Print a summary of the model: + ``` python hospmodel.print_summary() ``` mean std median 5.0% 95.0% n_eff r_hat - I0 1.26 1.09 0.96 0.09 2.41 1114.64 1.00 - IHR 0.05 0.00 0.05 0.05 0.05 2747.53 1.00 - Rt0 1.23 0.17 1.23 0.95 1.52 1533.77 1.00 - Rt_transformed_rw_diffs[0] 0.00 0.03 -0.00 -0.04 0.04 1574.38 1.00 - Rt_transformed_rw_diffs[1] 0.00 0.03 0.00 -0.04 0.04 2557.65 1.00 - Rt_transformed_rw_diffs[2] 0.00 0.02 0.00 -0.04 0.04 2245.16 1.00 - Rt_transformed_rw_diffs[3] 0.00 0.02 0.00 -0.03 0.04 2423.80 1.00 - Rt_transformed_rw_diffs[4] 0.00 0.02 0.00 -0.03 0.04 2461.65 1.00 - Rt_transformed_rw_diffs[5] 0.00 0.02 0.00 -0.04 0.04 2363.57 1.00 - Rt_transformed_rw_diffs[6] 0.00 0.02 0.00 -0.04 0.04 1720.93 1.00 - Rt_transformed_rw_diffs[7] -0.00 0.02 -0.00 -0.04 0.04 3851.66 1.00 - Rt_transformed_rw_diffs[8] -0.00 0.03 -0.00 -0.04 0.04 1824.74 1.00 - Rt_transformed_rw_diffs[9] 0.00 0.02 0.00 -0.04 0.04 1739.32 1.00 - Rt_transformed_rw_diffs[10] 0.00 0.02 0.00 -0.04 0.04 1944.43 1.00 - Rt_transformed_rw_diffs[11] -0.00 0.03 0.00 -0.04 0.04 1558.14 1.00 - Rt_transformed_rw_diffs[12] 0.00 0.02 0.00 -0.04 0.04 2182.35 1.00 - Rt_transformed_rw_diffs[13] -0.00 0.03 0.00 -0.04 0.04 1175.35 1.00 - Rt_transformed_rw_diffs[14] -0.00 0.03 -0.00 -0.04 0.04 1540.25 1.00 - Rt_transformed_rw_diffs[15] -0.00 0.03 -0.00 -0.04 0.04 2367.82 1.00 - Rt_transformed_rw_diffs[16] -0.00 0.02 -0.00 -0.04 0.04 1636.30 1.00 - Rt_transformed_rw_diffs[17] 0.00 0.03 0.00 -0.04 0.04 1978.96 1.00 - Rt_transformed_rw_diffs[18] 0.00 0.02 -0.00 -0.04 0.04 1589.27 1.00 - Rt_transformed_rw_diffs[19] 0.00 0.03 -0.00 -0.04 0.04 1691.06 1.00 - Rt_transformed_rw_diffs[20] -0.00 0.02 -0.00 -0.04 0.04 2562.99 1.00 - Rt_transformed_rw_diffs[21] 0.00 0.02 -0.00 -0.04 0.04 2352.40 1.00 - Rt_transformed_rw_diffs[22] 0.00 0.03 0.00 -0.04 0.04 1971.40 1.00 - Rt_transformed_rw_diffs[23] 0.00 0.02 0.00 -0.04 0.04 2013.90 1.00 - Rt_transformed_rw_diffs[24] 0.00 0.03 0.00 -0.04 0.04 2022.94 1.00 - Rt_transformed_rw_diffs[25] -0.00 0.02 -0.00 -0.04 0.03 1981.62 1.00 - Rt_transformed_rw_diffs[26] 0.00 0.03 0.00 -0.04 0.05 2696.36 1.00 - Rt_transformed_rw_diffs[27] -0.00 0.03 0.00 -0.04 0.04 2003.38 1.00 - Rt_transformed_rw_diffs[28] -0.00 0.02 -0.00 -0.04 0.04 1843.27 1.00 - Rt_transformed_rw_diffs[29] -0.00 0.03 -0.00 -0.04 0.04 1780.88 1.00 + I0 1.27 1.10 0.97 0.10 2.42 1132.34 1.00 + IHR 0.05 0.00 0.05 0.05 0.05 2306.45 1.00 + Rt0 1.23 0.17 1.23 0.93 1.48 1327.22 1.00 + Rt_transformed_rw_diffs[0] -0.00 0.02 -0.00 -0.04 0.04 1404.95 1.00 + Rt_transformed_rw_diffs[1] 0.00 0.03 0.00 -0.04 0.04 2280.86 1.00 + Rt_transformed_rw_diffs[2] -0.00 0.02 -0.00 -0.04 0.04 2119.83 1.00 + Rt_transformed_rw_diffs[3] 0.00 0.02 -0.00 -0.04 0.04 2196.86 1.00 + Rt_transformed_rw_diffs[4] 0.00 0.02 -0.00 -0.03 0.04 2391.45 1.00 + Rt_transformed_rw_diffs[5] 0.00 0.03 0.00 -0.04 0.04 2043.02 1.00 + Rt_transformed_rw_diffs[6] 0.00 0.02 0.00 -0.04 0.04 1514.40 1.00 + Rt_transformed_rw_diffs[7] -0.00 0.02 -0.00 -0.04 0.04 2619.69 1.00 + Rt_transformed_rw_diffs[8] 0.00 0.03 0.00 -0.04 0.04 1883.84 1.00 + Rt_transformed_rw_diffs[9] 0.00 0.03 0.00 -0.04 0.04 2015.66 1.00 + Rt_transformed_rw_diffs[10] 0.00 0.02 0.00 -0.04 0.04 2045.47 1.00 + Rt_transformed_rw_diffs[11] -0.00 0.03 0.00 -0.04 0.04 1615.10 1.00 + Rt_transformed_rw_diffs[12] 0.00 0.02 0.00 -0.04 0.04 2206.32 1.00 + Rt_transformed_rw_diffs[13] 0.00 0.03 0.00 -0.04 0.04 1175.93 1.00 + Rt_transformed_rw_diffs[14] -0.00 0.03 -0.00 -0.04 0.04 1606.26 1.00 + Rt_transformed_rw_diffs[15] -0.00 0.03 -0.00 -0.04 0.04 2344.62 1.00 + Rt_transformed_rw_diffs[16] -0.00 0.02 0.00 -0.04 0.04 1522.33 1.00 + Rt_transformed_rw_diffs[17] 0.00 0.03 0.00 -0.04 0.04 2157.17 1.00 + Rt_transformed_rw_diffs[18] -0.00 0.02 -0.00 -0.04 0.04 1594.95 1.00 + Rt_transformed_rw_diffs[19] 0.00 0.03 -0.00 -0.04 0.04 1698.70 1.00 + Rt_transformed_rw_diffs[20] 0.00 0.02 0.00 -0.04 0.04 1726.18 1.00 + Rt_transformed_rw_diffs[21] 0.00 0.02 -0.00 -0.04 0.04 2386.35 1.00 + Rt_transformed_rw_diffs[22] 0.00 0.03 0.00 -0.04 0.04 2028.63 1.00 + Rt_transformed_rw_diffs[23] 0.00 0.02 0.00 -0.04 0.03 1669.71 1.00 + Rt_transformed_rw_diffs[24] 0.00 0.02 0.00 -0.04 0.04 2126.33 1.00 + Rt_transformed_rw_diffs[25] -0.00 0.02 -0.00 -0.04 0.04 2119.74 1.00 + Rt_transformed_rw_diffs[26] 0.00 0.03 0.00 -0.04 0.04 2657.91 1.00 + Rt_transformed_rw_diffs[27] -0.00 0.03 0.00 -0.04 0.04 1939.30 1.00 + Rt_transformed_rw_diffs[28] -0.00 0.02 -0.00 -0.04 0.04 1737.84 1.00 + Rt_transformed_rw_diffs[29] -0.00 0.03 -0.00 -0.04 0.04 2105.55 1.00 Number of divergences: 0 +Next, we will use the `spread_draws` function from the +`pyrenew.mcmcutils` module to process the MCMC samples. The +`spread_draws` function reformats the samples drawn from the +`mcmc.get_samples()` from the `hospmodel`. The samples are simulated Rt +values over time. + ``` python from pyrenew.mcmcutils import spread_draws samps = spread_draws(hospmodel.mcmc.get_samples(), [("Rt", "time")]) ``` +We visualize these samples below, with individual possible Rt estimates +over time shown in light blue, and the overall mean estimate Rt shown in +dark blue. + ``` python import numpy as np import polars as pl diff --git a/model/docs/pyrenew_demo.qmd b/model/docs/pyrenew_demo.qmd index 2cc39404..1830ee2d 100644 --- a/model/docs/pyrenew_demo.qmd +++ b/model/docs/pyrenew_demo.qmd @@ -64,7 +64,7 @@ Additionally, import several classes from Pyrenew, including a Poisson observati ```{python} from pyrenew.observation import PoissonObservation from pyrenew.deterministic import DeterministicPMF, DeterministicVariable -from pyrenew.model import HospitalizationsModel +from pyrenew.model import HospitalAdmissionsModel from pyrenew.process import RtRandomWalkProcess ``` @@ -110,23 +110,23 @@ latent_hospitalizations = HospitalAdmissions( ), ) -# 5) An observation process for the hospitalizations -observed_hospitalizations = PoissonObservation() +# 5) An observation process for the hospital admissions +admissions_process = PoissonObservation() # 6) A random walk process (it could be deterministic using # pyrenew.process.DeterministicProcess()) Rt_process = RtRandomWalkProcess() ``` -The `HospitalizationsModel` is then initialized using the initial conditions just defined: +The `HospitalAdmissionsModel` is then initialized using the initial conditions just defined: ```{python} # Initializing the model -hospmodel = HospitalizationsModel( +hospmodel = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=observed_hospitalizations, + admissions_process=admissions_process, latent_infections=latent_infections, Rt_process=Rt_process ) @@ -161,7 +161,7 @@ To fit the `hospmodel` to the simulated data, we call `hospmodel.run()`, an MCMC hospmodel.run( num_warmup=1000, num_samples=1000, - observed_hospitalizations=x.sampled, + admissions_process=x.sampled, n_timepoints = len(x.sampled)-1, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), diff --git a/model/docs/pyrenew_demo_files/figure-commonmark/fig-randwalk-output-1.png b/model/docs/pyrenew_demo_files/figure-commonmark/fig-randwalk-output-1.png index 9a794124898a9f6ec0cf1e9698b4efa6ad12b39e..e3a6cc173f8d427af3eb114afdede2e70e187dab 100644 GIT binary patch literal 29905 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 literal 29868 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 diff --git a/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png b/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png index e31e0699ec4ed14d365dbbdb27b469f2f3c63a8d..7f94e989d16ceb16a1199be57b7159c24151992c 100644 GIT binary patch literal 38249 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 literal 38150 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�Q6&>kvRf2U3;_ZtQ%8E^sA*JR{qsra(k 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 t<;IrwvmgsBbofyON@4$>qSa-T@Z@nzKGe1: Cases - y2: Hospitalizations + y2: Hospital Admissions y3: Wastewater ... yM: M-th signal"] diff --git a/model/src/pyrenew/latent/hospitaladmissions.py b/model/src/pyrenew/latent/hospitaladmissions.py index 7ff6af4b..5c244ce9 100644 --- a/model/src/pyrenew/latent/hospitaladmissions.py +++ b/model/src/pyrenew/latent/hospitaladmissions.py @@ -130,7 +130,7 @@ def sample(self, **kwargs) -> InfectHospRateSample: class HospitalAdmissions(RandomVariable): r"""Latent hospital admissions - Implements a renewal process for the expected number of hospitalizations. + Implements a renewal process for the expected number of hospital admissions. Methods ------- @@ -168,7 +168,7 @@ def __init__( self, infection_to_admission_interval: RandomVariable, infect_hosp_rate_dist: RandomVariable, - hospitalizations_predicted_varname: str = "predicted_hospitalizations", + admissions_predicted_varname: str = "predicted_admissions", weekday_effect_dist: Optional[RandomVariable] = None, hosp_report_prob_dist: Optional[RandomVariable] = None, ) -> None: @@ -177,13 +177,13 @@ def __init__( Parameters ---------- infection_to_admission_interval : RandomVariable - pmf for reporting (informing) hospitalizations (see + pmf for reporting (informing) hospital admissions (see pyrenew.observations.Deterministic). infect_hosp_rate_dist : RandomVariable Infection to hospitalization rate distribution. - hospitalizations_predicted_varname : str + admissions_predicted_varname : str Name to assign to the deterministic component in numpyro of - predicted hospitalizations. + predicted hospital admissions. weekday_effect_dist : RandomVariable, optional Weekday effect. hosp_report_prob_dist : RandomVariable, optional @@ -206,9 +206,7 @@ def __init__( hosp_report_prob_dist, ) - self.hospitalizations_predicted_varname = ( - hospitalizations_predicted_varname - ) + self.admissions_predicted_varname = admissions_predicted_varname self.infect_hosp_rate_dist = infect_hosp_rate_dist self.weekday_effect_dist = weekday_effect_dist @@ -280,24 +278,23 @@ def sample( *_, ) = self.infection_to_admission_interval.sample(**kwargs) - predicted_hospitalizations = jnp.convolve( + predicted_admissions = jnp.convolve( IHR_t, infection_to_admission_interval, mode="full" )[: IHR_t.shape[0]] # Applying weekday effect - predicted_hospitalizations = ( - predicted_hospitalizations - * self.weekday_effect_dist.sample(**kwargs)[0] + predicted_admissions = ( + predicted_admissions * self.weekday_effect_dist.sample(**kwargs)[0] ) # Applying probability of hospitalization effect - predicted_hospitalizations = ( - predicted_hospitalizations + predicted_admissions = ( + predicted_admissions * self.hosp_report_prob_dist.sample(**kwargs)[0] ) npro.deterministic( - self.hospitalizations_predicted_varname, predicted_hospitalizations + self.admissions_predicted_varname, predicted_admissions ) - return HospAdmissionsSample(IHR, predicted_hospitalizations) + return HospAdmissionsSample(IHR, predicted_admissions) diff --git a/model/src/pyrenew/model/__init__.py b/model/src/pyrenew/model/__init__.py index 5f27f728..a0cb40b9 100644 --- a/model/src/pyrenew/model/__init__.py +++ b/model/src/pyrenew/model/__init__.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- -from pyrenew.model.hospitalizations import HospitalizationsModel -from pyrenew.model.rtinfectionsrenewal import RtInfectionsRenewalModel +from pyrenew.model.admissionsmodel import HospitalAdmissionsModel +from pyrenew.model.rtinfectionsrenewalmodel import RtInfectionsRenewalModel -__all__ = ["RtInfectionsRenewalModel", "HospitalizationsModel"] +__all__ = ["RtInfectionsRenewalModel", "HospitalAdmissionsModel"] diff --git a/model/src/pyrenew/model/hospitalizations.py b/model/src/pyrenew/model/admissionsmodel.py similarity index 66% rename from model/src/pyrenew/model/hospitalizations.py rename to model/src/pyrenew/model/admissionsmodel.py index 0bddca40..cca485ba 100644 --- a/model/src/pyrenew/model/hospitalizations.py +++ b/model/src/pyrenew/model/admissionsmodel.py @@ -5,7 +5,7 @@ from numpy.typing import ArrayLike from pyrenew.deterministic import DeterministicVariable from pyrenew.metaclass import Model, RandomVariable, _assert_sample_and_rtype -from pyrenew.model.rtinfectionsrenewal import RtInfectionsRenewalModel +from pyrenew.model.rtinfectionsrenewalmodel import RtInfectionsRenewalModel HospModelSample = namedtuple( "HospModelSample", @@ -22,7 +22,7 @@ A container for holding the output from HospitalAdmissionsModel.sample(). Attributes ----------- +------HospitalAdmissionsModel Rt : float or None The reproduction number over time. Defaults to None. infections : ArrayLike or None @@ -30,7 +30,7 @@ IHR : float or None The infected hospitalization rate. Defaults to None. latent : ArrayLike or None - The estimated latent hospitalizations. Defaults to None. + The estimated latent hospital admissions. Defaults to None. sampled : ArrayLike or None The sampled or observed hospital admissions. Defaults to None. @@ -39,9 +39,9 @@ """ -class HospitalizationsModel(Model): +class HospitalAdmissionsModel(Model): """ - HospitalAdmissions Model (BasicRenewal + HospitalAdmissions) + Hospital Admissions Model (BasicRenewal + HospitalAdmissions) This class inherits from pyrenew.models.Model. It extends the basic renewal model by adding a hospital admissions module, e.g., @@ -50,30 +50,30 @@ class HospitalizationsModel(Model): def __init__( self, - latent_hospitalizations: RandomVariable, + latent_admissions: RandomVariable, latent_infections: RandomVariable, gen_int: RandomVariable, I0: RandomVariable, Rt_process: RandomVariable, - observed_hospitalizations: RandomVariable, + observed_admissions: RandomVariable, ) -> None: """ Default constructor Parameters ---------- - latent_hospitalizations : RandomVariable - Latent process for the hospitalizations. + latent_admissions : RandomVariable + Latent process for the hospital admissions. latent_infections : RandomVariable The infections latent process (passed to RtInfectionsRenewalModel). gen_int : RandomVariable Generation time (passed to RtInfectionsRenewalModel) - I0 : RandomVariable + HospitalAdmissionsModel Initial infections (passed to RtInfectionsRenewalModel) Rt_process : RandomVariable Rt process (passed to RtInfectionsRenewalModel). - observed_hospitalizations : RandomVariable, optional - Observation process for the hospitalizations. + observed_admissions : RandomVariable, optional + Observation process for the hospital admissions. Returns ------- @@ -91,24 +91,24 @@ def __init__( Rt_process=Rt_process, ) - HospitalizationsModel.validate( - latent_hospitalizations, observed_hospitalizations + HospitalAdmissionsModel.validate( + latent_admissions, observed_admissions ) - self.latent_hospitalizations = latent_hospitalizations - self.observed_hospitalizations = observed_hospitalizations + self.latent_admissions = latent_admissions + self.observed_admissions = observed_admissions @staticmethod - def validate(latent_hospitalizations, observed_hospitalizations) -> None: + def validate(latent_admissions, observed_admissions) -> None: """ - Verifies types and status (RV) of latent and observed hospitalizations + Verifies types and status (RV) of latent and observed hospital admissions Parameters ---------- - latent_hospitalizations : ArrayLike - The latent process for the hospitalizations. - observed_hospitalizations : ArrayLike - The observed hospitalizations. + latent_admissions : ArrayLike + The latent process for the hospial admissions. + observed_admissions : ArrayLike + The observed hospital admissions. Returns ------- @@ -118,16 +118,17 @@ def validate(latent_hospitalizations, observed_hospitalizations) -> None: -------- _assert_sample_and_rtype : Perform type-checking and verify RV """ - _assert_sample_and_rtype(latent_hospitalizations, skip_if_none=False) - _assert_sample_and_rtype(observed_hospitalizations, skip_if_none=False) + _assert_sample_and_rtype(latent_admissions, skip_if_none=False) + _assert_sample_and_rtype(observed_admissions, skip_if_none=False) return None - def sample_hospitalizations_latent( + def sample_latent_admissions( self, infections: ArrayLike, **kwargs, ) -> tuple: - """Sample number of hospitalizations + """ + Sample number of hospital admissions Parameters ---------- @@ -143,7 +144,7 @@ def sample_hospitalizations_latent( See Also -------- - latent_hospitalizations.sample : For sampling latent hospitalizations + latent_admissions.sample : For sampling latent hospital admissions Notes ----- @@ -151,28 +152,29 @@ def sample_hospitalizations_latent( TODO: Cover Returns in more detail. """ - return self.latent_hospitalizations.sample( + return self.latent_admissions.sample( latent=infections, **kwargs, ) - def sample_hospitalizations_obs( + def sample_observed_admissions( self, predicted: ArrayLike, - observed_hospitalizations: ArrayLike, + observed_admissions: ArrayLike, **kwargs, ) -> tuple: - """Sample number of hospitalizations + """ + Sample number of hospital admissions Parameters ---------- predicted : ArrayLike - The predicted hospitalizations. - observed_hospitalizations : ArrayLike + The predicted hospital admissions. + observed_admissions : ArrayLike The observed hospitalization data (to fit). **kwargs : dict, optional Additional keyword arguments passed through to internal - sample_hospitalizations_obs calls, should there be any. + sample_observed_admissions calls, should there be any. Returns ------- @@ -180,21 +182,22 @@ def sample_hospitalizations_obs( See Also -------- - observed_hospitalizations.sample : For sampling observed hospitalizations + observed_admissions.sample : For sampling observed hospital + admissions. Notes ----- TODO: Include example(s) here. """ - return self.observed_hospitalizations.sample( - predicted=predicted, obs=observed_hospitalizations, **kwargs + return self.observed_admissions.sample( + predicted=predicted, obs=observed_admissions, **kwargs ) def sample( self, n_timepoints: int, - observed_hospitalizations: ArrayLike | None = None, + observed_admissions: ArrayLike | None = None, **kwargs, ) -> HospModelSample: """ @@ -204,7 +207,7 @@ def sample( ---------- n_timepoints : int Number of timepoints to sample (passed to the basic renewal model). - observed_hospitalizations : ArrayLike, optional + observed_admissions : ArrayLike, optional The observed hospitalization data (passed to the basic renewal model). Defaults to None (simulation, rather than fit). **kwargs : dict, optional @@ -218,8 +221,8 @@ def sample( See Also -------- basic_renewal.sample : For sampling the basic renewal model - sample_hospitalizations_latent : To sample latent hospitalization process - sample_hospitalizations_obs : For sampling observed hospitalizations + sample_latent_admissions : To sample latent hospitalization process + sample_observed_admissions : For sampling observed hospital admissions Notes ----- @@ -233,20 +236,20 @@ def sample( **kwargs, ) - # Sampling the latent hospitalizations + # Sampling the latent hospital admissions ( IHR, latent, *_, - ) = self.sample_hospitalizations_latent( + ) = self.sample_latent_admissions( infections=infections, **kwargs, ) - # Sampling the hospitalizations - sampled, *_ = self.sample_hospitalizations_obs( + # Sampling the hospital admissions + sampled, *_ = self.sample_observed_admissions( predicted=latent, - observed_hospitalizations=observed_hospitalizations, + observed_admissions=observed_admissions, **kwargs, ) diff --git a/model/src/pyrenew/model/rtinfectionsrenewal.py b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py similarity index 96% rename from model/src/pyrenew/model/rtinfectionsrenewal.py rename to model/src/pyrenew/model/rtinfectionsrenewalmodel.py index 253948ff..4cdb9c38 100644 --- a/model/src/pyrenew/model/rtinfectionsrenewal.py +++ b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py @@ -95,10 +95,10 @@ def validate( Parameters ---------- - latent_hospitalizations : ArrayLike - The latent process for the hospitalizations. - observed_hospitalizations : ArrayLike - The observed hospitalizations. + latent_admissions : ArrayLike + The latent process for the hospital admissions. + observed_admissions : ArrayLike + The observed hospital admissions. Returns ------- @@ -213,13 +213,14 @@ def sample_infections_obs( observed_infections: Optional[ArrayLike] = None, **kwargs, ) -> tuple: - """Sample number of hospitalizations + """ + Sample number of hospital admissions Parameters ---------- predicted : ArrayLike The predicted infecteds. - observed_hospitalizations : ArrayLike, optional + observed_admissions : ArrayLike, optional The observed values of hospital admissions, if any, for inference. Defaults to None. **kwargs : dict, optional Additional keyword arguments passed through to internal diff --git a/model/src/test/test_latent_hospitalizations.py b/model/src/test/test_latent_admissions.py similarity index 94% rename from model/src/test/test_latent_hospitalizations.py rename to model/src/test/test_latent_admissions.py index 9a49d9ee..8bcc1d97 100644 --- a/model/src/test/test_latent_hospitalizations.py +++ b/model/src/test/test_latent_admissions.py @@ -10,13 +10,13 @@ from pyrenew.process import RtRandomWalkProcess -def test_hospitalizations_sample(): +def test_admissions_sample(): """ Check that an InfectionObservation can be initialized and sampled from (deterministic) """ - # Generating Rt and Infections to compute the hospitalizations + # Generating Rt and Infections to compute the hospital admissions np.random.seed(223) rt = RtRandomWalkProcess() with npro.handlers.seed(rng_seed=np.random.randint(1, 600)): diff --git a/model/src/test/test_model_hospitalizations.py b/model/src/test/test_model_hospitalizations.py index 11c7844a..9da3f435 100644 --- a/model/src/test/test_model_hospitalizations.py +++ b/model/src/test/test_model_hospitalizations.py @@ -14,7 +14,7 @@ Infections0, ) from pyrenew.metaclass import RandomVariable -from pyrenew.model import HospitalizationsModel +from pyrenew.model import HospitalAdmissionsModel from pyrenew.observation import PoissonObservation from pyrenew.process import RtRandomWalkProcess @@ -75,21 +75,21 @@ def test_model_hosp_no_obs_model(): ), ), ) - latent_hospitalizations = HospitalAdmissions( + latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp, - hospitalizations_predicted_varname="observed_hospitalizations", + admissions_predicted_varname="observed_admissions", infect_hosp_rate_dist=InfectHospRate( dist=dist.LogNormal(jnp.log(0.05), 0.05), ), ) - model0 = HospitalizationsModel( + model0 = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, Rt_process=Rt_process, latent_infections=latent_infections, - latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=DeterministicVariable((0,)), + latent_admissions=latent_admissions, + observed_admissions=DeterministicVariable((0,)), ) # Sampling and fitting model 0 (with no obs for infections) @@ -105,10 +105,10 @@ def test_model_hosp_no_obs_model(): n_timepoints=30, ) - inf = model0.spread_draws(["observed_hospitalizations"]) + inf = model0.spread_draws(["observed_admissions"]) inf_mean = ( inf.group_by("draw") - .agg(pl.col("observed_hospitalizations").mean()) + .agg(pl.col("observed_admissions").mean()) .sort(pl.col("draw")) ) @@ -130,7 +130,7 @@ def test_model_hosp_with_obs_model(): latent_infections = Infections() Rt_process = RtRandomWalkProcess() - observed_hospitalizations = PoissonObservation() + observed_admissions = PoissonObservation() inf_hosp = DeterministicPMF( ( @@ -159,20 +159,20 @@ def test_model_hosp_with_obs_model(): ), ) - latent_hospitalizations = HospitalAdmissions( + latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp, infect_hosp_rate_dist=InfectHospRate( dist=dist.LogNormal(jnp.log(0.05), 0.05), ), ) - model1 = HospitalizationsModel( + model1 = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, Rt_process=Rt_process, latent_infections=latent_infections, - latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=observed_hospitalizations, + latent_admissions=latent_admissions, + observed_admissions=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -184,14 +184,14 @@ def test_model_hosp_with_obs_model(): num_warmup=500, num_samples=500, rng_key=jax.random.PRNGKey(272), - observed_hospitalizations=model1_samp.sampled, + observed_admissions=model1_samp.sampled, n_timepoints=30, ) - inf = model1.spread_draws(["predicted_hospitalizations"]) + inf = model1.spread_draws(["predicted_admissions"]) inf_mean = ( inf.group_by("draw") - .agg(pl.col("predicted_hospitalizations").mean()) + .agg(pl.col("predicted_admissions").mean()) .sort(pl.col("draw")) ) @@ -213,7 +213,7 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): latent_infections = Infections() Rt_process = RtRandomWalkProcess() - observed_hospitalizations = PoissonObservation() + observed_admissions = PoissonObservation() inf_hosp = DeterministicPMF( ( @@ -251,7 +251,7 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): hosp_report_prob_dist = UniformProbForTest("hosp_report_prob_dist") weekday = UniformProbForTest("weekday") - latent_hospitalizations = HospitalAdmissions( + latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp, weekday_effect_dist=weekday, hosp_report_prob_dist=hosp_report_prob_dist, @@ -260,13 +260,13 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): ), ) - model1 = HospitalizationsModel( + model1 = HospitalAdmissionsModel( I0=I0, gen_int=gen_int, Rt_process=Rt_process, latent_infections=latent_infections, - latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=observed_hospitalizations, + latent_admissions=latent_admissions, + observed_admissions=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -278,14 +278,14 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): num_warmup=500, num_samples=500, rng_key=jax.random.PRNGKey(272), - observed_hospitalizations=model1_samp.sampled, + observed_admissions=model1_samp.sampled, n_timepoints=30, ) - inf = model1.spread_draws(["predicted_hospitalizations"]) + inf = model1.spread_draws(["predicted_admissions"]) inf_mean = ( inf.group_by("draw") - .agg(pl.col("predicted_hospitalizations").mean()) + .agg(pl.col("predicted_admissions").mean()) .sort(pl.col("draw")) ) @@ -307,7 +307,7 @@ def test_model_hosp_with_obs_model_weekday_phosp(): latent_infections = Infections() Rt_process = RtRandomWalkProcess() - observed_hospitalizations = PoissonObservation() + observed_admissions = PoissonObservation() inf_hosp = DeterministicPMF( ( @@ -354,7 +354,7 @@ def test_model_hosp_with_obs_model_weekday_phosp(): vars=(hosp_report_prob_dist,) ) - latent_hospitalizations = HospitalAdmissions( + latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp, weekday_effect_dist=weekday, hosp_report_prob_dist=hosp_report_prob_dist, @@ -363,13 +363,13 @@ def test_model_hosp_with_obs_model_weekday_phosp(): ), ) - model1 = HospitalizationsModel( + model1 = HospitalAdmissionsModel( I0=I0, gen_int=gen_int, Rt_process=Rt_process, latent_infections=latent_infections, - latent_hospitalizations=latent_hospitalizations, - observed_hospitalizations=observed_hospitalizations, + latent_admissions=latent_admissions, + observed_admissions=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -381,14 +381,14 @@ def test_model_hosp_with_obs_model_weekday_phosp(): num_warmup=500, num_samples=500, rng_key=jax.random.PRNGKey(272), - observed_hospitalizations=model1_samp.sampled, + observed_admissions=model1_samp.sampled, n_timepoints=30, ) - inf = model1.spread_draws(["predicted_hospitalizations"]) + inf = model1.spread_draws(["predicted_admissions"]) inf_mean = ( inf.group_by("draw") - .agg(pl.col("predicted_hospitalizations").mean()) + .agg(pl.col("predicted_admissions").mean()) .sort(pl.col("draw")) ) From 438d5ca053b1f4a734f222406c99511955a347d0 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Mon, 22 Apr 2024 15:07:50 -0600 Subject: [PATCH 2/8] IHR to infection_hosp_rate --- model/docs/pyrenew_demo.qmd | 4 +-- .../src/pyrenew/latent/hospitaladmissions.py | 26 +++++++++---------- model/src/pyrenew/model/admissionsmodel.py | 8 +++--- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/model/docs/pyrenew_demo.qmd b/model/docs/pyrenew_demo.qmd index 1830ee2d..18e865df 100644 --- a/model/docs/pyrenew_demo.qmd +++ b/model/docs/pyrenew_demo.qmd @@ -103,7 +103,7 @@ inf_hosp_int = DeterministicPMF( (jnp.array([0, 0, 0,0,0,0,0,0,0,0,0,0,0, 0.25, 0.5, 0.1, 0.1, 0.05]),), ) -latent_hospitalizations = HospitalAdmissions( +latent_admissions = HospitalAdmissions( infection_to_admission_interval=inf_hosp_int, infect_hosp_rate_dist = InfectHospRate( dist=dist.LogNormal(jnp.log(0.05), 0.05), @@ -125,7 +125,7 @@ The `HospitalAdmissionsModel` is then initialized using the initial conditions j hospmodel = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, - latent_hospitalizations=latent_hospitalizations, + latent_admissions=latent_admissions, admissions_process=admissions_process, latent_infections=latent_infections, Rt_process=Rt_process diff --git a/model/src/pyrenew/latent/hospitaladmissions.py b/model/src/pyrenew/latent/hospitaladmissions.py index 5c244ce9..49a802bb 100644 --- a/model/src/pyrenew/latent/hospitaladmissions.py +++ b/model/src/pyrenew/latent/hospitaladmissions.py @@ -12,7 +12,7 @@ HospAdmissionsSample = namedtuple( "HospAdmissionsSample", - ["IHR", "predicted"], + ["infection_hosp_rate", "predicted"], defaults=[None, None], ) HospAdmissionsSample.__doc__ = """ @@ -20,7 +20,7 @@ Attributes ---------- -IHR : float or None +infection_hosp_rate : float or None The infected hospitalization rate. Defaults to None. predicted : ArrayLike or None The predicted number of hospital admissions. Defaults to None. @@ -32,7 +32,7 @@ InfectHospRateSample = namedtuple( "InfectHospRateSample", - ["IHR"], + ["infection_hosp_rate"], defaults=[None], ) InfectHospRateSample.__doc__ = """ @@ -40,7 +40,7 @@ Attributes ---------- -IHR : ArrayLike or None +infection_hosp_rate : ArrayLike or None The infected hospitalization rate. Defaults to None. Notes @@ -58,13 +58,13 @@ class InfectHospRate(RandomVariable): validate(distr) Validates distribution is Numpyro distribution sample(**kwargs) - Produces a sample of the IHR + Produces a sample of the infection-hospitalization rate (IHR). """ def __init__( self, dist: dist.Distribution | None, - varname: Optional[str] = "IHR", + varname: Optional[str] = "infection_hosp_rate", ) -> None: """ Default constructor @@ -74,7 +74,7 @@ def __init__( dist : dist.Distribution Prior distribution of the IHR. varname : str, optional - Name of the random variable in the model, by default "IHR." + Name of the random variable in the model, by default "infection_hosp_rate." Returns ------- @@ -106,7 +106,7 @@ def validate(distr: dist.Distribution) -> None: def sample(self, **kwargs) -> InfectHospRateSample: """ - Produces a sample of the IHR + Produces a sample of the Infection-hospitalization Rate (IHR) Parameters ---------- @@ -269,9 +269,9 @@ def sample( HospAdmissionsSample """ - IHR, *_ = self.infect_hosp_rate_dist.sample(**kwargs) + infection_hosp_rate, *_ = self.infect_hosp_rate_dist.sample(**kwargs) - IHR_t = IHR * latent + infection_hosp_rate_t = infection_hosp_rate * latent ( infection_to_admission_interval, @@ -279,8 +279,8 @@ def sample( ) = self.infection_to_admission_interval.sample(**kwargs) predicted_admissions = jnp.convolve( - IHR_t, infection_to_admission_interval, mode="full" - )[: IHR_t.shape[0]] + infection_hosp_rate_t, infection_to_admission_interval, mode="full" + )[: infection_hosp_rate_t.shape[0]] # Applying weekday effect predicted_admissions = ( @@ -297,4 +297,4 @@ def sample( self.admissions_predicted_varname, predicted_admissions ) - return HospAdmissionsSample(IHR, predicted_admissions) + return HospAdmissionsSample(infection_hosp_rate, predicted_admissions) diff --git a/model/src/pyrenew/model/admissionsmodel.py b/model/src/pyrenew/model/admissionsmodel.py index cca485ba..607ace25 100644 --- a/model/src/pyrenew/model/admissionsmodel.py +++ b/model/src/pyrenew/model/admissionsmodel.py @@ -12,7 +12,7 @@ [ "Rt", "infections", - "IHR", + "infection_hosp_rate", "latent", "sampled", ], @@ -27,7 +27,7 @@ The reproduction number over time. Defaults to None. infections : ArrayLike or None The estimated number of new infections over time. Defaults to None. -IHR : float or None +infection_hosp_rate : float or None The infected hospitalization rate. Defaults to None. latent : ArrayLike or None The estimated latent hospital admissions. Defaults to None. @@ -238,7 +238,7 @@ def sample( # Sampling the latent hospital admissions ( - IHR, + infection_hosp_rate, latent, *_, ) = self.sample_latent_admissions( @@ -256,7 +256,7 @@ def sample( return HospModelSample( Rt=Rt, infections=infections, - IHR=IHR, + infection_hosp_rate=infection_hosp_rate, latent=latent, sampled=sampled, ) From 652cffe8229bb0c60de2e77ebf3d926b89aea780 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Mon, 22 Apr 2024 15:48:44 -0600 Subject: [PATCH 3/8] Correcting naming --- model/docs/pyrenew_demo.qmd | 2 +- model/src/pyrenew/model/admissionsmodel.py | 32 +++++++++---------- model/src/test/test_model_hospitalizations.py | 8 ++--- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/model/docs/pyrenew_demo.qmd b/model/docs/pyrenew_demo.qmd index 18e865df..ef41e792 100644 --- a/model/docs/pyrenew_demo.qmd +++ b/model/docs/pyrenew_demo.qmd @@ -126,7 +126,7 @@ hospmodel = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, latent_admissions=latent_admissions, - admissions_process=admissions_process, + observed_admissions=admissions_process, latent_infections=latent_infections, Rt_process=Rt_process ) diff --git a/model/src/pyrenew/model/admissionsmodel.py b/model/src/pyrenew/model/admissionsmodel.py index 607ace25..ae8cefc3 100644 --- a/model/src/pyrenew/model/admissionsmodel.py +++ b/model/src/pyrenew/model/admissionsmodel.py @@ -55,7 +55,7 @@ def __init__( gen_int: RandomVariable, I0: RandomVariable, Rt_process: RandomVariable, - observed_admissions: RandomVariable, + observation_process: RandomVariable, ) -> None: """ Default constructor @@ -72,7 +72,7 @@ def __init__( Initial infections (passed to RtInfectionsRenewalModel) Rt_process : RandomVariable Rt process (passed to RtInfectionsRenewalModel). - observed_admissions : RandomVariable, optional + observation_process : RandomVariable, optional Observation process for the hospital admissions. Returns @@ -92,14 +92,14 @@ def __init__( ) HospitalAdmissionsModel.validate( - latent_admissions, observed_admissions + latent_admissions, observation_process ) self.latent_admissions = latent_admissions - self.observed_admissions = observed_admissions + self.observation_process = observation_process @staticmethod - def validate(latent_admissions, observed_admissions) -> None: + def validate(latent_admissions, observation_process) -> None: """ Verifies types and status (RV) of latent and observed hospital admissions @@ -107,7 +107,7 @@ def validate(latent_admissions, observed_admissions) -> None: ---------- latent_admissions : ArrayLike The latent process for the hospial admissions. - observed_admissions : ArrayLike + observation_process : ArrayLike The observed hospital admissions. Returns @@ -119,7 +119,7 @@ def validate(latent_admissions, observed_admissions) -> None: _assert_sample_and_rtype : Perform type-checking and verify RV """ _assert_sample_and_rtype(latent_admissions, skip_if_none=False) - _assert_sample_and_rtype(observed_admissions, skip_if_none=False) + _assert_sample_and_rtype(observation_process, skip_if_none=False) return None def sample_latent_admissions( @@ -157,10 +157,10 @@ def sample_latent_admissions( **kwargs, ) - def sample_observed_admissions( + def sample_observation_process( self, predicted: ArrayLike, - observed_admissions: ArrayLike, + obs: ArrayLike, **kwargs, ) -> tuple: """ @@ -170,11 +170,11 @@ def sample_observed_admissions( ---------- predicted : ArrayLike The predicted hospital admissions. - observed_admissions : ArrayLike + obs : ArrayLike The observed hospitalization data (to fit). **kwargs : dict, optional Additional keyword arguments passed through to internal - sample_observed_admissions calls, should there be any. + obs calls, should there be any. Returns ------- @@ -182,7 +182,7 @@ def sample_observed_admissions( See Also -------- - observed_admissions.sample : For sampling observed hospital + observation_process.sample : For sampling observed hospital admissions. Notes @@ -190,8 +190,8 @@ def sample_observed_admissions( TODO: Include example(s) here. """ - return self.observed_admissions.sample( - predicted=predicted, obs=observed_admissions, **kwargs + return self.observation_process.sample( + predicted=predicted, obs=obs, **kwargs ) def sample( @@ -247,9 +247,9 @@ def sample( ) # Sampling the hospital admissions - sampled, *_ = self.sample_observed_admissions( + sampled, *_ = self.sample_observation_process( predicted=latent, - observed_admissions=observed_admissions, + obs=observed_admissions, **kwargs, ) diff --git a/model/src/test/test_model_hospitalizations.py b/model/src/test/test_model_hospitalizations.py index 9da3f435..325b4645 100644 --- a/model/src/test/test_model_hospitalizations.py +++ b/model/src/test/test_model_hospitalizations.py @@ -89,7 +89,7 @@ def test_model_hosp_no_obs_model(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observed_admissions=DeterministicVariable((0,)), + observation_process=DeterministicVariable((0,)), ) # Sampling and fitting model 0 (with no obs for infections) @@ -172,7 +172,7 @@ def test_model_hosp_with_obs_model(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observed_admissions=observed_admissions, + observation_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -266,7 +266,7 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observed_admissions=observed_admissions, + observation_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -369,7 +369,7 @@ def test_model_hosp_with_obs_model_weekday_phosp(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observed_admissions=observed_admissions, + observation_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) From 073919aa095cba49b3c973bdcd0f95b7ab984f89 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Mon, 22 Apr 2024 16:02:40 -0600 Subject: [PATCH 4/8] Renaming obs_process to admissions_process in hospital admissions --- model/docs/pyrenew_demo.md | 70 +++++++++--------- model/docs/pyrenew_demo.qmd | 4 +- .../fig-sampled-rt-output-1.png | Bin 38249 -> 38730 bytes model/src/pyrenew/model/admissionsmodel.py | 24 +++--- model/src/test/test_model_hospitalizations.py | 8 +- 5 files changed, 52 insertions(+), 54 deletions(-) diff --git a/model/docs/pyrenew_demo.md b/model/docs/pyrenew_demo.md index 6fed5798..b001bc4a 100644 --- a/model/docs/pyrenew_demo.md +++ b/model/docs/pyrenew_demo.md @@ -221,7 +221,7 @@ x 0.25865382, 0.27503362, 0.30029488, 0.3289544 , 0.35262382, 0.37418258, 0.41274938, 0.43839005, 0.47672123, 0.50913286, 0.5625195 , 0.6113282 , 0.67092246, 0.7138808 , 0.77217466, - 0.819254 ], dtype=float32), IHR=Array(0.04929917, dtype=float32), latent=Array([0. , 0. , 0. , 0. , 0. , + 0.819254 ], dtype=float32), infection_hosp_rate=Array(0.04929917, dtype=float32), latent=Array([0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0. , 0.00064262, 0.0021317 , 0.00302979, 0.00416974, 0.0049305 , 0.00487205, 0.00530097, @@ -258,7 +258,7 @@ distribution of the model parameters. The model is run for hospmodel.run( num_warmup=1000, num_samples=1000, - admissions_process=x.sampled, + observed_admissions=x.sampled, n_timepoints = len(x.sampled)-1, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), @@ -273,39 +273,39 @@ hospmodel.print_summary() mean std median 5.0% 95.0% n_eff r_hat - I0 1.27 1.10 0.97 0.10 2.42 1132.34 1.00 - IHR 0.05 0.00 0.05 0.05 0.05 2306.45 1.00 - Rt0 1.23 0.17 1.23 0.93 1.48 1327.22 1.00 - Rt_transformed_rw_diffs[0] -0.00 0.02 -0.00 -0.04 0.04 1404.95 1.00 - Rt_transformed_rw_diffs[1] 0.00 0.03 0.00 -0.04 0.04 2280.86 1.00 - Rt_transformed_rw_diffs[2] -0.00 0.02 -0.00 -0.04 0.04 2119.83 1.00 - Rt_transformed_rw_diffs[3] 0.00 0.02 -0.00 -0.04 0.04 2196.86 1.00 - Rt_transformed_rw_diffs[4] 0.00 0.02 -0.00 -0.03 0.04 2391.45 1.00 - Rt_transformed_rw_diffs[5] 0.00 0.03 0.00 -0.04 0.04 2043.02 1.00 - Rt_transformed_rw_diffs[6] 0.00 0.02 0.00 -0.04 0.04 1514.40 1.00 - Rt_transformed_rw_diffs[7] -0.00 0.02 -0.00 -0.04 0.04 2619.69 1.00 - Rt_transformed_rw_diffs[8] 0.00 0.03 0.00 -0.04 0.04 1883.84 1.00 - Rt_transformed_rw_diffs[9] 0.00 0.03 0.00 -0.04 0.04 2015.66 1.00 - Rt_transformed_rw_diffs[10] 0.00 0.02 0.00 -0.04 0.04 2045.47 1.00 - Rt_transformed_rw_diffs[11] -0.00 0.03 0.00 -0.04 0.04 1615.10 1.00 - Rt_transformed_rw_diffs[12] 0.00 0.02 0.00 -0.04 0.04 2206.32 1.00 - Rt_transformed_rw_diffs[13] 0.00 0.03 0.00 -0.04 0.04 1175.93 1.00 - Rt_transformed_rw_diffs[14] -0.00 0.03 -0.00 -0.04 0.04 1606.26 1.00 - Rt_transformed_rw_diffs[15] -0.00 0.03 -0.00 -0.04 0.04 2344.62 1.00 - Rt_transformed_rw_diffs[16] -0.00 0.02 0.00 -0.04 0.04 1522.33 1.00 - Rt_transformed_rw_diffs[17] 0.00 0.03 0.00 -0.04 0.04 2157.17 1.00 - Rt_transformed_rw_diffs[18] -0.00 0.02 -0.00 -0.04 0.04 1594.95 1.00 - Rt_transformed_rw_diffs[19] 0.00 0.03 -0.00 -0.04 0.04 1698.70 1.00 - Rt_transformed_rw_diffs[20] 0.00 0.02 0.00 -0.04 0.04 1726.18 1.00 - Rt_transformed_rw_diffs[21] 0.00 0.02 -0.00 -0.04 0.04 2386.35 1.00 - Rt_transformed_rw_diffs[22] 0.00 0.03 0.00 -0.04 0.04 2028.63 1.00 - Rt_transformed_rw_diffs[23] 0.00 0.02 0.00 -0.04 0.03 1669.71 1.00 - Rt_transformed_rw_diffs[24] 0.00 0.02 0.00 -0.04 0.04 2126.33 1.00 - Rt_transformed_rw_diffs[25] -0.00 0.02 -0.00 -0.04 0.04 2119.74 1.00 - Rt_transformed_rw_diffs[26] 0.00 0.03 0.00 -0.04 0.04 2657.91 1.00 - Rt_transformed_rw_diffs[27] -0.00 0.03 0.00 -0.04 0.04 1939.30 1.00 - Rt_transformed_rw_diffs[28] -0.00 0.02 -0.00 -0.04 0.04 1737.84 1.00 - Rt_transformed_rw_diffs[29] -0.00 0.03 -0.00 -0.04 0.04 2105.55 1.00 + I0 1.30 1.20 0.94 0.07 2.75 975.77 1.00 + Rt0 1.24 0.17 1.23 0.96 1.50 1734.73 1.00 + Rt_transformed_rw_diffs[0] -0.00 0.03 0.00 -0.04 0.04 2293.16 1.00 + Rt_transformed_rw_diffs[1] 0.00 0.03 -0.00 -0.04 0.04 1610.92 1.00 + Rt_transformed_rw_diffs[2] 0.00 0.03 -0.00 -0.04 0.04 1998.77 1.00 + Rt_transformed_rw_diffs[3] 0.00 0.02 -0.00 -0.04 0.04 1882.49 1.00 + Rt_transformed_rw_diffs[4] 0.00 0.02 0.00 -0.04 0.04 1734.76 1.00 + Rt_transformed_rw_diffs[5] 0.00 0.02 -0.00 -0.04 0.04 2342.58 1.00 + Rt_transformed_rw_diffs[6] 0.00 0.03 0.00 -0.04 0.04 1865.46 1.00 + Rt_transformed_rw_diffs[7] 0.00 0.02 0.00 -0.04 0.04 1803.14 1.00 + Rt_transformed_rw_diffs[8] -0.00 0.02 -0.00 -0.04 0.04 3352.33 1.00 + Rt_transformed_rw_diffs[9] -0.00 0.03 -0.00 -0.04 0.04 2182.47 1.00 + Rt_transformed_rw_diffs[10] 0.00 0.03 0.00 -0.04 0.04 1589.55 1.00 + Rt_transformed_rw_diffs[11] -0.00 0.02 -0.00 -0.04 0.04 2951.80 1.00 + Rt_transformed_rw_diffs[12] -0.00 0.03 0.00 -0.04 0.04 1706.74 1.00 + Rt_transformed_rw_diffs[13] 0.00 0.02 0.00 -0.04 0.04 1937.62 1.00 + Rt_transformed_rw_diffs[14] 0.00 0.03 -0.00 -0.04 0.04 1162.86 1.00 + Rt_transformed_rw_diffs[15] -0.00 0.03 -0.00 -0.04 0.04 1827.85 1.00 + Rt_transformed_rw_diffs[16] -0.00 0.03 -0.00 -0.04 0.04 2005.09 1.00 + Rt_transformed_rw_diffs[17] -0.00 0.02 -0.00 -0.03 0.04 1311.79 1.00 + Rt_transformed_rw_diffs[18] 0.00 0.03 -0.00 -0.04 0.04 1805.85 1.00 + Rt_transformed_rw_diffs[19] 0.00 0.03 -0.00 -0.04 0.04 1557.23 1.00 + Rt_transformed_rw_diffs[20] -0.00 0.03 -0.00 -0.04 0.05 2047.52 1.00 + Rt_transformed_rw_diffs[21] 0.00 0.02 0.00 -0.04 0.04 1598.30 1.00 + Rt_transformed_rw_diffs[22] 0.00 0.02 0.00 -0.04 0.04 2065.97 1.00 + Rt_transformed_rw_diffs[23] 0.00 0.03 -0.00 -0.04 0.05 2000.96 1.00 + Rt_transformed_rw_diffs[24] 0.00 0.02 0.00 -0.04 0.04 2301.05 1.00 + Rt_transformed_rw_diffs[25] 0.00 0.03 0.00 -0.04 0.04 1958.36 1.00 + Rt_transformed_rw_diffs[26] -0.00 0.02 -0.00 -0.04 0.03 1554.19 1.00 + Rt_transformed_rw_diffs[27] 0.00 0.03 0.00 -0.04 0.04 2474.99 1.00 + Rt_transformed_rw_diffs[28] -0.00 0.03 0.00 -0.04 0.05 1944.24 1.00 + Rt_transformed_rw_diffs[29] -0.00 0.02 -0.00 -0.04 0.04 1820.05 1.00 + infection_hosp_rate 0.05 0.00 0.05 0.05 0.05 2296.48 1.00 Number of divergences: 0 diff --git a/model/docs/pyrenew_demo.qmd b/model/docs/pyrenew_demo.qmd index ef41e792..2283b4cc 100644 --- a/model/docs/pyrenew_demo.qmd +++ b/model/docs/pyrenew_demo.qmd @@ -126,7 +126,7 @@ hospmodel = HospitalAdmissionsModel( gen_int=gen_int, I0=I0, latent_admissions=latent_admissions, - observed_admissions=admissions_process, + admissions_process=admissions_process, latent_infections=latent_infections, Rt_process=Rt_process ) @@ -161,7 +161,7 @@ To fit the `hospmodel` to the simulated data, we call `hospmodel.run()`, an MCMC hospmodel.run( num_warmup=1000, num_samples=1000, - admissions_process=x.sampled, + observed_admissions=x.sampled, n_timepoints = len(x.sampled)-1, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), diff --git a/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png b/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png index 7f94e989d16ceb16a1199be57b7159c24151992c..70952b62919334873c2cc304359a8c804ee58574 100644 GIT binary patch literal 38730 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 diff --git a/model/src/pyrenew/model/admissionsmodel.py b/model/src/pyrenew/model/admissionsmodel.py index ae8cefc3..fdc0db63 100644 --- a/model/src/pyrenew/model/admissionsmodel.py +++ b/model/src/pyrenew/model/admissionsmodel.py @@ -55,7 +55,7 @@ def __init__( gen_int: RandomVariable, I0: RandomVariable, Rt_process: RandomVariable, - observation_process: RandomVariable, + admissions_process: RandomVariable, ) -> None: """ Default constructor @@ -72,7 +72,7 @@ def __init__( Initial infections (passed to RtInfectionsRenewalModel) Rt_process : RandomVariable Rt process (passed to RtInfectionsRenewalModel). - observation_process : RandomVariable, optional + admissions_process : RandomVariable, optional Observation process for the hospital admissions. Returns @@ -91,15 +91,13 @@ def __init__( Rt_process=Rt_process, ) - HospitalAdmissionsModel.validate( - latent_admissions, observation_process - ) + HospitalAdmissionsModel.validate(latent_admissions, admissions_process) self.latent_admissions = latent_admissions - self.observation_process = observation_process + self.admissions_process = admissions_process @staticmethod - def validate(latent_admissions, observation_process) -> None: + def validate(latent_admissions, admissions_process) -> None: """ Verifies types and status (RV) of latent and observed hospital admissions @@ -107,7 +105,7 @@ def validate(latent_admissions, observation_process) -> None: ---------- latent_admissions : ArrayLike The latent process for the hospial admissions. - observation_process : ArrayLike + admissions_process : ArrayLike The observed hospital admissions. Returns @@ -119,7 +117,7 @@ def validate(latent_admissions, observation_process) -> None: _assert_sample_and_rtype : Perform type-checking and verify RV """ _assert_sample_and_rtype(latent_admissions, skip_if_none=False) - _assert_sample_and_rtype(observation_process, skip_if_none=False) + _assert_sample_and_rtype(admissions_process, skip_if_none=False) return None def sample_latent_admissions( @@ -157,7 +155,7 @@ def sample_latent_admissions( **kwargs, ) - def sample_observation_process( + def sample_admissions_process( self, predicted: ArrayLike, obs: ArrayLike, @@ -182,7 +180,7 @@ def sample_observation_process( See Also -------- - observation_process.sample : For sampling observed hospital + admissions_process.sample : For sampling observed hospital admissions. Notes @@ -190,7 +188,7 @@ def sample_observation_process( TODO: Include example(s) here. """ - return self.observation_process.sample( + return self.admissions_process.sample( predicted=predicted, obs=obs, **kwargs ) @@ -247,7 +245,7 @@ def sample( ) # Sampling the hospital admissions - sampled, *_ = self.sample_observation_process( + sampled, *_ = self.sample_admissions_process( predicted=latent, obs=observed_admissions, **kwargs, diff --git a/model/src/test/test_model_hospitalizations.py b/model/src/test/test_model_hospitalizations.py index 325b4645..d031f292 100644 --- a/model/src/test/test_model_hospitalizations.py +++ b/model/src/test/test_model_hospitalizations.py @@ -89,7 +89,7 @@ def test_model_hosp_no_obs_model(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observation_process=DeterministicVariable((0,)), + admissions_process=DeterministicVariable((0,)), ) # Sampling and fitting model 0 (with no obs for infections) @@ -172,7 +172,7 @@ def test_model_hosp_with_obs_model(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observation_process=observed_admissions, + admissions_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -266,7 +266,7 @@ def test_model_hosp_with_obs_model_weekday_phosp_2(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observation_process=observed_admissions, + admissions_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) @@ -369,7 +369,7 @@ def test_model_hosp_with_obs_model_weekday_phosp(): Rt_process=Rt_process, latent_infections=latent_infections, latent_admissions=latent_admissions, - observation_process=observed_admissions, + admissions_process=observed_admissions, ) # Sampling and fitting model 0 (with no obs for infections) From a446dfea5d17ea3bfec9b5fb318e3acbed883124 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Fri, 26 Apr 2024 13:12:30 -0600 Subject: [PATCH 5/8] Removing the last 'hospitalizations' --- docs/build/html/searchindex.js | 2 +- model/docs/example-with-datasets.md | 22 +++++++++++++--------- model/docs/example-with-datasets.qmd | 4 ++-- model/docs/pyrenew_demo.md | 4 +++- model/docs/pyrenew_demo.qmd | 2 +- model/src/pyrenew/model/admissionsmodel.py | 10 +++++----- model/src/test/test_latent_admissions.py | 2 +- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 36da806e..9d4dc6ae 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["general/ctoc", "index", "msei_reference/index", "msei_reference/observation", "msei_reference/process"], "filenames": ["general/ctoc.rst", "index.rst", "msei_reference/index.rst", "msei_reference/observation.rst", "msei_reference/process.rst"], "titles": ["Complete Table Of Contents", "CFA Multisignal Renewal Documentation", "MSEI Reference", "Observation Processes", "Process MSEI"], "terms": {"msei": [0, 1], "refer": [0, 1], "observ": [0, 2], "process": [0, 2], "neg": [0, 2], "binomi": [0, 2], "negativebinomialobserv": [0, 2, 3], "poisson": [0, 2], "poissonobserv": [0, 2, 3], "ar": [0, 2], "arprocess": [0, 2, 4], "first": [0, 2], "differ": [0, 2], "firstdifferencearprocess": [0, 2, 4], "reproduct": [0, 2], "number": [0, 2], "random": [0, 2], "walk": [0, 2], "rtrandomwalkprocess": [0, 2, 4], "simpl": [0, 2], "simplerandomwalkprocess": [0, 2, 4], "latent": [0, 2], "compon": [0, 2], "hospit": [0, 2], "admiss": [0, 2], "hospadmissionssampl": [0, 2], "hospitaladmiss": [0, 2], "infect": [0, 2], "infectionssampl": [0, 2], "function": [0, 2], "logistic_susceptibility_adjust": [0, 2], "sample_infections_rt": [0, 2], "sample_infections_with_feedback": [0, 2], "model": [0, 1, 2], "hospmodelsampl": [0, 2], "hospitalizationsmodel": [0, 2], "renew": [0, 2], "rtinfectionsrenewalmodel": [0, 2], "rtinfectionsrenewalsampl": [0, 2], "gener": [0, 2, 4], "support": [0, 2], "metaclass": [0, 2], "modul": [0, 1, 2, 3, 4], "kernel": [0, 2], "mcmc": [0, 2], "print_summari": [0, 2], "run": [0, 2], "sampl": [0, 2, 3, 4], "spread_draw": [0, 2], "valid": [0, 2, 3, 4], "randomvari": [0, 2, 3, 4], "convolut": [0, 2], "util": [0, 2], "new_convolve_scann": [0, 2], "new_double_scann": [0, 2], "mathemat": [0, 2], "get_asymptotic_growth_r": [0, 2], "get_asymptotic_growth_rate_and_age_dist": [0, 2], "get_leslie_matrix": [0, 2], "get_stable_age_distribut": [0, 2], "transform": [0, 2, 4], "abstracttransform": [0, 2, 4], "identitytransform": [0, 2], "logtransform": [0, 2, 4], "logittransform": [0, 2], "scaledlogittransform": [0, 2], "regress": [0, 2], "abstractregressionpredict": [0, 2], "glmpredict": [0, 2], "distribut": [0, 2, 3, 4], "reverse_discrete_dist_vector": [0, 2], "validate_discrete_dist_vector": [0, 2], "test": [0, 1], "test_ar_can_be_sampl": 0, "test_fd_ar_can_be_sampl": 0, "logist": 0, "suscept": 0, "test_logistic_susceptibility_adjust": 0, "test_rw_can_be_sampl": 0, "test_rw_samples_correctly_distribut": 0, "asymptomat": 0, "test_asymptotic_properti": 0, "generic_inversion_test": 0, "test_invert_dist": 0, "test_glm_predict": 0, "lesli": 0, "matrix": 0, "test_get_lesli": 0, "index": [0, 1, 2], "search": [0, 1], "page": [0, 1, 2], "faq": [0, 1, 2], "glossari": [0, 1], "licens": [0, 1, 2], "other": [0, 1], "notic": [0, 1, 2], "disclaim": 0, "public": 0, "domain": 0, "standard": 0, "privaci": 0, "record": 0, "manag": 0, "addit": 0, "final": 0, "note": 0, "state": [0, 1, 2], "develop": [0, 1, 2], "setup": [0, 1, 2], "usag": [0, 1, 2], "contribut": [0, 1, 2], "To": [0, 1], "report": [0, 1, 2], "issu": [0, 1, 2], "goal": 0, "context": 0, "requir": 0, "featur": 0, "specif": 0, "out": 0, "scope": 0, "relat": 0, "document": [0, 2], "chang": [0, 2, 4], "order": [0, 2, 3, 4], "name": [0, 2, 4], "toctre": [0, 2], "entiti": [0, 2], "welcom": 1, "": [1, 4], "epidemiolog": 1, "infer": [1, 2], "project": 1, "k": 1, "signal": 1, "fusion": 1, "which": [1, 3], "consist": 1, "an": [1, 4], "intern": 1, "forecast": 1, "leverag": 1, "multipl": 1, "data": 1, "sourc": [1, 2, 3, 4], "enhanc": 1, "infecti": 1, "diseas": 1, "outbreak": 1, "thi": 1, "repositori": 1, "i": [1, 2, 3, 4], "compos": 1, "two": 1, "part": 1, "folder": [1, 2], "analysi": 1, "pipelin": 1, "overview": 1, "follow": 1, "Of": [1, 2], "complet": 1, "content": 1, "have": [1, 2], "doc": [1, 2], "exist": [1, 2], "main": [1, 2], "deploi": [1, 2], "us": [1, 2], "gha": [1, 2], "add": [1, 2], "help": [1, 2], "tutori": [1, 2], "howto": [1, 2], "about": [1, 2], "histori": [1, 2], "download": [1, 2], "copyright": [1, 2], "get": 2, "baselin": 2, "accur": 2, "version": 2, "The": 2, "origin": 2, "entri": 2, "locat": 2, "user": 2, "trevormartin": 2, "github": 2, "multisign": 2, "epi": 2, "bug": 2, "rst": 2, "line": 2, "52": 2, "10": 2, "frequent": 2, "ask": 2, "question": 2, "6": 2, "17": 2, "37": 2, "determin": [2, 3, 4], "msei_refer": 2, "28": 2, "20": 2, "61": 2, "ctoc": 2, "21": 2, "87": 2, "89": 2, "meta": 2, "inform": 2, "91": 2, "abov": 2, "15": 2, "36": 2, "class": [3, 4], "pyrenew": [3, 4], "negativebinomi": 3, "concentration_prior": 3, "_supportsarrai": [3, 4], "dtype": [3, 4], "ani": [3, 4], "_nestedsequ": [3, 4], "bool": [3, 4], "int": [3, 4], "float": [3, 4], "complex": [3, 4], "str": [3, 4], "byte": [3, 4], "concentration_suffix": 3, "_concentr": 3, "parameter_nam": 3, "negbinom_rv": 3, "mean_varnam": 3, "mean": [3, 4], "counts_varnam": 3, "count": 3, "base": [3, 4], "random_vari": [3, 4], "dict": [3, 4], "constant": [3, 4], "none": [3, 4], "tupl": [3, 4], "from": [3, 4], "paramet": [3, 4], "option": [3, 4], "A": [3, 4], "dictionari": [3, 4], "contain": [3, 4], "possibli": 3, "pass": [3, 4], "ob": 3, "numpyro": [3, 4], "ignor": 3, "default": [3, 4], "return": [3, 4], "type": [3, 4], "static": [3, 4], "poisson_rv": 3, "rate_varnam": 3, "rate": [3, 4], "ep": 3, "1e": 3, "08": 3, "possibl": 3, "autoreg": 4, "noise_sd": 4, "object": 4, "repres": 4, "p": 4, "durat": 4, "init": 4, "length": 4, "sequenc": 4, "arraylik": 4, "initi": 4, "point": 4, "firstdifferencear": 4, "stochast": 4, "1": 4, "e": 4, "init_v": 4, "init_rate_of_chang": 4, "trend_rw": 4, "start": 4, "rtrandomwalk": 4, "rt0_dist": 4, "truncat": 4, "lefttruncateddistribut": 4, "rt_transform": 4, "rt_rw_dist": 4, "continu": 4, "normal": 4, "rt": 4, "randomwalk": 4, "rt0": 4, "n_timepoint": 4, "simplerandomwalk": 4, "error_distribut": 4, "markovian": 4, "arbitrari": 4, "step": 4}, "objects": {"pyrenew.observation": [[3, 0, 0, "-", "negativebinomial"], [3, 0, 0, "-", "poisson"]], "pyrenew.observation.negativebinomial": [[3, 1, 1, "", "NegativeBinomialObservation"]], "pyrenew.observation.negativebinomial.NegativeBinomialObservation": [[3, 2, 1, "", "sample"], [3, 2, 1, "", "validate"]], "pyrenew.observation.poisson": [[3, 1, 1, "", "PoissonObservation"]], "pyrenew.observation.poisson.PoissonObservation": [[3, 2, 1, "", "sample"], [3, 2, 1, "", "validate"]], "pyrenew.process": [[4, 0, 0, "-", "ar"], [4, 0, 0, "-", "firstdifferencear"], [4, 0, 0, "-", "rtrandomwalk"], [4, 0, 0, "-", "simplerandomwalk"]], "pyrenew.process.ar": [[4, 1, 1, "", "ARProcess"]], "pyrenew.process.ar.ARProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.firstdifferencear": [[4, 1, 1, "", "FirstDifferenceARProcess"]], "pyrenew.process.firstdifferencear.FirstDifferenceARProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.rtrandomwalk": [[4, 1, 1, "", "RtRandomWalkProcess"]], "pyrenew.process.rtrandomwalk.RtRandomWalkProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.simplerandomwalk": [[4, 1, 1, "", "SimpleRandomWalkProcess"]], "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"]}, "titleterms": {"complet": 0, "tabl": [0, 1], "Of": 0, "content": 0, "todo": [0, 1, 2, 3, 4], "cfa": 1, "multisign": 1, "renew": 1, "document": 1, "compon": 1, "indic": 1, "And": 1, "meta": 1, "inform": 1, "msei": [2, 4], "refer": 2, "observ": 3, "process": [3, 4], "neg": 3, "binomi": 3, "poisson": 3, "ar": 4, "first": 4, "differ": 4, "reproduct": 4, "number": 4, "random": 4, "walk": 4, "simpl": 4}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Complete Table Of Contents": [[0, "complete-table-of-contents"]], "Todo": [[0, "id1"], [1, "id1"], [1, "id2"], [1, "id3"], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, "id1"], [3, "id1"], [4, "id1"]], "CFA Multisignal Renewal Documentation": [[1, "cfa-multisignal-renewal-documentation"]], "Documentation Components": [[1, "documentation-components"]], "Indices And Tables": [[1, "indices-and-tables"]], "Meta Information": [[1, "meta-information"]], "MSEI Reference": [[2, "msei-reference"]], "Observation Processes": [[3, "observation-processes"]], "Negative Binomial": [[3, "module-pyrenew.observation.negativebinomial"]], "Poisson": [[3, "module-pyrenew.observation.poisson"]], "Process MSEI": [[4, "process-msei"]], "AR Processes": [[4, "module-pyrenew.process.ar"]], "First Difference (AR)": [[4, "module-pyrenew.process.firstdifferencear"]], "Reproduction Number Random Walk": [[4, "module-pyrenew.process.rtrandomwalk"]], "Simple Random Walk": [[4, "module-pyrenew.process.simplerandomwalk"]]}, "indexentries": {"negativebinomialobservation (class in pyrenew.observation.negativebinomial)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation"]], "poissonobservation (class in pyrenew.observation.poisson)": [[3, "pyrenew.observation.poisson.PoissonObservation"]], "module": [[3, "module-pyrenew.observation.negativebinomial"], [3, "module-pyrenew.observation.poisson"], [4, "module-pyrenew.process.ar"], [4, "module-pyrenew.process.firstdifferencear"], [4, "module-pyrenew.process.rtrandomwalk"], [4, "module-pyrenew.process.simplerandomwalk"]], "pyrenew.observation.negativebinomial": [[3, "module-pyrenew.observation.negativebinomial"]], "pyrenew.observation.poisson": [[3, "module-pyrenew.observation.poisson"]], "sample() (pyrenew.observation.negativebinomial.negativebinomialobservation method)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation.sample"]], "sample() (pyrenew.observation.poisson.poissonobservation method)": [[3, "pyrenew.observation.poisson.PoissonObservation.sample"]], "validate() (pyrenew.observation.negativebinomial.negativebinomialobservation static method)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation.validate"]], "validate() (pyrenew.observation.poisson.poissonobservation static method)": [[3, "pyrenew.observation.poisson.PoissonObservation.validate"]], "arprocess (class in pyrenew.process.ar)": [[4, "pyrenew.process.ar.ARProcess"]], "firstdifferencearprocess (class in pyrenew.process.firstdifferencear)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess"]], "rtrandomwalkprocess (class in pyrenew.process.rtrandomwalk)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess"]], "simplerandomwalkprocess (class in pyrenew.process.simplerandomwalk)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess"]], "pyrenew.process.ar": [[4, "module-pyrenew.process.ar"]], "pyrenew.process.firstdifferencear": [[4, "module-pyrenew.process.firstdifferencear"]], "pyrenew.process.rtrandomwalk": [[4, "module-pyrenew.process.rtrandomwalk"]], "pyrenew.process.simplerandomwalk": [[4, "module-pyrenew.process.simplerandomwalk"]], "sample() (pyrenew.process.ar.arprocess method)": [[4, "pyrenew.process.ar.ARProcess.sample"]], "sample() (pyrenew.process.firstdifferencear.firstdifferencearprocess method)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess.sample"]], "sample() (pyrenew.process.rtrandomwalk.rtrandomwalkprocess method)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess.sample"]], "sample() (pyrenew.process.simplerandomwalk.simplerandomwalkprocess method)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess.sample"]], "validate() (pyrenew.process.ar.arprocess static method)": [[4, "pyrenew.process.ar.ARProcess.validate"]], "validate() (pyrenew.process.firstdifferencear.firstdifferencearprocess static method)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess.validate"]], "validate() (pyrenew.process.rtrandomwalk.rtrandomwalkprocess static method)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess.validate"]], "validate() (pyrenew.process.simplerandomwalk.simplerandomwalkprocess static method)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess.validate"]]}}) +Search.setIndex({"docnames": ["general/ctoc", "index", "msei_reference/index", "msei_reference/observation", "msei_reference/process"], "filenames": ["general/ctoc.rst", "index.rst", "msei_reference/index.rst", "msei_reference/observation.rst", "msei_reference/process.rst"], "titles": ["Complete Table Of Contents", "CFA Multisignal Renewal Documentation", "MSEI Reference", "Observation Processes", "Process MSEI"], "terms": {"msei": [0, 1], "refer": [0, 1], "observ": [0, 2], "process": [0, 2], "neg": [0, 2], "binomi": [0, 2], "negativebinomialobserv": [0, 2, 3], "poisson": [0, 2], "poissonobserv": [0, 2, 3], "ar": [0, 2], "arprocess": [0, 2, 4], "first": [0, 2], "differ": [0, 2], "firstdifferencearprocess": [0, 2, 4], "reproduct": [0, 2], "number": [0, 2], "random": [0, 2], "walk": [0, 2], "rtrandomwalkprocess": [0, 2, 4], "simpl": [0, 2], "simplerandomwalkprocess": [0, 2, 4], "latent": [0, 2], "compon": [0, 2], "hospit": [0, 2], "admiss": [0, 2], "hospadmissionssampl": [0, 2], "hospitaladmiss": [0, 2], "infect": [0, 2], "infectionssampl": [0, 2], "function": [0, 2], "logistic_susceptibility_adjust": [0, 2], "sample_infections_rt": [0, 2], "sample_infections_with_feedback": [0, 2], "model": [0, 1, 2], "hospmodelsampl": [0, 2], "hospitaladmissionsmodel": [0, 2], "renew": [0, 2], "rtinfectionsrenewalmodel": [0, 2], "rtinfectionsrenewalsampl": [0, 2], "gener": [0, 2, 4], "support": [0, 2], "metaclass": [0, 2], "modul": [0, 1, 2, 3, 4], "kernel": [0, 2], "mcmc": [0, 2], "print_summari": [0, 2], "run": [0, 2], "sampl": [0, 2, 3, 4], "spread_draw": [0, 2], "valid": [0, 2, 3, 4], "randomvari": [0, 2, 3, 4], "convolut": [0, 2], "util": [0, 2], "new_convolve_scann": [0, 2], "new_double_scann": [0, 2], "mathemat": [0, 2], "get_asymptotic_growth_r": [0, 2], "get_asymptotic_growth_rate_and_age_dist": [0, 2], "get_leslie_matrix": [0, 2], "get_stable_age_distribut": [0, 2], "transform": [0, 2, 4], "abstracttransform": [0, 2, 4], "identitytransform": [0, 2], "logtransform": [0, 2, 4], "logittransform": [0, 2], "scaledlogittransform": [0, 2], "regress": [0, 2], "abstractregressionpredict": [0, 2], "glmpredict": [0, 2], "distribut": [0, 2, 3, 4], "reverse_discrete_dist_vector": [0, 2], "validate_discrete_dist_vector": [0, 2], "test": [0, 1], "test_ar_can_be_sampl": 0, "test_fd_ar_can_be_sampl": 0, "logist": 0, "suscept": 0, "test_logistic_susceptibility_adjust": 0, "test_rw_can_be_sampl": 0, "test_rw_samples_correctly_distribut": 0, "asymptomat": 0, "test_asymptotic_properti": 0, "generic_inversion_test": 0, "test_invert_dist": 0, "test_glm_predict": 0, "lesli": 0, "matrix": 0, "test_get_lesli": 0, "index": [0, 1, 2], "search": [0, 1], "page": [0, 1, 2], "faq": [0, 1, 2], "glossari": [0, 1], "licens": [0, 1, 2], "other": [0, 1], "notic": [0, 1, 2], "disclaim": 0, "public": 0, "domain": 0, "standard": 0, "privaci": 0, "record": 0, "manag": 0, "addit": 0, "final": 0, "note": 0, "state": [0, 1, 2], "develop": [0, 1, 2], "setup": [0, 1, 2], "usag": [0, 1, 2], "contribut": [0, 1, 2], "To": [0, 1], "report": [0, 1, 2], "issu": [0, 1, 2], "goal": 0, "context": 0, "requir": 0, "featur": 0, "specif": 0, "out": 0, "scope": 0, "relat": 0, "document": [0, 2], "chang": [0, 2, 4], "order": [0, 2, 3, 4], "name": [0, 2, 4], "toctre": [0, 2], "entiti": [0, 2], "welcom": 1, "": [1, 4], "epidemiolog": 1, "infer": [1, 2], "project": 1, "k": 1, "signal": 1, "fusion": 1, "which": [1, 3], "consist": 1, "an": [1, 4], "intern": 1, "forecast": 1, "leverag": 1, "multipl": 1, "data": 1, "sourc": [1, 2, 3, 4], "enhanc": 1, "infecti": 1, "diseas": 1, "outbreak": 1, "thi": 1, "repositori": 1, "i": [1, 2, 3, 4], "compos": 1, "two": 1, "part": 1, "folder": [1, 2], "analysi": 1, "pipelin": 1, "overview": 1, "follow": 1, "Of": [1, 2], "complet": 1, "content": 1, "have": [1, 2], "doc": [1, 2], "exist": [1, 2], "main": [1, 2], "deploi": [1, 2], "us": [1, 2], "gha": [1, 2], "add": [1, 2], "help": [1, 2], "tutori": [1, 2], "howto": [1, 2], "about": [1, 2], "histori": [1, 2], "download": [1, 2], "copyright": [1, 2], "get": 2, "baselin": 2, "accur": 2, "version": 2, "The": 2, "origin": 2, "entri": 2, "locat": 2, "user": 2, "trevormartin": 2, "github": 2, "multisign": 2, "epi": 2, "bug": 2, "rst": 2, "line": 2, "52": 2, "10": 2, "frequent": 2, "ask": 2, "question": 2, "6": 2, "17": 2, "37": 2, "determin": [2, 3, 4], "msei_refer": 2, "28": 2, "20": 2, "61": 2, "ctoc": 2, "21": 2, "87": 2, "89": 2, "meta": 2, "inform": 2, "91": 2, "abov": 2, "15": 2, "36": 2, "class": [3, 4], "pyrenew": [3, 4], "negativebinomi": 3, "concentration_prior": 3, "_supportsarrai": [3, 4], "dtype": [3, 4], "ani": [3, 4], "_nestedsequ": [3, 4], "bool": [3, 4], "int": [3, 4], "float": [3, 4], "complex": [3, 4], "str": [3, 4], "byte": [3, 4], "concentration_suffix": 3, "_concentr": 3, "parameter_nam": 3, "negbinom_rv": 3, "mean_varnam": 3, "mean": [3, 4], "counts_varnam": 3, "count": 3, "base": [3, 4], "random_vari": [3, 4], "dict": [3, 4], "constant": [3, 4], "none": [3, 4], "tupl": [3, 4], "from": [3, 4], "paramet": [3, 4], "option": [3, 4], "A": [3, 4], "dictionari": [3, 4], "contain": [3, 4], "possibli": 3, "pass": [3, 4], "ob": 3, "numpyro": [3, 4], "ignor": 3, "default": [3, 4], "return": [3, 4], "type": [3, 4], "static": [3, 4], "poisson_rv": 3, "rate_varnam": 3, "rate": [3, 4], "ep": 3, "1e": 3, "08": 3, "possibl": 3, "autoreg": 4, "noise_sd": 4, "object": 4, "repres": 4, "p": 4, "durat": 4, "init": 4, "length": 4, "sequenc": 4, "arraylik": 4, "initi": 4, "point": 4, "firstdifferencear": 4, "stochast": 4, "1": 4, "e": 4, "init_v": 4, "init_rate_of_chang": 4, "trend_rw": 4, "start": 4, "rtrandomwalk": 4, "rt0_dist": 4, "truncat": 4, "lefttruncateddistribut": 4, "rt_transform": 4, "rt_rw_dist": 4, "continu": 4, "normal": 4, "rt": 4, "randomwalk": 4, "rt0": 4, "n_timepoint": 4, "simplerandomwalk": 4, "error_distribut": 4, "markovian": 4, "arbitrari": 4, "step": 4}, "objects": {"pyrenew.observation": [[3, 0, 0, "-", "negativebinomial"], [3, 0, 0, "-", "poisson"]], "pyrenew.observation.negativebinomial": [[3, 1, 1, "", "NegativeBinomialObservation"]], "pyrenew.observation.negativebinomial.NegativeBinomialObservation": [[3, 2, 1, "", "sample"], [3, 2, 1, "", "validate"]], "pyrenew.observation.poisson": [[3, 1, 1, "", "PoissonObservation"]], "pyrenew.observation.poisson.PoissonObservation": [[3, 2, 1, "", "sample"], [3, 2, 1, "", "validate"]], "pyrenew.process": [[4, 0, 0, "-", "ar"], [4, 0, 0, "-", "firstdifferencear"], [4, 0, 0, "-", "rtrandomwalk"], [4, 0, 0, "-", "simplerandomwalk"]], "pyrenew.process.ar": [[4, 1, 1, "", "ARProcess"]], "pyrenew.process.ar.ARProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.firstdifferencear": [[4, 1, 1, "", "FirstDifferenceARProcess"]], "pyrenew.process.firstdifferencear.FirstDifferenceARProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.rtrandomwalk": [[4, 1, 1, "", "RtRandomWalkProcess"]], "pyrenew.process.rtrandomwalk.RtRandomWalkProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]], "pyrenew.process.simplerandomwalk": [[4, 1, 1, "", "SimpleRandomWalkProcess"]], "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess": [[4, 2, 1, "", "sample"], [4, 2, 1, "", "validate"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:method"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "method", "Python method"]}, "titleterms": {"complet": 0, "tabl": [0, 1], "Of": 0, "content": 0, "todo": [0, 1, 2, 3, 4], "cfa": 1, "multisign": 1, "renew": 1, "document": 1, "compon": 1, "indic": 1, "And": 1, "meta": 1, "inform": 1, "msei": [2, 4], "refer": 2, "observ": 3, "process": [3, 4], "neg": 3, "binomi": 3, "poisson": 3, "ar": 4, "first": 4, "differ": 4, "reproduct": 4, "number": 4, "random": 4, "walk": 4, "simpl": 4}, "envversion": {"sphinx.domains.c": 3, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 9, "sphinx.domains.index": 1, "sphinx.domains.javascript": 3, "sphinx.domains.math": 2, "sphinx.domains.python": 4, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.todo": 2, "sphinx.ext.viewcode": 1, "sphinx": 60}, "alltitles": {"Complete Table Of Contents": [[0, "complete-table-of-contents"]], "Todo": [[0, "id1"], [1, "id1"], [1, "id2"], [1, "id3"], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, null], [2, "id1"], [3, "id1"], [4, "id1"]], "CFA Multisignal Renewal Documentation": [[1, "cfa-multisignal-renewal-documentation"]], "Documentation Components": [[1, "documentation-components"]], "Indices And Tables": [[1, "indices-and-tables"]], "Meta Information": [[1, "meta-information"]], "MSEI Reference": [[2, "msei-reference"]], "Observation Processes": [[3, "observation-processes"]], "Negative Binomial": [[3, "module-pyrenew.observation.negativebinomial"]], "Poisson": [[3, "module-pyrenew.observation.poisson"]], "Process MSEI": [[4, "process-msei"]], "AR Processes": [[4, "module-pyrenew.process.ar"]], "First Difference (AR)": [[4, "module-pyrenew.process.firstdifferencear"]], "Reproduction Number Random Walk": [[4, "module-pyrenew.process.rtrandomwalk"]], "Simple Random Walk": [[4, "module-pyrenew.process.simplerandomwalk"]]}, "indexentries": {"negativebinomialobservation (class in pyrenew.observation.negativebinomial)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation"]], "poissonobservation (class in pyrenew.observation.poisson)": [[3, "pyrenew.observation.poisson.PoissonObservation"]], "module": [[3, "module-pyrenew.observation.negativebinomial"], [3, "module-pyrenew.observation.poisson"], [4, "module-pyrenew.process.ar"], [4, "module-pyrenew.process.firstdifferencear"], [4, "module-pyrenew.process.rtrandomwalk"], [4, "module-pyrenew.process.simplerandomwalk"]], "pyrenew.observation.negativebinomial": [[3, "module-pyrenew.observation.negativebinomial"]], "pyrenew.observation.poisson": [[3, "module-pyrenew.observation.poisson"]], "sample() (pyrenew.observation.negativebinomial.negativebinomialobservation method)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation.sample"]], "sample() (pyrenew.observation.poisson.poissonobservation method)": [[3, "pyrenew.observation.poisson.PoissonObservation.sample"]], "validate() (pyrenew.observation.negativebinomial.negativebinomialobservation static method)": [[3, "pyrenew.observation.negativebinomial.NegativeBinomialObservation.validate"]], "validate() (pyrenew.observation.poisson.poissonobservation static method)": [[3, "pyrenew.observation.poisson.PoissonObservation.validate"]], "arprocess (class in pyrenew.process.ar)": [[4, "pyrenew.process.ar.ARProcess"]], "firstdifferencearprocess (class in pyrenew.process.firstdifferencear)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess"]], "rtrandomwalkprocess (class in pyrenew.process.rtrandomwalk)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess"]], "simplerandomwalkprocess (class in pyrenew.process.simplerandomwalk)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess"]], "pyrenew.process.ar": [[4, "module-pyrenew.process.ar"]], "pyrenew.process.firstdifferencear": [[4, "module-pyrenew.process.firstdifferencear"]], "pyrenew.process.rtrandomwalk": [[4, "module-pyrenew.process.rtrandomwalk"]], "pyrenew.process.simplerandomwalk": [[4, "module-pyrenew.process.simplerandomwalk"]], "sample() (pyrenew.process.ar.arprocess method)": [[4, "pyrenew.process.ar.ARProcess.sample"]], "sample() (pyrenew.process.firstdifferencear.firstdifferencearprocess method)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess.sample"]], "sample() (pyrenew.process.rtrandomwalk.rtrandomwalkprocess method)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess.sample"]], "sample() (pyrenew.process.simplerandomwalk.simplerandomwalkprocess method)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess.sample"]], "validate() (pyrenew.process.ar.arprocess static method)": [[4, "pyrenew.process.ar.ARProcess.validate"]], "validate() (pyrenew.process.firstdifferencear.firstdifferencearprocess static method)": [[4, "pyrenew.process.firstdifferencear.FirstDifferenceARProcess.validate"]], "validate() (pyrenew.process.rtrandomwalk.rtrandomwalkprocess static method)": [[4, "pyrenew.process.rtrandomwalk.RtRandomWalkProcess.validate"]], "validate() (pyrenew.process.simplerandomwalk.simplerandomwalkprocess static method)": [[4, "pyrenew.process.simplerandomwalk.SimpleRandomWalkProcess.validate"]]}}) diff --git a/model/docs/example-with-datasets.md b/model/docs/example-with-datasets.md index 8283d33c..683e1e30 100644 --- a/model/docs/example-with-datasets.md +++ b/model/docs/example-with-datasets.md @@ -26,7 +26,7 @@ use a negative binomial distribution: $$ \begin{align*} -h(t) & \sim \text{NegativeNinomial}\left(\text{concentration} = 1, \text{mean} = H(t)\right) \\ +h(t) & \sim \text{NegativeBinomial}\left(\text{concentration} = 1, \text{mean} = H(t)\right) \\ H(t) & = \omega(t) p_\mathrm{hosp}(t) \sum_{\tau = 0}^{T_d} d(\tau) I(t-\tau) \end{align*} $$ @@ -199,6 +199,10 @@ latent_hosp = latent.HospitalAdmissions( ) ``` + /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html + from .autonotebook import tqdm as notebook_tqdm + An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu. + The `inf_hosp_int` is a `DeterministicPMF` object that takes the infection to hospitalization interval as input. The `hosp_rate` is an `InfectHospRate` object that takes the infection to hospitalization rate @@ -313,14 +317,14 @@ this. ## Padding the model -We can use the padding argument to solve the overestimation of -hospitalizations in the first half of the model. By setting -`padding > 0`, the model then assumes that the first `padding` -observations are missing; thus, only observations after `padding` will -count towards the likelihood of the model. In practice, the model will -extend the estimated Rt and latent infections by `padding` days, given -time to adjust to the observed data. The following code will add 21 days -of missing data at the beginning of the model and re-estimate it with +We can use the padding argument to solve the overestimation of hospital +admissions in the first half of the model. By setting `padding > 0`, the +model then assumes that the first `padding` observations are missing; +thus, only observations after `padding` will count towards the +likelihood of the model. In practice, the model will extend the +estimated Rt and latent infections by `padding` days, given time to +adjust to the observed data. The following code will add 21 days of +missing data at the beginning of the model and re-estimate it with `padding = 21`: ``` python diff --git a/model/docs/example-with-datasets.qmd b/model/docs/example-with-datasets.qmd index 8d5ecd2e..7f0947a3 100644 --- a/model/docs/example-with-datasets.qmd +++ b/model/docs/example-with-datasets.qmd @@ -18,7 +18,7 @@ Where $h(t)$ is the observed number of hospital admissions at time $t$, and $H(t $$ \begin{align*} -h(t) & \sim \text{NegativeNinomial}\left(\text{concentration} = 1, \text{mean} = H(t)\right) \\ +h(t) & \sim \text{NegativeBinomial}\left(\text{concentration} = 1, \text{mean} = H(t)\right) \\ H(t) & = \omega(t) p_\mathrm{hosp}(t) \sum_{\tau = 0}^{T_d} d(\tau) I(t-\tau) \end{align*} $$ @@ -244,7 +244,7 @@ The first half of the model is not looking good. The reason is that the infectio ## Padding the model -We can use the padding argument to solve the overestimation of hospitalizations in the first half of the model. By setting `padding > 0`, the model then assumes that the first `padding` observations are missing; thus, only observations after `padding` will count towards the likelihood of the model. In practice, the model will extend the estimated Rt and latent infections by `padding` days, given time to adjust to the observed data. The following code will add 21 days of missing data at the beginning of the model and re-estimate it with `padding = 21`: +We can use the padding argument to solve the overestimation of hospital admissions in the first half of the model. By setting `padding > 0`, the model then assumes that the first `padding` observations are missing; thus, only observations after `padding` will count towards the likelihood of the model. In practice, the model will extend the estimated Rt and latent infections by `padding` days, given time to adjust to the observed data. The following code will add 21 days of missing data at the beginning of the model and re-estimate it with `padding = 21`: ```{python} #| label: model-fit-padding diff --git a/model/docs/pyrenew_demo.md b/model/docs/pyrenew_demo.md index 1b7672fa..93e6016a 100644 --- a/model/docs/pyrenew_demo.md +++ b/model/docs/pyrenew_demo.md @@ -39,6 +39,8 @@ import numpyro.distributions as dist from pyrenew.process import SimpleRandomWalkProcess ``` + An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu. + To understand the simple random walk process underlying the sampling within the renewal process model, we first examine a single random walk path. Using the `sample` method from an instance of the @@ -191,7 +193,7 @@ x 0, 0, 0, 0, 0, 1, 0, 0, 0], dtype=int32)) Visualizations of the single model output show (top) infections over the -30 time steps, (middle) hospitalizations over the 30 time steps, and +30 time steps, (middle) hospital admissions over the 30 time steps, and (bottom) ``` python diff --git a/model/docs/pyrenew_demo.qmd b/model/docs/pyrenew_demo.qmd index 7a5a1b56..8469a6b9 100644 --- a/model/docs/pyrenew_demo.qmd +++ b/model/docs/pyrenew_demo.qmd @@ -138,7 +138,7 @@ with seed(rng_seed=np.random.randint(1, 60)): x ``` -Visualizations of the single model output show (top) infections over the 30 time steps, (middle) hospitalizations over the 30 time steps, and (bottom) +Visualizations of the single model output show (top) infections over the 30 time steps, (middle) hospital admissions over the 30 time steps, and (bottom) ```{python} #| label: fig-hosp diff --git a/model/src/pyrenew/model/admissionsmodel.py b/model/src/pyrenew/model/admissionsmodel.py index fd985df5..f3025b35 100644 --- a/model/src/pyrenew/model/admissionsmodel.py +++ b/model/src/pyrenew/model/admissionsmodel.py @@ -30,7 +30,7 @@ infection_hosp_rate : float or None The infected hospitalization rate. Defaults to None. latent_admissions : ArrayLike or None - The estimated latent hospitalizations. Defaults to None. + The estimated latent hospital admissions. Defaults to None. sampled_admissions : ArrayLike or None The sampled or observed hospital admissions. Defaults to None. @@ -73,7 +73,7 @@ def __init__( Rt_process : RandomVariable Rt process (passed to RtInfectionsRenewalModel). observation_process : RandomVariable, optional - Observation process for the hospitalizations. + Observation process for the hospital admissions. Returns ------- @@ -106,9 +106,9 @@ def validate(latent_admissions, observation_process) -> None: Parameters ---------- latent_admissions : ArrayLike - The latent process for the hospitalizations. + The latent process for the hospital admissions. observation_process : ArrayLike - The observed hospitalizations. + The observed hospital admissions. Returns ------- @@ -252,7 +252,7 @@ def sample( **kwargs, ) - # Sampling the hospitalizations + # Sampling the hospital admissions if self.observation_process is not None: if (observed_admissions is not None) and (padding > 0): sampled_na = jnp.repeat(jnp.nan, padding) diff --git a/model/src/test/test_latent_admissions.py b/model/src/test/test_latent_admissions.py index 459144ed..beab2974 100644 --- a/model/src/test/test_latent_admissions.py +++ b/model/src/test/test_latent_admissions.py @@ -30,7 +30,7 @@ def test_admissions_sample(): with npro.handlers.seed(rng_seed=np.random.randint(1, 600)): inf_sampled1 = inf1.sample(Rt=sim_rt, gen_int=gen_int, I0=i0) - # Testing the hospitalizations + # Testing the hospital admissions inf_hosp = DeterministicPMF( jnp.array( [ From 81f1b2184424cd430f2b66c0e3c9ec130640992a Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Thu, 2 May 2024 09:30:13 -0600 Subject: [PATCH 6/8] Apply suggestions from code review @dylanhmorris Co-authored-by: Dylan H. Morris --- model/src/pyrenew/latent/hospitaladmissions.py | 8 +++----- model/src/pyrenew/model/rtinfectionsrenewalmodel.py | 8 +++++--- model/src/test/test_latent_admissions.py | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/model/src/pyrenew/latent/hospitaladmissions.py b/model/src/pyrenew/latent/hospitaladmissions.py index cefe564e..91d0fa81 100644 --- a/model/src/pyrenew/latent/hospitaladmissions.py +++ b/model/src/pyrenew/latent/hospitaladmissions.py @@ -19,7 +19,7 @@ class HospAdmissionsSample(NamedTuple): Parameters ---------- infection_hosp_rate : float, optional - The infected hospitalization rate. Defaults to None. + The infection-to-hospitalization rate. Defaults to None. predicted : ArrayLike or None The predicted number of hospital admissions. Defaults to None. """ @@ -49,8 +49,7 @@ def __repr__(self): class InfectHospRate(RandomVariable): """ - Infection to Hospitalization Rate - <<<<<<< HEAD + Infection-to-Hospitalization rate Methods ------- @@ -59,7 +58,6 @@ class InfectHospRate(RandomVariable): sample(**kwargs) Produces a sample of the infection-hospitalization rate (IHR). ======= - >>>>>>> origin/main """ def __init__( @@ -107,7 +105,7 @@ def validate(distr: dist.Distribution) -> None: def sample(self, **kwargs) -> InfectHospRateSample: """ - Produces a sample of the Infection-hospitalization Rate (IHR) + Produces a sample of an infection-to-hospitalization Rate (IHR) Parameters ---------- diff --git a/model/src/pyrenew/model/rtinfectionsrenewalmodel.py b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py index 283b6c76..645a80ac 100644 --- a/model/src/pyrenew/model/rtinfectionsrenewalmodel.py +++ b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py @@ -208,14 +208,16 @@ def sample_infections_obs( **kwargs, ) -> tuple: """ - Sample number of hospital admissions + Sample observed infections according + to an observation process, if one has + been specified. Parameters ---------- predicted : ArrayLike The predicted infecteds. - observed_admissions : ArrayLike | None, optional - The observed values of hospital admissions, if any, for inference. Defaults to None. + observed_infections : ArrayLike | None, optional + The observed infection values, if any, for inference. Defaults to None. name : str | None, optional Name of the random variable passed to the RandomVariable. Defaults to None. **kwargs : dict, optional diff --git a/model/src/test/test_latent_admissions.py b/model/src/test/test_latent_admissions.py index beab2974..c9bc9651 100644 --- a/model/src/test/test_latent_admissions.py +++ b/model/src/test/test_latent_admissions.py @@ -12,8 +12,8 @@ def test_admissions_sample(): """ - Check that an InfectionObservation - can be initialized and sampled from (deterministic) + Check that a HospitalAdmissions latent process + can be initialized and sampled from. """ # Generating Rt and Infections to compute the hospital admissions From 4e38326a2de5bd5ac60b960bd7ddc9520a1a54c6 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Thu, 2 May 2024 09:42:46 -0600 Subject: [PATCH 7/8] Renaming dat2 in example-with-datasets.qmd --- model/docs/example-with-datasets.md | 20 +++++++++--------- model/docs/example-with-datasets.qmd | 18 ++++++++-------- .../figure-commonmark/basic-fig-output-1.png | Bin 46416 -> 46416 bytes .../data-extract-output-2.png | Bin 31824 -> 31824 bytes ...dmissions-padding-and-weekday-output-1.png | Bin 81402 -> 81402 bytes ...utput-admissions-with-padding-output-1.png | Bin 85453 -> 85453 bytes .../output-hospital-admissions-output-1.png | Bin 73451 -> 73451 bytes ...utput-infections-with-padding-output-1.png | Bin 67732 -> 67732 bytes .../plot-hospital-admissions-output-1.png | Bin 42267 -> 42267 bytes .../figure-commonmark/basic-fig-output-1.png | Bin 39115 -> 39115 bytes .../figure-commonmark/output-rt-output-1.png | Bin 26868 -> 26868 bytes .../figure-commonmark/fig-hosp-output-1.png | Bin 14325 -> 14325 bytes .../fig-randwalk-output-1.png | Bin 29905 -> 29905 bytes .../fig-sampled-rt-output-1.png | Bin 38730 -> 38730 bytes 14 files changed, 19 insertions(+), 19 deletions(-) diff --git a/model/docs/example-with-datasets.md b/model/docs/example-with-datasets.md index 683e1e30..2701f635 100644 --- a/model/docs/example-with-datasets.md +++ b/model/docs/example-with-datasets.md @@ -199,7 +199,7 @@ latent_hosp = latent.HospitalAdmissions( ) ``` - /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.10/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html + /mnt/c/Users/xrd4/Documents/repos/msr/model/.venv/lib/python3.11/site-packages/tqdm/auto.py:21: TqdmWarning: IProgress not found. Please update jupyter and ipywidgets. See https://ipywidgets.readthedocs.io/en/stable/user_install.html from .autonotebook import tqdm as notebook_tqdm An NVIDIA GPU may be present on this machine, but a CUDA-enabled jaxlib is not installed. Falling back to cpu. @@ -330,16 +330,16 @@ missing data at the beginning of the model and re-estimate it with ``` python days_to_impute = 21 -dat2 = dat["daily_hosp_admits"].to_numpy() +dat_w_padding = dat["daily_hosp_admits"].to_numpy() -# Add 21 Nas to the beginning of dat2 -dat2 = np.hstack((np.repeat(np.nan, days_to_impute), dat2)) +# Add 21 Nas to the beginning of dat_w_padding +dat_w_padding = np.hstack((np.repeat(np.nan, days_to_impute), dat_w_padding)) hosp_model.run( num_samples=2000, num_warmup=2000, - n_timepoints=dat2.shape[0] - 1, - observed_admissions=dat2, + n_timepoints=dat_w_padding.shape[0] - 1, + observed_admissions=dat_w_padding, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), padding=days_to_impute, # Padding the model @@ -352,7 +352,7 @@ And plotting the results: out = hosp_model.plot_posterior( var="predicted_admissions", ylab="Hospital Admissions", - obs_signal=dat2, + obs_signal=dat_w_padding, ) ``` @@ -447,8 +447,8 @@ Running the model (with the same padding as before): hosp_model_weekday.run( num_samples=2000, num_warmup=2000, - n_timepoints=dat2.shape[0] - 1, - observed_admissions=dat2, + n_timepoints=dat_w_padding.shape[0] - 1, + observed_admissions=dat_w_padding, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), padding=days_to_impute, @@ -461,7 +461,7 @@ And plotting the results: out = hosp_model_weekday.plot_posterior( var="predicted_admissions", ylab="Hospital Admissions", - obs_signal=dat2, + obs_signal=dat_w_padding, ) ``` diff --git a/model/docs/example-with-datasets.qmd b/model/docs/example-with-datasets.qmd index 7f0947a3..470614d3 100644 --- a/model/docs/example-with-datasets.qmd +++ b/model/docs/example-with-datasets.qmd @@ -250,16 +250,16 @@ We can use the padding argument to solve the overestimation of hospital admissio #| label: model-fit-padding days_to_impute = 21 -dat2 = dat["daily_hosp_admits"].to_numpy() +dat_w_padding = dat["daily_hosp_admits"].to_numpy() -# Add 21 Nas to the beginning of dat2 -dat2 = np.hstack((np.repeat(np.nan, days_to_impute), dat2)) +# Add 21 Nas to the beginning of dat_w_padding +dat_w_padding = np.hstack((np.repeat(np.nan, days_to_impute), dat_w_padding)) hosp_model.run( num_samples=2000, num_warmup=2000, - n_timepoints=dat2.shape[0] - 1, - observed_admissions=dat2, + n_timepoints=dat_w_padding.shape[0] - 1, + observed_admissions=dat_w_padding, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), padding=days_to_impute, # Padding the model @@ -275,7 +275,7 @@ And plotting the results: out = hosp_model.plot_posterior( var="predicted_admissions", ylab="Hospital Admissions", - obs_signal=dat2, + obs_signal=dat_w_padding, ) ``` @@ -358,8 +358,8 @@ Running the model (with the same padding as before): hosp_model_weekday.run( num_samples=2000, num_warmup=2000, - n_timepoints=dat2.shape[0] - 1, - observed_admissions=dat2, + n_timepoints=dat_w_padding.shape[0] - 1, + observed_admissions=dat_w_padding, rng_key=jax.random.PRNGKey(54), mcmc_args=dict(progress_bar=False), padding=days_to_impute, @@ -376,6 +376,6 @@ And plotting the results: out = hosp_model_weekday.plot_posterior( var="predicted_admissions", ylab="Hospital Admissions", - obs_signal=dat2, + obs_signal=dat_w_padding, ) ``` diff --git a/model/docs/example-with-datasets_files/figure-commonmark/basic-fig-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/basic-fig-output-1.png index 5208cbd1e97fd940ccacd1f283f2bf736d16fab5..f98da0065bdd1a47271a46c3fa8fa80347705eec 100644 GIT binary patch delta 43 zcmcccis`~DrU@Q$COQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36AUTpyYd}k3T delta 43 zcmcccis`~DrU@Q$#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5d$k1shhP$; diff --git a/model/docs/example-with-datasets_files/figure-commonmark/data-extract-output-2.png b/model/docs/example-with-datasets_files/figure-commonmark/data-extract-output-2.png index ae28a9d71440bd2cb1b3aa6c71f7cd26feaccf7f..0b893fe256c5d395830d24722e22e9be828f70cc 100644 GIT binary patch delta 43 zcmcccgYm)-#t9yBCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36AUR47CfK3qz delta 43 zcmcccgYm)-#t9yB#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5dsPhpi$)TJ diff --git a/model/docs/example-with-datasets_files/figure-commonmark/output-admissions-padding-and-weekday-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/output-admissions-padding-and-weekday-output-1.png index 61181a1889ae4400657bbb9516339fbff2154287..1977d891c6b20a120b87c45057a42e717b598d16 100644 GIT binary patch delta 46 zcmezMo8{MUmI)qmCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B78IThkb)*a85; C!4bg# delta 46 zcmezMo8{MUmI)qm#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFcmdZB1jGVhaG$ CD-%2b diff --git a/model/docs/example-with-datasets_files/figure-commonmark/output-admissions-with-padding-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/output-admissions-with-padding-output-1.png index 55d76dc095a29c46a915cba9e9f4f4aa37dc643b..8f03dcebd762e1fc3db4a84aed6936a726659c38 100644 GIT binary patch delta 46 zcmX>*oAvB$)(IYRCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B78IThkcReF2h( B5R3o- delta 46 zcmX>*oAvB$)(IYR#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFcmdZB1iL_XPl< C@e&6B diff --git a/model/docs/example-with-datasets_files/figure-commonmark/output-hospital-admissions-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/output-hospital-admissions-output-1.png index aacac128edd4d5078e713c2c3a0748c4b8dd107f..8754e9928dd8cfb7869e83fb27afa5ab2a92021a 100644 GIT binary patch delta 46 zcmaF8m*w?dmI)qmCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B78IThka@H5c?MFcmdZB1irl>-2` Cr4n=i diff --git a/model/docs/example-with-datasets_files/figure-commonmark/output-infections-with-padding-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/output-infections-with-padding-output-1.png index ebfc8802b644598fcefdbc842c86823e16375c43..8fc09215c0ea1c9cac4bbc882ed99470df2659c2 100644 GIT binary patch delta 46 zcmbO-k!8w6mI)qmCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B78IThkczH~@M? B4~75$ delta 46 zcmbO-k!8w6mI)qm#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFcmdZB1j;;{X7O Ct`PwM diff --git a/model/docs/example-with-datasets_files/figure-commonmark/plot-hospital-admissions-output-1.png b/model/docs/example-with-datasets_files/figure-commonmark/plot-hospital-admissions-output-1.png index 687f823610bc20c376177167901f88be82cb6ba7..479793d51132b950fb9e57b9ecbcc0a23e35086f 100644 GIT binary patch delta 43 zcmbPzifQ&KrU@Q$COQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36Awk`nxV4e^; delta 43 zcmbPzifQ&KrU@Q$#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5+qwh*YnKtU diff --git a/model/docs/getting-started_files/figure-commonmark/basic-fig-output-1.png b/model/docs/getting-started_files/figure-commonmark/basic-fig-output-1.png index 6aec59a4d98292ee6e55e9ef6ae4f882ff4cdbc2..9ba6e0ab6f640d8acd64fb6b641ed9a000fec37a 100644 GIT binary patch delta 43 zcmX@Tk?HhCrU@Q$COQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36AQfB}FXPFQS delta 43 zcmX@Tk?HhCrU@Q$#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5OPv7#a*`2- diff --git a/model/docs/getting-started_files/figure-commonmark/output-rt-output-1.png b/model/docs/getting-started_files/figure-commonmark/output-rt-output-1.png index af600fea0ae5706477bc83bb3a511ba97c40568a..ecc6661d3bb204c2d9c760c59bc35f30c2595409 100644 GIT binary patch delta 43 ycmexzk@3q##t9yBCOQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36A`Z551*ASEd delta 43 zcmexzk@3q##t9yB#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5>&pNDiO>=c diff --git a/model/docs/pyrenew_demo_files/figure-commonmark/fig-hosp-output-1.png b/model/docs/pyrenew_demo_files/figure-commonmark/fig-hosp-output-1.png index 73cb803fc8ea1b9b1f3d5ea5312ebcc9cbf3ecb1..d46590a6028bf8e6e94fe2e871e8278bbeaefeed 100644 GIT binary patch delta 41 wcmeyG|22Pthn$IyLPkkRL9vy-er{q(K~8>2PG*u`eo?x delta 41 wcmeyG|22Pthn%sFLPkkRL9vy-er{q(K~8>2PG*u`eo?yq@n;di8`JvD0cLd(8vpH6}j%B36AvP%GZ+z@8~ delta 43 zcmccklJVk8#t9yB#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5%Ps)`h1C(_ diff --git a/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png b/model/docs/pyrenew_demo_files/figure-commonmark/fig-sampled-rt-output-1.png index 70952b62919334873c2cc304359a8c804ee58574..f0a0816a1fb4469844fe68f135432e5fa57ded8a 100644 GIT binary patch delta 43 zcmX@Lj_K4orU@Q$COQfkB_##LR{Hw6i6sR&`6W4-NqYH3>H6}j%B36Ao=gJ(XHO7- delta 43 zcmX@Lj_K4orU@Q$#yScaB_##LR{Hw6i6sR&`6W4-NqYH3>H5c?MFek5dom3Ga!3*T From 6f694438b5df172c008ef910e27e6e5f043c7539 Mon Sep 17 00:00:00 2001 From: "George G. Vega Yon" Date: Thu, 2 May 2024 10:10:37 -0600 Subject: [PATCH 8/8] Fixing pre-commit --- model/src/pyrenew/model/rtinfectionsrenewalmodel.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/model/src/pyrenew/model/rtinfectionsrenewalmodel.py b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py index 645a80ac..43ad11eb 100644 --- a/model/src/pyrenew/model/rtinfectionsrenewalmodel.py +++ b/model/src/pyrenew/model/rtinfectionsrenewalmodel.py @@ -208,8 +208,8 @@ def sample_infections_obs( **kwargs, ) -> tuple: """ - Sample observed infections according - to an observation process, if one has + Sample observed infections according + to an observation process, if one has been specified. Parameters