Md カテゴリカルデータと正単体

提供: StatGenetKyotoU
移動: 案内検索
カテゴリカルデータと正単体
カテゴリ 名称 説明
医学生物学トピック データの型 フェノタイプの観察はデータの型に沿って行われる
医学生物学トピック SNP 一塩基多型
医学生物学トピック ハプロタイプ アレル、アレルの組み合わせ
医学生物学トピック 点突然変異、交叉・組み換え、遺伝的浮動 遺伝的多様性の3要素
医学生物学トピック IBD Identity by descent アレルが祖先を共有すること
数学トピック 座標・多次元座標・デカルト座標 座標、座標変換、基底
数学トピック 正単体 正三角形・正四面体の一般化したもの
数学トピック 置換群・順列 並べ方
R関数・Rスキル plot(),points(),segments() 幾何図形の描図
R関数・Rスキル rgl パッケージ plot3d(),points3d(),segments3d() 3次元描図
R関数・Rスキル  %*% 行列の積
  • このモジュールの主要な点と目標
    • データの型について理解する
    • カテゴリカル尺度と正単体との関係を理解する
    • カテゴリカル尺度が順序のある尺度に置き換わることがあることを理解する
    • 正単体と対称群(置換群)の関係について理解する
    • 順列・置換の行列表現について理解する
    • 多次元座標の取扱いについて理解する
    • 置換多面体について知る
  • このモジュールのトピック
    • 医学生物学
      • 観察する尺度とそのデータ型
        • データの型
名称 取りうる値 順序 幾何
2値カテゴリ {0,1} なし、あり 1次元直線上の2点
3値以上カテゴリ(順序なし) {0,1,2,...,k} なし k-1正単体
3値以上カテゴリ(順序あり) {0,1,2,...,k} あり 1次元直線上のk点
連続値 実数 あり 1次元直線
        • 医学生物学でのデータとデータの型に関して
          • データ型に関して
            • 研究においてデータを取ることとデータの型がどうなっているかについての全般的な理解をするための記事群へのリンク
          • 複数尺度の組み合わせとしての診断基準
            • 疾患を定義するときに複数の尺度を用いることがあり、診断基準と呼ばれる
            • 関節リウマチの例
        • カテゴリカルデータと正単体
          • 2値カテゴリは、2つのあい対する2要素と見ることもできれば、1つの軸上の異なる2点・異なる2方向と見ることもできる。したがって、2つの順序のないカテゴリとも、2つの順序のあるカテゴリともみられる。空間への配置で考えれば、1次元空間の2点として配置できる
          • 3値カテゴリの場合は、3つの相互に対等な3要素と見れば、その空間配置は、2次元空間における正三角形の3頂点に配置できる。もし3カテゴリに順序があれば、3点は1次元直線上の3点として配置することになる
          • 同様に4値カテゴリの場合には、相互に対等な4要素と見れば、その空間配置は、3次元空間における、正四面体の4頂点に配置することとなる。順序がある場合には、1次元直線上の4点となる
          • 一般に、n値カテゴリは、相互に対等とみなせるとき、n-1次元空間における、n個の頂点を持つ多面体の頂点に配置することができる。このような、正三角形、正四面体を一般次元に拡張したものが正多面体である。n正多面体は、n次元空間における頂点数n+1の多面体なので、n値カテゴリは、n-1正多面体の頂点に配置することができる。nカテゴリに順序がある場合には、1次元直線上に配置することができる
          • n+1個の頂点を持つn正単体があるとき、すべての頂点の重心を原点とした頂点の位置ベクトルを考えたとき、任意の2頂点の位置ベクトルがなす角度\theta \cos(\theta )=-{\frac  {1}{n}}である。このことは、\cos(\theta )は0ではない、すなわち\theta は直角ではないことを意味しており、複数のカテゴリは相互に独立ではないことと関係している

2-3.jpeg

      • 3カテゴリの例:IBD
        • IBD(Identity-by-descent)とは、Wikiの記事はこちら。ある2人の座位のアレルの祖先を比べたときに、同一の染色体に由来していることを言う。したがって、IBDの数は、最大で2であり、1のこともあって、0のこともある
        • 1卵生双生児の場合IBD数は必ず2である
        • 親子の場合は近親婚がなければIBD数は必ず1である
        • 同胞の場合は近親婚がなければIBD数は2か1か0であって、その確率は0.25,0.5,0.25である
        • 今、ある血縁関係にあるときIBD数が0,1,2である確率を3つの値でV=(v_{1},v_{2},v_{3});0\leq v_{i}\leq 1のように表すとする
        • このときv_{1}+v_{2}+v_{3}=1である
        • IBD数=0,IBD数=1,IBD数=2を3つのカテゴリと考えると、3カテゴリを正三角形の頂点に配置することができる
        • ここで、正単体(今の場合は正三角形)の頂点座標ベクトルを用いると、V=(v_{1},v_{2},v_{3});0\leq v_{i}\leq 1が正単体の周と内部の点に対応づけることができる
        • たくさんのSNPデータを用いて、個人間のIBD数確率を推定することがある。その推定値を用いて、同様に三角形にプロットすることも可能(こちらの記事で)
