<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>MemeLab Blog</title>
    <link>https://epi.meme/blog/</link>
    <description>Notes on how outbreaks, ideas and defenses spread — and how to simulate them. Epidemiology, memetics and the engineering behind MemeLab, a contagion simulator that runs in your browser.</description>
    <language>en-us</language>
    <lastBuildDate>Wed, 02 Sep 2026 22:24:17 GMT</lastBuildDate>
    <atom:link href="https://epi.meme/blog/feed.xml" rel="self" type="application/rss+xml" />
    <image><url>https://epi.meme/blog/og.png</url><title>MemeLab Blog</title><link>https://epi.meme/blog/</link><width>144</width><height>76</height></image>
    <item>
      <title>Armchair epidemiology: the four-hour model that held up</title>
      <link>https://epi.meme/blog/hello-memelab/</link>
      <guid isPermaLink="true">https://epi.meme/blog/hello-memelab/</guid>
      <pubDate>Wed, 02 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>TheMemeticist</dc:creator>
      <category>meta</category>
      <category>memelab</category>
      <description>No training, no funding, no permission: how Cellular Defense Automata was written by hand in four hours in 2020, and what six years proved about it.</description>
      <enclosure url="https://epi.meme/blog/hello-memelab/img/hero.png" length="51696" type="image/png" />
      <content:encoded><![CDATA[<p>MemeLab is a contagion simulator that runs in your browser. It did not start
as a piece of software. It started as an argument I was losing at work, in
2020, about how much risk I was actually taking.</p>
<p>I worked at a site that was an outbreak location for years. Not a hospital,
but a place where I routinely had to administer first aid, which is not a job
you can do at a distance. Exposures were frequent. The organization shared
enough test results that I could see something the official line
did not admit: people were getting infected more than once. Meanwhile masking
rates around me were falling, and the mask I was permitted to wear was a
medical one.</p>
<p>None of that reached me as data first. It reached me as people. This was
before vaccines, and I worked directly with a lot of them: people who were
positive, people who were about to be, people who were scared and asking me
what I thought because I was the one with the first aid kit. I watched
outbreaks move through that place in real time: who sat near whom, which
room, which shift, and then the results coming back a week later in an order
that was never random. You do not forget watching a thing propagate. Long
before I wrote a line of code, I had a picture in my head of contagion as
something that moved through a <em>structure</em>, through the specific geometry of
who is near whom, and not as a number that applied evenly to everyone.
That picture is, more or less, the model.</p>
<h2 id="the-thing-nobody-would-define"><a class="anchor" href="#the-thing-nobody-would-define" aria-hidden="true">#</a>The thing nobody would define</h2>
<p>What I kept hearing was the word <em>risk</em>, used as though it meant something
precise, and then never defined. Was I at risk? &quot;There&#39;s always some risk.&quot;
Was the mask enough? &quot;It&#39;s what the guidance says.&quot; Every answer bottomed out
in vibes and personal confidence rather than a number attached to a
mechanism, and none of them accounted for the specific thing I was worried
about: not one exposure, but hundreds of exposures over years.</p>
<p>That distinction turns out to be the whole ballgame, and it is measurable. On
fitted filtration efficiency, an N95 is about 98.4%, a surgical mask with ties
about 71.5%, and an ear-loop procedure mask about
<a href="https://jamanetwork.com/journals/jamainternalmedicine/fullarticle/2774266">38.5%</a>.
Run that through exposure time and the gap stops looking like a percentage
and starts looking like a different outcome: modelling in
<a href="https://www.pnas.org/doi/10.1073/pnas.2110117118">PNAS</a> put upper-bound
infection risk for someone in a surgical mask at roughly 90% after 30 minutes
of close exposure, while a fitted FFP2 held around 20% after a full hour.
Real-world case-control data pointed the same direction: N95/KN95 wearers had
an adjusted odds ratio of
<a href="https://www.cdc.gov/mmwr/volumes/71/wr/pdfs/mm7106e1-h.pdf">0.17</a> versus
never masking, surgical 0.34.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-1-thin-shield.png" alt="A small germ character holds a thin cracked shield while infectious germs crowd close, illustrating a surgical mask under prolonged airborne exposure" width="1600" height="900" loading="lazy" decoding="async" /></figure>
<p><em>The question was never &quot;does a medical mask do something.&quot; It was &quot;what does it do, times a thousand shifts.&quot;</em></p>
<p>The part that pushed this from a worry to a problem was policy. For a period,
employees at my site were barred from supplying their own respiratory
protection: no N95s, no elastomerics, bring nothing from home. That was not
unique. In April 2020 clinicians were
<a href="https://www.npr.org/2020/04/02/825200206/doctors-say-hospitals-are-stopping-them-from-wearing-masks">disciplined or fired</a>
in the US for wearing their own PPE, and in Ontario a nurses&#39; union had to go
to arbitration to establish that homes could not
<a href="https://www.canlii.org/en/on/onla/doc/2020/2020canlii32055/2020canlii32055.html">deny a fitted N95</a>
where a point-of-care risk assessment called for one. I was being told my risk
was low <em>and</em> being prevented from lowering it.</p>
<h2 id="four-hours-by-hand-in-2020"><a class="anchor" href="#four-hours-by-hand-in-2020" aria-hidden="true">#</a>Four hours, by hand, in 2020</h2>
<p>After about a year of having my assumptions challenged by the reinfections
and the consistent circulation of the virus I could see in the data, by the
mask I was wearing, by the growing evidence on Long COVID, I exercised the
<a href="https://www.ontario.ca/document/guide-occupational-health-and-safety-act/part-v-right-refuse-or-stop-work-where-health-and-safety-danger">right to refuse unsafe work</a>,
went home, and wrote a simulator.</p>
<p>It took about four hours. I have no formal training in epidemiology. I had
never read another epidemic simulation&#39;s source code. I
built it from first principles as a cellular automaton because that was the
obvious shape of the problem to me: a grid of people, each in a state, each
rolling dice against their neighbours every tick. I called it
<a href="https://github.com/TheMemeticist/Cellular-Defense-Automata">Cellular Defense Automata</a>.
This was the pre-ChatGPT era (<a href="https://en.wikipedia.org/wiki/ChatGPT">that launched</a>
in November 2022), so every line was typed by a person who was, at that
moment, quite angry.</p>
<p>Only later did I learn that lattice models of epidemics are a real and old
branch of the field (<a href="https://www.sciencedirect.com/science/article/abs/pii/S0304380000002945">Sirakoulis 2000</a>,
<a href="https://doi.org/10.1016/j.amc.2006.06.126">White 2007</a>),
and that their individual-based cousins are what governments actually ran
(<a href="https://www.nature.com/articles/nature02541">Eubank 2004</a>,
<a href="https://www.nature.com/articles/nature04795">Ferguson 2006</a>). I did not
reinvent the wheel on purpose. I reinvented it because I needed one and
nobody would sell me a real number.</p>
<p>What I put into it was the policy I was living under: the reinfection rate I
could actually observe, the masking rates I could actually count, and the
protection factor of the masks I was actually allowed. What came out was not
the epidemic I had been promised. It was a years-long one, with a long
trailing tail: something that would smoulder rather than burn out quickly. And
for anyone exposed over and over, a cumulative risk of injury orders of
magnitude above the &quot;low&quot; I was being told.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-2-long-tail.svg" alt="Cellular automaton grid of susceptible, infectious and recovered cells producing an epidemic curve with a long multi-year trailing tail" width="1200" height="520" loading="lazy" decoding="async" /></figure>
<p><em>The 2020 output that changed my mind: not a spike and a return to normal, but a tail measured in years.</em></p>
<p>This did not go over well. It shook the boat professionally. I
never returned to that job, and the policy did not change at the time. The
months that followed showed I had not been wrong so much as early: the
outbreak went on to spread through many epidemiologically linked to the
place, staff included.</p>
<p>Claiming either that COVID was airborne or that reinfection was common was,
in that period, treated as heretical in some places where the more accurate information had not propagated, and often as socially unacceptable.</p>
<h2 id="did-it-hold-up"><a class="anchor" href="#did-it-hold-up" aria-hidden="true">#</a>Did it hold up?</h2>
<p>Six years is long enough to grade my own homework.</p>
<p>The long tail was right. Reinfection went from rare to routine: the UK&#39;s
infection survey found
<a href="https://www.ons.gov.uk/peoplepopulationandcommunity/healthandsocialcare/conditionsanddiseases/bulletins/coronaviruscovid19infectionsurveycharacteristicsofpeopletestingpositiveforcovid19uk/19october2022">92.3%</a>
of all identified reinfections occurred during Omicron dominance, which was
the mechanism my 2020 model needed to produce a multi-year epidemic
instead of a single wave.</p>
<p>The post-viral burden question resolved the same way: Canada&#39;s
own surveys put longer-term symptoms after infection at
<a href="https://health-infobase.canada.ca/covid-19/post-covid-condition/">19% of infected adults</a>
by June 2023, with roughly 100,000 Canadians never returning to work.</p>
<p>Most infections had not happened yet in 2020. Canadian infection-acquired seroprevalence went from
<a href="https://www150.statcan.gc.ca/n1/daily-quotidien/230327/dq230327b-eng.htm">2.6% to 54.1%</a>
between early 2021 and mid-2022. The overwhelming majority of infections
came after Omicron, not during the period I was so worried about. Vaccines
were available by then, which blunted the damage those infections did. And the
thing has receded. I pulled the
<a href="https://health-infobase.canada.ca/wastewater/">national wastewater data</a>
myself rather than trust a headline: averaged across Ontario sites, the summer
2026 signal is about 88% below summer 2024 (roughly 80% if you weight sites by
population served), and about 99% below the January 2022 peak.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-6-wastewater.svg" alt="Weekly SARS-CoV-2 signal in Ontario wastewater from late 2020 to August 2026, peaking in January 2022 and falling through successive smaller waves, with the summer 2024 and summer 2026 comparison windows highlighted" width="1200" height="560" loading="lazy" decoding="async" /></figure>
<p><em>Six years of Ontario wastewater. Note that the shape is the thing my 2020 model got right: not one wave, but a long series of them.</em></p>
<p>So the model got the shape right and the timing partly wrong, which is the
normal outcome for a four-hour model and still better than the guidance I was
given. The value was never that it predicted a number. It was that it forced
the argument onto terrain where being wrong was <em>visible</em>.</p>
<h2 id="from-cda-to-memelab"><a class="anchor" href="#from-cda-to-memelab" aria-hidden="true">#</a>From CDA to MemeLab</h2>
<p>I ported the Python original to JavaScript so it could be played rather than
run, and named that version
<a href="https://github.com/TheMemeticist/MemeLab">MemeLab</a>: same automaton, plus
multiple pathogens and a simple evolutionary algorithm, because a model where
the germ cannot change is a model that answers the wrong question after month
six.</p>
<p>The work then spread sideways into indoor air. The
<a href="https://pubmed.ncbi.nlm.nih.gov/19874402/">Wells-Riley model</a> (the standard
first-pass estimate for airborne infection risk in a room, descended from
<a href="https://pubmed.ncbi.nlm.nih.gov/665658/">Riley&#39;s 1978 measles study</a> in a
school where 97% were vaccinated) is exactly the tool that answers &quot;is this
room safe,&quot; and almost nobody outside the field can use it. So I built
<a href="https://github.com/TheMemeticist/Airwareness">apps that do</a>: clean air
delivery rate, air changes per hour, relative risk reduction, in units a
person can act on. That branch is live at
<a href="https://airsupportproject.com/app/">airsupportproject.com</a>, and it is the same
instinct as CDA: take a model that exists and make it usable by the person
whose risk it describes.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-3-lineage.svg" alt="Timeline from the 2020 Python Cellular Defense Automata to the JavaScript MemeLab, the Wells-Riley clean-air apps, and the current MemeLab V3" width="1200" height="420" loading="lazy" decoding="async" /></figure>
<h2 id="why-it-s-called-memelab"><a class="anchor" href="#why-it-s-called-memelab" aria-hidden="true">#</a>Why it&#39;s called MemeLab</h2>
<p>The name is not about internet pictures. Richard Dawkins coined <em>meme</em> in
<a href="https://en.wikipedia.org/wiki/The_Selfish_Gene"><em>The Selfish Gene</em></a> in 1976
for a unit of culture that replicates: &quot;Just as genes propagate themselves in
the gene pool by leaping from body to body via sperms or eggs, so memes
propagate themselves in the meme pool by leaping from brain to brain via a
process which, in the broad sense, can be called imitation.&quot; That is a
transmission model. It has a host, a contact and a copy. I have written under
the handle TheMemeticist for years, and when I ported the automaton to
JavaScript I named it for the general case rather than the specific one,
because the automaton does not know what it is carrying.</p>
<p>You can see that in the type the whole engine is parameterised by. A pathogen
in MemeLab is this gene vector and nothing else:</p>
<pre class="code" data-lang="ts"><code class="hljs language-ts"><span class="hljs-keyword">export</span> <span class="hljs-keyword">interface</span> <span class="hljs-title class_">StrainGenes</span> {
  <span class="hljs-attr">attackRate</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// 0..1 per-contact</span>
  <span class="hljs-attr">incubation</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// days</span>
  <span class="hljs-attr">infectious</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// days</span>
  <span class="hljs-attr">ifr</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// 0..1 base infection-fatality rate</span>
  <span class="hljs-attr">range</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// Manhattan radius</span>
  <span class="hljs-comment">/** Mean duration of post-infection immunity, in days. Use a very large value
   *  (e.g. 36500) for &quot;lifelong&quot; immunity. Daily wane probability = 1/immunityDays. */</span>
  <span class="hljs-attr">immunityDays</span>: <span class="hljs-built_in">number</span>;
  <span class="hljs-attr">mutationRate</span>: <span class="hljs-built_in">number</span>; <span class="hljs-comment">// 0..1 per-replication per-gene</span>
}</code></pre>
<p>Nothing in there says virus. Read it as an idea and most of it still means
something: <code>attackRate</code> is the chance one telling lands, <code>incubation</code> is the
lag between hearing a thing and repeating it, <code>infectious</code> is how long you keep
repeating it, <code>immunityDays</code> is how long until you can be caught by it again,
and <code>mutationRate</code> is the fact that nobody retells a story exactly. <code>ifr</code> is
the seam. A fatality rate has no honest reading for a rumour, and I would
rather point at that than pretend the mapping is clean.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-7-two-readings.svg" alt="The same four-state machine labelled twice: susceptible, exposed, infectious and recovered for a virus, and has not heard it, heard it but not repeating, repeating, and done with it for an idea, with the strain genes governing each transition" width="1200" height="512" loading="lazy" decoding="async" /></figure>
<p><em>The engine only implements the top row. The bottom row is a reading of it.</em></p>
<p>The lineage here is real rather than a pun. In 1964 two papers in <em>Nature</em>
made this substitution directly: Goffman and Newill
<a href="https://www.nature.com/articles/204225a0">generalized epidemic theory to the transmission of ideas</a>,
and Daley and Kendall wrote down
<a href="https://www.nature.com/articles/2041118a0">the first rumour model</a> as a
variant of SIR. The rumour-spreading literature still cites those two as its
origin points.</p>
<p>Where the analogy breaks is worth being precise about, because the breaks are
the interesting part. Daley and Kendall&#39;s spreaders become <em>stiflers</em> on
meeting somebody who already knows the rumour: they go quiet because of a
contact, not because of a clock. MemeLab recovers people on a timer, so it is
SIR and not that. A virus also needs only one exposure, whereas a belief
usually needs several, from different people. Centola and Macy named that
<a href="https://www.journals.uchicago.edu/doi/10.1086/521848">complex contagion</a>, and
MemeLab&#39;s per-contact dice roll is a simple contagion by construction, with no
adoption threshold anywhere in it. And most information never behaves like an
epidemic at all: across
<a href="https://pubsonline.informs.org/doi/10.1287/mnsc.2015.2158">a billion diffusion events on Twitter</a>,
Goel and colleagues found that about 99% of adoptions came from whoever posted
a thing or their immediate followers, and only 0.025% of diffusion trees ever
reached a hundred people. Almost everything dies in one generation.</p>
<p>What does survive the translation is the part this post is about. Centola later
built both networks and ran a real behaviour through them: 1,528 people, a
clustered lattice against a random network of matched degree. The behaviour
spread
<a href="https://www.science.org/doi/10.1126/science.1185231">farther and faster on the lattice</a>,
because reinforcement needs neighbours who share neighbours, and complex
contagion depends on the width of the bridges rather than their length. Note
the sign, though. For a virus, clustering <em>slows</em> spread, which is the next
section. For a behaviour that needs reinforcement, clustering <em>speeds</em> it.
Opposite directions, same lesson: the neighbourhood does work that an average
erases, and a well-mixed population will give you a confident wrong answer in
either direction.</p>
<h2 id="what-a-lattice-knows-that-an-average-doesn-t"><a class="anchor" href="#what-a-lattice-knows-that-an-average-doesn-t" aria-hidden="true">#</a>What a lattice knows that an average doesn&#39;t</h2>
<p>Almost nobody models epidemics this way, and that is worth stating plainly
rather than defensively. In a
<a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC7802527/">systematic review</a> that
screened 4,311 COVID-19 modelling papers from 2020 and fully analysed 242,
compartmental models (SIR, SEIR, the well-mixed classics) were 46.1% of the
field, and statistical curve-fitting another 31.8%. Network models were 2.34%.
Agent-based models were 1.34%. Cellular automata were not a category at all;
they live as a minority inside that last 1.34%. Even a review restricted to
<a href="https://doi.org/10.1186/s12889-026-27321-4">spatial models</a> folds them in
rather than counting them: cellular automata sit at &quot;the low-complexity end&quot;
of agent-based modelling there, dismissed in passing because the grids &quot;are
usually hypothetical constructs, rather than corresponding to real-life
geographies.&quot; So the honest form of the claim is a bound, not a figure: the
whole spatially explicit branch is low single digits of the epidemic modelling
literature, and CA is a minority of that.</p>
<p>I did not pick the unpopular option to be contrary. I picked the one that
matched what I had watched happen in a building. And the &quot;hypothetical grids&quot;
objection is a fair hit on a plain lattice, which is why MemeLab does not stop
at one: it also runs Voronoi settlement networks with Zipf-sized cities and
urban/rural density, so the neighbourhood structure can be made to look like
somewhere people actually live.</p>
<p>Here is the difference it makes, and you can run both sides yourself. Take one
disease. Same incubation, same infectious period, same 34% IFR, and the part
that matters most, <em>the same R₀ of 1.9</em>. Seed 0.2% of a 102,400-person population and
project six weeks. Well-mixed
<a href="https://epi.meme/#/sim?p=bdbv&g=meanfield&z=320&si=0.002&at=0.2831&mr=0">mean-field</a>:
about 77,000 cases and 4,200 deaths. A
<a href="https://epi.meme/#/sim?p=bdbv&g=hexagonal&z=320&si=0.002&at=0.0414&mr=0">hexagonal lattice</a>
with everything else identical: about 2,100 cases and 400 deaths. Same disease,
same reproduction number, same six weeks: roughly a 38× gap in cases, produced
by nothing but who is allowed to stand next to whom.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-5-mixing-vs-lattice.svg" alt="Two panels contrasting a well-mixed mean-field model, where every infectious person can reach the whole population, with a hexagonal lattice where a cluster burns out locally against its own recovered cells" width="1200" height="600" loading="lazy" decoding="async" /></figure>
<p><em>Same disease, same R₀, same six weeks. The only difference is the neighbourhood.</em></p>
<p>The mechanism stops being mysterious once you see it. A well-mixed model lets
every infectious person draw from the entire susceptible pool, forever. On a
lattice they can only reach their neighbours, so a cluster burns through the
people around it and then stalls against a wall of its own recovered: local
herd immunity, arriving early and in one place, with no intervention involved.
Sparse regions fade out on their own; dense ones amplify. The epidemic stops
being one curve and becomes many small ones that ignite and die at different
times, which is what real outbreak data looks like and what a single well-mixed
curve structurally cannot produce.</p>
<p>This is what made a four-hour program worth keeping: none of that
behaviour is <em>in</em> the program. There is no rule that says &quot;cluster&quot;, no rule
that says &quot;fade out&quot;, no rule that says &quot;second wave&quot;. There are cells, states,
and a dice roll against the neighbours. Everything else is emergent: the long
tail I found in 2020, the hot-spot-then-saturation pattern, the way the whole
system changes character when defenses cross a threshold. It falls out of local
rules interacting, and nobody has to put it there. That is the real argument
for cellular automata, and it is why the machinery that ran a respiratory virus
runs a filovirus without changing the code.</p>
<p>It also implies something uncomfortable about fitting. If you fit a well-mixed
model to an outbreak that is actually spatially clustered, you can match the
curve so far and still be wrong about what comes next, because you have
credited to a low R₀ what was really being done by geometry. Fits on spatial
lattices tend to recover a considerably higher intrinsic R₀ than the published
consensus while landing closer on cumulative totals. That is a claim I owe you
numbers for, and it gets its own post.</p>
<h2 id="why-now"><a class="anchor" href="#why-now" aria-hidden="true">#</a>Why now</h2>
<p>I have had ideas for expanding CDA for years and never found the moment. Two
things converged. The first is the
<a href="https://www.who.int/emergencies/situations/ebola-outbreak---drc-2026">2026 Bundibugyo ebolavirus epidemic</a>
in the DRC, the largest BDBV outbreak on record and, as of the WHO&#39;s mid-August
<a href="https://www.who.int/emergencies/disease-outbreak-news/item/2026-DON615">situation report</a>,
thousands of confirmed cases with a case-fatality rate near 47%, declared a
<a href="https://www.who.int/news/item/17-05-2026-epidemic-of-ebola-disease-in-the-democratic-republic-of-the-congo-and-uganda-determined-a-public-health-emergency-of-international-concern">public health emergency of international concern</a>
in May. There is no licensed vaccine for this strain: Ervebo covers Zaire
ebolavirus, and the three BDBV candidates
<a href="https://cepi.net/cepi-fast-tracks-three-bundibugyo-ebolavirus-vaccine-candidates">CEPI fast-tracked</a>
only entered
<a href="https://www.ox.ac.uk/news/2026-07-13-worlds-first-phase-i-bundibugyo-ebolavirus-vaccine-trial-launched-by">first-in-human trials</a>
this summer.</p>
<p>The second is that generative AI made more advanced builds tractable for one person. The
useful discovery is that the <em>same</em> cellular automaton generalizes across
pathogens: the machinery I wrote for a respiratory virus in 2020 runs a
filovirus with different genes, not different code.</p>
<figure><img src="https://epi.meme/blog/hello-memelab/img/fig-4-bdbv-sim.png" alt="MemeLab running the Bundibugyo ebolavirus preset: an epidemic curve out to day 1,300 above the disease panel showing the filovirus gene values for attack rate, incubation, infectious period and kill rate" width="1500" height="1751" loading="lazy" decoding="async" /></figure>
<p><em>The current build on its default preset. Everything below the curve is a gene value (6-day incubation, 9-day infectious period, 34% IFR), not a different simulator.</em></p>
<p>This latest iteration is, I believe, the most physically accurate version yet.
That is hard to prove, and I want to state the claim honestly: I have not
found a publicly available epidemic model that beats it on 6-week-and-beyond
cumulative cases and deaths, and I have looked. I think it is the best
accessible epidemic simulator or forecast available. &quot;Accessible&quot; is doing real
work in that sentence, since the models that might beat it are not ones you can
open in a tab.</p>
<p>The longer-horizon projections are still in progress and will get their own
post. What I will say now is that the current trajectory is bad, and my own
modeling, not anyone&#39;s official forecast, is that deaths could reach the
tens of thousands depending on vaccine efficacy and rollout. For calibration
against people whose job this is: the CDC&#39;s
<a href="https://www.cdc.gov/mmwr/volumes/75/wr/mm7522e1.htm">modeled scenarios</a> put a
65% probability of more than 20,000 cases within three months under poor
isolation, and a <em>Lancet Infectious Diseases</em>
<a href="https://www.thelancet.com/journals/laninf/article/PIIS1473-3099(26)00320-8/fulltext">stochastic model</a>
put the worst case above 66,000 confirmed cases by September if control lapses.
At the observed case-fatality rate, that arithmetic is where my number comes
from. Both groups are careful to call these planning tools rather than
forecasts, and so am I.</p>
<p>Development is now supported by a grant from <a href="https://balvi.io/">Balvi</a>, a
philanthropic fund for pandemic-related work that conventional funders
overlook, which I am grateful for and which is why the pace has changed.</p>
<h2 id="what-this-blog-is-for"><a class="anchor" href="#what-this-blog-is-for" aria-hidden="true">#</a>What this blog is for</h2>
<p><a href="https://epi.meme/">epi.meme</a> is the live build; the simulator is open source
at <a href="https://github.com/TheMemeticist/MemeLabV3">github.com/TheMemeticist/MemeLabV3</a>.
This is where the model write-ups, validation work and engineering notes go,
including the long-horizon projections and the accuracy claim above, which I
intend to defend with numbers rather than leave as an assertion. There is an
<a href="https://epi.meme/blog/feed.xml">RSS feed</a> if you want them delivered.</p>
<p>The whole project comes from one conviction, formed in a bad year: if the
answer to &quot;how much risk am I taking&quot; is a feeling, it is not an answer. Open
the dish, set the parameters, and watch what the assumptions actually imply.</p>
<p>Welcome to the lab.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
