so very freaking close to done
|
@ -5,8 +5,11 @@ body{
|
|||
font-weight: 100;
|
||||
line-height: 1.7em;
|
||||
}
|
||||
b, strong{
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
article > p, article > ul{
|
||||
article > p, article > ul, article > ol, article > h1, article > h2, article > h3{
|
||||
width: 640px;
|
||||
margin:1em auto;
|
||||
}
|
||||
|
@ -37,4 +40,34 @@ iframe{
|
|||
border:2px solid #eee;
|
||||
display: block;
|
||||
margin:0 auto;
|
||||
}
|
||||
|
||||
icon{
|
||||
display: inline-block;
|
||||
width: 1em;
|
||||
height: 1em;
|
||||
position: relative;
|
||||
top:0.1em;
|
||||
background-size: 100% 100%;
|
||||
}
|
||||
icon[s]{
|
||||
background-image: url(../icons/s.png);
|
||||
}
|
||||
icon[e]{
|
||||
background-image: url(../icons/e.png);
|
||||
}
|
||||
icon[i]{
|
||||
background-image: url(../icons/i.png);
|
||||
}
|
||||
icon[r]{
|
||||
background-image: url(../icons/r.png);
|
||||
}
|
||||
|
||||
p > img{
|
||||
width: 100%;
|
||||
border: 1px solid #ddd;
|
||||
margin: 0.5em auto;
|
||||
}
|
||||
sub{
|
||||
line-height: 0;
|
||||
}
|
752
index.html
BIN
pics/dp3t.png
Normal file
After Width: | Height: | Size: 911 KiB |
BIN
pics/exponential.png
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
pics/graphs_q.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
pics/masks.png
Normal file
After Width: | Height: | Size: 127 KiB |
BIN
pics/plan.png
Normal file
After Width: | Height: | Size: 90 KiB |
BIN
pics/r.png
Normal file
After Width: | Height: | Size: 15 KiB |
BIN
pics/r2.png
Normal file
After Width: | Height: | Size: 58 KiB |
BIN
pics/r3.png
Normal file
After Width: | Height: | Size: 30 KiB |
BIN
pics/r4.png
Normal file
After Width: | Height: | Size: 49 KiB |
BIN
pics/seir.png
Normal file
After Width: | Height: | Size: 50 KiB |
BIN
pics/seirs.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
pics/sir.png
Normal file
After Width: | Height: | Size: 44 KiB |
BIN
pics/spread.png
Normal file
After Width: | Height: | Size: 47 KiB |
BIN
pics/susceptibles.png
Normal file
After Width: | Height: | Size: 63 KiB |
BIN
pics/timeline1.png
Normal file
After Width: | Height: | Size: 38 KiB |
BIN
pics/timeline2.png
Normal file
After Width: | Height: | Size: 41 KiB |
BIN
pics/timeline3.png
Normal file
After Width: | Height: | Size: 50 KiB |
|
@ -38,7 +38,7 @@
|
|||
<input class="sim_checkbox" type="checkbox" id="c_recovery">
|
||||
Becomes <icon r></icon> in <span id="label_p_recovery">N</span> days
|
||||
<br>
|
||||
<input class="sim_input" type="range" id="p_recovery" min="1" max="30" step="1" value="11">
|
||||
<input class="sim_input" type="range" id="p_recovery" min="1" max="30" step="1" value="10">
|
||||
</div>
|
||||
|
||||
<div id="label_c_waning">
|
||||
|
@ -60,9 +60,6 @@
|
|||
<br>
|
||||
|
||||
<span id="label_s">
|
||||
<br>
|
||||
But R is changed by...
|
||||
<br>
|
||||
% of people who are <i>NOT</i> <icon s></icon>
|
||||
<input class="sim_input" type="range" id="p_s" min="0" max="1" step="0.001" value="0" disabled>
|
||||
<div class="herd"></div>
|
||||
|
@ -96,10 +93,6 @@
|
|||
<br>
|
||||
<input class="sim_input recordable" type="range" id="p_masks" min="0" max="1" step="0.001" value="0">
|
||||
<br>
|
||||
Deep Cleaning
|
||||
<br>
|
||||
<input class="sim_input recordable" type="range" id="p_cleaning" min="0" max="1" step="0.001" value="0">
|
||||
<br>
|
||||
</span>
|
||||
<span id="int_block_4">
|
||||
Summer
|
||||
|
@ -121,9 +114,9 @@
|
|||
</span>
|
||||
|
||||
<span id="hospital_capacity">
|
||||
Hospital capacity at <span id="label_p_hospital">N</span>%
|
||||
ICU capacity at <span id="label_p_hospital">N</span>%
|
||||
<br>
|
||||
<input class="sim_input recordable" type="range" id="p_hospital" min="0" max="500" step="1" value="100">
|
||||
<input class="sim_input recordable" type="range" id="p_hospital" min="100" max="1000" step="1" value="333">
|
||||
</span>
|
||||
|
||||
<hr id="divider">
|
||||
|
@ -171,32 +164,32 @@
|
|||
</div>
|
||||
<div id="legend">
|
||||
|
||||
<span id="label_susceptible">
|
||||
<span id="label_susceptible" class="lines">
|
||||
<icon s></icon> Susceptible<span id="show_percent_s"></span>
|
||||
<!--<br>-->
|
||||
<br>
|
||||
</span>
|
||||
<span id="label_exposed">
|
||||
<span id="label_exposed" class="lines">
|
||||
<icon e></icon> Exposed<span id="show_percent_e"></span>
|
||||
<!--<br>-->
|
||||
<br>
|
||||
</span>
|
||||
<span id="label_infectious">
|
||||
<span id="label_infectious" class="lines">
|
||||
<icon i></icon> Infectious<span id="show_percent_i"></span>
|
||||
<!--<br>-->
|
||||
<br>
|
||||
</span>
|
||||
<span id="label_removed">
|
||||
<span id="label_removed" class="lines">
|
||||
<icon r></icon> Removed<span id="show_percent_r"></span>
|
||||
</span>
|
||||
|
||||
<br>
|
||||
<br class="lines">
|
||||
|
||||
<span id="label_herd_immunity">
|
||||
- - - Herd Immunity
|
||||
</span>
|
||||
|
||||
<!--<br>-->
|
||||
<br class="lines">
|
||||
|
||||
<span id="label_capacity">
|
||||
––– Healthcare Capacity
|
||||
––– ICU Capacity
|
||||
</span>
|
||||
|
||||
</div>
|
||||
|
|
|
@ -244,11 +244,20 @@ bbDOM.onclick = ()=>{
|
|||
let defaultParams = [
|
||||
["p_transmission", 4],
|
||||
["p_exposed", 3],
|
||||
["p_recovery", 11],
|
||||
["p_recovery", 10],
|
||||
["p_waning", 1],
|
||||
["p_hospital", 100],
|
||||
["p_hospital", 333],
|
||||
["p_years", 2],
|
||||
["p_speed", 30],
|
||||
|
||||
["p_non_s", 0],
|
||||
["p_hygiene", 0],
|
||||
["p_distancing", 0],
|
||||
["p_isolate", 0],
|
||||
["p_quarantine", 0],
|
||||
["p_cleaning", 0],
|
||||
["p_masks", 0],
|
||||
["p_summer", 0],
|
||||
];
|
||||
|
||||
sbDOM.onclick = ()=>{
|
||||
|
@ -301,7 +310,7 @@ let _showAllControls = ()=>{
|
|||
hofp.style.position = "absolute";
|
||||
hofp.style.top = "-1000px";
|
||||
setTimeout(()=>{
|
||||
let newHeight = hofp.getBoundingClientRect().height;
|
||||
let newHeight = hofp.getBoundingClientRect().height + 10;
|
||||
hofp.style.position = "";
|
||||
hofp.style.top = "";
|
||||
hofp.style.height = originalHeight+"px";
|
||||
|
|
|
@ -27,7 +27,7 @@ let interventionStrengths = [
|
|||
['isolate', 0.4],
|
||||
['quarantine', 0.5],
|
||||
['cleaning', 0.1],
|
||||
['masks', 0.5], // 3.4 fold reduction (70%) (what CI?), subtract points for... improper usage? https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3591312/ // cloth masks...
|
||||
['masks', 0.35], // 3.4 fold reduction (70%) (what CI?), subtract points for... improper usage? https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3591312/ // cloth masks...
|
||||
['summer', 0.333] // 15°C diff * 0.0225 (Wang et al)
|
||||
];
|
||||
|
||||
|
@ -120,7 +120,7 @@ let updateModel = (days, fake)=>{
|
|||
if(I>1) I=1;
|
||||
|
||||
// Susceptible & Re
|
||||
if(!fake && s_dom.disabled){
|
||||
if((!fake || params.FROZEN_IN_TIME) && s_dom.disabled){
|
||||
s_dom.value = 1 - S;
|
||||
}
|
||||
re = newlyExposed/newlyRecovered;
|
||||
|
@ -451,9 +451,9 @@ let draw = ()=>{
|
|||
});
|
||||
|
||||
// ICU bed capacity
|
||||
// Actually... just make it a generous 1%.
|
||||
// 0.6%
|
||||
if(params.p_hospital){
|
||||
y = (1-((params.p_hospital/100)*0.02))*canvas.height;
|
||||
y = (1-((params.p_hospital/100)*0.006))*canvas.height;
|
||||
h = 2;
|
||||
ctx.fillStyle = "#000000";
|
||||
ctx.fillRect(0,y,w,h);
|
||||
|
|
330
sim/js/Stages.js
|
@ -18,11 +18,11 @@ int-2a hygiene & distancing
|
|||
int-2 Flatten Curve / Herd Immunity
|
||||
int-3 Lockdown for a while
|
||||
int-4 Intermittent Lockdown "second & third waves"
|
||||
int-5 Lockdown, then Test & Trace...
|
||||
int-5b and with Vaccination!
|
||||
int-4a Calc trace
|
||||
int-4b Calc vaccinate
|
||||
int-5 Lockdown, then Test & Trace.. then Vaccination!
|
||||
int-6a Masks
|
||||
int-6b Deep Cleaning
|
||||
int-6c Summer
|
||||
int-6b Summer
|
||||
int-7 Test+Trace+Masks + One Circuit Breaker
|
||||
|
||||
yrs-1 Decay of Recovered
|
||||
|
@ -299,7 +299,7 @@ const STAGES = {
|
|||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
PLAY_RECORDING: [
|
||||
["p_distancing",0.344,84], ["p_hygiene",1,84],
|
||||
["p_distancing",0.275,84], ["p_hygiene",1,84],
|
||||
["p_distancing",0,340], ["p_hygiene",0,340],
|
||||
],
|
||||
SIR: [0.999995,0.000005,0]
|
||||
|
@ -323,7 +323,7 @@ const STAGES = {
|
|||
SHOW_ALL_AT_START: true,
|
||||
PLAY_RECORDING: [
|
||||
["p_distancing",1,84], ["p_hygiene",1,84],
|
||||
["p_distancing",0,234], //["p_hygiene",0,234]
|
||||
["p_distancing",0,234], ["p_hygiene",0,234]
|
||||
],
|
||||
SIR: [0.999995,0.000005,0]
|
||||
},
|
||||
|
@ -345,27 +345,74 @@ const STAGES = {
|
|||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
PLAY_RECORDING: [
|
||||
["p_distancing",1,85], ["p_hygiene",1,85],
|
||||
["p_distancing",0,85+58],
|
||||
["p_distancing",1,85+58+33],
|
||||
["p_distancing",0,85+58+33+58],
|
||||
["p_distancing",1,85+58+33+58+36],
|
||||
["p_distancing",0,85+58+33+58+36+58],
|
||||
["p_distancing",1,85+58+33+58+36+58+48],
|
||||
["p_distancing",0,85+58+33+58+36+58+48+58],
|
||||
["p_distancing",1,85+58+33+58+36+58+48+58+60],
|
||||
["p_distancing",0,85+58+33+58+36+58+48+58+60+58],
|
||||
["p_distancing",1,85+58+33+58+36+58+48+58+60+58+80],
|
||||
["p_distancing",1,90], ["p_hygiene",1,90],
|
||||
["p_distancing",0,90+68],
|
||||
["p_distancing",1,90+68+54],
|
||||
["p_distancing",0,90+68+54+73],
|
||||
["p_distancing",1,90+68+54+73+73],
|
||||
["p_distancing",0,90+68+54+73+73+73],
|
||||
["p_distancing",1,90+68+54+73+73+73+87],
|
||||
["p_distancing",0,90+68+54+73+73+73+87+58],
|
||||
["p_distancing",1,90+68+54+73+73+73+87+58+108],
|
||||
],
|
||||
SIR: [0.999995,0.000005,0]
|
||||
},
|
||||
|
||||
"int-4a": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta","label_c_waning","c_recovery",
|
||||
"label_c_exposed",
|
||||
/*"int_block_0",
|
||||
"int_block_1","int_block_2",*/"int_block_3","int_block_4","int_block_5","hospital_capacity",
|
||||
"graph",
|
||||
//"label_s","label_re",
|
||||
"sim_controls",
|
||||
"divider"
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true]
|
||||
],
|
||||
inputs: [
|
||||
["p_hygiene",1],
|
||||
["FROZEN_IN_TIME", true],
|
||||
],
|
||||
disabled:[
|
||||
["p_s", false]
|
||||
],
|
||||
SHOW_ALL_AT_START: true
|
||||
},
|
||||
|
||||
"int-4b": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta","label_c_waning","c_recovery",
|
||||
"label_c_exposed",
|
||||
"int_block_0",
|
||||
"int_block_1","int_block_2","int_block_3","int_block_4",/*"int_block_5",*/"hospital_capacity",
|
||||
"graph",
|
||||
//"label_s","label_re",
|
||||
"sim_controls",
|
||||
"divider"
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true]
|
||||
],
|
||||
inputs: [
|
||||
["FROZEN_IN_TIME", true],
|
||||
],
|
||||
/*disabled:[
|
||||
["p_s", false]
|
||||
],*/
|
||||
SHOW_ALL_AT_START: true
|
||||
},
|
||||
|
||||
"int-5": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"label_c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
/*"int_block_2",*/"int_block_3","int_block_4","int_block_5","hospital_capacity"
|
||||
/*"int_block_2",*/"int_block_3","int_block_4",/*"int_block_5",*/"hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",2],
|
||||
|
@ -378,45 +425,24 @@ const STAGES = {
|
|||
SHOW_ALL_AT_START: true,
|
||||
PLAY_RECORDING: [
|
||||
["p_distancing",1,84], ["p_hygiene",1,84],
|
||||
|
||||
["p_distancing",0,175], ["p_quarantine",0.65,175], ["p_isolate",0.65,175],
|
||||
],
|
||||
SIR: [0.999995,0.000005,0]
|
||||
},
|
||||
|
||||
"int-5b": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"label_c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
/*"int_block_2",*/"int_block_3","int_block_4",/*"int_block_5",*/"hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",2],
|
||||
["p_speed",10],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true]
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
PLAY_RECORDING: [
|
||||
["p_distancing",1,84], ["p_hygiene",1,84],
|
||||
["p_distancing",0,175], ["p_quarantine",0.65,175], ["p_isolate",0.65,175],
|
||||
["p_hygiene",0,550], ["p_quarantine",0,550], ["p_isolate",0,550],
|
||||
["p_vaccines",0.64,550],
|
||||
["p_vaccines",0.61,550],
|
||||
["p_vaccines",0,580],
|
||||
],
|
||||
SIR: [0.999995,0.000005,0]
|
||||
},
|
||||
|
||||
"int-6c": {
|
||||
"int-6a": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta",
|
||||
"label_c_waning","c_recovery",
|
||||
"label_c_exposed",
|
||||
/*"int_block_0",
|
||||
"int_block_1","int_block_2","int_block_3","int_block_4","int_block_5",*/
|
||||
"int_block_1","int_block_2","int_block_3",*/"int_block_4","int_block_5",
|
||||
"hospital_capacity",
|
||||
"graph",
|
||||
//"label_s","label_re",
|
||||
|
@ -428,6 +454,37 @@ const STAGES = {
|
|||
],
|
||||
inputs: [
|
||||
["FROZEN_IN_TIME", true],
|
||||
["p_hygiene", 1],
|
||||
["p_isolate", 0.516],
|
||||
["p_quarantine", 0.515],
|
||||
],
|
||||
disabled:[
|
||||
["p_s", false]
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
_HACK_MAKE_TIME_KEEP_GOING: true,
|
||||
},
|
||||
|
||||
"int-6b": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta",
|
||||
"label_c_waning","c_recovery",
|
||||
"label_c_exposed",
|
||||
"int_block_0",
|
||||
"int_block_1","int_block_2","int_block_3",/*"int_block_4",*/"int_block_5",
|
||||
"hospital_capacity",
|
||||
"graph",
|
||||
//"label_s","label_re",
|
||||
"sim_controls",
|
||||
"divider"
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true]
|
||||
],
|
||||
inputs: [
|
||||
["FROZEN_IN_TIME", true],
|
||||
["p_summer", 1],
|
||||
],
|
||||
disabled:[
|
||||
["p_s", false]
|
||||
|
@ -460,15 +517,17 @@ const STAGES = {
|
|||
// Lift
|
||||
["p_distancing",0,175],
|
||||
["p_hygiene",0.66,84],
|
||||
["p_quarantine",0.33,175], ["p_isolate",0.33,175], ["p_masks",0.33,175],
|
||||
["p_quarantine",0.4,175],
|
||||
["p_isolate",0.4,175],
|
||||
["p_masks",0.17,175],
|
||||
|
||||
// Circuit Breaker
|
||||
["p_distancing",1,60+283],
|
||||
["p_distancing",0,60+283+60],
|
||||
["p_distancing",1,365],
|
||||
["p_distancing",0,365+60],
|
||||
|
||||
// Vaccine!
|
||||
["p_hygiene",0,550], ["p_quarantine",0,550], ["p_isolate",0,550], ["p_masks",0,550],
|
||||
["p_vaccines",0.64,550],
|
||||
["p_vaccines",0.6,550],
|
||||
["p_vaccines",0,580],
|
||||
|
||||
],
|
||||
|
@ -483,111 +542,153 @@ const STAGES = {
|
|||
"yrs-1": {
|
||||
hide: [
|
||||
/*"section_dynamics",*/
|
||||
"section_r",
|
||||
"c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
"int_block_0","int_block_1",
|
||||
"int_block_2","int_block_3",/*"int_block_4",*/"int_block_5","hospital_capacity"
|
||||
"label_herd_immunity","label_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",10],
|
||||
["p_speed",20],
|
||||
["p_years",5],
|
||||
["p_speed",5],
|
||||
["p_hospital", 0],
|
||||
["DO_NOT_SHOW_HERD_IMMUNITY", true],
|
||||
["_HACK_SHOW_SI_PERCENTS",3],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true],
|
||||
["c_waning", true],
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
SIR: [0.999995,0.000005,0]
|
||||
//SHOW_ALL_AT_START: true,
|
||||
SIR: [0,0,1],
|
||||
SHOW_HAND: "tutorial_1"
|
||||
},
|
||||
|
||||
/*
|
||||
|
||||
"12": {
|
||||
hide: ["section_r","section_meta","label_transmission","label_c_recovery","c_waning"],
|
||||
inputs: [
|
||||
["p_years",5],
|
||||
["p_speed",10]
|
||||
],
|
||||
checkboxes: [
|
||||
["c_waning", true]
|
||||
],
|
||||
SIR: [0,0,1]
|
||||
},
|
||||
|
||||
"13": {
|
||||
"yrs-2": {
|
||||
hide: [
|
||||
"section_meta","c_waning","c_recovery",
|
||||
//"section_dynamics",
|
||||
"c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
"c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3","int_block_4","int_block_5","hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",5],
|
||||
["p_years",10],
|
||||
["p_speed",20],
|
||||
//["TIME_DELTA", 0.2],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true],
|
||||
["c_waning", true]
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
//SIR: [0.09,0.01,0.9]
|
||||
},
|
||||
|
||||
"13b": {
|
||||
"yrs-3": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta","c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3","int_block_4","int_block_5",
|
||||
//"section_dynamics",
|
||||
"c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
"c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3",/*"int_block_4",*/"int_block_5","hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",5],
|
||||
["p_speed",20],
|
||||
//["TIME_DELTA", 0.2],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_waning", true]
|
||||
],
|
||||
SIR: [0.09,0.01,0.9]
|
||||
},
|
||||
|
||||
"14": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta","c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3","int_block_5",
|
||||
],
|
||||
inputs: [
|
||||
["p_years",5],
|
||||
["p_years",10],
|
||||
["p_speed",20],
|
||||
["p_summer",1],
|
||||
//["TIME_DELTA", 0.2],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true],
|
||||
["c_waning", true]
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
//SIR: [0.09,0.01,0.9]
|
||||
},
|
||||
|
||||
"15": {
|
||||
|
||||
"yrs-4": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
"section_meta","c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3",
|
||||
//"c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
"c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3",/*"int_block_4","int_block_5",*/"hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",5],
|
||||
["p_years",10],
|
||||
["p_speed",20],
|
||||
["p_summer",1],
|
||||
//["TIME_DELTA", 0.2],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true],
|
||||
["c_waning", true]
|
||||
],
|
||||
SIR: [0.09,0.01,0.9]
|
||||
PLAY_RECORDING: [
|
||||
|
||||
// Vaccine!
|
||||
["p_vaccines",0.62,365-60],
|
||||
["p_vaccines",0.0,365],
|
||||
["p_vaccines",0.62,2*365-60],
|
||||
["p_vaccines",0.0,2*365],
|
||||
["p_vaccines",0.62,3*365-60],
|
||||
["p_vaccines",0.0,3*365],
|
||||
["p_vaccines",0.62,4*365-60],
|
||||
["p_vaccines",0.0,4*365],
|
||||
["p_vaccines",0.62,5*365-60],
|
||||
["p_vaccines",0.0,5*365],
|
||||
["p_vaccines",0.62,6*365-60],
|
||||
["p_vaccines",0.0,6*365],
|
||||
["p_vaccines",0.62,7*365-60],
|
||||
["p_vaccines",0.0,7*365],
|
||||
["p_vaccines",0.62,8*365-60],
|
||||
["p_vaccines",0.0,8*365],
|
||||
["p_vaccines",0.62,9*365-60],
|
||||
["p_vaccines",0.0,9*365],
|
||||
["p_vaccines",0.62,10*365-60],
|
||||
["p_vaccines",0.0,10*365]
|
||||
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
//SIR: [0.09,0.01,0.9]
|
||||
},
|
||||
|
||||
"yrs-5": {
|
||||
hide: [
|
||||
"section_dynamics",
|
||||
//"c_waning","c_recovery","c_exposed",
|
||||
"section_meta_years",
|
||||
"c_waning","c_recovery",
|
||||
"int_block_0","int_block_1","int_block_2","int_block_3",/*"int_block_4",*/"int_block_5",
|
||||
//"hospital_capacity"
|
||||
],
|
||||
inputs: [
|
||||
["p_years",10],
|
||||
["p_speed",20],
|
||||
["p_summer",1],
|
||||
//["TIME_DELTA", 0.2],
|
||||
],
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_exposed",true],
|
||||
["c_waning", true]
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
//SIR: [0.09,0.01,0.9]
|
||||
PLAY_RECORDING: [
|
||||
|
||||
// Hospital
|
||||
["p_hospital",500,365],
|
||||
["p_hospital",750,365*2],
|
||||
["p_hospital",1000,365*3]
|
||||
|
||||
]
|
||||
},
|
||||
*/
|
||||
|
||||
//////////////////////////////////////////
|
||||
// SANDBOX ///////////////////////////////
|
||||
|
@ -596,8 +697,10 @@ const STAGES = {
|
|||
"SB": {
|
||||
checkboxes: [
|
||||
["c_recovery", true],
|
||||
["c_waning", true]
|
||||
]
|
||||
["c_waning", true],
|
||||
["c_exposed",true],
|
||||
],
|
||||
SHOW_ALL_AT_START: true,
|
||||
},
|
||||
|
||||
|
||||
|
@ -638,6 +741,7 @@ let setStage = (stageID)=>{
|
|||
|
||||
// Sliders
|
||||
stage.inputs = stage.inputs || [];
|
||||
changeSliders(defaultParams);
|
||||
changeSliders(stage.inputs);
|
||||
|
||||
// Checkboxes
|
||||
|
@ -690,4 +794,26 @@ let setStage = (stageID)=>{
|
|||
};
|
||||
|
||||
let stageParams = new URLSearchParams(location.search);
|
||||
if(stageParams.has('stage')) setStage(stageParams.get('stage'));
|
||||
if(stageParams.has('stage')) setStage(stageParams.get('stage'));
|
||||
|
||||
if(stageParams.has('format')){
|
||||
|
||||
if(stageParams.get('format')=='calc'){
|
||||
document.body.style.overflow = 'hidden';
|
||||
$('#sandbox').style.margin = '0';
|
||||
}
|
||||
if(stageParams.get('format')=='lines'){
|
||||
$all('.lines').forEach((dom)=>{
|
||||
dom.style.display = 'none';
|
||||
});
|
||||
}
|
||||
if(stageParams.get('format')=='sb'){
|
||||
$('#legend').style.display = 'none';
|
||||
$('#sandbox').style.margin = '0';
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(stageParams.has('height')){
|
||||
$('#sandbox').style.height = stageParams.get('height')+'px';
|
||||
}
|
|
@ -14,7 +14,7 @@ div{
|
|||
|
||||
#sandbox{
|
||||
width: 800px;
|
||||
height: 640px;
|
||||
height: 540px;
|
||||
overflow: hidden;
|
||||
background: #fff;
|
||||
position: absolute;
|
||||
|
@ -264,7 +264,7 @@ icon[r]{
|
|||
transition: height 0.5s ease-in-out;
|
||||
overflow: hidden;
|
||||
height:0px;
|
||||
padding-right: 2px;
|
||||
/*padding-right: 2px;*/
|
||||
}
|
||||
|
||||
#month_names{
|
||||
|
|
743
words/words.html
|
@ -12,548 +12,701 @@
|
|||
|
||||
<body>
|
||||
|
||||
<h1 id="toc_0">What Happens Next?</h1>
|
||||
<p><strong>{WIP, DON'T SHARE YET THX!}</strong></p>
|
||||
|
||||
<h2 id="toc_1">COVID-19 Possibilities, Explained With Playable Simulations</h2>
|
||||
<p>"The only thing to fear is fear itself" was stupid advice.</p>
|
||||
|
||||
<p>"The only thing to fear is fear itself" is stupid.<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup></p>
|
||||
<p>Sure, don't hoard toilet paper – but if policymakers fear fear itself, they'll downplay dangers to us to avoid "mass panic". Fear's not the problem, it's how we <em>channel</em> our fear. Fear gives us energy to deal with dangers now, and prepare for dangers later.</p>
|
||||
|
||||
<p>Sure, don't hoard toilet paper. But if someone's so scared to think about scary things, that they deny danger <em>when it's already here</em>, then they've got more problems<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup> than toilet paper.</p>
|
||||
|
||||
<p>The problem's not fear, but how we <em>use</em> our fear. Taiwan and South Korea <em>bravely used their fear</em> (from SARS) to invest in "pandemic insurance", and it paid off in controlling COVID-19! Fear gives you energy to deal with present dangers & plan for future dangers – <em>if</em> you know how to channel your fear.</p>
|
||||
|
||||
<p>So, we (Marcel & Nicky) have channeled our COVID-19 fears into making these playable simulations – so that <em>you</em> can channel <em>your</em> fear into gaining a deep, intuitive understanding of:</p>
|
||||
<p>Honestly, we (Marcel, epidemiologist + Nicky, art/code) are worried. We bet you are, too! That's why we've channelled our fear into making these <strong>playable simulations</strong>, so that <em>you</em> can channel your fear into understanding:</p>
|
||||
|
||||
<ul>
|
||||
<li><strong>The Last Few Months</strong> (epidemiology 101, SIR model, R0 & Rt)</li>
|
||||
<li><strong>The Next Few Months</strong> (lockdowns, contact tracing, masks)</li>
|
||||
<li><strong>The Next Few Years</strong> (vaccines, summers, loss of immunity)</li>
|
||||
<li><strong>The Last Few Months</strong> (epidemiology 101, SEIR model, R & R<sub>0</sub>)</li>
|
||||
<li><strong>The Next Few Months</strong> (lockdowns, contact tracing, masks?)</li>
|
||||
<li><strong>The Next Few Years</strong> (loss of immunity? no vaccine?)</li>
|
||||
</ul>
|
||||
|
||||
<p>Note: We're publishing this on April 30th, 2020. Still the early days. As humanity learns more about COVID-19, our plans will and <em>should</em> change – but we hope this post will address 90%+ of all future possibilities!</p>
|
||||
<p>This guide (published April 30th, 2020<sup id="fnref1"><a href="#fn1" rel="footnote">1</a></sup>) is meant to give you hope <em>and</em> fear. To beat COVID-19 <strong>in a way that also protects our mental & financial health</strong>, we need optimism to create plans, and pessimism to create backup plans. As Gladys Bronwyn Stern once said, <em>“The optimist invents the airplane and the pessimist the parachute.”</em></p>
|
||||
|
||||
<p>Honestly, some of the possibilities are scary. And some are hopeful! But preparing for the scary possibilites is what <em>creates</em> the hopeful possibilites. You don't get to save the prince/ss without facing the dragon.</p>
|
||||
<p>So, buckle in: we're about to experience some turbulence.</p>
|
||||
|
||||
<p>Let's bravely use our fear, and face this dragon.</p>
|
||||
<div class="section">
|
||||
<div>
|
||||
<h1>The Last Few Months</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<hr>
|
||||
<p>Pilots use flight simulators to learn how not to crash planes.</p>
|
||||
|
||||
<h1 id="toc_2">The Last Few Months</h1>
|
||||
<p><strong>Epidemiologists use epidemic simulators to learn how not to crash humanity.</strong></p>
|
||||
|
||||
<p>...has been a real worldwide cram-school in Epidemiology 101.</p>
|
||||
<p>So, let's make a simple "epidemic flight simulator"! In this simulation, <icon i></icon> Infectious people can turn <icon s></icon> Susceptible people into more <icon i></icon> Infectious people:</p>
|
||||
|
||||
<p>Pilots use flight simulators to learn how not to crash planes. <strong>Epidemiologists use epidemic simulators to learn how not to crash humanity.</strong></p>
|
||||
<p><img src="pics/spread.png" alt=""></p>
|
||||
|
||||
<p>So, let's set up an epidemic "flight simulator"! First, we need some simulation rules.</p>
|
||||
<p>It's estimated that, <em>at the start</em> of a COVID-19 outbreak, the virus jumps from an <icon i></icon> to an <icon s></icon> <em>approximately</em> every 4 days.<sup id="fnref2"><a href="#fn2" rel="footnote">2</a></sup></p>
|
||||
|
||||
<p>Let's say you have some Infected (i) people and not-yet-infected Susceptible (s) people. One (i) infects a (s), those 2 (i) infect another 2 (s), those 4 (i) infect another 4 (s), and so on:</p>
|
||||
<p>If we simulate "double every 4 days" <em>and nothing else</em>, on a population starting with just 0.001% <icon i></icon>, what happens? </p>
|
||||
|
||||
<p>// pic</p>
|
||||
<p><strong>Click "Start" to play the simulation! You can re-play it later with different settings:</strong> (technical caveats: <sup id="fnref3"><a href="#fn3" rel="footnote">3</a></sup>)</p>
|
||||
|
||||
<p><em>On average</em>, COVID-19 jumps from an (i) to a (s) every 4 days.<a href="source">1</a> The average # of days it takes for an (i) to infect an (s) is called the <strong>"generation time"</strong><a href="serial%20interval">2-note</a>. (Click the gray circles for sources, and the blue squares for side-notes!)</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-1" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p><em>Rule #1: The more (i)s there are, the faster (s)s become (i)s.</em></p>
|
||||
<p>This is the <strong>exponential growth curve.</strong> Starts small, then explodes. "Oh it's just a flu" to "Oh right, flus don't create <em>mass graves in rich cities</em>". </p>
|
||||
|
||||
<p>// pic - rule</p>
|
||||
<p><img src="pics/exponential.png" alt=""></p>
|
||||
|
||||
<p>If we simulate <em>just this rule and nothing else</em>, here's what it looks like over 3 months, starting with 99.9% (s) and just 0.1% (i):</p>
|
||||
<p>But, this simulation is wrong. Exponential growth, thankfully, can't go on forever. One thing that stops a virus from spreading is if others <em>already</em> have the virus:</p>
|
||||
|
||||
<p><strong>Click "Start" play the simulation! You can then change the "generation time", and see how that changes the simulation:</strong></p>
|
||||
<p><img src="pics/susceptibles.png" alt=""></p>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>The more <icon i></icon>s there are, the faster <icon s></icon>s become <icon i></icon>s, <strong>but the fewer <icon s></icon>s there are, the <em>slower</em> <icon s></icon>s become <icon i></icon>s.</strong></p>
|
||||
|
||||
<p>Starts small ("it's just a flu"), then explodes ("oh right, flus don't break hospitals in rich countries"). This is the "J-shaped" <strong>exponential growth curve</strong>.</p>
|
||||
<p>How's this change the growth of an epidemic? Let's find out:</p>
|
||||
|
||||
<p>But this simulation is wrong. There are things that prevent an (i) from infecting someone else – like if that other person is <em>already</em> an (i):</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-2" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>// pic - 100% spread, 50% spread, 0% spread</p>
|
||||
<p>This is the "S-shaped" <strong>logistic growth curve.</strong> Starts small, explodes, then slows down again.</p>
|
||||
|
||||
<p><em>Rule #2: The fewer (s)s there are, the slower (s)s become (i)s.</em></p>
|
||||
<p>But, this simulation is <em>still</em> wrong. We're missing the fact that <icon i></icon> Infectious people eventually stop being infectious, either by 1) recovering, 2) "recovering" with lung damage, or 3) dying.</p>
|
||||
|
||||
<p>// pic - rule</p>
|
||||
<p>For simplicity's sake, let's pretend that all <icon i></icon> Infectious people become <icon r></icon> Recovered. (Just remember that, in reality, some of them are dying.) <icon r></icon>s can't be infected again, and let's pretend – <em>for now!</em> – that they stay immune for life.</p>
|
||||
|
||||
<p>Now, what happens if we simulate <em>both</em> these rules?</p>
|
||||
<p>With COVID-19, it's estimated you're <icon i></icon> Infectious for <em>approximately</em> 10 days.<sup id="fnref4"><a href="#fn4" rel="footnote">4</a></sup> Let's simulate a population starting at 100% <icon i></icon>, most of whom recover after 10 days, then most of the remainder recover after another 10 days, then most of <em>that</em> remainder recover after another 10 days, etc:</p>
|
||||
|
||||
<p><strong>Again, click Start to play the simulation!</strong></p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-3" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>This is the opposite of exponential growth, the <strong>exponential decay curve</strong>.</p>
|
||||
|
||||
<p>Starts small, explodes, then slows down again. This is the "S-shaped" <strong>logistic growth curve.</strong></p>
|
||||
<p>Now, what happens if you simulate S-shaped logistic growth <em>with</em> recovery?</p>
|
||||
|
||||
<p>Still, this simulation predicts 100% of people will get the virus, and even the most pessimistic COVID-19 simulations don't predict <em>that</em>. </p>
|
||||
|
||||
<p>What we're missing: You stop being infectious for COVID-19 when you recover... or die.</p>
|
||||
|
||||
<p>For the sake not making these simulations too depressing, let's only simulate Infected (i) becoming (r) Recovered. (The math works out the same.) And let's assume <em>(for now!!!)</em> that (r)s can't get infected again. So, new rule:</p>
|
||||
|
||||
<p><em>Rule #3: (i)s eventually become (r)s.</em> </p>
|
||||
|
||||
<p>// pic - rule</p>
|
||||
|
||||
<p>Let's have (i)s become (r)s after 14 days, <em>on average</em>.<a href="technical%20notes">3-note</a> This means some (i)s will recover <em>before</em> 14 days, and some recover <em>after</em>! This is closer to real life.</p>
|
||||
|
||||
<p>To show <em>only</em> Rule #3, here's a simulation starting with 100% (i):</p>
|
||||
|
||||
<p>// sim</p>
|
||||
|
||||
<p>This is the "flipped-J-shaped" <strong>exponential decay curve.</strong></p>
|
||||
|
||||
<p>Now, what happens if you simulate all 3 rules at once? What happens when you combine an S-shaped logistic curve with a flipped-J exponential decay curve?</p>
|
||||
|
||||
<p>// pic</p>
|
||||
<p><img src="pics/graphs_q.png" alt=""></p>
|
||||
|
||||
<p>Let's find out:</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-4" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>And <em>that's</em> where that famous curve comes from! It's not a bell curve, it's not even a "log-normal" curve. It has no name. But you've seen it a zillion times, and beseeched to flatten.</p>
|
||||
|
||||
<p>// pic: 3 rules</p>
|
||||
<p>This is the the <strong>SIR Model</strong><sup id="fnref5"><a href="#fn5" rel="footnote">5</a></sup> – <icon s></icon><strong>S</strong>usceptible <icon s></icon><strong>I</strong>nfectious <icon s></icon><strong>R</strong>ecovered – the second-most important idea in Epidemiology 101:</p>
|
||||
|
||||
<p>This is the <strong>SIR Model</strong>, the <em>second</em>-most important idea in epidemiology.</p>
|
||||
<p><img src="pics/sir.png" alt=""></p>
|
||||
|
||||
<p><strong>NOTE:</strong> The simulations you've been hearing in the news are <em>far</em> more complex than the ones you're seeing here! But the sims you'll play with here reach the same general conclusions, even if missing the nuances.</p>
|
||||
<p>NOTE: The simulations that inform policy are <em>far</em> more sophisticated than this! But the SIR Model can still explain the same findings, even if missing the nuances.</p>
|
||||
|
||||
<p>One nuance you could add is the <strong>SIRS Model</strong>, where the final "S" also stands for (s) Susceptible – this is when people recover, are immune for a bit, <em>then lose that immunity and can be infected again.</em> (We'll consider this in the Next Few Years section)</p>
|
||||
<p>Actually, let's add one more nuance: before an <icon s></icon> becomes an <icon i></icon>, they first become <icon e></icon> Exposed. This is when they have the virus but can't pass it on yet – infect<em>ed</em> but not yet infect<em>ious</em>.</p>
|
||||
|
||||
<p>Another nuanced version is the <strong>SEIR Model</strong>, where the "E" stands for (e) Exposed, a brief period of time <em>after</em> you've been infected, but <em>before</em> you can infect others. This is called the <strong>"latent period"</strong>, and for COVID-19 it's around 3 days.<a href="">4</a></p>
|
||||
<p><img src="pics/seir.png" alt=""></p>
|
||||
|
||||
<p>Here's what happens if you simulate that:</p>
|
||||
<p>(This variant is called the <strong>SEIR Model</strong><sup id="fnref6"><a href="#fn6" rel="footnote">6</a></sup>, where the "E" stands for <icon e></icon> "Exposed". Note this <em>isn't</em> the everyday meaning of "exposed", when you might or might not have the virus. In this technical definition, "Exposed" means you definitely have it. Science terminology is bad.)</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>For COVID-19, it's estimated that you're <icon e></icon> infected-but-not-yet-infectious for <em>approximately</em> 3 days.<sup id="fnref7"><a href="#fn7" rel="footnote">7</a></sup> What happens if we add that to the simulation?</p>
|
||||
|
||||
<p>Doesn't change much, so let's stick to the vanilla SIR model. We brought (e)s up because the exact timing of contagiousness is important in "contact tracing", which we'll explain in the Next Few Months section.</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-5" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Oh! But almost forgot, the <em>first</em>-most important idea in epidemiology:</p>
|
||||
<p>Not much, actually! How long you stay <icon e></icon> Exposed changes the ratio of <icon e></icon>-to-<icon i></icon>, and <em>when</em> the peak of current cases (<icon e></icon>+<icon i></icon>) happens... but the <em>height</em> of that peak, and the total % of people infected in the end, stays the same.</p>
|
||||
|
||||
<p><strong>"R"</strong></p>
|
||||
<p>Why's that? Because of the <em>first</em>-most important idea in Epidemiology 101:</p>
|
||||
|
||||
<p>Which is short for "Reproduction Number". It's the <em>average</em> number of people an (i) will infect <em>before</em> they recover:</p>
|
||||
<p><img src="pics/r.png" alt=""></p>
|
||||
|
||||
<p>// pic - R>1 R=1 R<1</p>
|
||||
<p>Short for "Reproduction number". It's the <em>average</em> number of people an <icon i></icon> infects <em>before</em> they recover (or die).</p>
|
||||
|
||||
<p><strong>R0</strong> (pronounced R-nought) is the Reproduction Number for a virus <em>at the very beginning of an outbreak, before we have immunity or interventions</em>. (Also called "Basic Reproduction Number")</p>
|
||||
<p><img src="pics/r2.png" alt=""></p>
|
||||
|
||||
<p><strong>Rt</strong> (the 't' stands for time) is the Reproduction Number <em>right now</em>, after we have some immunity or interventions. (Also called "Re", e standing for "Effective Reproduction Number". Also called just "R", to... confuse people)</p>
|
||||
<p><strong>R</strong> changes over the course of an outbreak, as we get more immunity & interventions.</p>
|
||||
|
||||
<p>// pic of R0 and Rt over time for the Famous Curve – with peak for inflection!</p>
|
||||
<p><strong>R<sub>0</sub></strong> (pronounced R-nought) is what R is <em>at the start of an outbreak, before immunity or interventions</em>. R<sub>0</sub> more closely reflects the power of the virus itself, but it still changes from place to place. For example, R<sub>0</sub> is higher in dense cities than sparse rural areas.</p>
|
||||
|
||||
<p>(A lot of news outlets confuse these two Rs! They're different!)</p>
|
||||
<p>(Most news articles – and even some scientific papers! – confuse R and R<sub>0</sub>. Again, science terminology is bad)</p>
|
||||
|
||||
<p>The R0 for the flu<a href="more">6</a> is around 1.3. The R0 for COVID-19 is somewhere between 2 and 5.<a href="source">7</a> The huge uncertainty is because R0 depends on exactly how quickly new people are infected ("generation time") vs how quickly people recover<a href="technical%20note">8</a>:</p>
|
||||
<p>The R<sub>0</sub> for "the" seasonal flu is around 1.28<sup id="fnref8"><a href="#fn8" rel="footnote">8</a></sup>. This means, at the <em>start</em> of a flu outbreak, each <icon i></icon> infects 1.28 others <em>on average.</em> (If it sounds weird that this isn't a whole number, remember that the "average" mom has 2.4 children. This doesn't mean there's half-children running about.)</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>The R<sub>0</sub> for COVID-19 is estimated to be around 2.2<sup id="fnref9"><a href="#fn9" rel="footnote">9</a></sup>, though a not-yet-finalized CDC study estimates it was 5.7(!) in Wuhan.<sup id="fnref10"><a href="#fn10" rel="footnote">10</a></sup></p>
|
||||
|
||||
<p>Rt for COVID-19 depends on the interventions we do (or don't) have, as well as how many people <em>aren't</em> (s) Susceptible. (because they're (r) Recovered, currently (i) Infected, or... dead.)</p>
|
||||
<p>In our simulations – <em>at the start & on average</em> – an <icon i></icon> infects someone every 4 days, over 10 days. "4 days" goes into "10 days" two-and-a-half times. This means – <em>at the start & on average</em> – each <icon i></icon> infects 2.5 others. Therefore, R<sub>0</sub> = 2.5. (caveats:<sup id="fnref11"><a href="#fn11" rel="footnote">11</a></sup>)</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<p><strong>Play with this R<sub>0</sub> calculator, to see how R<sub>0</sub> depends on recovery time & new-infection time:</strong></p>
|
||||
|
||||
<p>Note that when (s)% is low enough, you can get Rt<1 – <em>containing the virus!</em> This is called <strong>the "herd immunity" threshold</strong>. "Herd immunity" is a terrible <em>policy</em> (TODO: explain why), but it's important for understanding epidemiology.</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-6a&format=calc" width="285" height="255"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Now, let's run the same SIR model simulation again, but this time showing 1) Rt changing over time, and 2) the herd immunity threshold:</p>
|
||||
<p>But remember, the fewer <icon s></icon>s there are, the <em>slower</em> <icon s></icon>s become <icon i></icon>s. The <em>current</em> reproduction number (R) depends not just on the <em>basic</em> reproduction number (R<sub>0</sub>), but <em>also</em> on how many people are no longer <icon s></icon> Susceptible. (For example, by recovering & getting natural immunity.)</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-6b&format=calc" width="285" height="390"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Note how total cases ((i)+(r)) <em>overshoots</em> the herd immunity threshold! And the <em>exact</em> moment it does this is when infections peak <em>and</em> when Rt drops below 1!</p>
|
||||
<p>When enough people have natural immunity, R < 1, and the virus is contained! This is called <strong>herd immunity</strong>, and while it's <em>terrible</em> policy (we'll explain why later – it's not for the reason you may think!), it's essential to understanding Epidemiology 101.</p>
|
||||
|
||||
<p>If there's only one lesson you take away today, here it is, in big shiny letters:</p>
|
||||
<p>Now, let's play the SEIR Model again, but showing R<sub>0</sub>, R over time, and the herd immunity threshold:</p>
|
||||
|
||||
<h1 id="toc_3">Rt>1 = bad</h1>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=epi-7" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<h1 id="toc_4">Rt<1 = good</h1>
|
||||
<p>Note: Total cases (gray curve) does not stop at herd immunity, but <em>overshoots</em> it! And it does this <em>exactly when</em> current cases (pink curve) peaks. (This happens no matter how you change the settings – try it for yourself!)</p>
|
||||
|
||||
<p><strong>NOTE: We do not need to catch all transmissions, or even nearly all transmissions, to stop COVID-19.</strong></p>
|
||||
<p>This is because when there are more non-<icon s></icon>s than the herd immunity threshold, you get R < 1. And when R < 1, new cases stop growing: a peak.</p>
|
||||
|
||||
<p>It's a paradox – COVID-19 is incredibly contagious, yet to contain it, we "only" need to stop 72% of infections. 72%?! That's, like, a C– grade. But if R0 = 3.5, then reducing that by 72% will make Rt < 1 = good.</p>
|
||||
<p><strong>If there's only one lesson you take away from this guide, here it is</strong> – it's an extremely complex diagram so please take time to fully absorb it:</p>
|
||||
|
||||
<p>(And even if worst-case, R0=5, you "only" need to stop 80%. That's a B–.)</p>
|
||||
<p><img src="pics/r3.png" alt=""></p>
|
||||
|
||||
<p><em>Every</em> COVID-19 intervention you've heard of – handwashing, social distancing, lockdowns, self-isolation, contact tracing & quarantining, face masks, even "herd immunity" – they're <em>all</em> doing the same thing:</p>
|
||||
<p><strong>This means: we do NOT need to catch all transmissions, or even nearly all transmissions, to stop COVID-19!</strong></p>
|
||||
|
||||
<p>Reducing Rt.</p>
|
||||
<p>It's a paradox. COVID-19 is extremely contagious, yet to contain it, we "only" need to stop more than 60% of infections. 60%?! If that was a school grade, that's a D-. But if R<sub>0</sub> = 2.5, cutting that by 61% gives us R = 0.975, which is R < 1, virus is contained!<sup id="fnref12"><a href="#fn12" rel="footnote">12</a></sup></p>
|
||||
|
||||
<p>Let's see how we can get Rt<1 – in a way that protects not just our physical health, but also our mental health, social health, <em>and</em> financial health!</p>
|
||||
<p><img src="pics/r4.png" alt=""></p>
|
||||
|
||||
<hr>
|
||||
<p>(If you think R<sub>0</sub> or the other numbers in our simulations are too low/high, that's good you're challenging our assumptions! There'll be a "Sandbox Mode" at the end of this guide, where you can plug in your <em>own</em> numbers, and simulate what happens.)</p>
|
||||
|
||||
<h1 id="toc_5">The Next Few Months</h1>
|
||||
<p><em>Every</em> COVID-19 intervention you've heard of – handwashing, social/physical distancing, lockdowns, self-isolation, contact tracing & quarantining, face masks, even "herd immunity" – they're <em>all</em> doing the same thing:</p>
|
||||
|
||||
<p>...could have been worse.</p>
|
||||
<p>Getting R < 1.</p>
|
||||
|
||||
<h3 id="toc_6">Scenario 0: Do Absolutely Nothing</h3>
|
||||
<p>So now, let's use our "epidemic flight simulator" to figure this out: How can we get R < 1 in a way <strong>that also protects our mental health <em>and</em> financial health?</strong></p>
|
||||
|
||||
<p>For COVID-19, 1 in 20 (i)s need to be hospitalized. In rich countries like the US and UK, there's 1 hospital bed for every 1000 people. Therefore: a rich country can handle a maximum of 20 (i)s per 1000 people – or, a maximum of 2% of the population being simultaneously sick.</p>
|
||||
<p>Brace yourselves for an emergency landing...</p>
|
||||
|
||||
<p>Here's the same simulation from before, but with the "2%" threshold drawn:</p>
|
||||
<div class="section">
|
||||
<div>
|
||||
<h1>The Next Few Months</h1>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>...could have been worse. Here's a parallel universe we avoided:</p>
|
||||
|
||||
<p>It's not good.</p>
|
||||
<h3 id="toc_0">Scenario 0: Do Absolutely Nothing</h3>
|
||||
|
||||
<p>That's the same thing the March 16th Imperial College report found: if we do nothing, hospitals break. Almost everyone gets infected. Even with a low 0.5% infection fatality ratio, 80% of people infected in a large country like the US still means over a million dead... <em>IF</em> we did nothing.</p>
|
||||
<p>Around 1 in 20 people infected with COVID-19 need to go to an ICU (Intensive Care Unit).<sup id="fnref13"><a href="#fn13" rel="footnote">13</a></sup> In a rich country like the USA, there's 1 ICU per 3400 people.<sup id="fnref14"><a href="#fn14" rel="footnote">14</a></sup> Therefore, the USA can handle 20 out of 3400 people being <em>simultaneously</em> infected – or, 0.6% of the population.</p>
|
||||
|
||||
<p>(A lot of news & social media chose to report the scary bit, <em>without</em> "IF WE DO NOTHING". Fear was channeled into clicks, not understanding. <em>Sigh.</em>)</p>
|
||||
<p>Even if we <em>more than tripled</em> that capacity to 2%, here's what would've happened <em>if we did absolutely nothing:</em></p>
|
||||
|
||||
<h3 id="toc_7">Scenario 1: Flatten The Curve</h3>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=int-1&format=lines" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Handwashing was discovered in ____ by the doctor _______, when he realized that by getting his staff to wash their hands, child deaths in his hospital were cut by <em>90%!</em></p>
|
||||
<p>Not good.</p>
|
||||
|
||||
<p>Doctors around the world immediately hailed his life-saving discovery, and ha ha just kidding they committed him to an asylum where he was beat to death by guards.</p>
|
||||
<p>That's what <a href="http://www.imperial.ac.uk/mrc-global-infectious-disease-analysis/covid-19/report-9-impact-of-npis-on-covid-19/">the March 16 Imperial College report</a> found: do nothing, and we run out of ICUs with 80%+ of the population infected.</p>
|
||||
|
||||
<p>In any case, frequent handwashing reduces your chances of catching influenza by 50%[9]() And if we combine this with other hygiene tips – cough into your elbow, don't touch your face – let's guess-timate that 100% compliance (which we will <em>NOT</em> get) will result in a 60% reduction in new infections, in Rt:</p>
|
||||
<p>Even if only 0.5% of infected die – a generous assumption when there's no more ICUs – in a large country like the US, with 300 million people, 0.5% of 80% of 300 million = still 1.2 million dead... <em>IF we did nothing.</em></p>
|
||||
|
||||
<p>// controls</p>
|
||||
<p>(Lots of news & social media reported "80%+ will be infected" <em>without</em> "IF WE DO NOTHING". Fear was channelled into clicks, not understanding. <em>Sigh.</em>)</p>
|
||||
|
||||
<p>It can't get Rt<1, but it <em>does</em> reduce it! How does that affect the epidemic?</p>
|
||||
<h3 id="toc_1">Scenario 1: Flatten The Curve / Herd Immunity</h3>
|
||||
|
||||
<p>// sim</p>
|
||||
<p>The "Flatten The Curve" plan was touted by every public health organization, while the United Kingdom's original "herd immunity" plan was universally booed. They were <em>the same plan.</em> The UK just communicated theirs poorly.<sup id="fnref15"><a href="#fn15" rel="footnote">15</a></sup></p>
|
||||
|
||||
<p>That's a... <em>better</em> catastrophe.</p>
|
||||
<p>Both plans, though, are horribly flawed.</p>
|
||||
|
||||
<p>Contrary to many news & social media posts, "flattening the curve" <em>does also reduce total cases</em>. But as long as Rt is still above 1, our hospitals will still most likely shatter.</p>
|
||||
<p>First, let's look at the two main ways to "flatten the curve": handwashing & physical distancing.</p>
|
||||
|
||||
<p>That's what the Imperial College report also found: any attempt at mere <strong>"mitigation"</strong> (Reduce Rt, but still Rt>1 = bad) will fail, and the only way out is <strong>"suppression"</strong>. (Reduce Rt, so that Rt<1 = good!)</p>
|
||||
<p>Increased handwashing cuts flus & colds in high-income countries by ~25%<sup id="fnref16"><a href="#fn16" rel="footnote">16</a></sup>, while the city-wide lockdown in London cut close contacts by ~70%<sup id="fnref17"><a href="#fn17" rel="footnote">17</a></sup>. So, let's assume handwashing can reduce R by <em>up to</em> 25%, and distancing can reduce R by <em>up to</em> 70%:</p>
|
||||
|
||||
<p><em>Crush</em> the curve, not just flatten it. For example, by doing a...</p>
|
||||
<p><strong>Play with this calculator to see how % of non-<icon s></icon>, handwashing, and distancing reduce R:</strong> (this calculator visualizes their <em>relative</em> effects, which is why increasing one <em>looks</em> like it decreases the effect of the others.<sup id="fnref18"><a href="#fn18" rel="footnote">18</a></sup>)</p>
|
||||
|
||||
<h3 id="toc_8">Scenario 2: Months-Long Lockdown (we are here)</h3>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=int-2a&format=calc" width="285" height="260"></iframe>
|
||||
</div>
|
||||
|
||||
<p>There's different degrees of "physical distancing". (previously called "social distancing") At the mildest, avoiding crowds. At the strongest, a full city-wide lockdown.</p>
|
||||
<p>Now, let's simulate what happens to a COVID-19 epidemic if, starting March 2020, we had increased handwashing but only <em>mild</em> physical distancing – so that R is lower, but still above 1:</p>
|
||||
|
||||
<p>London's full lockdown reduced Rt by 70%.<a href="">11</a> So, let's guess-timate that as the maximum effect for distancing.</p>
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=int-2&format=lines" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Here's how hygiene & distancing together change Rt:</p>
|
||||
<p>Three notes:</p>
|
||||
|
||||
<p>// calc</p>
|
||||
<ol>
|
||||
<li><p>This <em>reduces</em> total cases! Lots of folks think "Flatten The Curve" spread outs cases without reducing the total. This is impossible in <em>any</em> Epidemiology 101 model. But because the news reported "80%+ will be infected" as inevitable, folks thought total cases will be the same no matter what. <em>Sigh.</em></p></li>
|
||||
<li><p>Due to the extra interventions, current cases (pink curve) peaks <em>before</em> herd immunity is reached. And in fact, total cases doesn't overshoot, but <em>goes to</em> herd immunity – the UK's plan! At that point, R < 1, you can let go of all other interventions, and COVID-19 stays contained! Well, except for one problem...</p></li>
|
||||
<li><p>You still run out of ICUs. For several months. (and remember, we <em>already</em> tripled ICUs for these simulations)</p></li>
|
||||
</ol>
|
||||
|
||||
<p>That's Rt<1 = good!</p>
|
||||
<p>That was the other finding of the March 16 Imperial College report, which convinced the UK to abandon its original plan. Any attempt at <strong>mitigation</strong> (reduce R, but R > 1) will fail. The only way out is <strong>suppression</strong> (reduce R so that R < 1).</p>
|
||||
|
||||
<p>Let's see what happens if we <em>crush</em> the curve with a lockdown for 3 months, then finally, <em>finally</em> return to normal life:</p>
|
||||
<p>// pic: difference </p>
|
||||
|
||||
<p><strong>Remember, you can re-play the simulation, and change the sliders <em>WHILE</em> it's running, to simulate your own COVID-19 strategy! You can also pause & slow down the simulation:</strong></p>
|
||||
<p>That is, don't merely "flatten" the curve, <em>crush</em> the curve. For example, with a...</p>
|
||||
|
||||
<p>// sim</p>
|
||||
<h3 id="toc_2">Scenario 2: Months-Long Lockdown</h3>
|
||||
|
||||
<p>Let's see what happens if we <em>crush</em> the curve with a 5-month lockdown, reduce <icon i></icon> to nearly nothing, then finally – <em>finally</em> – return to normal life:</p>
|
||||
|
||||
<div class="sim">
|
||||
<iframe src="sim?stage=int-3&format=lines" width="800" height="540"></iframe>
|
||||
</div>
|
||||
|
||||
<p>Oh.</p>
|
||||
|
||||
<p>Right, as soon as you remove the lockdown, Rt>1 again, and so you get a spike in cases that's almost as bad as if you'd done <em>nothing at all.</em></p>
|
||||
<p>This is the "second wave" everyone's talking about. As soon as we remove the lockdown, we get R > 1 again. So, a single leftover <icon i></icon> (or imported <icon i></icon>) can cause a spike in cases that's almost as bad as if we'd done Scenario 0: Absolutely Nothing.</p>
|
||||
|
||||
<p><strong>A lockdown isn't a cure, it's just a restart.</strong></p>
|
||||
|
||||
<p>So, what, do we just lockdown again & again?</p>
|
||||
|
||||
<h3 id="toc_9">Scenario 3: Intermittent Lockdown</h3>
|
||||
<h3 id="toc_3">Scenario 3: Intermittent Lockdown</h3>
|
||||
|
||||
<p>// sim</p>
|
||||