犯行に及ぶ:法廷用ベイジアンネットワーク

  • 犯行は現場に居ないと犯せない
  • 現場に居て、動機があっても犯すとは限らない
  • 現場に居ると、動機があってもなくても、何かの拍子に犯すかも
  • 確率的に考えても、「最後の犯行実行者は1人(とわかっているときは)」なら、「可能性のある複数人から選ぶ」必要が出る
  • "values=c(0.1,0.99,0.05,0.005,0.0001,0.9999,0,1,0,1,0,1)"の末尾の6つの数字が0,1,0,1,0,1なのは、動機の強弱に寄らず、居あわせなければ犯人じゃない、ということを表す
  • 強い動機と弱い動機と動機なしの3通りにおいて、犯行に及ぶ確率を0.1,0.05,0.0001としてある
  • この数字はもっとよく考えるべき(犯行の内容(殺人と、ごみのポイ捨て)ではずいぶん違う)
  • また、壁に噛み跡を残した犯人、とかだとすると、Xが犬なのか、人なのかで、「動機」と犯行に及ぶ確率との関係を変える方が妥当である、など、も考慮事項
  • 2人とも、「犯行に及んだだろう」と推定されたら、「本当はどっちがやった?」を0.5:0.5で割り振る。(どちらも犯行に及ばなかった、と言う場合も0.5:0.5にする。ただし、犯行が起きてしまったというエビデンスがあれば、その項はネットワークの計算で吸収されるから関係ない)
# 犯行は現場に居ないと犯せない
# 現場に居て、動機があっても犯すとは限らない
# 現場に居ると、動機があってもなくても、何かの拍子に犯すかも
Cs <- list()
Cs[[1]] <- cptable(~C1|M1:L1,values=c(0.1,0.99,0.05,0.005,0.0001,0.9999,0,1,0,1,0,1),levels=c("1","0"))
Cs[[2]] <- cptable(~C2|M2:L2,values=c(0.1,0.99,0.05,0.005,0.0001,0.9999,0,1,0,1,0,1),levels=c("1","0"))

# 犯行があったのかなかったのか(Cs[[1]],Cs[[2]]のどちらか片方でも1なら犯行はあった…
Cr <- cptable(~Cr|C1:C2,values=c(1,0,1,0,1,0,0,1),levels=c("1","0"))
# 2人のうち片方しか犯行は犯せない
E <- cptable(~E|C1:C2,values=c(0.5,0.5,1,0,0,1,0.5,0.5),levels=c("p1","p2"))
plist <- compileCPT(list(ps[[1]],ps[[2]],Ls[[1]],Ls[[2]],Ms[[1]],Ms[[2]],Cs[[1]],Cs[[2]],Cr,E))
net4 <- grain(plist)
net5 <- setEvidence(net4,nodes=c("Cr"),states=c("1"))
querygrain(net5,nodes=c("E"))
  • 犯行があった、という事実を入れると、動機付けだけで容疑者Xが犯行に及んだという確率が相当高くなっている
> querygrain(net5,nodes=c("E"))
$E
E
        p1         p2 
0.98540052 0.01459948