fc2ブログ
 

Ham's Life 4186

安倍総理が言ってた「1か月後に8万人の感染者」は妥当か?

安倍総理が言ってた「1か月後に8万人の感染者」は妥当なのでしょうか?

そこで、これまで2週間予測でグラフを作ってきましたが、今回は1か月後まで予測してみます。
さすがに1か月後となると、今後の状況で大きく変わりうるので、あまりあてにはなりませんが・・・

感染者数推移(全国,4/9)

青の予測線に基づく、5/10までの感染者の合計を求めると、39134人(約4万人)となります。
青点線による予測の下限と上限は、それぞれ23785人、54483人となります。

先週までの私のグラフの予測値と実際の値を比較すると、グラフの予測値は現実より低めに出ています。
どちらかというと、上限値の方が近いぐらい。
となると、4-5万人というのがグラフから見えてくる値になります。

安倍総理(というか専門家会議の先生?)は、対策をしなかった場合を想定して数字を出していたと思うので、8万人は妥当だと思います。
というより、対策をしなかった場合を想定した数字としては少ない気がします。

もちろん、緊急事態宣言の効果が出るのは未だ先なので、今回のグラフはそれ以前の状況を反映したものです。
4月末あたりに大きく状況が好転していることを期待しましょう。



感染者数推移(東京,4/9)

東京都です。
3/23以降の自粛の効果が今週から出てきているわけですが、月曜火曜の値がイレギュラーなこともあり、もう少しデータを見たいですね。

スポンサーサイト



新型コロナウイルスの実行再生産数を計算してみる

新型コロナウイルスの感染者数を予測する
で感染者数のトレンドと2週間後の予測を出してみました。
この結果を利用して、実行再生産数を計算してみます。
実行再生産数とは、一人の感染者が何人に感染させたかを表す数値です。
1以上なら感染は拡大していき、1未満ならいずれ収束していくことになります。
実行再生産数を求める方法は、下記を使わせていただきました。
新型コロナウイルスの都道府県別の基本再生産数の推移を計算してみる
※上記サイトでは発症から検査確定までの期間(感染期間)に感染していると想定したモデルを使用していますが、潜伏期間中も感染はあると考え、その点のみ変更して利用しています。
潜伏期間も含めた方が、専門家会議で提示された資料の図と値の振れ幅が近かったので。
それでは東京都の結果です。
感染者数と実効再生産の推移(東京都)
実効再生産数(緑線)は感染者数そのものではなく、予測値(青線)の値から算出しました。
感染者数から直接算出すると、がたつきの多いグラフになり、傾向が読み取りづらかったためです。(下図のようになります)
実行再生産数は、13日(感染してから検査で確定するまでの期間)先までの感染者数から遡って割り出しています。そのため、現在から13日前から徐々に予測感染者数に基づいた値になっていくため、トレンドに相関した曲線になっていきます。
実効再生産補足

まず、感染者数についてですが、今日(4/2)の97人が効いて、感染者数の予測は悪化しています。下記は前回(3/31)に作成した図。
4/10の予測数は、前回は約110人、今回は約130人となっています。
感染者数推移(東京)
感染者数は増加傾向ですが、実効再生産数は1を若干上回る程度であり、自粛等の効果により、ある程度抑制されていると思います。
しかし、実効再生産数が1を下回らない限り、収束に向かうことはありません。
たとえ実効再生産数=1だったとしても、感染者は一定のペースで増え続けることになります。同じペースで回復していく人がいれば均衡は保たれるわけですが、感染してから入院するまでの期間より、入院から退院までの方が時間がかかるわけですから、入院患者は増える一方です。
専門家会議の先生が、「オーバーシュートの前に医療崩壊が起こる」と言ったのは、こういうことかな、と思います。

次に全国。
感染者数推移(全国)修正 
こちらは東京より希望が持てる感じですが、東京ほど地方では増えていないということであり、やはり各都市部や県で見た方が実態を捉えられるのかもしれません。(次回はそうしよう)
(4/5修正)
4/2(この記事作成当日)の件数が少なかったため、正しいグラフになっていませんでした。
当日のデータは集計結果が徐々に反映されるようなので、注意が必要ですね。
修正したグラフでは、東京と類似した結果となっています。



