いろいろなことを考察する

西浦氏が github で示している「42万死亡推計」のパラメータの誤り(改訂版)


私がネット上でしていることの まとめ は、こちらに。
https://sarkov28.hatenablog.com/entry/2022/03/29/160915



本エントリは、以前に書いた ブログエントリ の改訂版です。パラメータを修正する際の方針を一部で変更した結果、議論で出てくる数値の一部が約0.036%変化しました。また全体を改稿しました。今回の変更後も、「西浦氏が公開しているパラメータの一部に約2%の誤りがある」との論旨は変わりません。変更した内容や詳細は(11)に書きました。


(1)序論

西浦氏は、2020-04-15 の非公開の会合で、専門家個人として「42万死亡推計」を発表しました。
私が「42万死亡推計」に関して指摘している問題は、こちら(https://sarkov28.hatenablog.com/entry/2022/03/29/160915)の (2-1) にまとめてあります。

本エントリが扱うのは上記とは別の問題であり、「西浦氏が開示している「42万死亡推計」のパラメータの一部に約2%の誤りがある」という件です。

「42万死亡推計」が国民に大きな影響を与えることを西浦氏は発表前に理解していました [*1-1]。国民に大きな影響を与える計算であれば、それが専門家個人としての発表だったとしても、西浦氏は計算の詳細情報を「42万死亡推計」の発表と同時に開示すべきでした。計算根拠の説明として必要ですし、国民による検証を仰ぐためでもあります。

西浦氏は、「42万死亡推計」発表から一ヵ月半も経過してから、やっと計算の詳細を開示しました [*1-3]。「42万死亡推計」は、2020-03 月からの第1波での行動制限との関わりで示された [*1-4][*1-6] のですから、緊急事態宣言が全国で解除された 2020-05-25 の後になってようやく開示しても、時宜を逸していて不適切です。

西浦氏による詳細開示は時宜を逸していましたが、それでも事後的な検証の役には立つはずでした。ところがここでも問題が起きました。開示された情報(パラメータ)を使っても「42万死亡推計」が再現できないのです。 計算結果は約2%異なった値になります。

この2%の差が生じる原因は、西浦氏が開示したパラメータに誤りがあるからです。以下に示すのは、西浦氏のパラメータが間違っていると合理的に考えられる理由の説明です。この誤りが意図的なものならば極めて重大な問題です。私はこの誤りが過失によるものだとは思えません。

少なくとも西浦氏は、開示したパラメータで「42万死亡推計」を計算したことは一度もありません。一度でも計算すれば、約2%の差が生じることはすぐに分かります。西浦氏が計算したのなら、約2%結果が異なるのを知った上で開示したことになります。いずれにしても極めて不適切な情報開示の姿勢です。

私がこの件を最初に指摘したのは、2021-07-08 でした(ブログtwitter)。これ以降、この件について的を射た異論はありません。これは私の指摘に問題がないことの傍証にはなると思います。


[*1-1] 「もちろん、最悪の被害想定を語ることで、ざわざわすることは覚悟していました。」([*1-2] 第3章9)
[*1-2] 西浦博、川端裕人「理論疫学者・西浦博の挑戦」2020-12、中央公論新社
[*1-3] 紙媒体(2020-06-02 発売の、Newsweek 2020-06-09 号)と 2020-06-11 公開の電子記事 の「「8割おじさん」の数理モデルとその根拠」。どちらも github 資料 を参照している。
[*1-4] 「外出自粛に代表される行動制限によって、感染被害を軽減できることを市民に理解してもらうのが狙いという。」(2020-04-15 毎日 [*1-5])
[*1-5] 2020-04-15 毎日「新型コロナ 85万人が重篤に 「対策なしなら」厚労省班試算」念の為のアーカイブはこちら
[*1-6] 「何も対策をしなかったら、流行してこれくらいの規模の死亡者が出るという危機が目前に迫っていると、政権に腹を括ってもらうのが狙いでした。」(週刊文春 2020-04-30号)

(2)本エントリが示すこと

「西浦氏のパラメータが誤っていること」と「私の計算が正しいこと」の直接で詳細な根拠として、私はプログラム
https://colab.research.google.com/drive/1ZvY-HmOvh3AS7OnjJdFh0lBw_OfTX5cU?usp=sharing
を公開しています。本来はこのプログラムを見て頂くことで、ご説明は済んでいます。(このプログラムについては(9)の結論に少し説明を書きます。)しかしプログラミング言語である python をお使いにならない方へのご説明として、これはどうなのかと思います。

また、プログラムを見なくても、公開されている情報を検討したり、数値計算の途中で出てくる値を公開情報と照合すると、西浦氏のパラメータがおかしいと判断できる傍証があるので、それを以下でご説明します。

繰り返すようですが、本エントリで字数を使ってご説明しているのは傍証に過ぎません。説明の中核にあるのはプログラムですので、もし「傍証では足りない」とお考えであれば、プログラムの方をご参照下さい。

以下は傍証をどのようにご説明するのかです。

(3)では、本エントリの検討に用いる事項や数値を示します。(4)では、西浦氏の示しているパラメータに不自然な点があることを示します。これはパラメータのどこかに誤りがあることの傍証です。

(5)では、西浦氏のパラメータを使った数値計算の結果が、「42万」にならないことを示します。(6)では、私の数値計算と「42万死亡推計」を報じる記事の数値とを使って新しいパラメータを計算し、それが自然な値になることを示します。(4)で示した(西浦氏が示している)パラメータは不自然な値なのに、(6)で得る新しいパラメータは自然な値になります。これは新しいパラメータが正しいことの傍証です。

(7)では、西浦氏が示しているパラメータと新しいパラメータとを比較します。(8)では本エントリで得た新しいパラメータでの計算が「42万」になることを確認します。(9)では本エントリの結論を述べます。(10)で示すのは、「42万死亡推計」に関する、西浦氏への質問事項です。(11)では以前に示していた同主旨のエントリから本エントリへの変更点を説明します。

(3)本エントリで用いる数値など

「42万死亡推計」は、国民を3つの世代に分けて計算されました [*1-3]。3つの世代は、年齢で (0-14), (15-64), (65-) です。西浦氏は github 資料 でこの3世代をそれぞれ、c, a, e と書いています。(それぞれ、child, adult, elder の略だと思われます。)

3つの世代のうち、世代 c の扱いは他とは違います。github 資料 に I_c とあるように「世代 c にも感染者がいる」のですが、[*1-3] によれば「世代 c の重症者数はほぼゼロ、死亡者数はゼロ」というのが西浦氏の考えです。本エントリでは重症者数や死亡者数において世代 c のことを考慮しません。死亡者数を検討する上で支障がないからです。

本エントリでは、「42万死亡推計」に関して最も詳細だと思われる以下の数値を使います [*3-1] [*1-3]。死亡者数や重症者数は流行終了までの値です。

名称 出所
(3a) 基本再生産数  R_0 2.5 (略)
(3b) 世代 a の重症者数 20万1301人 注 [*3-1]
(3c) 世代 e の重症者数 65万2066人 注 [*3-1]
(3d) 全世代の重症者数 85万3367人 注 [*3-1]
(3e) 重症者死亡率 約49% 注 [*3-1]
(3f) 死亡者数 約41.8万人 注 [*3-1]
(3g) 世代 a の感染者死亡率 0.0015 注 [*1-3]
(3h) 世代 e の感染者死亡率 0.0100 注 [*1-3]

[表3-1] 本エントリで用いる「42万死亡推計」に関する数値

なお、西浦氏の示す数値の有効数字の取扱いには不適切なところがあります。表3-1 の基本再生産数  R_0 が 2.5 で有効数字2桁であるのに対し、(3b) では有効数字6桁であるなどです。本エントリは、正しい有効数字の扱いではなく、西浦氏の計算の検証が目的なので、可能な範囲で有効桁数の多い数値で議論します。


[*3-1] 2021-05 発刊の別冊 Newton。同様の記述は [*1-5] の 毎日記事 にもある。

(4)西浦氏が示している計算には不自然なパラメータが隠れている

西浦氏は、「42万死亡推計」において、2つの計算を示しています。「重症者数が出てくる計算」と「重症者数が出てこない計算」の2つです。この2つは同じ計算であるはずですが、同じ計算だとすると西浦氏は感染者重症化率で不自然な値のパラメータを使ったことになります。この件については、別エントリ で検討しました。

(5)西浦氏の github のパラメータを使った数値計算は「42万」にならない

西浦氏が github に示している SIR 方程式とパラメータを使って、私が作成したプログラム数値計算すると、以下の要領で全世代の死者数を計算することができます。有効数字は6桁としています。感染者総数は、「計算期間中に感染したことのある人の数」です。

計算方法 計算結果
(5a) github の SIR 方程式とパラメータ
による私の数値計算
世代 a の感染者総数
=67100300人
(5b) github の SIR 方程式とパラメータ
による私の数値計算
世代 e の感染者総数
=32603300人
(5c) 世代 a の
感染者総数(67100300人)
と、感染者死亡率(0.0015)
を掛算
世代 a の死亡者数
=100650人
(5d) 世代 a の
感染者総数(32603300人)
と、感染者死亡率(0.0100)
を掛算
世代 e の死亡者数
=326033人
(5e) 世代 a の死亡者数(100650人)
世代 e の死亡者数(326033人)
を合計
全体の死亡者数
=42.6683万人

[表5-1] 西浦氏の github のパラメータを使った「42万死亡推計」の計算

(5e)で得た全体の死亡者数「42.6683 万」は、どこで四捨五入しても「42万」や「41.8 万」になりません。ここには、約2%の差があります。( (42.6683 / 41.8) - 1 = 0.0208 = 2%

私の数値計算か、西浦氏のパラメータか、どちらかに誤りがあります。なお(4)に示したように、西浦氏の示している説明に誤りがないとすると不自然であることが分かっています。(4)で明らかになっている不自然さは、西浦氏のパラメータに誤りがあることの傍証になっています。

(6)私の数値計算と別冊 Newton 記事から得られる新しいパラメータは自然な値になる

(5)で数値計算した、世代 a, e の感染者総数と、別冊 Newton や毎日記事 [*1-5] の重症者数の値を使うと、(4)で不自然な値になった、世代 a, e の感染者重症化率を計算することができます。有効数字は6桁としています。感染者総数は、「計算期間中に感染したことのある人の数」です。

計算方法 計算結果
(6a) github のSIR 方程式とパラメータ
による私の数値計算
世代 a の
感染者総数
=67100300人
(6b) github のSIR 方程式とパラメータ
による私の数値計算
世代 e の
感染者総数
=32603300人
(6c) 表3-1
世代 a の重症者数(201301人) /
世代 a の感染者総数(67100300人)
世代 a の
感染者重症化率
=0.00300000
(6d) 表3-1
世代 e の重症者数(652066人) /
世代 e の感染者総数(32603300人)
世代 e の
感染者重症化率
=0.0200000

[表6-1] 私の数値計算と別冊 Newton 記事の重症者数から得られる感染者重症化率

私の数値計算を用いて新しく得たパラメータ、

  • 世代 a の感染者重症化率=0.00300000
  • 世代 e の感染者重症化率=0.0200000

は、有効数字6桁でキリのいい値になっています。偶然にゼロが連なっているのではなく、西浦氏が選んだ

  • 世代 a の感染者重症化率=0.003
  • 世代 e の感染者重症化率=0.02

という値を、私が本項で採用した方針で探り当てたのだと思われます(本項の方針=「私の数値計算による感染者総数」と「別冊 Newton の重症者数」から「感染者重症化率を計算する」という方針)。

(7)「西浦氏のパラメータ」と「新たなパラメータ」の比較

(4)の 別エントリ で得たパラメータは、西浦氏が示している情報が全て正しいとした場合のものでした。(6)で得たパラメータは、私の数値計算の感染者総数と記事の重症者数が正しいとした場合のものでした。この2つを比較します。有効数字6桁です。

別エントリ で計算
(重症者死亡率49%と
 github の感染者死亡率
 による)
(6)で計算
(私の数値計算の感染者総数と
 記事の重症者数
 による)
世代 a の
感染者重症化率
0.00306122 0.00300000
世代 e の
感染者重症化率
0.0204082 0.0200000

[表7-1] 西浦氏の github のパラメータによる感染者重症化率と、新しい感染者重症化率

  • 私の数値計算を使った値が、西浦氏の github のパラメータを使った値と2%ほど異なっていること、
  • 西浦氏の github のパラメータを使ったパラメータの値が不自然であること、
  • 私の数値計算の結果を使った新しいパラメータの値が自然であること、

が分かります。 新しいパラメータこそが、西浦氏が「42万死亡推計」を手元で計算した際に使ったパラメータです。

西浦氏が github に示していたのは感染者重症化率ではなく、感染者死亡率でした。これを新しいパラメータを使って計算すると、以下になります。

西浦氏の
github の値
(6)での
計算による値
世代 a の
感染者死亡率
0.0015 0.00147
世代 e の
感染者死亡率
0.0100 0.0098

[表7-2] 西浦氏の github の感染者死亡率と、新しい感染者死亡率

両者には、約2%の差があります。
 (0.0015 / 0.00147) - 1 = 0.0204 = 2%
 (0.0100 / 0.0098)  - 1 = 0.0204 = 2%

(5)では github のパラメータを使った「42万死亡推計」の計算が、2%ほどの差を生じていました。(5)における2%ほどの差は、ここに示した感染者死亡率の2%の差に起因していたことになります。(感染者死亡率が約2%変化すれば、死亡者数は約2%変化します。)

(8)新しいパラメータを使った数値計算は「42万」になる

新しいパラメータは、「私の数値計算の感染者総数」と「別冊 Newton の重症者数」を使って得たものです。この値を使えば死亡者数が「42万」や「41.8万」になることは分かっているので、本項は論理的には不要な蛇足であり、確認のための計算です。

計算方法 計算結果
(8a) github の SIR 方程式とパラメータ
による私の数値計算
世代 a の感染者総数
=67100300人
(8b) github の SIR 方程式とパラメータ
による私の数値計算
世代 e の感染者総数
=32603300人
(8c) 世代 a の感染者総数(67100300人)と、
世代 a の感染者重症化率(0.00300000)の掛算
世代 a の重症者数
=201301人
(8d) 世代 e の感染者総数(32603300人)と、
世代 e の感染者重症化率(0.0200000)の掛算
世代 e の重症者数
=652066人
(8e) 世代 a の重症者数(201301人)と、
世代 e の重症者数(652066人)
の足し算
全体の重症者数
=853367人
(8f) 全体の重症者数(853367人)と、
重症者死亡率(49%)の掛算
全体の死亡者数
=418150人

(8f)で得られた 418150人 を四捨五入すると、「42万」や「41.8万」になります。

(9)結論

西浦氏が githubNewsweek 2020-06-09 号記事([*1-3])で示したパラメータの一部に約2%の誤りがあり、計算結果の死亡者数も「42万」「41.8万」から約2%ほど異なった値になります。

「西浦氏が github など [*1-3] で示しているパラメータで計算すると、死亡者数が「42万」「41.8万」にならないこと」
「本エントリ(6)で新しく計算したパラメータで計算すると、死亡者数が「42万」「41.8万」になること」
を示すプログラム
https://colab.research.google.com/drive/1ZvY-HmOvh3AS7OnjJdFh0lBw_OfTX5cU?usp=sharing
を作成しました。(「新しいパラメータ」と書きましたが、これは西浦氏が「42万死亡推計」を計算した際に使ったはずのパラメータです。)

プログラムを検討しなくても、新しく計算したパラメータの方が正しいと判断できる傍証があるので、(6)に示しました。また (4)で示した別エントリ は、そもそも(私のプログラムによる数値計算と関係なく)西浦氏が示しているパラメータに不自然な点があることを示していて、これは西浦氏が示しているパラメータに誤りがあることの傍証になります。

(10)「42万死亡推計」に関する西浦氏への質問

「42万死亡推計」に関して、西浦氏に質問したい事項を列挙します。この中には、私が既に指摘してきた事項や、示してきた数値が含まれています。

  • (10a) github 資料 に示した「計算コード」での検算を行ったのか。
    (行っていれば、本エントリが指摘している2%のパラメータの誤りに西浦氏が気付かないはずはありません。)
  • (10b) 「計算コード」での計算は、何日目で計算を停止したのか。
    (西浦氏は、横軸100日目までのグラフを示しています。しかし「計算を停止した日付が100日」なのか「計算はもう少し長い期間行ったが、右の方はグラフとして示す意味に乏しいので100日までのグラフとしたのか」は明示されていません。私は念の為として計算停止を200日としています。)
  • (10c) 世代 a、世代 e の、感染者総数(計算期間中に感染したことのある人の数)は何人か。
    (この基本的な数値を西浦氏は明示していません。この関連で西浦氏が示しているのは、全世代での感染者総数の有効桁数2桁の概数だけです。重症者数を [*1-5] で有効数字6桁で示しているのですから、こちらも同程度の精度で、世代毎に示すべきです。この正確な値が分かると、私が 別エントリ で検討した不自然なパラメータの問題が明らかになります。)
  • (10d) 世代 a、世代 e の感染者重症化率は幾つか。世代 a、世代 e の感染者死亡率は github 資料によれば、0.0015、0.1000 だが、これは正しいのか。
    ((6)に示したように、それぞれ、0.003、0.02、0.00147、0.0098 であるはずです。)
  • (10e) 2020-03-19 に、新型コロナの基本再生産数  R_0 を、値が分からないとしながらも唯一の値として 2.5 を示した、その時点における理由は何か。
    (おそらく西浦氏に説明するに足る理由はありません。あるなら既に説明しているはずです。西浦氏は幾つか  R_0=2.5 の理由のような話をしていますが、それらは事後的な説明であり、2020-03-19 時点における理由の説明はありません。)
  • (10f) 2020年春の日本の新型コロナの  R_0 を値は現在も分からないのではないか。この点の確認。
  • (10g) 現在でも 2020年春の日本の新型コロナの  R_0 の値が分からないのなら、今後の感染症においても同様の問題が発生すると思われるが、この点の確認。
    (今後の感染症においても、基本再生産数の値が分からないまま感染症対策を行う可能性があります。分からないなら「 R_0 は分からない」と分かりやすく明示した上で計算などを示すべきです。)

質問したい事項はまだあるのですが、別のエントリで議論する事項に関係するのでそちらを書いてからにします。

(11) 以前に示していた同主旨のエントリからの変更点

以前に示していた同主旨のエントリ から本エントリへの変更点を説明します。

まず共通点を述べます。 本エントリの(6)[表6-1] は、以前のエントリの(4)の表1 と実質的に同等です。世代 a、世代 e の感染者重症化率が共通していることになります。
本エントリと以前のエントリで、別冊 Newton や毎日記事 [*3-1] における重症者数が正しいと考えていることも共通しています。

次に変化した点を述べます。 変化したのは、重症者死亡率(約49%)と、死亡者数(約41.8万人)についてです。

以前と今回の違いを表にします。

記事などの記述 以前のエントリ 今回のエントリ
重症者死亡率 約49% 48.9824% 49%
死亡者数 約41.8万人 418000人 418150人

[表11-1] 以前と今回のエントリにおける違い

この付近には、次の式

 (重症者数)×(重症者死亡率)=(死亡者数) ...... (式11-1)

が成立していて、この式に、
(重症者数)=853367人
(重症者死亡率)=約49%
(死亡者数)=約41.8万
の数値を入れると、

 853367×(49%)=(41.8万) ...... (式11-2)

となります。(式11-2) の左辺は 418150 なので、(式11-2) は厳密には成立しません。

以前の私は、この式の左辺が丁度 41.8万 になるように「約49%」の (重症者死亡率) の値を決定し、(重症者死亡率)=48.9824% としていました。しかしこの値は、(式11-2) を成立させるとしても、不自然です。本エントリで、西浦氏の感染者重症化率が不自然だと批判しているのと同様に不自然です。したがって不適切です。

よって今回私は、(式11-2) の左辺は  853367×(49%) のままとし、式の値は 418150 なので、右辺の41.8万にぴったり一致はしないが、右辺は本来は「約41.8万」なのだからぴったり一致しなくても問題はない、と考え方を変えました。

本エントリ冒頭に書いた「議論で出てくる数値の一部が約0.036%変化しました」は、以下を指しています。

重症者死亡率:
48.9824%から49%に変化。変化率は  (49/48.9824 - 1) × 100 = 0.036%
死亡者数:
418000人から、418150人に変化。変化率は  (418150 / 418000 - 1) × 100 = 0.036%

このように議論に出てくる数値の一部は約0.036%変化しましたが、以前と今回で論旨に変化はありません。

更新履歴

  • 2024-03-18
    公開。本エントリに関係する説明を twitter に書くかも知れません。書いたら冒頭付近にリンクを書いておきます。