IBD数別確率
血縁関係 IBD=0 IBD=1 IBD=2
1卵性双生児 0 0 1
親子 0 1 0
同胞 0.25 0.5 0.25
祖父母-孫 0.75 0.25 0

IBDtriangle.jpeg

# n正単体の頂点座標を算出する関数
CategoryVector<-function (d = 3) 
{
    df <- d - 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
    as.matrix(m[, 1:df])
}
cv3<-CategoryVector(3)
print(cv3)
# 正三角形を描く
xlim<-ylim<-range(cv3)
plot(cv3[,1],cv3[,2],cex=0.1,xlim=xlim,ylim=ylim)
segments(cv3[1:3,1],cv3[1:3,2],cv3[c(2,3,1),1],cv3[c(2,3,1),2])
# 一卵性双生児 赤
vMZ<-c(0,0,1) # 確率ベクトル
pMZ<-vMZ%*%cv3 # 正単体頂点ベクトルを用いて2次元座標を算出
points(pMZ,col=2,pch=19,cex=3)
# 親子 緑
vPO<-c(0,1,0)
pPO<-vPO%*%cv3
points(pPO,col=3,pch=19,cex=3)
# 同胞 青
vSib<-c(0.25,0.5,0.25)
pSib<-vSib%*%cv3
points(pSib,col=4,pch=19,cex=3)
# 祖父母-孫 水色
vGG<-c(0.75,0.25,0)
pGG<-vGG%*%cv3
points(pGG,col=5,pch=19,cex=3)
      • 4カテゴリの例:ハプロタイプと交叉・組み換え、連鎖不平衡、遺伝的浮動
        • 2アレル型のSNPが2個あるとき、それが作るハプロタイプは最大で4種類ある
        • 第1SNPの2アレルをA,a、第2SNPのそれをB,bとすれば、4ハプロタイプはAB,Ab,aB,abの4種類である
        • 今、染色体集団の時間経過を次ような簡単なモデルで考える
          • N本の染色体があって、1世代ごとに染色体の子孫世代に置き換わるとする
          • 染色体の総本数は変わらないものとする
          • 次世代の染色体は、現世代の染色体の任意の2本がペアを作り、そのどちらか片方を次世代の染色体として伝えるとする
          • 現世代の染色体のペアの間には、ある確率rで組み換えが起きるものとする
          • このとき、4種類のハプロタイプの染色体本数をh(AB),h(Ab),h(aB),h(ab)とすれば、h(AB)+h(Ab)+h(aB)+h(ab)=Nである
        • このシミュレーションでは、2つの多型とその組み合わせの時間経過を見ている
          • 多型が生じる出発点は、点突然変異(Wikiの記事)である
          • 多型の複数のアレルの伝達は、頻度を反映しつつ、偶然の要因により多めに伝達したり、少なめに伝達したりする。このような増減を遺伝的浮動(Wikiの記事)という
          • 有限サイズの集団では、遺伝的浮動によって、あるアレルが集団から消滅することがある
          • 複数の多型があるとき、それぞれの多型のアレルの組み合わせがあるが、交叉・組み換えによって、このアレル組合せが入れ替えられる。十分に組み換えが起きると、アレルの組み合わせ(ハプロタイプ)の頻度は、連鎖平衡の状態に至るが、組み換えが不十分であると不平衡と呼ばれる状態にあり、そのときには、ハプロタイプの頻度が、平衡状態から逸脱した状態となる(連鎖不平衡のWiki記事)
          • 以下のシミュレーションでは、2SNPが作りうる4ハプロタイプのうち、2ハプロタイプしか存在しない状態から、組み換えと遺伝的浮動の影響を受けながら、ハプロタイプ頻度が変遷する様子を図示したものである

HaplotypeDrift.jpeg HaplotypeDrift2.png

# シミュレーションする世代数
Ngen<-120
# 染色体数
N<-100
# 1世代あたりの組み換え体発生率
r<-0.2
# 行:世代、列:個々の染色体、値=1,2,3,4(ハプロタイプID)の行列
m<-matrix(0,Ngen,N)
# 第1世代は、ハプロタイプ1(AB)が80本、abが20本で指定
m[1,]<-c(rep(1,80),rep(4,20))
# 親ハプロタイプのペアについて、生じる組み換え体を指定する行列
recMatrix<-matrix(c(1,2,1,2,1,2,1,2,3,4,3,4,3,4,3,4),4,4,byrow=TRUE)
# 第2世代以降をシミュレーション
for(i in 2:Ngen){
	# 両親は現世代からランダムに選ぶ
	parents<-matrix(sample(m[i-1,],N*2,replace=TRUE),ncol=2)
	# 組み換え体として生じる子染色体をランダムに選ぶ
	recs<-which(runif(N)<r)
	# 第一の親のハプロタイプが原則として次世代に伝わるとして
	offsprings<-parents[,1]
	# 組み換え体となる子染色体ハプロタイプだけ、入れ替える
	for(j in 1:length(recs)){
		offsprings[recs[j]]<-recMatrix[parents[recs[j],1],parents[recs[j],2]]
	}
	# 行列に格納する
	m[i,]<-offsprings
}

