From 1542bc8fe4c4306bae795ce44a453599bd88d051 Mon Sep 17 00:00:00 2001 From: Will Dean Date: Mon, 8 Dec 2025 09:43:06 -0500 Subject: [PATCH] use Data in putting example --- examples/case_studies/putting_workflow.ipynb | 36 +++++++++---------- .../case_studies/putting_workflow.myst.md | 28 +++++++-------- 2 files changed, 32 insertions(+), 32 deletions(-) diff --git a/examples/case_studies/putting_workflow.ipynb b/examples/case_studies/putting_workflow.ipynb index 3c590b485..a2df0c5da 100644 --- a/examples/case_studies/putting_workflow.ipynb +++ b/examples/case_studies/putting_workflow.ipynb @@ -173,7 +173,7 @@ "\\text{num. successes} \\sim \\operatorname{Binomial}(\\text{tries}, p(\\text{success}))\n", "$$\n", "\n", - "Here is how to write that model in PyMC. We use underscore appendices in our model variables to avoid polluting the namespace. We also use {class}`pymc.MutableData` to let us swap out the data later, when we will work with a newer data set." + "Here is how to write that model in PyMC. We use underscore appendices in our model variables to avoid polluting the namespace. We also use {class}`pymc.Data` to let us swap out the data later, when we will work with a newer data set." ] }, { @@ -183,7 +183,7 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (19)\n\nobs_id (19)\n\n\n\ntries\n\ntries\n~\nMutableData\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nMutableData\n\n\n\ndistance->success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nMutableData\n\n\n\nsuccess->successes\n\n\n\n\n\nb\n\nb\n~\nNormal\n\n\n\nb->success\n\n\n\n\n\na\n\na\n~\nNormal\n\n\n\na->success\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (19)\n\nobs_id (19)\n\n\n\ntries\n\ntries\n~\nData\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nData\n\n\n\ndistance->success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nData\n\n\n\nsuccess->successes\n\n\n\n\n\nb\n\nb\n~\nNormal\n\n\n\nb->success\n\n\n\n\n\na\n\na\n~\nNormal\n\n\n\na->success\n\n\n\n\n\n", "text/plain": [ "" ] @@ -195,9 +195,9 @@ ], "source": [ "with pm.Model() as logit_model:\n", - " distance_ = pm.MutableData(\"distance\", golf_data[\"distance\"], dims=\"obs_id\")\n", - " tries_ = pm.MutableData(\"tries\", golf_data[\"tries\"], dims=\"obs_id\")\n", - " successes_ = pm.MutableData(\"successes\", golf_data[\"successes\"], dims=\"obs_id\")\n", + " distance_ = pm.Data(\"distance\", golf_data[\"distance\"], dims=\"obs_id\")\n", + " tries_ = pm.Data(\"tries\", golf_data[\"tries\"], dims=\"obs_id\")\n", + " successes_ = pm.Data(\"successes\", golf_data[\"successes\"], dims=\"obs_id\")\n", "\n", " a_ = pm.Normal(\"a\")\n", " b_ = pm.Normal(\"b\")\n", @@ -535,7 +535,7 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (19)\n\nobs_id (19)\n\n\n\nsuccesses\n\nsuccesses\n~\nMutableData\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\nsuccess->successes\n\n\n\n\n\np_goes_in\n\np_goes_in\n~\nDeterministic\n\n\n\np_goes_in->success\n\n\n\n\n\ntries\n\ntries\n~\nMutableData\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nMutableData\n\n\n\ndistance->p_goes_in\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_goes_in\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (19)\n\nobs_id (19)\n\n\n\nsuccesses\n\nsuccesses\n~\nData\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\nsuccess->successes\n\n\n\n\n\np_goes_in\n\np_goes_in\n~\nDeterministic\n\n\n\np_goes_in->success\n\n\n\n\n\ntries\n\ntries\n~\nData\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nData\n\n\n\ndistance->p_goes_in\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_goes_in\n\n\n\n\n\n", "text/plain": [ "" ] @@ -552,9 +552,9 @@ "\n", "\n", "with pm.Model() as angle_model:\n", - " distance_ = pm.MutableData(\"distance\", golf_data[\"distance\"], dims=\"obs_id\")\n", - " tries_ = pm.MutableData(\"tries\", golf_data[\"tries\"], dims=\"obs_id\")\n", - " successes_ = pm.MutableData(\"successes\", golf_data[\"successes\"], dims=\"obs_id\")\n", + " distance_ = pm.Data(\"distance\", golf_data[\"distance\"], dims=\"obs_id\")\n", + " tries_ = pm.Data(\"tries\", golf_data[\"tries\"], dims=\"obs_id\")\n", + " successes_ = pm.Data(\"successes\", golf_data[\"successes\"], dims=\"obs_id\")\n", "\n", " variance_of_shot = pm.HalfNormal(\"variance_of_shot\")\n", " p_goes_in = pm.Deterministic(\n", @@ -1002,7 +1002,7 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (31)\n\nobs_id (31)\n\n\n\np_good_distance\n\np_good_distance\n~\nDeterministic\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\np_good_distance->success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nMutableData\n\n\n\nsuccess->successes\n\n\n\n\n\np_good_angle\n\np_good_angle\n~\nDeterministic\n\n\n\np_good_angle->success\n\n\n\n\n\ntries\n\ntries\n~\nMutableData\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nMutableData\n\n\n\ndistance->p_good_distance\n\n\n\n\n\ndistance->p_good_angle\n\n\n\n\n\nvariance_of_distance\n\nvariance_of_distance\n~\nHalfNormal\n\n\n\nvariance_of_distance->p_good_distance\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_good_angle\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (31)\n\nobs_id (31)\n\n\n\np_good_distance\n\np_good_distance\n~\nDeterministic\n\n\n\nsuccess\n\nsuccess\n~\nBinomial\n\n\n\np_good_distance->success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nData\n\n\n\nsuccess->successes\n\n\n\n\n\np_good_angle\n\np_good_angle\n~\nDeterministic\n\n\n\np_good_angle->success\n\n\n\n\n\ntries\n\ntries\n~\nData\n\n\n\ntries->success\n\n\n\n\n\ndistance\n\ndistance\n~\nData\n\n\n\ndistance->p_good_distance\n\n\n\n\n\ndistance->p_good_angle\n\n\n\n\n\nvariance_of_distance\n\nvariance_of_distance\n~\nHalfNormal\n\n\n\nvariance_of_distance->p_good_distance\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_good_angle\n\n\n\n\n\n", "text/plain": [ "" ] @@ -1018,9 +1018,9 @@ "\n", "\n", "with pm.Model() as distance_angle_model:\n", - " distance_ = pm.MutableData(\"distance\", new_golf_data[\"distance\"], dims=\"obs_id\")\n", - " tries_ = pm.MutableData(\"tries\", new_golf_data[\"tries\"], dims=\"obs_id\")\n", - " successes_ = pm.MutableData(\"successes\", new_golf_data[\"successes\"], dims=\"obs_id\")\n", + " distance_ = pm.Data(\"distance\", new_golf_data[\"distance\"], dims=\"obs_id\")\n", + " tries_ = pm.Data(\"tries\", new_golf_data[\"tries\"], dims=\"obs_id\")\n", + " successes_ = pm.Data(\"successes\", new_golf_data[\"successes\"], dims=\"obs_id\")\n", "\n", " variance_of_shot = pm.HalfNormal(\"variance_of_shot\")\n", " variance_of_distance = pm.HalfNormal(\"variance_of_distance\")\n", @@ -1227,7 +1227,7 @@ "outputs": [ { "data": { - "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (31)\n\nobs_id (31)\n\n\n\np_good_distance\n\np_good_distance\n~\nDeterministic\n\n\n\np_success\n\np_success\n~\nNormal\n\n\n\np_good_distance->p_success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nMutableData\n\n\n\np_good_angle\n\np_good_angle\n~\nDeterministic\n\n\n\np_good_angle->p_success\n\n\n\n\n\ntries\n\ntries\n~\nMutableData\n\n\n\ntries->p_success\n\n\n\n\n\ndistance\n\ndistance\n~\nMutableData\n\n\n\ndistance->p_good_distance\n\n\n\n\n\ndistance->p_good_angle\n\n\n\n\n\nobs_prop\n\nobs_prop\n~\nMutableData\n\n\n\np_success->obs_prop\n\n\n\n\n\nvariance_of_distance\n\nvariance_of_distance\n~\nHalfNormal\n\n\n\nvariance_of_distance->p_good_distance\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_good_angle\n\n\n\n\n\ndispersion\n\ndispersion\n~\nHalfNormal\n\n\n\ndispersion->p_success\n\n\n\n\n\n", + "image/svg+xml": "\n\n\n\n\n\n\n\nclusterobs_id (31)\n\nobs_id (31)\n\n\n\np_good_distance\n\np_good_distance\n~\nDeterministic\n\n\n\np_success\n\np_success\n~\nNormal\n\n\n\np_good_distance->p_success\n\n\n\n\n\nsuccesses\n\nsuccesses\n~\nData\n\n\n\np_good_angle\n\np_good_angle\n~\nDeterministic\n\n\n\np_good_angle->p_success\n\n\n\n\n\ntries\n\ntries\n~\nData\n\n\n\ntries->p_success\n\n\n\n\n\ndistance\n\ndistance\n~\nData\n\n\n\ndistance->p_good_distance\n\n\n\n\n\ndistance->p_good_angle\n\n\n\n\n\nobs_prop\n\nobs_prop\n~\nData\n\n\n\np_success->obs_prop\n\n\n\n\n\nvariance_of_distance\n\nvariance_of_distance\n~\nHalfNormal\n\n\n\nvariance_of_distance->p_good_distance\n\n\n\n\n\nvariance_of_shot\n\nvariance_of_shot\n~\nHalfNormal\n\n\n\nvariance_of_shot->p_good_angle\n\n\n\n\n\ndispersion\n\ndispersion\n~\nHalfNormal\n\n\n\ndispersion->p_success\n\n\n\n\n\n", "text/plain": [ "" ] @@ -1239,10 +1239,10 @@ ], "source": [ "with pm.Model() as disp_distance_angle_model:\n", - " distance_ = pm.MutableData(\"distance\", new_golf_data[\"distance\"], dims=\"obs_id\")\n", - " tries_ = pm.MutableData(\"tries\", new_golf_data[\"tries\"], dims=\"obs_id\")\n", - " successes_ = pm.MutableData(\"successes\", new_golf_data[\"successes\"], dims=\"obs_id\")\n", - " obs_prop_ = pm.MutableData(\n", + " distance_ = pm.Data(\"distance\", new_golf_data[\"distance\"], dims=\"obs_id\")\n", + " tries_ = pm.Data(\"tries\", new_golf_data[\"tries\"], dims=\"obs_id\")\n", + " successes_ = pm.Data(\"successes\", new_golf_data[\"successes\"], dims=\"obs_id\")\n", + " obs_prop_ = pm.Data(\n", " \"obs_prop\", new_golf_data[\"successes\"] / new_golf_data[\"tries\"], dims=\"obs_id\"\n", " )\n", "\n", diff --git a/examples/case_studies/putting_workflow.myst.md b/examples/case_studies/putting_workflow.myst.md index a896273e7..f83794fac 100644 --- a/examples/case_studies/putting_workflow.myst.md +++ b/examples/case_studies/putting_workflow.myst.md @@ -128,13 +128,13 @@ p(\text{success}) = \operatorname{logit}^{-1}(a \cdot \text{distance} + b) \\ \text{num. successes} \sim \operatorname{Binomial}(\text{tries}, p(\text{success})) $$ -Here is how to write that model in PyMC. We use underscore appendices in our model variables to avoid polluting the namespace. We also use {class}`pymc.MutableData` to let us swap out the data later, when we will work with a newer data set. +Here is how to write that model in PyMC. We use underscore appendices in our model variables to avoid polluting the namespace. We also use {class}`pymc.Data` to let us swap out the data later, when we will work with a newer data set. ```{code-cell} ipython3 with pm.Model() as logit_model: - distance_ = pm.MutableData("distance", golf_data["distance"], dims="obs_id") - tries_ = pm.MutableData("tries", golf_data["tries"], dims="obs_id") - successes_ = pm.MutableData("successes", golf_data["successes"], dims="obs_id") + distance_ = pm.Data("distance", golf_data["distance"], dims="obs_id") + tries_ = pm.Data("tries", golf_data["tries"], dims="obs_id") + successes_ = pm.Data("successes", golf_data["successes"], dims="obs_id") a_ = pm.Normal("a") b_ = pm.Normal("b") @@ -271,9 +271,9 @@ def phi(x): with pm.Model() as angle_model: - distance_ = pm.MutableData("distance", golf_data["distance"], dims="obs_id") - tries_ = pm.MutableData("tries", golf_data["tries"], dims="obs_id") - successes_ = pm.MutableData("successes", golf_data["successes"], dims="obs_id") + distance_ = pm.Data("distance", golf_data["distance"], dims="obs_id") + tries_ = pm.Data("tries", golf_data["tries"], dims="obs_id") + successes_ = pm.Data("successes", golf_data["successes"], dims="obs_id") variance_of_shot = pm.HalfNormal("variance_of_shot") p_goes_in = pm.Deterministic( @@ -512,9 +512,9 @@ DISTANCE_TOLERANCE = 3.0 with pm.Model() as distance_angle_model: - distance_ = pm.MutableData("distance", new_golf_data["distance"], dims="obs_id") - tries_ = pm.MutableData("tries", new_golf_data["tries"], dims="obs_id") - successes_ = pm.MutableData("successes", new_golf_data["successes"], dims="obs_id") + distance_ = pm.Data("distance", new_golf_data["distance"], dims="obs_id") + tries_ = pm.Data("tries", new_golf_data["tries"], dims="obs_id") + successes_ = pm.Data("successes", new_golf_data["successes"], dims="obs_id") variance_of_shot = pm.HalfNormal("variance_of_shot") variance_of_distance = pm.HalfNormal("variance_of_distance") @@ -619,10 +619,10 @@ We follow approach 3, as in the Stan case study, and leave 1 as an exercise. ```{code-cell} ipython3 with pm.Model() as disp_distance_angle_model: - distance_ = pm.MutableData("distance", new_golf_data["distance"], dims="obs_id") - tries_ = pm.MutableData("tries", new_golf_data["tries"], dims="obs_id") - successes_ = pm.MutableData("successes", new_golf_data["successes"], dims="obs_id") - obs_prop_ = pm.MutableData( + distance_ = pm.Data("distance", new_golf_data["distance"], dims="obs_id") + tries_ = pm.Data("tries", new_golf_data["tries"], dims="obs_id") + successes_ = pm.Data("successes", new_golf_data["successes"], dims="obs_id") + obs_prop_ = pm.Data( "obs_prop", new_golf_data["successes"] / new_golf_data["tries"], dims="obs_id" )