- ベストアンサー
医学統計解析について
初めまして、統計解析の手法で分からないところがあります。ある検査の値(仮にA)から、一定以上の値なら悪性、以下なら良性となる指標を求めたいです。この場合は、2x2クロス集計表でフィッシャーの直接確率計算法でAを1回ずつ指定して計算していくしかないのでしょうか。何か他にも良い方法がありそうな気がするのですが・・・。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
No.2に付けられたコメントに関してです。 > ・true positive(グラフで言うY軸)の最大値が1までいかないのは問題ないのでしょうか。 問題ないです。 $A$2:$A$1000>=A2 とやっているから、与えたデータのうちの少なくとも1個はこの条件に引っかかることになります。これが100%のところにプロットが生じない理由です。 > ・実際のROC曲線から、最も適したカットオフ値を求める手法はあるのでようか。 ROC曲線だけで決める事はできません。「最も適した」という判断の基準になる評価方法が不明だからです。 逆に、評価を計算する評価式を作りさえすれば、「その評価式の値を最大にするようなROC曲線上の点」は計算だけで決定できます。たとえば、 y = (true positiveの確率) x = (false positiveの確率) として、 F(x,y) = -A x + B y (A,B>0) という評価式を作ったとします。そうしたら、 F(x,y)=C という方程式を考えて、ROC曲線のグラフと同じグラフ上に描くと、右上がりの直線になります。この直線がROC曲線と接するところが、最大のCですから、その接点を診断の基準にすれば良いことになります。 F(x,y)が一次式でない場合には、F(x,y)=Cは曲線になりますが、話は同じ事です。 さて、 F(x,y) = -A x + B y (A,B>0) という形をとるにしても、A, Bを、検査対象者に占める有病率だとか、false positiveの場合のコストとfalse negativeの場合のコストなどから計算する方法は「どう評価するか」という思想そのものを反映するわけで、当然ながら公式というものはありません。 例えば、この検査は軽い症状を訴える人に使うスクリーニングであって、もしスクリーニングに引っかかったら診断能の高い精密検査(特殊な設備が要る。たとえばMRI検査)を行うものとしましょう。また、スクリーニングで見逃してしまっても、すぐに致命的な結果にはならない疾患が対象だとしましょう。こういう場合には、false positiveが大きいと精密検査を受ける人数が増えてしまって捌ききれませんから、精密検査用設備の稼働率が丁度100%になるように閾値を設定するのが、病院経営上の合理的判断かも知れません。 また、この検査は致命的な疾患を検出するための検査であって、もしこの検査で見逃すと近いうちに死亡したり、治療に莫大なコストが掛かる事態になるようなものである場合、たとえfalse positiveが多くなっても、true positiveを高くすることが重要です。しかし、検査を受けた全員がpositiveになってしまう検査では検査の意味がありません。(だからこの検査はしない、という判断もあり得ます。検査をするなら、)true positiveが(100-α)%であって、なおかつfalse positiveができるだけ少ないような、そういう閾値を選ぶ必要があります。αをどう設定するかが問題です。「検査で見逃したせいで大変なことになった」という事態に掛かるコスト(コストと言ってもお金だけじゃないでしょう)を勘案しなくてはなりません。
その他の回答 (3)
- stomachman
- ベストアンサー率57% (1014/1775)
Excelでやるお積もりならば、 以下では症例数が999例未満(例えば数十例とか)の場合について書いています。Excelは、数式バーが表示される状態にしておくこと。 (1) Excelのセル A1に「検査値」、B1に「診断」と書き込みます。 (2) セルA2から下に検査値のデータを、B2から下に診断(Positiveなら1, Negativeなら 0)を入力します。たとえば130行目までデータが入ったとしましょう。(つまり症例数129) (3) セルC1に「総数」と書き込みます。 (4) C2に =COUNT(A2:A1000)と入力すると、A2~A1000の中でデータが入っているセルの数、つまり総数Nが表示されるはず。 (5) セルC3に「有病数」と書き込みます。 (6) C4に =SUM(B2:B1000) と入力すると、B2~B1000の中で、診断が1であるものの個数、つまり有病数Mが表示されるはず。 (7)セルD1に「F P」(false positive)と書き込みます。 (8) D2に =SUM(IF($A$2:$A$1000>=A2,1,0)*(1-$B$2:$B$1000))/($C$2-$C$4) と入力しますが、まだEnterキーを押しては駄目。今入力した式が数式バーに表示されていますから、その式の上で一度クリックすると、式のどこかにキャレット(文字を入力する場所を示すカーソル)が表示されます。この状態で、 [CONTROL]キーを押しながら[Enter]キーを押す(Macintoshなら リンゴマークのキーを押しながら[Enter]を押す)。そうすると、自動的に式が"{ "と "}"で囲まれて表示されます。 (9) セルE1に「T P」(true positive)と書き込みます。 (10) E2に =SUM(IF($A$2:$A$51>A2,1,0)*$B$2:$B$51)/$C$4 と入力しますが、まだEnterキーを押しては駄目。(8)でやったのと同じようにして、自動的に式が"{ "と "}"で囲まれるようにします。 (11) セルD2からE130の範囲をマウスで選択し、メニューから「編集」→「フィル」→「下方向へコピー」を選択します。 これで計算は完了です。 (12) 結果をグラフにします。セルD1からE130の範囲をマウスで選択し、メニューから「挿入」→「グラフ…」を選択。グラフの形式は「散布図」で、点と点を線で結ばない形式を選びます。 以上。
お礼
返事遅くなり申し訳ありません。ご丁寧にどうも有り難うございました。 追加でお聞きしてもよろしいでしょうか? ・true positive(グラフで言うY軸)の最大値が1までいかないのは問題ないのでしょうか。 ・実際のROC曲線から、最も適したカットオフ値を求める手法はあるのでようか。
- stomachman
- ベストアンサー率57% (1014/1775)
ROC曲線はExcelでも、ちょっとがんばれば作れますよ。 検査の測定値を x[i], 「正しい」診断を y[i] (yは有病なら1, さもなくば0)とし、総数をN (だからi=1,2,…,N)、有病数をMとします。(有病率=M/N) 閾値をx[i]に設定したときの タテ軸の値:True Positive (つまり、x[j]≧x[i]かつy[j]=1であもの)の数 ÷ M と ヨコ軸の値:False Positive (つまり、x[j]≧[i]かつy[i]=0であもの)の数 ÷ (N-M) をi=1,2,…,Nについて計算してプロットしたのがROC曲線です。(あ、タテヨコが逆かも知れません) もちろん、False Positiveを減らす(True Positiveを増やす)ことと、False Negativeを減らす(True Negativeを増やす)事は両立しません。縦軸のTrue Positiveの値を大きくしたければ、横軸の値を大きくしなくてはならない。つまりFalse Positiveが大きくなるような(怪しいものはPositiveとするような)閾値を使うことになる、というのがこのグラフの意味するところです。 だから、ROC曲線は検査の診断能力を測るための曲線です。 もし曲線がグラフの左上隅(0,1)にへばりついたら検査法は完璧であり、 もし(0,0)と(1,1)を結ぶ直線になったら、その検査は全く検査になっていない(さいころを投げて診断するのと同じ診断能しかない) ということです。 もちろん、現実にはその中間です。 ROC曲線はまた、閾値の「選択肢」を眺めるための曲線でもあります。 True Positiveを高める事を重視するか、あるいはFalse Positiveを減らすことを重視するかは検査の目的や疾患の性格によるわけで、その判断に基づいて曲線上の1点を選択する。 そうすれば、その点に対応する閾値 x[i]が決定します。
お礼
大変参考になりました。何かできそうな気がして、道が開けました。ありがとうございました。
- stomachman
- ベストアンサー率57% (1014/1775)
それはROC解析(ROC曲線)を使う場面だと思いますよ。ROC false positive などで検索すれば資料が見つかるでしょう。
お礼
ありがとうございます。手元のソフト(statview)ではROC解析ができないようですが、何かおすすめの統計ソフトはあるでようか?SPSSとかは可能のようですが、安価で使い勝手がいいものはないでしょうか?
お礼
どうもありがとうございました。