HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

J言語を用いたCOVID-19アウトブレイクのモデリング (2020年)

Modeling the Covid-19 Outbreak with J (2020) (datakinds.github.io)

16 pointsby surprisetalk0 コメント

要約

この記事は、COVID-19の感染拡大をSEIRSモデルを用いて数学的にモデリングし、J言語で離散時間シミュレーションを実装する方法を解説しています。感染者数、潜伏期間、回復期間、再感染率などのパラメータからモデルの変数(β、σ、γ、ξ)を算出し、感染の広がりをシミュレーションするプロセスが示されています。

全文翻訳

🚨 バナーには「トランスジェンダーの権利!」と書かれています。 前書き:私は疫学者ではなく、そのように主張するつもりもありません。しかし、私は数学専攻であり、学術的な人間であり、これを正確かつ正しく報告するために十分な調査を行ったと感じています。使用した全コードは投稿の最後にありますので、データを調べる手間を省きたい方はそちらをご覧ください。 ニュースを見ていれば、COVID-19のパンデミックについて耳にしたことがあると思います。CDCがアメリカ人の62%が感染すると予測するモデルを発表したことを受けて1、私は彼らがどのようにしてその数字に至ったのかに興味を持ちました。実際、病気の広がりについて、私たちはどのように結論に至るのでしょうか? 病気の広がりには、十分に確立されたモデルがたくさんあります。最も単純なモデルはSIRモデル5ですが、いくつかの注意点があります。最初の注意点は、単一の人間の中で病気がその経過をたどった後、その人間は病気に対して永久に免疫を持つと仮定していることです。2番目の注意点は、モデルがすべての感染性のある人がすぐに症状を示し始めると仮定していることです。これらの仮定はCOVID-19には当てはまりません。この病気には14%の再感染率6があり、症状が現れるまでに10日から14日かかります。 現在COVID-19パンデミックに使用されているモデルはSEIRSモデル*、4、5です。SEIRモデルでは、特定の人間は「感受性(Susceptible)」、「曝露(Exposed)」、「感染性(Infectious)」、「回復(Recovered)」の4つの状態のいずれかにいることができます7。人間は、病気にかかるリスクがある場合、感受性があります。病気にかかっているか、症状を示さずに病気を運んでいる場合、曝露状態です。これは潜伏期間中に起こります。病気にかかり、症状が出ている場合、感染性状態です。この時に人々は病院に行ったり、集中治療を必要としたりします。病気を克服し、ある程度の免疫を持った場合、回復状態です。 調整できる変数は4つあります:β、σ、γ、ξです。これらはすべて、一般的な時間単位あたりの率です。 βは、感受性のある人が曝露状態になる率です。 σは、曝露状態の人が感染性状態になる率です。 γは、感染性状態の人が回復する率です。 ξは、回復状態の人が免疫を失い、感受性状態に戻る率です。 https://www.idmod.org/docs/hiv/_images/SEIR-SEIRS.png より引用。Copyright 2019, Intellectual Ventures Management, LLC (IVM). All rights reserved. これらの状態と変数はすべて、それらを関連付ける微分方程式を持っています。しかし、まだいくつか注意すべき点があります。 まず、このモデルは病気による人口の死亡率を表現していません。そのため、基本的な再生産数4、7(つまり、1人が平均して感染させる人の数)は計算が非常に簡単です:R0 = β / γ。 しかし、私たちは物事を少し複雑にしていきます。病気の数字を見るだけでは退屈で影響がありません!微分方程式を分析する代わりに、それらの4つの変数を使用する実際の離散時間シミュレーションを見ていきます。 しかし、まず、それらの変数が何であるかを理解する必要があります。時間単位を1日としましょう。ウイルスの情報の一部を以下に示します。 COVID-19のR0は約2.288であることがわかっています。潜伏期間は約10日程度(CDCによると2〜14日)であることがわかっています。症状が出始めてから、約2週間持続することがわかっています9。感染者の14%6が再感染することがわかっています。 これらの情報から、必要なすべての変数を計算できます。まずσから始めましょう。毎日、COVID-19で症状が出始める特定の確率σがあります。毎日、累積的に症状が出ていない確率は(1 - σ)^Nです。ここでNは日数です。これは単純な二項分布であり、平均10日で症状が出始めるためには、(1 - σ)^10 = 0.5を解くだけで済みます。したがって、σ = 0.066967 症状が出始めてから、約2週間持続します。上記と同じプロセスを行いましょう:(1 - γ)^14 = 0.5は、γ = 0.0483048であることを意味します。上記で確立されたR0とγの値を使用して、βを計算できます8。2.28 = β / 0.0483048は、β = 0.110134944であることを意味します。 残っているのはξの計算だけです。これをどのように行うかは全くわかりませんが、完全にランダムで合理的な推測として、COVID-19に対する免疫を失うのに約30日かかるとしましょう。(1 - ξ)^30 = 0.5は、ξ = 0.02284を与えることになります。 これで必要な変数がすべて揃ったので、Jセッションを起動してこのシミュレーションの作成を開始しましょう!まず、数値定義です。 ppl =: 10 NB. シミュレーションには何人の人がいますか? Beta =: 0.110134944 NB. 感受性のある人が曝露状態になる率。 Sigma =: 0.066967 NB. 曝露状態の人が感染性状態になる率。 Gamma =: 0.0483048 NB. 感染性状態の人が回復する率。 Xi =: 0.02284 NB. 回復状態の人が感受性状態に戻る率。 R =: 2.28 NB. 1人が感染させる人数。 CFR =: 0.02 NB. 致死率。 D =: 0.00155285 NB. 症状が出ている間の1日あたりの死亡率。 ここで、ケース致死率(Case Fatality Rate)という追加のパラメータを追加したことに注意してください9。これはCOVID-19症例のうち死亡に至る割合です。CDCは0.25%から3%の使用を推奨しているため、特に米国の医療システムが過負荷になることを考えると、2%は堅実な中間値と言えるでしょう。その値と、症状が出てから死亡するまでに13日かかるという事実を、0.98 = (1-D)^13 という式で使用すると、症状が出ている間に1日あたり死亡する確率はD = 0.00155285となります。 病気の広がりをシミュレートしたいのであれば、社会的接触をシミュレートする必要があります。そこで、人々の近さを示すエルミート行列を作成しましょう。 closeness =: 2 %~ (+ |:) ? (ppl,ppl) $ 0 0.989266 0.433774 0.587923 0.860137 0.423383 0.669393 0.296438 0.658781 0.253612 0.327771 0.433774 0.797844 0.412043 0.734478 0.693995 0.452715 0.585249 0.67874 0.591025 0.897202 0.587923 0.412043 0.916071 0.336036 0.652928 0.531987 0.541966 0.477779 0.522089 0.293315 0.860137 0.734478 0.336036 0.125376 0.438783 0.451785 0.695368 0.468632 0.508739 0.603744 0.423383 0.693995 0.652928 0.438783 0.557975 0.450049 0.722475 0.560327 0.676762 0.809449 0.669393 0.452715 0.531987 0.451785 0.450049 0.435358 0.839259 0.223557 0.835785 0.611344 0.296438 0.585249 0.541966 0.695368 0.722475 0.839259 0.380239 0.36727 0.321142 0.258312 0.658781 0.67874 0.477779 0.468632 0.560327 0.223557 0.36727 0.0571881 0.41249 0.63065 0.253612 0.591025 0.522089 0.508739 0.676762 0.835785 0.321142 0.41249 0.483952 0.657467 0.327771 0.897202 0.293315 0.603744 0.809449 0.611344 0.258312 0.63065 0.657467 0.83782 この行列は、i番目の人とj番目の人が互いに社会的に接触する可能性を表しています。人が自分自身にウイルスを感染させることは意味がないため、中央の対角線を削除しましょう。 risk =: closeness - closeness * =i.ppl 0 0.433774 0.587923 0.860137 0.423383 0.669393 0.296438 0.658781 0.253612 0.327771 0.433774 0 0.412043 0.734478 0.693995 0.452715 0.585249 0.67874 0.591025 0.897202 0.587923 0.412043 0 0.336036 0.652928 0.531987 0.541966 0.477779 0.522089 0.293315 0.860137 0.734478 0.336036 0 0.438783 0.451785 0.695368 0.468632 0.508739 0.603744 0.423383 0.693995 0.652928 0.438783 0 0.450049 0.722475 0.560327 0.676762 0.809449 0.669393 0.452715 0.531987 0.451785 0.450049 0 0.839259 0.223557 0.835785 0.611344 0.296438 0.585249 0.541966 0.695368 0.722475 0.839259 0 0.36727 0.321142 0.258312 0.658781 0.67874 0.477779 0.468632 0.560327 0.223557 0.36727 0 0.41249 0.63065 0.253612 0.591025 0.522089 0.508739 0.676762 0.835785 0.321142 0.41249 0 0.657467 0.327771 0.897202 0.293315 0.603744 0.809449 0.611344 0.258312 0.63065 0.657467 0 さて、人々を作りましょう!0を死んだ人、1を感受性のある人、2を曝露状態の人、3を感染性状態の人とします。