Skip to content

Instantly share code, notes, and snippets.

@runspired
Created April 2, 2020 04:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save runspired/518e539e6c5d665812b9f9ee411a357e to your computer and use it in GitHub Desktop.
Save runspired/518e539e6c5d665812b9f9ee411a357e to your computer and use it in GitHub Desktop.
function calculateIntervals(mortality = 0.001 /* a number from 0-1 for proportion that will die */) {
const doubling = 2.11578003167; // based on New York's doubling rate in deaths between 1st death and April 1st
const seedDailyDeaths = 505; // number of Deaths on April 1st
const incubation = 14; // average days from start to death
let getDay0 = (deaths) => {
let doublingTime = (Math.log(deaths / mortality) * doubling) / Math.log(2);
return doublingTime + incubation;
}
let casesForDay = (day) => {
return Math.pow(2, day / doubling);
}
let deathsForDay = (day) => {
return mortality * Math.max(0, casesForDay(day - 14));
}
let resolvedForDay = (day) => {
return (1 - mortality) * Math.max(0, casesForDay(day - 14));
}
let fix = n => parseInt(n.toFixed(0), 10).toLocaleString();
let totalCases = 1;
let activeCases = 1;
let totalDeaths = 0;
let totalResolved = 0;
let daysSinceCase0 = getDay0(seedDailyDeaths);
for (let i = 0; i < daysSinceCase0; i++) {
let dailyCases = casesForDay(i);
let dailyDeaths = deathsForDay(i);
let dailyResolved = resolvedForDay(i);
totalDeaths += dailyDeaths;
totalCases += dailyCases;
totalResolved += dailyResolved;
console.log({
day: i,
dailyCases: fix(dailyCases),
dailyDeaths: fix(dailyDeaths),
dailyResolved: fix(dailyResolved),
totalCases: fix(totalCases),
totalDeaths: fix(totalDeaths),
totalResolved: fix(totalResolved)
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment