機械に教える医学学習 補 点数をつける

  • こちらのシリーズの補助メモ
  • ある関数があって、その関数はa個の引数をとり、b個のスカラー値からなる値の組を返すとする
  • 何かを量的に評価したいときには、b=1個のスカラー値を返し、その値の大小を比べることができることが便利(「点数」をつけること)
    • 大小を比べることができることは、「順序」を与えることができること
  • 確率と順序
    • 確率は事象に与えられたスカラー量であって、「0以上」であって、「全部足すと1」である
    • 確率は「スカラー量」であって、順序をつけられるので、何かしらの「強弱」を評価するのに便利
    • N個の要素からn個取り出して戻し、m個取り出して戻した。n個の中にもm個の中にも含まれた要素の個数kについて考える
      • すべての要素が同確率で取り出されるものとしてシミュレーションしてみる
N <- 10
n <- 5
m <- 7
# 試行回数
n.iter <- 100000

# n個取り出しとm個取り出しを記録する
X.n <- X.m <- matrix(0,n.iter,N)

for(i in 1:n.iter){
	X.n[i,sample(1:N,n)] <- 1
	X.m[i,sample(1:N,m)] <- 1
}

# n個取り出しとm個取り出しを足し合わせる
X.sum <- X.n + X.m

# i行j列の値は、第i回目の試行で、第j番の要素が取り出された回数
# その値が2であれば「重複して取り出された」ことを示す

# 指定の値のセルだけが1の行列を作る
zeros <- ones <- twos <- matrix(0,n.iter,N)
zeros[which(X.sum == 0)] <- 1
ones[which(X.sum == 1)] <- 1
twos[which(X.sum == 2)] <- 1

# 各試行での0,1,2の個数を集計する
n.zeros <- apply(zeros,1,sum)
n.ones <- apply(ones,1,sum)
n.twos <- apply(twos,1,sum)

par(mfcol=c(1,3))
hist(n.zeros)
hist(n.ones)
hist(n.twos)

# 各数が何回0になったり1になったり2になったかを集計する

n.iter.zeros <- apply(zeros,2,sum)
n.iter.ones <- apply(ones,2,sum)
n.iter.twos <- apply(twos,2,sum)

# 値を確認
n.iter.zeros
n.iter.ones
n.iter.twos

# どの数字も同じくらいの確率で0,1,2になっている

n.iter.zeros/n.iter
n.iter.ones/n.iter
n.iter.twos/n.iter

# その「同じ確率」は、
# a0 = (1-n/N)*(1-m/N)
# a1 = 1-a0-a2
# a2 = (n/N) *(m/N)

a0 <- (1-n/N)*(1-m/N)
a1 <- 1-a0-a2
a2 <- (n/N) *(m/N)

a0
a1
a2
    • 今あるグラフG={V,E}があり、そこに2個のノードv_1,v_2があるという。v_1,v_2から距離k_1,k_2以内にある点の集合をS(v_i,k_i); i = 1,2とする。以下のようなベン図でいうところの、S(v_1,k_1) \cap S(v_2,k_2)S^c(v_1,k_1) \cap S^c(v_2,k_2)(S(v_1,k_1) \cap S^c(v_2,k_2)) \cup (S^c(v_1,k_1) \cap S(v_2,k_2))の個数の分布を知りたい

library(gplots)

g1 <- sample(1:10,3)
g2 <- sample(1:10,5)

venn(list(g1,g2))
    • N個の要素からn,m個抜き出して、その共通要素の数を数える、というのは、G={V,E}に関する特殊な場合と考えることもできる
      • 中央に一列にN個のノードが並び、その中央の列の左側にたくさんのノードがある。左側ノードの次数はすべてnであって、左側ノードに連結するエッジはすべて、中央の列のノードと連結する。他方、中央の列の右側にもたくさんのノードがあって、これらの次数はmであって、同様に中央の列のノードとの間にエッジがある
      • このようなグラフにおいて、左側のノードから距離が1、右側のノードから距離が1という範囲を設定すればよい
    • 別のタイプのグラフについては、ある制約を与えた上で、ランダムなグラフが作れると、ある程度のことはできるだろう
      • ランダムなグラフについてはこちら