#print(m)
# 各世代のハプロタイプ本数を数える
mt<-apply(m,1,tabulate,nbins=4)
# 頻度に直す
mtf<-mt/N
# 4ハプロタイプの頻度の推移をプロットする
matplot(t(mtf),type="l",xlab="generations",ylim=c(0,1),ylab="frequency")
# 4カテゴリのための正単体(正四面体の4頂点座標を計算する
cv4<-CategoryVector(4)

# 各世代のハプロタイプ頻度から、3次元空間座標を算出する
p<-t(mtf)%*%cv4

# 3次元プロット用のパッケージrglを使う
library(rgl)
# 3軸の範囲を決める
xlim<-ylim<-zlim<-range(cv4)
# ハプロタイプ頻度の推移を3次元空間での軌跡としてプロットする
plot3d(p,xlim=xlim,ylim=ylim,zlim=zlim,type="l",lwd=5,col=rainbow(N))
# 正四面体の6辺を描く
for(i in 1:3){
	for(j in (i+1):4){
		segments3d(cv4[c(i,j),])
	}
}
        • この描図法を用いると、2SNPの作る4ハプロタイプに関する連鎖不平衡状態が、正四面体内部に曲面として存在することも示せる

LEsurface.png

# 3次元プロット用のパッケージrglを使う
library(rgl)
# 4カテゴリのための正単体(正四面体の4頂点座標を計算する
cv4<-CategoryVector(4)
# 3軸の範囲を決める
xlim<-ylim<-zlim<-range(cv4)
# 2SNPのアレル頻度を0から1の範囲で小刻みに指定する
p1<-seq(from=0,to=1,length=101)
p2<-p1
# p1とp2との値の組み合わせを作る
p12<-expand.grid(p1,p2)
# p1,p2の値のときの連鎖平衡状態での4ハプロタイプ頻度を算出する
hs<-matrix(0,length(p12[,1]),4)
hs[,1]<-p12[,1]*p12[,2]
hs[,2]<-p12[,1]*(1-p12[,2])
hs[,3]<-(1-p12[,1])*p12[,2]
hs[,4]<-(1-p12[,1])*(1-p12[,2])
# 3次元の正四面体座標を計算する
LEp<-hs%*%cv4
# プロットする
plot3d(LEp,xlim=xlim,ylim=ylim,zlim=zlim,type="l",lwd=5,col=rainbow(103))
# 正四面体の6辺を描く
for(i in 1:3){
	for(j in (i+1):4){
		segments3d(cv4[c(i,j),])
	}
}
    • 数学
      • 座標と座標変換
        • k個(複数)の尺度があるときに、要素は尺度のkだけ値を持つ
        • k個の値のセットをベクトルとして扱い、それをk次元空間の位置で表すことを次の記事『座標・基底・座標変換』で扱う
        • 座標・基底・座標変換
      • 正単体
        • 上記のとおり、複数の要素が相互に対等であるとき、要素を空間上の点で表すときには、要素数よりも1小さい次元の空間に配置した正単体の頂点とすることができる
        • 正単体の一般的な事項はWikiの記事
        • 正単体は「空間での均等配置」であるので、球面に均等配置することとも関係する→参考記事『多次元球面の均等配置
      • 順列・置換・対称群(置換群)
        • 複数の要素にラベル(1,2,...とか)を貼り付けてあって、一列に並べてあるとする。要素は相互に対等であるとき、順序を入れ替えてもよいはずである。すべての要素の並び順を入れ替えたものが置換であって、いわゆる「順列と組み合わせ」の「順列」も全要素の並べ方の場合として考えれば(n!)置換である。「対等である」ことは、「配置で言えば『対称的』」なので、群論で扱うと、「順列・置換」に関する群は「対称群(置換群)」と呼ぶ。これらについて順列・置換・対称群(置換群)を参照
    • R関数・Rスキル
      • 完全グラフを描く(ことでRを用いて幾何図形を描く方法を覚える)
      • 正単体頂点座標ベクトルを算出する
      • sample(),permutations()
  • その他の関連する話題
    • 順列と巡回の合成(こちら)、ヤング図形(対称群・置換群)
    • 正単体とグラフ
      • 正単体は、すべての頂点が対等な関係にあるので。今、頂点をノードで表し、すべてのノードのペアに同一の関係があることを、エッジを引くことで表せば、以下に示すようなグラフとなり、それは、完全グラフ(Wikiの記事)と呼ばれるものである

http://www.genome.med.kyoto-u.ac.jp/func-gen-photo/albums/StatGenetTextbook/2-4.jpeg