Md 鑑別診断と尤度

提供: StatGenetKyotoU
移動: 案内検索
鑑別診断と尤度
カテゴリ 名称 説明
医学生物学トピック 感度・特異度・PPV・NPV、ROCカーブ、鑑別診断、判断分岐、個人鑑定
数学トピック 確率・尤度・事前確率・事後確率・
R関数・Rスキル density(),ecdf(),approxfun(),ROCRパッケージ 密度関数、累積密度関数を推定する。関数を近似する

確率と尤度

確率

  • 確率的に何かが起きるとき
    • 「何か」がある
    • 「何か」は「こう」だったり、「ああ」だったりする
    • 言い換えると「絶対無二のただ一つ」なわけではない
    • 複数の「値」を取りえる、とも言い換えられる
    • 「絶対無二」ではない値の集まりを分類する
      • 「二つ」:「これ」か「あれ」か。0、1。\{x|x=0,1\}
      • 「三つ以上の数えられる値」:1,2,3・・・\{x|x\in {\mathbf  {Z}},x>0\}
      • 「連続した値の範囲」:\{x|a\leq x<b\}
    • 「値」の取りうる範囲、台を\Omega とする
  • 確率分布
    • 取りうる「値」の取りやすさをP(x)で表すと、\Omega のうちのどれかの「値」を必ずとって、それ以外ではないから、次のように定めることができて、このP(x)を確率分布と言う
    • \int _{{x\in \Omega }}P(x)dx=1;P(x)\geq 0

尤度

  • 複数の「起き方~確率分布」があるとき
    • 「何か」がある
    • 「何か」は「値」を取る
    • 「何か」には「確率分布」がある
    • 「何か」には複数の「確率分布」があるとする
      • 2つの確率分布がある場合には
        • P_{1}(x),P_{2}(x)
        • \int _{{x\in \Omega }}P_{1}(x)dx=1;P_{1}(x)\geq 0
        • \int _{{x\in \Omega }}P_{2}(x)dx=1;P_{2}(x)\geq 0
      • 確率分布が集合で表される場合には、{\mathbf  {\Pi }}=\{P_{t}(x)\}
        • {\mathbf  {\Pi }}の要素数は2つかもしれないし、3つかもしれないし、連続パラメタで表現されて、無限にあるかもしれない
  • 確率を観察値から見る~尤度
    • ある値sが確率分布P_{t}(x)から得られるときの確率P_{t}(x=s)は、ある値sが観察されたときの確率分布P_{t}(x)(という仮説)の尤度とも呼ばれる
    • {\mathbf  {\Pi }}全体について、x=sのときの尤度を足し合わせると\int _{{P_{t}\in {\mathbf  {\Pi }}}}P_{t}(x=s)dtことによって、尤度の値を標準化すれば、{\frac  {P_{t}(x)}{\int _{{P_{t}\in {\mathbf  {\Pi }}}}P_{t}(x=s)dt}}は、ある値sの観察におけるP_{t}(x)という確率分布(という仮説)が、どのくらい尤もらしいかが数値で表現できる

情報を使って判断に活かす~その例をいくつか~

観察値から仮説の尤もらしさを判断する

    • 前節で観察値から、仮説の尤もらしさ(尤度)を計算する方法について述べた
    • いくつかの例を挙げて尤度の計算に慣れることにする

2x2表

    • いわゆる検査学的には
      • 感度:a/(a+b)
      • 特異度:d/(c+d)
      • PPV:a/(a+c)
      • NPV:d/(b+d)
疾患の有無 テスト(+) テスト(-)
D(+) a b a+b
D(-) c d c+d
a+c b+d a+b+c+d
    • 確率・尤度的には
