{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "This notebook is the data analysis I did for [this post](https://lettertok.com/index.php/2020/09/16/smorgasbord-2020-9-16/)." ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "# [Castillo et al](https://www.sciencedirect.com/science/article/pii/S0960076020302764)\n", "\n", "\n", "\n", "> Of 50 patients treated with calcifediol, one required admission to the ICU (2%), while of 26 untreated patients, 13 required admission (50 %)\n", " \n", " " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.0400000000000000" ] }, "execution_count": 1, "metadata": { }, "output_type": "execute_result" } ], "source": [ "n((1/50) / (13/26))" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "ineffective_proportion = 13/26\n", "effective_proportion = ineffective_proportion * 0.9\n", "very_effective_proportion = ineffective_proportion * 0.5\n", "very_very_effective_proportion = ineffective_proportion * 0.1\n", "dangerous_proportion = ineffective_proportion * 1.1\n", "very_dangerous_proportion = ineffective_proportion * 1.5\n", "very_very_dangerous_proportion = ineffective_proportion * 1.9" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "f(x) = x^1 * (1-x)^(50-1) * binomial(50,1,hold=True) " ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "x |--> -(x - 1)^49*x*binomial(50, 1)" ] }, "execution_count": 4, "metadata": { }, "output_type": "execute_result" } ], "source": [ "show(f)" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.202486777043982\n", "9.43869427378229e-6\n", "4.26534636264292e-12\n", "4.44089209850063e-14\n", "2.79734395057776e-16\n", "1.18329135783152e-28\n", "8.43769498715155e-63\n" ] } ], "source": [ "print(n(f(very_very_effective_proportion)))\n", "print(n(f(very_effective_proportion)))\n", "print(n(f(effective_proportion)))\n", "print(n(f(ineffective_proportion)))\n", "print(n(f(dangerous_proportion)))\n", "print(n(f(very_dangerous_proportion)))\n", "print(n(f(very_very_dangerous_proportion)))\n", "#The n() function makes the output a decimal instead of a huge fraction" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "total = f(very_very_effective_proportion) + f(very_effective_proportion) + f(effective_proportion) + f(ineffective_proportion) + f(dangerous_proportion) + f(very_dangerous_proportion) + f(very_very_dangerous_proportion)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "0.999953388271731\n", "0.0000466117069850912\n", "2.10638324622593e-11\n", "2.19307411855358e-13\n", "1.38143023577983e-15\n", "5.84352331470649e-28\n", "4.16684082525198e-62\n" ] } ], "source": [ "print(n(f(very_very_effective_proportion)/total))\n", "print(n(f(very_effective_proportion)/total))\n", "print(n(f(effective_proportion)/total))\n", "print(n(f(ineffective_proportion)/total))\n", "print(n(f(dangerous_proportion)/total))\n", "print(n(f(very_dangerous_proportion)/total))\n", "print(n(f(very_very_dangerous_proportion)/total))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "Well, that's decisive" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "" ], "text/plain": [ "(x, y) |--> (x - 1)^49*x*(y - 1)^13*y^13" ] }, "execution_count": 8, "metadata": { }, "output_type": "execute_result" } ], "source": [ "var('x y')\n", "f_2d(x,y) = x^1 * (1-x)^(50-1) * y^13 * (1-y)^(26-13) \n", "show(f_2d)\n", "#The binomials are just constants, so I could leave them out." ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "dangerous_volume = 0\n", "unsafe_volume = 0\n", "safe_volume = 0\n", "effective_volume = 0\n", "very_very_effective_volume = 0\n", "very_effective_volume = 0\n", "total_volume = 0\n", "density = 100\n", "for x in range(density):\n", " xx = x / density\n", " for y in range(density):\n", " yy = y / density\n", " value = f_2d(xx, yy)\n", " if 1.1 * yy <= xx: #Raises death rates by at least 10%\n", " dangerous_volume+= value\n", " if yy < xx: #Raises death rates\n", " unsafe_volume+= value\n", " if xx <= yy: #Does not raise death rates\n", " safe_volume+= value\n", " if 0.9 * yy >= xx: #Lowers death rates by at least 10% \n", " effective_volume+= value\n", " if 0.1 * yy >= xx: #Lowers death rates by at least 90% \n", " very_very_effective_volume+= value\n", " if 0.5 * yy >= xx: #Lowers death rates by at least 50% \n", " very_effective_volume+= value\n", " total_volume += value" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": false, "scrolled": true }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8.30296275867362e-8\n", "1.80527874248038e-7\n", "0.999999819472126\n", "0.999999267348029\n", "0.999830190538604\n", "0.715973398225514\n" ] } ], "source": [ "print(n(dangerous_volume/total_volume))\n", "print(n(unsafe_volume/total_volume))\n", "print(n(safe_volume/total_volume))\n", "print(n(effective_volume/total_volume))\n", "print(n(very_effective_volume/total_volume))\n", "print(n(very_very_effective_volume/total_volume))" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ "dangerous_volume = 0\n", "unsafe_volume = 0\n", "safe_volume = 0\n", "effective_volume = 0\n", "very_very_effective_volume = 0\n", "very_effective_volume = 0\n", "total_volume = 0\n", "density = 300\n", "for x in range(density):\n", " xx = x / density\n", " for y in range(density):\n", " yy = y / density\n", " value = f_2d(xx, yy)\n", " if 1.1 * yy <= xx: #Raises death rates by at least 10%\n", " dangerous_volume+= value\n", " if yy < xx: #Raises death rates\n", " unsafe_volume+= value\n", " if xx <= yy: #Does not raise death rates\n", " safe_volume+= value\n", " if 0.9 * yy >= xx: #Lowers death rates by at least 10% \n", " effective_volume+= value\n", " if 0.1 * yy >= xx: #Lowers death rates by at least 90% \n", " very_very_effective_volume+= value\n", " if 0.5 * yy >= xx: #Lowers death rates by at least 50% \n", " very_effective_volume+= value\n", " total_volume += value" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "8.27504631854543e-8\n", "2.16833411622758e-7\n", "0.999999783166588\n", "0.999999265181577\n", "0.999817480443293\n", "0.717983321315720\n" ] } ], "source": [ "print(n(dangerous_volume/total_volume))\n", "print(n(unsafe_volume/total_volume))\n", "print(n(safe_volume/total_volume))\n", "print(n(effective_volume/total_volume))\n", "print(n(very_effective_volume/total_volume))\n", "print(n(very_very_effective_volume/total_volume))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "**Assuming the study's data is correct,** Calcifediol certainly reduces ICU rates by at least 50% (a relative reduction).\n", "And it probably reduces ICU rates by at least 90%.\n", "\n" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": "\n\n", "text/plain": [ "Graphics3d Object" ] }, "execution_count": 13, "metadata": { }, "output_type": "execute_result" } ], "source": [ "plot3d(f_2d*100, (0,1),(0,1))" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "The graph shows that the control group's ICU rate is somewhere around 50%, but it could be anywhere in the bell curve, \n", "like 60% or 40%. But the experimental group's ICU rate is only a few percent." ] }, { "cell_type": "code", "execution_count": 0, "metadata": { "collapsed": false }, "outputs": [ ], "source": [ ] } ], "metadata": { "kernelspec": { "display_name": "SageMath 9.1", "language": "sagemath", "metadata": { "cocalc": { "description": "Open-source mathematical software system", "priority": 10, "url": "https://www.sagemath.org/" } }, "name": "sage-9.1" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.3" } }, "nbformat": 4, "nbformat_minor": 4 }