{
"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