library(dplyr)
library(KFAS) 
setwd("E:/F/Statistics/Corona/Src")
#感染者数推定:2変量平滑化トレンドモデル
areaname = "東京都"
inf_cnt = 13 #感染してから確定するまでの期間(潜伏期間+発症期間)
predict_cnt = 30  #予測期間
y_scale=c(0,200)
if (areaname=="全国") y_scale=c(0,300)
rawdata <- read.csv("COVID-19.csv", fileEncoding = "UTF-8-BOM")
areadata <- rawdata %>% filter(受診都道府県==areaname)
if (nrow(areadata) == 0) areadata = rawdata
cntdata <- areadata %>% group_by(確定日YYYYMMDD, .drop=FALSE) %>% summarise(count = n())
colnames(cntdata) <- c("date","count")
cntdata[[1]] <- as.Date(cntdata[[1]])
cntdata <- cntdata %>% filter(date > "2020-02-06")
cntdata <- cntdata[order(cntdata$date),]
#最新値が0ならNaNにする
rcnt = length(cntdata$count)
if (cntdata$count[rcnt] == 0) cntdata$count[rcnt] = NA
#値のない日を挿入
dts = seq(min(cntdata$date), max(cntdata$date) + predict_cnt, "day")
dtframe = data.frame(date=dts)
cntdata <- left_join(dtframe, cntdata ,by="date")
Pobj <- ts(cntdata$count)
mod <- SSModel(Pobj ~ SSMtrend(2, Q = list(0, NA)), H = NA)
#fit_method = "SANN"
fit_method = "BFGS"
fit <- fitSSM(mod, numeric(2), method=fit_method)
kfs <- KFS(fit$model)
conf <- predict(fit$model, interval="confidence", level=0.95)
pre <- predict(fit$model, interval="prediction", level=0.95)
logLik <- kfs$logLik - sum(kfs$Finf>0) * log(2*pi)/2
AIC <- -2*logLik + 2*( 2 + 2 )
#図の描画
par(oma = c(0, 0, 0, 2))
par(xaxt="n")
e = length(Pobj) - predict_cnt/2
showdts = dts[1:e]
#plot(showdts,Pobj[1:e],type="l",col="red",lwd=2,xlab="",ylab=paste("1日当たり新規感染者数(",areaname,")"),ylim=c(0,200))
barplot(Pobj[1:e],col="orange",xlab="",ylab=paste("1日当たり新規感染者数(",areaname,")"),ylim=y_scale,axes=FALSE)
par(new=T)
plot(showdts,pre[,1][1:e],type="l",col="blue",lwd=2,xlab="",ylab="",ylim=y_scale, yaxs="i")
#lines(showdts,pre[,1][1:e],col="blue",lwd=2)
s = length(Pobj) - predict_cnt
lines(showdts[s:e],pre[s:e,2],col="blue",lty=2)
lines(showdts[s:e],pre[s:e,3],col="blue",lty=2)
par(xaxt = "s")
axis.Date(1, at=seq(min(showdts), max(showdts), "7 day"), format="%m/%d", tck=1.0,lty="dotted")
axis(side=2,tck=1.0,lty="dotted")
#実効再生産数
ee = length(Pobj)
cntdata$count[(s+1):ee] = pre[(s+1):ee,1] #実値と予測値を結合
R0obj = lapply(1:(ee-inf_cnt-1), function(i) {
    inf_sum = sum(pre[(i+1):(i+1+inf_cnt),1], na.rm=TRUE)
    if (inf_sum == 0) return(NA)
    return(inf_cnt * pre[i+inf_cnt,1] / inf_sum)
  }
)
#図の追加描画
par(new=T)
plot(showdts,R0obj[1:e],type="l",col="forestgreen",lwd=2,xlab="",ylab="",ylim=c(0,4), yaxs="i",axes=FALSE)
abline(h=1, col='red', lwd=1, lty=2)
mtext("実効再生産数",side = 4, line = 3)  
axis(4)
legend("topleft",legend = c("新規感染者数","トレンド(予測)","実効再生産数(予測)"),lwd=3,col=c("orange","blue","forestgreen"))

