はじめに

\(n\)人に対して\(mn\)枚のコインをランダムに分け与えたとき,所持しているコインの枚数の分布は平均\(m\)のポアソン分布で近似することができる.『Rで楽しむ統計』(奥村晴彦,\(2016\))によると,その後人々の間でコインをランダムにやりとりさせるとコインの所持枚数の分布は指数分布に近づいてゆく. このレポートでは,ランダムにコインを分け与えるシミュレーションとそれをランダムに交換させるシミュレーションを行い,分布がどのように変化していくかを確認する.

コインの分配

まず初めに,\(2000\)人にランダムに\(10000\)枚のコインを分け与える.

n <- 2000
cn <- 10000

coin <- numeric(n)
vr <- floor(runif(cn)*n)+1
for(i in 1:cn){
  r0 <- vr[i]
  coin[r0] <- coin[r0]+1
}

このときのコインの所持枚数の分布のヒストグラムを描くと以下のようになる.

hist(coin,xlim=c(0,20),ylim=c(0,0.3),main="",breaks=seq(-0.5,19.5,by=1),freq=F)
par(new=T)
x <- 0:20
plot(x,dpois(x,5),xlim=c(0,20),ylim=c(0,0.3),ann=F,type="l")

これは平均が\(5\)なので,パラメータ\(\lambda=5\)のポアソン分布となる. 上図に描かれている曲線は\(\lambda=5\)のポアソン分布の確率関数\(f(x)\)を直線で結んだもので, \[ f(x)=\frac{5^x}{x!}e^{-5} \] である. 上図より,コインの所持枚数の分布はこのポアソン分布で近似できていると言える.

コインのやりとり

\(2000\)人の中からランダムに選ばれた\(2\)人がじゃんけんをする. じゃんけんで負けた人が勝った人に持っているコインを\(1\)枚渡す. このとき,負けた人が\(1\)枚もコインを持っていなければコインのやりとりは行われない. これを\(10^5\)回繰り返す.

N <- 10^5

そのときのヒストグラムが変化する様子を動画にする.

vr1 <- floor(runif(N-1)*n)+1
vr2 <- floor(runif(N-1)*n)+1

for(i in 1:(N-1)){
  r1 <- vr1[i]
  r2 <- vr2[i]
  if(r1!=r2 && coin[r2]>0){
    coin[r1] <- coin[r1]+1
    coin[r2] <- coin[r2]-1
    coin[c(-r1,-r2)] <- coin[c(-r1,-r2)]
  }
  marg <- max(abs(coin))
  s <- seq(0,marg+1,by=1)
  if(i%%10^3==0){
    hist(coin,xlim=c(0,30),ylim=c(0,0.3),breaks=s,freq=F)
    curve(dexp(x,1/5),xlim=c(0,30),ylim=c(0,0.3),add=T)
  }
}

コインのやりとりを繰り返してもコインの総数は変わらないので平均は変わらず\(5\)である. 上の動画に描かれている曲線は平均\(5\),すなわち,パラメータ\(\lambda=\dfrac{1}{5}\)の指数分布の確率密度関数\(f(x)\)で, \[ f(x)=\frac{1}{5}e^{-\frac{1}{5}x} \] である. 動画を見ると,コインの所持枚数の分布が徐々にこの分布に近づいているのが分かる.

所持枚数の変化の様子

集団の中のある一人が所持しているコインの枚数がどのように変化するかのシミュレーションを行う.次の動画は,初めにコインが配られたときにコインを最も多く持っている人のコインの枚数がどのように変化するかを表したものである.ヒストグラム内のその人がいる部分を赤く色づけして表している.ただし,今回はやりとりを\(10^6\)回繰り返す.

coin <- numeric(n)
vr <- floor(runif(cn)*n)+1
for(i in 1:cn){
  r0 <- vr[i]
  coin[r0] <- coin[r0]+1
}
coin <- sort(coin,decreasing=T)
N2 <- 10^6
vr1 <- floor(runif(N2-1)*n)+1
vr2 <- floor(runif(N2-1)*n)+1

for(i in 1:(N2-1)){
  r1 <- vr1[i]
  r2 <- vr2[i]
  if(r1!=r2 && coin[r2]>0){
    coin[r1] <- coin[r1]+1
    coin[r2] <- coin[r2]-1
    coin[c(-r1,-r2)] <- coin[c(-r1,-r2)]
  }
  marg <- max(abs(coin))
  s <- seq(0,marg+1,by=1)
  cc <- ifelse(s<=coin[1]&coin[1]<s+1,"red","white")
  if(i%%10^4==1){
    hist(coin,xlim=c(0,30),ylim=c(0,0.3),breaks=s,freq=F,col=cc)
  }
}

まとめ

以上のシミュレーションから,まず,コインのやりとりを繰り返していくと徐々にポアソン分布から指数分布へと近づいていくことが分かった.このことから,コインをランダムにやりとりしたとしても所持枚数の格差をなくすことはできず,むしろ格差が広がっていると考えられる.しかし,初めの所持枚数が最大の者の動きを見ると,やりとりの繰り返しの中で枚数が\(0\)枚となっているので,初めの枚数が多いからと言ってやりとりを繰り返した後でもたくさんコインを持っているとは限らないと考えられる.