一様分布の発生@多次元球面
- 多次元球hypersphere上の一様分布は、ウィキペディア(こちら)には、2通りのやり方が紹介されている。
- 多次元正規乱数を発生させて、その点を基準多次元球面上に投影する
- 多次元一様乱数を発生させて、そのうち、多次元球の内部の点のみを採用して、それの基準多次元球面への投影をとる
- 多次元一様乱数は多次元立方体であるが、その体積と多次元球との体積との比は、次元が上がるに連れて、急速に拡大するので、この方法では、高次元のとき、非現実的となる(発生する点のうち、ほとんどを捨てることになるから)
df<-6 # 次元 np<-10000 # 点の数 rs<-matrix(rnorm(df*np),nrow=np) # df次元正規乱数(正規乱数は中心からの距離(の2乗)に応じて確率が減少する rssq<-rs^2 ds<-sqrt(apply(rssq,1,sum)) # 発生点の原点からのユークリッド距離 rs<-rs/ds # 半径1の多次元球面に投影する plot(as.data.frame(rs[,1:min(4,df)]),cex=0.1) # 2次元平面に投影