「新型コロナウイルス感染者数マップ」

新型コロナウイルスの感染者数を予測する

コロナでも営業中の観光施設マップ でやや緩んだ文章を書いてしまいました。
でも、当時の世間一般の感覚もそんな感じだったはず。つくづく自分は一般人だな・・・

反省、というわけではありませんが、一応エンジニアなので、もう少し理詰めで考えていきたいと思います。
また、昨秋から冬にかけて、統計数理研究所の リーディングDAT のコースを受けてきたので、生きた題材として、「新型コロナウイルスの将来予測」にトライしてみます。

※統計についてはモデルも作れないアマチュアです。解析結果を鵜呑みにせず、疑いの目でご覧ください。

(専門家の人たちは今回のコロナ禍についてあまり将来予測を出してくれませんが、世間への影響を気にしているのでしょうかね・・・?)



状態空間モデルの時系列解析により、現在(3月31日)までの感染者数の推移から、2週間先までの予測を行います。
解析にはRのKFASライブラリを使用し、平滑化トレンドモデルを採用します。
本来は適切なモデルの選択と評価に時間をかけるべきでしょうけど、感染者数はどう見たって増加トレンドですよね!
今回は増加の傾向だけ知りたいわけです。

データは、ジャッグジャパン株式会社様により公開されている「新型コロナウイルス感染者数マップ」について を使わせて頂きました。
こちらが公開されているページです。
リアルタイム性に優れた労作ですが・・・正直、東洋経済オンラインのページの方が見やすい・・・
データを使わせてもらったのに失礼な言い草ですが・・・

先に結果から。
現在最もリスクが高いと思われる、東京都の感染者数の推移は下図になります。
感染者数推移(東京) 
赤線が公表された感染者数の推移、青線がトレンド(予測)線です。
2週間後には毎日120~130人の感染者が発生する、という予測になります。
青破線は予測の幅(95%信頼区間)で、60人~200人ぐらいの幅があります。

感覚としては、ちょっと少ない気がします。
これはおそらく3月30日の感染者数が低いことに引きづられています。
きっと誰もが感じていることですが、公表されたデータには妙に感染者数が少ない日があり、検査する人も休みが必要だろう、とか、あるいは追跡調査する人にも休みが必要だろう、とか、色々想像してしまいます。
このイレギュラーを織り込んだモデルに修正できれば、予測の正確性が上がると思いますが、今後の宿題です。



Rのソースです。
  1. library(dplyr)
  2. library(KFAS) 
  3. setwd("E:/F/Statistics/Corona/Src")
  4. #感染者数推定:2変量平滑化トレンドモデル
  5. areaname = "東京都"
  6. predate_cnt = 14  #予測期間
  7. rawdata <- read.csv("COVID-19.csv", fileEncoding = "UTF-8-BOM")
  8. areadata <- rawdata %>% filter(受診都道府県==areaname)
  9. cntdata <- areadata %>% group_by(確定日YYYYMMDD, .drop=FALSE) %>% summarise(count = n())
  10. colnames(cntdata) <- c("date","count")
  11. cntdata[[1]] <- as.Date(cntdata[[1]])
  12. cntdata <- cntdata %>% filter(date > "2020-02-06")
  13. cntdata <- cntdata[order(cntdata$date),]
  14. #最新値が0ならNaNにする
  15. rcnt = length(cntdata$count)
  16. if (cntdata$count[rcnt] == 0) cntdata$count[rcnt] = NA
  17. #値のない日を挿入
  18. dts = seq(min(cntdata$date), max(cntdata$date) + predate_cnt, "day")
  19. dtframe = data.frame(date=dts)
  20. cntdata <- left_join(dtframe, cntdata ,by="date")
  21. Pobj <- ts(cntdata$count)
  22. mod <- SSModel(Pobj ~ SSMtrend(2, Q = list(0, NA)), H = NA)
  23. fit_method = "BFGS"
  24. fit <- fitSSM(mod, numeric(2), method=fit_method)
  25. kfs <- KFS(fit$model)
  26. conf <- predict(fit$model, interval="confidence", level=0.95)
  27. pre <- predict(fit$model, interval="prediction", level=0.95)
  28. #図の描画
  29. par(xaxt="n")
  30. plot(dts,Pobj,type="l",col="red",lwd=2,xlab="",ylab=paste("感染者数(",areaname,")"),ylim=c(0,200))
  31. lines(dts,pre[,1],col="blue",lwd=2)
  32. e = length(Pobj)
  33. s = e - predate_cnt
  34. lines(dts[s:e],pre[s:e,2],col="blue",lty=2)
  35. lines(dts[s:e],pre[s:e,3],col="blue",lty=2)
  36. par(xaxt = "s")
  37. axis.Date(1, at=seq(min(dts), max(dts), "7 day"), format="%m/%d", tck=1.0,lty="dotted")
  38. axis(side=2,tck=1.0,lty="dotted")
  39. legend("topleft",legend = c("感染者数","トレンド(予測)"),lwd=2,col=c("red","blue"))



