<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Tomoaki Masuda</title>
    <description>The latest articles on DEV Community by Tomoaki Masuda (@moonmile).</description>
    <link>https://dev.to/moonmile</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F42439%2F45573eab-900b-41ea-8016-65966bb71f88.png</url>
      <title>DEV Community: Tomoaki Masuda</title>
      <link>https://dev.to/moonmile</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/moonmile"/>
    <language>en</language>
    <item>
      <title>隠れSIRモデルを試作して、東京都の感染者を予測する</title>
      <dc:creator>Tomoaki Masuda</dc:creator>
      <pubDate>Tue, 07 Apr 2020 01:48:32 +0000</pubDate>
      <link>https://dev.to/moonmile/sir-133h</link>
      <guid>https://dev.to/moonmile/sir-133h</guid>
      <description>&lt;p&gt;実地な値を使って検証するのは避けていたのだけど、現在の状況を見て解説することにします。&lt;/p&gt;

&lt;h2 id="%E9%9A%A0%E3%82%8C%E6%84%9F%E6%9F%93%E8%80%85%E3%81%8C%E4%B8%80%E5%AE%9A%E9%87%8F%E3%81%84%E3%82%8B"&gt;隠れ感染者が一定量いる&lt;/h2&gt;

&lt;p&gt;現在、東京都の新規患者が100人/日を超えています。指数関数的増加（差分が1.0以上となるので複利的に増加する）が理解できていれば、次の増加が100人ではなく、それ以上にとなることは容易に推測ができます。&lt;/p&gt;

&lt;p&gt;ただし、単純に「指数関数的増加」とはいえ、いったいどのくらいの増加数なのか？を予測しておくことは大切なことです。&lt;/p&gt;

&lt;p&gt;新型コロナウィルスの厄介な点は、&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;感染率がインフルエンザと同程度に低い（麻疹などよりもかなり低い）&lt;/li&gt;
    &lt;li&gt;潜伏期間が2週間と長い&lt;/li&gt;
    &lt;li&gt;感染しても無症状な人が一定量（8割程度）いるらしい&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ところです。このため、麻疹のように一気に拡散＆重症化する場合は、発病後すぐに家や病院にこもるために、あまり外側に拡散されることがないとありません。潜伏期間が長いと、いつ罹患したのかがやっかいです。クラスター対策班がクラスターの追跡ができなくなってきているのはこのためです。同時に、感染しても無症状であれば、感染したまま普通の生活を送ることになります。無症状であるために、病院に行くこともなく家で休むこともなく PCR 検査や検体検査を受けることしません。このため、本人の意図とは関係なく、ウィルスが蔓延してしまいます。&lt;/p&gt;

&lt;p&gt;進化論的に言えば、これが新型コロナウィルスの「生存戦略」ということになります。&lt;/p&gt;

&lt;h2 id="%E9%9A%A0%E3%82%8C%E6%84%9F%E6%9F%93%E8%80%85%E3%82%92%E6%8E%A8%E6%B8%AC%E3%81%99%E3%82%8B"&gt;隠れ感染者を推測する&lt;/h2&gt;

&lt;p&gt;潜伏期間中であったり無症状な感染者を「隠れ感染者」と呼びましょう。この「隠れ感染者」は数値の上ではでてきません。毎日、定期的に発表される新規感染者とは別に扱う必要があります。&lt;/p&gt;

&lt;p&gt;では、どうやって「隠れ感染者」を推測するのでしょうか？&lt;/p&gt;

&lt;p&gt;感染の因果関係として、&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;新規感染者が発生する&lt;/li&gt;
    &lt;li&gt;新規感染者は潜伏期間(2週間)前に何処かで感染している&lt;/li&gt;
    &lt;li&gt;新規感染者を感染させた元の感染者がいる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ことが条件になります。実際は海外から帰国した感染者もいるので誤差でるのですが、おおまかな東京都の感染者の状況はこの感染の因果関係にあてはめられます。&lt;/p&gt;