疾患の有無 テスト(+) テスト(-)
D(+) a b=1-a 1
D(-) c d=1-c 1
a+c b+d a+1-a+c+1-c=2
      • 確率
        • 「病気である」という仮説において、テスト+の確率は:a/(a+b)=a
        • 「病気である」という仮説において、テスト-の確率は:b/(a+b)=1-a
        • 「病気でない」という仮説において、テスト+の確率は:c/(c+d)=c
        • 「病気でない」という仮説において、テスト-の確率は:d/(c+d)=1-c
      • 尤度
        • テスト+のときの「病気である」という仮説の尤度は:a/(a+c)
        • テスト+のときの「病気でない」という仮説の尤度は:c/(a+c)
        • テスト-のときの「病気である」という仮説の尤度は:b/(b+d)=(1-a)/((1-a)+(1-c))
        • テスト-のときの「病気でない」という仮説の尤度は:d/(b+d)=(1-c)/((1-a)+(1-c))
    • これらの関係
      • 感度…確率(D(+),テスト(+))
      • 特異度…確率(D(-),テスト(-))
      • PPV…尤度(テスト(+),D(+))
      • NPV…尤度(テスト(-),D(-))
      • 確率(D(+),テスト(+))/確率(D(-),テスト(+))=尤度(テスト(+),D(+))/尤度(テスト(+),D(-))
      • 確率(D(+),テスト(-))/確率(D(-),テスト(-))=尤度(テスト(+),D(+))/尤度(テスト(+),D(-))
  • テストを実施して疾患の有無について判断をする
    • テスト前に疾患ありなしD(+),D(-)をp:qであると考えていたとする(プレテストプロバビリティがp/(p+q),q/(p+q)と考えていた)
    • テスト実施後には、pa:qb(ポストテストプロバビリティがpa/(pa+qb),qb/(pa+qb))と考える

例1 決定的な遺伝因子

  • ある遺伝子変異が常染色体優性遺伝形式で浸透率1、フェノコピー率0の場合
    • 感度・特異度100%な変異検出テストを考える
    • 浸透率1から、c=0
    • フェノコピー率0から、b=0
疾患の有無 テスト(+) テスト(-)
D(+) a 0 a
D(-) 0 d d
a d a+d
    • 確率・尤度的には
疾患の有無 テスト(+) テスト(-)
D(+) a=1 0 1
D(-) 0 d=1 1
a d 2
  • 確率変数、その値、仮説空間
    • 「何か」は変異のありなし
    • 「何か」の値は、+か-(1か0)
    • 「仮説」は2つ
  • 確率分布
    • 仮説D(+)での確率分布:P_{{D(+)}}(x)=\{1;x=1,0;x=0\}
    • 仮説D(-)での確率分布:P_{{D(-)}}(x)=\{0;x=1,1;x=0\}
  • 変異のありなしから、病気の有り無しについて判断する
    • 変異ありのとき、P_{{D(+)}}(x=1)=1P_{{D(-)}}(x=1)=0とを比較して、D(+)とD(-)とのどちらが尤もらしいかを判断する
    • もちろんD(+)がD(-)より無限大倍、尤もらしい

例2 複数の0/1項目を組み合わせた診断基準

-こちらに、単純化した場合の説明とRのソースを掲載してある

例3 観察とは間接的であること

  • 間接的な観察ということを考える
    • ある個体はある因子(点突然変異など)を持つと、あるフェノタイプ(病気など)を発現しやすくなるという
    • 点突然変異の保有を検出するテストがあるという
  • 確率的に起きる「何か」が2つある
    • あるフェノタイプを示すこと(D(+),D(-))
    • あるテストで陽性を示すこと(T(+),T(-))
  • 因子の有無も変数で表す(M(+),M(-))