全国の感染者数の推移は下図になります。
感染者数推移(全国)

コロナでも営業中の観光施設マップ

感覚としては、コロナウイルスは予防接種もワクチンもないインフルエンザという印象です。
けっこう怖いですが、かつてのペストやコレラよりはだいぶマシかと思います。
人によってとらえ方は様々でしょうが、たまには恐る恐るお出かけしても良いのではないでしょうか?
大人より子供がまいってしまうよ。

そんなわけで、衛生に配慮しつつ営業している(ようにHPの記述からは思えた)観光施設をマップ化してみました。
関東在住なので、そこが多くなってしまいました。
当然、抜けている所も多いので、暇を見つけて追加していきたいと思います。
気が向いた方は勝手に追加していただいてもいいのですが、子供も行ける所にしていただけないか、と思います。

コロナでも営業中の観光施設マップ(https://www.mapcat.info/?search=コロナ営業中施設)

MapCat.info - 地図にメモするアプリ (続き4)

(前回の続き)

時間が過ぎ、身辺が落ち着いてくると、放置したままのプロジェクトを何とかしなければ、という思いが戻ってきました。
2回もチームを頓挫させたので、自分には他人を巻き込む力はないのだという割り切りもできました。
一人で0から考え直すことにしました。。。

。。。そもそも、災害発生時を前提としたサービスを作っても、災害時に使ってもらえる保証はありません。
機能は十分でも、被災者に認知してもらうのは、平時のマーケティングより難しいはずです。

実は東日本大震災以降、自治体や大学、研究室などで災害発生時の情報共有を目的としたシステムがたくさん作られています(ということを仕事柄知っています)。
しかし、その後発生した熊本、北海道、大阪などの地震で、それらがどのように活用されたのか、伝わってきません。
推測ですが、必要な人に認知されないまま、使われずじまいなのではないか、と思います。
だって、普段使わない、災害時にだけ便利なシステムの名前なんて、誰も覚えていられないですよね。そして普段使わないのですから、Googleの検索上位に来ることもありません。

結局、必要なものはTwitterやFacebookのように日常的に使われていて、災害時にも利用できるようなサービスなのではないか。。。そうして思いついたのが『地図版Twitter』です。
地図上にメッセージを投稿・共有するだけのシンプルなWEBサービスです。
これが日常的に使われるサービスになれば、災害時にもそのまま使われるだろう。

コンセプトに引っかかるものがあったようで、この企画は平成27年度総務省主催の「異能vation事業」の第一次審査を通過しました。
まあ、この事業自体、ネタっぽくてちょっと現実感の薄いものですが、あのスプツニ子!さんや、元Lineの森川 亮さんと並んで通過し、全員2次審査で落ちているところに妙な感慨を覚えます。
面接内容は口外しない決まりだそうですが、一つだけ
「このサービスをどのように広めるのか」
という質問に
「(先のことは)わからない」
と答えてしまったのが、最大の敗因だと思っています。
今にして思えば、やはり審査員の方は鋭く、今の苦境を予想されていたような気がします。

しかし、その時の私は、ダメで元々が一次審査だけでも通ったので、気落ちすることなく開発を続けたのでした。
開発は順調・・・には進みませんでした。
原因はフレームワークの選択ミスでした。

MapCat.info - 地図にメモするアプリ (続き3)