- この記事を、ROCの関連であると読めば、こちらの続き
- また、この記事を、大量のデータが臨床機関にストックしてあって、それを診断応用するという視点からは、こちらの続きでもある
- いずれにしろ、検査をして、診断に活かす話(こちら)
- 疾患陰性のときにある検査はほぼ検出限界以下か、検出可能でも、かなり低い値
- 疾患陽性のときには、検査値は、かなり高い。「超高値」だったら、病気であるとほぼ考えるが、微妙なあたりというのがなくはない
- そんな事情のときに、診断するためにこの検査をオーダーして、「陰性」「陽性」という結果が返ってきたとして、必ずや、その値の高低を気にして、診断に活かしていることだろう
- では、その活かし方は、いかに??という話
HowLikelyAfterTest<-function(x,Case,Control,p=0.5,minV=NULL,maxV=NULL){
if(is.null(minV)){
if(is.null(maxV)){
H.density<-density(Control)
D.density<-density(Case)
}else{
H.density<-density(Control,to=maxV)
D.density<-density(Case,to=maxV)
}
}else{
if(is.null(maxV)){
H.density<-density(Control,from=minV)
D.density<-density(Case,from=minV)
}else{
H.density<-density(Control,from=minV,to=maxV)
D.density<-density(Case,from=minV,to=maxV)
}
}
Hf.density<-approxfun(H.density$x,H.density$y)
Df.density<-approxfun(D.density$x,D.density$y)
LH<-Hf.density(x)
LD<-Df.density(x)
LHmat<-outer(LH,1-p,FUN="*")
LDmat<-outer(LD,p,FUN="*")
LHmat[is.na(LHmat)]<-0
LDmat[is.na(LDmat)]<-0
SumMat<-LHmat+LDmat
list(LH=LHmat,LD=LDmat,Ppositive=LDmat/SumMat,Pnegative=LHmat/SumMat,x=x,preprob=p,Hf.density=Hf.density,Df.density=Df.density)
}
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)
Ppretest<-seq(from=0.01,to=0.99,by=0.01)
test.x<-seq(from=0,to=15,by=1)
hlat<-HowLikelyAfterTest(test.x,D,H,p=Ppretest)
par(mfcol=c(1,2))
image(hlat$Ppositive,col=topo.colors(100))
image(hlat$Pnegative,col=topo.colors(100))
par(mfcol=c(1,1))