- Wikiではこちら
- 特に統計関係の標準化はStandard score(こちら)
- さて、この記事での値の標準化は、距離への影響を「同等」にするための処理
- (少なくともマンハッタン距離の場合には)個々の項目での距離は、項目ごとに加算するので、項目ごとの多次元距離への寄与の程度をそろえたいだろう
- 項目ごとの距離は、「全ペア」の距離の総和を基準にしてもよいだろう
- 統計での標準化は、標準的な分布が標準正規分布なので、その場合には、平均が0、分散が1の(正規)分布にするべく、平均と分散で標準化したいだろう
- マンハッタン距離の場合は…平均だけでよくはないだろうか?
- ベクトルデータで(マンハッタン)距離を標準化する関数
StandardDist<-function(v,method="manhattan"){
N<-length(v)
D<-dist(v,method=method)
SumD<-sum(D)
v/SumD*N*(N-1)/2
}
- さて、これを使ってMSTを作ると、「稀な項目を陽性に持つサンプルがMSTの辺縁にプロットされる」ようだ
- その様子
library(vegan)
Ns<-500
Nm<-40
NmSingle<-10
f<-runif(Nm)
X<-matrix(0,Ns,Nm)
for(i in 1:Nm){
loop<-TRUE
while(loop){
X[,i]<-sample(c(1,0),Ns,replace=TRUE,prob=c(f[i],1-f[i]))
if(sum(X[,i])*(sum(X[,i])-Ns)<0)loop<-FALSE
}
}
X2<-matrix(0,Ns,NmSingle)
X2[1:NmSingle,1:NmSingle]<-diag(NmSingle)
X[,1:NmSingle]<-X2
AF<-apply(X,2,mean)
MAF<-AF
MAF[which(MAF>0.5)]<-1-MAF[which(MAF>0.5)]
SAF<-sign(0.5-AF)
R<-exp(-MAF)*SAF
PeriV<-rep(0,Ns)
k<-5
for(i in 1:Ns){
posAF<-MAF[which(X[i,]==1)]
if(min(posAF)<sort(MAF)[k]){
PeriV[i]<-1
}
}
StandardDist<-function(v,method="manhattan"){
N<-length(v)
D<-dist(v,method=method)
SumD<-sum(D)
v/SumD*N*(N-1)/2
}
Xst<-apply(X,2,StandardDist)
mean(dist(Xst[,1]))
D<-dist(Xst,method="manhattan")
MSTOri<-spantree(D)
plot(MSTOri,cex=1,pch=19,main="Genotype Only",col=PeriV)