&lt;p&gt;これを SIR モデルに当てはめてみます。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_02org.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RpC3QO6e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_02thum.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;新規感染者 dIt/dt を発症した日（14日前）に「隠れ新規感染者」として設定します。&lt;br&gt;
隠れ新規を累積して、隠れ累積患者数を計算します。このとき、その日の新規患者を取り除きます。これは新規患者としてカウントして隔離されるためです。&lt;br&gt;
隠れ累計と隠れ新規の関係から、感染率が計算できます。感染率 β は、もとの SIR モデルの感染率や基本再生産数とは異なる定義となるため、このモデル独自のものです。もう少し式変形をして、基本再生産数と比較できるようにしていきます。&lt;/p&gt;

&lt;p&gt;既に新規感染者が計測されている日から14日さかのぼったところの感染率βが算出できます。&lt;br&gt;
これをもとにして、予測感染率β*を推測します。&lt;br&gt;
一般に、何らかの環境の操作（外出の自粛など）が行われない限り、予測感染率は前日の感染率を踏襲するはずです。&lt;/p&gt;

&lt;p&gt;この予測感染率 β* から、予測隠れ新規患者数を計算します。&lt;br&gt;
予測隠れ新規の数は、14日後に予測新規患者数となり、新規の感染者数が予測できるというモデルです。&lt;/p&gt;

&lt;h2 id="excel-%E3%81%A7%E4%BA%88%E6%B8%AC%E3%81%99%E3%82%8B"&gt;Excel で予測する&lt;/h2&gt;

&lt;p&gt;これを Excel 使って計算してみましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068/resource/c2d997db-1450-43fa-8037-ebb11ec28d4c"&gt;東京都 新型コロナウイルス陽性患者発表詳細 - 東京都_新型コロナウイルス陽性患者発表詳細 - 東京都オープンデータカタログサイト&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4/6 付けの東京都の患者データを使って予測してみます。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_03org.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JjKiwCwU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_03thum.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;青いセルが予測の部分です。「患者累積」と「隠れ累積」が大きくずれているのは、新規患者をうまく拾えていないのと、発症までの潜伏期間が2週間と長いために潜在的な患者が滞留してしまっているのが理由です。&lt;br&gt;
単純計算いけば、新規患者数100人×14日間 = 1400人以上は滞留していることになります。&lt;/p&gt;

&lt;p&gt;2週間ほどさかのぼって、感染率の予測値を入れます&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;0.160 は、3/22 までの大まかな平均値です。4/6 付けで新規患者数が83人と若干減っているので実効感染率が一時的に下がっていますが、いまのところ外れ値として処理しています。継続して下がっていれば、この感染率をさげます。&lt;/li&gt;
    &lt;li&gt;4/4 からの 0.080 は土日で自粛が効果的に行われたとみなして下げてあります。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;感染率の絶対値は、特に意味はありません。いずれ実効再生産数のような割り出しが必要になります。&lt;br&gt;
ここでは、相対的な値となっています。&lt;/p&gt;

&lt;p&gt;それぞれの値をプロットしたの下の図です。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_04org.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--JyAFHw-f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_04thum.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;予測患者数累積が非常にあがっていることが分かります。&lt;/p&gt;

&lt;p&gt;&lt;a href="http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_05org.jpg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vaowC-Au--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/http://www.moonmile.net/blog/wp-content/uploads/2020/04/images20200407_05thum.jpg"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;対数軸にプロットしたとき、患者累積と隠れ累積の差が大きくならないように注意が必要です。&lt;/p&gt;

&lt;p&gt;現時点でプロットしてみたところ&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;4/11 頃に患者数の累積が2,000人を超える&lt;/li&gt;
    &lt;li&gt;新規患者は500人のピークがある&lt;/li&gt;
    &lt;li&gt;4/4 の自粛は、4/18 頃に効果が現れるので、それまでは同じペースで自粛が必要となる&lt;/li&gt;
    &lt;li&gt;増え方は急ではあるが、きちんと自粛をすれば、患者数が1万人を超えるのは4月末以降の予想となる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;問題は、新規患者数が500人/日程度発生するが、医療崩壊を起さずにこれを受け入れらるか？ということです。&lt;br&gt;
