1次元は指数分布、多次元はワイブル分布

  • こちらで多次元空間のポアッソン配置と、その配置点間の最短距離がワイブル分布になることが書かれている
  • この話題に関する遺伝学的なコメントはこちら
  • それをRで確認してみる
  • ただし、以下のソースでは、ポアッソン配置した点の座標を多次元立方格子内のランダムな点として発生させているために、次元(k)を上げると、ワイブル分布からずれた分布が得られるようである。次元が上がると、立方格子は、格子点付近で「とがった感じ」になっていて、そこに発生した点は、周囲に点が少な目になることから、結果として、最近点までの距離が長くなっているのだと思うのだが・・・
  • → これを改善するべく、ソースを変更(こちら)

-もう一つの可能性は、ソースの完璧なバグです

  • ワイブル分布の形状母数は、次元k、尺度母数は\frac{1}{(V(k)\times h)^{\frac{1}{k}}}、ただし、kは次元、hは点の密度、V(k)はk次元単位超球の体積でV(k)=\frac{\pi^{\frac{k}{2}}}{\Gamma(\frac{k}{2}+1)}
k<-3 # 次元→これを大きくすると、ずれが生じる
N<-1000 # ランダムに配置する点の数
h<-0.000001 # 点の密度(ポアッソンだから、疎に…)
t<-(N/h)^(1/k) # 格子の一辺の長さ
M<-matrix(runif(k*N)*t,N,k) #N個の点のk次元座標を発生
D<-matrix(0,N,N) # すべての点の間のユークリッド距離を納める
for(i in 1:N){
	for(j in 1:N){
		D[i,j]<-sqrt(sum((M[i,]-M[j,])^2))
	}
}
diag(D)<-apply(D,1,max) # 対角成分が0なので、それを大きな数字に変える
L<-apply(D,1,min) # N個の点の最近点までの距離を格納

# ワイブル分布の尺度母数
beta<-(1/(h*pi^(k/2)/gamma(k/2+1)))^(1/k)
# ワイブル分布乱数の発生
W<-rweibull(N,k,beta)

par(mfcol=c(2,2))
# 距離分布、乱数分布をプロット
plot(density(W))
plot(density(L))
# 距離、乱数の昇順プロットを重ね描き
plot(sort(W),ylim=c(0,max(W,L)))
par(new=TRUE)
plot(sort(L),col="red",type="l",ylim=c(0,max(W,L)))
par(mfcol=c(1,1))