交換なしの場合
お持ちの場合はの独立したポアソン分布する変数をn
Yi∼Pois(λi)
と条件
∑j=inYj=K
その後
{Yi}∼Multinom(K,(λi∑nj=1λj))
したがって、最初に合計(条件によるポアソン分布カットオフ)の値を描画するように、色のボールの倍で骨壷を満たし、多項分布に従って骨壷をボールで満たすことができます。Y I K K ≥ K KnYiKK≥kK
多項分布によると、骨壷を個のボールで満たすことは、各ボールをカテゴリー分布から独立して色で描画することと同じです。次に、urnに追加された最初のボールをランダムサンプル(このサンプルが置き換えなしで描画された場合)を定義していると見なすことができます。これの分布は、別の多項分布ベクトルです。 k { Z i }Kk{Zi}
{Zi}∼Multinom(k,(λi∑nj=1λj))
シミュレーション
##### simulating sample process for 3 variables #######
# settings
set.seed(1)
k = 10
lambda = c(4, 4, 4)
trials = 1000000
# observed counts table
Ocounts = array(0, dim = c(k+1, k+1, k+1))
for (i in c(1:trials)) {
# draw poisson with limit sum(n) >= k
repeat {
Y = rpois(3,lambda)
if (sum(Y) >= k) {break}
}
# setup urn
urn <- c(rep(1, Y[1]), rep(2, Y[2]), rep(3, Y[3]))
# draw from urn
s <- sample(urn, k, replace=0)
Z = c(sum(s==1),sum(s==2),sum(s==3))
Ocounts[Z[1]+1, Z[2]+1, Z[3]+1] = Ocounts[Z[1]+1, Z[2]+1, Z[3]+1] + 1
}
# comparison
observed = rep(0, 0.5*k*(k+1))
expected = rep(0, 0.5*k*(k+1))
t = 1
for (z1 in c(0:k)) {
for (z2 in c(0:(k-z1))) {
z3 = k-z1-z2
observed[t] = Ocounts[z1+1, z2+1, z3+1]
expected[t] = trials*dmultinom(c(z1, z2, z3), prob=lambda)
t = t+1
}
}
plot(observed,expected)
x2 <- sum((observed-expected)^2/expected)
pvalue <- 1-pchisq(x2, 66-1)
結果
> # results from chi-sq test
> x2
[1] 75.49286
> pvalue
[1] 0.1754805
負の二項
引数は、ディリクレ多項分布になる(特定の条件下で)負の二項分布の場合にも同じように機能します。
以下はシミュレーションの例です
##### simulating sample process for 3 variables #######
# dirichlet multinomial for vectors of size 3
ddirmultinom = function(x1,x2,x3,p1,p2,p3) {
(factorial(x1+x2+x3)*gamma(p1+p2+p3)/gamma(x1+x2+x3+p1+p2+p3))/
(factorial(x1)*gamma(p1)/gamma(x1+p1))/
(factorial(x2)*gamma(p2)/gamma(x2+p2))/
(factorial(x3)*gamma(p3)/gamma(x3+p3))
}
# settings
set.seed(1)
k = 10
theta = 1
lambda = c(4,4,4)
trials = 1000000
# calculating negative binomials pars
means = lambda
vars = lambda*(1+theta)
ps = (vars-means)/(vars)
rs = means^2/(vars-means)
# observed counts table
Ocounts = array(0, dim = c(k+1,k+1,k+1))
for (i in c(1:trials)) {
# draw poisson with limit sum(n) >= k
repeat {
Y = rnbinom(3,rs,ps)
if (sum(Y) >= k) {break}
}
# setup urn
urn <- c(rep(1,Y[1]),rep(2,Y[2]),rep(3,Y[3]))
# draw from urn
s <- sample(urn,k,replace=0)
Z = c(sum(s==1),sum(s==2),sum(s==3))
Ocounts[Z[1]+1,Z[2]+1,Z[3]+1] = Ocounts[Z[1]+1,Z[2]+1,Z[3]+1] + 1
}
# comparison
observed = rep(0,0.5*k*(k+1))
expected = rep(0,0.5*k*(k+1))
t = 1
for (z1 in c(0:k)) {
for (z2 in c(0:(k-z1))) {
z3 = k-z1-z2
observed[t]=Ocounts[z1+1,z2+1,z3+1]
expected[t]=trials*ddirmultinom(z1,z2,z3,lambda[1]/theta,lambda[2]/theta,lambda[3]/theta)
t = t+1
}
}
plot(observed,expected)
x2 <- sum((observed-expected)^2/expected)
pvalue <- 1-pchisq(x2,66-1)
# results from chi-sq test
x2
pvalue