うまく割り付ける

  • こちらこちらで、バースデイ・パラドクスとか、日の確率が均等でないときへの拡張のことなどを書いている
  • 「同じタイプが出現しない確率」を式で書くとどうなるかをやってみる(少ない人数で)
  • p=(p_1,p_2,...,p_n); \sum_{i=1}^n p_i =1という確率
  • k=1,2,3,4人がいる
  • 4人がすべて異なるタイプである確率は?
  • k=1のとき
    • P(k=1) = \sum_{i=1}^n p_i =1
  • k=2のとき
    • P(k=2) = 1 - \sum_{i=1}^n p_i^2
  • k=3のとき
    • 2人までのタイプを確認して、すでにその2人が同じタイプの場合はもう考える必要がないから、2人目までは別のタイプだった場合を考える。3人目がすでにわかっている2人のタイプと同じなら、NGだし、異なればOK
      • 例えばp_1 \times p_2 \times \sum_{i=1}^n p_iのうち、i=1,2がNG
      • p_1 \times p_2もしくはp_2 \times p_1が先の2人で、3人目がp_1p_2ならNG
      • したがって、2\times \sum_{i=1}^n p_i^2\times (1-p_i)
    • 結局、P(k=3) = P(k=2) -2\times \sum_{i=1}^n p_i^2\times (1-p_i)
    • 書き換えてP(k=3) = 1-3 \sum_{i=1}^n p_i^2 + 2 \sum_{i=1}^n p_i^3
  • k=4のとき
    • 同様にP(k=4)P(k=3)の部分はもう考えなくてよいからそれ以外の部分を考える
      • はじめの3人がp_1,p_2,p_3だったとき4人目がこの3タイプのどれかだったらNG
      • はじめの3人がこの3タイプのいずれかである確率は3! p_1 p_2 p_3である
      • NGになるのは3! p_1^2 (\sum_{i \ne 1} \sum_{j \ne 1} p_i p_j)
      • これは3! p_1^2 (\frac{1}{2}(1-\sum_{i=1}^n p_i)^2-\sum_{i} p_i^2 + p_1^2)となるから
      • 結局3 \times (\sum_{i=1}^n( p_i^2 - 2p_i^3+2 p_i^4) - (\sum_{i=1}^n p_i^2)^2)
    • したがってP(k=4) = P(k=3) - 3 \times (\sum_{i=1}^n( p_i^2 - 2p_i^3+2 p_i^4) - (\sum_{i=1}^n p_i^2)^2)
    • 書き換えてP(k=4) = 1- 6\times \sum_{i=1}^n p_i^2 + 8\times \sum_{i=1}^n p_i^3 -6 \times \sum_{i=1}^n p_i^4 + 3 \times (\sum_{i=1}^n p_i^2)^2
  • 式を並べると
    • P(k=1)=1
    • P(k=2)=1-\sum_{i=1}^n p_i^2
    • P(k=3)=1-3\sum_{i=1}^n p_i^2 + 2 \sum_{i=1}^n p_i^3
    • P(k=4)=1- 6\times \sum_{i=1}^n p_i^2 + 8\times \sum_{i=1}^n p_i^3 -6 \times \sum_{i=1}^n p_i^4 + 3 \times (\sum_{i=1}^n p_i^2)^2
  • Rで検算、n=4の場合
k <- 5
p <- runif(k)
p <- p/sum(p)

library(gtools)

cmb <- combinations(k,3)

P <- rep(0,length(cmb[,1]))
for(i in 1:length(cmb[,1])){
	P[i] <- prod(p[cmb[i,]])
}
sum(P)*factorial(3)
1-3*sum(p^2)+2*sum(p^3)

1-3*sum(p^2)+2*sum(p^3)-3*sum(p^2)+3*2*sum(p^3)-3*2*sum(p^4) +3*(sum(p^2))^2
1-6*sum(p^2)+8*sum(p^3)-6*sum(p^4) +3*(sum(p^2))^2

cmb <- combinations(k,4)
P <- rep(0,length(cmb[,1]))
for(i in 1:length(cmb[,1])){
	P[i] <- prod(p[cmb[i,]])
}

sum(P)*factorial(4)