2025-02-22 16:10:52 -05:00
|
|
|
{
|
|
|
|
|
"cells": [
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-22 17:26:53 -05:00
|
|
|
"execution_count": 1,
|
2025-02-22 16:10:52 -05:00
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-22 17:26:53 -05:00
|
|
|
"image/png": "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
|
2025-02-22 16:10:52 -05:00
|
|
|
"text/plain": [
|
2025-02-22 17:26:53 -05:00
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
2025-02-22 16:10:52 -05:00
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"SENSITIVITY = 0.95\n",
|
|
|
|
|
"SPECIFICITY = 0.95\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def posterior(prior, sensitivity, specificity):\n",
|
|
|
|
|
" return (sensitivity * prior) / (sensitivity * prior + (1 - specificity) * (1 - prior))\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"priors = np.linspace(0, 1, 100)\n",
|
|
|
|
|
"posteriors = posterior(priors, SENSITIVITY, SPECIFICITY)\n",
|
|
|
|
|
"\n",
|
2025-02-22 16:50:36 -05:00
|
|
|
"plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"plt.plot(priors, posteriors, color = 'purple')\n",
|
2025-02-22 16:10:52 -05:00
|
|
|
"plt.xlim(0, 1) \n",
|
|
|
|
|
"plt.ylim(0, 1)\n",
|
|
|
|
|
"plt.xlabel('Prior')\n",
|
|
|
|
|
"plt.ylabel('Posterior')\n",
|
|
|
|
|
"plt.show()\n",
|
|
|
|
|
"\n"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-22 17:26:53 -05:00
|
|
|
"execution_count": 3,
|
2025-02-22 16:10:52 -05:00
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-22 17:26:53 -05:00
|
|
|
"image/png": "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
|
2025-02-22 16:10:52 -05:00
|
|
|
"text/plain": [
|
2025-02-22 17:26:53 -05:00
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
2025-02-22 16:10:52 -05:00
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"prior = 0.01\n",
|
|
|
|
|
"specificity = 0.90\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def posterior_prob(prior, sensitivity, specificity):\n",
|
|
|
|
|
" return (sensitivity * prior) / ((sensitivity * prior) + ((1 - specificity) * (1 - prior)))\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"sensitivities = np.linspace(0, 1, 100)\n",
|
|
|
|
|
"posteriors = [posterior_prob(prior, sens, specificity) for sens in sensitivities]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Plot\n",
|
2025-02-22 17:26:53 -05:00
|
|
|
"plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"plt.plot(sensitivities, posteriors, color = 'red')\n",
|
|
|
|
|
"plt.xlabel('Sensitivity')\n",
|
|
|
|
|
"plt.ylabel('Posterior')\n",
|
2025-02-22 16:10:52 -05:00
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-22 17:26:53 -05:00
|
|
|
"execution_count": 4,
|
2025-02-22 16:10:52 -05:00
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-22 17:26:53 -05:00
|
|
|
"image/png": "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
|
2025-02-22 16:10:52 -05:00
|
|
|
"text/plain": [
|
2025-02-22 17:26:53 -05:00
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
2025-02-22 16:10:52 -05:00
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"prior = 0.01\n",
|
|
|
|
|
"sensitivity = 0.95\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"def posterior_prob(prior, sensitivity, specificity):\n",
|
|
|
|
|
" return (sensitivity * prior) / ((sensitivity * prior) + ((1 - specificity) * (1 - prior)))\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Vary specificity from 0 to 1\n",
|
|
|
|
|
"specificities = np.linspace(0, 1, 100)\n",
|
|
|
|
|
"posteriors = [posterior_prob(prior, sensitivity, sp) for sp in specificities]\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Plot\n",
|
2025-02-22 17:26:53 -05:00
|
|
|
"plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"plt.plot(specificities, posteriors, color = 'blue') \n",
|
|
|
|
|
"plt.xlabel('Specificity')\n",
|
|
|
|
|
"plt.ylabel('Posterior')\n",
|
2025-02-22 16:10:52 -05:00
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
|
|
|
|
"execution_count": null,
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [],
|
|
|
|
|
"source": [
|
|
|
|
|
"'''\n",
|
|
|
|
|
"As the disease becomes more common (higher prior), the posterior increases because a positive test is more believable.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Increasing sensitivity (correctly detecting disease) lowers false negatives, raising the posterior.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"Increasing specificity (correctly identifying healthy individuals) lowers false positives, also raising the posterior.\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"'''"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"cell_type": "code",
|
2025-02-22 17:26:53 -05:00
|
|
|
"execution_count": 5,
|
2025-02-22 16:10:52 -05:00
|
|
|
"metadata": {},
|
|
|
|
|
"outputs": [
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
2025-02-22 17:26:53 -05:00
|
|
|
"image/png": "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
|
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+kAAAPdCAYAAAD21inEAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdV3BkZ3Yn+P93703vkPAeKAOgvC+Wo2ezm1J3i2x2S90ahaQe2ZA0K41iJmZ3tQ+7sbOaBz3MboRWq9XMrEamZdqQ3S16TzZtkeUAFIBCAQXvXSaA9Hnv9+3DyZsFoHwVUEigzi+CQYKFAjITCSD/95zvHKGUUmCMMcYYY4wxxti609b7BjDGGGOMMcYYY4xwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKBId0xhhjjDHGGGOsQHBIZ4wxxhhjjDHGCgSHdMYYY4wxxhhjrEBwSGeMMcYYY4wxxgoEh3TGGGOMMcYYY6xAcEhnjDHGGGOMMcYKhLHeN4AxxtjGIqWEaZrQNA26rkMIsd43iTHGGGNs0+CQzhhj7LYopWCaJrLZLJLJJDRNg6ZpMAwDhmFA13UO7Ywxxhhj90gopdR63wjGGGOFza6eW5YFpRQymQw0TYOUElLKfDDn0M4YY4wxdm84pDPGGLshpRSklMhms1BKQQixLKQvfT/7n5Wh3eFwQNd1GIYBTdM4tDPGGGOM3QSHdMYYY9ellEI2m4VlWQAAIQSEEJBSXhPSr/d3l4Z2++/bod2utHNoZ4wxxhhbjs+kM8YYu4ZdPbcs666CtB3oAUDX9WWhPZVK5d+HQztjjDHG2HIc0hljjOUppWBZFkzThJRy1ULz7YZ2uy2eQztjjDHGHlTc7s4YYwzAjdvbV7qddve7+dwr/7ne9HgO7Ywxxhjb7DikM8YYywfv26mer0VIX2nleXbgans8h3bGGGOMbWbc7s4YYw8wu73dnt5eKKHXruLbFwLs0G634vf19aGqqgrBYDAf2A3DuGH1nzHGGGNso+CQzhhjD6iV7e2FEtCvZ2Von5ubQ2lpKUzTRDabzf/5yjPtHNoZY4wxttFwSGeMsQfM9Xafb7Qga99mw6BfY3al/Xqh3d7TbrfHM8YYY4wVMg7pjDH2ALGDrGmaAG48HG4jWDpS5Ubt8StD+9IqO4d2xhhjjBUiDumMMfaAsKvn9jC2jRxQb3Vh4UahPZvNIpPJAMA1Q+g4tDPGGGOsEHBIZ4yxTW5pe/tq7j5fb3eynOR6od1+TLLZbP59OLQzxhhjbL1xSGeMsU1MKYVkMonu7m40Nzfnh6ltdPd6H+zz6rbbCe329HjGGGOMsbXEIZ0xxjYpO3RmMhkMDQ2hpaVlU4XMO6mk38rNQnsmk8lX4a83PZ4xxhhjbDVxSGeMsU1m5e5zO3yudqhdT2v9+W83tK9sj1/vx4UxxhhjGx+HdMYY20Sut/vcDuerGdLtj7WeoXQ178+tLA3t9ueVUiKTySCdTnNoZ4wxxtiq4ZDOGGObhF09Xzkczv73/Qy1a209w6/9uTm0M8YYY2wtcEhnjLENbuXu85XT2zdjSAcK5/7cLLSn0+mbrnzj0M4YY4yxlTikM8bYBrZy97m9amypzRjShRAFe3+WhnZd1/M72pVS14R2h8ORH0a3WVbjMcYYY+zecEhnjLEN6E52n2/WkL5RLL1wsjK0p1Kp/PvYod2utHNoZ4wxxh5MHNIZY2yDud5wuFuFudWsPBdKcNyoFx04tDPGGGPsZjikM8bYBmJXzy3LuqPQttrt4esdFtf786+m2w3tK3e0c2hnjDHGNicO6YwxtgHYu89N07xle/v1FPIZ7ru12e6P7Uah3R5El0qloGnaNYPoOLQzxhhjmwOHdMYYK3B3096+0mqG9MnJSfT398Pv9yMcDiMcDsPhcKzKx75dD1IYXTkM0A7tlmXBsqwbrnzj0M4YY4xtTBzSGWOsgN1o9/mdWo2QblkWuru7MTY2hoaGBqRSKfT39+PixYvLAntRUREMY+1/vWzWSvqt2KFd0zQANw/tS6fHX2/yP2OMMcYKD4d0xhgrQEt3nyul7rkqeq8hPR6P48KFCxBC4MSJE/kQLoRAJpNBJBJBJBJBb28vksnkNaHd3iG+WjhsXnWz0G6aZv7PV55p59DOGGOMFSYO6YwxVmCklDBN857a21e6l5A+NjaGjo4O1NXVobm5OR/MbU6nExUVFaioqAAApNPpfGjv7u5GOp1GMBjMh/ZgMLgqof1BraTfyo1Cu2mayGazy0K7XWm32+MZY4wxtv44pDPGWIFYuvtcKbWqlc67CemmaaKzsxPT09PYv38/ysvL87fzZlwuFyorK1FZWQkASCaT+dA+NjYG0zQRCoVQVFSE4uJiBAKBOw6IXAG+fRzaGWOMsY2FQzpjjBWAlcPhVrsV+U5D+sLCAlpbW+F0OnHq1Cm43e67/twejwcejwfV1dVQSiGRSCAajSISiWBkZARSSoRCoXylPRAI3NZ950r63blVaAdwzRA6Du2MMcbY/cMhnTHG1tnd7j6/E7cb0pVSGB4eRnd3N7Zs2YJt27at+sUCn88Hn8+HmpoaKKUQj8fzlfbBwUEAQFFRUT60+3y+a24DV9JXz41CezabxdjYGBKJBBobGzm0M8YYY/cJh3TGGFsn97r7/E7cTkjPZrO4ePEiotEoDh8+jOLi4jW5LStvl9/vh9/vR11dHZRSWFxcRDQaxdzcHPr6+qBp2rLQ7vV6AXAlfa0sDe2maSKRSACg54ddaRdCLAvt9vR4xhhjjN07DumMMbYOVmP3+Z24VUiPRCJobW1FIBDAqVOn4HQ61+y23IwQAsFgEMFgEPX19ZB
|
2025-02-22 16:10:52 -05:00
|
|
|
"text/plain": [
|
2025-02-22 17:26:53 -05:00
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
|
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
},
|
|
|
|
|
{
|
|
|
|
|
"data": {
|
|
|
|
|
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA+oAAAPdCAYAAAAd4ZLHAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/NK7nSAAAACXBIWXMAAA9hAAAPYQGoP6dpAAEAAElEQVR4nOzdeZAjaXoe9icB1Im6q3AUzkRdXd3V10zP7MysqOAug5a4PCxSPETLwZAle2nqoEwtg6YpW2EdlMPWYUtabZByiDatoCzaYYVIKUSJjCCD3TPTPTvTOzuzc3VXVReATNR93wUgkek/mpmDQqOqcOeB5xfBIDkz3YVKJBL55Pd+7ytomqaBiIiIiIiIiCzBZfYLICIiIiIiIqLPMagTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWQiDOhEREREREZGFMKgTERERERERWYjH7BdARERE1qFpGvL5PFRVhcfjgdvthiAIZr8sIiKitiJomqaZ/SKIiIjIXKqqIpfLIZvNQlVVCIKArq4uCIIAj8cDl8sFl4uFeERERK3AoE5ERNSmNE1DoVBALpdDLpczArrb7TbCuaZp0DTt3D8XBIGr7ERERE3EoE5ERNRm9PL2XC6HfD4PTdOMFXM9gLvdbrjdbuO/Lw7sLpfLCPIM7ERERI3HoE5ERNQmVFVFPp9HNptFoVCApmnGHvTSwF0c1HX6LYP+v/WyeO5jJyIiaiw2kyMiInKw4vL2fD6PQqFglLFXG671/14QBGOFPZfLGavxLIsnIiJqDK6oExEROZCmaVAUBdls9sLy9suUW1G/6OcU30rof45l8URERLXjijoREZGDVFPe3gj636uHdUVRjFV7lsUTERHVhivqREREDlDcvb2e8nZdpSvq5RQ3n3O5XMbfxbJ4IiKiyjCoExER2ZRe3q7vP1dVtary9svUE9SLXx/L4omIiKrHoE5ERGQz+ni1bDYLRVEAwAi/jQrAjQjqOv1WQ5/TXrrKTkREROcxqBMREdlEufJ2fQW90RoZ1IsVr7Lr5fn6KjsRERE9x29FIiIiC9PL209OTvDZZ59hb28PmqbB4/HA4/HYLuDqDxf0BnRHR0d48uSJ8fCB6wdEREQM6kRERJakzyg/Pj7G4eEhzs7OkMlkkM/nHVEyrgf2fD6PZDJp7LXP5XJQFIWBnYiI2hrHsxEREVmIqqrI5XLIZrNQVRUAzpW32z2gl9L31bvdbmiaBlVVoaoqFEUxKgbsVjVARERULwZ1IiIik2maZuw/z+fzDRmvZkfFM9n1igL9OHg8Ho53IyKitsGgTkREZBK9e7se0PW543ooLaWHWKcrDeyKoqBQKBjHhuPdiIjI6RjUiYiIWkxVVWO8mt5ATV89ZwD9XHFgBz7fFiAIAjweT9tVHBARUftgUCciImoBlreXV0mFgH58Ssvi9f3rLIsnIiKnYVAnIiJqIr10O5vNVlTeTpcrLYsvFAooFArn5rHzuBIRkd0xqBMRETUBy9srV8vxKC2L1/exsyyeiIicgEGdiIiogfTy9lwu1/DydgbPF+nHRB/vpjfoUxTFWGXnwxEiIrIbBnUiIqI66eXt+v5zVVWbVt7eDl3fa1VaFl8a2FkWT0REdsGgTkREVCM9DGazWSiKAgDcf16lZjx4uKgs3uVynVtlJyIisioGdSIioioVl7erqgoARgdyql6zQnNpWbyqqlBV9YVVdiIiIqthUCciIqpA8Xg1PaDrK7StWp1t5Sqw3kndKVgWT0REdsKgTkREdAk91On7z508Xk3TNOzu7kKWZWxvb2N0dBSiKGJsbMwxvyvL4omIyA4Y1ImIiMpQVRW5XA7ZbNZS5e3N2NNdKBSwvr4OWZaRy+UQDocxMzODzc1NfPzxx3C73RBFEaFQCB5PY28dzGqOd1lZvMfjscR7TURE7YtBnYiI6I8Ul7fn8/mGj1ezmmw2i0wmg5WVFXR2diIajSIQCBgry4ODg5iYmMDq6irS6TTm5+cRjUYRi8XQ09Nj9stvmNKy+FwuZ7zveuWEE99/IiKyLgZ1IiJqe+1U3g4ABwcHkGUZGxsbGB0dxdzcHIaHh8v+ri6XC+FwGKFQCLu7u0in03jw4AECgQDi8TiGhoYcc4xKA3txWby+yu6U35WIiKyNQZ2IiNqWqqrGeLVCoQBN04zVc6cFMlVVsbW1BVmWcXR0hPHxcbz22mvo7e2t6M8LgoCRkRGMjIzg5OQEkiThW9/6FrxeL+LxOILBYM2l4lY71qX72PVtEIIgwOPxOLbCgoiIrINBnYiI2oq+HzmbzdquvL2W15fP57G6ugpZliEIAiKRCG7fvo2Ojo6aX0dvby9mZ2cxNTWF5eVlLC4u4unTp4jFYohGo+js7Kz577YS/XiXlsXr+9dZFk9ERM3CoE5ERG1BL2XWy9v18WpOLW8/OTmBLMtYW1tDX18fpqenMTY21tAGaR6PB/F4HLFYDJubm0ilUnj27BlCoRDi8Tj6+/sb9rPMVloWXygUjBF2HO9GRESNxqBORESOppe353I5KIpilLfbNaBf1iW9eLzazs4O/H4/XnrpJQwMDDT1NQmCAL/fD7/fj8PDQ6RSKTx69AjDw8NXjnczq+t7rS4a78ayeCIiaiQGdSIiciS9e3sul7NVeXstyo1Xm52dRVdXV8tfS39/P27duoWZmRnIsoyPPvoIHo+naePdzFI63k1vSKgoyrl57E4834iIqPmc8W1JRESE9itvv2y8mtm6urowNTVV0Xg3u783pWXxpYGdZfFERFQtBnUiIrI9PRxls1koigIAjgzo+u9SPF5tZGTk0vFqZrtqvJvdSt8vc1FZvMvlOrfKTkREdBVBc9I3JBERtZXi8nZVVQHA6MjtNKqq4p133oHL5UI2m8X4+DgikUjF49WqpQfLZjg5OUE6nUYmk0F3dzdyuRy+/OUvO/J901fZARjbL/RVdiIiooswqBMRka3oHbeLA7oezp24Wlk8Xi2XyyEQCGB6erqu8WqVaGZQ1ymKgvn5eciyjM7OTseNdyumB3ZN014I7E48b4mIqD4sfSciIlvQy9v1/eeapjmyvF1Xbrx
|
|
|
|
|
"text/plain": [
|
|
|
|
|
"<Figure size 1000x1000 with 1 Axes>"
|
2025-02-22 16:10:52 -05:00
|
|
|
]
|
|
|
|
|
},
|
|
|
|
|
"metadata": {},
|
|
|
|
|
"output_type": "display_data"
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"source": [
|
|
|
|
|
"import numpy as np\n",
|
|
|
|
|
"import matplotlib.pyplot as plt\n",
|
|
|
|
|
"from mpl_toolkits.mplot3d import Axes3D\n",
|
|
|
|
|
"\n",
|
2025-02-22 17:26:53 -05:00
|
|
|
"def posterior_prob(prior, sensitivity, specificity, eps=1e-10):\n",
|
|
|
|
|
" denom = (sensitivity * prior) + ((1 - specificity) * (1 - prior))\n",
|
|
|
|
|
" return (sensitivity * prior) / (denom + eps)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"points = 120\n",
|
|
|
|
|
"prior_values = np.linspace(0, 1, points)\n",
|
|
|
|
|
"sensitivity_values = np.linspace(0, 1, points)\n",
|
|
|
|
|
"specificity_values = np.linspace(0, 1, points)\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# First graph\n",
|
|
|
|
|
"fixed_specificity = 0.90\n",
|
|
|
|
|
"prior_grid, sensitivity_grid = np.meshgrid(prior_values, sensitivity_values)\n",
|
|
|
|
|
"posterior_grid1 = posterior_prob(prior_grid, sensitivity_grid, fixed_specificity)\n",
|
|
|
|
|
"fig1 = plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"graph1 = fig1.add_subplot(111, projection='3d')\n",
|
|
|
|
|
"graph1.scatter(prior_grid, sensitivity_grid, posterior_grid1, c='purple', marker='x', s=10)\n",
|
|
|
|
|
"graph1.set_xlabel('Prior')\n",
|
|
|
|
|
"graph1.set_ylabel('Sensitivity')\n",
|
|
|
|
|
"graph1.set_zlabel('Posterior')\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()\n",
|
|
|
|
|
"\n",
|
|
|
|
|
"# Second graph\n",
|
|
|
|
|
"fixed_sensitivity = 0.95\n",
|
|
|
|
|
"prior_grid2, specificity_grid = np.meshgrid(prior_values, specificity_values)\n",
|
|
|
|
|
"posterior_grid2 = posterior_prob(prior_grid2, fixed_sensitivity, specificity_grid)\n",
|
|
|
|
|
"fig2 = plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"graph2 = fig2.add_subplot(111, projection='3d')\n",
|
|
|
|
|
"graph2.scatter(prior_grid2, specificity_grid, posterior_grid2, c='red', marker='o', s=10)\n",
|
|
|
|
|
"graph2.set_xlabel('Prior')\n",
|
|
|
|
|
"graph2.set_ylabel('Specificity')\n",
|
|
|
|
|
"graph2.set_zlabel('Posterior')\n",
|
|
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()\n",
|
2025-02-22 16:10:52 -05:00
|
|
|
"\n",
|
2025-02-22 17:26:53 -05:00
|
|
|
"# Third graph\n",
|
|
|
|
|
"fixed_prior = 0.01\n",
|
|
|
|
|
"sensitivity_grid3, specificity_grid3 = np.meshgrid(sensitivity_values, specificity_values)\n",
|
|
|
|
|
"posterior_grid3 = posterior_prob(fixed_prior, sensitivity_grid3, specificity_grid3)\n",
|
|
|
|
|
"fig3 = plt.figure(figsize=(10, 10))\n",
|
|
|
|
|
"graph3 = fig3.add_subplot(111, projection='3d')\n",
|
|
|
|
|
"graph3.scatter(sensitivity_grid3, specificity_grid3, posterior_grid3, c='blue', marker='.', s=10)\n",
|
|
|
|
|
"graph3.set_xlabel('Sensitivity')\n",
|
|
|
|
|
"graph3.set_ylabel('Specificity')\n",
|
|
|
|
|
"graph3.set_zlabel('Posterior')\n",
|
|
|
|
|
"graph3.view_init(elev=30, azim=45)\n",
|
2025-02-22 16:10:52 -05:00
|
|
|
"plt.tight_layout()\n",
|
|
|
|
|
"plt.show()"
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
"metadata": {
|
|
|
|
|
"kernelspec": {
|
2025-03-15 15:01:32 -04:00
|
|
|
"display_name": "pystan_env",
|
2025-02-22 16:10:52 -05:00
|
|
|
"language": "python",
|
2025-03-15 15:01:32 -04:00
|
|
|
"name": "python3"
|
2025-02-22 16:10:52 -05:00
|
|
|
},
|
|
|
|
|
"language_info": {
|
|
|
|
|
"codemirror_mode": {
|
|
|
|
|
"name": "ipython",
|
|
|
|
|
"version": 3
|
|
|
|
|
},
|
|
|
|
|
"file_extension": ".py",
|
|
|
|
|
"mimetype": "text/x-python",
|
|
|
|
|
"name": "python",
|
|
|
|
|
"nbconvert_exporter": "python",
|
|
|
|
|
"pygments_lexer": "ipython3",
|
2025-02-22 17:26:53 -05:00
|
|
|
"version": "3.9.21"
|
2025-02-22 16:10:52 -05:00
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
"nbformat": 4,
|
|
|
|
|
"nbformat_minor": 2
|
|
|
|
|
}
|