フェノタイプの有無 M(+) M(-)
D(+) a b a+b
D(-) 1-a 1-b 2-(a+b)
1 1 2
テストの陽性陰性 M(+) M(-)
T(+) a' b ' a'+b'
T(-) 1-a' 1-b' 2-(a'+b')
1 1 2
  • 確率変数、その値、仮説空間
    • 「仮説」は2つ。変異のありなし
    • 「仮説」の値は、+か-(1か0)
    • 確率変数は2種類
      • 疾患とテスト
      • いずれも、値は、+か-(1か0)
  • 確率分布
    • 仮説M(+)でのDの確率分布:P_{{M(+)}}(x)=\{a;x=1,1-a;x=0\}
    • 仮説M(-)でのDの確率分布:P_{{M(-)}}(x)=\{b;x=1,1-b;x=0\}
    • 仮説M(+)でのTの確率分布:Q_{{M(+)}}(x)=\{a';x=1,1-a';x=0\}
    • 仮説M(-)でのTの確率分布:Q_{{M(-)}}(x)=\{b';x=1,1-b';x=0\}
  • テスト結果から、病気の有り無しについて判断する
    • テスト陽性と報告されたとき、Q_{{M(+)}}(x=1)=a'Q_{{M(-)}}(x=1)=b'とを比較して、変異の有無に関しての情報を得る
    • テスト結果を知る前のM(+),M(-)の確率(プレテスト確率、事前確率)がPre(M(+))=a'',Pre(M(-))=b''=1-a''=1-Pre(M(+))とすれば、テスト後の確率は
      • Post(M(+))={\frac  {a''a'}{a''a'+b''b'}}
      • Post(M(-))={\frac  {b''b'}{a''a'+b''b'}}となる
    • ここで、P_{{M(+)}}(x)=\{a;x=1,1-a;x=0\},P_{{M(-)}}(x)=\{b;x=1,1-b;x=0\}を用いて、テスト後のD(+),D(-)の確率の計算はできて
      • Post(D(+))=Post(M(+))\times a + Post(M(-))\times b ={\frac  {aa'a''+bb'b''}{a'a''+b'b''}}
      • Post(D(-))=Post(M(+))\times (1-a) + Post(M(-))\times (1-b)={\frac  {(1-a)a'a''(1-b)b'b''}{a'a''+b'b''}}
    • これは、「真の疾患判定テスト」があったとしたら、そのテストが陽性・陰性になる確率。また、「真の疾患」のありなしの尤度。

例4 量的検査値を陽性・陰性に分ける、量のまま使う?

  • ある量的値を取る検査値Xがあって、疾病の有無D(+),D(-)によりその分布が異なるとする
    • Xは0以上の値をとり、D(-)ではほぼ検査値が0近辺であって、D(+)では、大きな値を取るような場合
    • 両群をよく分ける値の上下で陽性・陰性とすることがよくある
    • ROCカーブを引くこともできる(こちら)
    • ROCカーブを引くとは「カットオフの値を変えると、感度・特異度、PPV・NPVが変わる」ということを裏返しに言っている

Hist1.jpeg Roc.jpeg

# 正常は0近辺、異常は正規分布

Nnormal<-1000
Ndisease<-1000

MeanNormal<-0
MeanDisease<-10

VarNormal<-3
VarDisease<-10
# 検出限界とかを入れるとそれらしい数値分布になる
CutOff<-1

H<-abs(rnorm(Nnormal,mean=MeanNormal,sd=sqrt(VarNormal))-CutOff)
D<-abs(rnorm(Ndisease,mean=MeanDisease,sd=sqrt(VarDisease))-CutOff)

h<-hist(c(H,D))

hist(H,breaks=h$breaks,ylim=c(0,max(h$counts)))

par(new=TRUE)
hist(D,,breaks=h$breaks,ylim=c(0,max(h$counts)),col=2,density=20)

## computing a simple ROC curve (x-axis: fpr, y-axis: tpr)
library(ROCR)
par(mfcol=c(1,3))
pred <- prediction( c(H,D), c(rep(1,length(H)),rep(2,length(D))))
perf <- performance(pred,"tpr","fpr")
plot(perf)

## precision/recall curve (x-axis: recall, y-axis: precision)
perf1 <- performance(pred, "prec", "rec")
plot(perf1)

## sensitivity/specificity curve (x-axis: specificity,
## y-axis: sensitivity)
perf1 <- performance(pred, "sens", "spec")
plot(perf1)
par(mfcol=c(1,1))

  • あいまいさを情報として活かす
    • さて、D(+),D(-)の2群がスパッと分かれていないときに、無理に線引きをしているが、それは、「陽性か陰性か」「1か0か」という結果がほしいからそのようにしている
    • 「1か0か」に分けないことにしてみる
    • D(+)でのXの値の確率分布(P_{{D(+)}}(X=x))とD(-)でのXの値の確率分布(P_{{D(-)}}(X=x))とがわかっているとする
    • X=xの観測をしたとき、それぞれの尤度はP_{{D(+)}}(X=x),P_{{D(-)}}(X=x)だから、これを使えばよい
    • Rのecdf()関数とdensity()関数とを用いて、観測データからの累積分布関数と確率密度関数とを推定してプロットしてみる
    • もちろん、正規分布を仮定するときとかは、平均や分散を推定して、それに基づく分布を使ってもよい
    • approxfun()関数を使って、確率密度関数を作ってやれば、任意のX=xについてその確率が出るから、任意のそれについて尤度、尤度比が計算できる

Ecdf.jpeg Dens.jpeg

#############
# データから、累積分布関数や確率密度関数を作る

# 階段関数から累積分布関数
H.ecdf<-ecdf(H)
D.ecdf<-ecdf(D)

x<-seq(from=0,to=max(H,D),length=100)
plot(x,H.ecdf(x))
par(new=TRUE)
plot(x,D.ecdf(x),col=2)


# density()関数で確率密度関数
H.density<-density(H,from=0)
D.density<-density(D,from=0)

plot(H.density,xlim=c(0,max(H,D)),ylim=c(0,max(H.density$y,D.density$y)))
par(new=TRUE)
plot(D.density,xlim=c(0,max(H,D)),col=2,ylim=c(0,max(H.density$y,D.density$y)))

# 近似関数にする
Hf.density<-approxfun(H.density$x,H.density$y)
Df.density<-approxfun(D.density$x,D.density$y)

plot(x,Hf.density(x),ylim=c(0,max(H.density$y,D.density$y)))
par(new=TRUE)
plot(x,Df.density(x),col=2,ylim=c(0,max(H.density$y,D.density$y)))

x0<-runif(1)*2*MeanDisease
# 確率、尤度
Hf.density(x0)
Df.density(x0)
# 尤度比
Df.density(x0)/Hf.density(x0)

plot(x,Df.density(x)/Hf.density(x))
  • これを関数化して、D(+),D(-)別の(相当人数分の)検査値データがあるときに、あるpretest probの患者が検査結果xを取ったときに、どういうposttest probを考えたらいいかを計算する関数にしてみよう

Kensa.jpeg


par(mfcol=c(1,2))
image(hlat$Ppositive,col=topo.colors(100))
image(hlat$Pnegative,col=topo.colors(100))
par(mfcol=c(1,1))

例5 存在しない確率分布を活用する

  • そもそも、「きちんとした集計」が無い(けれども、間接的には使える情報がある場合)
    • 主訴が○○な確率、とか
      • 保留

例6 病院の臨床情報全体をフルに使う

  • 大きな病院があってその臨床情報が一元管理されていたり、多くの病院の臨床情報が一元管理されているとする
    • 症状や検査、診断の関係が計算できる形で存在しているとする
    • そんなとき、その一元管理情報は「検査」の特質(感度・特異度・PPV・NPVなど)に関する非常に優れた情報源である
    • そのような視点から、の扱いに関する記事1記事2


個人鑑定的な枠組みではどうなるか

診断と鑑定の異同

  • 診断では、複数の診断名という仮説に関して、事前確率→情報→事後確率
  • 個人鑑定では、A1,A2,...さんに関する情報が確率的に得られていて、X1,X2,...さんに関する情報も確率的に得られていて、Ai = Xj なのかどうか、Ai =Xj'なのかどうか、どっちがありそうなのか、という判断を情報に基づいて行う。事前確率→情報→事後確率、という枠組みは同じ

事前確率

  • AさんがX1,X2,...,Xkの誰かだと考えていて、k人の誰がそれらしいかの情報が全くなければ、全員が平等なので{\frac  {1}{k}}

いろいろな情報

遺伝子多型マーカーのジェノタイプ

  • Aさんのジェノタイプがga、Xiさんのジェノタイプがgxiだとする
    • ga,gxiともに、「確定していれば」ga=gxiの尤度が1でga!=gxiの尤度は0
      • これは行方不明者のDNAが(毛髪など)で手に入り、身元不明者のDNAも手に入ったときなど
    • gaが確率的に決まっていて、gxiが確定していれば、Aのジェノタイプがgxiである確率が尤度になる
      • これは、行方不明者のDNAはなく、その家族のDNAなどから、Aのジェノタイプを確率的に推定していて、身元不明者のDNAが得られている場合に相当する
    • gaが確定していて、gxiが確率的な場合
      • これは、行方不明者のDNAが手に入っているが、身元不明者として、特定の個人ではなく、集団から、だれかを無作為に取り出した時に、うまく適合するかどうかを判断する場合などに相当する
    • gaもgxiも確率的な場合
      • gaは家族DNAなどから確率的に決まり、そこに、集団からの無作為抽出者が当てはまるかどうかを計算する場合
      • \int _{{g\in G}}P(ga=g)\times Q(gxi=g)dg
  • 遺伝子多型マーカーはたいてい、複数を用いる。それらは、通常、独立なものを用いている

遺伝子マーカー以外の情報

  • あいまいな情報~性別~
    • 事件が起きて、逃走する犯人の後ろ姿の目撃情報が寄せられたとします
      • 男だとする情報数がNm個、女だとする情報数がNf個あって、それらの信ぴょう性は等しいとします
      • 他方、容疑者がX1,X2,...と挙がってきていて、容疑者は男女入り乱れているとします
      • 目撃情報を用いてXiの情報後の事後確率を上げ下げしたいはずです
      • 目撃情報が複数、寄せられて、それが一致していないときには、不一致の程度をパラメタとして、そのパラメタの尤度を考え、不一致しやすさに重みづけをします。その上で、不一致しやすさを固定した上での、男らしさ、女らしさの尤度に重みづけ積分をすることでうまく行きそうです
      • 詳細はこちら

    • P_{{D(+)}}(x)P_{{T(+)}}(x)の一致具合とP_{{D(-)}}(x)P_{{T(+)}}(x)との一致具合の大小を比較して、D(+)とD(-)とのどちらが尤もらしいかを判断する
    • \int _{{x}}P_{{D(+)}}(x)\times P_{{T(+)}}(x)dx vs. \int _{{x}}P_{{D(-)}}(x)\times P_{{T(+)}}(x)dx
      • \int _{{x}}P_{{D(+)}}(x)\times P_{{T(+)}}(x)dx=1\times 1+0\times 0=1
      • \int _{{x}}P_{{D(-)}}(x)\times P_{{T(+)}}(x)dx=0\times 1+1\times 0=0
  • 例1 性別
    • 確定 対 確定
    • 確定 対 未確定 (未確定は『一部だけ』の試料、とか、目撃情報の積み重ね、とか)
    • 性別だからと言って、0.5 vs. 0.5なのか
  • 例2 遺伝子多型マーカー
    • ある行方不明者とある遺体の1対1の突合せ
    • ある行方不明者と「一般集団の人」との突合せ
    • 「一般集団の人」とある遺体の1対1の突合せ
    • 「一般集団の人」と「一般集団の人」との突合せ
    • 何が、情報の大小を決めているのか
  • 例3 推定年齢
    • 推定年齢に幅があるときに、幅の内訳は一定か
    • 片方が確定しているときに、それはどうやって「尤度」計算するか
    • 同じ情報を与えたら、みんな同じように確率分布を想定しているのか
  • 例4 幅のある情報、さらに(身長や体格)
  • 観察データを積み重ねて、分布を作る(ディリクレ?)

情報を使って判断に活かす~情報をタイプ分けする~

関連する記事