このモデルで計算したときには、「隠れ累積患者数」が4,000人程度いることと2週間遅れで発病することをあわせると、かなり厳しい状態と言えます。ただし、軽症/重症者が混在するので、この比率が問題になります。&lt;/p&gt;

&lt;h2 id="%E3%83%87%E3%83%BC%E3%82%BF"&gt;データ&lt;/h2&gt;

&lt;p&gt;Excel データは以下でダウンロードが可能です。&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="https://1drv.ms/x/s!AmXmBbuizQkXgqZdQai8We1yeCBqgQ?e=DERcX6"&gt;予測SIRモデル（東京）&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://catalog.data.metro.tokyo.lg.jp/dataset/t000010d0000000068/resource/c2d997db-1450-43fa-8037-ebb11ec28d4c"&gt;東京都 新型コロナウイルス陽性患者発表詳細 - 東京都_新型コロナウイルス陽性患者発表詳細 - 東京都オープンデータカタログサイト&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;参考文献&lt;/h2&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_Model"&gt;Compartmental models in epidemiology - Wikipedia&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://www.fttsus.jp/covinfo/considerable-discussion/"&gt;COVID-19拡散メカニズムと対策検討資料 – COVID-19情報共有 — COVID19-Information sharing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href="https://www.ism.ac.jp/editsec/toukei/pdf/54-2-461.pdf"&gt;感染症流行の予測 ： 感染症数理モデルにおける定量的課題&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>covid19</category>
      <category>excel</category>
    </item>
    <item>
      <title>感染症数理モデルでシミュレーションする（その２）</title>
      <dc:creator>Tomoaki Masuda</dc:creator>
      <pubDate>Thu, 26 Mar 2020 01:39:10 +0000</pubDate>
      <link>https://dev.to/moonmile/-ai0</link>
      <guid>https://dev.to/moonmile/-ai0</guid>
      <description>&lt;p&gt;3週間ほど経ち状況が変わってきていますが、感染症数理モデルの話を引き続き&lt;/p&gt;

&lt;h2&gt;
  
  
  SEIR モデルを JS で書く
&lt;/h2&gt;

&lt;p&gt;新型コロナウィルスの専門家委員会から「基本再生産数 R0」や「実効再生産数 R」という言葉でてきます。他にも専門用語がでてきますが、これらを一般的に解説するかどうかの前に「その専門分野ではどのような使い方をされているのか？」を正確に把握するする必要があります。まあ、それが「専門分野」なのですから、同じ言葉を使っていても専門分野ごとに多少の違いはあるし、逆に同じ用語を他の分野でも同じ様に使っている場合もあります。どちらにせよ、その分野での専門用語の把握が必要です。&lt;/p&gt;

&lt;p&gt;そんな訳で、２週間ほど前になりますが、SEIR モデルを Javascript で書きました。元の Python からそのまま JS に書き替えて、そのあと R0 を取り込めるようにしています。ちょっと、R0 の意味が分からなくてコードが間違えていたのですが、先日直したので、ここにコードの解説をしておきます。&lt;/p&gt;

&lt;h2&gt;
  
  
  SEIR モデルの数式
&lt;/h2&gt;

