標準化って

  • Wikiではこちら
  • 特に統計関係の標準化はStandard score(こちら)
  • さて、この記事での値の標準化は、距離への影響を「同等」にするための処理
    • (少なくともマンハッタン距離の場合には)個々の項目での距離は、項目ごとに加算するので、項目ごとの多次元距離への寄与の程度をそろえたいだろう
    • 項目ごとの距離は、「全ペア」の距離の総和を基準にしてもよいだろう
    • 統計での標準化は、標準的な分布が標準正規分布なので、その場合には、平均が0、分散が1の(正規)分布にするべく、平均と分散で標準化したいだろう
  • マンハッタン距離の場合は…平均だけでよくはないだろうか?
  • ベクトルデータで(マンハッタン)距離を標準化する関数
# ベクトルを引数に
# そのmethod方での距離行列をだし、距離の平均が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 # 強制的に、1サンプルでのみ陽性の項目を作る
# 適当にデータ上列を作ろう
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

# Xを観測したとして、それに基づく、項目ごとの「アレル頻度」
AF<-apply(X,2,mean)
# minor allele freq
MAF<-AF
MAF[which(MAF>0.5)]<-1-MAF[which(MAF>0.5)]
# 正負
SAF<-sign(0.5-AF)
# AFに応じて「リスク」決めよう
R<-exp(-MAF)*SAF
#R<-AF

# サンプルが陽性の項目のうち、もっともmafが小さい項目が
# mafの昇順でk=5番目以下なら値を1に、そうでなければ0にする
PeriV<-rep(0,Ns)
k<-5
for(i in 1:Ns){
	posAF<-MAF[which(X[i,]==1)]
	#ID<-min(posAF)
	#PeriV[i]<-which(MAF==ID)[1]
	if(min(posAF)<sort(MAF)[k]){
		PeriV[i]<-1
	}
	
}
#PeriV2<-PeriV
#PeriV2[which(PeriV2>1)]<-0


# 標準化してMST
# すべての項目をその項目のみで距離行列を作ったときに
# 距離平均が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")
# M次元データのみでMST
MSTOri<-spantree(D)

# 小さなMAFで1を持つ点のみをプロット
plot(MSTOri,cex=1,pch=19,main="Genotype Only",col=PeriV)