等分するベクトル

  • 一昨日と昨日(記事はこちらこちら)の続き
  • \sum_{i=1}^{df+1} x_i^2=1かつ\sum_{i=1}^{df+1} x_i=0なるX=\{x_1,...,x_{df+1}\}乱数を発生させる
  • 自由度がdfなので、df次元球表面の一様分布から、その点の座標を発生させた後、それを、df+1本のdf次元空間を等分するベクトルへの足としてdf+1個の値の組を作る
df<-10
d<-df+1
diagval<-1:d
diagval<-sqrt((df+1)/df)*sqrt((df-diagval+1)/(df-diagval+2))

others<--diagval/(df-(0:(d-1)))
m<-matrix(rep(others,df+1),nrow=df+1,byrow=TRUE)
diag(m)<-diagval
m[upper.tri(m)]<-0
m<-m[,1:df]

np<-10
rs<-matrix(rnorm(df*np),nrow=np)
rssq<-rs^2
ds<-sqrt(apply(rssq,1,sum))
rs<-rs/ds

ds<-t(m%*%t(rs))*sqrt(df/(df+1))
dssq<-ds^2
apply(dssq,1,sum)