&lt;p&gt;実は、Wikipedia を見ると、日本語のものと英語のものと SEIR モデルの式が若干違います。感染率 β の部分で総数 N が出てくるのですが、日本語の場合は、β(N) のように総数に依存するのですが、英語版のほうは β は N から独立しています。&lt;br&gt;
感染率が総数 N に依存するのは変な感じがするので、英語版のほうを使うことにしました。 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Compartmental_models_in_epidemiology#The_SEIR_model"&gt;The SEIR model&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;出生率 Λ と死亡率 μ は短期間なので、0 とみなせます。これを書き方えたのが下の式になります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bNxL5mHv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/reotqhuxyij42ld31j1w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bNxL5mHv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/reotqhuxyij42ld31j1w.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;N: 全体の総数&lt;/li&gt;
&lt;li&gt;S: 未感染者&lt;/li&gt;
&lt;li&gt;E: 潜伏期間中&lt;/li&gt;
&lt;li&gt;I: 発症者&lt;/li&gt;
&lt;li&gt;R: 回復者/免疫を得た人&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;になります。イギリスで発表された全国民が感染して免疫を得るという方式は、この SEIR モデルの、R になるということです。SEIR モデルの場合、感染して潜伏→発症→回復という順番になるのですが、かならず回復するというモデルなので、今回のような新型コロナウィルスのように発症後に死亡するケースがある場合には、致死率が2％程度だとしても相当の死亡者が予想されます。&lt;/p&gt;

&lt;p&gt;即効撤回されたのは、良い判断でした。&lt;/p&gt;

&lt;p&gt;この式の中でのパラメータとして、以下の3つがあります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;α: 潜伏率&lt;/li&gt;
&lt;li&gt;β: 感染率&lt;/li&gt;
&lt;li&gt;γ: 回復率&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;これらは、潜伏期間 lp と発症期間 ip で書き替えることができます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;α = 1/lp : 潜伏帰還の逆数&lt;/li&gt;
&lt;li&gt;γ = 1/ip : 発症期間の逆数&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;肝心の感染率 β の値ですが、基本再生産数 R0 との関係が以下のようになります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6255cTja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/v1/images/20200323_02.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6255cTja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/v1/images/20200323_02.jpg" alt=""&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VYlS1fz---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9zr67bk3kivzcaw6w2kd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VYlS1fz---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9zr67bk3kivzcaw6w2kd.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;死亡率 μ が 0 となるので、R0 は 感染率 β と 回復率 γ との比になります。&lt;br&gt;
式の中では感染率 β を使うことになるので、次のように書き替えます。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nSaeWJKN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ckeig4h68thfpntdf0m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nSaeWJKN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/1ckeig4h68thfpntdf0m.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この式から分かることは、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;感染率 β と回復率 γ が等しいときに R0 が 1.0 になる&lt;/li&gt;
&lt;li&gt;感染率 β が回復率 γ が大きいときに R0 は 1 を超えて、感染が拡大する&lt;/li&gt;
&lt;li&gt;感染率 β が回復率 γ が小さいときに R0 は 1 より小さくなり、感染は縮小していく&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;という現象になります。これが専門家会議の言う「基本再生産数 R0」の意味です。&lt;br&gt;
なので、できるだけ R0 &amp;lt; 1.0 の状態を保ちながら、ピークを低く抑えましょうという対策の根拠になります。&lt;/p&gt;
&lt;h2&gt;
  
  
  SEIR モデルを JS に直す
&lt;/h2&gt;

&lt;p&gt;この数式を Javascript に直すと次のようになります。&lt;br&gt;
v のところが配列になっているのは Python コードの名残りです。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;seir_eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;t&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;N&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

    &lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nx"&gt;E&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nx"&gt;R&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="nx"&gt;ds&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;beta&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt;             &lt;span class="c1"&gt;// dS/dt = -βI/N*S&lt;/span&gt;
    &lt;span class="nx"&gt;de&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;beta&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;S&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;alpha&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt;   &lt;span class="c1"&gt;// dE/dt = βI/N*S-αE&lt;/span&gt;
    &lt;span class="nx"&gt;di&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;alpha&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;E&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;gamma&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt;          &lt;span class="c1"&gt;// dI/dt = αE - γI&lt;/span&gt;
    &lt;span class="nx"&gt;dr&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;gamma&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;I&lt;/span&gt;                      &lt;span class="c1"&gt;// dR/dt = γI &lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;ds&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;de&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;di&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;dr&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;これを100日間繰り返すのが次の calc 関数です。&lt;br&gt;
