- 症候と診断とをグラフで整理している(こちら)
- また、こちらからの続きでもある
- この記事の話は集合で判断をする話。それに関連する話としてはAssociation rule learningがある(Wiki記事、ryamadaブログ記事)。Association rule learningならはRのパッケージarulesもある。
- 症候を与えられたときに、可能性のある診断名のリストを作るが、それは鑑別(するべき)診断(名の)リスト
- 身体におきる現象(のうち、説明可能なもの)は、医学用語によって定義される
- 身体におきる現象のうち、主観的にもしくは客観的に(比較的容易に〜あまり派手な測定機器などを用いずに)観察される現象を、症候という
- 病気は、解剖・生理・病理などの医学用語によって定義される
- 症状をと表すことにする
- 医学用語をと表すことにする
- 病気・診断名をと表すことにする
- 症状と医学用語との関係は、はのように、の1個以上の部分集合と対応づく
- を有する、という情報が与えられたときのうちの(通常は)1つの部分集合が体内に存在すると判断する
- 病気・診断名と医学用語との関係も、はのように、の1個以上の部分集合と対応づく
- との診断が下されるべき状態においては、のうちの(通常は)1つの部分集合が内々に存在するとみなされている
- では、ととの関係はどうなっているのか
- に対応するの要素のいずれか()が、に対応するの要素のいずれか(の部分集合になっているとき、という症候をみたら、疾患を鑑別診断リストに入れることが適当なのだろう
- ,ただし、は鑑別診断リストに挙げるに足るだけの確率の閾値
- Rでやってみよう
- に対応する部分集合を総当たりで比較する
- 比較する2つの部分集合の共通要素数を数える
- 共通要素数の数がの要素数と同じであれば、subsetであるということ
- subsetであるか否かの判断もしつつ、どのくらいsubsetに近いかも定量するべく、の要素数と、共通要素数/の要素数の3つの値をすべての総当たりについて3次元アレイで返す処理が以下
n.v <- 20
s.list <- list()
s.list[[1]] <- sample(1:n.v,3)
s.list[[2]] <- sample(1:n.v,3)
s.list[[3]] <- sample(1:n.v,3)
d.list <- list()
d.list[[1]] <- sample(1:n.v,8)
d.list[[2]] <- sample(1:n.v,7)
diff.dig <- function(s.list,d.list){
s.l <- lapply(s.list,unique)
d.l <- lapply(d.list,unique)
ret <- array(0,c(length(s.l),length(d.l),3))
for(i in 1:length(s.l)){
for(j in 1:length(d.l)){
tmp <- sort(c(length(s.l[[i]]),length(d.l[[j]])))
shorter <- tmp[1]
unique.len <- length(unique(c(s.l[[i]],d.l[[j]])))
union.len <- length(s.l[[i]]) + length(d.l[[j]]) - unique.len
ret[i,j,] <- c(length(s.l[[i]]),length(d.l[[j]]),union.len / length(s.l[[i]]))
}
}
return(ret)
}
diff.dig(s.list,d.list)
diff.dig(s.list,d.list)
-
- 初めの3x2行列は、3x2=6総当たり通りのそれぞれについてのの要素数。第二の3x2行列は、の要素数。第三の3x2行列は、共通要素数/の要素数
> diff.dig(s.list,d.list)
, , 1
[,1] [,2]
[1,] 3 3
[2,] 3 3
[3,] 3 3
, , 2
[,1] [,2]
[1,] 8 7
[2,] 8 7
[3,] 8 7
, , 3
[,1] [,2]
[1,] 0.3333333 0.6666667
[2,] 0.6666667 0.3333333
[3,] 0.0000000 0.3333333