値付きグラフ

  • 木(グラフ)があって、そのノードに値があるとする
  • グラフは2次元にプロットできる
  • ノードが持つ値を第3軸に与えて3次元プロットしてみよう

library(rgl)
library(vegan)
Ns<-50 # サンプル数
Nm<-40 # 項目数(マーカー数)
# 適当にデータ上列を作ろう
X<-matrix(sample(0:2,Ns*Nm,replace=TRUE),Ns,Nm)
# マンハッタンで距離を取ろう
D<-dist(X,method="manhattan")
# 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<-1
# 定数倍項の変化でループ
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)
# ノードにフェノタイプの値に応じた色をつける
	tmpPlot<-plot(MST,col=gray((max(P)-P)/(max(P)-min(P))),cex=1,pch=19,main=ks[i])
	# 木の座標はtmpPlotに格納されている
	# それは2次元
	# 第3次元にフェノタイプを与える
	# プロットする
	plot3d(cbind(tmpPlot[[1]],P),col=4)
	# Edgeの情報はMSTに格納されている
	First<-2:(length(MST[[1]])+1)
	Second<-MST[[1]]
	# エッジ用にエッジの片方端・もう片方端、次のエッジの片方端・もう片方端の順で
	# 3座標を得る
	tmpX<-c(t(cbind(tmpPlot[[1]][First,1],tmpPlot[[1]][Second,1])))
	tmpY<-c(t(cbind(tmpPlot[[1]][First,2],tmpPlot[[1]][Second,2])))
	tmpZ<-c(t(cbind(P[First],P[Second])))
	# エッジをプロットする
	segments3d(tmpX,tmpY,tmpZ,col=2)
}# 定数倍項のループ、終わり