SEIR モデルに、試しに隔離率(T) を埋め込んでみて、発症者の一定割合を病院に隔離するというシミュレーションも入れておきます。&lt;br&gt;
あと、S,E,I,R の数はマイナス値にはならないので繰り返し計算をするときに補正します。&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nx"&gt;calc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;t_max&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;dt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nx"&gt;lst&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Sinit&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Einit&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Iinit&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Rinit&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;

    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;t_max&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="o"&gt;++&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;

        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;  &lt;span class="nx"&gt;seir_eq&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;i&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;alpha&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;beta&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nx"&gt;gamma&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;N&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Si&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="kd"&gt;var&lt;/span&gt; &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="c1"&gt;// 感染者を発見して隔離する&lt;/span&gt;
        &lt;span class="nx"&gt;dx&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;T&lt;/span&gt;
        &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt;
        &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;dx&lt;/span&gt; &lt;span class="c1"&gt;// 免疫者に加算&lt;/span&gt;

        &lt;span class="c1"&gt;// マイナス値を調節する&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;Si&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;Ei&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Si&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;Si&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

        &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt; &lt;span class="nx"&gt;Si&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Ei&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Ii&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;Ri&lt;/span&gt; &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="c1"&gt;// console.log( state );&lt;/span&gt;
        &lt;span class="nx"&gt;lst&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="nx"&gt;state&lt;/span&gt; &lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h2&gt;
  
  
  グラフ化する
&lt;/h2&gt;

&lt;p&gt;これに vue.js とグラフツールの c3.js を追加したが次の形です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://moonmile.github.io/seir-model/"&gt;SEIR モデル シミュレータ&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VYlS1fz---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9zr67bk3kivzcaw6w2kd.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VYlS1fz---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/9zr67bk3kivzcaw6w2kd.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;このグラフは基本再生産数 R0 が 10 のときのものです。10 というのは非常に多い値なのですが、いわゆるダイヤモンドプリンセス号のような閉鎖空間のクラスター（患者集団）の場合がこれに相当します。時間を追うごとに加速度的に感染者が広がります。&lt;/p&gt;

&lt;p&gt;注目して欲しいのは、以下の３点です。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;発病者のピークは感染スタートよりも左にある&lt;/li&gt;
&lt;li&gt;潜伏期間中（黄色）のピークは、発病者（緑）のピークよりも左にある&lt;/li&gt;
&lt;li&gt;最終的にほとんどの人が回復者（赤）となる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;このグラフでは潜伏期間２週間で考えているので、発病者（緑）のピークは感染スタートから２週間以降になります。感染スタート時にすべての人が感染する訳ではないので、幅を取って２週間から３週間というところです。これが、現在の花見や春休みのシーズがスタートとなったときに、2,3週間後に流行するのでは？という理由です。&lt;/p&gt;

&lt;p&gt;当然のことながら、発病期間のピークの前に、潜伏期間のピークがあります。SEIR モデルは潜伏期間中には罹患させないモデルになっていますが、新型コロナウィルスは潜伏期間中も罹患させる可能性がある、または無症状の場合も感染さえる場合があるという「可能性」が指摘されています。&lt;br&gt;
このため、潜伏期間中の人が活発に活動すると、その後に発症のピークが出るかもしれません。&lt;/p&gt;

&lt;p&gt;SEIR モデルの場合は、最終的にほとんどの人が感染して回復します。というか、無限に計算を続ければ100%の人が感染し回復して終わるようになっています。&lt;br&gt;
先に書きましたが、SEIR モデルの場合は発症→回復となるので、死亡者がいません。実際の新型コロナウィルスでは死亡するので、最終的な回復者数×死亡率が全体の死亡数になってしまいます。&lt;br&gt;
このため、無防備な策は誤りです。&lt;/p&gt;

&lt;h2&gt;
  
  
  基本再生産数 R0 を 1 に近づける
&lt;/h2&gt;

