特定の項目の影響力

  • 今、M次元格子上にN個の点を取る
  • M次元格子は(0,1,2)としてみる
  • これらの点はその遠近関係(以下のソースではマンハッタン距離にしてある)により、最小全域木を取ることができる
  • 今、このN個の点にある値を付与しよう
  • この値は相対的なものであるとすると、定数倍しても意味は変わらない
  • しかしながら、この付与した値をも考慮してN個の点の座標をM+1次元空間の点と取りなおして最小全域木を撮りなおせば、付与した値のスケールが大きくなると、その値の多寡の影響力が大きくなり、付与した値のスケールが小さくなると、その影響がなくなる(木のトポロジーは、元のM次元情報で確定する)
  • こちらで使っているMSTの話とつながる話(極言すれば、MSTはジェノタイプだけで決めて、そのうえで、各点にもう1次元分の値を付与することを考えてもよい。そのときに1次元分を付与して変化するMSTの辺の長さの和は(特にマンハッタン距離でやっていれば)、簡単に書き下せる形になる。

library(vegan)
library(animation)
Ns<-50 # サンプル数
Nm<-40 # 項目数(マーカー数)
# 適当にデータ上列を作ろう
X<-matrix(sample(0:2,Ns*Nm,replace=TRUE),Ns,Nm)
# マンハッタンで距離を取ろう
D<-dist(X,method="manhattan")
# saveGIF()はanimationパッケージの関数で、連続図をアニメーションGIFファイルにする(ぱらぱら漫画化)関数
saveGIF({ # アニメーション開始
# M次元データのみでMST
MSTOri<-spantree(D)
#plot(MSTOri)
# Xを観測したとして、それに基づく、項目ごとの「アレル頻度」
AF<-apply(X,2,mean)
# minor allele freq
MAF<-AF
MAF[which(MAF>0.5)]<-1-MAF[which(MAF>0.5)]
# 正負
SAF<-sign(AF-0.5)
# AFに応じて「リスク」決めよう
R<-exp(-MAF)*SAF
#R<-AF

# phenotypeを定数倍項で変化させてみる
ks<-2^(c(seq(from=-20,to=5,length=26),c(seq(from=5,to=-20,length=26))))
# 定数倍項の変化でループ
for(i in 1:length(ks)){
# phenotypeの計算
	P<-X%*%R
# 定数倍
	P<-P*ks[i]
# 合わせた行列を作って距離行列を作る
	Y<-cbind(P,X)
	tmpD<-dist(Y,method="manhattan")
# MSTを作る
	MST<-spantree(tmpD)
	meanP<-mean(P)
# ジェノタイプのみの木をフェノタイプ込みの木を並べてプロット
	par(mfcol=c(1,2))
# ジェノタイプのみの木
	plot(MSTOri,cex=1,pch=19,main="Genotype Only")
# ノードにフェノタイプの値に応じた色をつける
	plot(MST,col=gray((max(P)-P)/(max(P)-min(P))),cex=1,pch=19,main=ks[i])
}# 定数倍項のループ、終わり

}# SaveGIF()関数に渡す複数プロットがここまで
# 以下はSaveGIF()関数の処理条件
, interval = 1, movie.name = "bm_demo.gif", ani.width = 600, 
    ani.height = 600)
# デフォルトのブラウザでanimationGIFが動くので、適当に保存する