【リニューアル】感度特異度シミュレータ改め、検査性能シミュレーター

以前、感度や特異度の数値を入力して各指標を視覚的に把握できるように、シミュレーターを作りました↓

interdisciplinary.hateblo.jp

上の記事で紹介したのは8年以上前に作った当初のもので、それから何回かリニューアルしてきましたが、このたび、大幅なリニューアルをおこないました↓

screening.iaigiri.com

リニューアルにあたり、感度特異度シミュレータから検査性能シミュレーターに名前を変更しました。

リニューアルしたと言っても、見た目の印象を変えたり中身のコードを一新したりしたもので、基本的な使いかたは、最初に作ったバージョンからそれほど違っていません。

改修のきっかけについて。
元々これを作ったのは、検査の性能を示す色々の指標で結構解りにくいものがあり、それの理解を助ける目的でした。自分で簡単な数値を入れて傾向を直感的に理解しやすくするためでしたから、表現できる桁数も少ないものでした。ところが、実際的な問題として、がん検診に用いられる検査が保有割合10,000分の1以下を対象にしていたり、新型コロナウイルス感染症に対する検査のように、超大規模に実施し、特異度がとんでも無く高そうなものを検討する情況を考える必要が出てきました。そこで、そういう情況も設定してシミュレートできるようにした、という次第です。

ここから、簡単な説明です。

f:id:ublftbo:20211228221511g:plain
各指標の入力

↑まず基本操作。各指標の入力です。入力の最大値という欄があります。ここの数値を基準にして、

  • 感度
  • 特異度
  • 保有割合

これらの指標を入力します。たとえば、感度入力欄(初期値5,000となっている左上の欄)に9,999と入れれば、感度は99.99%となる寸法です(9,999/10,000だから)。

f:id:ublftbo:20211228221451g:plain
入力最大値の変更

↑入力できる最大値を変更出来ます。これは、設定する指標の細かさ(小数点以下の桁数)を決める所です。99.9%までの桁数で良ければ最大値は1,000で充分ですし、99.999%の桁数が欲しければ、最大値に100,000を入力します。

f:id:ublftbo:20211228221542g:plain
総人口の表示

↑このツールは、まず例数を出してそこから指標を計算するという仕組みです。つまり、入力最大値の2乗を総人口として、それを基準にしています。欲しい桁数を大きくすれば、それに応じて総人口も増えて行きます。やろうと思えば総人口1垓人とか設定出来ますが(性能99.9999999%)、実際的な意味は無いですね。あまり増やすとJavaScriptの限界が来ます。いずれにしてもこういうツールは、あくまで目安とお考えください。

f:id:ublftbo:20211228232051g:plain
スライダー操作

↑左パネルは、検査結果4つ、正(誤)陽(陰)性の構成比をグラフィカルに表現しています。付近に備えてあるスライダーで直感的に変更出来ます。タッチデバイスだとちょっと微妙な操作感ですが、容赦ください。

ここは、このツールの目玉的機能です。計算ツールは色々ありますが、こういうのを実装しているのはそんなに無いのではないかと思います。

f:id:ublftbo:20211228221808g:plain
指標のハイライト

↑右上パネルに、各指標の数値が表示されます。それぞれの指標部分をクリックすれば、関連する部分がハイライトされます。たとえば陰性適中度であれば、誤陰性と正陰性のタイルがハイライトされます。

f:id:ublftbo:20211228221642g:plain
分子部分タイルの点滅

↑タイルでハイライトされるのは、割合の分母の部分。点滅するのは分子にあたる部分です。特異度であれば、正陰性タイルが点滅します。

f:id:ublftbo:20211228221727g:plain
用語の説明

↑各指標をハイライト表示させると、パネル下部に用語説明が表示されます。マウスオーバーで簡易の説明が出ます。

f:id:ublftbo:20211228221713g:plain
保有保有テキストの変更

保有と非保有を表現するテキストを変更出来ます。

前は、デフォルト表示として、保有マスクする人の顔😷で表したのですが、これを菌のようなものに変更しました。マスクだと、症状があるのを連想させますが、検査は必ずしも有症状者に限定されませんので、症状が無くても有している原因的なものとして、病原体を想起させるキャラクターにしました。

f:id:ublftbo:20211228221611g:plain
日本語の命数表記

↑桁数が多くなると、どのくらいの規模なのか直観的によく解らなくなりますので、日本語の命数表記も併せて表示しています。たぶん、10,000,000,000人と書くより100億人と書いたほうが、規模を浮かべやすいと思いますので。

こんな感じです。ツールとしてはシンプルなので、ちょっと触って慣れれば簡単だと思います。たとえば、検査性能の数値を目にして、じゃあそれを元にして他の指標を設定してみたらどうなるだろう、といったシミュレーションなどにお使いください。誤り等があれば、指摘頂ければ幸いです。