- こちらやこちらで、バースデイ・パラドクスとか、日の確率が均等でないときへの拡張のことなどを書いている
- こちらでごく少ない人数の場合をを使って式で表してみた
- 規則がみえなくて汚い
- 漸化式にしてみる
- をnタイプの生起確率とする
- 人のタイプがすべて異なる確率をと書くこととする
-
- ただしはベクトルからを取り除いた、長さのベクトルであって、その要素の和がとなるように補正したベクトル
- この式の意味は以下の通り
- はより小さくなる。小さくなる分は、初めの人はすべての異なるタイプを持つが、第番目の人の型が、初めの人の型のどれかひとつに相当する場合の分である
- この「減分」はすべてのについて、タイプが2人で、残りのk-2人はタイプ以外のタイプから作ったタイプの組み合わせのすべて
- は、タイプを除いたタイプの確率の総和が1になるように補正した上で、そのようなタイプで人の型がすべて異なる組み合わせの確率をすべて足し合わせたもの(これは定義)
- は、の確率を補正してあるが、「本当の確率で計算するには、の個々の要素のすべてを倍する必要があることを指す
- はあるタイプについて2人が観察されている確率を考慮したもの
- 倍するのは、こう説明できる
- 人がすべて異なる型である場合の数が。これに対して、番目のタイプは、通り取らせることができるが、そのうち、はじめの人のタイプのいずれかであるのは、通りだけ。したがって、あらたに除外されるべきは、通り。今、これを重複するタイプの数ごとに取りまとめて処理する(しかもどのタイプが重複するかについては相互に対等)ので、ある重複タイプについて、個の要素があることになる。これらの要素は、から個の要素を取り出す順列のすべてに関して重複しているが、その重複の程度を求めたいのであるから、が求めたい値。これを計算すると
- Rで書いてみる
my.calcP <- function(p,k){
if(k == 1){
return(1)
}else if(k == 2){
return(1-sum(p^2))
}else{
n <- length(p)
tmp <- 0
for(i in 1:n){
q <- p[-i]
q <- q/sum(q)
tmp <- tmp + my.calcP(q,k-2) * (1-p[i])^(k-2) * p[i]^2
}
return(my.calcP(p,k-1) - tmp * (k-1))
}
}
n <- 4
p <- runif(n)
p <- p/sum(p)
library(gtools)
cmb <- combinations(n,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(n,4)
P <- rep(0,length(cmb[,1]))
for(i in 1:length(cmb[,1])){
P[i] <- prod(p[cmb[i,]])
}
sum(P)*factorial(4)
my.calcP(p,1)
my.calcP(p,2)
my.calcP(p,3)
my.calcP(p,4)
q <- rep(1/n,n)
out.q <- rep(0,n)
for(i in 1:n){
out.q[i] <-my.calcP(q,i)
}
nn <- 1:n
(1/n)^(nn) * factorial(n)/factorial(n-nn)
out.q
- 確率のばらつきの影響について定性的な情報を得る(ために限定したパターンによって定量する)
n <- 10
p <- rep(1,n)
p <- p/sum(p)
fs <- 1:n
outs <- matrix(0,length(fs),n)
for(i in 1:length(fs)){
f <- fs[i]
q <- c(f,rep(1,n-1))
q <- q/sum(q)
for(j in 1:n){
outs[i,j] <- my.calcP(q,j)
}
}
matplot(t(outs),type="l")
f <- 10
gs <-1:n
outs.g <- matrix(0,length(gs),n)
for(i in 1:length(gs)){
q <- c(rep(f,gs[i]),rep(1,n-gs[i]))
q <- q/sum(q)
for(j in 1:n){
outs.g[i,j] <- my.calcP(q,j)
}
}
matplot(t(outs.g),type="l")
ns <- n:(n+5)
outs.n <- matrix(0,length(ns),n)
ff <- 5
p.max <- 1/n * ff
for(i in 1:length(ns)){
q <- c(p.max,rep((1-p.max)/(ns[i]-1),ns[i]-1))
for(j in 1:n){
outs.n[i,j] <- my.calcP(q,j)
}
}
matplot(t(outs.n),type="l")
- さらに、すべての人が型を持つ確率として独自の確率ベクトルを持つように一般化しよう
- 人数と型との種類数が等しければ、非負正方行列が作れて、全員が異なる確率というのは、パーマネント(パーマネントについて)になる
- さらに複雑化するとすれば、ある人が型をとる確率と別の人のそれとが独立ではないという仮定の導入