|
35 | 35 | "metadata": {},
|
36 | 36 | "outputs": [],
|
37 | 37 | "source": [
|
38 |
| - "az.style.use('arviz-darkgrid')\n", |
| 38 | + "az.style.use(\"arviz-darkgrid\")\n", |
39 | 39 | "\n",
|
40 | 40 | "%config Inline.figure_formats = ['retina']\n",
|
41 | 41 | "%load_ext watermark"
|
|
58 | 58 | "outputs": [],
|
59 | 59 | "source": [
|
60 | 60 | "with pm.Model() as model_1:\n",
|
61 |
| - " theta = pm.Uniform('theta', lower=0, upper=1)\n", |
62 |
| - " obs = pm.Binomial('observed', n=births, p=theta, observed=fem_births)" |
| 61 | + " theta = pm.Uniform(\"theta\", lower=0, upper=1)\n", |
| 62 | + " obs = pm.Binomial(\"observed\", n=births, p=theta, observed=fem_births)" |
63 | 63 | ]
|
64 | 64 | },
|
65 | 65 | {
|
|
240 | 240 | }
|
241 | 241 | ],
|
242 | 242 | "source": [
|
243 |
| - "az.plot_posterior(trace_1); # same as pm.plot_posterior()" |
| 243 | + "az.plot_posterior(trace_1)\n", |
| 244 | + "# same as pm.plot_posterior()" |
244 | 245 | ]
|
245 | 246 | },
|
246 | 247 | {
|
|
268 | 269 | "x = np.linspace(0, 1, 1000)\n",
|
269 | 270 | "y = beta.pdf(x, 438, 544)\n",
|
270 | 271 | "\n",
|
271 |
| - "mean_t = df['mean'].values[0]\n", |
272 |
| - "sd_t = df['sd'].values[0]\n", |
273 |
| - "alpha_t = (mean_t**2 * (1 - mean_t)) / (sd_t**2) - mean_t\n", |
274 |
| - "beta_t = (1 - mean_t) * (mean_t * (1 - mean_t) / sd_t**2 - 1)\n", |
| 272 | + "mean_t = df[\"mean\"].values[0]\n", |
| 273 | + "sd_t = df[\"sd\"].values[0]\n", |
| 274 | + "alpha_t = (mean_t ** 2 * (1 - mean_t)) / (sd_t ** 2) - mean_t\n", |
| 275 | + "beta_t = (1 - mean_t) * (mean_t * (1 - mean_t) / sd_t ** 2 - 1)\n", |
275 | 276 | "y_pred = beta.pdf(x, alpha_t, beta_t)"
|
276 | 277 | ]
|
277 | 278 | },
|
|
293 | 294 | ],
|
294 | 295 | "source": [
|
295 | 296 | "plt.figure(figsize=(10, 5))\n",
|
296 |
| - "plt.plot(x, y, label='True', linewidth=5)\n", |
297 |
| - "plt.plot(x, y_pred, 'o', label='Predicted', linewidth=4, alpha=0.6)\n", |
| 297 | + "plt.plot(x, y, label=\"True\", linewidth=5)\n", |
| 298 | + "plt.plot(x, y_pred, \"o\", label=\"Predicted\", linewidth=4, alpha=0.6)\n", |
298 | 299 | "plt.legend()\n",
|
299 |
| - "plt.title('The posterior distribution')\n", |
300 |
| - "plt.xlabel(r'$\\theta$', fontsize=14);" |
| 300 | + "plt.title(\"The posterior distribution\")\n", |
| 301 | + "plt.xlabel(r\"$\\theta$\", fontsize=14);" |
301 | 302 | ]
|
302 | 303 | },
|
303 | 304 | {
|
|
314 | 315 | "outputs": [],
|
315 | 316 | "source": [
|
316 | 317 | "with pm.Model() as model_2:\n",
|
317 |
| - " theta = pm.Uniform('theta', lower=0, upper=1)\n", |
318 |
| - " trans = pm.Deterministic('trans', pm.logit(theta))\n", |
319 |
| - " phi = pm.Deterministic('phi', (1 - theta) / theta)\n", |
320 |
| - " obs = pm.Binomial('observed', n=births, p=theta, observed=fem_births)" |
| 318 | + " theta = pm.Uniform(\"theta\", lower=0, upper=1)\n", |
| 319 | + " trans = pm.Deterministic(\"trans\", pm.logit(theta))\n", |
| 320 | + " phi = pm.Deterministic(\"phi\", (1 - theta) / theta)\n", |
| 321 | + " obs = pm.Binomial(\"observed\", n=births, p=theta, observed=fem_births)" |
321 | 322 | ]
|
322 | 323 | },
|
323 | 324 | {
|
|
363 | 364 | "outputs": [],
|
364 | 365 | "source": [
|
365 | 366 | "with pm.Model() as model_2_bad:\n",
|
366 |
| - " theta = pm.Uniform('theta', lower=0, upper=1)\n", |
367 |
| - " trans = pm.Deterministic('trans', pm.logit(theta))\n", |
368 |
| - " phi = pm.Deterministic('phi', (1 - theta) / theta)\n", |
369 |
| - " obs = pm.Binomial('observed', n=births, p=theta, observed=-2)" |
| 367 | + " theta = pm.Uniform(\"theta\", lower=0, upper=1)\n", |
| 368 | + " trans = pm.Deterministic(\"trans\", pm.logit(theta))\n", |
| 369 | + " phi = pm.Deterministic(\"phi\", (1 - theta) / theta)\n", |
| 370 | + " obs = pm.Binomial(\"observed\", n=births, p=theta, observed=-2)" |
370 | 371 | ]
|
371 | 372 | },
|
372 | 373 | {
|
|
601 | 602 | ],
|
602 | 603 | "source": [
|
603 | 604 | "fig, axes = plt.subplots(ncols=2, nrows=1, figsize=(11, 4))\n",
|
604 |
| - "az.plot_posterior(trace_2, var_names=['trans', 'phi'], ax=axes);" |
| 605 | + "az.plot_posterior(trace_2, var_names=[\"trans\", \"phi\"], ax=axes);" |
605 | 606 | ]
|
606 | 607 | },
|
607 | 608 | {
|
|
625 | 626 | }
|
626 | 627 | ],
|
627 | 628 | "source": [
|
628 |
| - "lldd = expit(df2.loc['trans','hpd_3%'])\n", |
629 |
| - "llii = expit(df2.loc['trans','hpd_97%'])\n", |
| 629 | + "lldd = expit(df2.loc[\"trans\", \"hpd_3%\"])\n", |
| 630 | + "llii = expit(df2.loc[\"trans\", \"hpd_97%\"])\n", |
630 | 631 | "\n",
|
631 |
| - "print(f'The interval is [{lldd:.3f}, {llii:.3f}]')" |
| 632 | + "print(f\"The interval is [{lldd:.3f}, {llii:.3f}]\")" |
632 | 633 | ]
|
633 | 634 | },
|
634 | 635 | {
|
|
650 | 651 | "\n",
|
651 | 652 | "\n",
|
652 | 653 | "def triangular(central_num, width):\n",
|
653 |
| - " \n", |
| 654 | + "\n", |
654 | 655 | " left_num = central_num - width\n",
|
655 | 656 | " right_num = central_num + width\n",
|
656 |
| - " theta = pm.Triangular('theta', lower=left_num, upper=right_num, c=central_num)\n", |
657 |
| - " \n", |
658 |
| - "# Comment these lines to see some changes\n", |
| 657 | + " theta = pm.Triangular(\"theta\", lower=left_num, upper=right_num, c=central_num)\n", |
| 658 | + "\n", |
| 659 | + " # Comment these lines to see some changes\n", |
659 | 660 | " if tt.lt(left_num, theta):\n",
|
660 |
| - " theta = pm.Uniform('theta1', lower=0, upper=left_num)\n", |
| 661 | + " theta = pm.Uniform(\"theta1\", lower=0, upper=left_num)\n", |
661 | 662 | " if tt.gt(right_num, theta):\n",
|
662 |
| - " theta = pm.Uniform('theta2', lower=right_num, upper=1)\n", |
663 |
| - " \n", |
664 |
| - " return theta " |
| 663 | + " theta = pm.Uniform(\"theta2\", lower=right_num, upper=1)\n", |
| 664 | + "\n", |
| 665 | + " return theta" |
665 | 666 | ]
|
666 | 667 | },
|
667 | 668 | {
|
|
682 | 683 | "\n",
|
683 | 684 | "with pm.Model() as model_3:\n",
|
684 | 685 | " theta = triangular(central_num, width)\n",
|
685 |
| - " obs = pm.Binomial('observed', n=births, p=theta, observed=fem_births)" |
| 686 | + " obs = pm.Binomial(\"observed\", n=births, p=theta, observed=fem_births)" |
686 | 687 | ]
|
687 | 688 | },
|
688 | 689 | {
|
|
759 | 760 | }
|
760 | 761 | ],
|
761 | 762 | "source": [
|
762 |
| - "az.plot_trace(trace_3, var_names=['theta']);" |
| 763 | + "az.plot_trace(trace_3, var_names=[\"theta\"]);" |
763 | 764 | ]
|
764 | 765 | },
|
765 | 766 | {
|
|
834 | 835 | }
|
835 | 836 | ],
|
836 | 837 | "source": [
|
837 |
| - "az.summary(trace_3, var_names='theta', round_to=4)" |
| 838 | + "az.summary(trace_3, var_names=\"theta\", round_to=4)" |
838 | 839 | ]
|
839 | 840 | },
|
840 | 841 | {
|
|
861 | 862 | }
|
862 | 863 | ],
|
863 | 864 | "source": [
|
864 |
| - "az.plot_posterior(trace_3, var_names='theta');" |
| 865 | + "az.plot_posterior(trace_3, var_names=\"theta\");" |
865 | 866 | ]
|
866 | 867 | },
|
867 | 868 | {
|
|
878 | 879 | "outputs": [],
|
879 | 880 | "source": [
|
880 | 881 | "with pm.Model() as poisson_model:\n",
|
881 |
| - " theta = pm.Gamma('theta', alpha=3, beta=5)\n", |
882 |
| - " post = pm.Poisson('post', mu=2 * theta, observed=3)" |
| 882 | + " theta = pm.Gamma(\"theta\", alpha=3, beta=5)\n", |
| 883 | + " post = pm.Poisson(\"post\", mu=2 * theta, observed=3)" |
883 | 884 | ]
|
884 | 885 | },
|
885 | 886 | {
|
|
1160 | 1161 | "outputs": [],
|
1161 | 1162 | "source": [
|
1162 | 1163 | "x = np.linspace(0, 3, 1000)\n",
|
1163 |
| - "y = gamma.pdf(x, 6, scale=1/7)\n", |
| 1164 | + "y = gamma.pdf(x, 6, scale=1 / 7)\n", |
1164 | 1165 | "\n",
|
1165 |
| - "mean_t = df4['mean'].values[0]\n", |
1166 |
| - "sd_t = df4['sd'].values[0]\n", |
1167 |
| - "alpha_t = mean_t**2 / sd_t**2\n", |
1168 |
| - "beta_t = mean_t / sd_t**2\n", |
1169 |
| - "y_pred = gamma.pdf(x, alpha_t, scale=1/beta_t)" |
| 1166 | + "mean_t = df4[\"mean\"].values[0]\n", |
| 1167 | + "sd_t = df4[\"sd\"].values[0]\n", |
| 1168 | + "alpha_t = mean_t ** 2 / sd_t ** 2\n", |
| 1169 | + "beta_t = mean_t / sd_t ** 2\n", |
| 1170 | + "y_pred = gamma.pdf(x, alpha_t, scale=1 / beta_t)" |
1170 | 1171 | ]
|
1171 | 1172 | },
|
1172 | 1173 | {
|
|
1187 | 1188 | ],
|
1188 | 1189 | "source": [
|
1189 | 1190 | "plt.figure(figsize=(10, 5))\n",
|
1190 |
| - "plt.plot(x, y, 'k', label='True', linewidth=7)\n", |
1191 |
| - "plt.plot(x, y_pred, 'C1', label='Predicted', linewidth=3, alpha=0.9)\n", |
| 1191 | + "plt.plot(x, y, \"k\", label=\"True\", linewidth=7)\n", |
| 1192 | + "plt.plot(x, y_pred, \"C1\", label=\"Predicted\", linewidth=3, alpha=0.9)\n", |
1192 | 1193 | "plt.legend()\n",
|
1193 |
| - "plt.title('The posterior distribution')\n", |
1194 |
| - "plt.xlabel(r'$\\theta$', fontsize=14);" |
| 1194 | + "plt.title(\"The posterior distribution\")\n", |
| 1195 | + "plt.xlabel(r\"$\\theta$\", fontsize=14);" |
1195 | 1196 | ]
|
1196 | 1197 | },
|
1197 | 1198 | {
|
|
1208 | 1209 | "outputs": [],
|
1209 | 1210 | "source": [
|
1210 | 1211 | "with pm.Model() as poisson_model_2:\n",
|
1211 |
| - " theta = pm.Gamma('theta', alpha=3, beta=5)\n", |
1212 |
| - " post = pm.Poisson('post', mu=20 * theta, observed=30)" |
| 1212 | + " theta = pm.Gamma(\"theta\", alpha=3, beta=5)\n", |
| 1213 | + " post = pm.Poisson(\"post\", mu=20 * theta, observed=30)" |
1213 | 1214 | ]
|
1214 | 1215 | },
|
1215 | 1216 | {
|
|
1399 | 1400 | "outputs": [],
|
1400 | 1401 | "source": [
|
1401 | 1402 | "x = np.linspace(0, 3, 1000)\n",
|
1402 |
| - "y = gamma.pdf(x, 33, scale=1/25) # How you write alpha and beta\n", |
| 1403 | + "y = gamma.pdf(x, 33, scale=1 / 25) # How you write alpha and beta\n", |
1403 | 1404 | "\n",
|
1404 |
| - "mean_t = df5['mean'].values[0]\n", |
1405 |
| - "sd_t = df5['sd'].values[0]\n", |
1406 |
| - "alpha_t = mean_t**2 / sd_t**2\n", |
1407 |
| - "beta_t = mean_t / sd_t**2\n", |
1408 |
| - "y_pred = gamma.pdf(x, alpha_t, scale=1/beta_t)" |
| 1405 | + "mean_t = df5[\"mean\"].values[0]\n", |
| 1406 | + "sd_t = df5[\"sd\"].values[0]\n", |
| 1407 | + "alpha_t = mean_t ** 2 / sd_t ** 2\n", |
| 1408 | + "beta_t = mean_t / sd_t ** 2\n", |
| 1409 | + "y_pred = gamma.pdf(x, alpha_t, scale=1 / beta_t)" |
1409 | 1410 | ]
|
1410 | 1411 | },
|
1411 | 1412 | {
|
|
1426 | 1427 | ],
|
1427 | 1428 | "source": [
|
1428 | 1429 | "plt.figure(figsize=(10, 5))\n",
|
1429 |
| - "plt.plot(x, y, 'k', label='True', linewidth=5)\n", |
1430 |
| - "plt.plot(x, y_pred, 'oC1', label='Predicted', alpha=0.15)\n", |
| 1430 | + "plt.plot(x, y, \"k\", label=\"True\", linewidth=5)\n", |
| 1431 | + "plt.plot(x, y_pred, \"oC1\", label=\"Predicted\", alpha=0.15)\n", |
1431 | 1432 | "plt.legend()\n",
|
1432 |
| - "plt.title('The posterior distribution')\n", |
1433 |
| - "plt.xlabel(r'$\\theta$', fontsize=14);" |
| 1433 | + "plt.title(\"The posterior distribution\")\n", |
| 1434 | + "plt.xlabel(r\"$\\theta$\", fontsize=14);" |
1434 | 1435 | ]
|
1435 | 1436 | },
|
1436 | 1437 | {
|
|
1447 | 1448 | }
|
1448 | 1449 | ],
|
1449 | 1450 | "source": [
|
1450 |
| - "val = np.mean(trace_poisson_2['theta'] >= 1)\n", |
1451 |
| - "print(f'The posterior probability that theta exceeds 1.0 is {val:.2f}.')" |
| 1451 | + "val = np.mean(trace_poisson_2[\"theta\"] >= 1)\n", |
| 1452 | + "print(f\"The posterior probability that theta exceeds 1.0 is {val:.2f}.\")" |
1452 | 1453 | ]
|
1453 | 1454 | },
|
1454 | 1455 | {
|
|
0 commit comments