&lt;p&gt;基本再生産数 R0（あるいは実効再生産数 R）は、感染率 β と回復率 γ との比率になります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6255cTja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/v1/images/20200323_02.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6255cTja--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/v1/images/20200323_02.jpg" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;R0 を 1.0 に近づける（1.0以下にする）というのはどういうことかというと、数式からは以下の2つの手段があります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;感染率 β を下げる&lt;/li&gt;
&lt;li&gt;回復率 γ を上げる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;感染率を低く押さえるというとは、いわゆる「誰かに罹患させる確率を減らす」ということです。移動を減らすとか、3つの条件が重なる場所を作らないあるいは行かない、というのがその手段です。&lt;br&gt;
もうひとつは、回復率を上げるというのは、病床を増やす、体力を蓄えておいて軽症で済ませるなどがあります。&lt;/p&gt;

&lt;p&gt;基本再生産数 R0 を 10,5,2 と変化させてみましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u2kEI0kI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jmpodbrzu2r2z6aiud41.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u2kEI0kI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jmpodbrzu2r2z6aiud41.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eVhgkzAE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6ghsljavwdwjl6f3suvm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eVhgkzAE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/6ghsljavwdwjl6f3suvm.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--foJEWlfg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yeiew3czlolvq08sfcfm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--foJEWlfg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/yeiew3czlolvq08sfcfm.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;発症者（緑）のピークが限りなく右にずれることがわかります。&lt;br&gt;
つまり「ピークを平らにする」ということは、基本再生産数 R0 を限りなく1.0に近づける（あるいは1.0以下にする）ことであり、同時に感染者のピークを限りなく未来に追いやることができます。&lt;/p&gt;

&lt;p&gt;そして、新型コロナウィルスに対しての有効なワクチンや予防接種ができるまでの時間稼ぎができます。&lt;/p&gt;

&lt;h2&gt;
  
  
  基本再生産数 R0 が 1.0 のときは？
&lt;/h2&gt;

&lt;p&gt;実験として、基本再生産数 R0 が 1.0 のときはどうなるのかを見ていきましょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vyxLytcK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jk4hj2m78yhoqubea50n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vyxLytcK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/jk4hj2m78yhoqubea50n.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;感染者数（緑）のグラフが非常に平らになりほとんど直線になります。&lt;br&gt;
罹患した後に回復した人も全然増えていないように見えますが、実際は回復者が100日目で25人になります。&lt;/p&gt;

&lt;p&gt;これから分かることは、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;感染がまったく広がらない訳ではない。わずかずつ感染は広がる&lt;/li&gt;
&lt;li&gt;しかし、対処可能な感染者数となる&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ことを示しています。確率的に感染者は発生するのですから、何処から感染するかは分かりません。しかし、感染して発病したとしても、十分に治療可能な病床が用意できる、ことを意味しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  github
&lt;/h2&gt;

&lt;p&gt;コードは github &lt;a href="https://github.com/moonmile/seir-model"&gt;moonmile/seir-model: SEIR model simulator&lt;/a&gt; に公開しています。&lt;/p&gt;

&lt;h2&gt;
  
  
  おまけ 実効再生産数 R とは？
&lt;/h2&gt;

&lt;p&gt;ここからは私的なメモです。&lt;/p&gt;

&lt;p&gt;基本再生産数 R0 と実効再生産数 R の違いを記述しておきます。&lt;br&gt;
専門家会議では、最初の NHK での解説で「基本再生産数 R0」という用語を使っていました。再生産数という言葉から一般的に「基本再生産数を 1.0 以下に抑えれば、なにかグラフが平たくなる」ことが理解できたと思います。&lt;/p&gt;

&lt;p&gt;このグラフが出たのが 2/24 の NHK です。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zyjgMRgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mtmqljl2goetvuugfc0m.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zyjgMRgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mtmqljl2goetvuugfc0m.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;この感染症の流行モデルの元ネタは当時の NHK の解説では何処にも出てきませんが、専門家会議に北大の西浦教授がいることと、西浦教授の2017の論文から、SEIR モデルがベースであることがわかります。&lt;/p&gt;

&lt;p&gt;そのあと、色々な批判もあったのち、海外でもこの「平たくする」図がでてくるようになりました。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.flattenthecurve.com/"&gt;Flatten the curve | These guidelines are intended to help Flatten the Curve with the COVID19 outbreak, to help limit spread and reduce the load on hospitals and other healthcare.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QICTAWnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i1hw6e9frktm10f6dy2h.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QICTAWnK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/i1hw6e9frktm10f6dy2h.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ただし、これらの「ピークを平たくする」というイメージには、なんら数式的な根拠が示されていません。SEIR モデルを理解しているのか、それとも読者が SEIR モデルを理解できないと思っているのかは定かではないのですが、肝心の数理モデルはでてきません。twitter で #FlattenTheCurve というハッシュタグで拡散されつつありありますが、根拠は示されてません。&lt;/p&gt;

&lt;p&gt;結果的に、発症時のピークを下げる＝医療崩壊を防ぐことになるので、効果は同じだと思われるのですが、私が懸念するのは、&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ピークを下げた時期の概算が示されていない&lt;/li&gt;
&lt;li&gt;ピークを過ぎた後の発症数の裾野が、いつまで続くのか示されていない&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;のが問題だと思っています。&lt;/p&gt;

&lt;p&gt;また、新型コロナウィルスの特徴として無症状な人が多いことから、新しい感染者を0人にすることはほぼ不可能です。天然痘のように全ての人にワクチンをうって撲滅しない限り 0 にはなりません。&lt;/p&gt;

&lt;p&gt;同時に「クラスター対策」として言われるように、基本再生産数 R0 は状況によって大きく変わります。全体の平均として 1.0 以下におさえると、マクロの全体として発症者が押さえられるのは確かなのですが、個々の感染しやすい場所、あるいは感染しやすい季節や場所などのミクロの視点で見れば、基本再生産数は大きく変わり分布を持ちます。&lt;/p&gt;

&lt;p&gt;このため「実効再生産数 R」として「実効」を付けて、基本再生産数 R0 になんらかのパラメータを掛けます。いわゆる事前条件を加味します。&lt;br&gt;
どうやら疫学の場合の実効再生産数は、二次感染の平均を考慮するようです。このあたり、最近の専門家会議での解説をみると「実効再生産数 R」と区別されていることがわかります。&lt;/p&gt;

&lt;p&gt;詳細は2020年3月19日付けの提言を読むとわかります。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www3.nhk.or.jp/news/special/coronavirus/view/"&gt;「感染拡大地域では自粛検討を」専門家会議が提言【全文】&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;基本再生産数(R0:すべての者が感受性を有する集団において1人の感染者が生み出した二次感染者数の平均値)&lt;/li&gt;
&lt;li&gt;実効再生産数(感染症の流行が進行中の集団のある時刻における、1人の感染者が生み出した二次感染者数の平均値)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;基本再生産数は、一般的な都市での感染率 → 都市機能を保ったまま低く保つ必要がある（一般的なイベントの開催、通勤や通学の正常化など）&lt;br&gt;
実効再生産数は、感染してしまった都市での感染率 → 緊急で下げる必要がある（北海道の緊急事態宣言、ロックダウン、都市封鎖）&lt;/p&gt;

&lt;p&gt;のように区別します。&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>seir</category>
    </item>
    <item>
      <title>カレーの作り方を学ぼう</title>
      <dc:creator>Tomoaki Masuda</dc:creator>
      <pubDate>Thu, 26 Mar 2020 01:16:29 +0000</pubDate>
      <link>https://dev.to/moonmile/-4dkk</link>
      <guid>https://dev.to/moonmile/-4dkk</guid>
      <description>&lt;p&gt;カレーの作り方を学ぼう&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var seed = [肉,人参,ジャガイモ,カレールー] ;
var c = new Curry( seed ) ;
c.cut();
c.hot();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;カレーができた。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xA8Lt5GW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eg6dobjagp2r5r14114e.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xA8Lt5GW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/eg6dobjagp2r5r14114e.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>カレー</category>
    </item>
  </channel>
</rss>
